Deploying Solution Blueprints with Helm#

Solution Blueprints are provided as Helm Charts.

The recommended approach to deploy them is to pipe the output of helm template to kubectl apply -f -. We don’t recommend helm install, which by default uses a Secret to keep track of the related resources.

This does not work well with Enterprise clusters that often have limitations on the kinds of resources that regular users are allowed to create.

An example for command-line usage:

name="my-deployment"
namespace="my-namespace"
chart="aimsb-my-chart"
helm template $name oci://registry-1.docker.io/amdenterpriseai/$chart \
  | kubectl apply -f - -n $namespace

Using an existing deployment or external LLM#

By default, any required AIMs are deployed by the helm chart. If you already have a compatible AIM deployed, you can use that instead, and reuse resources.

To use an existing deployment or external model, set the corresponding existingService value to that endpoint. For instance, with an LLM, set the value of llm.existingService. Then, any other values you pass in the llm mapping are simply ignored, and your existing service is used instead. You should use the Kubernetes Service name, or if the service is in a different namespace, you can use the long form <SERVICENAME>.<NAMESPACE>.svc.cluster.local:<SERVICEPORT>. If needed, you can pass a whole URL.

Full example command:

name="my-deployment"
namespace="my-namespace"
chart="aimsb-my-chart"
servicename="aim-llm-my-model-123456"
helm template $name oci://registry-1.docker.io/amdenterpriseai/$chart \
  --set llm.existingService=$servicename \
  | kubectl apply -f - -n $namespace

Providing a Hugging Face token#

Some models may require a Hugging Face token to download gated assets at runtime. If a token is required, provide it through a Kubernetes Secret and pass it in values as HF_TOKEN.

If a relevant Kubernetes Secret is not already available, create the secret in the target namespace:

namespace="my-namespace"
kubectl create secret generic hf-token \
  --from-literal=hf-token="<YOUR_HF_TOKEN>" \
  -n $namespace

After that, it can be specified in the deployment command:

name="my-deployment"
namespace="my-namespace"
chart="aimsb-my-chart"
helm template $name oci://registry-1.docker.io/amdenterpriseai/$chart \
  --set llm.env_vars.HF_TOKEN.name=hf-token \
  --set llm.env_vars.HF_TOKEN.key=hf-token \
  | kubectl apply -f - -n $namespace

If the chart uses a different component key (for example coderLLM or autocompleteLLM), set env_vars.HF_TOKEN under that component instead of llm.

Pulling the helm charts#

To access the helm chart, its values.yaml, and any additional override files that may be distributed alongside the chart, simply helm pull the chart. The chart is a GZIP TAR archive, with a name that includes the version that you pulled. Thus this may require interactively checking the name of TAR that you pulled.

An example pull and untar command:

chart="aimsb-my-chart"
helm pull oci://registry-1.docker.io/amdenterpriseai/$chart
# List the directory, the file will appear with a name like $chart-<version>.tgz
ls -lah .
version=1.2.3
tar -xzf $chart-$version.tgz
cd $chart

Using ephemeralStorage or different storageClasses#

The default storageClass in Solution Blueprints is mlstorage, which is the default for AMD Enterprise AI clusters. To avoid using a storageClass altogether, and fall back to ephemeral storage, override the storageClassName to null. Similarly, the storageClassName can be overridden to a different one to use a different storageClass.

For example:

name="my-deployment"
namespace="my-namespace"
chart="aimsb-my-chart"
helm template $name oci://registry-1.docker.io/amdenterpriseai/$chart \
  --set llm.storage.ephemeral.storageClassName=null \
  | kubectl apply -f - -n $namespace

Deleting Solution Blueprint resources with Helm#

To remove a deployed Solution Blueprint, use the same helm template command with kubectl delete instead of kubectl apply. This ensures all resources created by the chart are cleanly removed.

name="my-deployment"
namespace="my-namespace"
chart="aimsb-my-chart"
helm template $name oci://registry-1.docker.io/amdenterpriseai/$chart | kubectl delete -f - -n $namespace