Tao Run Automl
NVIDIAOfficialCreated by NVIDIA Corporation
- Skill
- Workflow
- Software development
- Apache-2.0
- Medium risk
- Has scripts
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
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/nvidia/tao-run-automl/downloadUnzip 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-setupfirst (host preflight, credentials, cross-skill discovery).
Run automated hyperparameter optimization for a TAO model by combining:
The selected model skill under
skills/models/<model_skill>/.The selected platform skill under
skills/platform/<platform>/.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.mdfor prerequisites and support checks;automl-intent-algorithms.mdfor search policy;automl-compression-literature.mdfor distill/prune/quantize algorithm sufficiency and future compression-search roadmap;automl-runner-configuration.mdfor runner/API/WandB details;automl-advanced-monitoring.mdfor hooks, resume, and pitfalls; andautoml-examples.mdfor conversation examples; andautoml-common-pitfalls.mdfor recurring safety checks.detailed-guide.mdis 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, andmode.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
Run the shared launch intake. If the user has not chosen a platform, ask; Brev, SLURM, Kubernetes, and Docker are equal peers.
Run the selected platform skill's preflight before generating runner files.
Verify
nvidia-tao-automlimports:
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:
Read the model
SKILL.mdandreferences/skill_info.yaml.Confirm
automl_enabled: truefor the model or that the model skill explicitly routes the selected action to AutoML.Confirm
<skill_dir>/schemas/<action>.schema.jsonexists and parses. This is the AutoML search-space gate.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.If any gate fails, do not improvise a search space. Report the missing package artifact.
Inputs
Collect these before runner construction:
| Input | Requirement |
|---|---|
model_skill | Resolved model skill directory under skills/models/. Resolve user aliases such as network_arch to the packaged skill directory first. |
network_arch | Read from the resolved model skill metadata. |
action | Action to optimize — train, evaluate, inference, distill, prune, or quantize with a packaged schema/template. |
platform | One of the supported TAO platform skills. |
train_dataset / eval_dataset / action inputs | Use model-specific spec keys and layout. Non-train actions may also need parent/teacher checkpoints, calibration data, or pruned artifacts. |
results_root | Local, Lustre, or S3 path appropriate for the platform. |
gpu_count, num_nodes | Respect model and platform limits. |
container_image | Resolve through model metadata and versions.yaml; show it to the user. |
automl_algorithm | Default bayesian unless user asks for another algorithm or the model skill recommends one. |
metric, direction | Prefer the model skill's validation/task metric. |
automl_budget | Recommendation 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
| Algorithm | Good fit | Required knobs |
|---|---|---|
bayesian | Default for small/medium budgets and few parameters. | num_recommendations, metric, direction |
hyperband, asha | Many configs, cheap early rungs; ASHA is parallel-friendly. | max_epochs, reduction_factor, optional max_concurrent |
bohb, dehb | Mixed Bayesian/evolutionary search with multi-fidelity budgets. | same rung budget fields as Hyperband |
pbt | Long training where schedules should mutate during training. | population and generation budget |
llm, hybrid, autoresearch | User 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_parametersautoml_disabled_parametersvalid 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:
Identify the best recommendation by the selected metric and direction.
Return the best child job id and its result path.
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.Report the exact search space, algorithm, budget, metric, and platform.
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.
If this feeds a workflow such as AutoML + DEFT, pass the winning spec overrides and checkpoint through the workflow's declared handoff fields.
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
- ATTRIBUTION.mdAdded by AutoGineer912 B
- BENCHMARK.md7.6 KiB
- LICENSELicence file added by AutoGineer11.2 KiB
- SKILL.md19.4 KiB
- cards/00-preflight.md1.9 KiB
- cards/10-baseline-eval.md3.7 KiB
- cards/20-launch-recs.md7.0 KiB
- cards/30-interpret.md3.2 KiB
- cards/README.md3.3 KiB
- cards/driver.shScript8.0 KiB
- config/skillspector-baseline.yaml1.6 KiB
- eval.config9.8 KiB
- evals/evals.json1.7 KiB
- references/automl-advanced-monitoring.md22.6 KiB
- references/automl-common-pitfalls.md908 B
- references/automl-compression-literature.md5.6 KiB
- references/automl-examples.md6.0 KiB
- references/automl-intent-algorithms.md26.1 KiB
- references/automl-preflight-concepts.md13.1 KiB
- references/automl-runner-configuration.md17.3 KiB
- references/best_rec_adapter.pyScript4.1 KiB
- references/detailed-guide.md989 B
- references/skill_info.yaml1.8 KiB
- references/tests/test_best_rec_adapter.pyScript3.7 KiB
- scripts/resolve_automl_session.pyScript5.6 KiB
- skill-card.md5.2 KiB
- skill.oms.sig9.5 KiB
- tests/test_resolve_automl_session.pyScript5.3 KiB
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:
| Field | Required | Example | How to get it |
|---|---|---|---|
requested_model | Yes | "cosmos-rl" or "tao-finetune-cosmos-reason" | User states the model, model family, or network alias. |
model_skill | Yes | "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_arch | Yes | "cosmos-rl" | Read from <skill_dir>/references/skill_info.yaml after resolving model_skill. |
action | Yes | "train", "distill", "prune", "quantize" | Default to train only for train-stage requests. For compression requests, use the named action. |
platform | Yes | "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 inputs | Yes | "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 paths | Model-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. |
image | Yes | "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. |
metric | No | "<metric_name>" | Use the model skill recommendation or ask if unclear. Do not choose model-specific metrics from this AutoML skill. |
direction | No | "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_dir | Yes | "<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_enabled | Yes | true | Ask during launch intake. If enabled, keep the agent attached and emit status until completion. Default: enabled. |
status_interval_minutes | Yes | 5 | Ask during launch intake. Default: 5 minutes. |
| required credentials | Platform/model-dependent | SLURM_USER, SLURM_HOSTNAME, SSH_KEY_PATH or SSH_AUTH_SOCK, HF_TOKEN | First 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 shape | Model-dependent | num_gpus=4, num_nodes=1 | Ask only for model-required hardware fields that are not provided by the platform/default profile. |
llm_endpoint / base_url | Yes (for llm/hybrid/autoresearch) | "https://inference-api.nvidia.com" | Resolve from user input or AUTOML_LLM_ENDPOINT; pass explicitly in automl_settings. |
llm_model / model | Yes (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_key | Yes (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:
| Field | Default |
|---|---|
algorithm | bayesian, unless the user/model default profile explicitly selects another algorithm |
automl_max_recommendations | model/workflow default if declared, otherwise 10 |
automl_hyperparameters | None so AutoML uses dataclass-schema params with automl_enabled=true |
custom_param_ranges | None so ranges/options/defaults come from the generated dataclass schema |
long_running_enabled | true |
status_interval_minutes | 5 |
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:
| Field | Example | Notes |
|---|---|---|
algorithm | bayesian, asha, hyperband, bohb, llm, hybrid, autoresearch | Present the algorithm guide only in customization mode or when the user names an algorithm. |
max_recommendations | 5, 10, 20 | Explain that each recommendation is a real training job. |
long_running_enabled | false | Only use false when the user explicitly does not want the agent to keep monitoring. |
status_interval_minutes | 5, 10, 15 | Already 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_key | https://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.
llm_endpoint— user input ->AUTOML_LLM_ENDPOINT->https://inference-api.nvidia.comllm_model— user input ->AUTOML_LLM_MODEL->gcp/google/gemini-3.1-pro-previewllm_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_overridesfor 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_overridesand 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_overridesso the metric is actually emitted.A real task metric via
eval_fnis 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_stepon promoted recommendations and resolves the model-specific checkpoint path through the SDK checkpoint resolver. Do not patch runner scripts to guess names likemodel_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_*.pthwhen the trainer writes zero-indexed epoch files, or a checkpoint directory likecheckpoints/epoch_1.Use a
latestcheckpoint 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.
| Algorithm | Use when | Typical budget | How it works |
|---|---|---|---|
bayesian | Default choice. Small budgets, few parameters. | 5–20 recs | Builds 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. |
bfbo | Alternative to bayesian with different acquisition function. | 5–20 recs | UCB-based Bayesian optimization with local penalization. Good when bayesian gets stuck. |
hyperband | Large search spaces, many parameters. | 20–50+ recs | Trains many configs cheaply for a few epochs, keeps the best, trains longer. Requires automl_max_epochs and automl_reduction_factor. |
hyperband_es | Hyperband + early stopping. | 20–50+ recs | Like hyperband but adds early-stop thresholds to halt clearly bad runs sooner. |
asha | Async variant of hyperband, supports parallel execution. | 10–30 recs | Same successive-halving idea as hyperband, but trials run concurrently. Best when you have many GPUs. Uses automl_max_concurrent. |
bohb | Best of both — Bayesian intelligence + Hyperband efficiency. | 15–40 recs | Combines KDE-based model (like Bayesian) with Hyperband's multi-fidelity scheduling. Good all-rounder for medium budgets. |
dehb | Evolutionary + multi-fidelity. | 15–40 recs | Differential evolution mutations + hyperband scheduling. Good for complex search spaces with many interacting parameters. |
pbt | Dynamic schedules — mutates hyperparameters during training. | population_size × generations | Population-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.
| Algorithm | Use when | Typical budget | How it works |
|---|---|---|---|
llm | Domain knowledge matters more than statistical rigor. | 5–20 recs | An 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. |
hybrid | You want the LLM to orchestrate multi-phase optimization. | 10–50 recs | An LLM strategist plans optimization phases over model-skill parameters. Each phase uses a classical sub-algorithm. Stops when the strategist detects diminishing returns. |
autoresearch | Fully autonomous agent loop. | 10–50 recs | The 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):
distillis train-like when it runs for epochs and emits checkpoints. Usebayesianby default; usehyperband,asha,bohb,dehb,hyperband_es, orpbtonly when the action schema contains epoch/checkpoint budget fields and the model skill says short-rung metrics are meaningful.pruneis often a single-shot compression transform followed by optional retrain/evaluate. Default tobayesian,bfbo,llm,hybrid, orautoresearchover prune ratios, thresholds, skip/layer choices, and retrain knobs exposed by the action schema. Useeval_fnto run evaluate/retrain when the prune action itself does not emit the final task metric.quantizeis usually a single-shot calibration/export transform. Default tobayesian,bfbo,llm,hybrid, orautoresearchover 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 ineval_fnuntil 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