Skip to main content
This guide describes how to deploy models with specific configurations on SambaStack by authoring custom resources: a ModelDeployment to serve a single model, or a ModelBundle to serve several models together. In SambaStack, a deployment serves one or more models on a single node, together with their configurations, including batch sizes and sequence lengths. This approach uses the SambaNova Reconfigurable Dataflow Unit (RDU) to support multiple models and configurations in a single deployment. Because every model in a deployment is already resident, switching between them does not require reloading weights, which increases throughput compared with deployments that load a single static model. For example, a single bundle can serve both Llama-3.3-70B-Instruct and Llama-3.1-8B-Instruct, allowing you to switch between them almost instantly. Each configuration occupies space on the node, so different bundles contain different sets of configurations. A copy of Llama-3.3-70B-Instruct with a batch size of 4 and a sequence length of 16k represents one configuration. For the bundles that SambaNova provides, see Supported Models and Bundles.
SambaStack v2.0.2 introduces a new set of Kubernetes custom resources (CRs) to manage how bundles are deployed. The CRs in older versions of SambaStack are deprecated and will be functional until September 30, 2026. Model bundles built using the deprecated CRs will need to be migrated.
A bundle is optional. To serve a single model, pair it with a model profile and deploy it directly. Create a bundle when you want to serve several models as one unit, configure speculative decoding, or validate and share a named configuration.
This guide covers both deploying the bundles that SambaNova provides and authoring your own. For the catalogue of provided bundles, see Supported Models and Bundles.

Prerequisites

Before creating custom deployments or bundles, complete the following that applies to you:

Quickstart - Hosted

System set up for hosted SambaStack

Quickstart - On-prem

System set up for On-prem Sambastack
Additionally, review the following documentation:

Terminology

Concepts

Resource architecture

This section covers the resource structure used when creating custom deployments. All of these resources use apiVersion: sambanova.ai/v1alpha1. Light boxes are provided with the SambaStack installation and referenced by name; darker boxes are what you author. The amber box is not a custom resource, but a single Model and ModelProfile pairing, which corresponds to one entry in spec.modelConfigs. The resources divide responsibility as follows:
  1. Pef - Registers a compiled executable and the metadata describing what it supports, including its model architecture, batch size, and maximum sequence length.
  2. ModelProfile - Defines how a model architecture can be run: which PEFs it uses, which features it supports, and the batch sizes available at each sequence length tier.
  3. Model - Defines which checkpoints are available for each architecture, along with the tokenizer to use.
  4. ModelBundle - Combines one or more model and profile pairs into a single named, deployable unit. Optional.
  5. ModelDeployment - Instantiates one or more replicas on the cluster, either from a bundle or from an inline model and profile pair.
This separation allows you to:
  • Deploy a single model by pairing it with a profile, without creating a bundle
  • Reuse one profile across every model and checkpoint that shares its architecture, including custom checkpoints for fine-tuned models
  • Serve a custom checkpoint by adding a Model resource only, leaving the profile untouched
  • Group several models into one validated, shareable unit when you need them served together
  • Update checkpoints without modifying profiles or deployment configurations
  • Deploy the same configuration with different replica counts
Checkpoint paths are never declared in a bundle or a deployment. The operator resolves them from the Model you reference, either through the <model-name>[:<arch>][:<version>] reference or through modelSettings.checkpointOverrides.Compatibility between a checkpoint and a profile is defined by model_arch, but the operator does not verify it. Select a checkpoint whose architecture is compatible with the profile you reference.

ModelProfile structure

A ModelProfile defines the runtime shape of a single model architecture. Profiles are reusable, and the profiles for supported architectures are provided with the SambaStack installation, so in most cases you reference an existing profile by name rather than authoring one.
ModelProfile Top-Level Fields

Batching configuration

A batching configuration maps each sequence length tier to the batch sizes served at that length. Common tier keys are 8k, 16k, 32k, 64k, and 128k. PEFs below 1k use a bare integer key, for example 448, and vocoder PEFs use a codes-length key in the form <n>t, for example 10t.
Including multiple batch sizes for each tier allows the inference engine to select the smallest and fastest configuration based on current workload.

Overriding a batching configuration

A ModelProfile establishes the batch sizes available at each tier, so a defaultBatchingConfig always lists them explicitly. It never uses "*". The tier-to-batch_sizes structure is reused when you override a profile’s defaults for one model, either through modelConfigs[].batchingConfig in a ModelBundle or through the inline spec.models of a ModelDeployment. Only in an override can batch_sizes be set to the string "*", which selects every batch size the profile’s defaultBatchingConfig provides for that tier:
An override can only narrow or restate what the profile already provides. It cannot introduce a batch size that the profile’s defaultBatchingConfig does not contain.

PEFs

A PEF is the compiled artifact for one model configuration. The profile selects which PEF, sequence size, and batch size are used, so you reference a profile rather than a PEF. For the Pef resource reference, see Deploying custom checkpoints.

ModelBundle structure

A ModelBundle combines one or more model and profile pairs into a single named, deployable unit. Each entry in spec.modelConfigs references a model and a profile by name and can specify per-model batching and model settings. The following example shows a multi-model bundle:
The example above includes three models, with Meta-Llama-3.1-8B-Instruct serving as the non-routable draft model for Meta-Llama-3.3-70B-Instruct. ModelBundle Top-Level Fields

Model configurations

Each entry in spec.modelConfigs pairs one model with one profile: Batching is resolved in the following order of precedence: the model configuration’s batchingConfig, then the profile’s defaultBatchingConfig, then a configuration generated from the PEF grouping.

Swappable models

The swappable setting controls whether a model can be evicted from HBM in favor of another model on the same endpoint. When swappable is set to true, the entire model is removed from HBM if a different model needs to run on that endpoint. This includes the model’s checkpoint weights, its profile metadata, and its PEFs. Set this field to true for models that can be evicted in order to free capacity for another model, and leave it unset or set it to false for models that must remain resident.

Speculative decoding

In speculative decoding, a smaller draft model proposes tokens and a larger target model verifies them. The pairing is declared at the bundle level in spec.specDecodingPairs, and the draft model is included as its own non-routable entry in spec.modelConfigs. For the field reference, requirements, and the full workflow including custom draft checkpoints, see Deploying with speculative decoding.

ModelDeployment structure

A ModelDeployment instantiates models on the cluster and creates the serving pods behind a routable inference endpoint. For detailed deployment information, see Quickstart - Hosted or Quickstart - On-prem. Set exactly one model source:

Legalizer results

The legalizer validates a configuration’s resource requirements before deployment. It runs automatically when you apply a ModelBundle, and its results are published under status.legalizerInfo. The bundle status also reports the effective batching configuration that was resolved for each model.
Example status for a bundle that passed with warnings:
A bundle can pass the legalizer with warnings present, as in the example above, and still report ValidationSucceeded. Review warnings before deploying, but they do not prevent deployment.
The utilization fields show N/A when skip_legalizer: true is set on a bundle that has been legalized at least once. If the bundle has never been legalized, for example because skip_legalizer: true was set from initial deployment, legalizerInfo is absent entirely. The utilization field may also be absent if the legalizer output could not be parsed.

Procedures

Identify available models and profiles

Before authoring a deployment, identify the models and profiles available in your cluster and determine which pair together.
1

List available models

List the models and note the architecture keys under each model’s spec.checkpoints:
Example:
2

List available profiles

List the profiles and note the model_arch value of each:
Output:
3

Match a profile to a model

View a profile to confirm its architecture, features, and batching support:
A profile can be used with a model when the profile’s model_arch value matches one of the architecture keys under the model’s spec.checkpoints. The operator does not verify this pairing, so confirm it yourself before deploying. Review the profile for:
  • model_arch - The architecture the profile targets
  • features - Optional features the profile’s PEFs support
  • defaultBatchingConfig - Sequence length tiers and their batch sizes
  • pefs - The PEF versions the profile references
A profile whose features list includes speculative_decoding requires a draft model. Pair it using spec.specDecodingPairs in a bundle.

Deploy a single model

To serve one model, pair it with a profile and deploy it directly. No bundle is created.
1

Create the YAML file

Create a YAML file that declares the model and profile inline under spec.models:
A checkpoint path is not required, because the checkpoint is resolved from the referenced Model.
2

Apply the ModelDeployment

3

Monitor deployment status

The deployment is complete once all of its serving pods report a ready status.

Create a ModelBundle

Create a bundle to serve several models as one unit, to configure speculative decoding, or to validate and share a named configuration.
1

Create the YAML file

Create a YAML file for your ModelBundle:
For multi-model bundles with speculative decoding, see the ModelBundle Structure example.
2

Apply the ModelBundle

3

Verify legalizer validation

The legalizer automatically runs when you apply the bundle and validates whether the configuration fits in RDU memory.
To read the legalizer result directly, including memory utilization and any warnings:
For the full status structure and field descriptions, see Legalizer results.
Do not proceed to deployment until the bundle shows ValidationSucceeded.

Deploy a bundle

This procedure applies both to bundles that SambaNova provides and to bundles you authored.
1

Discover the available bundles

List the bundles present in the cluster and note the name of the one you want to deploy:
Output:
Before deploying, confirm the bundle passed validation, as described in Legalizer results.
2

Create a ModelDeployment

Insert the bundle name into spec.bundle:
3

Apply the ModelDeployment

4

Monitor deployment status

Switch bundles

A ModelDeployment’s bundle reference cannot be changed in place. To serve a different bundle, delete the existing deployment and apply a new one that references the new bundle.
1

Delete the existing ModelDeployment

2

Apply a ModelDeployment for the new bundle

Author a new ModelDeployment whose spec.bundle names the bundle you want to serve, then apply it as described in Deploy a bundle.
To request new bundles, contact SambaNova support.

Deploy multiple bundles

To serve more than one bundle at a time, apply a separate ModelDeployment for each bundle.
SambaStack supports only one bundle per node. When deploying multiple bundles, assign each bundle to separate nodes to avoid resource conflicts. Use spec.nodeSelector on each ModelDeployment to control placement.
Verify that the pods reflect the deployed bundles:

Deploy a custom checkpoint

To serve your own converted or fine-tuned checkpoint, either override the checkpoint used by an existing model or register a new model for it. See Deploying custom checkpoints.

Add a custom model architecture

Serving a model architecture that SambaStack does not yet support requires compiling a PEF and authoring Pef, ModelProfile, and Model resources. See Deploying custom checkpoints.

Update or remove a deployment or bundle

1

Modify the YAML file

Edit the ModelBundle, ModelProfile, or ModelDeployment YAML file with your changes.
2

Reapply the configuration

The legalizer automatically revalidates the changes. Changing a profile or a model triggers a reconcile of every bundle and deployment that references it.

Troubleshooting

Legalizer validation failures

Errors appear in status.legalizerInfo.errors and cause ValidationFailed. Warnings appear in status.legalizerInfo.warnings and do not block deployment. See Legalizer results.

Deployment failures

Migrating bundle configuration

Migrate bundles built with the deprecated custom resources

Supported Models and Bundles

Catalogue of models and bundles available for deployment

Custom checkpoint deployment

Deploy your own custom or fine-tuned checkpoints

Checkpoint Conversion Tool

Convert Checkpoints to Compatible formats