npx skills add ...
npx skills add nvidia/skills --skill tao-finetune-cosmos-reason
Cosmos3-Nano video QA supervised fine-tuning with FSDP parallelism across variable-width GPU configurations. Use when training or evaluating video
npx skills add nvidia/skills --skill tao-finetune-cosmos-reason
Standalone install? If this session was not initialized by the TAO skill bank plugin, run the
tao-setupskill first (host preflight, credentials, cross-skill discovery).
Supervised fine-tuning (SFT) of Cosmos Reason video QA models. The packaged
default base model is hf_model://nvidia/Cosmos3-Nano. Pretrained weights
are sourced from HuggingFace, not NGC. Gated HuggingFace models require
HF_TOKEN. Some Cosmos-RL images cannot load the native Cosmos3 Omni checkpoint
format directly; for those images, convert Cosmos3-Nano to a Qwen3-VL HF
safetensors directory before train/evaluate and use that converted directory as
the PTM path.
Uses FSDP-based parallelism with dp_shard_size for GPU count and dp_replicate_size for node count (not the standard num_gpus/num_nodes).
Requests for "Cosmos Reason 3", "Cosmos3 Nano Reasoner", or
nvidia/Cosmos3-Nano are handled by this skill. There is no separate Cosmos3
model directory in the skill bank; route those requests here. Override the base
HuggingFace model only when the user explicitly asks for a different model.
references/skill_info.yaml:container_image is the default runtime for every
Cosmos-RL action, including AutoML child jobs. Resolve and preflight that image
before creating training files, installing training dependencies, downloading
the checkpoint, or launching a smoke test. A user-supplied image=<override>
replaces the resolved default for that run.
Do not create or use a host venv, uv environment, generic NGC PyTorch
image, or custom Transformers training project merely because the base model is
on Hugging Face. Venv-based training is allowed only when the user explicitly
selects venv execution. A host Python environment used to run TAO SDK or the
AutoML controller is control-plane-only and does not change the child-job
runtime: training and evaluation still run in the resolved Cosmos-RL image.
If this skill and tao-finetune-huggingface-model both appear to match, this
dedicated model skill wins.
Deep detail lives in references; load the smallest one that matches the task:
references/cosmos-reason-launch.md — launch intake, preflight, per-action dataset requirements, spec construction, typical overrides.references/cosmos-reason-evaluate.md — evaluate (flat TOML, task types, LoRA eval, selective download, results) and datasets.references/cosmos-reason-automl.md — AutoML/HPO policy and search-space guidance.references/cosmos-reason-parameters.md — important parameters, hardware, error patterns, DEFT/gap analysis, parent-model inference mappings.references/cosmos-reason-wts-gb300.md — deterministic WTS dataset/runtime helpers and single-GB300 launch guards.Docker-native launch in the resolved Cosmos-RL image — no TAO SDK and no host Python. This satisfies the Execution Environment hard gate above: the container is the runtime. Use the local Docker/platform skill instead when it gives a stricter environment-specific command.
Train:
Evaluate:
Specs are TOML for this skill, not YAML. inference and quantize are driven
by spec-reading wrappers rather than a single flag-for-flag command; run them
through the same image and see references/cosmos-reason-launch.md for the
exact form. Pass HF_TOKEN as an environment variable — never in a spec or log.
Generated TAO Core schemas are packaged in schemas/<action>.schema.json, with schemas/manifest.json listing available actions. Each generated schema also emits references/spec_template_<action>.yaml from the schema top-level default field. AutoML enablement is declared at the model layer in references/skill_info.yaml via automl_enabled. Runnable AutoML still requires schemas/train.schema.json and references/spec_template_train.yaml to exist and parse. Use the packaged train schema for automl_default_parameters, automl_disabled_parameters, defaults, min/max bounds, enums, option weights, math conditions, dependencies, and popular parameters. Do not expect ~/tao-core at runtime; maintainers regenerate schemas/templates before packaging the skill bank.
This model is AutoML-enabled at the model layer. Before handling any train-stage request, read references/skill_info.yaml and resolve the run override from either an explicit automl_policy value or the user's workflow request. Use automl_policy: on by default and only expose on / off in new launch prompts. Treat phrases like "turn off AutoML", "disable AutoML", "no HPO", or "plain training" as automl_policy: off for this run only. When automl_policy: on, automl_enabled: true, and both schemas/train.schema.json and references/spec_template_train.yaml are packaged, route the train action through tao-skill-bank:tao-run-automl by default with this model's skill_dir. Preserve workflow/application overrides for datasets, specs, output directories, GPU/platform settings, parent checkpoints, and automl_policy. Use direct model training only when automl_policy: off or the packaged train schema/template is missing; in the missing-schema case, report that AutoML is enabled but not runnable for this model until schemas are generated.
Non-train actions such as evaluate, inference, and quantize stay in this model skill. The per-run automl_policy override does not change model metadata.
docker_env_var.When a selected image cannot load the native Cosmos3 checkpoint format
(model_type="cosmos3_omni" or Cosmos3ForConditionalGeneration), do not patch
QwenVL, Transformers, or vLLM first. Use the upstream Cosmos Framework VLM
conversion path to produce a Qwen3-VL HF safetensors directory, then point
Cosmos-RL specs at that converted directory.
The model skill packages a helper:
After conversion, use the converted directory consistently as the PTM:
For local Docker, mount the converted directory read-only into the Cosmos-RL container and set the spec to the container path. If a converted copy already exists and validates, reuse it for PTM baseline evaluation, AutoML recommendations, and final best-checkpoint evaluation rather than converting again.
The model-level GPU host requirements in references/skill_info.yaml override
the TAO-wide platform defaults for this workflow. Apply that profile through
the shared host setup check before launch, as shown in
references/cosmos-reason-launch.md. Treat the versions as lower bounds, not
exact pins, and retain the selected-image native GPU smoke test.
s3://bucket/cosmos/train, s3://bucket/cosmos/eval, /lustre/fsw/tao_datasets/cosmos_rl/train, /lustre/fsw/tao_datasets/cosmos_rl/eval<root>/annotations.json plus <root> as the media path. Direct spec mode is valid when annotations and media live in different locations, for example custom.train_dataset.annotation_path=/lustre/.../train.json and custom.train_dataset.media_path=/lustre/.../videos.tar.gz.videos.tar.gz vs images.tar.gz unless they are using direct spec mode or the model/action requires a single media archive. In root mode, pass the dataset root as the media path.custom.vision.nframes, so per-record video_fps is not required by
default. If the user switches to custom.vision.fps, selects a dataset
profile that requires per-record timing, or uses an image/version that
requires video_fps, make it a preflight requirement with
--json-required-field train_annotation=video_fps and
--json-required-field val_annotation=video_fps before any download or
job launch.cosmos-rl is mode: config. Always start from the packaged
references/spec_template_<action>.yaml for the requested action — load it
as your base spec via yaml.safe_load(...) and apply user overrides on top.
Don't rebuild from scratch.
The reference TOML (and the spec the model actually consumes) is nested
dicts, not flat dotted keys. Dotted notation in override examples denotes
paths into the nested spec — walk the path and assign at the leaf. See
skills/platform/tao-run-platform/SKILL.md's "spec is nested dicts" callout.
Data source overrides are mandatory for every action.
The packaged template keeps custom.vision.nframes=8 for bounded 1-GPU memory;
switch to fps only after checking token budget and GPU memory, and delete
custom.vision.nframes from the spec when you do.
Training duration, checkpointing, and validation are epoch-based by default:
train.epoch.train.ckpt.save_freq_in_epoch=1 and do not disable it or replace it
with train.ckpt.save_freq unless the user explicitly requests step-based
checkpointing.validation.freq_in_epoch=1 and do not replace it with
validation.freq unless the user explicitly requests step-based validation.Dataset, GPU, topology, memory, and runtime-image guidance must not change these cadence defaults. A hardware- or dataset-specific reference may explain how to implement an explicitly requested step cadence, but must never infer or select step cadence on the user's behalf.
See references/cosmos-reason-launch.md for launch intake, the full
check_tao_launch_preflight.py slurm/local-Docker examples, the
video_fps preflight example, S3 staging, the GPU resource/architecture gate,
the per-action dataset requirements table, the /workspace mount caveat,
the quantize compatibility shim, and the full typical-overrides list.
These are the keys whose template defaults are wrong or where omission flips the run into a different mode:
| Parameter | Template Default | Required Value | Why |
|---|---|---|---|
policy.model_name_or_path | hf_model://nvidia/Cosmos3-Nano | Direct Docker: nvidia/Cosmos3-Nano, hf_model://nvidia/Cosmos3-Nano, or a local HF snapshot path. SDK/managed platform predownload: hf_model://nvidia/Cosmos3-Nano. | Keep the train and evaluate base model aligned. |
policy.model_max_length | 40960 | Keep at 40960 or higher | Smaller than ~40k causes vision_embeds shape mismatch on video inputs |
train.train_batch_per_replica | 32 | Any multiple of train.train_policy.mini_batch | Mismatch raises an immediate AssertionError |
train.train_policy.type | "sft" | Keep as "sft" for SFT workflows | If dropped during agent regeneration, cosmos-rl flips to RL mode → rollout replica allocated → multi-node attempted → hostname errors when num_nodes=1 |
The evaluator reads a flat TOML config (dataset, model, task,
evaluation, vision, generation, metrics, results, num_gpus,
results_dir); the actions.evaluate block in references/skill_info.yaml
declares inputs and outputs. See references/cosmos-reason-evaluate.md for the
flat-TOML config detail, task types ("" General Evaluator vs
"its_directionality"), LoRA evaluation via spec_overrides, selective download,
results/metrics, and the datasets section.
The packaged default base model is hf_model://nvidia/Cosmos3-Nano; apply it
consistently to train (policy.model_name_or_path) and post-training evaluation
(model.base_model_path) unless the user provides a different model. See
references/cosmos-reason-automl.md for accuracy-vs-val/avg_loss objective
selection, the eval_fn per-recommendation evaluate flow, the knob mapping
(learning rate, batch size, epochs, weight decay, warmup ratio), example
custom_param_ranges, train_sample_count batch-size capping,
ordered_int requirements, and the pre-launch recommendation summary.
For parallelism, set policy.parallelism.dp_shard_size = GPUs per node and
policy.parallelism.dp_replicate_size = node count (1 for single node).
Cosmos-RL handles distributed init internally via FSDP and does not rely on
platform-level MASTER_ADDR/WORLD_SIZE; submit with
gpu_count=<gpus_per_node> and num_nodes=<N> and the spec keys drive
sharding. SFT requires at least 256 GB of cumulative visible GPU memory rather
than a fixed device count or per-device capacity. Set dp_shard_size and the
platform GPU request to the actual visible GPU count, and use
dp_replicate_size=1 for a single node. The selected image must support every
visible GPU architecture and pass its runtime CUDA-stack smoke test.
See references/cosmos-reason-parameters.md for important parameters (training
loop, model/policy, parallelism incl. multi-node FSDP, optimization, vision
encoders, checkpointing incl. the best symlink/epoch_* resolution,
validation, logging), hardware sizing, the full error-pattern catalog (CUDA OOM,
LoRA-eval OOM, NaN loss, vision_embeds mismatch, quantize token mismatch,
batch-size divisibility and per-rank limits, stale cache, scheduler-None,
gated-repo HF_TOKEN, GPU resource/architecture gate, status-logging warnings),
DEFT support and scripts/analyze_gaps.py gap analysis, and the parent-model
inference mapping table.