Generated banner for Tao Run Automl
Generated logo for Tao Run Automl

Tao Run Automl

NVIDIAOfficialCreated by NVIDIA Corporation

  • Skill
  • Workflow
  • Software development
  • Apache-2.0
  • Medium risk
  • Has scripts

From the author

Run container-backed AutoML / hyperparameter optimization (HPO) for NVIDIA TAO networks using AutoMLRunner. Handles algorithm selection (bayesian, hyperband, asha, bohb, llm, hybrid, autoresearch), WandB experiment tracking, job execution on any TAO SDK platform, result interpretation, and per-rec custom evaluation hooks. Use when the user mentions TAO AutoML, hyperparameter optimization, HPO, automl, automl_settings, AutoMLRunner, tao_automl, bayesian search, hyperband, ASHA, LLM-guided search, autoresearch, or wants to tune train/evaluate/inference/distill/prune/quantize for a TAO network. Model actions use the resolved image; venv training requires an explicit request. Platform-agnostic — runs on any SDK (Brev, SLURM, Kubernetes, Docker). Do not use generic "keep improving" language alone to override a matching domain-specific DEFT workflow; attribute-labelled CLIP / SigLIP image-retrieval loops belong to tao-run-deft-pas unless HPO is explicit.
— the description by NVIDIA Corporation

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

The tao-run-automl skill provides a structured, platform-agnostic workflow for running hyperparameter optimization (HPO) on NVIDIA TAO models. It integrates with various platforms like Brev, SLURM, Kubernetes, and Docker to manage the lifecycle of training, evaluation, and compression tasks. The skill handles algorithm selection, experiment tracking via WandB, and provides a rigorous pre-launch review process to ensure compute resources are used efficiently. It supports advanced search strategies including Bayesian, Hyperband, ASHA, and LLM-guided optimization, ensuring that model tuning is both systematic and data-driven.

What it does

  • Automates hyperparameter search using algorithms like Bayesian, ASHA, and BOHB.
  • Executes platform-agnostic jobs across Docker, Kubernetes, SLURM, and Brev.
  • Performs mandatory baseline evaluations before launching optimization trials.
  • Integrates LLM-based analysis for periodic experiment review and search space refinement.
  • Manages experiment tracking and result interpretation for model training, distillation, pruning, and quantization.
  • Enforces strict pre-launch reviews and resource budget checks.

When to use it

  • When you need to optimize hyperparameters for a NVIDIA TAO network.
  • When you want to automate the tuning of training, evaluation, inference, distillation, pruning, or quantization tasks.
  • When you require a systematic approach to model performance improvement using advanced search algorithms.
  • When you need to track and compare multiple experiment configurations efficiently.

Advantages

  • Reduces manual effort in finding optimal model configurations.
  • Provides consistent, reproducible experiment tracking.
  • Supports diverse compute environments without changing the workflow logic.
  • Prevents resource waste through pre-launch validation and baseline evaluation.
  • Offers flexible search strategies tailored to different budget and performance requirements.

Usage examples

“Run AutoML for my object detection model on Kubernetes using Bayesian search.”
The agent will initiate the preflight checks for the Kubernetes platform, validate the model schema, perform a baseline evaluation, and begin the Bayesian optimization process.
“Optimize the pruning parameters for my classification model using ASHA.”
The agent will configure the ASHA algorithm, set up the pruning action, and manage the trial lifecycle to find the best-performing pruned model.

Install

  1. Download the skill as a ZIP:

    https://autogineer.com/agent-skills/nvidia/tao-run-automl/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip tao-run-automl.zip -d .agents/skills

Documentation by NVIDIA Corporation

TAO AutoML

Standalone install? If this session was not initialized by the TAO skill bank plugin, run tao-setup first (host preflight, credentials, cross-skill discovery).

Run automated hyperparameter optimization for a TAO model by combining:

  1. The selected model skill under skills/models/<model_skill>/.

  2. The selected platform skill under skills/platform/<platform>/.

  3. AutoMLRunner, which generates recommendations, launches selected action jobs, extracts metrics, and feeds results back to the optimizer.

Do not launch until model metadata, platform preflight, data visibility, credentials, image choice, and compute shape are all proven.

Execution Runtime — Hard Gate

Every recommendation, baseline evaluation, per-recommendation evaluation, and final evaluation runs in the selected model action's resolved container_image by default. Resolve it from the model skill before any training-environment setup. A local checkpoint or Hugging Face model ID does not change this rule.

Use venv-based model execution only when explicitly requested. Never infer venv mode from local-docker, local GPUs, Python, or pyproject.toml. If absent, execution is container-backed. A host/controller venv for tao_automl, TAO SDK, or a platform adapter is control-plane-only; keep child model actions in the resolved container image.

Reference Map

  • references/skill_info.yaml: this workflow's structured metadata.

  • Split detailed references: automl-preflight-concepts.md for prerequisites and support checks; automl-intent-algorithms.md for search policy; automl-compression-literature.md for distill/prune/quantize algorithm sufficiency and future compression-search roadmap; automl-runner-configuration.md for runner/API/WandB details; automl-advanced-monitoring.md for hooks, resume, and pitfalls; and automl-examples.md for conversation examples; and automl-common-pitfalls.md for recurring safety checks. detailed-guide.md is only the map.

  • skills/models/<network>/SKILL.md: model-specific dataset requirements, metrics, HPO notes, checkpoint handoff, and known failures.

  • skills/models/<network>/references/skill_info.yaml: action contract, container image, inputs, outputs, upload exclusions, and mode.

  • skills/platform/<platform>/SKILL.md: selected platform preflight, credentials, resource shape, monitoring, and cancellation.

  • skills/core/tao-launch-workflow/SKILL.md: shared intake pattern for platform, credentials, dataset visibility, image confirmation, and user confirmation.

Preflight

  1. Run the shared launch intake. If the user has not chosen a platform, ask; Brev, SLURM, Kubernetes, and Docker are equal peers.

  2. Run the selected platform skill's preflight before generating runner files.

  3. Verify nvidia-tao-automl imports:

python -c "import tao_automl; from tao_automl.runner import AutoMLRunner; print('OK')"

Then verify the selected platform's SDK constructs — importing tao_automl does not prove the platform backend is installed (e.g. DockerSDK() raises CredentialError without the docker package). See automl-preflight-concepts.md.

If missing, show the exact install command from versions.yaml and ask before installing:

SB="${TAO_SKILL_BANK_PATH:-~/tao-skill-bank}"
pip install "$($SB/scripts/resolve_versions_key.py wheels.tao_automl_<platform>)"

Valid platform wheel keys are tao_automl_brev, tao_automl_slurm, tao_automl_kubernetes, tao_automl_docker, and tao_automl_all. Use all only for development machines that need every backend. Add ,llm only when the user requests LLM-guided algorithms.

Model Support Gate

Before every run:

  1. Read the model SKILL.md and references/skill_info.yaml.

  2. Confirm automl_enabled: true for the model or that the model skill explicitly routes the selected action to AutoML.

  3. Confirm <skill_dir>/schemas/<action>.schema.json exists and parses. This is the AutoML search-space gate.

  4. For non-TAO-Core models such as Cosmos-RL and CLIP, also require references/spec_template_<action>.yaml; otherwise the runner has no complete action defaults.

  5. If any gate fails, do not improvise a search space. Report the missing package artifact.

Inputs

Collect these before runner construction:

InputRequirement
model_skillResolved model skill directory under skills/models/. Resolve user aliases such as network_arch to the packaged skill directory first.
network_archRead from the resolved model skill metadata.
actionAction to optimize — train, evaluate, inference, distill, prune, or quantize with a packaged schema/template.
platformOne of the supported TAO platform skills.
train_dataset / eval_dataset / action inputsUse model-specific spec keys and layout. Non-train actions may also need parent/teacher checkpoints, calibration data, or pruned artifacts.
results_rootLocal, Lustre, or S3 path appropriate for the platform.
gpu_count, num_nodesRespect model and platform limits.
container_imageResolve through model metadata and versions.yaml; show it to the user.
automl_algorithmDefault bayesian unless user asks for another algorithm or the model skill recommends one.
metric, directionPrefer the model skill's validation/task metric.
automl_budgetRecommendation count, max epochs/rungs, concurrency, or population size as required by the algorithm.

Never ask for secret values. Verify required env vars with [ -n "$VAR_NAME" ] && echo SET || echo UNSET.

Pre-Launch Review Gate

Before launching any recommendation jobs, show a concrete launch review and get user confirmation. This gate applies to every AutoML run for every AutoML-supported model/network; it is not Cosmos-specific and must not be scoped to a single model skill. This applies even when platform and image preflight already passed. The review must include:

  • model/network, platform, image, GPU/node shape, and result/workspace root

  • dataset mode and concrete spec keys, including train/eval sample counts when they can be read cheaply

  • algorithm, budget, max concurrent jobs, metric, and direction

  • searchable parameters and ranges, including default values when the user did not provide an explicit search space

  • exact generated recommendation configs for the initial launch batch, produced in a review-only step before any recommendation job is submitted

  • estimated runtime per recommendation and total expected wall time, with the assumptions used

  • the automatic baseline eval job id, metric value, and result path from the post-preflight eval job, or an explicit blocker if the model has no runnable evaluate action or validation data

  • the post-AutoML final evaluation plan for the selected best checkpoint/model, including metric, dataset, and record path

If the estimate is longer than the user's stated limit or materially longer than a normal interactive run, ask whether to reduce recommendations, epochs, dataset size, validation frequency, or search space before launch. Do not hide multi-day estimates in logs.

Automatic Baseline Eval Job

After platform, image, credential, data, and model preflight pass, run the model's evaluate action once on the selected validation/eval data before submitting any AutoML recommendation jobs. This is required AutoML setup, not an optional "pretrained eval" question for the user. Use the same base model or checkpoint that the AutoML training run starts from, the model skill's evaluate spec/template, and the selected platform's normal job submission path. If the model skill recommends a smaller shape for evaluation than training, use that shape and call it out in the launch review.

Share the eval metric number in the launch review before asking for confirmation. If a starting checkpoint exists but the baseline cannot be produced — no packaged evaluate action, missing eval dataset, failed eval job — stop and report the blocker instead of silently falling back to a training-loss-only run.

For training from scratch, record the baseline as unavailable and proceed; do not evaluate an empty checkpoint.

The runner owns final evaluation. When eval is runnable, pass final_eval_fn(best_rec, train_job_id) to AutoMLRunner.run; the result then carries result["final_evaluation"]. See automl-preflight-concepts.md for the callback, checkpoint, baseline, and from-scratch rules.

Dependency And Data Preflight

If the selected workflow needs object storage or a platform CLI and the tool is missing, report the missing dependency and offer the exact install command before continuing. After user approval, rerun scripts/check_tao_launch_preflight.py with --install-missing-tools so it installs the smallest needed package and immediately retries path verification. For S3 paths, verify both credentials and path readability from the launch platform before creating runner artifacts.

For models that read large media archives or directories during every training trial, stage or extract the dataset once to storage visible from the execution platform, then point all recommendation specs at that staged path. Record the source URI, staged path, byte/file-count evidence when available, and timestamp in <workspace>/evaluations/data_staging.json. If staging is not possible, include the repeated S3 I/O risk in the pre-launch review and ask before spending a long AutoML budget on it.

When the model skill defines sample-count-sensitive constraints, enforce them before launch. Reject or cap every batch-size recommendation that would create zero training steps for the selected dataset and GPU shard count. Use scripts/check_tao_launch_preflight.py --effective-batch-limit train_annotation=<batch_size>,<shard_count> for each generated recommendation before submitting it. If a recommendation later fails because the data is too small for the effective batch size, classify it as an invalid configuration, replace or adjust it only when remaining budget exists, and report the correction in the final summary. When train sample count is known from an annotation file or cheap manifest read, pass it as automl_settings["train_sample_count"] to AutoMLRunner.run so the runner can cap impossible recommendations before submitting a job and record the adjustment in result["history"][i]["adjustments"].

Algorithm Policy

AlgorithmGood fitRequired knobs
bayesianDefault for small/medium budgets and few parameters.num_recommendations, metric, direction
hyperband, ashaMany configs, cheap early rungs; ASHA is parallel-friendly.max_epochs, reduction_factor, optional max_concurrent
bohb, dehbMixed Bayesian/evolutionary search with multi-fidelity budgets.same rung budget fields as Hyperband
pbtLong training where schedules should mutate during training.population and generation budget
llm, hybrid, autoresearchUser explicitly wants LLM-guided search with a configured endpoint.LLM endpoint config plus budget

For evaluate or inference, default to Bayesian/BFBO-style search over the selected action's prompt, decoding, preprocessing, or runtime config knobs. Use a task metric from the action outputs/logs and set direction explicitly when the metric name is ambiguous. Do not use training-loss assumptions for actions that do not update weights.

For distill, use the same train-like policy when the distill action performs epoch-based optimization and writes checkpoints. For single-shot prune and quantize, default to bayesian or bfbo unless the action schema/model skill declares an epoch-like or calibration-budget field that makes hyperband/asha/bohb/dehb meaningful. Use eval_fn when the selected metric must be computed by a follow-up evaluate/inference action after the compression action completes.

Prefer the model skill's recommendation over generic defaults. Avoid ASHA or Hyperband when the model skill says startup, validation, or checkpoint cost dominates short trials.

Spec And Search Space

Build specs as nested dictionaries. If a model skill lists paths in dotted notation for readability, walk the path and assign the nested leaf; do not store flat dotted strings as spec keys.

Use the packaged selected-action schema for:

  • automl_default_parameters

  • automl_disabled_parameters

  • valid min/max ranges

  • enums, option weights, conditions, dependencies, and popular parameters

User-provided search spaces must stay inside schema constraints. For integer knobs with discrete choices, include the schema's required integer option shape instead of a loose list if the model skill calls that out.

Data source overrides are mandatory unless the model skill says the launcher can derive them. Preserve exact user-provided spec keys when the dataset uses direct annotation/media paths.

Metric Policy

Training loss is cheap but can be misleading. Prefer the model skill's task metric. Use one of these:

  • Log metric: metric=<name>, direction=maximize|minimize.

  • metric_extractor(logs, metric_name): parse the model's logs when the default resolver is ambiguous.

  • eval_fn(rec, train_job_id): run the model's evaluate action after each recommendation when the user wants a downstream task metric.

Do not map kpi to a metric unless the model skill explicitly defines that mapping.

The final report must compare the baseline metric, each recommendation's metric, and the selected best metric so users can see the impact of tuning. For model skills that require an eval_fn to compute the real task metric, use that evaluator instead of optimizing a convenient training loss unless the user explicitly accepts the proxy metric.

Runner Construction

Use the selected platform SDK only after its preflight passes. Construct SDKs without embedding credentials in code.

sdk is the platform SDK object; containerless venv models use VirtualEnvSDK(venv_path=..., work_dir=...). Always pass work_dir -- the default ~/.tao_sdk/virtualenv fills the home directory with trial checkpoints. See automl-runner-configuration.md.

import sys
from pathlib import Path
from tao_automl.runner import AutoMLRunner

skill_bank = Path("<absolute-tao-skill-bank>")
model_skill = "<resolved-model-skill-directory>"
skill_dir = skill_bank / "skills" / "models" / model_skill
sys.path.insert(
    0, str(skill_bank / "skills/applications/tao-run-automl/scripts")
)
from resolve_automl_session import validate_session_settings

runner = AutoMLRunner(
    sdk=sdk,
    skill_dir=str(skill_dir),
    action=action,                      # train, distill, prune, quantize, ...
)

workspace_path = Path("<automl_workspace>")
resume = False
# Mandatory fail-closed gate from this skill's bundled scripts directory.
validate_session_settings(
    automl_settings,
    resume=resume,
    workspace=workspace_path if resume else None,
)
result = runner.run(
    workspace_path=str(workspace_path),    # timestamp it to avoid collisions
    automl_settings=automl_settings,       # must contain an explicit session_id
    spec_overrides=spec_overrides,
    automl_hyperparameters=automl_hyperparameters,
    custom_param_ranges=custom_param_ranges,
    metric_extractor=metric_extractor,  # optional
    eval_fn=eval_fn,                    # optional
    final_eval_fn=final_eval_fn,        # optional but required when final eval is runnable
    resume=resume,
)

Set automl_settings["session_id"] explicitly and call validate_session_settings before every run. Generate a fresh ID once with scripts/resolve_automl_session.py new. Resume only when explicitly requested; resolve its controller with scripts/resolve_automl_session.py resolve --workspace <full-run-path>. Missing or ambiguous state is a blocker. See the resume section of references/automl-advanced-monitoring.md for the complete fresh/resume pattern.

Monitoring

Use runner status output and the platform SDK's get_job_status, get_job_logs, and get_failure_analysis. For active jobs, report:

  • recommendation id / trial id

  • platform job id

  • status

  • current metric

  • best metric so far

  • selected hyperparameters for the current/best recommendation

  • elapsed time and updated ETA when enough timing data exists

On failure, classify whether it is infrastructure, data visibility, image, credential, spec/schema, or model-code failure. Fix only the minimal cause and do not silently spend additional budget on repeated invalid recommendations. If a blocker is fixed during run setup, continue from the original task after showing the updated preflight/launch review instead of leaving the user to restate the request.

For LLM-based algorithms, inspect the brain logs before calling the run valid. Verify that LLM calls succeeded, proposals were generated, prior metrics were used to choose later parameter changes, and logs show keep/discard or equivalent algorithm decisions. If the brain falls back to random sampling, classify the LLM workflow as failed or blocked instead of treating it as a valid LLM-guided run.

Result Handoff

At completion:

  1. Identify the best recommendation by the selected metric and direction.

  2. Return the best child job id and its result path.

  3. Resolve the model checkpoint or action artifact using the model skill's checkpoint/artifact metadata and SDK helpers; do not guess filenames such as latest.

  4. Report the exact search space, algorithm, budget, metric, and platform.

  5. Report the automatic baseline eval job id/result path/metric, all recommendation metrics, final evaluation status/result path/metric, failed recommendations and root causes, elapsed time, and final runtime notes.

  6. If this feeds a workflow such as AutoML + DEFT, pass the winning spec overrides and checkpoint through the workflow's declared handoff fields.

  7. With the default retention policy, verify that cleanup-supported, safely prunable terminal trial artifacts were deleted and that the winning training artifacts remain. Report protected promotion/resume parents or conservative Hybrid results explicitly. A remote bind, named volume, or other output route the SDK cannot reclaim must fail retention preflight before the first trial rather than be silently retained.

Common Pitfalls

See references/automl-common-pitfalls.md before launching or recovering an AutoML run.

Files

references/automl-intent-algorithms.md

TAO AutoML Intent And Algorithms

User intent parsing, train-vs-AutoML policy, algorithm selection, and the algorithm decision tree.

Load this file only when the compact SKILL.md points here for the current task. If this reference conflicts with SKILL.md, skill_info.yaml, schemas, or platform/model skills, the compact/current source wins.

Contents

  • network_arch is NOT a runner.run() arg anymore; resolve the user's model

  • request to a packaged skill_dir, then read network_arch from that skill's

  • metadata.

  • Step 2: Select Algorithm

  • Classical Algorithms

  • LLM/Agentic Algorithms (NEW)

  • Quick Reference: Algorithm Decision Tree

Step 1: Parse User Intent

Default to a quick-start run unless the user explicitly asks to customize AutoML or agrees to a customization offer. Do not present algorithm, budget, or search-space choices as required inputs for a normal "run AutoML" request.

Any workflow/application that reaches an AutoML-capable model action must consult the selected model's automl_enabled metadata. If it is true, use this AutoML workflow for train-like optimization unless the run/workflow setting has automl_policy: off or the user explicitly asks for a plain single action run. Treat automl_policy: on as the default enabled state for train and distill. For single-shot compression actions such as prune and quantize, use AutoML when the user asks to optimize/tune the action or when the workflow profile explicitly sets automl_policy: on.

Extract these fields for a default run:

FieldRequiredExampleHow to get it
requested_modelYes"cosmos-rl" or "tao-finetune-cosmos-reason"User states the model, model family, or network alias.
model_skillYes"tao-finetune-cosmos-reason"Resolve requested_model to a packaged directory under skills/models/ by using model metadata. Do not assume network_arch is the directory name.
network_archYes"cosmos-rl"Read from <skill_dir>/references/skill_info.yaml after resolving model_skill.
actionYes"train", "distill", "prune", "quantize"Default to train only for train-stage requests. For compression requests, use the named action.
platformYes"brev", "slurm", "local-docker", "kubernetes"After the user confirms they want AutoML, discover the execution platforms from the installed platform skills (tao-run-on-docker / -slurm / -kubernetes / -brev, plus any external one); on a runtime that surfaces only the core router skills, read skills/platform/tao-run-on-*/SKILL.md frontmatter. Ask them to choose from those platforms.
action dataset/checkpoint inputsYes"s3://bucket/data/subset", "/lustre/fsw/tao_datasets/<model>/train", prune.checkpoint=/..., or quantize.model_path=/...User provides a root URI/path, exact spec-key paths, parent job IDs, or the model skill declares a default profile for this exact network/action/use case.
eval_dataset_uri or direct eval spec pathsModel-dependent"s3://bucket/data/eval", "/lustre/fsw/tao_datasets/<model>/eval", or custom.val_dataset.media_path=/...Ask only if the model skill's Per-Action Dataset Requirements require an eval/validation source and no default profile supplies it.
imageYes"nvcr.io/..."Resolve the default with scripts/resolve_tao_image.py --model <requested_model> --action <action>, show it to the user, and require confirmation or image=<override> before creating the AutoML runner.
metricNo"<metric_name>"Use the model skill recommendation or ask if unclear. Do not choose model-specific metrics from this AutoML skill.
directionNo"minimize" or "maximize"Only needed if your metric name doesn't contain "loss" AND you want to minimize, or contains "loss" AND you want to maximize. Otherwise the implicit "contains 'loss' → minimize, else maximize" rule applies.
skill_dirYes"<bank-root>/skills/models/tao-train-dino"Absolute path to the resolved model skill directory in the skill bank. Passed explicitly to AutoMLRunner(skill_dir=...) — no env-var fallback.
long_running_enabledYestrueAsk during launch intake. If enabled, keep the agent attached and emit status until completion. Default: enabled.
status_interval_minutesYes5Ask during launch intake. Default: 5 minutes.
required credentialsPlatform/model-dependentSLURM_USER, SLURM_HOSTNAME, SSH_KEY_PATH or SSH_AUTH_SOCK, HF_TOKENFirst read the chosen platform skill's ## Credentials section and references/skill_info.yaml (required_credentials / credential_groups), satisfy required credential groups, then add selected-model credentials. Do not ask for unrelated platform credentials.
compute shapeModel-dependentnum_gpus=4, num_nodes=1Ask only for model-required hardware fields that are not provided by the platform/default profile.
llm_endpoint / base_urlYes (for llm/hybrid/autoresearch)"https://inference-api.nvidia.com"Resolve from user input or AUTOML_LLM_ENDPOINT; pass explicitly in automl_settings.
llm_model / modelYes (for llm/hybrid/autoresearch)"gcp/google/gemini-3.1-pro-preview"Resolve from user input or AUTOML_LLM_MODEL; pass explicitly in automl_settings.
llm_api_key / api_keyYes (for llm/hybrid/autoresearch)"nvapi-..." or "sk-..."Resolve from AUTOML_LLM_API_KEY or NVIDIA_API_KEY. Do not print or log the value; if unavailable, stop for credential setup instead of falling back silently.

Use these quick-start AutoML defaults without asking:

FieldDefault
algorithmbayesian, unless the user/model default profile explicitly selects another algorithm
automl_max_recommendationsmodel/workflow default if declared, otherwise 10
automl_hyperparametersNone so AutoML uses dataclass-schema params with automl_enabled=true
custom_param_rangesNone so ranges/options/defaults come from the generated dataclass schema
long_running_enabledtrue
status_interval_minutes5

If any required field is missing, ask the user. Do NOT guess dataset paths, skill bank paths, credentials, or hardware that the model skill marks as required.

When asking for missing AutoML launch inputs, use a first-time-user friendly prompt. Do not say only "train dataset root" / "eval dataset root", and do not say "attached monitoring every 5 minutes" without explaining it. Include:

  • platform choices;

  • root-mode dataset examples for the selected platform;

  • direct spec-parameter mode as an equal option;

  • model-required spec keys from the model skill's Per-Action Dataset Requirements table;

  • resolved train container image and the option to override it with image=<override>;

  • monitoring meaning and cadence choices.

Before generating an AutoML script, verify platform access and dataset visibility using the shared launch preflight. For SLURM, that means passwordless SSH to at least one login host and remote test -e checks for each required annotation/media path. If preflight fails, stop with remediation steps instead of creating a runner that will immediately fail.

If the selected model skill's Per-Action Dataset Requirements or Typical Spec Overrides show train/evaluate/inference inputs that come from a prior dataset_convert action, run that conversion before calling AutoMLRunner.run. Use the dataset_convert action's own container_image when it overrides the model default, persist the conversion output under the current run's results root, verify every required converted artifact named by the model skill exists, and pass those current-run converted paths in spec_overrides. Do not reuse stale conversion paths from another AutoML algorithm/run folder.

Also verify container image confirmation using the shared launch preflight. AutoML launches real action jobs for each recommendation, so the confirmed action image must be passed into AutoMLRunner.run(..., image=chosen_image, ...) or into the SDK adapter's create_job(..., image=chosen_image, ...). Do not rely on an implicit default after the user has chosen a platform and dataset.

Also run any model-specific annotation content checks documented by the model skill. Missing required annotation fields are a preflight failure, not an AutoML recommendation failure.

Before submitting any recommendation job, generate the initial recommendation batch in a review-only step and show the exact configs to the user together with metric, direction, expected runtime, and effective-batch checks. Do not replace concrete configs with only search bounds.

After all platform, image, credential, data, and model preflight checks pass, submit the model's evaluate action once against the selected validation/eval data before submitting AutoML recommendations. This is the automatic baseline eval job for the run. Show its job id, result path, and metric value in the launch review, then ask for confirmation before spending training budget on recommendations. If the eval job cannot run because the model has no packaged evaluate action, validation data is missing, or the eval job fails, stop and surface the blocker. Proceed without this baseline only when the user explicitly accepts a proxy-metric run with no impact baseline.

If the workflow starts from scratch and has no compatible checkpoint to evaluate, run a minimal default-configuration training job outside the AutoML recommendation budget, resolve its exact epoch/step checkpoint, and evaluate that checkpoint for the baseline. Then use the same evaluator task metric via eval_fn for every recommendation and final_eval_fn for the winner. An empty checkpoint value or container directory is not a valid baseline model.

Customization gate: After the required quick-start fields are resolved, you may briefly offer customization. If the user declines or does not ask for it, proceed with the defaults above. If the user chooses customization, then present the additional options below.

Customization-only fields:

FieldExampleNotes
algorithmbayesian, asha, hyperband, bohb, llm, hybrid, autoresearchPresent the algorithm guide only in customization mode or when the user names an algorithm.
max_recommendations5, 10, 20Explain that each recommendation is a real training job.
long_running_enabledfalseOnly use false when the user explicitly does not want the agent to keep monitoring.
status_interval_minutes5, 10, 15Already asked during launch intake; customize only if the user wants a different cadence.
automl_hyperparameters["train.optm_lr", "train.epoch"]List choices from the generated schema JSON, not from hand-written guesses.
custom_param_ranges{"train.optm_lr": {"valid_min": 1e-6, "valid_max": 1e-4}}Validate against schema type/range/options before using.
llm_endpoint, llm_model, llm_api_keyhttps://inference-api.nvidia.com, gcp/google/gemini-3.1-pro-preview, nvapi-...Required only when the selected algorithm is llm, hybrid, or autoresearch. Resolve credentials from env/secret files; do not echo keys.

MANDATORY: Read the generated dataclass schema before configuring AutoML.

For the selected model/action, read:

  • ${TAO_SKILL_BANK_PATH:-~/tao-skill-bank}/skills/models/<model_skill>/schemas/<action>.schema.json

  • ${TAO_SKILL_BANK_PATH:-~/tao-skill-bank}/skills/models/<model_skill>/schemas/manifest.json

AutoML is enabled by the model skill, but it can run only when schemas/<action>.schema.json is packaged with the plugin and valid for the selected model/action. Do not fall back to hand-written model notes, old runner scripts, or a local ~/tao-core checkout for AutoML parameter metadata. If the action schema is missing, stop and report that AutoML is enabled for that model but not runnable for that action until the schema is generated and shipped in the skill bank.

Use the schema JSON as the source of truth for automl_default_parameters, automl_disabled_parameters, per-parameter defaults, ranges, enums, option_weights, math_cond, depends_on, parent_param, and popular.

When automl_hyperparameters=None, the runner automatically discovers all params marked automl_enabled=True in the network's generated schema. Each network has its own set; never hardcode them in this workflow skill.

Quick-start runner shape:

# network_arch is NOT a runner.run() arg anymore. It is read from the model
# metadata at skill_dir, which was passed to AutoMLRunner(...) at construction.
result = runner.run(
    train_dataset_uri=TRAIN_DATASET_URI,
    automl_settings={
        "algorithm": "bayesian",
        "metric": metric,
        "automl_max_recommendations": 10,
        "session_id": session_id,
    },
    automl_hyperparameters=None,  # use schema params marked automl_enabled=true
    custom_param_ranges=None,     # use schema ranges/options/defaults
    spec_overrides={...},         # from model skill + dataset requirements
    workspace_path=f"./automl/{TIMESTAMP}",
)

Customization runner additions:

result = runner.run(
    ...,
    automl_hyperparameters=selected_param_names,
    custom_param_ranges={
        "<param_name>": {"valid_min": min_value, "valid_max": max_value},
        "<categorical_param>": {
            "valid_options": ["option_a", "option_b"],
            "option_weights": [0.7, 0.3],
        },
    },
)

MANDATORY LLM configuration for LLM-based algorithms (llm, hybrid, autoresearch):

When the user requests or customizes into an LLM-powered algorithm, resolve ALL THREE of the following before generating the script. Do not ask for these on default bayesian quick-start runs.

  1. llm_endpoint — user input -> AUTOML_LLM_ENDPOINT -> https://inference-api.nvidia.com

  2. llm_model — user input -> AUTOML_LLM_MODEL -> gcp/google/gemini-3.1-pro-preview

  3. llm_api_key — AUTOML_LLM_API_KEY -> NVIDIA_API_KEY -> declared local secret file when allowed. Do not print the value.

If the runner does not receive valid LLM settings, the LLM brain may silently fall back to random sampling — wasting GPU budget on random configs instead of intelligent ones. There is no error message; the only clue is "LLM call failed... Falling back to random" in the logs.

MANDATORY: Read the model skill before generating the script.

AutoML runs the selected TAO action. Before generating any AutoML script, read <bank-root>/skills/models/<model_skill>/SKILL.md (where <bank-root> is wherever the agent loaded this SKILL.md from). The model skill contains all model-specific knowledge:

  • Training Requirements — dataset type, formats, monitoring metric, required dataset URIs to prompt for, required user prompts (data format, num_classes, etc.), and mandatory spec_overrides. Prompt the user for every required field. Apply mandatory spec_overrides exactly.

  • Per-Action Dataset Requirements — table mapping each action to its spec keys, data source, expected files, and whether the field is a list. Use this table to construct the correct data source spec_overrides for the requested action. If the model's Typical Spec Overrides mark data sources as "mandatory", construct them from this table and the user's dataset URIs.

  • Typical Spec Overrides — per-action override suggestions (train, evaluate, export, inference, etc.) extracted from SDK notebooks. Use these as the starting point for spec_overrides and suggest them to the user. When overrides are marked "mandatory data sources", they MUST be included — the runner cannot auto-resolve them. Merge with any other mandatory overrides from Training Requirements.

  • AutoML / HPO Notes — metric, direction, model-specific constraints, and any guidance that narrows or overrides the generated schema. Hyperparameter names/ranges/defaults come first from schemas/<action>.schema.json.

  • Error Patterns — common training failure modes that apply to AutoML recs too.

Do NOT hardcode model-specific knowledge in the AutoML script without reading the model skill first. Each network has different requirements.

MANDATORY: No model-specific constants in this AutoML skill.

The AutoML skill must not define model-specific hyperparameter names, ranges, defaults, metric names, dataset layouts, archive names, class-count rules, spec override keys, container images, checkpoint quirks, or custom metric regexes. Hyperparameter metadata belongs in <bank-root>/skills/models/<model_skill>/schemas/<action>.schema.json; model-specific runtime guidance belongs in the model skill's Training Requirements, Typical Spec Overrides, AutoML / HPO Notes, and Error Patterns sections. This skill may describe how to read and apply those sources, but not the concrete per-model values.

MANDATORY: Timestamped workspace folders.

ALWAYS generate workspace_path with a timestamp suffix. Running the same script twice without a timestamp overwrites the previous experiment. Pattern:

from datetime import datetime
TIMESTAMP = datetime.now().strftime("%Y%m%d_%H%M%S")
workspace_path = f"./experiment_name/{TIMESTAMP}"

Do NOT use a flat path like workspace_path="./my_experiment". The user should never have to manually delete old workspace folders.

MANDATORY: Fresh runner per new AutoML request, after preflight passes.

Every new user request to run AutoML MUST create a new runner script and launch a new AutoML job, even if an older runner script for the same network/algorithm already exists. This freshness rule starts only after platform and dataset preflight passes. Existing runner files and logs may be read only as references for dataset URIs, credentials patterns, and proven fixes; do not reuse them as the execution target for a new request.

Use a unique timestamp in the new runner filename, log filename, PID filename, SDK state_file, and workspace_path. Derive path components from the requested network_arch and algorithm; do not hardcode any model or algorithm name unless it is the actual requested value.

import re

def slug(value):
    return re.sub(r"[^A-Za-z0-9_.-]+", "_", str(value)).strip("_").lower()

TIMESTAMP = datetime.now().strftime("%Y%m%d_%H%M%S")
RUN_NAME = f"{slug(network_arch)}_{slug(algorithm)}"
runner_path = f"automl_runs/run_{RUN_NAME}_{TIMESTAMP}.py"
log_path = f"automl_runs/{RUN_NAME}_{TIMESTAMP}.log"
pid_path = f"automl_runs/{RUN_NAME}_{TIMESTAMP}.pid"
state_file = f"tao_session_state_{RUN_NAME}_{TIMESTAMP}.json"
workspace_path = f"./automl_runs/{RUN_NAME}/{TIMESTAMP}"

Only resume an existing runner/workspace when the user explicitly asks to resume, continue, recover, or inspect an existing experiment. If the user says "run automl" or asks for a new AutoML run, treat it as a fresh job.

Best-practice on metric choice:

  • Training loss is cheap, but can overfit on small fine-tuning datasets. Prefer the model skill's recommended validation or task metric when available.

  • If the model skill recommends a validation proxy, also apply the model skill's required validation-related spec_overrides so the metric is actually emitted.

  • A real task metric via eval_fn is often the most honest but adds per-rec cost. Use it when the model skill says log-based metrics are insufficient or the user explicitly wants downstream evaluation.

  • For AutoML runs with a runnable evaluate action and validation/eval data, run the automatic baseline eval job after preflight and before recommendations, then include that baseline metric in the final comparison.

Checkpoint / resume behavior:

  • Resume-based algorithms (hyperband, asha, bohb, dehb, pbt, hyperband_es) must resume from the checkpoint for the stopped rung/generation epoch or step, not a generic *_latest.* file.

  • The runner records the intended resume_from_epoch / resume_from_step on promoted recommendations and resolves the model-specific checkpoint path through the SDK checkpoint resolver. Do not patch runner scripts to guess names like model_latest.pth.

  • If the intended checkpoint is epoch 1, prefer artifacts such as epoch_1, epoch_001, model_epoch_001.pth, model_epoch_000_step_*.pth when the trainer writes zero-indexed epoch files, or a checkpoint directory like checkpoints/epoch_1.

  • Use a latest checkpoint only when the requested action explicitly has no epoch/step target. If no epoch/step-specific resume artifact exists, report the model as blocked and fix the model/skill checkpoint metadata rather than silently resuming from latest.


Step 2: Select Algorithm

Classical Algorithms

These require no external services — they use statistical/mathematical methods to pick hyperparameters.

AlgorithmUse whenTypical budgetHow it works
bayesianDefault choice. Small budgets, few parameters.5–20 recsBuilds a Gaussian Process model of metric vs. hyperparameters. Sequential — waits for each result before proposing the next, so it learns fast but can't parallelize.
bfboAlternative to bayesian with different acquisition function.5–20 recsUCB-based Bayesian optimization with local penalization. Good when bayesian gets stuck.
hyperbandLarge search spaces, many parameters.20–50+ recsTrains many configs cheaply for a few epochs, keeps the best, trains longer. Requires automl_max_epochs and automl_reduction_factor.
hyperband_esHyperband + early stopping.20–50+ recsLike hyperband but adds early-stop thresholds to halt clearly bad runs sooner.
ashaAsync variant of hyperband, supports parallel execution.10–30 recsSame successive-halving idea as hyperband, but trials run concurrently. Best when you have many GPUs. Uses automl_max_concurrent.
bohbBest of both — Bayesian intelligence + Hyperband efficiency.15–40 recsCombines KDE-based model (like Bayesian) with Hyperband's multi-fidelity scheduling. Good all-rounder for medium budgets.
dehbEvolutionary + multi-fidelity.15–40 recsDifferential evolution mutations + hyperband scheduling. Good for complex search spaces with many interacting parameters.
pbtDynamic schedules — mutates hyperparameters during training.population_size × generationsPopulation-Based Training. Starts N configs in parallel, periodically copies weights from winners and perturbs their hyperparameters. Best for long runs where hyperparameters should change over time (e.g. learning rate schedules). Final handoff selects the best member at the largest observed training budget; earlier lower-budget metrics are promotion evidence, not the final checkpoint choice.
LLM/Agentic Algorithms (NEW)

These use a large language model to reason about hyperparameter choices. They require an LLM endpoint (NVIDIA NIM, OpenAI, vLLM, Ollama, etc.) and the openai Python package.

AlgorithmUse whenTypical budgetHow it works
llmDomain knowledge matters more than statistical rigor.5–20 recsAn LLM proposes hyperparameter configs based on the search space schema, experiment history, and its training knowledge. Falls back to random sampling on LLM failure. Sequential like bayesian.
hybridYou want the LLM to orchestrate multi-phase optimization.10–50 recsAn LLM strategist plans optimization phases over model-skill parameters. Each phase uses a classical sub-algorithm. Stops when the strategist detects diminishing returns.
autoresearchFully autonomous agent loop.10–50 recsThe most powerful mode. Combines: (1) RAP knowledge retrieval about the network, (2) LLM-proposed spec modifications, (3) training-free pre-screening of candidates, (4) multi-stage verification (pre-launch + post-result), (5) keep/discard reasoning. Automatically stops on budget exhaustion or consecutive failures.

Default to bayesian unless the user specifically asks for something else, has a large GPU budget, or needs early-stopping on cheap intermediate metrics (ASHA / hyperband).

Use llm / hybrid / autoresearch when the user wants LLM-guided search, has an API key for NVIDIA NIM or OpenAI, and wants richer reasoning about why certain hyperparameters are chosen.

Compression action policy (distill, prune, quantize):

  • distill is train-like when it runs for epochs and emits checkpoints. Use bayesian by default; use hyperband, asha, bohb, dehb, hyperband_es, or pbt only when the action schema contains epoch/checkpoint budget fields and the model skill says short-rung metrics are meaningful.

  • prune is often a single-shot compression transform followed by optional retrain/evaluate. Default to bayesian, bfbo, llm, hybrid, or autoresearch over prune ratios, thresholds, skip/layer choices, and retrain knobs exposed by the action schema. Use eval_fn to run evaluate/retrain when the prune action itself does not emit the final task metric.

  • quantize is usually a single-shot calibration/export transform. Default to bayesian, bfbo, llm, hybrid, or autoresearch over calibration batch count, backend/layer/skip choices, precision policies, and calibration data knobs exposed by the schema. Treat latency/size/accuracy as a multi-objective metric policy in eval_fn until a dedicated Pareto optimizer is added.

Caveat on ASHA with expensive checkpoints: ASHA's whole point is running many configs cheaply for early rungs, then promoting survivors. If the model skill warns that checkpoints, validation, or startup cost dominate short trials, prefer the model skill's recommended algorithm instead of assuming ASHA will be cheaper.


Quick Reference: Algorithm Decision Tree

Is your budget tiny (≤10 recs)?
  YES → bayesian
  NO  ↓

Do you have an LLM API key and want AI-guided search?
  YES → Do you want full autonomy? → autoresearch
        Just LLM proposals?        → llm
        LLM orchestrating phases?  → hybrid
  NO  ↓

Do you need parallel execution?
  YES → asha (or bohb for smarter sampling)
  NO  ↓

Is your search space large (10+ parameters)?
  YES → hyperband or dehb
  NO  ↓

Do hyperparameters need to change during training (schedules)?
  YES → pbt
  NO  → bayesian (safe default)

Requirements and compatibility

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Needs: Declares allowed tools, Needs Python, Needs Node.js

The author says: Requires docker + nvidia-container-toolkit. Workflows declare additional requirements.

Security

What our scanner noticed· Medium risk

  • Phrasing that asks for actions without confirmation
  • Large base64-encoded blobs
  • References to credential files
  • Instructions that use the network
  • Scripts that your agent may run

This skill includes scripts that your agent may run. Read them before you use it.

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Created by
NVIDIA Corporation
Publisher
NVIDIA (Official)
Source
NVIDIA/skills · skills/tao-run-automl · commit fce3cca
Licence
Apache License 2.0 (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE-APACHE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by NVIDIA Corporation or NVIDIA.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download tao-run-automl.zip