Create Job#
Important
Config values for a customization job now require a version, denoted by the string following the @. For example, config: meta/llama-3.2-1b-instruct@v1.0.0+A100.
Prerequisites#
Before you can create a customization job, make sure that you have:
- Obtained the base URL of your NeMo Customizer service. 
- Obtained a list of customization configurations to find the configuration you want to use. 
- Determined the hyperparameters you want to use for the customization job. 
- Set the - CUSTOMIZER_BASE_URLenvironment variable to your NeMo Customizer service endpoint
export CUSTOMIZER_BASE_URL="https://your-customizer-service-url"
To Create a Customization Job#
Choose one of the following options to create a customization job.
import os
from nemo_microservices import NeMoMicroservices
# Initialize the client
client = NeMoMicroservices(
    base_url=os.environ['CUSTOMIZER_BASE_URL']
)
# Create a customization job
job = client.customization.jobs.create(
    name="my-custom-model",
    description="Fine-tuning Llama model for specific use case",
    project="my-project",
    config="meta/llama-3.2-1b-instruct@v1.0.0+A100",
    dataset={
        "name": "my-dataset",
        "namespace": "default"
    },
    hyperparameters={
        "finetuning_type": "lora",
        "training_type": "sft",
        "batch_size": 8,
        "epochs": 50,
        "learning_rate": 0.0001,
        "log_every_n_steps": 0,
        "val_check_interval": 0.01,
        "weight_decay": 0,
        "sft": {
            "hidden_dropout": 1,
            "attention_dropout": 1,
            "ffn_dropout": 1
        },
        "lora": {
            "adapter_dim": 8,
            "adapter_dropout": 1
        }
    },
    output_model="my-custom-model@v1",
    ownership={
        "created_by": "",
        "access_policies": {}
    },
    # Optional: Add W&B integration
    integrations=[
        {
            "type": "wandb",
            "wandb": {
                "project": "custom-wandb-project",
                "entity": "my-team",
                "notes": "Custom fine-tuning experiment",
                "tags": ["fine-tuning", "llama"]
            }
        }
    ],
    # Optional: Include W&B API key to use W&B
    wandb_api_key="YOUR_WANDB_API_KEY"
)
print(f"Created job with ID: {job.id}")
print(f"Job status: {job.status}")
curl -X POST \
  "${CUSTOMIZER_BASE_URL}/v1/customization/jobs" \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'wandb-api-key: <YOUR_WANDB_API_KEY>' \
  -d '{
    "name": "<NAME>",
    "description": "<DESCRIPTION>",
    "project": "<PROJECT_NAME>",
    "config": "<CONFIG_NAME>",
    "hyperparameters": {
      "finetuning_type": "lora",
      "training_type": "sft",
      "batch_size": 8,
      "epochs": 50,
      "learning_rate": 0.0001,
      "log_every_n_steps": 0,
      "val_check_interval": 0.01,
      "weight_decay": 0,
      "sft": {
        "hidden_dropout": 1,
        "attention_dropout": 1,
        "ffn_dropout": 1
      },
      "lora": {
        "adapter_dim": 8,
        "adapter_dropout": 1
      }
    },
    "output_model": "<OUTPUT_MODEL_NAME>",
    "dataset": "<DATASET_NAME>",
    "ownership": {
      "created_by": "",
      "access_policies": {}
    },
    "integrations": [
      {
        "type": "wandb",
        "wandb": {
          "project": "custom-wandb-project",
          "entity": "custom-team-or-username",
          "notes": "Custom notes about this run",
          "tags": ["fine-tuning", "llama"]
        }
      }
    ],
  }' | jq
Example Response
{
  "id": "cust-JGTaMbJMdqjJU8WbQdN9Q2",
  "created_at": "2024-12-09T04:06:28.542884",
  "updated_at": "2024-12-09T04:06:28.542884",
  "config": {
    "schema_version": "1.0",
    "id": "af783f5b-d985-4e5b-bbb7-f9eec39cc0b1",
    "created_at": "2024-12-09T04:06:28.542657",
    "updated_at": "2024-12-09T04:06:28.569837",
    "custom_fields": {},
    "name": "meta/llama-3_1-8b-instruct",
    "base_model": "meta/llama-3_1-8b-instruct",
    "model_path": "llama-3_1-8b-instruct",
    "training_types": [],
    "finetuning_types": [
      "lora"
    ],
    "precision": "bf16",
    "num_gpus": 4,
    "num_nodes": 1,
    "micro_batch_size": 1,
    "tensor_parallel_size": 1,
    "max_seq_length": 4096
  },
  "dataset": {
    "schema_version": "1.0",
    "id": "dataset-XU4pvGzr5tvawnbVxeJMTb",
    "created_at": "2024-12-09T04:06:28.542657",
    "updated_at": "2024-12-09T04:06:28.542660",
    "custom_fields": {},
    "name": "default/sample-basic-test",
    "version_id": "main",
    "version_tags": []
  },
  "hyperparameters": {
    "finetuning_type": "lora",
    "training_type": "sft",
    "batch_size": 16,
    "epochs": 10,
    "learning_rate": 0.0001,
    "lora": {
      "adapter_dim": 16
    }
  },
  "output_model": "test-example-model@v1",
  "status": "created",
  "project": "test-project",
  "custom_fields": {},
  "ownership": {
    "created_by": "me",
    "access_policies": {
      "arbitrary": "json"
    }
  }
}
Weights & Biases Integration#
To enable W&B integration, add the wandb_api_key and integrations settings to the customization job creation request as shown in the example above.
Available Weights & Biases (W&B) settings are mapped to the Weights & Biases Python SDK settings.
Note
W&B integration is optional. You can create jobs without W&B by omitting the API key header.
W&B Configuration Priority#
W&B settings are applied with the following priority (highest priority overrides lower):
- Lowest Priority - Job Fields: - job.project→ sets W&B project name
- job.description→ sets W&B notes
 
- Medium Priority - Application Deployment Settings: - Deployment-specific settings from Helm chart values.yaml under - wandbsection
 
- Highest Priority - Job Integrations: - Settings from - job.integrationsarray with- type: "wandb"
- These settings will override all other W&B configurations