List Customization Configs#

Get a list of available customization configurations and their details to determine which models are available for fine-tuning.

Tip

These configs are typically added by your cluster administrator during the initial setup of NeMo Customizer.

Prerequisites#

Before you can get a list of customization configurations, make sure that you have:

  • Access to the NeMo Customizer service

  • Set the CUSTOMIZER_BASE_URL environment variable to your NeMo Customizer service endpoint

export CUSTOMIZER_BASE_URL="https://your-customizer-service-url"

To List Customization Configs#

Choose one of the following options to get a list of available customization configurations.

Discovering All Configurations (Including Disabled)#

To see all configurations in your environment, including those that are disabled, use the following approaches:

import os
from nemo_microservices import NeMoMicroservices

# Initialize the client
client = NeMoMicroservices(
    base_url=os.environ['CUSTOMIZER_BASE_URL']
)

# List ALL configurations (including disabled ones)
all_configs = client.customization.configs.list(
    page=1,
    page_size=50,  # Increase page size to see more configs
    sort="-created_at"
    # Note: No enabled filter to see both enabled and disabled configs
)

print(f"Found {len(all_configs.data)} total configs")
for config in all_configs.data:
    status = "✓ Enabled" if config.target.enabled else "✗ Disabled"
    print(f"{status}: {config.name} - {config.description}")

# List only disabled configurations
disabled_configs = client.customization.configs.list(
    page=1,
    page_size=50,
    sort="-created_at",
    filter={
        "enabled": False
    }
)

print(f"\nFound {len(disabled_configs.data)} disabled configs:")
for config in disabled_configs.data:
    print(f"Disabled: {config.name} - {config.description}")
# List ALL configurations (including disabled)
curl \
  "${CUSTOMIZER_BASE_URL}/v1/customization/configs" \
  --data-urlencode "page=1" \
  --data-urlencode "page_size=50" \
  --data-urlencode "sort=-created_at" | jq

# List only disabled configurations
curl \
  "${CUSTOMIZER_BASE_URL}/v1/customization/configs" \
  --data-urlencode "page=1" \
  --data-urlencode "page_size=50" \
  --data-urlencode "sort=-created_at" \
  --data-urlencode "filter[enabled]=false" | jq

Filtering Enabled Configurations#

To see only enabled configurations (the default behavior for most use cases):

import os
from nemo_microservices import NeMoMicroservices

# Initialize the client
client = NeMoMicroservices(
    base_url=os.environ['CUSTOMIZER_BASE_URL']
)

# List customization configs with filters
configs = client.customization.configs.list(
    page=1,
    page_size=10,
    sort="-created_at",
    filter={
        "target_base_model": "meta/llama-3.1-8b-instruct",
        "training_type": "sft",
        "finetuning_type": "lora",
        "enabled": True
    }
)

print(f"Found {len(configs.data)} enabled configs")
for config in configs.data:
    print(f"Config: {config.name} - {config.description}")
BASE_MODEL="meta/llama-3.1-8b-instruct"
TRAINING_TYPE="sft"
FINETUNING_TYPE="lora"

curl \
  "${CUSTOMIZER_BASE_URL}/v1/customization/configs" \
  --data-urlencode "page=1" \
  --data-urlencode "page_size=10" \
  --data-urlencode "sort=-created_at" \
  --data-urlencode "filter[target_base_model]=${BASE_MODEL}" \
  --data-urlencode "filter[training_type]=${TRAINING_TYPE}" \
  --data-urlencode "filter[finetuning_type]=${FINETUNING_TYPE}" \
  --data-urlencode "filter[enabled]=true" | jq

You can either use the full {namespace}/{name} fields of a returned config object, or just use name (which would use the default namespace), and set the config parameter when creating a customization job.


Hardware Compatibility#

B200 and A100 Configuration Compatibility#

A100 configurations are compatible with H100, B200, and any other GPU with 80 GB memory. The configurations are primarily designed around GPU memory requirements rather than specific hardware models. When you see configurations labeled with +A100, they will work with any GPU that has similar memory characteristics.

Important

B200 Compatibility: Configurations marked as +A100 (such as llama-3.1-8b-instruct@v1.0.0+A100) are fully compatible with B200 GPUs. The configuration naming reflects the original target hardware, but the underlying resource requirements work across compatible GPU families.

Enabling Disabled Configurations#

Configurations are considered “disabled” when their underlying customization targets are disabled. To make these configurations available, you need to enable the corresponding target using the update target endpoint:

# Enable the target to make configurations available
updated_target = client.customization.targets.update(
    target_name="meta/llama-3.1-8b-instruct@2.0",
    namespace="default",
    enabled=True
)

Once the target is enabled, all configurations that reference that target become available for use. Note that configurations themselves do not have an enabled field - they inherit their availability from their underlying target’s status.

Note

Administrator Access Required: Enabling or disabling customization targets typically requires administrator privileges. Contact your cluster administrator if you need to enable additional model targets.

Example Response
{
    "id": "customization_target-A5bK7mNpR8qE9sL2fG3hJ6",
    "created_at": "2024-11-26T02:58:55.339737",
    "updated_at": "2024-11-26T02:58:55.339737",
    "name": "meta/llama-3.1-8b-instruct@2.0",
    "namespace": "default",
    "description": "Meta Llama 3.1 8B Instruct model",
    "enabled": true,
    "base_model": "meta/llama-3.1-8b-instruct",
    "model_path": "llama-3_1-8b-instruct_2_0",
    "model_uri": "ngc://nvidia/nemo/llama-3_1-8b:2.0",
    "num_parameters": 8000000000,
    "precision": "bf16",
    "status": "ready",
    "tokenizer": {},
    "project": null,
    "custom_fields": [],
    "ownership": {}
}

Tip

The num_gpus multiplied by the num_nodes is the total number of GPUs required to run a fine tuning.