Skip to navigation

Manage Model Entities for Customization

View as Markdown

Before running a customization job, you need to set up a Model Entity that points to your base model checkpoint. This section covers creating the required FileSet and Model Entity.

Task Guides


Key Concepts

What is a FileSet?

A FileSet is a collection of files managed by the platform. For customization, you create a FileSet containing:

  • Model weights (.safetensors, .bin, or .nemo files)
  • Model configuration (config.json)
  • Tokenizer files (tokenizer.json, tokenizer_config.json, and so on)

FileSets can be populated from:

  • Hugging Face Hub - Download directly from HF repositories
  • NGC - Download from NVIDIA NGC catalogs
  • Local upload - Upload files from your local machine

What is a Model Entity?

A Model Entity is the platform’s representation of a model. It contains:

  • FileSet reference - Points to where the model files are stored
  • Model Spec - Auto-populated metadata about the model architecture
  • Adapters - LoRA or other adapters attached to this model (populated after training)
  • Base model link - For fine-tuned models, links back to the parent

Quick Start Example

Complete example of setting up a model for customization:

Hugging Face Token: If downloading from a gated Hugging Face repository, you will need to create a secret containing your Hugging Face API token first. Refer to Manage Secrets for instructions.

import time
from nemo_helix_plugin.client.client import NemoClient
from nemo_helix_plugin.client.errors import ConflictError
from nemo_helix_plugin.files.storage_config import HuggingfaceStorageConfig
from nemo_helix_plugin.files.types import CreateFilesetRequest
from nemo_helix_plugin.models.types import CreateModelEntityRequest
client = NemoClient.from_config()
# Step 1: Create FileSet from Hugging Face
try:
fileset = client.files.create_fileset(
body=CreateFilesetRequest(
name="nemotron-3-5-lightning-30b-a3b",
description="Nemotron 3.5 Lightning 30B A3B base model from Hugging Face",
storage=HuggingfaceStorageConfig(
repo_id="nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-BF16",
repo_type="model",
),
),
).data()
print(f"Created FileSet: {fileset.name}")
except ConflictError:
print("FileSet already exists, retrieving...")
fileset = client.files.get_fileset(name="nemotron-3-5-lightning-30b-a3b").data()
# Step 2: Create Model Entity
try:
model = client.models.create_model(
body=CreateModelEntityRequest(
name="nemotron-3-5-lightning-30b-a3b",
fileset="default/nemotron-3-5-lightning-30b-a3b", # Reference to the FileSet
description="Nemotron 3.5 Lightning 30B A3B base model for customization",
),
).data()
print(f"Created Model Entity: {model.name}")
except ConflictError:
print("Model Entity already exists, retrieving...")
model = client.models.get_model(name="nemotron-3-5-lightning-30b-a3b").data()
# Step 3: Wait for ModelSpec to be auto-populated
print("Waiting for model spec to be populated...")
while not model.spec:
time.sleep(5)
model = client.models.get_model(name="nemotron-3-5-lightning-30b-a3b").data()
print(f"Model ready!")
print(f" Architecture: {model.spec.family}")
print(f" Parameters: {model.spec.base_num_parameters:,}")
print(f" Layers: {model.spec.num_layers}")

These examples use the default workspace. If your current CLI context uses a different workspace, run nemo config set --workspace default first. To check, run nemo config view.

After the Model Entity is ready (has a spec), you can use it in customization jobs with model: "default/nemotron-3-5-lightning-30b-a3b".