Update an existing Customization Config#
Prerequisites#
Before you can update a customization configuration, make sure that you have:
Access to the NeMo Customizer service
Set the
CUSTOMIZER_BASE_URLenvironment variable to your NeMo Customizer service endpoint
export CUSTOMIZER_BASE_URL="https://your-customizer-service-url"
To Update an Existing Customization Config#
Choose one of the following options to update an existing customization config.
Here we will update the description and enable the configuration. By setting the enabled parameter to true, the configuration is visible by default and usable when creating jobs.
import os
from nemo_microservices import NeMoMicroservices
# Initialize the client
client = NeMoMicroservices(
base_url=os.environ['CUSTOMIZER_BASE_URL']
)
# Update customization config
updated_config = client.customization.configs.update(
config_name="llama-3.1-8b-instruct@v1.0.0+A100",
namespace="default",
description="Updated description",
enabled=true
)
print(f"Updated config: {updated_config.name}")
print(f"New description: {updated_config.description}")
print(f"Is enabled?: {updated_config.enabled}")
curl -X PATCH "${CUSTOMIZER_BASE_URL}/v1/customization/configs/default/llama-3.1-8b-instruct@v1.0.0+A100" \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"description": "Updated description",
"enabled": true
}' | jq
Note
The update endpoint supports many additional parameters beyond description and enabled, including:
General Options:
max_seq_length,training_precisionTraining Options Management:
training_options,add_training_options,remove_training_optionsTemplates:
prompt_template,chat_prompt_templateHardware:
pod_specMetadata:
project,custom_fields,ownershipData:
dataset_schemas
Training options are identified by the combination of training_type and finetuning_type. You can update existing options, add new ones, or remove specific combinations as needed.
Example Response
{
"created_at": "2024-11-26T02:58:55.339737",
"updated_at": "2024-11-26T03:58:55.339737",
"id": "customization_config-MedVscVbr4pgLhLgKTLbv9",
"name": "llama-3.1-8b-instruct@v1.0.0+A100",
"namespace": "default",
"description": "Updated description",
"target": {
"id": "customization_target-A5bK7mNpR8qE9sL2fG3hJ6",
"name": "meta/llama-3.1-8b-instruct@2.0",
"namespace": "default",
"base_model": "meta/llama-3.1-8b-instruct",
"enabled": true,
"num_parameters": 8000000000,
"precision": "bf16",
"status": "ready"
},
"training_options": [
{
"training_type": "sft",
"finetuning_type": "lora",
"num_gpus": 2,
"num_nodes": 1,
"tensor_parallel_size": 1,
"pipeline_parallel_size": 1,
"micro_batch_size": 1,
"use_sequence_parallel": false
}
],
"training_precision": "bf16",
"max_seq_length": 4096,
"pod_spec": {
"node_selectors": {
"nvidia.com/gpu.product": "NVIDIA-A100-SXM4-80GB"
},
"annotations": {
"nmp/job-type": "customization"
},
"tolerations": [
{
"key": "app",
"operator": "Equal",
"value": "customizer",
"effect": "NoSchedule"
}
]
},
"prompt_template": "{input} {output}",
"chat_prompt_template": null,
"dataset_schemas": [],
"project": null,
"ownership": {}
}