From ad3d3f5d0fd90d8a403c5f85746b8e4ab0c5d540 Mon Sep 17 00:00:00 2001 From: Mike McKiernan Date: Wed, 27 May 2026 14:17:41 -0400 Subject: [PATCH 1/4] docs(fix): Fix TOC for training recipes - Fixes the "document is referenced in multiple toctrees:" messages. - Collapses all the recipe pages under one toctree instead of one for intros and others for details. This was the intention in #185. Signed-off-by: Mike McKiernan --- docs/index.md | 39 ---------------------------------- docs/nemotron/super3/README.md | 4 ---- 2 files changed, 43 deletions(-) diff --git a/docs/index.md b/docs/index.md index a4102ca4b..a6b7a1bac 100644 --- a/docs/index.md +++ b/docs/index.md @@ -289,45 +289,6 @@ Llama Nemotron Rerank nemotron/artifacts.md ``` -```{toctree} -:caption: Nano3 Stages -:hidden: - -nemotron/nano3/pretrain.md -nemotron/nano3/sft.md -nemotron/nano3/rl.md -nemotron/nano3/evaluate.md -nemotron/nano3/import.md -``` - -```{toctree} -:caption: Omni3 Stages -:hidden: - -nemotron/omni3/README.md -nemotron/omni3/sft.md -nemotron/omni3/rl.md -nemotron/omni3/rl/data-prep.md -nemotron/omni3/architecture.md -nemotron/omni3/inference.md -``` - -```{toctree} -:caption: Super3 Stages -:hidden: - -nemotron/super3/README.md -nemotron/super3/pretrain.md -nemotron/super3/sft.md -nemotron/super3/rl/index.md -nemotron/super3/rl/rlvr.md -nemotron/super3/rl/swe.md -nemotron/super3/rl/rlhf.md -nemotron/super3/rl/data-prep.md -nemotron/super3/evaluate.md -nemotron/super3/quantization.md -``` - ```{toctree} :caption: Nemotron Kit :hidden: diff --git a/docs/nemotron/super3/README.md b/docs/nemotron/super3/README.md index 24f92da87..9b2319c1a 100644 --- a/docs/nemotron/super3/README.md +++ b/docs/nemotron/super3/README.md @@ -271,10 +271,6 @@ wandb login pretrain.md sft.md rl/index.md -rl/rlvr.md -rl/swe.md -rl/rlhf.md -rl/data-prep.md evaluate.md quantization.md ``` From 10d09ab8576554829d08bac6e2e9a0885bd3799e Mon Sep 17 00:00:00 2001 From: Mike McKiernan Date: Wed, 27 May 2026 16:13:47 -0400 Subject: [PATCH 2/4] WIP: Convert to Fern Signed-off-by: Mike McKiernan --- docs/fern/_images/avg_benchmark.png | Bin 0 -> 43092 bytes docs/fern/_images/expert-parallelism.png | Bin 0 -> 37765 bytes docs/fern/_images/funnel.png | Bin 0 -> 55949 bytes docs/fern/_images/nemo-framework-overview.png | Bin 0 -> 49883 bytes docs/fern/_images/nemo-rl-actors.png | Bin 0 -> 622414 bytes docs/fern/_images/omni-3.png | Bin 0 -> 214801 bytes docs/fern/_images/sequence-parallelism.png | Bin 0 -> 86433 bytes docs/fern/_images/super-pattern.png | Bin 0 -> 61294 bytes docs/fern/_images/super-phase1.png | Bin 0 -> 59891 bytes docs/fern/_images/super-phase2.png | Bin 0 -> 52524 bytes docs/fern/_images/super_sft_blend.png | Bin 0 -> 76746 bytes docs/fern/_images/tensor-parallelism.png | Bin 0 -> 199650 bytes .../fern/_sphinx_design_static/design-tabs.js | 101 +++ .../sphinx-design.min.css | 1 + docs/fern/_static/check-solid.svg | 4 + docs/fern/_static/clipboard.min.js | 7 + docs/fern/_static/copy-button.svg | 5 + docs/fern/_static/copybutton.css | 94 +++ docs/fern/_static/copybutton.js_t | 175 ++++ docs/fern/_static/copybutton_funcs.js | 73 ++ docs/fern/_static/css/termynal.css | 144 ++++ docs/fern/_static/customize.css | 4 + docs/fern/_static/design-tabs.js | 101 +++ docs/fern/_static/js/termynal-init.js | 139 ++++ docs/fern/_static/js/termynal.js | 265 +++++++ docs/fern/_static/sphinx-design.min.css | 1 + docs/fern/docs.yml | 7 + docs/fern/fern.config.json | 4 + .../pages-nightly/nemotron/rerank/README.mdx} | 98 ++- docs/fern/pages-v0.1.0/index.mdx | 98 +++ .../AdvancedDeploymentGuide/README.mdx | 273 +++++++ .../README.mdx | 205 +++++ .../pages-vnightly/application-examples.mdx | 92 +++ .../pages-vnightly/architecture/README.mdx | 64 ++ .../architecture/cli-architecture.mdx | 319 ++++++++ .../architecture/design-philosophy.mdx | 236 ++++++ .../explanation/data-preparation.mdx | 179 +++++ .../explanation/filtering.mdx | 138 ++++ .../explanation/get-right-questions.mdx | 77 ++ .../build-benchmarks/explanation/index.mdx | 99 +++ .../explanation/pipeline-overview.mdx | 57 ++ .../explanation/quality-validation.mdx | 34 + .../explanation/question-generation.mdx | 126 +++ .../explanation/translation.mdx | 119 +++ .../build-benchmarks/getting-started.mdx | 107 +++ .../how-to/custom-model-endpoints.mdx | 39 + .../build-benchmarks/how-to/domain-data.mdx | 115 +++ .../build-benchmarks/how-to/index.mdx | 87 ++ .../build-benchmarks/how-to/prepare-data.mdx | 94 +++ .../build-benchmarks/how-to/prompt-tuning.mdx | 238 ++++++ .../build-benchmarks/how-to/skip-stages.mdx | 42 + .../pages-vnightly/build-benchmarks/index.mdx | 160 ++++ .../build-benchmarks/reference/benchmarks.mdx | 26 + .../reference/generate-config.mdx | 77 ++ .../build-benchmarks/reference/index.mdx | 76 ++ .../reference/output-files.mdx | 91 +++ .../reference/translation-config.mdx | 53 ++ .../reference/troubleshooting.mdx | 61 ++ .../pages-vnightly/curate/getting-started.mdx | 121 +++ .../curate/how-to/enable-filters.mdx | 68 ++ .../pages-vnightly/curate/how-to/index.mdx | 13 + .../curate/how-to/run-local-jsonl.mdx | 64 ++ .../how-to/use-huggingface-snapshot.mdx | 62 ++ docs/fern/pages-vnightly/curate/index.mdx | 136 ++++ .../curate/reference/cli-curate.mdx | 73 ++ .../curate/reference/curate-config.mdx | 120 +++ .../pages-vnightly/curate/reference/index.mdx | 15 + .../curate/reference/io-format.mdx | 44 ++ .../curate/reference/troubleshooting.mdx | 27 + .../fern/pages-vnightly/deployment-guides.mdx | 104 +++ docs/fern/pages-vnightly/index.mdx | 170 ++++ .../endpoint-types-and-benchmarks.mdx | 51 ++ .../model-eval/explanation/index.mdx | 45 ++ .../explanation/pipeline-overview.mdx | 70 ++ .../explanation/tokenizer-alignment.mdx | 48 ++ .../model-eval/getting-started.mdx | 179 +++++ .../model-eval/how-to/discover-the-step.mdx | 244 ++++++ .../how-to/evaluate-deployed-checkpoint.mdx | 89 +++ .../model-eval/how-to/index.mdx | 46 ++ .../how-to/run-hosted-evaluation.mdx | 93 +++ docs/fern/pages-vnightly/model-eval/index.mdx | 184 +++++ .../reference/benchmarks-catalog.mdx | 78 ++ .../model-eval/reference/cli-reference.mdx | 117 +++ .../model-eval/reference/config-schema.mdx | 287 +++++++ .../model-eval/reference/index.mdx | 62 ++ .../model-eval/reference/output-artifacts.mdx | 88 +++ .../model-eval/reference/troubleshooting.mdx | 101 +++ .../model-eval/using-skills.mdx | 86 ++ .../pages-vnightly/nemo_runspec/artifacts.mdx | 309 ++++++++ .../pages-vnightly/nemo_runspec/nemo-run.mdx | 747 ++++++++++++++++++ .../pages-vnightly/nemo_runspec/omegaconf.mdx | 354 +++++++++ .../nemo_runspec/package-readme.mdx | 152 ++++ .../pages-vnightly/nemotron/artifacts.mdx} | 46 +- .../pages-vnightly/nemotron/cli.mdx} | 103 +-- .../pages-vnightly/nemotron/data-prep.mdx} | 124 +-- .../pages-vnightly/nemotron/embed/README.mdx} | 206 +++-- .../pages-vnightly/nemotron/kit.mdx} | 97 ++- .../pages-vnightly/nemotron/nano3/README.mdx} | 136 ++-- .../nemotron/nano3/evaluate.mdx} | 115 +-- .../pages-vnightly/nemotron/nano3/import.mdx} | 60 +- .../nemotron/nano3/pretrain.mdx} | 139 ++-- .../pages-vnightly/nemotron/nano3/rl.mdx} | 264 ++++--- .../pages-vnightly/nemotron/nano3/sft.mdx} | 151 ++-- .../pages-vnightly/nemotron/nvidia-stack.mdx} | 103 ++- .../pages-vnightly/nemotron/omni3/README.mdx} | 155 ++-- .../nemotron/omni3/architecture.mdx} | 63 +- .../nemotron/omni3/inference.mdx} | 54 +- .../pages-vnightly/nemotron/omni3/rl.mdx} | 83 +- .../nemotron/omni3/rl/data-prep.mdx} | 86 +- .../pages-vnightly/nemotron/omni3/sft.mdx} | 86 +- .../nemotron/super3/README.mdx} | 134 ++-- .../nemotron/super3/evaluate.mdx} | 126 +-- .../nemotron/super3/pretrain.mdx} | 151 ++-- .../nemotron/super3/quantization.mdx} | 81 +- .../nemotron/super3/rl/data-prep.mdx} | 28 +- .../nemotron/super3/rl/index.mdx} | 127 +-- .../nemotron/super3/rl/rlhf.mdx} | 17 +- .../nemotron/super3/rl/rlvr.mdx} | 39 +- .../nemotron/super3/rl/swe.mdx} | 35 +- .../pages-vnightly/nemotron/super3/sft.mdx} | 161 ++-- .../pages-vnightly/nemotron/wandb.mdx} | 72 +- .../nemotron/xenna-observability.mdx} | 112 +-- docs/fern/pages-vnightly/runspec/v1/spec.mdx | 168 ++++ .../pages-vnightly/sdg/getting-started.mdx | 308 ++++++++ .../sdg/how-to/create-domain-dataset.mdx | 249 ++++++ .../sdg/how-to/dispatch-to-cluster.mdx | 169 ++++ docs/fern/pages-vnightly/sdg/how-to/index.mdx | 75 ++ .../sdg/how-to/preference-data.mdx | 166 ++++ docs/fern/pages-vnightly/sdg/how-to/run.mdx | 67 ++ .../sdg/how-to/tool-call-data.mdx | 310 ++++++++ docs/fern/pages-vnightly/sdg/index.mdx | 156 ++++ docs/fern/pages-vnightly/sdg/planning.mdx | 53 ++ .../sdg/reference/cli-reference.mdx | 118 +++ .../sdg/reference/config-schema.mdx | 240 ++++++ .../pages-vnightly/sdg/reference/index.mdx | 63 ++ .../sdg/reference/output-projections.mdx | 155 ++++ .../sdg/reference/troubleshooting.mdx | 113 +++ docs/fern/pages-vnightly/sdg/using-skills.mdx | 94 +++ docs/fern/pages-vnightly/steps/airgap.mdx | 168 ++++ docs/fern/pages-vnightly/steps/basics.mdx | 158 ++++ .../pages-vnightly/steps/getting-started.mdx | 143 ++++ docs/fern/pages-vnightly/steps/index.mdx | 107 +++ .../explanation/artifact-graph.mdx | 37 + .../train-models/explanation/basics.mdx | 111 +++ .../train-models/explanation/index.mdx | 45 ++ .../explanation/training-libraries.mdx | 50 ++ .../train-models/getting-started.mdx | 183 +++++ .../how-to/choose-peft-backend.mdx | 43 + .../train-models/how-to/choose-rl-step.mdx | 51 ++ .../how-to/choose-sft-backend.mdx | 47 ++ .../how-to/convert-checkpoints.mdx | 124 +++ .../how-to/data-and-checkpoint-formats.mdx | 49 ++ .../train-models/how-to/env-and-executors.mdx | 35 + .../train-models/how-to/index.mdx | 90 +++ .../train-models/how-to/run-optimization.mdx | 51 ++ .../train-models/how-to/run-sft-automodel.mdx | 90 +++ .../pages-vnightly/train-models/index.mdx | 103 +++ .../train-models/reference/cli-reference.mdx | 293 +++++++ .../reference/config-conventions.mdx | 97 +++ .../reference/convert/hf-to-megatron.mdx | 109 +++ .../train-models/reference/convert/index.mdx | 48 ++ .../reference/convert/megatron-to-hf.mdx | 117 +++ .../reference/convert/merge-lora.mdx | 158 ++++ .../reference/env-profile-generator.mdx | 138 ++++ .../train-models/reference/index.mdx | 107 +++ .../reference/optimize/distill.mdx | 215 +++++ .../train-models/reference/optimize/index.mdx | 48 ++ .../train-models/reference/optimize/prune.mdx | 202 +++++ .../reference/optimize/quantize.mdx | 181 +++++ .../train-models/reference/peft/automodel.mdx | 220 ++++++ .../train-models/reference/peft/index.mdx | 40 + .../reference/peft/megatron-bridge.mdx | 227 ++++++ .../train-models/reference/rl/dpo.mdx | 170 ++++ .../train-models/reference/rl/index.mdx | 48 ++ .../train-models/reference/rl/rlhf.mdx | 185 +++++ .../train-models/reference/rl/rlvr.mdx | 212 +++++ .../train-models/reference/sft/automodel.mdx | 214 +++++ .../train-models/reference/sft/index.mdx | 40 + .../reference/sft/megatron-bridge.mdx | 238 ++++++ .../train-models/reference/step-catalog.mdx | 59 ++ .../train-models/using-skill.mdx | 79 ++ .../explanation/faith-evaluation.mdx | 74 ++ .../translation/explanation/index.mdx | 46 ++ .../explanation/pipeline-overview.mdx | 61 ++ .../translation/explanation/segmentation.mdx | 44 ++ .../translation/getting-started.mdx | 604 ++++++++++++++ .../how-to/configure-fields-and-output.mdx | 49 ++ .../translation/how-to/index.mdx | 91 +++ .../how-to/run-faith-evaluation.mdx | 59 ++ .../how-to/run-google-aws-translation.mdx | 51 ++ .../how-to/run-llm-translation.mdx | 41 + .../how-to/run-nmt-translation.mdx | 67 ++ .../how-to/use-fine-segmentation.mdx | 37 + .../fern/pages-vnightly/translation/index.mdx | 155 ++++ .../translation/reference/cli-translation.mdx | 72 ++ .../translation/reference/index.mdx | 39 + .../translation/reference/io-format.mdx | 51 ++ .../reference/translate-config.mdx | 159 ++++ .../translation/reference/troubleshooting.mdx | 58 ++ .../translation/using-skills.mdx | 46 ++ docs/fern/versions/vnightly.yml | 392 +++++++++ docs/model-eval/reference/cli-reference.md | 2 +- docs/nemotron/data/curation/nemotron-cc.md | 51 -- docs/nemotron/data/sdg/long-document.md | 129 --- 204 files changed, 20698 insertions(+), 1520 deletions(-) create mode 100644 docs/fern/_images/avg_benchmark.png create mode 100644 docs/fern/_images/expert-parallelism.png create mode 100644 docs/fern/_images/funnel.png create mode 100644 docs/fern/_images/nemo-framework-overview.png create mode 100644 docs/fern/_images/nemo-rl-actors.png create mode 100644 docs/fern/_images/omni-3.png create mode 100644 docs/fern/_images/sequence-parallelism.png create mode 100644 docs/fern/_images/super-pattern.png create mode 100644 docs/fern/_images/super-phase1.png create mode 100644 docs/fern/_images/super-phase2.png create mode 100644 docs/fern/_images/super_sft_blend.png create mode 100644 docs/fern/_images/tensor-parallelism.png create mode 100644 docs/fern/_sphinx_design_static/design-tabs.js create mode 100644 docs/fern/_sphinx_design_static/sphinx-design.min.css create mode 100644 docs/fern/_static/check-solid.svg create mode 100644 docs/fern/_static/clipboard.min.js create mode 100644 docs/fern/_static/copy-button.svg create mode 100644 docs/fern/_static/copybutton.css create mode 100644 docs/fern/_static/copybutton.js_t create mode 100644 docs/fern/_static/copybutton_funcs.js create mode 100644 docs/fern/_static/css/termynal.css create mode 100644 docs/fern/_static/customize.css create mode 100644 docs/fern/_static/design-tabs.js create mode 100644 docs/fern/_static/js/termynal-init.js create mode 100644 docs/fern/_static/js/termynal.js create mode 100644 docs/fern/_static/sphinx-design.min.css create mode 100644 docs/fern/docs.yml create mode 100644 docs/fern/fern.config.json rename docs/{nemotron/rerank/README.md => fern/pages-nightly/nemotron/rerank/README.mdx} (92%) create mode 100644 docs/fern/pages-v0.1.0/index.mdx create mode 100644 docs/fern/pages-v0.1.0/usage-cookbook/Nemotron-3-Super/AdvancedDeploymentGuide/README.mdx create mode 100644 docs/fern/pages-v0.1.0/use-case-examples/nemotron-voice-rag-agent-example/README.mdx create mode 100644 docs/fern/pages-vnightly/application-examples.mdx create mode 100644 docs/fern/pages-vnightly/architecture/README.mdx create mode 100644 docs/fern/pages-vnightly/architecture/cli-architecture.mdx create mode 100644 docs/fern/pages-vnightly/architecture/design-philosophy.mdx create mode 100644 docs/fern/pages-vnightly/build-benchmarks/explanation/data-preparation.mdx create mode 100644 docs/fern/pages-vnightly/build-benchmarks/explanation/filtering.mdx create mode 100644 docs/fern/pages-vnightly/build-benchmarks/explanation/get-right-questions.mdx create mode 100644 docs/fern/pages-vnightly/build-benchmarks/explanation/index.mdx create mode 100644 docs/fern/pages-vnightly/build-benchmarks/explanation/pipeline-overview.mdx create mode 100644 docs/fern/pages-vnightly/build-benchmarks/explanation/quality-validation.mdx create mode 100644 docs/fern/pages-vnightly/build-benchmarks/explanation/question-generation.mdx create mode 100644 docs/fern/pages-vnightly/build-benchmarks/explanation/translation.mdx create mode 100644 docs/fern/pages-vnightly/build-benchmarks/getting-started.mdx create mode 100644 docs/fern/pages-vnightly/build-benchmarks/how-to/custom-model-endpoints.mdx create mode 100644 docs/fern/pages-vnightly/build-benchmarks/how-to/domain-data.mdx create mode 100644 docs/fern/pages-vnightly/build-benchmarks/how-to/index.mdx create mode 100644 docs/fern/pages-vnightly/build-benchmarks/how-to/prepare-data.mdx create mode 100644 docs/fern/pages-vnightly/build-benchmarks/how-to/prompt-tuning.mdx create mode 100644 docs/fern/pages-vnightly/build-benchmarks/how-to/skip-stages.mdx create mode 100644 docs/fern/pages-vnightly/build-benchmarks/index.mdx create mode 100644 docs/fern/pages-vnightly/build-benchmarks/reference/benchmarks.mdx create mode 100644 docs/fern/pages-vnightly/build-benchmarks/reference/generate-config.mdx create mode 100644 docs/fern/pages-vnightly/build-benchmarks/reference/index.mdx create mode 100644 docs/fern/pages-vnightly/build-benchmarks/reference/output-files.mdx create mode 100644 docs/fern/pages-vnightly/build-benchmarks/reference/translation-config.mdx create mode 100644 docs/fern/pages-vnightly/build-benchmarks/reference/troubleshooting.mdx create mode 100644 docs/fern/pages-vnightly/curate/getting-started.mdx create mode 100644 docs/fern/pages-vnightly/curate/how-to/enable-filters.mdx create mode 100644 docs/fern/pages-vnightly/curate/how-to/index.mdx create mode 100644 docs/fern/pages-vnightly/curate/how-to/run-local-jsonl.mdx create mode 100644 docs/fern/pages-vnightly/curate/how-to/use-huggingface-snapshot.mdx create mode 100644 docs/fern/pages-vnightly/curate/index.mdx create mode 100644 docs/fern/pages-vnightly/curate/reference/cli-curate.mdx create mode 100644 docs/fern/pages-vnightly/curate/reference/curate-config.mdx create mode 100644 docs/fern/pages-vnightly/curate/reference/index.mdx create mode 100644 docs/fern/pages-vnightly/curate/reference/io-format.mdx create mode 100644 docs/fern/pages-vnightly/curate/reference/troubleshooting.mdx create mode 100644 docs/fern/pages-vnightly/deployment-guides.mdx create mode 100644 docs/fern/pages-vnightly/index.mdx create mode 100644 docs/fern/pages-vnightly/model-eval/explanation/endpoint-types-and-benchmarks.mdx create mode 100644 docs/fern/pages-vnightly/model-eval/explanation/index.mdx create mode 100644 docs/fern/pages-vnightly/model-eval/explanation/pipeline-overview.mdx create mode 100644 docs/fern/pages-vnightly/model-eval/explanation/tokenizer-alignment.mdx create mode 100644 docs/fern/pages-vnightly/model-eval/getting-started.mdx create mode 100644 docs/fern/pages-vnightly/model-eval/how-to/discover-the-step.mdx create mode 100644 docs/fern/pages-vnightly/model-eval/how-to/evaluate-deployed-checkpoint.mdx create mode 100644 docs/fern/pages-vnightly/model-eval/how-to/index.mdx create mode 100644 docs/fern/pages-vnightly/model-eval/how-to/run-hosted-evaluation.mdx create mode 100644 docs/fern/pages-vnightly/model-eval/index.mdx create mode 100644 docs/fern/pages-vnightly/model-eval/reference/benchmarks-catalog.mdx create mode 100644 docs/fern/pages-vnightly/model-eval/reference/cli-reference.mdx create mode 100644 docs/fern/pages-vnightly/model-eval/reference/config-schema.mdx create mode 100644 docs/fern/pages-vnightly/model-eval/reference/index.mdx create mode 100644 docs/fern/pages-vnightly/model-eval/reference/output-artifacts.mdx create mode 100644 docs/fern/pages-vnightly/model-eval/reference/troubleshooting.mdx create mode 100644 docs/fern/pages-vnightly/model-eval/using-skills.mdx create mode 100644 docs/fern/pages-vnightly/nemo_runspec/artifacts.mdx create mode 100644 docs/fern/pages-vnightly/nemo_runspec/nemo-run.mdx create mode 100644 docs/fern/pages-vnightly/nemo_runspec/omegaconf.mdx create mode 100644 docs/fern/pages-vnightly/nemo_runspec/package-readme.mdx rename docs/{nemotron/artifacts.md => fern/pages-vnightly/nemotron/artifacts.mdx} (68%) rename docs/{nemotron/cli.md => fern/pages-vnightly/nemotron/cli.mdx} (80%) rename docs/{nemotron/data-prep.md => fern/pages-vnightly/nemotron/data-prep.mdx} (79%) rename docs/{nemotron/embed/README.md => fern/pages-vnightly/nemotron/embed/README.mdx} (92%) rename docs/{nemotron/kit.md => fern/pages-vnightly/nemotron/kit.mdx} (54%) rename docs/{nemotron/nano3/README.md => fern/pages-vnightly/nemotron/nano3/README.mdx} (79%) rename docs/{nemotron/nano3/evaluate.md => fern/pages-vnightly/nemotron/nano3/evaluate.mdx} (75%) rename docs/{nemotron/nano3/import.md => fern/pages-vnightly/nemotron/nano3/import.mdx} (68%) rename docs/{nemotron/nano3/pretrain.md => fern/pages-vnightly/nemotron/nano3/pretrain.mdx} (75%) rename docs/{nemotron/nano3/rl.md => fern/pages-vnightly/nemotron/nano3/rl.mdx} (63%) rename docs/{nemotron/nano3/sft.md => fern/pages-vnightly/nemotron/nano3/sft.mdx} (71%) rename docs/{nemotron/nvidia-stack.md => fern/pages-vnightly/nemotron/nvidia-stack.mdx} (73%) rename docs/{nemotron/omni3/README.md => fern/pages-vnightly/nemotron/omni3/README.mdx} (69%) rename docs/{nemotron/omni3/architecture.md => fern/pages-vnightly/nemotron/omni3/architecture.mdx} (63%) rename docs/{nemotron/omni3/inference.md => fern/pages-vnightly/nemotron/omni3/inference.mdx} (60%) rename docs/{nemotron/omni3/rl.md => fern/pages-vnightly/nemotron/omni3/rl.mdx} (62%) rename docs/{nemotron/omni3/rl/data-prep.md => fern/pages-vnightly/nemotron/omni3/rl/data-prep.mdx} (67%) rename docs/{nemotron/omni3/sft.md => fern/pages-vnightly/nemotron/omni3/sft.mdx} (62%) rename docs/{nemotron/super3/README.md => fern/pages-vnightly/nemotron/super3/README.mdx} (70%) rename docs/{nemotron/super3/evaluate.md => fern/pages-vnightly/nemotron/super3/evaluate.mdx} (77%) rename docs/{nemotron/super3/pretrain.md => fern/pages-vnightly/nemotron/super3/pretrain.mdx} (73%) rename docs/{nemotron/super3/quantization.md => fern/pages-vnightly/nemotron/super3/quantization.mdx} (77%) rename docs/{nemotron/super3/rl/data-prep.md => fern/pages-vnightly/nemotron/super3/rl/data-prep.mdx} (71%) rename docs/{nemotron/super3/rl/index.md => fern/pages-vnightly/nemotron/super3/rl/index.mdx} (69%) rename docs/{nemotron/super3/rl/rlhf.md => fern/pages-vnightly/nemotron/super3/rl/rlhf.mdx} (86%) rename docs/{nemotron/super3/rl/rlvr.md => fern/pages-vnightly/nemotron/super3/rl/rlvr.mdx} (87%) rename docs/{nemotron/super3/rl/swe.md => fern/pages-vnightly/nemotron/super3/rl/swe.mdx} (88%) rename docs/{nemotron/super3/sft.md => fern/pages-vnightly/nemotron/super3/sft.mdx} (72%) rename docs/{nemotron/wandb.md => fern/pages-vnightly/nemotron/wandb.mdx} (65%) rename docs/{nemotron/xenna-observability.md => fern/pages-vnightly/nemotron/xenna-observability.mdx} (60%) create mode 100644 docs/fern/pages-vnightly/runspec/v1/spec.mdx create mode 100644 docs/fern/pages-vnightly/sdg/getting-started.mdx create mode 100644 docs/fern/pages-vnightly/sdg/how-to/create-domain-dataset.mdx create mode 100644 docs/fern/pages-vnightly/sdg/how-to/dispatch-to-cluster.mdx create mode 100644 docs/fern/pages-vnightly/sdg/how-to/index.mdx create mode 100644 docs/fern/pages-vnightly/sdg/how-to/preference-data.mdx create mode 100644 docs/fern/pages-vnightly/sdg/how-to/run.mdx create mode 100644 docs/fern/pages-vnightly/sdg/how-to/tool-call-data.mdx create mode 100644 docs/fern/pages-vnightly/sdg/index.mdx create mode 100644 docs/fern/pages-vnightly/sdg/planning.mdx create mode 100644 docs/fern/pages-vnightly/sdg/reference/cli-reference.mdx create mode 100644 docs/fern/pages-vnightly/sdg/reference/config-schema.mdx create mode 100644 docs/fern/pages-vnightly/sdg/reference/index.mdx create mode 100644 docs/fern/pages-vnightly/sdg/reference/output-projections.mdx create mode 100644 docs/fern/pages-vnightly/sdg/reference/troubleshooting.mdx create mode 100644 docs/fern/pages-vnightly/sdg/using-skills.mdx create mode 100644 docs/fern/pages-vnightly/steps/airgap.mdx create mode 100644 docs/fern/pages-vnightly/steps/basics.mdx create mode 100644 docs/fern/pages-vnightly/steps/getting-started.mdx create mode 100644 docs/fern/pages-vnightly/steps/index.mdx create mode 100644 docs/fern/pages-vnightly/train-models/explanation/artifact-graph.mdx create mode 100644 docs/fern/pages-vnightly/train-models/explanation/basics.mdx create mode 100644 docs/fern/pages-vnightly/train-models/explanation/index.mdx create mode 100644 docs/fern/pages-vnightly/train-models/explanation/training-libraries.mdx create mode 100644 docs/fern/pages-vnightly/train-models/getting-started.mdx create mode 100644 docs/fern/pages-vnightly/train-models/how-to/choose-peft-backend.mdx create mode 100644 docs/fern/pages-vnightly/train-models/how-to/choose-rl-step.mdx create mode 100644 docs/fern/pages-vnightly/train-models/how-to/choose-sft-backend.mdx create mode 100644 docs/fern/pages-vnightly/train-models/how-to/convert-checkpoints.mdx create mode 100644 docs/fern/pages-vnightly/train-models/how-to/data-and-checkpoint-formats.mdx create mode 100644 docs/fern/pages-vnightly/train-models/how-to/env-and-executors.mdx create mode 100644 docs/fern/pages-vnightly/train-models/how-to/index.mdx create mode 100644 docs/fern/pages-vnightly/train-models/how-to/run-optimization.mdx create mode 100644 docs/fern/pages-vnightly/train-models/how-to/run-sft-automodel.mdx create mode 100644 docs/fern/pages-vnightly/train-models/index.mdx create mode 100644 docs/fern/pages-vnightly/train-models/reference/cli-reference.mdx create mode 100644 docs/fern/pages-vnightly/train-models/reference/config-conventions.mdx create mode 100644 docs/fern/pages-vnightly/train-models/reference/convert/hf-to-megatron.mdx create mode 100644 docs/fern/pages-vnightly/train-models/reference/convert/index.mdx create mode 100644 docs/fern/pages-vnightly/train-models/reference/convert/megatron-to-hf.mdx create mode 100644 docs/fern/pages-vnightly/train-models/reference/convert/merge-lora.mdx create mode 100644 docs/fern/pages-vnightly/train-models/reference/env-profile-generator.mdx create mode 100644 docs/fern/pages-vnightly/train-models/reference/index.mdx create mode 100644 docs/fern/pages-vnightly/train-models/reference/optimize/distill.mdx create mode 100644 docs/fern/pages-vnightly/train-models/reference/optimize/index.mdx create mode 100644 docs/fern/pages-vnightly/train-models/reference/optimize/prune.mdx create mode 100644 docs/fern/pages-vnightly/train-models/reference/optimize/quantize.mdx create mode 100644 docs/fern/pages-vnightly/train-models/reference/peft/automodel.mdx create mode 100644 docs/fern/pages-vnightly/train-models/reference/peft/index.mdx create mode 100644 docs/fern/pages-vnightly/train-models/reference/peft/megatron-bridge.mdx create mode 100644 docs/fern/pages-vnightly/train-models/reference/rl/dpo.mdx create mode 100644 docs/fern/pages-vnightly/train-models/reference/rl/index.mdx create mode 100644 docs/fern/pages-vnightly/train-models/reference/rl/rlhf.mdx create mode 100644 docs/fern/pages-vnightly/train-models/reference/rl/rlvr.mdx create mode 100644 docs/fern/pages-vnightly/train-models/reference/sft/automodel.mdx create mode 100644 docs/fern/pages-vnightly/train-models/reference/sft/index.mdx create mode 100644 docs/fern/pages-vnightly/train-models/reference/sft/megatron-bridge.mdx create mode 100644 docs/fern/pages-vnightly/train-models/reference/step-catalog.mdx create mode 100644 docs/fern/pages-vnightly/train-models/using-skill.mdx create mode 100644 docs/fern/pages-vnightly/translation/explanation/faith-evaluation.mdx create mode 100644 docs/fern/pages-vnightly/translation/explanation/index.mdx create mode 100644 docs/fern/pages-vnightly/translation/explanation/pipeline-overview.mdx create mode 100644 docs/fern/pages-vnightly/translation/explanation/segmentation.mdx create mode 100644 docs/fern/pages-vnightly/translation/getting-started.mdx create mode 100644 docs/fern/pages-vnightly/translation/how-to/configure-fields-and-output.mdx create mode 100644 docs/fern/pages-vnightly/translation/how-to/index.mdx create mode 100644 docs/fern/pages-vnightly/translation/how-to/run-faith-evaluation.mdx create mode 100644 docs/fern/pages-vnightly/translation/how-to/run-google-aws-translation.mdx create mode 100644 docs/fern/pages-vnightly/translation/how-to/run-llm-translation.mdx create mode 100644 docs/fern/pages-vnightly/translation/how-to/run-nmt-translation.mdx create mode 100644 docs/fern/pages-vnightly/translation/how-to/use-fine-segmentation.mdx create mode 100644 docs/fern/pages-vnightly/translation/index.mdx create mode 100644 docs/fern/pages-vnightly/translation/reference/cli-translation.mdx create mode 100644 docs/fern/pages-vnightly/translation/reference/index.mdx create mode 100644 docs/fern/pages-vnightly/translation/reference/io-format.mdx create mode 100644 docs/fern/pages-vnightly/translation/reference/translate-config.mdx create mode 100644 docs/fern/pages-vnightly/translation/reference/troubleshooting.mdx create mode 100644 docs/fern/pages-vnightly/translation/using-skills.mdx create mode 100644 docs/fern/versions/vnightly.yml delete mode 100644 docs/nemotron/data/curation/nemotron-cc.md delete mode 100644 docs/nemotron/data/sdg/long-document.md diff --git a/docs/fern/_images/avg_benchmark.png b/docs/fern/_images/avg_benchmark.png new file mode 100644 index 0000000000000000000000000000000000000000..94d9a367f42b5bbcf33c9b509b9caa8b1d639bcb GIT binary patch literal 43092 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 Z(%#L{)@Oc*WHj(|PeDVzQWhEfe*j?+V*mgE literal 0 HcmV?d00001 diff --git a/docs/fern/_images/expert-parallelism.png b/docs/fern/_images/expert-parallelism.png new file mode 100644 index 0000000000000000000000000000000000000000..66e868906ecfead5c6743682afa419e698eaf8c5 GIT binary patch literal 37765 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

5U&h(#7kC=jCnfoABy7d?@qN+3i1vea1T8 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 literal 0 HcmV?d00001 diff --git a/docs/fern/_images/nemo-framework-overview.png b/docs/fern/_images/nemo-framework-overview.png new file mode 100644 index 0000000000000000000000000000000000000000..7a47b5fa06d29eafdfbe45172c023007d4be6196 GIT binary patch literal 49883 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 R~J5gx){*AhbS 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 literal 0 HcmV?d00001 diff --git a/docs/fern/_images/nemo-rl-actors.png b/docs/fern/_images/nemo-rl-actors.png new file mode 100644 index 0000000000000000000000000000000000000000..fe360c99396af5cc45015a7d2aab91e013290d5b GIT binary patch literal 622414 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 B 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%0DM5Zpe*Q+c36ZWRg;DehX_%Gy%HyCB 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

pBI`P}@zm*u+;mhOrq)jQ4hTJ&t09V} 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
cd%Sl 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�yalu-g}bOOUr*X-v~8cS(^ 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Ûn^FUS43W)|GLEO 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 literal 0 HcmV?d00001 diff --git a/docs/fern/_images/omni-3.png b/docs/fern/_images/omni-3.png new file mode 100644 index 0000000000000000000000000000000000000000..2d55131111e3dde3c905f8abbfa6ed97354e2ec5 GIT binary patch literal 214801 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

F7rFntUf6I*WCwDmF~itFe8F|pk6 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 literal 0 HcmV?d00001 diff --git a/docs/fern/_images/sequence-parallelism.png b/docs/fern/_images/sequence-parallelism.png new file mode 100644 index 0000000000000000000000000000000000000000..aba01deffd3535212e7f062596e04387e4d86cca GIT binary patch literal 86433 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
  • A=kls{xPpiG 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 BDNz6b literal 0 HcmV?d00001 diff --git a/docs/fern/_images/super-pattern.png b/docs/fern/_images/super-pattern.png new file mode 100644 index 0000000000000000000000000000000000000000..62420c2072aef8b36f4f7924d657fb4ae816b7dc GIT binary patch literal 61294 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

    XJc?m6uvLU=x7k$(6&)W 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

    sV4w;YL4else@AK-vh2< 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

    r9IZ! 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 z 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 V(uO@rJ_G(!QBuECs$d%Qe*gxt?$7`L literal 0 HcmV?d00001 diff --git a/docs/fern/_images/tensor-parallelism.png b/docs/fern/_images/tensor-parallelism.png new file mode 100644 index 0000000000000000000000000000000000000000..33f25b117f9d9697867abf5bdd67512139209645 GIT binary patch literal 199650 zcmd?QWmr|w_Xc>8ZV)6yLZqZa=?+0rLZqY{>5xuI>5%S_M!NgbNK5A>q`MntUw{9Y znQt@Cd>fw!;lkPHoW1g0?^-)ZK~5SQ<0%FN0>OSOBl!^mK?Gk2^JpmGH}id8>yEKBL>nsM|vzI34gWgdXdBLkQ#{=dGmJCui;5 zX14^wiPVROeK!Zy;ha3w1U;1cLIx5sD(cSf2ru4fawI5oG>UPcm(*oNDQ5>YX#42s zcVf>(N=CVRg~VeQ|0S!?_bIZHq!Rbz-NYkj{msk8E;QBh36|^S^~s}9KD8umYk#Xg zW8+NlL^PFOc|j}Qe(1)XwI}*r&PO~nq(|RGso>wlhSaY9`)ByCPQ&p&{_p2VdT|-_ z|GhR1?K$oLu63dIi}}w@;0yl-{r_|!^ot}Fo~VJr3!N0Pk~0*a%v+0pvPHp^WsH4y zkB^VrNPFH- z*W1%?@9Ze*=tR`iaKBIFM81G|iRiFwxFU+Rq?4l|mAPG5fy)O{1>#{WkdcuQ@AY-# zjx+QCpUvIPSK~}fY`&`JPk$qIJ;y`a+#`5C`}14R?hG+nzzd+xfS8FQRbs98%AY>z z-d&%$m+K}R?N$!2R8MKIhI}Z<&u=^38na#YC)VE{FSy+weg##)gI%3FVHp`y(@y<+ zg=TA*@aNf#klSRDp8a)i(p_B9#5{Y*YQURtv$uG-{u2v#M7h$;L5r#GnWJ zstY)r4DuL2eUJk<#cXG)&51qFE7OexA09z%B1H%aq2SGSn2i(;ctL6Q)&fVGedIPL#+LPwHX1v}_K z#1-@wrD{8Pj23_lw_TsH;1|;2OVT3OQJZS=21!Xtm(;I#cuu6!Wx1^vEy}z@$pt3M zyz*yittr#okKej)%)y{1!y*ya*RCzWq9fMbVPts^54}+@oVN?|ux^ljmVMxczEqX{ z>le1X&>5jmCRMAf%~PALocLp@1RiS&ozwd4%uIyVhr5HbJ@7!iHSx*m>F?=4V$-c& zBCWDi42-W|zfKVGYH9KK+lvqOu%IAKMS=soi{zt9vD&xB{RXBTm>)X9rG(8|tg7+2 z!2|d;l#-hFL*4OjrgF!<&w|IjFY0zm8p{m(qKm&RNQXazLJ?7ceSK+L!({7;rj=Dt zRQ!fcK(|ygXGMUn53!gogO=U>vi9gNW5IJztJ}ZcSvqn)-P=g_(ynvB3?Tn!8bJi~ z`s)LU>JNp5h2Y`mGbSeB;lkE^Xu`6gPhVqz_rA6-H|%>{tkp=w19Runc>=N7o#tqf zv3a@_+pJb$h(1}W6Cq9M@yT%gkLLBXn7)*hziB^Gx_MItF|pRysLb6Bk%xLc4Jr~d z$w^^onK7_I=bOD+Y$K-y2V&!)lrIeZfw~Oe4WuKMr^^jYzkGq_D`qPwEBha<_H4Xj zS_GmzKX-(9&+T=01`#0qIEjmoH`tvn&o3z%GE-g#PQdHDL^V4%H~Qz#qqouQX5$Po z;EH3uANF##^I&yuF5NQ`&u8T1k$)5M?w!HdCJ#6F$~4EBlQ_Y_%p&$X=)feo zh^KqE$3C0!)WL72(#|lRMNeWU%&$vM%hXG1U<4U8t zKsQiFytezx?2h$BE)$%Rx)qEu9MsRhr#I5vaF%TnU^!eyzX^-g%Bjtzdmn@$&VQq% z566|{Gk^UWRFHFjxPcv1OK`t{Az-9)l0gJ1aMN7YNj(HeFjlr4!QQn_`SJWlPXH%DMS~vm-knD@&Zx?`SwQbe(27p zqta)V_l>&W7jwjWYg4yF^l#HNtmil2@|Rk@ozWW;7+Jk`;J15M`O$lsI@qm{N5gVbsgz#>p*k5K9S5;R(8Qe%~#gRA@vNNh{ zBA#LBc2h)~L2)%sXdb@$Gcpp%p+F(x*`(*j-Zv?SO_w*<7{hjVCxl7N`pN>aZKt$# zh?sP`(gas0ChDa-EW3SXS5Sa%7rx(@Ezn0!;~=#@;IOhW{}F@;jX0V_}zk0hXtM8#!zZ5 z;!tof20ZV9EC&UvE*Bu)#M;i^*tTQAnt?ET>8B_*XQ1Pkj|!0BUEwU%fda`8_Ex;d?7QR&6=L5Qjsu9hQ{csjloD> za*6C&aEK@KSPyN=0GFK<#(+{ zN4@zv+v_F#SrcIV%H3F5>ctXTTI7?zG~yNGFFJT`JRs~|_wLL(Et)X8DU5sm^>?i0 zsNX~()=ft!+AeFcp$B2i!e;<=une-0PDPw2cF`vwpI=l)n2yFfbG-2$z<9AoGzH0Cq2!Kl%(aH#+Y9Htl6%WVGoi6nIazM`qoGuax_q zBgVf&Z`>=Ak87xMJ?J%QYL@ExN^Y_hXAHvT>o{NbA}*)>`B3Oek%0Cf9?6p@Pc9cP zTH;5c?^F4oOzC(vXJUC5JDOTIaIQ-y$KX=7qi3_q8>bB!y5{Za(7&neqSAva2@S(O2tOU z3zWE4$kgCaeBSeB&l!L~E);HeO+;5)U#j1~IWI0IobCa}6v8wFt{okzfJj;!fAM&Z&fE+@3uR55=_$ zj>%iaWJj~+rOV5K6#Mo>!pS)S>}2dmMGLr3Vm?@a4Cd-sbKv!Gqt@uiGFhTEXKtJa z4_M}tgnKQ-ziqB4jNQ{++2`@Z z-yJ4)GP!*~)uD)>KM<)ToI`}p*V~uxZ#e+88?@yVNK^|4J6m(cXV*!o2b-HqA@3Jl z1AO|~TAzV>sONVq6C5xztCc~N^5h0zCbq#H{yVaF9PKs$H&8aOGg-lh+Y{&etBnt< z*1=u>-c5TkWDGfdxQ7@)eZEdOg78GEu%x6rh0p%_maKRDr0Z75PyG-2=d!qnc%Ps{ zeyv%gN+)qN9;l5d+DoVjQ6tQWs8`V!$a}nu#hoyuAQVrvN4-B<|Pr0_RxDywSzyp z9FeU(%v*k>#y*(7({zOIY8*w?ej;@s{0kMVI?gWLRJ6};yeQ5Nk}D( z`x$#>25>Ds02~7<0AfvAtaK+Sb}GO--(Ls;iDUh=*5k%e7td3kJ4zA|4PB@AdU$hw z;(hBSi>d*izv;67v;Qt&|5I7$fgRIzwlCsXwF+;#*t8l50j`|%4@g`y&M>vG=)AwX z83ol9C^?=nsg`saLrSJxX#WKWxMzE!sND6;j2Ya< zy7i7*2OA_zC_qeCD`Sr<)h7VDd|I*rF8WYPAI$4aUVNbVAZFa;PwL(bvf1VEP~bh- zC8qICOLf(0OUayq{yIvN!;Z?lT|bMfMy2g)cUGM`&LlvGa9D@;e&#;S>)ypfT#w2t z0{BhbqTi%$4Z6SXIrE1^&YYzL&TknBp!~jkU#ScA(bl4vot=F@)xm4`w>M*;3ZX5W zTmWm%($bRm>n0u!IltldA_u5=I{4q&Zww7ylYxJgj=w1)P(gBC4UyL0mVl%2IRhMx}jDD=_Q!-I?y!9wR;8F8TGh$Ng8- zqGVr9%*`=!rVsuoaE-K@%vODI$Iqxf+mIJXXX94b<<3kt75O7u7#lbx%;@9o0-88$>mCu*J{j5rNd4F`Gg_X^b$D00C|j7$0B&aWelhVZu7u85HsNJqneCL8lTmXVh(~G-UtfY)9|8)UnZr3VGc(t{l#_a# zu6qiAr#!mt1>j|>X8j+9ICG(_gafIT^uZ1h+%8wP@9z8QGg%Wey?IvLmk2i2ljQOJ zUBqjWI<4ug_svI}*%9Y_OZ$879v;MT`mM58f94Jt{Jz}^{TNOhAV%=0J3At*{Gi*n zk#=(UWz{X@;xQTu*?+TtCaECr#H|wn)+xKV7;9o;q9aQW2kFt~=BB8dn?QyU?NjB~ zg~MW5qyX~vgj4utF~F&eSz9j^y#rfi<=BEbRdzzjJJhpC8uZof2&PT`3#sxJR5ua& zbgr2yoa20xH(s!idv`}`!joo_a8PLI{{yuk*q^>s2|xr`zoAPsnx<~SYRsgGgm6de zDJxdz0f0XmSS6(ZcY;E+Ia5yfwD!X$n}dUc^X*X&wh^dy>?f;^{(~0&(Yz7^>x0Qh zH?Rk7SV=(vbhg?Y+X2aEkvA3Dg&SV-HJ#6zU!Mck>JZ55={6dYM3BuM0i0^q{az3B zgkACpyvm*2bJk1u5fCXri4G5rf1TFWCVA%30(?M`R-3sysbT%v0uxCh?7#SAEJVP4 z=}q6Cm3moD6QQY1fBicw^5Fi4yZ`EB1GkV&yL{$!p030CbA@5w#*ma2`z^lsJ2`OcEwg!ZMkz&W6(rsFc6IY7n9YAi_CDz?ZX!s7kSz+hXbAi+EP+h7SpQf=#6K* zsJF+>`F}{@nAmua+|DHRzW;ZxV@b4^|9<$#)b|pA z1oS@?K9&4`?dqQjeFXnYHvjqi|9xT9z2;&4->__R{LtD*5TevGq*gMBP2CypW!c_q zNLv=V2-0qar)G^oTWWIGPJU-+vTKd2TFvR|iLT2SY5 zD^D;=#D@WKcGl)G%qyn6SS|gE=$I&iv=q)|u-$83W-+VMqV`|=v3dGj^9Cv14X4I( zIb`H<@qsedTDyZ1_sSgc?#RP>mjaA zt}4Tjz@VS?Pk)2KU_e6Ag#BUha8C&WDR> zeRcPD>G1>tOU=vx3v4IfZ}-_ZdueyXim@gb5gLXRK#v=bweUQuQIm0)#TNSF&vrc` z9==dRmTri7HnZ~ao_8rNQ$&o?j@fkm>_KUg01oc+Z7I)fW5s#Hs)g5A!(_j`Gx*f- z&z58jcM3`IK#|s{@$F7>Hb>1a^}OdYtA&df@_EW7ZHosqyjb5SFVX-blU6OF+BzNc zFT0|e%;db&(+Bc7ktWoW?q5TUE%4pP<17pilaXxhP+i{s$2@XF>o7*X10F=&)F;47*T@+`p^6zL=nJe^^0bPOhn*!g&LP7{C=mU&3YhB8T^nl!>q&gNT+C zVMuRNlE83_8?8(=vO=7sAT%=^97qr$`KpO{J zQ6K|PJqT2pyxv92O_;@Y*}-i;kIaD4gtQ_mj#rtuB#8C|YmGU*s>RpoDbKRa4kcbF zGS1tc1A-uY|P2_a@R>wLs~E2}Elt{?<&U+~Wk-)1Ga#yQXS#}=QO-4Iaj zR_jq}_XpCx5Z9ae9}6Em?n_$Gx*s*)?|(A}2J}+x5=(M&emnXE>%vlHkaJ#m6&K!OYt8|?wsI$m7wNNN>`3&9I5u=0N-#sPejN_YMSqARzD(IL#`+3-+wxwTkN>IL_A zg{xtSe%mH{p6)m;znxr*&MdBp={WGF79@hTQsM2EY^tj|Rs0V0I+Ms`#fcfU-@`@ifss2;ZHLL_J^R%>kMNb#c&a<;ll`NBgJ(gttGL*>TW#uI2D0JF z2Vdd0=a=bpE15iRHd!r*)5|f^zcxigrS&E7A3xP}+ef);j6%yekS|N0d-`QWa@=bZ z=5qD-0T*J!nX>SxQ{2b=zRvAzxb?1Gt08h{Fj_LSAjSVcXMSWyr)D=qWAOoJmRkDA z$wWv!k{ESIMLse=N&AeYnOWza=rUW+=j2G_!}t${fs#9%COHwW@1hFqa9@sx$A#O= zBBAS=-I$}*((|Projs1PXs$w*lgClAh^|7FBIhKdYM4kq!%QC*P!U+@jQU|Mfh-55 zBb>c=7?8s+7YNO)2XaC+7TgdjLIGq5Z@(8QWNG7OTE1hB6WlbR?^6qTY?MQ$#D`g{Q-`Vg-WBWMl~p@@;Rn>XCEb2&$ofsk zU;9!aC&U)7QJtvGt!^^uDgFK%rn3Fg?Sp|Qk2QPvFE*!~`ft8O1V;#5uvb@}0EaO( zol89%9=Lt`AvI(J6T;j!bR0)&7K5kk^~ z&Iuve>iZ!1yl0>Y}3+EXAfdPe23@Z9gIYLCqm=_zQsAj1Li1^x z|LfXAWiAjTdCsN_t#!%}aff%h$%*e{OXJAtT-vw!4#-LlBu?b?&QdPyD+t3Pdkhxq zCYta2hVXCo_j1}cr?keVRk=q)}K;WyE(5f)X=5`prLHDnBMh{%U-F~X}`zWbn#^e<*$jaI|EvL zm_|{rRc#sof%qRhnZ;SYLhYe@*U|jr>qY4vWg)8$pNUIl|Ml#Lod-c;jYXYrK$RIl z2HwV_m)o7dpU9TtE>!$DaEVps;C6nhE~100;Rt5j|-Ht(^eBQAcmK?am(P&Q$%n z-LlIq9Vi0IDXX5^@gWD#m}21{;T+R)E8$oV4kyJqJhG@a9HhNymuV6LyEz(K zXmC)VBC%jD_{7*njPV~BOc(<4y5Yw6Cgvx`RY*I_jxpJvDm@SV1R|(R9dHw#Fp~M- zw}1q%u=}ZXVJ6st;+tqB<$o10|4^$~8t85Qe^N>OcQk?f$jeWXVSkTyWODr#ti;Jk4F*miONB)x;#yj%p0_+Lw!b{F`p@^~ z%I!Dg;I#+VqyG^E78Mu*P^;dS+g)fRURYRAYjWlo0u?8u4NM>$9d_WZg0gbDYKu=3 zOe_H9N=Jw(65c%nJ=&=Ud5gs+QdKR7C*hRC^YnOVC=~y*A(TkVxtitNu;;g&Qb`^BU9!XN;gTj!C1nIwH8x@IYIE7F! zAh!@8pnE~2#!RH?x|L&UYU)i>Z?jiD)vjNjQBm=jNyVL5d!|3VJ*M7%LmzZp-OIsk zX#P*P>5ia`aDsUdLk+AQhWI;ErP3YJlv_8nZ}rWJ2GWGc*jg?@xv=!j_tpw5 z!-9jef9rH1iG22SR$AqcVq;^=)R>*mCRE|n%JBr&eEBxcGhufUq7Y=z%I!>gEwWOy z3HXW@8MtQRJ~76wU+w0C@e2Vgoy*(E{|Lo|@OrNS0J4t7J%PH+MAy-0h z)uF4~1Pj64-*eXV98QlOys&x0Po?kHcK;%3!3&Hkt-Li;`bh=tJ{1088B0pXRNpnHl(S zc;zl}Ob*$+h-fV_7HgSlF@Upg-pm`KaVLixaEiynL&$hI&GIv>7^~Tx&dZZ<>zTXO zdCIcQbQv2(#MXl<;c7iK{;E^Zn+Z!sli?!M8^ZOqDvis_>Gl3Cy|h^}GiIPEez1v;sgeeHgZEmt|}A1A|LdH8qbQfc|3lymba` zX%slO`nT@~hvTjq=!Q!GD(Dr$YHTy0T)vz6vPvnQibZex7T>3%D7us0r3(dYC&iZc zj8UX|BWMOOWs2&V1 zPfDhd(}Uk=vNiJ-=`${bQXKP6;$J!Ip(Z|A7syQzy)>7WP!H6Ky;YdV?9^OiXRGun zPWeH^W91Cf9>!pOXZa>=w%@;hQ`Ij-YCfiU>odm!U5j2iiG?oPw67ik63c@VPNG@W zl10-L^qAea3#Wfp(ax=95lkgd<#pU80ZeTGA}Y?(f)no25){$Y(o)LEh?YHLJE793 zNtr0cD2{lzSl75;4Pg+&rgjcHzCY(6ufe#zfd{3KJkv2Vrykkud>2|{$!5?W_p2el z;jn$CZY$TQ&h=;l@tpiWnE;DIg8C;I^qDMH_XR{TLTYL%@6B#s-Pz<5wK|(jVTQ+u zVNjC{WNIdiz!%LyF&2b&?>Uyc@MW!UP<-4w-*XGg9tf%TI_*w>!zSZi+8oV}oVWU< zs;qak(xp~ok=WZt%WDZpf4?jS;7!ECzW^FA#VU-%2=H-sT^LiVwIT;1S60>X2cvA5 zt346KD{nysVhoJddG(B^%xYnb*YTF*cmHoiEiHee{y4q9Xj*rNZ@Ow_pdTT4)Jb4! zec(;=c5`!ARMy^J#k?hv_8H`jvNG5{-$q}mVs>GLD@8&kL-0MRKOPneVB!U#Ig_T}{1*i6X7#Zl3202(`DvUti>7^gdlQ^kGy(TT0{p!Sm4vEmq>spFhLr+?rG9pN6f|+VBeqV3+)^ zADNj6s;J;>nTFh1*@$<%S1U6rmKA;<9wteBeZ~h`8Gy;u{YNZT=i-v*{_|ixAHhFXJ5_R4-3_8W`+2916-c20WxhMuq55#wC2OB-yFsRB=e4Q zmegbEy1g!7R-@cx*vkD7syA=baaMP|UBuzA{i$U(vb`a*5ftJ*cc+~{M$qn_i9A(ie%_hj^hWf?GytL=UyRjgi#0{Vai zmX%aYh>SnMAePNR^M!6txN5n67X}zu6CY@RV<+QOS1|8-_(zrvL>qRyzi6PxELnGr z9uRuAGqu|G4RLdKx2;gwDHxi)WIqh%7i>YYT>;aF?VPmiUFRbbNfB?O;4`fta|T^3 z7IjGA3i&BJm59g2slX{b;RBFnQUumCd3SMMy>j;(8e*-gNfQ^O=&9dG>jyL@N=!oo z|LyfuGF)YIRvJMrC+kPbNOx3(n9wh>Ca<0t_UwN4*MHvm!?uG`$ApR(blMd^e)O4B zDd`;Sw+;T zBwnAX03?GxO>QLeJ(6B!-a=D!5Y;m)hi=&V@pDp3>BCN(pO3|QU&rf>&!_J=pax%v zEJWlEt=i1ec0R^1R4r&>Biwrg`TAyd$*vAROd3!24SrY=>$fArS(afvd+3^i*0Rq# z)GTyl)<&ejLI19?`0RmS-F8osBc2N22Y1@u|9t0X@UqGwAfq!HO={)4Bmo)|x?c>h z_`7EiykMG3B?!c@mb~I`+jl!2#{Px;tpetJ z5&c$QB|_=O-TqcIE?=lDSJ;>O>P#+XK2tAS;w=8`APwEKy9i1xi+%5%$4qYh=Ae|e zAcH>9k)?We{9rf^pC}KvtbW-xCU*`28u{_-b7e573C0$m?Cp^|UoHpwB?kj_or-~^ zB+J&~2S8)y&!2#BxjXRkn(oR)!=SG{JhjEI;xiw0-@!WBn7d@1QbHBmG{KzC+A&iZ6a0TG=5*rj1Dx z;o(kk?|qyG#CdPIMm(1|Bn7r@)>oWvSV#r|)9DA>y>XHxzz=1mjL66`#tfw!SpBK# zh^}4mjP@fRB;(UD6sjh@(nq3?j{J_=XSZnD7;LXgp6gAE-srGisP?{uD=20GhJJ716e&JGZ zcQo$~7A296AVT$vV6vUl(LRaGQYWt<(OuRp>)RBta>&5#j41FPx9rY;NeX_2=7H zutQ%CFoqaWY7!&?&f)2WW3>DHx@sdne@CoV)DeWtO$@zybWyiDmEhr&c z?}Hev!H3NK^U}5BRd;pWI*7j3PDrql;X18V-4^!*;YEJ*cE;FT zmTZp2*Ac=HhZ>j`dZ7dV8cH~WXehC_5x#!2eSdS%12UTJfzZWLoQBo16DCL^RG4yk z1O`3fUEdH7Rt}dt4qcmhJ$HFqZr9jOl#x49m(Wu#bqQjIUXbu@nS~0PkUraw+HR3V z+YCZfp_`(Jk6$r zTGblNR3w85f9Sywm9w2l%nvvA`yEuOhz2yAWMv1wN02~Fv~(m_NQfq4py1Q}Kjo3k z6m{>q#h-Fu?;lq#$1y$+OF_@Oz^Z#k-)7{{t{;o=mVo`pifR^xSNVd!-hxx^el76u z!7Tg#5s#r(lsjV$9bn z2Q$i9jcv6ym76}PLD+vn-+ydf(qV?w`RAy+QHGg_7|v#=d8 z@WT^axxgpoNRSXjWnp5*ceF9C3uOW{@1O2TDf^?YO2=najbnP%hgO=&DhT`u3AQ7p zs3oh8wW>3s7nH+%1f@8oakc4YU@N@kTojo^>HE@iIr?R)=N>QE|Io36>2j9%9^uIF z**AqEPc}oErIJv_0Ws}!+w$87KH25dG=ze$%nkDUzBE@$kz?&2*~{|Bu%vXsbk1~{ z9%9SQ!h!zGhkn55gM_{53x)+Xz3$GuYZ$iDgxtU>pEgwjEPLU5U4mzS&{FswR2hou z3DMGI4yyV^Dr?6y;j_ zf;M$d?S-=bvbr~d~yvkuHyf@3$7Iw`TAs*t(!LMzHc#!V93yhgM0 zSAzV1{Xi?QL=I8@oiDNHou`kn0*%1OyzoLW6x%11l0kliFmHd*3ntbOKty7GTOlWu%U0Id>kHJ*MghyPQ;4q2hhY*$ulR-o4AJU1$QL z$CFQy`uXXjuA?1oBJI!Vq5dW0EUj0e9(EiOu>Y8>V;6%W~-U3x#9t zY*9u_^q2a=;Xn!4!|!=e-apcm{}g7zN@#kWGMfJAdJKbmGq2T50GyUiMR z#bAEy=2PQ%--95^OzJ-tS0A8a?QFzGCzs@BlI{@)O0m`Dctv5e+y=e)2`64>YL+z3 z&-@O#0ENduJ zq+~0NXLdg-vV2U9a-@m2UAX=x+)1brSep=2@1d}Q4>tGlh)^?f$tT7(Z84gL@b|PL zZDdMeY!Hy5>9ztg9tjfxNk4&lq6~wJ5VvoF{*D6a1o}(c@o?tF=I^xGHhlAk{jr-L z`LS2fLmAdeh19c5lj)9PooOVh(o7#DZ(f}VUIjC(Bz1+9gA;x&(}cCP7(#uf>qzM4 zL0OJev-y}WIyyrV6ISRHzeW+^W>g&uc2;5i@PTH+#0xVs#hkVTyk@W9v>QMdeV{%m z2ZNrsd)AaI(Xy;i0{Pd~dcykDF$xRH^&GPqUF{e;-X z8C{=D9bBiEP6QPRX-l!9gwUmidr_^8awmc`FC(RN%k?pOS#u*D&+HrCJei<=5-zP< zTfpi_lV)l&WFsmXbvu)ro~@d$tr`dzq|7vk{*Pt1;}{;l`P(iH9A68q zT!l`XAxeW1+ISDdCA6bcE<-o=W%}h8Np240Jx_<1sn>Um<+0R+dw&*~XahB1@*DXq z1?=-m5ZB;qceQG>C!at6A?0>^LA2+ypd7c={VtAy@r5j5^F~u6GgEGYlcY6M!g=RD z}93IzS-zPf?CnYBzK~V$o(QH~yeU{(86Vn{s zj}40Lqn7Wj;vB_#6S~*$rG`p^%e|xD&x-T@7geIE9!IEL2aC{-lc-A*4LBHSh zP=-U{U8AB!Iij4kI#i`1W6t&DeXbt z<9~<4Bj?CN+KF%dgy#89Y;&Ym4tNZxkQ_KH>h>L1g~B*?Jl7<^kqB!1ld4OU$Ioe2 z_0Aq}M3(Hx=%1NB_OF(l`CZNIQMgkg93(zRQ!`!1XhwE<$pp<9WqbYv4e78Ec861> z@=IL3UI7X+k^(be6yX#aDENp^*0p>@$eE@MIM~O1$CCSQG!UQB7>c5f&sD+bIUIp>u4=?W!4CX~ z+Cs*IN&W>&!yS_>8YA-*l76zh_(3^eIl3BAkM+%{bPxP@V;pQHS0)EO%Jf7f>txY? z!Rt_DAiaZ7eYX zs?EGeS8xIp0%1}q-b{bZNFn-n+|w@!_L1yUO*RR0)c}3@xdbBT4J`vj%-ejP_RoPJ znqpq}pObzas@cc$NpkB{cpU71D$>%#^(P$6b6o2vP37^9PG&qHi~n-v(_q6hlL9Gp zNT$(~;{G-rSwE_73udE#eYyqboxy2GKy6+w_~?Z$7=2Y;U9jQQyzH&$2zkjZOKhF! z!!5c)A5F7n#Ig03v8?{L^0I^n_h3flN{}BuTkhp_S+wF-0$yp{PakqjXLE!=r7)hC zV1ju7t9u5@ckua*udQRGNX5@tg+P=eLYRa;BMCw14MLAaiX$?Doou<__Y;-(WO)|C!?`=pG>y-HQF9#S7!>Vy1)cD!FJJ>~oMlyH?Hp?%j-x6rQ zrxow!Wh}&H?MPR7V_t!d65+|xs{#5sY+hIWmusb->SdAd{KGTuvSCzqcDPx42he>| z-{_;Mc5TO+2AlMAh0{~LfNHaEzABA=l2rtbs-(r-=qhfr*7IgcI!S3iZRxV;GpQ)1 zBbMm5MZ1KK#Y1_Wj2Z~=u;5@a#nh^!hh-s>7WLL>%Z)6kPsNq0 zMb0oG4!le%AHs_aK!Qvk9jRTbFK-o;wLPhV?pH|I37oCc)HdXX zj#>H-Zi#ae`44`fs7eWydhTKICgWP3_`WE7aWyXXqzXYfLO;dDxVG9~WUs_7X8bAf zt3iLzT+3)_5#BIVOzo+Caan7kXg|}xEh_(o#}j5#bbY7xyvs@=gw`M;+p@N=g;oE>=o^|jCnoobfzz>aqltD1`k$hWGNA<&SQuy{NIMkfq7S_3R&XMn?@XJ z=XFCe0=wMR3n07+-b}u@jPFmM+_{K{?eSwk>df|?wRr1Oi99%FMa!gNxp#0w97yxP z2ZQqwaOxWZALbOiJ?uCPBMFmXMvi}tTq-^IrWb<~;(S!yx-6?hqE&_LqT{|{Vl%6G zd5ye%o&7;8J*!j2j70U1LylDB)z15#Bk_dulMAzxv^+&+Zj_VZs|HW^lK1>4@1OA= zTAkZki)+c$7Tk+0za-Dj6&YS@-hi1Wy(*L07HF5x=tLBKrSE*fA7L$Bw?ptL-O0S6 zL|62sn#}80uXO+XeCxcC>cnoJ8@I@z)BelUXuMJq?9q~5QAx+0ZakK1~qpK9{2F(s&7`=7R%MQ-Bw z*&NEBUH-M2?#WigV6$XZPpwke?{>`BTuX z?j8XmD9_%#kLQcw|EB+(w9XBhneoj07tACQH9q_lyR)u=@ z1n?~$6wnI9e(FB21_ue7PXEZd4C)`jWpZ=xwtSo#XjmmtjpQ*(BM`g(2rtBm`trz8 zt%(332TtQ2Epe!kZ_ADm@C>KQ-ypOB_I9nre?b|gvFI62Jg%H{;&vqkzfZV9X~xYa z5nu!r`0qc5Cf(R~)T4wbF#Abz222T02Lomot?Sdnp(H0x-?CU1eYhlN32qitozV3K z$(~<7D=A9fD^WRipWjvvZAMNzh^K%aBvIufHMskMI#LHf=oLC8$?s=^cn-5 zySL+B^8rckNT;-2jYs)oHJu;E?%*87r}!`_jeKO{&}O6;%@g^*dIvv`l8!#=daakb z8}y>!HFA?$L|2D*7kcd&c6^7A;m6e2pXw^ybW6_WLfRrt*r`#F7S5}k1fk3a#5Bzy zsg-Fk#Ux7e)9`z|E^m-bvP-CxVCJGzpb$%q^tc&m-?i9H0Ts?3f2ceTPd3*`Sie<@ zQe*;XOQ@BvG%_$TNdsEY^CX!C7(DxGr%syWOz(-}M+e1R+q>@EbSU&^95_IJ|g7chOOdW3Kg=MSY|jrFG_lhAxzs zm^l6F^9VM#D7!FeS_;{fhuBiBE>ufmhO9A-#Scs)1jos1*7tSv?RJA2!&`S=93i?GCgfr}@x z^2r0)&U=&4UuPBXXcr~$gjdE43US^P7qYddyc0t*WX0pCEsV7htNUgmxqrD}GWj2( zH)zlfWSaDs?>)&WbM{72bcvO8rQKTI#vZzJ3D-PCX7&VQYsP--!nppvR4&;46s`62 z*f}mZuOGj{?)MTL3Y?{R5;FFL(Ma~%HDQvS4Q#H@LSSE#nJ@MEH1T4}nI6Ib(jPZ#`Vt1pq{*QW2R zdcX7TyQR6hv3tgU|6u7#gpu!iU-sU=-CH>ee61lR{yUOOjzshp1^AYv27739 zgbE9PTIw{>uBiO>*?}9c+$g0xc>j&YKze=ieuZ2|4-*l=I0Nd zRsZLC5U?=Wj$tBl=WWP&r7@Q4^&e=^2Xf3BhrXjJ%Wrq%O{~Csq3^ugR%E?l;CehL z_++6}(+<~b!+_aBCT;T?=XJ-w8lkClmn(TCu_Cg~beCRnn*;N}52vVIG#elGzbi3s z)|V=cF2PNUL9b{8i?&#er1>%|LOw2M6Yu!9;fS{N)&6-S z(fh;qb+t*2G_)G;sDQtp3;d|iUot-BKXy)goeAtH;*U!j`4 za9Nc&AVTM=PtR7yn#v}<&b^)7*(*?2M|IH26Z}=sLD0Q$^>bw507uc-iOkznY0sV; zidGf{?1TO3(M}4|u8*tst(K^4L+7gRk5W3*MSS>yGZt=`t^n9kzk+MM%@(6&5;u-g zPp{?iN0(t*Mjw-8J&y4B3OL+s73%0F2nKyF&gI<@_1?)SL-wiG7ixv+`2+|L-rskO zi`%~XnO@qF@ba=V^A`|xBOwxKZn2s8ad0SH5>)kLYr-M);DLfN+FYC7744q+c_vD_ zn!x{%4tWiw+gPYSS6`9+FtMtF)>nt;-@VP3t!EII*3uCgW^yNde-Sr0>jhk^5o0wf(CaM5oO6fY&%nbOJM;=<7LYQQZ$38ig(mD!+{k*J6DZH3o^E|V zX(}A3DD~M{r5br_8RR5*H8kS_yY>0|z&zr@)6*iK$v&OZKH6Vxvg+)HZ4TWRX*@58a4 zK9c282$w93rvPOlU?91GPC*|srEkv(0Xl>I&YpX5K8DAlyRl86^wKriJ|x?FUPw3% zhd47Gf=HM{nBB9F9F<7y^pkY@%KK8xLShSs$7_d&fu~n6;DqZ&b`o3Yz)(c4XLNHH z4esl!wlgbSUk}56IUf*jfvFlWBHb>_xS?Cdm`~Dtu%ikx2w*P#6xABtVPi{e*44w# z;!U6PiNK?)4cXoOWOMKGDSWS?yKrHX0fi}qvP5jR0gfQcMsj*4LG#J2@B!CPEcSh7 zdW^qYKt7ZX=UY@NJNeJ_$j$&aOx2*{l>a(eFvYe;m@d@Fy3_PhU4g zG*+U$SZ?C2_ocx&;;GX3-L@E^i|eok75D;W`kpP+Lxw?y1ZODbM@%296_WgcYU~x2 zZ8|&=0ea}XvsykKOXK}Vx}Pd774HkQm`CML6!JjJNjTP3u97|O%mPp4Te9oNXvsR+ zKEXNc!9NPb);S3T7*#e~Fzl2DFA@G^!JvuSPu9I2Z>NL^T4oZ}^Wt3eG$XId8+^F~ zapL#6hZo2h@z|`64%KHa>g@}mYyv*vkYU|HDypn>NS^ScFOA|Cj64$~QB0@>8Gkg1 z9N(0*q%DJ?P`xAv%h{;2PVyH5#@{XAOMw+t01j#hGsQ%@1Kx7x>|)h&LnRzs!o)oTm0==UgS80?oS?6+1H;RHyl?20<2lB1uQLB^vZ}Vf zXZlk5wz)MOZ^I4U&YhYI=KUUYxtU(4jfTa=y{#%yK>JC8uTs=z9uo<1JTYo){{DsslfN`Q7>Vyu%>`E-@#{okS+1nC+N_$PKJ4P+7wk>$Y#U z`f3$qqp?^@z0kDY5h&ueVd~P&nPge@$Sa-gQkxMRjl4~3(QXMGF4?WLOr8k{EWrEm zMiyC(W{Sd=2i^{A_a+K7U?dkaLkjz0d=xF0_z=l!(!n zrUM8Xl!#9vR*tw1izb3w$S&ziN8W0?h0oYQ#1F^}wJ*Jll`{0IdQfUXZ$l>|hH0DS zwKmS5cj#mGn2g3(7~^F;pzD9tX-@I2O_z3t{6cs4r=cU=%2GhZRx6)_v`ChFA*A7l@tJ6WJlZa~ zt{Va)$O&=BDCUly-Nkv+i5)AeZk(H2HA3vV#ia7mGLi`=v=PJcMT#_0 z$|vScR`nsWVH=9zuY@)jZ^T+Wu$>-E?=&^JN*-$T*NOT+*(4^iYQk;I{;bhR-7=V4 zy!hRLIK15mbf9a4M^6{z&j$I$dP}s&ZLvp$bN05E=Y+oa(-WT^$G3o7X@Rly%c#St zchvgzH?rdxAN2!LbE1CntVZ*&>ciwFkCoDBrf$Owvkc~x5%i&S%ck+L^1?3b|MW`W z7L6=32xuET;A9C!R!0W9b^{-e4Su1@!k6l`!-O~@=rDw(-%c%fPVDVA%NQN=R7YL^OYTthLq7|MXdJjoA zqZu_Q>xHPy>vzS*hysbeaPgaFwf7c@7%CKHf;R45>N=)*eRfK@_%}1 zvTnE4EGMW~4b}n*Vi6Ld_&N#)ZHuO=^YqH?`=!$nW2HP%@}YQ2DPVc-HsH*Tv>`5*I8DUVbnNm!^bM@jorQXrQ5SmXO-mzl%6c=8D{0wK(u-oj!!PoOtL@CCM99+gMFjxtcvp`WSfHQaLXgGJ2-;esHxK==#SuYEGM)n^5$T2h5i! z?N*D4->0|!o%U~NWg;;}MRckp6Q>V_NtcXgS}*3gn@mcD5+@f4HHlrT(Wz_lY83--b`%B@ zx%z*+?qJEtNFO0c>u)Y;9hoC=EJ<*nviT!L3`|3> zRJoCUc7z3wAd@yHfr)av4+Tf?*g#wwGpBhU2VO-Q5yHfMaz;CHRJa_E}vCKLnaYU(oiS!#e_W)e9mf zk5dF$C5Z#iLPHNxgHPVFnR&2zL(kW56GX90tY6o)fxQZ2Lzg8f!RvWDC5J$4^^P0zd*QGntEd|*v=&hcu=D$`leiy`?te^Es6vpi<(XJ>FpR0{T#ozE1D9b`ptzNe!z#0HXk?6T(Rd!S-LX;?1 z;!yk+qiA~S+rO-C<3N6LaO^E#PC!pc+s{{WFcxoD9>c1MCxuw5%7RxfFGJm?+{jS) zGcBY`#K>^W_^dE71?_@v65dIcrXN(CB#e>WC^AHl&eq%Al z3>JEi1>Dy4St`AU$sjtB=3s7gDDnBfx~Zx0dr4Eqs9)tnVV6-jfvUD$I%f5IOTRB9 zNc!l)0KLNCA%+jyy=yi33XJf~zrTXD``737ig`}?E`2HxO;`JJF3rp4!Td!LW0)cz zm1^lg5?n=VX&_^NcI)=$S%pdmIQk31c4hjxz&R-m85CrRS8h?N(`J`M#U~iuN;DL- z{%hgpLEuEiL?mcW;Xe3tV*-KRlq~Z#WIN}OdxNB`{eB7#I)Hk#%c@S>gT!;>0%X0> zt69y=O?K=GRl*c^MtbVMHn;N1DJbP&lx3Fl%CP8$*_SZ+VS2Q)L^bMi6HDanD!Qok z@ZYxDBPD-5mgxjDF3F;UR!Z1uCkEvu4%QckVGRs%z28nKVPfo03~=IY$TzzutMOv? zPn7)@)ToR+60*DGjO9-ScG|zMDyZdM^DMR(BDq^8H|mEd3ALKPVG-1REcTy?$It{d*Jt*><)%m)UehYK1*Yp|AP-zlUOl`E^F(vT>MeSW?-=2g3 zpYeTQ7D=^z$Zl^B%@Xz>E%XLRRr#=tlKOv?q=+gu)1vd1SlJ~|QGwL&c$y(^1m=8p zq<9O6gb>>!tgfT{v{AH`GDH}v4y;WkQMu}ih0IL~%UXHTmOgjxZxpkbl3Dzd^|~Zt z3})5FEW;=;oplaa@=F%{zobG@{-XFb#t`>@eEECprKL%@q`mmq@x)(`7==;$s8mEm zUTGpMxVkDKZ?xY|2SV$ZiRbfvSY^4pl#rVfWiP$w$}iJrhkG|-6iKY{*+*g4KdFhi z?%3;>=;ZZfRTl1?IfKlV%ofKC zX8sOEii1)@bcX5akLa2c|Dk=o-wdd;zNRpAUdw3RDEzS4Zi!}mxBhH2@(y^nyNS3Y zE|C;+&v%|#T<~@N$MCryt^wEv@HOu{odwS)bBUnR8<)Rd&-dx)F-;`2us2-Z9Qw^- zO4G=4!E%PSNG$O*gC)vL-@NDD;xb22=x-M(ez@uGC!598P327e)->{|6DPUD28*n zSdeOxHdaY`+BQEmO5~s;6S?HTl>YffnRvdD&15~qc2}(@%HaKanNZxn*O|#HGQKl z#WOW4Fm1}1Lcy!|3w014hsZ94-_Aj|C+TWsBx0Z%>(~3fs|woC?D8)YSYqn>wB-)xt~KVf^K}mNdcQvf$!tLf@CDViLHh{kXWNrKR&lghsi$93 z>%So7NqhU1K<@tcQ&-UWgfQ0V-P4ok57#VLFDuP>ufoZbwAXuRK!v%5CFn#vP-zu93P&(5Ic0-!hDQ9LK* z!f;YO?u#?YXcGUA7{3nEVn}Mko^A_gx24j4d_eKO98Ia!Bkzo=0Iy{YYsPX9Dx0mv zA`vk&$K21(_GFcTB=rI0|E^%HNUxNJdePYCG2*Y!WC^%nXq?Q^SLJ!+=w;g#HsIKq zGh&e(gY%}^By{J^$`}P#uAKb_*ks2GalEL_j3V=~+&9eDVp-+v+|fD)9ciozDlPqtU9Gnl#J+{7^&b;fY*=xSHNxDtfZ}`f z69#VYlvz_-LgYsmtg1T_jQk#q&tn64;~I9moUM0@O&Lf2QA}wpVu~NQu|r|+GnV8U zB)``T3hy=S;9XKZ(BSTH198JMfDO2sFBr7(&unEKM z9#3V0M!qpO4Jdewh~Klk6a6|A{##WHw(7Ya3nZ-)Q0b}F)mU@o96*?bZx300mb$BJ ziY!kF)T7dSxx800^bj!gnDZWJu5>$Up!*ACY>@-h&!yBek`uT#F_7bFU;~xID#ZS2 zTyd>h%ps%4va0bU$DgryGg4Tfj4fJ0DZ}k@mK)3P&Mxu3ulQgjDv&kG_kT`2d7#EV(rspqsnS#J+A{?cso3>S}aL>)E zF~XZ8<5iR;KS|Wt%h#iCmHnqwklO?PX9!E>uKo#0;2=zPZ3}MLg z#To5#;h~Rti*}H!9|8zd=0Ie0D)bP3hsdTBJfIbDTV})C{Tb_9rJ-N*f6*GU+A1~< zh{}z%^DJGMyj-w$I4K8~+ZjxhSLWYCwV1KB77_~M1`N;yEzJ=|qbS!NRR30BWoB4L zHGwDk{m_?!Z5okbIjSw#n|;c5w|>qBaSQpY#TTnlOZE)u<{(Zdk$k@d-BLlG2EnO7 zA4bjwlDfOG&{VOAFrQDLj%M0dTRcDCrTz|c5;x0rj}qg?6|yjD)FUUJL^wha@G?EA z&d}wk;~G}rt+x!NO_a(0G>%ADsISnV7x8^$zC;4q~Y}UtAeVz$~ zBc5!_`iiN24oP{80FCL?iz-fx$i>I-@kZ;kaTs3Pi~6D37txej@DD2d392#4zyjeAbPLWX6Mxn#}{y;m@kN-NF_M{2y#U>xSQBDgZmgPMXzgMYT4|7s@ZNNWE zM8>*KsavUttKQF=G$bXeeB(8(E3)8%Fu+%IfBE`#D2%5J^0%0WbLS8>{p}w5Shfc{ zfgv~PQO+uGS`zzTIjQa&6ZwjbT>FG6Cai6KGSs~oDen!g#uUN4qD%&iuHuX@+B%rtUpE?GuionbH=UTxznOLApN)156UY3k z{eM4*b&x|W5MMCFElO~3l$QI0r)amvf0)!kd}k9lk&5LZWS3qwZDGYH$srl-JMiyz zNt)n@h6RtMbWA$63buQ??n;GnSxlH1!+DVXFC#4VA0|rYz(~-i=0E=mGUlYYtpvmG z$M=W|1+c{yrQ2s3T#!6PLCM7W<-kqYjVncimG~W9PjrKtT6{oo^E}=YvHcf!0^sv4 zWYCP zi4T3vkt;ZwVvOWiI3pn8ZuVnY*e;=dO+8EI=zVjLKnl=-i`SVBHS3&>JNYBf(b1*z ze!$^(SbjN72Q0Cbn<<@0(F8>51Yp`q5|4gE5;M2cj2<5)&l+~dXT4e7vi9T2y-^Bc~w|^QL=Z>+^WJR{s5?|sprntsT0_gzW2`Xe^D`!vO6kI-SJg|+s;`r5KWDH)%^M3iTpb2v~ zfgqoP#^G1krlFt@KQjwUomoGUmQH+sy#EDF$K||1xtL*md;7KXI@Za|q}0~1y_$)= zMGL}oy36J#9FbWkAdhTien=O!!vt3SXux0S6SKuL{@0KB)8+1!@9ZL!VcT1dBTmnxz3A(`ERHYOLXcjQgh!9t+74 z$n_TtYF;jLdN-S^C@0fTXXf*PxJwhTD4vEz)(9Tg>PmR}3@v1bH+1P-m8z*Pw8`p1 z^m)*dqJ7p~sX! z36&Zr$1Fb!5pxn$eCGBFF;DwF*dP7Je*R5+i|*{(;7jg;P`WE6ar1_hM+>WoehzGVEOW;%d(&|Z`mF}z&z4ebgcEqQ%o$~NssDx>Hcl&z>Mb?b8l zCJT}uZj7CL{R>5)mBZvG;lYD1n-3rPDWp+_LT&434$z$paDhM_j+P+*vcY1U!cHwWZ~Alzp;>9gS2}t%EsR`Zq{jEq=7W!lUfZ-u-H}rZ1I0 ztiAKDbfQo1X}hSq16QKAKQlEEl&OhB3aejmEYZnhn)6fJOulrdJ>=UgDghHmC%Ww$D~a1m^-4gLRcgvp7?Mp$S70J|ujJyQ`Kx^> zmm_TwF3`Cp*sHLX*ytn6<_c0TC-qW7TmrQxKM8sQDW-ue7R zG9n(CO%0=h@p0j>uFq|QZi}c*_fQ3fM!&7nC@@27)k!}zh#cj*-E(clndEC>J|-1H5cyF4Tw z)B&B|;Ytg~!KWL3@B9rJtV>VOT6}i4pP5<{QZOx!_LxFxq}54fkw?FBC;FaW38V zDP8INQ@c_T>lMDj$I)!BEWWCm%>EBo*z*xvPUR6pwZ`uye$QQCfF(S7xNo2>msxL~k~oDzg!WZ3l(0=}#>a z`5UqjX@x7v>m9B&+EKE&d2v}c}WiE{7V-Y)gJ?y!eM z5i0qXnSsxSG(#<8@lD4R3Avzr`iJyZW`K72HoSna;v|-(%9adn{eUS3V!=e@v4&j6 zm7B|~;!h1|>U_4c%H|xw7G0rPk^A_bhedY0C_<(%B}-S7g!S$e>oC=K1c%ck>IG+i z`lYI|iMAWv;;}`Pq(FBgQw&psXU20EBgR4D&_sPw`o4PY(}p9fVe4x^oVMr?SAok_ zs9JBt;Mrvz03i$osXlh_(y_Y*L6B2v3ADeCzyS{?Q$xV_jIq<0i`x{-tM?tVV^~Pi zVP)*xYV+HZFGKT@7qQRUN-StPiYFRAzn3l#7y{2ic&9B2`D3e91-V}0yWoO+WzZs!q4LVKT($g9)Nb43MTtQ>%n+I-1UFE24_Ej8)|%jxo?!NG|+=WLAN&#ImTvxZw${&e~^w=GGhpX zyTcSR%uiGrCk_k}b(~dG5af=k^eyW{a0l;pV%!@S;mDdB8504$3)ZEVq~GER^76=OTx$H4H2pu4D^GtPWRY(Ryi?#_oZ|Ts`lI3l(~NN~O(7bI zu|*xxRt2N+m^lLL{$*`z3Hm5rK$k9U&5-hc+5Dlw)BYH5y}nc9zyGV)%R*#W#ebPG z?7VA+EaumC1DAoo)?nT!p#^~>=*A2WZUyjRvpU^c@Qyxo%F_jZRv04XInRJHIk8bZ zZT7dG_^kI%`d{%F`kuj1q*(=*um?*_{&9n>9*<{tnU0ZvolD{Dp#Z`6j!)+xSs@6d zF_43cE%1KBZ7*B9fA=2Hw6uc0LMkQK7kN_#FftHNwQ|Hbe;zvji=I4k`DJOA^~XFCnR_B=%Ab?4B*zDh5rm3}`b>H+lpE52_4pF%>b3 z5(-n)i?0i4GE8G(ikv;1NzMey zVcoNMJe>seJ1U!j8PUy1ADy6kJvnIrXrvu`cK3f@Zs2B6_;*kki{aniME>M?6Sxv zF*ZYxd1pTI3lLFIRy~Rmu(qNnP3FeRl{eXfE-#*=1${q;vA?t^ z%dSi3z*Zf6jgEMEU+#{?Nd1(n@%#I>0N{=b02P8K9p|-R4K8;1ee+jYgMfN1 zhw;Lv`kBM7u5(SX=5r!q7_cpH_VwwOF;nHs!#5qpk(Z^a#pgdh-5ax1m96!nWtsdx z8~|h-z&!^AfW*H1Cy{@@l5|1b!E>?{$SHsTOEg%u{o?}b=y2sRd5Ptr86B8<0+S-sU@ESKCSt@1mlRsz7h}VT$^+o2e zZWsj)bHgZ#*!n8FaWh-FTanvsO+Ei@xPNh33GVGpRM^RTng-l8;l-RZRX)|bg1mx< zDa})pR!mD8t4c?>DlE6w_kOjsd7s)+P~DV6XJv^v=O?vQru?rA)x?Uv9l_~8y5V{! zYYHA@#qLcw!2SF4>&^XcSKem0o+so!lIQZT8tY4$21$8L0Sia2|7_J3{SLXR_~0{{ zM9AWMKDd^WX6vFDDU=n&he1qNDYjiUek<-=yv@v zl*)nNqBKD!6LhARS3}Qjt<9?f>Nou_-6^G}*%zxY`@4W?%}kj&6<`1$@(~ny0meoaxcL@jGrbu zZR~A&=@hNZw*FZY#f^tO=jyEiFZD zZNyQ9R3x!|J0Hzf+sj-IZvaT`r1RPH3cdsX`)$hpzhU%0-IwC$;!zQ?!yq;YS?!{8 zE27bQLJfq_duhQP*i{taE4VesFNl#UO35HBOkoB8Z-m*>;1;hi;ZxO85+_D{@LR2Q2Bu+G4vb|3djoglY<;ZztNsvw(TqK3ri%?5WEXe zMR$;Rn@?Z9xkh@y_{FBM`HfefU}-D`f;|n~x0vr053SbY-946_aCQqd%6W2}rg*f) z3JMCKb>4kb&>W(g->``olifh^aqrh*A=7e6`)QqIIKFrl9F4n^2ZgaOHfUi0Fp$l| z`D&!+JXYpsA<#hYIGxbExyxwjWr*h{pY5|a9XU29MGr~;NF4TMDNuMtJnM?-3?&YE z|153W3A6okrt70_k2KLGedgFpO{cpX%t*SGE@##-RaJKk@EHMlr$zK$1TxInrN%>A zG%|b8w`S7dqiBJ<*aT`r@k3k|;dUmVT4Wc+Xb4bMvbCF?xc zm-m&<8$Iw!*@6k{Y((_F_Y*}#T*t3k<;LU*kyJ0(OY>n8wFvY)TysT44Xz(TzFcj8 zg@f}R;Q+8RWRTSfRAAF-L%?Ai6NW}ejRV~v z?7l&)`F1Sidp?g`3v3>>S9w2%fr8OZEtNzB?XH`;L)?V`$A2%iPeN__%c& z^X=`QB9xat+_wt#3hJbC4;yF!<^AK)6Qh50?x=}g6}EpNd4?GJ->s}et`3*HPJ5AE zsQxkog%Ckb_ZTMy*Fhz4k?)x&KTifKIl6Hi+t3qP*n*SGgTv!R`<^?>AQG13B@tY< zja`oumSbOi+cn8uyEq&deyi_;K5pT#I=<@N(cDm)xu zaXxcdL2V=(`=yV=zYZP*=D^CF9ua=IEEL!uQePr~;*S>!xr)n5IfE#y#5FFM4~?pB z3SW0efx%SC0UA=w81^=m#4vpoe+w5VtzlnbCUwKCi+)lv8SBwrtQpt{JL8G(lg?&dD(XR&xk}f9v)h7i!w~#Q;YxozIQ{;AfvR zrGL6#Beb5K5N>f$-U~d37#Uvdd^OvBq}e-9Z@c_QUrwED`c;n-U=@qNU6+*KUi@Lx zo7JR-T}V+Y`Fl9;QewY@4Z_1mI&kmU_1z?UUY+HYK3D<%PYxX&ek_iU^B5q|cd%*w zM$YgoA(v41YFRX0n5kOuh*gA9YR5kmn#`kUyO+9+#i3sGX7bqHvL#&H6k55(JpasA(X z9+5e^@45X!I~BnAELxF%eCkoAZOniGDk&HG24Hq-{$o_+l5djkdtXYC4Ers;h)pc=U|k+0F!J?c-LNnjc7wx=Gs+VesRT&JiDT@m_VLZwbF>@M2!x1&Tp( zp4*Uq>Ez2MRW`~{BBsGWC2;FhI=zlQW;-}gO<&yx=SuT02H?7(u!HWMN4}8{pg7ic zgHKktuwV^6;Cp9)seJD>x>|Z5u6~c374~(2gQf(KK@{bgQmY`$^B-b*snOoQ0gQ~! z^HTU=Q?KW+N8j_T^?}i^EgKJ3!*A(Fz98m>3~#|+h1j3rFjbEg48GqB+LgD4pEXbW zo8RIk48kn?vBW~bqQCzwU~mBsVP31YqAP~V>(ji7F`aEDjT6`&Zi?UVd}?}^*Bj9v z&!xeat9SkSIg8lcd4Fy`vk;!)8-_d5`aYv(0L`}1G$GilWSCR>K!g=Kfwg`YJlq$N zy)nnCbcl=^bMB9pA<(di{(3Luc)N?gSo;A1kdwg{8-ks?AA|0)ajO&Gprz`T!14U< zx$Ms}`GOY2Xsx`Dh^-RdrKNp05jul9C{6a4QHl7xS=k>(bm}}$jGtoypL@@_o|tg@ zltT=rg`&wLf14!h09cR#d3Xy6W`?53e2#NIwP< zIH(jC0?pHm%glpD>i{-wVFQ%uk>Z-Zv|g{h9$HmUTG)<q-+*EdXh3bEiwvz_2`%cP{yTyYY{U3XgRF@zeQ`PVH{>!ke}#ugmza=D;v@ zlix)#!w?{G-JCBPN2uxO82d$%>W!ngkAIH-U#=yK4+QPu_wHaMB11}&$kCJ)|LkF0!>-t?kIf)JF5Z# zoIqawlAt4##p6><>SK0REX^pkpdv2cJha%X$u$t$w2og&%F!j3TQ>u4BGGal6|{h$ z@TuQX7Y~hFN6Nkg+rN&a!vhGVfi1I6)-1R}*#Z00Ob5U(V;W zOD2x>)djv`8hsfhjBKT(LScgNq($^=aMpXugGc^;y&@uX(XM@6DF z6*M#FA#5!4Tn^++IQ6upjOLt|P6}^>0kQUZskFD2Y%kskfTG~x@$6bF^_6OJ>N#yH z{p=+dd#uPm^z5mv5}P;1jyN(VJy{OOH^YQN;UADE{yR5JPDvr=7Jh{k{=5UIZ5K7V zRd)#I85xXCvO10!pb7#(*7qXzA9l5p35c(<8Ku1W$2Nq-Z|MIJ@a)Vw^3mN={U~v> zKo9+tfG~*j8F&#ZBvAc1mF{eeka!f6mUf>(Zn=$3Z&KAZHfH9rIO~hsrRrWpx*KeS zsq;_Iu5e8WQF&0#?aB~;!-A89`>7&~0}a|U9b-(;YMB9y6^!eICi&lg(SttG-+28; zB7WM3o|*pa`rL}KvWdWPucdz_1w?b)Be&AtGNo>%bHe0 zJ<>|RyKd~@#I+4`7CTI;!PfTSqe6!G$8o_>FG#UhrG}0HE``@A_RIEQ8{wtcV^e__MiTa3$6}X4KuLhUA#&`z)Sf{MMTC{)3lygF6nf}$m6v0iQF`tOy#OlP+|CYD0U-x%Tm5|oyRWndaQ zWDXnO=X8e^rZag^j$ft2n$j^_k8DHe|NAKgF@p=lVYrA35{h06Rd0UoNC6>k>KT;& zdCrK)s-%ma?J;~IT2GxxNoDcV;5TUdPIFDoe;wJ=GmGneJs>Y58TFwa3Oc*PM_LPR z+}N7;k{zao2*L>aLe!yp+4yXIif*n4ngB5-xEkjVlZO|#E@RH$KREbj6#T|wRZ|t9 zpN)H-m2h@njb5~@Ko^WxGU9@M7`k)Mhk|}LyJx9olxmlF2>qAcQv}2-on&qy6Ys=K zci2!H(cfX}!%RET%kINv&80Ya^WMU)3`0_6xO$6PhZ3Cljrf3jnleQrFpK%pL3*>CNk{PE&ke3kojhzIjV`NopNb(2(JN<^4WJOto&-0AaPdc?>Jg& zBXV8$m6kKHJJpRDbK7tMZKY`ss`NO;s|y-gW>WhXENjd+KL(!$EM2?8(LnJ4Sodd5 zFoCV^M^{q79S=8fY(q31lyJj($WD2!cZ^8tn#}^@D#CEa3ruF#lq-!isuirF|JEPD ziL8U8K&(P?7k&ZrHS~2Vn?ZP*$yzEqE;mlJ9;P;7?GlIq+kEaOjB0+PqCVKm|i|mW_df@Gj6M5 ztjYwB2WHULGa%2D&__>;M;8SM?IJl1re5Mpr(hM-o#{Nqkxv?j+;(@B99vlDf7%RX zg+#?y7NSbb7s9X_UxjWR|D_|a<&UChb}H%08u@c)y;5r4p&yJoh=XXe{o<}iP`yDi z(i1+*f0|b*iw|Rak~m_C&?IQdqyq(af;8T>%Ng@NW`&Ym%7O8O`Xo5?c^7l=tlKaz zHs!`9Lb=*F66=m$Ue;I2%YMvy`-%H;`^j-&?tG#*jUy|hA0sb4H)5RvWznwRcmcoV zD;N%*Y{iN_VXfVqKW)qjm`DI2!Q$n_(^f$f7D-KKo=ZisPj58S@TRO!xeUi>8ZZYJ zbySfZccH&prtT1-#o?PSVt~5b@T|bApp>k<7_WYxrS&e17mXvue2ujfdd25nY(%;Ev0@c{%u7FOw?dv&89pxv0cL`Q!J93kPVTp z#)9T1OVoZ6*>Bgh(yn>Lf&SveWhTNQAtgPN@DouOk?UiM@3S$XT^*|BnexEBe%lo@ zfS)%VA0L}9frm@Vr7O4tjOXLuwiD8~wsX8!!mT#9e%_kyY}G}f2&2N#XuAK$(pdn- z(RJM#cXto&?jD@MU4!f3?(XjHuE909d(hwn2<|T~fsp*ocW+flQBVcLboV)X@3Ypk zGVAAI5h=#Ezbn!=J20%2aJr6siYH*;>J$YU(@xK;Az)Z?3t%V@jk$RBR7-!whd2Ah{bbIi`b~l}dCG0D~7GR)KKb zPZDOT-lpLgdkW$d6923U9v+~xaUW>qCtTCsDJ@?SmzT3XYnwSY>)~!5rY-q3rYRik z>?e|cM?ZKLsqjCMG1;#~T zxUQ^rNG)4v5oh1wVs$0NRnNpamr}amB4Z#*^#rSCZFH||8vPU|ZlIX+vH`pNORp9% z9LCk+KSbKr5KWPcF`mOvHcC?R`gbsfqu2Tp0QlvpYy$|77WQjMl!=uK!1EyGJ?BkM z*lfIe9Ry&6<=j&ddY}&j9aTzCz~`CY@8D&_q2`YwX)v=e=7?=i7{er*1M?Vh=>xxT z#X_u|C&V>FcA*E=a6P9TwOh&QNvTPUKPrem!k7SBV}b%sJ{&nhV?JJ*E(xCGz*JAs ztsHtanjhH)!^n~Ih}m`M$gxy2qMKttFVmm9pg(@X&-N~g!|OkT<-{AJS6(AwVDsvmCqej=ua(@uw4KM{AMe-xz!6Pt)$@x#%O z$z-Jxg63jLa|vg7F`n%H`(pJr{ZkZ#)@kY@C^*jS1HmKDJ%SD3?_`jXZT~~RD#(Ex zx1yX>JZ*aWur5z(XAH18)XbP> zo!bHXE5Ok~cy=ci^z3Losh111qA(&7OJ)z75;Skoh*W71ldUuS7e5Ee>klHo<&4`d z6g15zr`Q|q-m_E)QBKa@*Ql~)qQe&xEs>5fUX=#Cr&7Y1lNf$oSX!m3IIs;NcL*2{ zaUc6Jz%#5z&sOL4c+W;zgf54dYMY%0wOTe1@p$lmp;H*_ZV&FSZEbD+#m_(B?lauHV-vfIB^!atpRJ7l1kd{!G%qeI~I+rQTHvi-P^olmz#L-t<~bfoQ|PP z{uciB$OvE9U_ds2;?WS;g~x_{xHvwrMIRp?=RVnjkHXA-fgFMonEod{|H1*iwtA7+ z;n)u`%Zr1(2D=iti^3UpmYc~>>jD#eev9@GRZaVWVJGPkvKZyZbFzviRJ zeUXgqL<_+L0UEAY5+nAMh0rNM%@(dJJ4f2e7jgbJNM9VJbSan}@qSj|@t&%&Lf?-_ z%s~JE#Ljvv|L)CVX9Y*&7+Q31i-tTwy*xA5?Gmehe!vq~8HScuw4QK1-?El0{MU1- z&ZT-i9p2;jj}WLL(xL~4aK#S-tBE~iCGsKwFol_U+^$;;!8R`Y`31TyC*55 z=ckPOP$e(O!=G?+Z9|8C$8lI%7zvE;#4kv2;i$xcAs=~K9d{4$?6cHi&BBYtF@`2< z_AcA(N9%ny9T`<2uJrB>+nBv~iYMjcit*2Sch9F@VE6&^0BMN!pCz zLHB32*A&e+t6MXFhee*3X-gfGonD2eo4Xk`)*cRJ4bzlnvVEIzzDCWj8*fQ&`iP(Odg~5)Y+QE&pn)b##=8Ksz zdq%}QYT45KE_NXdkQj&vdXdT6lq2RlCcOCFQG&=q1*y3@hf0P`-Eu|IP3k27yl3zL z`)odQVJ|&ktYOXvgyL=160|M+KJJ&%DO2NS2nOKWMm zYl9_Wv6x^x1*V>(S(j2IOf;P*c2KnbVWA6vw1I)-3_fzKl(XmD~hi(>PMR zz_@~@YZK1stK-qKV@x#3Br{}^ovMBy(mbRUUu~iIKv68OpedRU!B5?Bu)y$~{}Cl3 z*RZwg;Nl<-hYq$-`9hE?@}6fnkB`OGYe&|TG=C~ktPzv4um=MR43ZVrKoM&3Qd28Vl zYZIuM2vqQ`8hAj=CM4DA{E6pgs^p$W4)aS2G%(GXL~3@_C!smNzE{r_nSIPH(z5Q< zGab!1YrS+Q+cCrlZk0;-+^Y6nF2#90frD>hQ$n;|V0TxhgdA7JQpt7@{Z|Q%CNS0F zj}z{27I3&>FP%_?(No9#o-cr$W#~x=m@q`^x(|w+7nf~?pI$amoY2nMZ!D1S6vOtn%HXYm|4d>7sQ3F1y!ah1`xcHAd6z>`w~w*8!Ch|DPR9`;8XZi^A8>FNbN^ggYeu z_M8O`H@1e=bLdY2WE%X&x^ydX*uKVI_I)ldbs@2Np@E|FV8GxJSHo-&@VH{;vIAL4 zPN9VYPN;+_`WE~X(%TNJEpla#TO|pNwFD+RhYfpiS;sYY8G?H~Ks+w1Wr`M{gtQfr zQvVQJuMm}N$L5b(EFFQ6&gHNlFZ!H5Y*wXEZrQY2XvWhX@f+*v(NY7&UNWuN>| zc0+F7UhYx3fnzM-pJD7`twO8Y!YGbkQmcrp)zM)Ke1kdVDZ!4uAYee2Y(mAu>kQ`{ z=w8)Yt8u5(+t1p&fnXR*rEsS&`(zh!=WFkrIaN74Y1e|mmXT-q3Qe^hOH+v>9WtW! z$HYVYAHVkv1erf*CSDr4*h1<`qfT9r3@JaGlSv``dz#!$>#|i%8Zz}RjZ)nb!ir@K zZqO;smm)*up2Mj2x*o+KI}DXepK5fc&!tb-5SN9F9zgUlQs;$36;={Ks_KitS1i;! zmA0=JENXYOqLL)p9ckf%Q~%KhK*gt$;t-$bt;dKD=y>P^-PiYhs9&=G9U<=}Z#!$f zx{PTVPy9Yn8KIL!xAt~haM2u(Z81wbjiJh99~YWxQ0I>LaUi)fZQ+c4g!q zA&^up%mJ-+;Mm<82zLEd03tqF!kNRggQ&7qDa#L~ai!dD!m3+|R*?{Q^y__to(16PwS0?G6BhoFuTcDIe>Tc? z$lV4~CrMzk)|a(*~s zTDEeBV2f*x_Z*88qh$HSuQFQ*pzp2LX@s3^o}_9rrCWGOwh;fg3dPp&{K|45z}YIF zo6&l*_c`qI_@y2NoEfA%S1%bcC4~nii-bkFqH#uA)Ze1w8xBPlQcXw&e z)iy*R)U*Vr_Kv9$TUuO3)oOf(TxC#UgpQ}@qIQ#CTx-m?O^QIY84y*Q%0 ze`gjuz~{cbfoS@}PpuNE&YQE<_&N@#80b51GQas2aGI6Bc;)WAS?B`;Ww_Z*$f(?J zp-RhUDRd8;X!&k)0{npnU)FV0H31qFSyHZE!+>rDW|KEvEnbB^6auY86w#*t7|yr& zKzo4;PH+kkqg5N~fB=wr2qmIgmTzokHs0&J&z0C8JLcJRhRZBN58x*qJMKSOP_uB6 zeWn`krpQKQ0TaHjb55U5tkL~*&PHGlR6?s&2?~QP5?q_F*oyEB0`dd;O*omtLGE63 zJt(C=oy_XX@5Qj!dZVk{azvOo(+FMJqk)t&1{Z)rSn(ID97|+e+SQVcq(yN33_yQi zN!@7ES8as=L(`s>&?k-Y^kWD`{C(-n7bf;FdpXY`1_2WXCV%bDd2;Ka;yYk#+i#g+ zRlo8=K36|kF1<&0I(xS7tUMF28`{Gh+w!cXhwe^|voGn^*SYs)&ecP)SaeE4^8Lgp4K zIs$0xc6oklF)8|jHf2xt4WW6M@bd)dGc=c2!z9Jp<@DVGkK;PAZlGdzk1tX;^1Qan zcnG~`A|`AIF+N=zIQNLWG7~w4lmd3AT$uVruT2&>9r(t~%?zvEb#YEaF6RP7ruCP3 z0$cfw0p50>hPfhCYnMBP;-{WMn>vDefUlg~~y5b7EWVQ?PM(=oODVgv}V9 ztd`xYvV>TQho^ICO!D0SteNmuVW9L1bQcfmc^VKiDAMJZ-tBlfq)$qyHROc=);=!F zyMWVF<5Tq&0qVFZWuQKYebO<5SSDKs%dl0tm(WwzJ% zz>g#8-QQI`#q_pIxhr1>qW=B8)_EkbU=JwR@OeS32nog)S*Y{*LuAB`Y2eNVTED{% z`+#(o)>D{YrlY4)4_#%xlE7%?=Bhr`I0^C!>|il0CLEejb=`m@Q6kMEYawy;tg$ zjO4c11b?64TKua{+aH0eXcYqiPX0d8zToqHza~;bQBVDxxiD{rQ7W4zgdC*UY$v5= zjd`W^@5L==_WR=#VHjeOM3$i4Ur}}I)VA?G;QUP3a^0FX_vIwHS`et%il&RO5 zpzh(M4%tY!1kO0E*c4mp#w?bUfPWhe5J(WR2EY0!rmAMs)EB#U&YSuw1_2^XX}ciU zcRB(jGax;4Ts*@nq*--$d`>J)YqxYvsd*S7KYO|(5QQtc<(tgedj^(hMJ76y2%?Pe zZL{(M@U!X>S6qZyDBpm?8&y&5-44I;;t93C6e=u>nfn?Wj{&7ry-+dcU&6*k~Y4o^zM0 zLdUUtf&^nt^);g6PuD5Z`O5;UnU^U7Cx_h$3sWEmtC&7^a!1DkSZKRML0u*w-V(mj z`eR^`jk|iHseEw-=v1?%u2WF}oxJ8-W~2uOV&3=ELAfV^-Cqymv{;G5XLp_f$iaU->C5v=6UqEx9l|}Q! zcgyMzRB~JMzKoDgmc9$tYpJTLp9>aNizquq&oBDggF9q0e`x%<4F6M(IiQWX>y*e` z!}~4kgRmIQ>N;kf1YB&?4Xs$PFjP%69s{`Hy6$NEO0$n00T@(=y*=*(CszN{B)e^P zWeZ#xeCYpyoC31s*i%-2f8&WFIxK}DN4AFKSk3^#i@=HQ%ONS@+pUELuA=V3MoG&E zu{7ESk`|pW_E=bI5_HrTw-^CnI0NrJ`wtBL$ASxB zv~b;ImZy1(7l`z$@{NAPL=f2;`Dl#H#8uiKwap*R{j|>7Bap}vg&^EmUx#cdG*q;! zPLWm&!BnviGvi&T3^-CY9tWJ_Kv=5O0p>bO03Z2Ss8#>E1vYghghez1IH50RWtzDV z813|4K*iAhHK@x5WadDwvSJbg7aZx zQ#Gi4m#q~LE2PN=`n8OKSa(orcxo!vi~m>xHYU#a@oe5lB5_A;N|&oZvjG>Yi_ zI`zZzDACYGJ&q$+;tOyR-or|4<+AdjKIc(-3SNC34 zyaeYenqP`}x%^LD!UhZbEm`2HRyu+|oin7jeh_kkVn+6FO zLyT5dh_3x=EHQ36o~Kvs3#CYK&k>xm)Uj~44O9$PMhT+3}jrS96g&=Dm=Gad7t67VH1$VjvnaqG2;Fm+L|5WY$u<*$#ZumGc5gw<^)WyANEqfC zSgWf${kYUflW4N7RJ?5*HxjBT3>!CM#+dkW5?%OdH6sFWDzSnT)sFi^ z2)Hdq7zBPXs5L6Q)tJbjq_cvvrF~J&V*Ne=cbsNXyHyTN{iIdMUBb<}sTozO;6yDICoI`5;&x^W=KAI#x?h`=$8gva@7+qz6 zDiA1lvugIM#X#obAh+;|g>U(i4mjMoPVILuYBVRH>at7kIj`~#85)uSPyM6k*G^zo z^`4{0TOI$Zx`QQsMQwTECK#L6gbX3^9cnkdKIxVHGyc{g@t(AFPCR%TdSEvR5c}dN zDb2pzyvX%ARha80A^+`#7N@U8LI)P93H?-4OS8s4ou}Hf#r8MpwSt152iFN3B9%1O zcN99vj>6;L&~wMc@2(O4C29~_*8`hT#TML-dIt1|j4mKRL{R8kMHCEdT98WNL|8hq zr%n!$w|s*qz--o-!w`5CjdhzIgOWyPQLNLeTPQX6#nB}>&*ctFnE8))b`!p`8DfpU zDeRXCJ@`+6e%P=+!>O>uFmg?ZB z;Mll0uo0%8=U)-5zxqcl=CR*{@#=>>uhK3Z18DyMg}3{l9@fSiy^y6;31E5TJ@-2c{n)|i#n|uEdw!@)yW$W0L(p5J zEvbm3M3y@Sf(;dkoM*x_l=q9AKn-F`9(zpcc-P1K0m*PJ5cSsjHJV;#P5;e*|92VS=Z~|p@z2YtH7jR( z)(Tn<^sP)vJR}sh(PRt>7s;r$w8N|d7x&^F_iI219I5l!G0`b8P4DO*?lMVyf*0#)WZZ*R?J}mISM)h?`6Iw}Z#mtC zm?)9_XDKxZQZJPH*En_$R-A3(EcCv^P==@+wU1~ai0yVUii;(F%sER`N@#lDLzxMf zIc5&qDNRODT2VR3WT^49ugVvtqG-5%=d+nvVd_u>)qb1L?I%DJ7mpY?-7Lk}3p)f;Q8nHzC2UWgsy5RO>XsFdcGr8(s=X ziXnfq?AO}+N9lTZclYb@JnF|7mFAUS23QR)(Tf`GFn~wxuQv>Sac8 znGRCVQHW7vn}&k5FshhJHzHQ3?DZ$}MUIFb9ci)>kd5uk<0*$<&OO16r{8YI1ww86 zd>c91;OO3jXKV8)rDf}?siQR5gB~*?CLNN(e2a1=Xes;#(~0$L#P_TFoW?P> zYa#g&hz8r*Scg`nFkU(izjamwOt&dr-V$L!S<1#+;`%Jqp2oOsJa3l~!;N`7=R1(? zMmfYtptuxgw*S*mrViX3qbS2JAmeF0$F0MF4BfaA+H*WJ=xQ zgR*d+jeNXpH#z~$pmOkylFZ8SCqxmti{+P@3A2@2t(W(u&%d4({sr^ct(wd{0pXE-EWzTr8oGB%J?4Z#qe@e5nNUsVt8( zN`1$vTdBmNPAoS|N)eN(TEXG0IZ)E;56h5K0w6Yv+c^);YK)jDOci-HF9i#vyKspp zgIf~xMlH_77@ZKF|6q(%QT`im`oyjfj@YvJ9gEgAew59N=erg5C|KeEc)+>C6$xi$ zP;)}(SV{H8TZ$zsIeogip`<8_qLmiN=e1P?R48^d5yx~p zHp@qMvQe^77GRE-!uvT2Hmadi;mb<618WbAOgPjX0i{JO+KI+%PdpJi4rXq2#6zE+ z6j?!JLMJ6nM_)2mjvr#px%l(muOTGhT-d;$qR`=H%;)d}XVhUuJQg2WQBmx@|!6nrNT1 z)u!0>74x$9nI5OK@tQ@OSbRjf`G%NkJcER+(NHzxz4$7lF*#xgzVnCsZld!q0(OwI zNdNP@oy!WYIY;?qJ@M-Vl46tT)dn2qhU-=Z)YM+Kigdg#Tbd5q0o8oemE@}M>qfFQ zQ9PV!`}!8}SZ~%f&Df1@Bo|*X_+m?wUDUp+;5DxPXUS)D$gB0v?|?BUVKs1Qo~$JwE}wLvgy zwCkrnrbv`<8RzWecsg821ke2{IqZOXMT^+BPN_=W;nj^Med>s^=-%QV^KpS4m)<2Y zd?Ni2HDD(g+acH%WaLN-YofH?%Q2W>DNafLFV^B{X|1=~;d#=yB@{c=kX={KJRlM<5|#-VBW6@S4_Q4Q`$-s)Q--P+Meso6h5?S#!q>*)~^5&fZOTvD4# z9eGgS`*BVR))o%s4b)XblBm?hL=qWJ1)pN%2!3gZBKxk*SDJu(w#$c|Q@Zu=+T?JI zQW7MGx%Vr^({KBM+=046%b~>FAAeeX^O6?3IvJcXVGMUcL2;7olk&Z11Hw=iDV-fg zsZzHQYb&bG?ZKdGEeeD6sgN{6Inqt&K~z zcI7&53JrULil}Zi==$*-q!-6c;h)y12d*Nt zp17OFS%rpv+?> zf6D&Zf?Pw}T)y2+b~7c!qPZlz7>_>6KL{dP6?b0<`qtw0uXY?MufXS+z9b`#ZTcYQ&%{te5Kxeh{=2pdd$QaNltEO)Em<{5i?lwaV)gH{ zJhdbY8kzU85afl?H4;z2`qLX<72CE*v1mk!iNxFceddILSZPDXDA5o*5I@m&j8a$n zb9d5?Rq2j^=UlP}r6sSv3D?%%(LF{y2oo2I4e*vh*fe5Szh*D^7)3OQ)>=#Q;@g z3?(F0fO=^Oxy#I}PuI2F+S$+Y%%0aEWGSzx%tR*9J_tU*j5*IClbo2BVXn+u1BcU+MLvz` zH0m$mi}<-43TH@huTB%5%}D5G%y^^>f&`P-hGllWKs4{Cv_Sl_FO(w1Ak3b>Erkpc z>0r*IlnXUX@55_xS`ECp9Y^tmOflX#eI(?2&i1&6*JOb#yjqhtcR24n*Z|)yZs~I_ zOe*cgMjj|^`_rNktH{RYM~i)X_MGqhG@svg<|Ibb5Ldh=@zy;E3UaN*mvN`8PwD^s z4tt#Tki4bM5J_{uSWzz9sH9PG=Vx=D#O5xCbtqcIp%5FlP#iF@wDxZuLWFZ^_Kj7Xjwxl#kM3r)4QCcv_L zN;uD*!>NlxgjFe9>8%$oF^^D{a%x6JxI8+KMed4%l0*4hU8WUhQ!LE8we)s1je$2k zdC)P#Y#DWbgRU_#_z(n3r6jKlr4+x;A?|r|y3Id%0uHD8-fN}_p+A(WXrA=5s83cW zbe0deAtDGCc}h=7sueA!hjYq>>0=cM?HNWx&+{eK?fLMOs*#>UF>_7i{QcAn4QF{D zi}P+a?Y`<8&&2Vhf?Xp}DEz4NqoP$Ypkq+4OT5a3fW&0DqQ=LyW?hl!sKbGYz4YN* z-A3%bze|M-OENg`r|sDWQ4bWmTGeQf|J0o4D9-vxM`fe_LIN>YMpJ^5zRBP-w~$&x zDdOL4kmwL(qB=aXOBU1kbzvJ8Q|H2jIOg=*#)w0v>JpnaoE3EDXtt>4Q`iMM(nXTS z)?Q;dbyzhsa4HhyrL--Vtq{_nGi!13$@AF5-x$QP|7l#FeKp|2R4LW7|MJca!4GVc zZxVH9&jy}IU|WeZhuS71x;)vd4XcwhUK2pfp*zq|*V|YIEWGFJ^sZ&mN)~stnEZ#E zYAKr!!4xoYvu>qH%|=X|Q`Um;s`x~gA9s(`zUfQo()-lm+;NY$hpQpDiDN5VF{YW_ zz9pVXp;8wLPLBm%P{vz_ih5kj44Va$C>IPXff%6}QO00NVbZ4;A#g^*+;`FRz7Y{E zV;!VmMFszLtRd!#HZF1}n_MbtCn2o&riq$p^d7;c#AE`A(9hQ*Ry#btQxdg?ihQR4 z%pd9O<{RRb8rq|oK%WUb{`!<;;!zKXy%2GdsT$TIs$CJR*$HsVIyJC*AV)l6A`nIr zxKE44bTAn5#`|ZJe!Ykp_I7+E+-Ep6l1W~LWH}W^MIRfzmeI&_;5yT2w8`UBXpG)a zlCe%l%eP5R4qCMi6{Lj$5T~Xn&d__5Fdl3E{vGFvWiehV8&2urzq;+Bv=-m6=3Y~gm|xv zQ441r*YACxU7H=|8U9?fYB)Q?Neg7s$ZMgV@uUOYCmHUW-tFnknt;IuK=5$*WX)2- z@5K<G<0Wwu>J!7ZrJ5i9JXbElQ$u# zt_4UJ3VtkRVo>6$jkR<$agmT=FVqwPxuD@f+rNq_aKe{ep0NGM5c=NAsvG& zsEMpZmq5Ff^p+K?AXzKILwpkF@K3cEJw*a$6nCITskme%OqAT$(+T9Jo7X-6(KIdN zm2$OLY}ZSSk@Mlcs}TCwCSAdQ1sCEo0278rUVd&y_jBwZ*lgGt1V#h8WxC9niy}sg zq`DaHoauDCl{rq*!|U~4A1*)+|B%-PX?9h`|J0ch{fZ7s2v@|UO2MG1YWf!(Mf1y~61lbHp1IuzEaK6{Rro9JD?alMJhV3&XUrxRBRZsXB z3h9=j>}i1x<5t@e=|UlVxx!vQbPze4-BcLwc{%+Y1Eof@cD5PxDd-OeYu|%u?=?T-LQi|z=Prs>5!pJ@-K*xo@M4Xq$WI0kH@Bl5C zD*^?D>q9{G)3L^vU%PMIuSy%SBX+N5H|U)T(0ysQM`!a*?PenKNHV4t15D{L1TDJZ zAXjr{bw?B%CoJNj9Dc1JDB~tH;2mJi`yw!bU#Bsdj?0UXj-*7ND^aFf(M8tvZ>y*= z*kneWtpr2zUY1@+t{@_VxL?Xa5`oXi2Tj1INmu< zT29ik37tw$-=8VwISn3_x7>f#o(2$P@@|ZE-nILDmJoqD;$?;_&*eWaI0%TyM8a^R zvGZ4c?%y2i>KNXTi_R#E7E*|)<#PCth+9-$D!>;)BH2-_%9dmnE|DcrWcQws7+nxu z>-O)>tA#b8or*}dcR8?uvQfLQ1Ih3Czp)R>8?b}{U?)raPBM2$TIF7%GMR+Y)_Ktx zvQ&)wz4Zp`l+TwZ&Nr?v1q`x%|1CIJke04hf-0U!y3v0t)+ha?a-vxGh8o-T3I9V| zKb{omP6edMhivzFHAm@7EeAnld~uSb+z<1+abUj>NQs3{HW@xhYnCBkam=nGBlsS= zG;t{iFXJc5FH4ac!=CDbY4sJJAq_Q!t0MZ@|*EWg`EAq2$7}x-Y4&STZRv40lEHcg> z0lM0rAI@0pPTo5L%D?gOwJuIMzZTVG0>26X!}^Aoxje8rGvp-)Yl>wdNWqK|0M%3P zY-lloq-wmWSP1gO*GGkXm=Tw=+~3Oiw^55Ev4i%!rsL01cB>SL&kTclt_QPQYLa95a3EWwd8_}X*mX?3aQPsP@bV}EOUF*699 zLr;HNEpBPS8XFq}qj7(|q!oer>hCK80jT+rrc{2tg+Q<@2K&eZlgIpO72mB zOo~yRDgtK74c24Z`O3Ol^g#!OXQn(nm zC-Tf|!^eo1A*_73mqyAc;wqI!-f|(0%{d&Wn&|oSu7i}V z`@dWICzObSG);R1P5`5TqW|#>?STn^GDWfyf*dz3UY-b8Iy@Smt5gcZR?MzlDLvkJ zXz2f=X#;^N<)#!?h&ZJs7u0_L=+Un9gC6W3@zCwOVh`l}Eo>Rp#HH%%j?7s5ydS#n zQf(_7V#oH4<)C$Xd1uL+A`(id|6!a|pwf#4_?345`fw6VKapj>*lT;4Jc>mxM`WSH zLZA@sphJ)!u4{!?Zs3OxWlG3%(*s>N_GwCul`%#$7^*ActcfJZ0iwoReFg5f7vh_F z(}uuoJ6bxh2hXbvX3&|u(42I{fa-Pop(YYZCFSH0pZ?p9(=iUnxLOSZauZAj|GvL* z_`f(mC5L-sM0tIeE>c4u+N+GcTN*{U>y}KTd*a#%pq0T1*1Q4BP)$Ft*oH%|0PPKM z0y_>+Uz)9Ei9WD3BL3RkMVq0OVQg|xIKfisr3s+1T+`z?O!UIgq5be7i?Brtt;zHu zW^&BiA#e+2PBb~gD&rdW{TRE@>#)UaNd3Qr)Pe;$U>SqK<#|&z>XYTzJc#+e)$MuRvt{x$sj-EGfftEuM?3Pf?|M52Ps!Y=(!-LvfWh(mDy_OS7BIG^I5e}eH^A4BbXZG}WIoE&ybA?d8 zEG9X^K>T@ZbZU;`CYNGt+?C>wJMxl0DUkV2=aU(2=-V;xdk?WvRWF4Ek*`drU9TSj zoNa^vlN{}0Ln&JT#YDhmg|hXNcKO;5uK#_W!fDyxJ93+jXFN>(54TdK{vEftLMW$C z4o=fMqJ#&iBG-id+k)eRkk!(hXNLUK#JGrG#4 zSWx=aTWiW%kVd~}OAc@0fsl4^S z9kMrzhBoX1K6$0|bp+&&1fDi`&t{FGGInRjM*$h)KgLcDow7&}R83aG>e*b+Htf?gl^uBwaX<+5@E(TicJES>$jLvbP|a_a zyo=iNO4WZM&J%l4tsN1C-{~$=$zbjC66xd*Hmrbop4+g}iUX~BlE{iZ3gE<4po&X6p1b1JY? zsFmzstde()plX{}%%M^*5@4(Ex)Eyzg8b@&pDJrj(#EN zW+|AVXh9T7wt@NzPuKW>ev|Q(LbLLn7s}@n8k-)hHfQLX#lwfYCO>9`wVAP6OAIQG z-1x!sUl>aASZ7dLcC|Fp12V>9U4>Oy5P1b@o7FDE8!V?QmL@7i z*$3@?oMWwOXc&Qb(71ev(m})=6WSXoDSA8^*0%=ccZ~{R`-bvlRJO-lh|vFw^X%HT zVs9vej5RR(=tQ14yT}?#6$*PfG~#;Q<o|86;m=5pzdP05i`Mlw`4 z64&}+qqX;|A$XQGhCO-+!ED(LDAS${vMRkBezAve>0>I%3=-Ch$*1z-XX|TRW~)x- ze6H*@&Osp7SADQUAKq(HM-jo9Zm`ux*N+N#dotbW^|5ayvKX1S$XX>5q{!F$Rk}qG z2I44XwoZ|ig@gJbm%8rq00)35);#FN1#=y z#OXHr6Kz~_1C{i^ft5^sQX8RzjVTfrI`n6dQso?PQTA`%nx{p21_qlnS8MbounyQ* zPfzdoKctYI zM^3{y(Wj>qrsSCuFTL;2o9O++x3#p2WPA`~uwA*yBEUSn`O2Q4kS$q?yD)UiRC7~~ z{*!w{SnJObCW4HG{+=qs1sVZ$eAI7PM=O5pfv4_DFBL{0S{rM(BLtw{&Ba!7&NZlQ zB3qhEEK|HH{_kJsywQIx3;jTe5MmF4pqMK& zimP@Lq~smiuc;~=UaC;w07f+*nU+*C@q>UPJH0AHif^BPC%V9d~{WIYClJ^Ad{1~*DM+0O3!uqz8ChD&H$q$VO zJ>2fIjn7-GG3vHh{)U4tKV`uY5m{Tf#%E9IN7(&e)h%y`=1`n)~C{b}AK5_doB4c_HJhQ|i=a zyeXW#0SSrvb+=>+*+@J*6VyYXWa;!AK&fJ>nu%FX&?yWP?K5Dhy=p#0z!5i_M-0aT zCrYdo%{2p!8!RU*qiiix%rb|uKttazUc*qSNtF84b#h=9&jcYFxGOJnS|cVM`rP4>-jV!#jYxJjPq4TGz#hZjBYkVuo~c*@i-|NTpngT8 zj(p4}CN2)?>gwtnt;zRmGKK2f@8d7}74}}2XcKC;` zHq0Ho^-a~CF)N4d>y4#dw~qY=?E*h3%2G$aFX9b9mH<3>3h1JU4kCPnCCwtGt8fzI zSLQgeA4}&}!ua@V7UY5-D?p>BXJj0XC**RTAoVgC9E9w4`?rD7@Q%_x!FPTFTD%vF zyLK)5w1t@T$6$`&-B6JkO*L{uAykht)`upvKUXbon{}0q}ca_aR5H^Gc3|Qa)*~bQk=P!;jq%FYKZ}L6#ge_Q$u^s6u0IhiT+lxVZditPa=QBo) z;~>ywx!n8`2iWk*BIQHPD#w%qhZD{>0{RD0G#aJG7dd8qT6MB zqTWQ#iW+ON%>xD%6}4&W%DLxpZCG)D&&NtjON*Xa(dn<1Z>DzMtCyoaI9zC=UT;kw zT0Q;A{&7z~&g2p8MddoY=NWFz3-h0TDqDI1MLUs`tJU^3DKHV4iY&E_d4*8LVv7J$nWy__|1uGO;7Qge@4 z>QUN)2QR-nGTZsH?oXdDb@YSvlul*SpyEV#DkwwiztNl0X2um!3v%%sP@0i3QGcuV zXRZV`PHnUzf#8oBnI+%{GTV0|cizy;=PY?j|8(7d$2LagF-xl6tW?@I(G_1i@L5BM zV;{z7;m<&YzJ~AJDI_VO`zF;29_7*f?;D_6Hb0z9x$zeEzV3Slo=W@!fS53GxzXyf z@-}iR@PEr1drepH$KHgL!3Y;!NY!O3|$J z+S!)MaiiHaC~-nGmaL=dPP57xi+{X3xUQqHsP0Xsfzo$GNPK=VJJtia&*E(2yE7+4 zb2VRUu_=NhtBu?JCT1A@gQ+FNkufn+f{&%r7&YTaX8t!3)mpp1^ZD5B{C-4Sbt9v( zUL}~p(vY~qKBpN6B^GnqO~MPf!0CT~qM6Hhh-#~bii|Tpd%%JU zQlk}f5xox3oO$~CI6E3KNl>KKS{bWim9Vcb0@JBv-1q${oZNt+ z_}IX<>Tq&o!|1*0b21pb)^1M)yJQ=>PWXZ(phGbmjmETZ#apG6<6)v0C}O_lm_ah2 zMjB?ODYQ#nR1!G1aMyE}kQ42kMhfz^?GQN?NAJd6R7J&VhDdEeYQ0PRKbo#GDyr{m z)7>rIjihulq;yC~hcwdN-O}A4C7ntrB_)m09g<3iOOx90W#he2bj$Id9wPTK$o7ECMMkn0CZAe}&|K&LLMy=Ls6tjXu+OklAyoVZ zt#m|tw36R5<}6QPkZ;r}l>Ng59!ChV_RYJ5n>uMQ;!es?wnT$@*>wuH;xTW8f*=hY zF25Vg3fb)E>?v6nPvFGP_;fdO=+9?Mi??56MLT&^W9KqhVfuTrp%pakA7D{+#SuN{xc~{N2o3+7JtlNluW;ryZ$V@Ow zvNaPn0h-LWNha!3he@6QxyP;6WXdFC(RW*n)>Ob{4vXQb#(1E{%uX3~SLYdNad5>3 zPse)%hq|YR1z#FUTlG|GPs${QAL%y*m!+sgG-}zu@imEP&@Xy)bX5kxwlfA`e#DkI z1uJ`QCc=r3=$t8>@;Z5U>Qt6y79)|->NO=d6U)8p*DAiX_K>I+6>a(c+sX75>Z# z^{VHC#3s66ochwj#;3rk~)_ZPjHpD8!5owN9g zBaC2EM=)~rtM>?1NO^qI_N|o_fcAa%lF1^1L3xLSMl0J+sc}1QBHa$}aYH$!y|Nh> zE7o>WJ0NFFGEjF+4j!!ZhgR5K66^M0;<9nP4kPC*Qx9jf>?UEs2#4e+j^rvilRJZ? zBNY#VMm;`zxA)jfksy7;{O9l+?^5chB^WLtv|l14M2?OmVXsWs?6K_Hvq=<=>sndl z5AieYnGE8Rjw720po{-fN>qc~r080*nSOZelUoJK!k6HQ4+uH}v5abEYRC=d-(4Nn zzvepvIDFriElFx7B{gxoOy-mamjW)NjzXv6FXth_7DEBsbm6r-?uYbg#wsLDgt4BF zn1$N&3n6HN%^Y;o)1TmXn-qnFvN3j0AR`MOpS~)uAsN3EuiWc)URGvrI#NF6 zSELVae@iW>Oj?g?fYJ&a$!`Ddn`L?SkAL1dXM=^|{CZ0(mp~fvp)DwwX-_(^5x@dUK1v%Ff8CY5`64xs$f;9?m6xkInt3s^I6iQn zzSt)OiWGh=T(pzo!qG^6QIV;eOwE%h*og>sq2}peNg3bmkmk2(q1`+Fv@xo#1qRix zz7rjM?8R%K^l#QMFo^9uDH!KJlDT|c9KhIVxiFw}}7U^BSk0ZWx8v3;z&4Gdx zMiEbSA?!WNLb6!YFN+UM?^MZd|I8) z*;nGzr<#a4BaO-yaV^cp%Ia%s8K$Y+18rWfNd0Z!zp$)NUbKuHaQURm&3hXdk(D+OS82NkEaoVq%{|jweW!%MRh1(6 zKF6j%vbj^$z$YQYJO|NbE?{0PwQTtP>4J9HK<@p^rcJSdw+wNt9#$m2*h`53bAUQ) zg8@2Sx)SsgecsJ@F?u#{5=2p@t;BjK8uaxYR-`JQIxveS;xLH+9!Ff<*oX_tb9IUn zsheJhaVZ{LRZ!wm+H5KE@7l=R#`7QWsx&CPv=ps;U5+v5Z^g@qt2F=0o|DnY4HFEB zfAHT>!-GafL&Rp#(l@C}`c$tTmnVsZH(iS`NtSuokbTY#=&2#ZWi;XeEg$hU?+-Sh>J7+R)Nvo1duR#0@Q$6X9aT zDK$=0x>I=mU5P1{dA;zvxzDDlB7xpsBZnl!V19V8_}DCTf1a^mHaCtQA$qNqDE8xI zqufD(*sYv7s5wD1)DnA~#-gR(aiP^lR$X0f+Pst&$kF?*+3Z*KJQp}1=TM6;i(Z>G z`Y=oq+^eSggmm2`H!K|?z_4gMt}Tlme35*rLBr3G2~MEL3tyP~)03`i9OHBG8?bwa zgFSIsJax;)xwHxr5H1?@8N}golrtzaM?wW=4-cdGmBmrnDR;kz-sX17^ znctzBw`YV?GVR!OIFf@qRG&^~())VU&b~&9<1|!h`op;WG;fmB>bA05x@$bIKA~Cs z1QO~Wbj@OLoAeV{=(i0f3D|IGPD6R#J-2xh2Ko;fWr+s}L*3Znkw>|FFG*Is)&sJf zzY|86k&m|8U=#RZ1EOAiI>{e@SF6^A-nT}io7mlFlGLYgd5oE?7$3Y-7p6oD@Id`T zOK{BHksn{oJFXKwC_UO(7o6YTKe5bL9RSB^)1_P#o$((EQh8BD&UlcuT8>K@>x8D>FZgE^LqMCW~OD>EwKH!Qh{W23| z*T9QqD2<&+r;asrFZp7;U-*3$f9VEOPDdxb375xuf?P0PRS=PBbad3TS>NUUPkaA? z`_?F1{lM1uxZpPn2FCTo7K8Esk4UY!$S)7tVhdA&0}AU$#KYH_6QRY2_c6*No}ch0 zUJv7^(xoSir`a~X+E5yIU*G$b%bIQnyYgv-&9z@R*Uk|_C;WVi)67V{s^3l0={Qk_9R-5rJL zqHYjiHT=hd%71y6i4Pq5p1Q94an9FRAHhODC%f5m*@lOq}Li(ioo#7!K&HTyo? zSJ6Z-WEd?vZaHA+Q;agPExnegk?2n6?Yfn-qbE$}>c3+O7=3vAzMBvv0uzifWKJ_!Uh)@Ob+dMc7MM@3r-qB+xtx;s7!(O2R^B>#|m2* zd%4YV2tZAXzsI8gm65XyA7QAJWAJ-;WAAt*V4ctu2iI&Mkc?RHU)Ce9+khsPc~cXd zNiuG3&6*2(1a#1l!0DBhc&I}lVClg)|NXL8)X_m&WVh0YXkiWB8Z-@dZz8|;P5QCa z9v!8vWT*r4VfZfVH9MVL>5htiS8#7R>OY+UYlYlag>?ILp2Z|{3IfOQ9(1U^P~cN@ zVRMvkQJ52hrd%o^*CNbB9fL4?b_p@Xn~)E|pH-xi>2knrwG_6n%e6i}n1N)L8V(kmCU zFT78SqZ&Y}CIKO#+0RN1z0b}x8Js4G5pgCxYC(ZigYhrm>*qhAk(G@QoJqct|MjP( z#6*{7keSK%pXfL*BP7R>X=uR(lFE_;nYCabv7G@eLD$tFnzf?ebq5~52r}7wSy4Ru z^q)d7{&xoz3k_!Qb2a*5;DIKF#tlK$4 zSaf-OaBtm?8Y)(5$%H%`jP%zad9&6fb#?U~Pz~ebq9CbjX(i;5>z90fmE@JGWhRso z5`KbH2C-c=OQ2DYB>FUk$fygayl;a2^(+h6IYR$D$RYu-)>t<0Ud@&7%P%{4HNX!Z zrom_S-8C1O3ny$3scpnC6#&Hc@84bl_;;W9teH#jea*h`_-MvVPSNsM(nYS>gosKs ze9@^1Se9Zp`AUBB?OA+z1)jpamT;IlJ6b_=`<-zv8DgZeY(Hzgh8z!K?7{5W9-mps zi4+lC_x+E3tVYys^-kqAcy$Q+Poc7e^se#*Q*NR+BL-m1CR?|jZ`yyY$3uw1fD>Ep z{NMEClnwgmMIa)6e(oJ=*!SWz1t+)n`3MuY)hGc5#R~DJ4J)0H`AFJwvEzxIo+XP* zbFvI)1wBfM0HXoznkD)4HjpSZqKa{9+4sMOrA|IHwvy=_DmjyM@kAHxMv#Tem($R| zE$}~AWY@n#?z%htq}ODL3SAH&mwNkZ-ehRYI`D&R9ML9ldkCgRX~xS2GO1QvjmM}EsMnDi0UCFplvDb zT2_ua4oMbiTWXCY&bPtx>5kLB9xe>(=k`7|g$R9LGH)cUG;bb$vEjDDa)LoUZ9_b!mBR=q8@FHVn7t86Kg zd@Vdp@8v<4&1w>`lGO=+}lxaVduj9s)2gWJOC68;%E0A8P|8bBEE8 zeHojzY8Zn&pPBgy?4fURc?*o3KqyJWG(?+$avCq&T&7Ne?7c_T5=vK7iHT_Tlvp`2 z<*-LHPa5U43jlx;gLn$U`;)^!1|lrT9A<@Lwm#qVI?i``>C%#5 z(vsLp^Wkcsrtag?b%@RCZPwaxGQMum=S-bV^C1UvsXB;g2^JNBx72QkxxH|90#bx! zgftBS0l`-J(feK_iAU~0|0A{2?YBXp%TApt|GpemNDNM%bdZ4+4FglAi3`wE!O{nD z^#T_4tFn>=DV1m|?5C5B-ONmYnI%Z$H<_hwi5@hFcSo5Nzh`&)yom&@#?gsij#Z+4aaiPm{)8&vGMUl+gW-n< zF!fXS=t5paE}64#`>k-omQz~E!io+haZ;}h@NqbC zC=9-9$*Sp>X7EQ|VeBZ!2D%5`W&QXq$GjMC%7>DSE5P-lMMydy(ZB)jMKqR5d8F|z zMb~MR4j^B_K~rQHCLf91sDj8RC7wm+YTs6%g%n*BU4mNk`Y*K>Laze89Sbgj@yiyB ze?mDEdwwjg02n&D2&-U}+`3wHl-8 zra@02+ss*c&YbM486pX@*>L&N*)@Q-tWP1P35{B|JbDU&#?f35jhoqM$ef>T-U)po zBX}+Bcry&U&Gg~+%)#x4LhJ!Ki@KQrpT1Iz9X6r+FadsFMfD4-->^q8I&VKb_+a~< zj)$huA;yrfoUnCENf+G|G?&FaVo>m;%R9okX~8z7Wc z$$V;w-BU*-AU=tCrre7nhq-Z{cBn5|?&1FS4NUNIK^%H4=bQMOiM~!Ms{W{ZR+s); z8WI8JTq^0|_pdabx17kF=>rbn^j zC{d@RotN1hcy#+s{Q*TwK-AIcoy3o`o)2;*di-l5@Kh9c$acAErD_u}c}{|f_K}lQ z0e_Eq#g{KI<#J4U474p6a4@LT9OhbP=S!Ap3TN|dq-iM!%i-;(>F-?bKg$aT|I8(pG!AMobE?3ju$(zgA7{HGL3z!W>jNO zNRRn<^Y#jZC@=OVhd{1nLSyO6xs|YBaVGG#mq;K^#puXN*xRRjOs3nlQ0Qdp(`S!= znc{_N8aeD79N)oGg&vVjtG-FHP*W^uqEL19C+ZgI*qp&l$D2}{1?2_51XTe!){n2E zy+4AxDT#GO$2Gk9*D|4GzM_YPrR9Sm{JDpU&}rd9^zS>@%g+6(%SLu;91PR-wE$*L zPI(WHSACmY$Da2BDN}JJmtrY^3O6i=5?3n!!F-BZe<2JO_0u?l>v+cB*OKe&PVJ># zUF0B#{Y6myoFu{bHxl@rt9ADj{~n+CGxexj|16xypWKyow^C2ezH2V->VjinkeR&m zI$TYy{U(1?T%Vqr8uswupXasaLn7+kFtbL z|Ey@Ik$<<+(X{&uEuQKm;*RJNJ_ml4y4x$(8}?oyi@lHC1{6I5F}fBbDa3qhQFHnZxA#pV-Crc%onKln z7&KBw{C)cDJ&a9Ij~`MHvZCo%Zc#RF>sp0@U{2lqhzcFBuQIiT@alKwDXcy{;t>$< z^w}xf;@zOamV5{}KM}hfaTF+SEQZBrj2{|KE(H}!@cFsx@k%Q)mE$vv#Qi_9+edWH z>N(@u0uf78!B$y?N4hYs;dl_Hw3tdcm{n_*K-y}t zu=0#Fx#A-&HjatN7jIrc|6`aXl`?*(mFSt7{Dr2EOt_zUxj}#9u-ryrWp%$OV~t3o z$sfg3`x!Z(i$a)I`h&96P^Ec2>`3%EmHvm{zpDWYANmAvg2I9>3fp3#VG~qlcyfv4 zpev4oYdRyxiketk-+7 zxVR+_HmUZK*KkKtIAu2r@0wW#o5r1@##vts@#kWCc3uX3T9Ff9cF+uplN}ZD5F|&5 zkaiX%XWh=>?|92Id^MHQs}`07e||GFMMvpd7J(Fyug?63u-J`FR-*&S2P>%%aaFF4 zZuAcf_2^`pxN6wL_@$Rs>NlplFTuVJ(thhSIbo>ebj?XNesv=D#< zuKtR`j1n+80imNk$BSO}bK!G+K|37L#Rez^Zq(jLiazSTC+>_qgcpkZ9AdgtWNc^D zn#rVB9v0$!^T$#i-*ffpG}R;?`P!UT=bG1Af@m*Pkf@pFTFuq(iC!67}{?Pzg@e>+*PM_MG5|R6A*0zWdOeYY@Q;)mAVw zGYlRjmc(lZxe~057QkNXW(LQohE+S=RKqmy!9Vh zC>}{G2!Tu)@O(FhpFuKhIMaI*{S%a(&>E7D@Ahm;2D|l9WM4X|p)^_<1Em;VmTTBr z8iuEJ)-hYWxhx`>LBJ9A^%TlwH0kS!g-KSpSv2Y46#R|^@pV>wGSBf_H3&6H51>3W zntw;rt9=8aWC=hJCH!)&?Cn>B1e-F{I%DEs&dq0oV@5>ZJxNBbWX7JpUN2w2cKoVO6P@Cv$%p83G~}556N}51)XnoH-I&?&&U2}) z-R5Fb5yb)Q$+Y3997$Eqg5iXm9KGk686{vXgZT9~=Wn7lIzed8Sk5c-w{4l`$64H@ z=0D#|5}^L+^jktC(fsLi80l_P$f;Kv9(?GNI@QNJ0cjfMwxm|cURreVs(wNdXAU9@ zQJ@Rt`@N=0#Z>WO-uyoI8C>jFUWQ1+1=ZT3s5C=$-cexlF{kNq;OjZq)c_+qXvgs} z)3|Sc+QNBKteM+<0OfnMjf2BL#yHgmc0Id1^8!$)6IFS#Tn!W0TKA)VIKC&fqN0L> z@dteUOR;tjbR+EKLj!UlSA^}sg#NW|zgKXttYt-`WtOQR(^*U#&e$`5>3;-h7Ym&g zK}s;%__As3DOCz2QQvUQUs3t6u@wh^6x@E0S9zMiqz=FXUDMssbZCMfaEaFLIv>*I zYtvzb-c08r(gJY{23kalrU5*L48wz~kO_~<$wfv@7%u-?#Qzo{$kzqBKKI-Oh-frq z;DdI}i!;WN%HV9|ynl9PC^M?zj4APz;rbPoFKv0>CCLl$ww9xi`^-FAXpmT7uF~@3 zs@d5i98?wi{1XLmBg6v&XHZQwP#HQ*(-I7L*x;pb)b*ywlFOv%v{dYrrZta}Vn}SQCt-s- zkRDe@9cXi+sYz@#TXA^?h_ogy<3}#6mPfcPE3pw3Vgr5WXUM#8DPYqlBx$R^ksTi} z^z>zGYwiFQ^gf1v8tz$cd<9K2kQ9Y@ZKR+(l`?|=82 z^P3OWN(_z_u9bEmYwUljx0^vR06HWH*{|vl{x#M|!7P;mN`DI|vqmxl#))@K6oWCh zBat8%;*_D?q1jt{;PHbtPA#d6rBvlkLZv9BL@qqE#%(c4VjWB!D7`meMK8v9#ptV% zpP4q$=X!~2`m=wt-iCVQxW1(LZsfHZ@%#6?Ja7)pRu~OYPN0;Iprw8fu~BEO#2DWE ztXRF!7J>T#XUBY{#W_5p>J{RlaGC*?q+^@q3${1xpptu?yDv7?#~1YU@Xuj;5hp>m z*F|&1uG4e}$FVYae;K~`q_yGZscr@f9eDswvITWxhr*Z+IQqsYg)vd4i>F%Ty*{KO zhAmYzPTP5E4DOJC6_R(O!YX;sX+AE$N$QXOfc!*d7-rpLc~UF>4d1z@4o)Y5iF(1+ z+36_)1_pUA7=%x`)u2Xxmio6QgpXX>8?7LU!A%(wmii=~n7Sm>h*P315>O*FS0?KgVeC$98ApOI^I4_C~OzJ&M4mw@Q)MJN5m8chyMBeR@lt z2fJy5=92wGPuUh1rD7a~J7eJP+an@4<)Q?J5|Zhn=u)yzK)wyF(d4_a<1~#FvqACq11mME*uWDC6ev zz9Ml`IMp&iC(OGyF3woMI*KoDJet9x+PeNGesS;h4bwc@cWExt_>G-A9ju8EOZFIN z=>RP2t&JApX=Z+E(hoq#yP;Hs*PG8zE$eP?fPJ4)h##;;PRQsOJ_ z--kHUNR+T-_;_-RJY^M@Hl%n~V`{!zb7zjMqbBFMDv{`>qZ=;@n_k-i4E4 z(Gl4OckZM8I+-!J^%q|WyoYj~>BsU#GR5*D%~&uk@X$mUEFT(e049+Em$ z&G_vsi5-M%rbsyI5p@v4hcsElavVkS!TnB@1cf2(3)Au`VoK$E3|idSzBNVr6(Hga zaU?t`>hi@-sX|Enr32)5oYw^pB=@QTu`{J7+ZXi`eHHTSLv`D48;@?^kXJ88(OHi= z-;M?P>ogO0syXzx)vxsq$@80?jHo%c{H3p#3+RyCMmt@H7)9czjCdzNxI*UQ89d=O?w?a%O zi8xJQ{%Z&_)n{U-cCuW4$G+3e{@+u?U6WS#F=B`--Q|+jB)`gbRw0GsF|0%Z!BJ9}578fx-Bvzinsz+d?SZv-gCQKpX77MzK&eJr; z6ij`s>&@aO-i%@T-8O1EL#-LpU-&Y^6;OisgfMa%$oIo9Etm8saORMOzI4<5-$}ad zwr75_CRS^_{wTi|da{lUWE_2_L{MlcT8Rv?DoeY3z%+Rn{$C9;uSvZ3DFFr%lX4yb zsY;#v(+Q<0{1-Y(>xpBMucD7H690_?<^9=6vI>p`4X~4uYS?9dg^0gkx zdL&>|$!jAASRusRYyb~ePx;NSZ!lBzcQk|2&dc2mIgVLe?!u9m6Ln&ZC(ab&cUyd0 zX9z(20gq->X-{CbSB8h)W%M-9IIhz*4i_~J<`?)LLU(i&u(YjFr7pWUUl|X4AJGjr z{=8dp{q<$^%VN)-$w|*yhpVBUKQ|0Dfupp=!Ur2e?exf)fj;MDw^zI7Ip2{k@ye_R zvK^Jqd?(oV{IWl)un7m0)KbIofka^}v0n`t@7>Ac=f~-AA2% zezfl+GA@ml@8igsLMp+M_3v3ob=>ZxE$!86$b4nI(J)fIgx)%Bw)urF4=OG-{Ip$6 z!*q3kkxH3U78gR;y*G|xH7b6kKjS`5ek>i+*-8G#&xa|f`@BWO{^C?~-!8B*$oyW3 zwvpUjbIhglS$~{3us9Z*QZdJW+IV5;v34c6D^cZRoQ;B0>5|s(qdmlfYb)KgXm3Tk zW9nK42yI55t0?|oKf+}`oQeS95oR{r#{v07z?j?`h+%~ZHf`=DXr-yBrvQE60*Ra? z!6yH2(}mA8)kpigCLy$1zBeb8b|#?CBPGE=I$rFYn`sM`OoG3BdV%qqb(rzNGHtg>_xoi&UIN`J;QnGcG%uX}Keo3}$(!q&D}F3>`W zaWQl^7Ox}!g)P^N8};?Ncb<7mFP#91GI0<$Ng%-n4iN?`7t(@&j4Wb}^j@IUD-j+m z_l1v;CxJHt3KqWVFQf*ay?H^6)$pitOx?pvD|k-FN5b-itSV7>xI2;X2Zsg2_W)qH zGAktPTzt5{p>oVbnfbfg3GHvpz>LwFBk=g%?p1svlJgp_Qld7iw{~rleA>-$XVHZ| z-AmZo9t4$9=__PsyPH|To0N5{bcKM2vmx(|5adQM5Wb#jr!b93y9Q4gm1=<~VvwWcNa2Wfc&7N^T4|@oak4h@;$9ZZ`!9#PjSwbMU{VLRO4j~Lm4ema5u^E^AAdk6E$Cc?0X@3>nCV#C*RZ~NH$h7FJ!XF^ z?y-xUn{FV7G=DbZx=cB=)9=#!i4uUdbCu(S|2S%GeFn+%tBC$xFJO5+*NPi8NgllX zSC;Rk`P{BrpOZ=)!WRdp@jONz#L)m(C#;Y#UYiMSG8Lsl;ADYuiY5DP#m%Lp&hS?~ zouG3KB@K6?$s}o1RVG&W23K$I3odg7N;!-_VV&i9AE5t)=1rnaR`^KW-cyBvU#xf- zdmPal>kh#9y(W(2R`(5u_iGSkp!Ywa+qHf3c(OOafJYup&k(A&^18=JYeN1Rj+k|# z<$aA6(Dci>{52iFv1?w?S+_6#^nq0^6Nk~$vE(8mCIE7$Ov(=*w0W<_u0;UY{tI|@8b)sp8EnYTj3!Lqe&6uBV%?=V?R5+!Y{{vWsH)!LOo`HQ zQN)VNYTc89+ZBP7lx*X|YVYx0O&ZXV)hY0Bzjfe=s3Z;-_300%(UNLZDN9vK^SGSNb0F0d9S>tBDusiQ?Iq2Qd!}%#pTqrMTbfkW_2y7 z=lSy`n-_}w|6+L~(jDi)CKQ*+9fvRqN3oHeUCydmoR^J!_B~Jk{InGF`S<<$(C0>C zi@sa7v*&^!QW)p{7OIVNHqJq+H(e$E*2cXkpES^3I2=&2Pam>c;^mqaa??nHK_5QL zBwyt4XN!9oew<+v^C4mw`VIwWIG7T%m>uD6(Qxv6{SoZ|9sHMHZ_S}}3Gd5kd6)Ho zo6WEHfBOMLoy#F>Ct>)~sN|AVU|!>h3?F=d)G6ivJqdJKQQ)6lB|D&xzM7bwH)Y$^pj zV(452<;}P+T~&eXXh-P2NHOhvV=2~lwj4|otLKK46-XU7ZsA&|FhsC%-ez>ovitB{ z7;Ke!QTRA<(F+d+5_-d~ckk1#1U)|<7rz$+JSL%Y(Mgaw@A1~<=y_7L%?SK%=s z{-Z&7FiA)ItF@FYaLCrd%Vs~B4?}3B3Z0&r3VaV)ju#r?K@(D0pBf09t19d2q^YSN z^D!|4fBw{_Bf=`8F=|&oXBCXMNmME};IpaM(G432Xm;67Dzw1b3z5*P=Rq;#7r-0I zdWSK+9cQfG#Zh^h{B%6=2~eE+OC-MLbR_x5Z88rOL3jWS5V(H~l%N7|gS8%)xwU&_ zJvVk;;vTLb;98&kZ5u{hP&)ye@dI6((;W_a;S&W!17cx8M=q3CmpO8<+xsORWnRE` z5bcYEP*k(mWZE*oe*xhFI^JDg@x`$ivdoO9Fi4NnIiM{(7?+9DrKN2tmW|dNt9aF- zP>2PM;mP6(6kX24-E_vpV2s5`s>HUlrYMk-4$vWojgmNycv~@y9(ZO1TOFz; z9z=NHZg*85@C|tH9lN(6ZKB}Ma;RNSp|Uj?uYVyjUedW@fQ0Le>Z&08|~|Bgi3&0FK~^MV;bou-O5w@C%t^ zAs`avdcjd`!Qs=4W)$Ea)4u#SN|Zs;M4R8CDuNRG-o?@8rv2{C^I>8x)trr$)ZKMm8mr6}{LA`Nt1#pL5GL zAv$1;p!}x3MJ~l7#k&L|fs+!!aM`7Nxjqp%XP>HQz~yY%VVxnlH#D_|ja~Q&ct&10 zoW99CY$oLY<*&DY7-mY}jVoJ67LSChHqc|uB7p{jM9`5GuDC13I+iSsZ$1$DG4+ZK zN6D`Q%}trL@1qyRZZk>Ld_F}zsZ>F;I)0Px@tDpcJ-ABIO!zq`Yrr|rZG6##FdSccrUM;2hkDp|H($y5U1#1P>GYv z%F60}(ZrkC4+(do)2#BAT$<)tEbC&(Xqf`8UCOw91J_Kcf>~3NuJPl&vmdZp#UIJrG~_9kAtA+N4d0jM@`tUr ztV%AJZl&yi#}MqIDC=Of9UCbb=~9_`Ry-i^6}U%JzAjHmP}ZZ`^+}m`**&4P?=Bn_ zDZU>Txx})jlKsw^OMOAE|JElF8PGd^i{`K=yX~vUej6y2(zN#h3x;qg)FO&fg>-HI%V0H)PL-DvsV+W)xs{ze^Us^m?B&%xRp_FX#_xo4EdkHr1DRTN5qNxHgNi5?KjvH%KplJV2X%R!TYQp&*q&F?s z7KkSGE<}hX@9%cv@F4n_o5y626saUK?1huSulBy!XxeSDM`j{xcss5X4fon+_%CU< z&4L3z@J2sg{et=I8-%~+_nwa5VIi2~ZJTL-Bxa>Z8ySrHucV$#6AJJx*+#t><|pot z?DTy9X6PJN5ov$CCZfFlf)8EzD7-IZKzY5LT@u4*G?10opWIwMP*(&AIlHVMm-|>heVLJJl-qG z1q1GWmr@y&_A{NwXy!XjH1HN|DFhZd%*lz=c<5}!hv6+vxxuE=m%}*-u?tORS*oe8 z&t9fnC4@V*38<-TATIo=715oBH5F4(7A)BEDOq<}Vq~Q0yJSS?P@-vPxsYetiX?OD zfr5)oO&5yG&x9>MmRL9^3%25UrW`1#iGDF@)ey%PR9>MZNusJu6|hO?>8WL|WPmKI z5G_00cqeJbNexDx^bx-vx2`5KnUjSg#AKMewM)x)DMwt)g$avs$xa+Kg9Ifm98h0C zK_TWiDE-xWJ3+ww@MqQMgFAbd*{k{gzW&>B#APvvp`0&FDDgNlt}xK2cQI%O{T3Yk zfE*pc*Ekx$XJ#>?%}<=(Oas6Kr3ihZwxT@wE_L^nZ=ehrv5~^3V}?CktcbUx&9_~_ z-410~YlPh3Ays6~?=U5M#=$GZAborUg3v4>H^#r;o&%x4Gkk}l0B|L4bsh;T+-OQ z_pt@hoE@WiBveb~m(p7r!oi^*C9i#reVg7L1~49REOr5o*1;@!o$lXs6+W#4E{AAJ z{Yn0(3mFWmKv-x|_w$!Ft3A*V(Y(k!q?uV`>tt7!lH})6q7)wL5LoWJmWnjBDUC?MGeNA~4j* zvNDM8=2!63@$I=!ivr%X?#AuearD;*rXr(H9n1L{sDDs2QE?S{lE%{#q-d6zRI%ii2|YV*OCFPP;#yjh#FPyD7=B{=Eb0td&Az^$yZxJ-yPUp~&Q^(@|-< zV-i=O(OcCD^*EX{TOLd}MYiX&9JO^-L}1V1KfjFjqD_B<%x6ftmg#-K2KuF9TyNMn zQ7xSmC=7rB$O+xDvbZgfJpU|3Kq(ljE-*p=mi?eFK{qwTxS)s?Y2v=8tjMe{-J#_a zX~;ESs}50M zYELs1+U#j`Ys2%h@AxO`VygWvGqpVji-`1`W79kQbI4B*smJ^l3TlG>J}U{*K8F?< zB-?In>G>=!t|cwmp0>uqD}K(8;`wx4_!#A{y(Nvm?c<2`n)Q7wecAWf#RA$)mRc%E zDBnH(x;N$J<15v+AQ07D}_Ws2&bUd7fvvZp6;L6tF$XOJx_-(${}r*;a1gwDy8%) zF>*9GeFSSUz^q%YOrn!l2H30rTv+k^;ABKIyq6VEWQ)v{u}ORkNg`*-QEyFahcG@r z$#y$msQn!r6R|d*$P>!)*;8J*zo6P)>kLZl4D=LuS?C_;I-#Q*|9#TwnfngwMJpt z#&SFUJ}`{iVz8*P5+zLjvcE-9*J2_s3d*{La$aD-)Q6N)_qFC8WV(KusS2qHQeR8L zWeP)^eEp~7y2#35PIu}o}QTukb2bZj5&m0 zR)D+!!rxg*{mZzDLNNdC@x5U`7CL;#|1j2znaVi`&Dq{*^!7#VaNPs*1GE=qCuVyX z4WykfO;`c(HY2(Zj2A7ZfKXIt1>|aoH`3zlWJOKNqRl|w0?9s9os9o7JN#{3ZU|uV zp(10YZGsdwXef_{wssj0^FD<*&))@Ma;4`%{Oaqv(D9c6oDK>UBev#8Vp7HgZmxcG z-z2+ZfMpGdusgMqk`lEX1R!*>nqmdYwttgZ^3=eoFGd7OrC^eL^Qm=+?w6wX#khb- z`J6mWI*wVx&2;2p@S@N=ue=dCTCxe5PZzjq1S;jjt(_=?dhnVWi%Ik}ewN*q5@9@- z(GAd_EFC4ITnPaIC#LtP|#J!;3Y0DAP{@O>+^V5qF zZ%vsT8=miY93|B^0AM@&sikHHbc)dW=HV%_ zGPASyoRykv+C&77dHMJV4LFmK&umL*El_?zURI43&8M^Ct{`Obn|g%G6emQ~SRIyV zrq*b>)hXhn@V6|0D3I`RpTZVhCoPjdM{l?8Wq3)!kenONjEwkwRRaSrcG9V+G+00D zp-gB(kHCi4HerHR;noE|z1=c(kKMBwEE{$gIN9=H(fyAlf+*29O7X9K^cUr1)EQ}n zbK_d#g+gWz!oRV^T@!bYN^g?a654Nf6!w6jqmIC%|+BklvN^yk7<0ZNEKTxtJ_%n}`C# z#Z9PUVlaX1?4dc%v|U7-o?UB!T3_!n{ACB;0KP1B6^l}Vl5b4|@b z&Ia(+Oo6%Hz5q4VjfA_vTF`SqjZr5N_R0Fxh-;c{|8KMBHIQ`d{i* zzT+<`5TUoxnc+*gRc;^>f-55G`H1G>Z$xIJ)ej>7GoKgGLg)VE8`Z~;AG7#u@oKPC zQ>m;rm2EDoF7UPg)S^DyFc{=+tc0~$Tpj)*5%a}}#G)9bv=gyBNupu(i(OQwxaOUS z%rG~cwv0WNB-=@l1_g84Ne7U}QN5E7fy56#j=SE95r!gQiP-mZRgf}8MyDIj1tA}aBxaUp2Q2WF-$veYQl(%(3)f5 zFZHL` zmVLg$TJQ(fKuv(na2hd7(1n(Ie(k=k)Cf||;WXYX#lUZNq2My*zEuTm^CxO|co0Kj zSKKDWyr2Hx&+S;MUJv~TnFg6!z@uiwe`)0a44%F)j9h3nYI z_lAa=lC7=#Q*W$F5@HkuTiGgAO)nI62ihtyL+*oKM2jJ;8vj3&w~LQn7Au6MWhZ?{ zI)gflc!ey6X%uX$AxVZZXgp9;3c$lcfX5}A26c6psjO(WbR`XtGgVjs?%2YYW`b}3 zPM-S!quAwfeBKPa<_*YR&`%)>7Bip?>(sI|j0Rw2H~Fzg^E15i(V_rzEm`cUQJ%T_ zATrNROoqMmhNz_kOWK-i*6Bg4BM;gJO;$ttV@}%osCPo)A852Ropk1ZE3i->F`{nM zeZ%gIQ;j-J=I4*cj(3hosyMfCnR{sIPC`sl=gH)dr)yUs+rGS0>Z0-;6grZnL5ROv z@Ivxdjs03=4{5Z7x+LzK{3L@0g|o7bx_~#k4F;nNU5-re)*f+y=B*Tm;ZC%TquV9h z=mUYZ>ioNsZ!*LT`dI&j8rFGzjL#qhA*PbR7+FauSuT8pcS4xmsVb4c(LSY7ZJ2;0 zLbY3kz!i&(Q5pZG4<#4mQFBR|*!1tpmz1Tmc59>!%tPMjIlOO3`ZqQRYv) zOHuVA>C?Vx0#X@N0z$>qaWD}$osL>ofBUxfZ9+b~@bMK-a+R`W9UE>!94m#lw7{r>sJV2lF{4#LacYp*q*Ie*gx%4D0$vRIAJ@#Yw?mbMrY#Fsm(i3BN%R)}I(Q7EhDAaSXDoLJ0T zxZDFRP0BCL6Ld%oc#*CRad?>0#Pr{MV5dv$H>5<1G(eTFQyWYiB)u1gwsdK0SAHa$oD9QIyyD z!F;&d7r)xLnFG0DBY=k!nlY>>QzRXMzLsC()hIk|oacrm2hyM({0Y>(XNX{F- zJ7y)SUOw1-fXisJT92AFhq%?)RrJVAt&&Fla8Z2 zj(CX-pe9S(j5Il_ujJt8U)Rw}NVH8M(Rw?$?aeh|Q)ytm{;kOF>4y58$1;{uSU)HM zNw_pS0H+{;A)a$xo_k;m`R(*ia&umERfF6(=BNwdn(oMNV~g=JoWFmWDx4uC7FGQ5 zVCWQ6%O?m@N@krEv>{x!Mfe2bk9Pb|-@@3qm`UCQO>z8X{VV(3>?O*K4@>Q_K9F-G zv{tL%PO&wEGVg|sGIocakVucav^Hswg#R=2QS{~BOBVS$g+kPRFMvvTo|hO}%Vw#v zSl5oO*i*>Y$g`)PV+IDS>mpniXQ3qM?zUD}?--(JsNRH(z0>i|e4?nBv!$QR%FEyX zuRZKI5VwFf>)G#g?a5nV+ye>$G;}nFwSHXSB0-y%FQh5IU`6vhvnL|Sm(ln$?DJ2^ z8Tn(&ksUPLhW53fr!%~7LoE2|oOsU%;s*gg$448~No@O&^sGa^7?*XHikw3^rxKM+#~Idr|p#D&U94 ziImmU(h5`~e~cXRe`FTFKht?Z_}0>)ZULbxf4CTHH@`*iuk4E#gd4-3qMb(fqLp}L&(bd)ico3fuWK%s38jFv+{lx+xwQ?tG!YYn~ z$tw?Yv{3@LuAd1ChXTM#EVQHpCh}`+cADe)ifI=7j7;8FXdB`@#L@njMv#66?c(kp zkfE~HbP;z>s-Kq@qAnxB0A`sXeZ=@d?=|lick1yRHHbn8J(5BC`kB2r4h~PagBbk< z7*uqs_=8-#(b0@myalAYJhQ=q9um}xj>LX`mo3o8M8D1cQ^(Anrbl}pwxIyvOpy}Sr%%*wBq)8%5f$DZ8OVaClmq!gH!V}sI3Tcr=~j@~qI`zayt3#lzoakMD|-*K!fi_rOKk zUPPV9ujbQ5$ZT-0Bo;>EXQ0R_PllhnRU?bd%ip;4k}0>J1}SHZ{8Ic#ypgWyRzZ|z z>V^a*yn}*#3h{97?8l^kH+Tw5kEKX=mXYBB9|2iB5lhe%>C#tDkLzY48G3IK^f3nh zvXr+2m#VX<8N9!QR;|^_&`Ng|g=Sg92vCtuZA7S3 z7yM8(lwqHaf@s=)b-a4K6pURP-ui-jC|AN?e9nWPLc|RNOtY=B<`8S#h&%a2+Amv( zF79|FMbWz91I7?>43+7bedD4fzbW0cWuR!Y5)f}%{VqXweDIWUtX@I=@nJE{L`0%@ zM_^IvaDhtnCOUUHF`T-KF)b#%X9I2pnTAx=tT@zL7NM9%&mZx!@!7J((W9naPQ)tn z$P%DMb%T>kQYCrpvMtS9F_Z|S3Gv2SYs9XN=Vp0+tT{t z56ZE8TD=g1;m-DrVgONWWi(HQ<>`DRfE~!f%ST{QQ|K`d4^andav&CTpsEv*I5=R1 zSkZ#F!UXMEIKaW{XxPfn^Vf`*0$?xE_o3W~#)dN`vW?>gcrsjVI#?gc$h7?K7U zPMl5wyaXpI6em_;X^A1jA#T+?f_yaFR{J}GB+GcrVA!f+A>Pr+_0}pYqKz{32X@OE zl0OwD(by7qID~{|%U~6l`EEx{frWB&mKb5hg4bt5XydS)AiB0Gj1yM`%Emej8GY7l991L1nE8-Of)987%&1IlpM^=2-1K}P`eeck8pVa7f;-rv#- zWoJF4PuzqAx9ftFE4g~}eqwi&&cd)hy=^CCY_TY=oYwOJ$$O~CqV;M8Jta+l31~qO zZ^pioAk1OVp8(T>x>*`-C6XoVob+qVlXcQeK@v>)c^jjD#ni30^M@-z(IZ_Er}CD+ z-G{^Hm!*63&7iQa#dM{~OrtZib}7Lyr57h+QviW>1oLX9W7@Ge6V`dh%WQkmI9uax z&mI|ChkXG$=jQ|LGH0nR??eXw>w)h+GoPAf%O z_W6G7?ZeKBy-7I1TIs*#(>a*H+sr3D(8L;%SMr+U`E{nIxAIE^bd+=C!?*L6R9NB1 zH@j6N*FG~%?p*dQ=XyVkuxA5-l(aN+ylT+w!Q)*rUm|hA8PaUAR3U2a1e3=? zrbh`GX4#DoJcZS~q#;D$u%}5)axb$D!S`d_O4u^4~7@ufBI+2ExGH^VZQKVc)W=ooPr_ z=#mIhuj8IMD$<53YU`e(_erD5l64q;a(Ma4mMAMBhOxtO-23pG@QYLDS6w`l&p&mJ ziZ8z4FBOgwGn-lwkvUm%RnB4Y8hVSSQrKt7YkqI0mj`;t72>HnKp-F__u;Jg>hFkO z7<5P^_J7pF*rS&d5_~VeE(-iX!E`#{QqJy)s0ATGM7oB(&NGUCxIQjdVrQ3Fay2$M zG05~}(&Caoe6#hK0YRAkN5aI8EH|0%SI>9keU1@PTIm+@AShz*jRn2{1hm(MBX#j| zKh1-MF#@4AhFB4GwV6LjHu{sr9W%1!)l93PXx`M-dy6>F3e?RBQRLy&z;+= zDimV#r6p+^(&S2unzvQS%T!u5>T-pC^*@oTD(~=ryt{@$U>9(L?)~$1P7|Dp_UG!Y zetpD-%4vZOlZyYH2R60O5ga&jqGa)Z=ma_Hnm4CRP=xx`?JvMk)AZaS7#7+z7QL7$ zfYf{NH;`D)eY|6~tYNu{yJ)xOUS8?I$Bk70YZh3kQX(@{7s!&<9X^{$3@B2GJTx_| zC8=MQ?&1$L(Z{H7Gc{<* zh%I;=xyj$73UnU)ph@T(q!&UQ~Ixcw|fKTCN$-d|e$NIzZ( z!@Qbqdk6)A?7Sa8h=e>t6*JyJ0pd;Uez`@{X3jTskF^Zo%K8if$W4R3{Ugqu-~+QZ zKj?>a7%H^mcIsBd5Z&~_6#6Aw#GA<9FS`?6;JRg&9UNqg0^$mpSy{MP;oxog@)qE3 zDsCcsEC(G=?$5R-P;&iSQI0(@fS?NPxS;3C&5c*LB@Y7y?IfRm$7;U}2X4n_)6G)U zA6@D2G2@*do|CvfNjR&Y;dVHZjA`?s1EN?sNZ6Qz{~s1GKCTU8H5NUvT-(?H3DrR{ zy5s8Fb}1$`^>X}J%iy;alPGq_FNRE?NBSYg&*Ipkt$?K;?0~qc{U7}Rh!o}a@~{sy znMe3P-YzQ7G3WZ^`-p=FUhBh+9gqU^!Ht!ti8>SrTQF`SLcyjASv*t#8@HSD!|<@O z*V#gb@%hdtjyIZ^!=&zT5LP2`qTf(i+QPuddj zRQ7<^;kb+X0f#v5Cn{0hlc6ECbiaAPIoW7J<%_Hq9-juh!tMe`LQv&YyJCsaA+I&H zAXC_C2n-4aC!N}=nJ$>Emo0}i;d5~wIEv2;9=eGdZXRJo(Q3Q_2}~%ZN2~)5yiRWr zSjRX>4JoX+rA%`L8~dMbCe5jhyDEx@{0-H-my(sX`5B_fM_~+CC#J!qoh_R$>z^s= z$Vo#q&a9Cw3+reM=+y}b#bGT~JHL0}q~S>BHKN-2W!g`c$X0$QU=9VgyH~uaQRJf(cG}_seVMxQ;=bx%9#MDTr>@i=kISwb=&uSZ z&^9p#^%JRT#mB76&XOr3`mC;&vHeSMIMaTGw%x5)HCPNH8kisjG(RMsf*HX1k--am zbzOng!NdOLOv>(ID{7jw!&s@7VFa6%_Fsi5KJg)liF{!`#jzl+p~o!gJ5m_CD%g#q z^GDK&(#fP=427D~4?7Jj1FXw7JwZt5N6}_?`Eqnq4m)Pm$4K0c@PgBltg_e{0|dV- zK}TNt`G78O#jLCrKY4_hof|FDaY5s2_cXlHY5gjBXXj^?4J&9DNA>Vwx@G%;`Tt+% zlFx0f%z=AayZ6ESZG=4Gf!H_SzNGq~MzBw8!2K3=J6H&;UoePGeLO{`2*L+NK%HO{ z1%o}a&x|6kyru1pZB_K9T&J>cr)>#AgD+mHVwLM^4JGloH>J4$g;R0wL>8CxR+fbz zs4MZJy*l^FJAU##w*kr8mtO}T;g$fy96Fpsz|-=|pJ>p!1?j+mMg`2mefe9;B8cVW z?#3r9G~rkPui?O?PDmy>3kttH8e4JTD3f49#Badn)1b{y3<$rU&*s313F?yqQqJ?p z*i7&0eGuZRew-}!*lelS`u+@~d6g2(Vvxh{A>}^>6g`^eiWe)cPHruZFK2xAqT$t2DAD z>5{sE{R$^A!j=xLc;JiD@8Uz}tKV>UZI31~^Sf=by3af9>uD*7QV-=~BB~AFmz0)< zO}&*^*EOGQ(T7WL$_JE?-}1ppbFv_FxV&(CC#o(EsiYPgzt(}AsyeKtB=`Nd7XJbjON1q9KPa-NRXBVeoIi~$GF$h zmp^^&oN`W*Fl~GD%+OBBPgj&B^g*b!?UNWv0wQy|_?Q8`dW!^Ru)T2h!8BaO{5hW2 zlTdI7iy>!7907kK&_mag(+W!s&gAZ0`cVw_O2%CO@sPAPOfLl2?A}Y#Z+L*Zw8mM|Hy(5}y>LT= zhTv*dUwQTvL^Cu)tpU2G`P+HgRh8XGw)>ap0BPD4j$M9YW9ZXjN9%DZIb(d^L2S&# zhpes?HBMA@@rjw{P$sIDcFQv$+h$N}0ozOb2_IF@wiwsv|3kFoPDeu0ECkrBt%Z!` zNIPzDR!DD@R~=I(Y+KKjD0}{`E$8U(D3B+>ivEbRImwh=SCo0;vnj=sA}vy zHFUM9kW~Ye8^|h7Y<5F=w-+bkxW9H-;4YQum5(*0l(eIlc0+YcL&jd8|4>)VeH2a& zk$cQXzda3bg+cK|axy}zBk*7)5p2kBP%x~-h8^FGSkM4oUD~~MV^R0h3omcX+8{S z36kogE=}_hvUCocYwfSU=Y9SRqxPvrg0y=O_<4;%!VMb{J;eYXgXpXet)vqNK6p)7 zf0j^)vD+Ig#^Xp?#u3BT5-wVD4?E}G=i@SW-ku#wz@YK{0}6Fl^CCxYM3Nu)_K+P3 z5VPoxLnvydWsrI04y-mYu1=yyj*beP$3{mZ9(*U-R{t`Tog*T=<7WrEM=Y=~9%KvQ z1BhYI#?W~B!J>bFbYYYea=y~p>MVMR8tPlsYD6Q$gbKGQZ^?cFmmCpNcP=hZ(&Dzt z&ZI9Yg*|$$3c!M=*sD41L-uRYAP6is-Jjut&FdOdF_CK<&FlWsMA3l$>SA#7nc|cz#nKw5UgEt z&ZdNfCNqq^f#5B#hZ`}0silYA-$(A+JAavEC6U0#X4t&raKmcuVqef_3rCXm!qcnt z(akCMW54du0GZEqsqR&MxT32B5R1arf9adwUc5i@A{`%xqqteJ*?P7Y_YIB^TUliM zIY7_h*%{R2J~3FK^}nDrS+u8{D%a zEml?dV4!#zkG1^E>fDe~8$V3F&;7@bE=XV0eP(2!OKtDaYH<`lN%o<(gd zkT~1sFA;`KJxrzTuyeX;L5ybp<0oJey`P0o5zg&kN@Q$t7uC-AD9;=+Xs#0P&6}%f z9rc?zPtyv3{`;N#0Z7c~PW?e=?5phHWsjwY!cche;&Ua(_#BFXVL}xbnCQikn88Ee zv;_~T8>}5-Wz4%y9JdE!v-Hk^3f1cC_Lr!70!1yH0T{UWGu?QIlG_|q5290Z&&M|*W6bU4aO?jQC#L$rEGz?xO7 z6GqgpOOw(LVo^bT)UCuLcMsSNXHCSG3(eOoToMuEV(T6@^H~Pp9H^X}L|NvqOHc0W z!&JwbT-P1|@T)5|cIMkD;%gs&!R8>Xm)1SsWZ8D}=oUmk{c!nE*&WuaSFh5APSw}e z*4kGcS0^-7Eb8Wt=c740eJ|(3gHB^u?spbR{&|!5bdbf6yTrZ@yhPf?i3_vX+#_50 zx>|?ehVpL=t zbhy_AaC#`ks1m?0^cyTVFJ4St`9B`MGIokwOQgG6OP;^#;X06#u|fc=V1aS6$4`%r zGQ30pu?6e8c0L@YxPMcGE+9Drz*F3da?`F>-&;_VGAAa>hTd>@@{7l1OY>DSjgjD4 z$B3rS^1B%ds!~*DmQ@tt9ixggAj&e*j?&U4DqpF;vlB>sTduG(vnVgklEZ+@YO55V z1LhAo-*+g+QEF}FO0dEgNmKdg&OyInSBYO5U5+XXvgm%#XUrSWGNa4!g-(5xR%g$1 zZ!;e29>Fa8=9^AL3NXRqD1R1Wi&UXOc%s~!T-Nvo078zZ`975MhxNZy{3CU7`hP&U zc_|breAX?WaE>SAr@}RxTidMfQF1t&h= zNX$HvKKZ>!vJ^=!xXimyk*AKM^c)xXMmuD}mc|sQdrsE5RtK1KCrz5wUKdo7Wzvur zh%4u$rV*Y$T(tT3{myV-0b9N9f_U+$U=;QgVL@otxl=#A0=$du5TK;SiZeKT*O#UaxiuS_7u zkkjHKl;_ZmZ*CSf_MiBA;!C9fuBS4Ml-1$f2Lkuu%vgYG9-T?h3#4O{Tl0F}?`zxW zdh_6lX^~xu%?g;^0n@v304*976~zt6o>SOwF1=dHc&g1ie4wJ9y?=&LV&0d_&@A^P z%?!K<&4DUhEd<5Be%;AQ%GpEj!iOxUef89{0&MBZv;|HEUHfJpN)6B~Ibs~1V}Q*g z=;>WXSMI6OsY$^rBmGert&5&A*?2&b^a80zk;I0qbhOCL9DqnYw!frl>g$I?;v>*& zp~(r*lnXovp6uCQyPx+>midAnY>H6wCvvG)fXEDma-osY;^RFcSj)p9a5}ILK)T1n zrvFFC%Vjm$k6X4W8+DIN)=5_CI{YdH?M!FV+Mv()%Zje@OXv_}iR46RCi70xvk z-bZ9~q9 z@+B?*91VFuP*-a8fqji|t3TVP?5fuVan;wE{oI{tKyz541l`_*MJ7^@J>G97iU&PzAH1wfe>;W{@1TmbNwg<)1>I+&$`uy2e!HH%}fy~kTWD-SxiUw z0@09a2g#%`PEgAPzVhg(3mdro?K}Ea z6xv^>x=o>8VVq3a2C6phHAWe8(7eDsgc{EP9lrAC+kENI5cn1ZTiWgU%9-5tkSTcw z0-GCRDMg52)tigd^aN^ohwXW=fSsMUf`SOcV){46hMxeBrET>`0xMCNZl3@t$il>l z95l$#YT`2&CHFo3W*+hvIcGK1Mvh$Cz6pghi#*T3;N0i04TRC+FsUW@l~&On^~JxF zovSrS9}Kuva?PT?sC=~SIUxi&me7e;3Ke6YX^*XK;`t?o5rAu^VW%t-ia^0MT?WaHK&uC%i$ll`Bw1m6q3!~Tf^rkW7%Ra0BLlWK>= zQoIoF#5rx60q~qD2Z^zZV%aiP$B^+1QQoW|Mn#Oir-ZeXPLhGb;x|uUMQT3hxL3C> zNMcG_JEYmH-WBo2nqpSQujlA^b=poXTEN>2&gz6u-~#}ioeUdK4EyJr6J6ogdYwUw zFI86GrArM{-(Qhuy|B}^h7%{EDriB$1hZltToxjpsO}`2sccPeseX9u zw^GdaPcpoG&vT&xH>h3v<*`4t?y)*z2T43(kDlv%|9x^fl=ui-^9h^#m}xRUiA0$C zflr9ltGGrC+5$qC@>8RQKH!~jbvEpFAjo@-ThpN1VAx;N)tT{)q0d5F_fp#ecc_&H z8Jh~k062P2)_*wycXYw$&p1d(q0mbOxtO5zIzZ?L0;WGldL<)*Cx$a8eW%}hT2la( zGtyxruQsSHxH^B|>wVaQ0{dG|EhmY{*m-iBFc1Mh9+uq0PO5$OvztuOt2=Uk0`BVm ztH8;CJPW8Zs=|YHYipAm#{Zqw-V>6~V&H~*i}|4vPTHvVs zpkl{$_}6ABKS_%Zl}Gv7Jq<2Rw+FK`oT19!-GJl#hIiU5T&!eSn9sxMj-2ou$BoK; z;8;^W%wiWWT{HfIG6i>AKdF~y?U+|lB%0y;y{srJZ^ynixQ)N)U*2cSm*poK__>o{ zrv{ojK1jYs;IAWy^1C?HRC`$-_hMB+;wLV0FkHO&4NE3@w+pT*>7Hxta^UL;;%sSSUG&u(R9O?Ga*RW*kV3u>uCRFgWBQ_Jo`d{C*1QnRoe6?74+WEW7 z`kV&$y)Hgcxbc)I{us~fWFFjSA^;*rDwLRGx(pZ1coR2p86kJ4=qmMM>rcQr&DM96 zAUFt)f7p7lcw<2e-C!y^gyee#moJ8ScAl^-?zImSHm-00TH{aIKzR;aspp(!sA!&gLy<0u zPf9G4&dVZc!? zhQ1#{4q=~04xcFUDEhBChbytPs4(iz!7W<3Gn*m{T+|SXn8UOg6;OV=sy4WKHS8Zs zPec(-148TVMAhKAwun~N_lQh*8IivTjaX~5%U*om1w$yDXgSB~=DP~3axw074-z%E z?=|!U2#F3qV@b3ajKkkyjMGZ)#kru%rzD27e#hT8ojz|?X5h$4U>u?0^BfoHQwo)0 z+k9TeuP0(>!eolhON^sIVAq~}9ZRx-tRifamaSk0aTeY^XPu_SMcVVE44k0#1gR&j zI;Jr@OOAgLixQ6*|8;PH*0YD*<=f*WUx}`=)GC^BlJ3(HiTL-Av#9klY#S==Nvtpu z;}irD8$EG%f<%wma$S~i`SC^CbQ?#PM;_4@2dc1aXDrT!C3s!^X=np1w_O>}?YJU4 zbxLPmHGzvNy&Gx3D@8aKHoSrIR~E3oTZE*gZ?|HJ@sL#(((EyI=^Jhj{sJLfEvqZ! zu?kpn*~qyKzDT`S<(>NXEaVh!`x85(Y7nweafYybG8cb#{E1{~<$8Z`4;%i|3n~-D zq+r?6q~k%d5qK_0YrfjA%IykMBR?L?`RcL%efnstAbtg;ID$L+EhdVF49Erlj+UV=Z(v6aUM7x{wpfORbbIxT3eS0* zq3ph3s1mgKeDYW+Sz@Tmx(jIIQaix^@{y2t-~D(rY8>x0$Z)e{n4Yt+itoBy(y zR(%+KYuk(ZsTepEOb(p%D+4JTUV!$1`6ho3p#z3DcGjEN@$db_VLeq}JY{%K=W-LV zNjG@vuSoUSDmzkrO^d8hdY+Nr<+@cZ-Ycn$^eR5~okxujv659^XX?wkF7*Ue*-0Vo zcZxX~`r+e!!LzQP#8D=Hs(K&HIM>Di`c?BS2sYqGuxSwN|D`cy#?u>d7Ht)GgolXh zpalx15JxfA5;u3CRVf2vlko(wt2Imo=^|a)At%L!3`MLkjGgcYU-adD6I2aTIOSo= zkR)dm+PBLItH2Wfw^G*n3SMbl*u}^u&~(I01l=_k>AI2`gf9FatV9kn#K@akuLSt* zXCrKKeTllbD86`_o^4Rws?J4&Ny2a$VL}9w`SUr35gZZhYI3^QLjJsCH18{LYUS{` ze`=@>XVrSTY(^b)f|C|_YAzVFKWXtb8uexOlm>nD$xQwqw*oRGN%O6^8yGsf!=9n` zXgf+|QY2Ofs?r9_ljA5JP9nf;h7{QTaA5x93>ipRV6-uFu`J~0fyeFkz*3lM1RMei zY%-3#5d}T-dClb|ns$ve3^np??eyR3jQz5i51J!Uj5__20TF#sl=_I^s0H}TOu-0R zoKK6Sl9~9kN4qxJEb&b+U%m?xWtSq#G*`m1reEDx^Y8oDN8KBU@CwQhQ2Cx|L54l( zeaLAI>OCyyf4XivTaOT^6v1ffM?*b$LqVIKT2ni^n2`1&4v?5vqq#0@+Dd8+0h)VF zahox7LY}}*&@g(EJdB77BU?nR$hz}OQ|XL)_7HcW#dE_i6s%spOk-5m&vZU?X~&C> z<0@RDm`BElF5SxN>1`6togQ;{% ze-RqHY}WA+(K9#sAOj|v615h)mTQ%^OrpW;vox01P#1kCPZbDOec zswO5#{b-}tDASkgvvLnC23XFgZs{1vm>F*eR+oT|w{OmL24*i+)6tNU+;)HNEcjvT zIzas)W`fDK851@tap)uX-h|v;#k@Y#l^7L3Jd%@jqY1kHT698k#JK;VoT*=86fE(< z=<%HE?xfU=J=sphQ|q%Lc~dox3twaq2R}gbxpeUkNO#21W^zoRN1JjIT8}%dhtxEj z>^!MXe~&8b%Z9hH>^z2}Mow4Q(qzt4+!9pkF#C-02tI`3>GcytgsZDAZ1d-aM<5|% zad}|kaq-ut1|)9w7Fy6hwB7T=%z-HQmQXVM3CJdJWNPjx<3dZX0~2OOzLZK)J)w>vyE8dJMn^H;|^}gW6 z4IJ1}@=mbjT~9pin4w@9k7v^G0vFe+OGH}_dU##@w~h=s@OpY&`=q9IvX^I#Bi}`j z+*9ckKfnMDzu{Fc1|amT=6E0W8TsFv?aen44-E}%O}DkV#N7#atp9s4_0QIo^>Ku$ z**=TyE)Hv3=Nvz#M9>M3>#12}#R%>aELhKs=UDxFdCnVQH-~MN97Zti8XBhGVD?FIFofO>B@fwN=&Iwy+rDf9FfN zVEQOB#iRF)oY; z%#|XMLscE!qP5vW6LMGk;-HX`#ZC(K(k(s{Ee?j_j?ak@G}Q;ExY#gciMUUddWlSU zKTu%bi|^R-bdV`> z@X*Od1ccnY8jPefrOIsX-y~6^JazlwYN8=)ozFs`qD6T&t0b2~A$s9 z=dc>Tyv6u6(i&laSZO34w5s|I`fE4Z*aXVz;l$$_R`tK!KE37!yW<#APw@@$3mUZB zvmTT=Wyd31LYim>Awh(g*RCF)_4N*|#I*hnCZY}MxJwTwTef+7nUH~S1tgHXn`s7RO|ElT@-2`+v=Z$veUsE=CkLLRY7wxa#`*w%^%}l-^8C%T(9bHs# zGFTvToEqozS!}Y~O>Gh!inAn?Hsb8VfHbHy;5k#r{7LvEH?Fe&#+s!}0?~$E9;DI_ z^b1RooMb=AAoI|$B5EPZxjsr>ywWp5NYoP0!LVSfLc(}s89OblPwl{j1w_CXo1>k$ z9B`{&Ie{%gtzW;$+l3IcIo`$2QYzNY$!lCxC~QNXM*#7&|M~FpZtX`_N-mHaaUqKj zNF6+Zr8|#s{PS3iHE42sFWkr{(@)bFPxS@?fahwzWyg>tR2&LSg3b~kis z8`r6Jrn(S=;24>{4Qyzl00w6oK0pzL@b)D-563zcOPMcLvUWWyBblx#i#9^pU*Zs2 z8r&337R2DEUrL0&$VPHR=SL_qz-P_JHB+E~I>EOZr9IC)I?(E-@)M1it)uLV#a_Rc z6XeME_ixmd!JdtkwbpUtabM!goi({80kGyd9l`#w zBBhX%EPebCd7uX`G7o22>$BN%*;f790p=rkVC{-$&V3oMn%Z}K5#}m*c!vvxsgK8g zV5iz8Zz}y^^m48#FkegqO=$D(-JpX}tl}F=-xmf2x2WDtdo5G1Jn9M$41L zWc~+k7Dqe@U+%*<9|UgSo97&+cNlYb)X{*-gltC@!(=BMM(~C=S$P|$;G<%4xb}X5 zR6p)+D5wPFB5t{ryYWV*MHAA?7XO1pb3F0wvka3A$q7T^0K%)yZ=o-rCDM-%Z;S+J zaYYTvztsom#U)1(ILewQQk*#bcw|-Pvd?om`yLnAs!m{hG+W=i z$h{+g9qp7?txTmpMzgm`y!e|+KkY8^jb~+)_WgX|tYoS@X1qtHK`qBoP%lC#Q7?kw zyUg@i-8Bj^UL>aM>Vl-r_o3|ivymdcCCFGdUVz6P^a~vBwoLZqq@={f?~Y{NEqpU{ zN1o_icGwWmqVp}9od|<4g z&$`WzAn-dXGCnp#=d38|wIB_tgmfhW7@Twh4;T02Ksfj1@?QgPe{rZdaPfCm^tFa~ z$o8};?N>wocx&!4D)MXLzX3USo?w2~?0E{2zEpFblLBoLd5wZKc?y9h>0u6-Ar$R) zR^x||Y*Z}!6KFmBww+3I8Kb5j8ZZ_~FU3;!B_dRMW0e6oF6Y@8gJnOqQC0LDh1cQb z?SH8|r(YN`9<_#xY%*!NPiR^{(%1KwoO+WfJ5Z|7-Xt?im(WROky36+n#~w)Iq< z5AQu2`5nf<5O{HN?{gC9o0IX^+U7!N^ETVLbyL(59DjjbTtj)~@i6REz7PkS(S4MR zv<796KDH;8I!3oJQi*XikzVg0Taq={=bjMO)I_Yx|2ObZwUG5(Va&sTSdG^yq(hc2 zX1rcosH>vuSCCkE8xbrd|6EwEBQC5fJ3ys6pNC)qm+a+M2X5w`3%b|kPNY;Y^77^* zA2Bp01Hw1=KJ%sd_$POZyZE9d3HkVr@6#Jr-m9pfM(O}tZfSr3 zm!@7r_H`xkVw*4C_(Tg7Kz4F=hP3)Sr(>Ug;!5^|=r9d&A%&K(Ip)so?|GGj9~3i# zrp_}Rl~T+vBaWt#`O19XOW93SaZ1Mncme^zzkr1n5p^|QTx=R#i*e5ww4ot*(PJ2t z?g1jQMYn%UpPB?o9IFIL7?e_P%^mJM%ZRsJ8xml&i^Py+F;_zAd=*ye3s(4<`VZ8= z>k`)4DP3XKM)jfjIBcW1x*7)Gy9{nB=6t zXokFo*k=~X_?qv&r|e3JS6vSk9KYSysu`pZ}hN?_N2ol zN9Bjmj$Juw$GY6sZ@2ZbrwV?4;y35XN_Ep&aewPkYL2unVfn=ih8Z zGxB$T5U%z;!oc_U0GhTrZw8p7dqpTKGbHLcrZTB(|f-)_Y4&QuduzPV2*LGuK2>h9l`VFlvyVF$)78bP7iwzt)P~1?x zIH00}mC_(eQQWE1fGU7+k|9Wy(dmax8fRrJZOBBektPPM%!k=DOd zb+j;MO=#~Hhcp_=Ve6|YP`01MwfZACDfq&gE(h0Kg;BpuDI9eyOeIiI{d4+@Jt{XC z&{vuu`6b!Qw*<>A+Qh^G^+lkv>KA(VZOQEdK5mHR>%NNN8{ z+PL;H{H-V+PdC(6NfwCHOjcyLlSZGe#o`JLVMmqWe3`x`UquyQEKt}x*4+6#vkLdQ znIEg^g+CT4-h)TyqFd_9DFR`-v-|C3p@o*qH=Nr+H*?8h%!pq4hN4aG$?zSQOEe6v z4R>jsd9wmX|MvJWkCx?A8PJVo?)OMYqYHwym*jhMZm83~ zmv8s(w$P0)=gXJfnp_y7%$?8@2ugimfYH&-Ma2x7$6gso6RM z*kjWflIYD97Ys&9N(y?fJeK`8tZr0`lsp?$-EwAhsV-bO0>-)Y%zulq!;(M$nLI{C zmdQLe*Nme$oP7}!6N4d0ffdqa5h6{C8UzdPg6r4@NrrI9UjP9rlbO_{t83tTc5U)6 z)uIYy-BKR-AHD~faov6Recw|BgJFwb(E#HZ)7-n-+c7r7n)qRG5lKj}5+9|ljQ;Fs zcpuojoPMAbKEX;OCT4Q#KJ{nt-UG@U0iPQ!0TwL*Mt)@_7Ie@sdpIG6_8!<`?g9^| zea@QOTnZguoK8!ZYXJQ{rxL&ZnYVUDxCeIn*4{0S8~7;snRz&{I&Qu$*MHk5)Qp-7#7{N6#J_D@9qA% zPMb71$_8!-uVKF`c2xi;n}h7wr&MZdh`u%%JMT&nK z_`7_&s1<#ltAaf0pqm7%kktz6u+mMrd&qHZ2TV< zLefmH_*$==u>ahzA3|0Nht&i-&8xKfWjw-M0isc}XGD@#O9bL(j|8<r>n$)cb{nr2JlF6SA$ zPxdT*!>j&X$Ad}g^xCnBh(wQ$C`=fK(Sg3twDHJtRQDIIvHyvk z<2utMlHDi?=Gz=X-j_=l*YGFS zuTt0Byub+Axx!7$&W=7``?JH|jpiTAw9OGB2jQD2!~*afx2R*b`~JDPPvT)wVtF?w zPO9MM`%EG;WLCn5Rse8IaN?EnLy%<1fCAzukj{THu^9uMus*c5lF_Lz4QaU3*Q?|f zQtI&U-~|@&cGO;1e^?a%??`*U^J~k0g7Ao;78JPJLzSR%BK5WuF0$p{3S+!Y&dhCz6HEI*k*dl^jt=0+NSxxM{BZ9{31xl+^dI<@K7O9L57SX}&6pQ(a(oNd)UTN~` zSB=FZ8HP(-V4oyhJxEM}CpcIPGuzZ~teu)&wzbc8nQiDH%+5VnRu3L;DA6i^%Xg$Y zg%tA8O<#H$tJ=jW!iTq(b{0HivI4y&Bz$iPOz-A*N&M%yA<79TJE{odNc_6G|1P!d ziF(tMU#2euO%~ISqTk49=@(bAx(l9-X?22oH5`H?01FY&7oJjidN4VtF;Y=oQ%D1w z$2RSeU*s>w_I%mYJ3k2qrJzMFiQQbElPB_VDf?F6SmQX{1CwI8Jas=-ofHXn-$vXSdl)l+Y z>=%5VjSGdP-_3fBniW5Eb7bNdRB$J~gS>fMxl%*>D zvU(APS~`9j6T&njqzz|XrGV`=q(y@_d1pWTElvf_Ldp`KsGQU?ir{IXVoy-*QL*;s zGd!Zt&ftzV!6f?BRfPQVceb@NN-_(~)^?ID=b9w%iQbF&lX}Vx#7s*yK!wk%{6Rzr zK-QHU3UB@@fdqz~-yl0143-z*V=PD!wpL40Bq*um>@cfl8?m(sPiyt+N1SB(8@ea! zR7J|Gg^gtXp$CRatC>Q< z74+MhGr~x!L1! zrS2PZ1OUj7`S0|xbnas+?P&pU15Mk1#n8`BEN~k1+LvoKNL}w=9&TTdcalH@(WehC)cl#uD(0VS{{cd>q_Winw2{&#sqf+l{Yk zS5-O+K0X7JkMA8<;JN$4#{c$WpM`TF@_6x<)<>HNG3(zQ&^b!A}=f@#{7G6zWH`7S0w5!26-TgKNtiG+qCo{r;2IVYfL$;KOu$2V>em?r{RG zjEltGqMQVveIUSqO&3K@PQ+pFibs@h^GSeGy_Lk}^GardSS@8wD=SpO7lgL9wvu#- znvcF9l(DQYE9+y4oUI3{Qs$#8*#B)!6l42{=iX5A+#Fx~Kp#0dIgJ);PzzExy`>fl zM?l7C2c|J7uL=ZI^OH3Zty)hids090%oWwlCPtIW<7mBs5v0hGD-~$w(J*f>dRo2- zZgVD$oERWq-C6B&s*)JNaur}D76RxC-UaR3B?>9EB)h$17;wqfxKWB%1l}&ifoNx6ix?tR zwNRjtdnvZEc}7Xp2=!*9U86V}&7z(qG#on%{tK9kK{#3XN? zDR7l$M>`{nq^M2UR3P3WAp82O_QKaeQ<+%$IP4WK-B8zm+u0|kiEE)gt-rxu@9ZNg*#TJ{N{ObWadN1)ot0Y#}Q zb{ozng&}Fo1ktp|^#Nhh4LG!l1UxN2;t7iZzl$1#{#M+}i+!C0eQsAe#{=tq0nCHt zQUAcf9QvQChR}YC3_U{hJkBIxIvXp{i>fncRZnJpJ0ik(_{notfywlrpC3dVr3Rj5Q13&G`?d%-ISqW&f-|qX=pSW z*q*XXaVqak67tS-u))liz7&S=a-XkGY+w$dfi_K%7Mh|0)H_9EO^Z^Yx(LBH%KCg# zXoMS>g8vTm*E8H{Hb81mS8^P+%kkVdlXJL$cW0itDFnEp1)5lAWa}|7c#lSS3Cy~o zXALVA*tC1^peNo5QT~cwxvZGd%l;UDkj6Ixpl;cL9 zvj|LhBh3(#7+*T29!jXvUTT%bk^X_#F>w_`;D+s`(4g{*pg9Xe;p^VIyn9lIP5^9XLk3YuXOo- zi7XMQWNtxfO2%@#7zj{su#$u&_|?~e@CG|$z!C3I^F>V36-SH&(&w;ureiD46vGe1 za#gOzz5LjmivHy>_5_IU*aS#1dN$$V?mbV( zU~u+B#qB^B{$32KOCbq|zC%DRXDXKimx?kHOVf^7$)hG-CgWr=Dp{|Dv3d6+%z{W- zOx6zZDCKzl(hc-kysQGwc_7n5P2<<_eIS}#`^rc!W78u&^uyZcm#NPPLM0FO7OfH) zXkc$@Y9in>6Kvi>gGPx!vofJ~%MPzAp05sp&M5;03mzrk@OXj|8*qvzHvtZnPp-^g zMHOR1Z|ZU*#|H3rkDsoL$Q5mh=0W$mTyUA?_moc?v#D`cDYgo+%Tq2d>whG1+om{) zHt9v^JI#B_o=`Z&P0*T=ecWS`9JsvdTqQyPIMz~7!-^LIHG*8#zp$~h0m>*aQ@$0> z7vpc?Hv9G%z8DHjr&(2}ac08|bVfbc*$m#;Af}{hZz{rWL7}nrWNZGcsSM7%0XE}; zQ$b>wHhHF9rI?*_(GMyv1F^_6f=XzmsvCJ8!m)JOr5p;6eD5_kEl2;r0noVT3J%c@ zn;RS+)Z-w8<7Xri_d~XKI(3NONHQZ@yc`6Mo19bn777IIGLk0TC5-w^WWQ>2niSL; zsG-WS>X;J5Y@U#(kPlk~#@B9?WefaqPh(LwVbH>!iT=bhMV9zhM9q^BFy#XS1D$Dn z-%f|ZygS2K+JkW!^}0Y!d6mPOoR;AAE1+4{5R$^8mflm8ptM)WLqWF8xnAq1PL%v3 z6&mxWBREnD#GpbQfP---n}wrDAlr!;kHrh(sS6x7LGAAJer%pShz8P-I%K>;;Er{F z2}YTSweBzea|d0G_8WlvvOx5E>9^|By%&?qVaWWem+?i$%al?}Hox9uNwqrW1u5h^ zX`F=vVkPmPYs^iR@fAV2*Q$-!PbU0XEvX5DGGB9-4XTXUCFyEd7=&fsTFyAh3vJ`hopu+;Gn5Nz$Dy#BSNlQW+|agUFSr@D zkw~$w!~kzW?_y9M3fxDJ9oVTuu#k~IcS11FIQKE2s2+RU(lR%b z3{NnOfd>&OZ>@uJI8s;XI!_WS4BkDTY584e4quZejP8-rb|N z!X>^wL@Hb;zs;CW=LYLjYlP-)vXKmtOnC!>4R;G6mmNP#Y}G6@3=cZMr#t^-iCF}Y zI&>BW!_z8Y?OiU!Ka4d)%xAxvc##XFGVxT%CAM3*=exzy?Z} z$cKO1j4l^zZ_fE7)RW#?#O0=XeXoi$_~{B`_l8=Y3R(HEepLZdS|%$ZEj+ZTvER2# z5NbEUHhq{Bj@qH(m?vpmDw$t?xBt$1;yNViJFtW*8{wdqru&o1?&BkOn80@c zu$r51Q@@6VF*>{YnCYrzQxhG%C?%_nAiYnl?4b|`lh_-HJN%3ad2>Ut>i{=H@=jS|;X6dI8<|AT`lFhtIQouKU+z*x3-!AyzXbn`}0={xR6pTR-JY zN)(*Zm*7nMf0MN3_Crc<)I|w5qAaDaeq((a)FeAX0uLktoC3p}%t?IYAl4^$ksk9@ zXM>p%4PK{1f{Gy`MAk?VzMXgU8~tB}q*>?1-EWC#)J1K*!1WwT%JQKVKg?jH)Bt1OGo4SJ5WnBvJ1 z`gbuiP8Qngps^DNPVaJRp#dN!bCBX*JoZVTo;^;hD&44 z2R2CLbj6TXC-*h29<%5hOYKz8QLc}OFscs>V}EVw_0^(9is$`Nm!iy?>?Ny0sdp%* zO1KHxPsKojOq?Jukf(6$$UqZ|y>hg1hFMrVJ4cs zfjfc)H+g+(-!iq)gpXAlH&(A&aXJ1r{Z_IQ z^M35JPR(3(O1&+|B8p-V@mr%1Y=V!PTVKR)_Xu07owzbG{$(a{Sts0a?1W@)4EB@s zZA6W!9Uz9t$3*;l6RcRrqvahyD+E60m;zQaL8{?@V<}uHrQQwjm96K%%R>ZDcO8wJ zo%I`q(ugQ{KpbZ$c5!a945qZ3Q7SSyxK5^(lb$}!jj-(i`}#i9F4 zx2v`nZSI#4CrxfhR2zQ8nKXN8XuFz6-bZ>FwqKwW2O5Vh_;A{tE?WTA9dKDMuLnKb zf{kt_W4!1}OgsKnrDpSA23V);!*eqKfgAl?@ti(h|3qz4L+s z#vvYJ4pxLAauK}(1`Nee{uYe@e5J1xW=97{k;0+TiU$AkrGA7lu&0yA zP*~eg+bNePB+Wm36GMN+&)J8?5#YhiU8m3aLX$7zox&+a)__SI_wbn@OV$iA^DqKA@S|;`Cqq@;*RPBfa%FW{Dyj(dn@5dbu0?jnNqy zXoXWqwIlf?8}A`0vI%{m4FH%;a-~htoHCmzGv}{H)@LFl^_^bQEtZXF?_ECd_2wm34GN zV`H(1`KnN)&<=k+E&Ty5K)=V9hP6^-?`|OTdX>1NdV4QQ^_y(SC=FlDE?-EATG?}KevcPgz7M&6&3AcmlZ3@0unq-NEYRQ>88vDQkcME1{0Kabi zm?cja^+1d56Qt?%hiHp!tEj~10{>D3z3(+O?7uS}S%p{X^&=2DC12iLoCs7sY^_jG zQohu!*+e^m)T>y~-1TNmC1aE+YHUe6AwuX1{Qr z?fD$KUZm953g?>}OG)f`l89l84JkJ4s*c}Z9);X?=!6$O-G6{)znuQTe?maPd&UE7 z@2_=pd}EMhzMHx+VMBZ#Lst`Y)MP)wM-khuhoGfS_8))ck}3#Sy&6Zgl)WU;#KddC-!-X5 z!unRFO&r`q+3dhb!Ea;YODig9$u9fCq~DcY5{<{3NhY4mL6u*hA*p=vExVn6Ahj5e zt_TJgdin%TTEh^IGehqS6#ol^tId2uMHgXx+v0?4d`0>Es`(Kr+ka*LF>+ zNwH(C@M9H+K?8Eiz2q3k`*wXL41-9Sckq(BKpNfuE6HWl`e5>s(Hz&_WyqWT0#PZv zf80SXf}f=w!gC;TG)s}@+af{FZa4ITX9ICsjds~(Jy(ZDfygqX7j#{(?EZ5Q>8Ao0LM;iXdI$wxPfeocs<)n2r0H;i;mCgCgmpofx}v+K?c zO%(dm@TGt1-wv%cy8s6Cu})z5(v@<{63mTR>?9@#SKIr7yu6_`xTe@CJX<9Mt)mm` z)@TqXv!=i1pP6*rgu52;9;?8X^7*Z3ir5Ge6B#R+8s{hkt@GWL$8>1l!RwULN!T82 zra}shu|iTO970N@`lo@ts$Zr&U51JT1^>>d=xAvXpfCn>bAjpH0qI4H_10&%qv@w^ zQ~zZ-rG>m-k0gf(l${dDptT!a|uQ=hwZUa(n>56T1HtI5h#7fG zZ&e0et^i=yfzTlOhB203Uo!Rm1Hv-800npU`&S_*D))N*oTf40O2*~G>SW}WhKJ&cz)(YZ2&P=m3=q-?+hU#sPj!^sRCMD0Q^y0 z+!rgapuk==V@mMt1P=P}5X1maK7rU*`xE`5iG+_%?yk9L%Jg-X{gw_PdAOpeXO#|a zYSt1{22AxRvr@r8@s_pWuFk5{v_%?zEzAz@R6Re3Bnon}WiU)cwu!Dx$u6)qV8j$B z>T5?(%jy3bt^`DwtNkk|Obt%#k~U9i$0#Lz3(JdA4zX(={8Uy7PKg9papn-LPi8z6 zXTitXFN{5I_!832HuC;TZIqQ{G2&XPF;71h(6BffsW2Qn;Cul@_=2&{f z!atIpmr;i&@x!QPDV`xgc)&rPFUzs$%&sGkL zxRHcGKp&!C1cE!COe-$vPm7IxdDl#bXX6mOhnuUiY@9|~s?Zrlnh_ya16Stx$OFw5 zk{2UiXq+pV7OO&w6YFv_|Ft#({GfZ*sTSB%LlSx}?9{AQ#x~O-PiT4u;(Ro#B9RjD zAz#xe*Q;q74|B}Q*VF$2>@JwAmn#OXa$fR%!7lGl7E158I%*+^z(kYUE6Sy6aEPx| zP|9V=_*6UA#T2(|sviG&S?!|! zo_CPPkWyNh?Y;T%?l&`@-oJQENE<)|Y6N4ec!UD~5iiEbI?rL{1AuRaq(fC5<*J1 zBE|iEP8Ga8KP^;>C~8j^{vn*H*#$vz6$klF?HicYG8SiE3f{_;G zOX`#!NXm`HOM&IT?u|^AR`HCpI6>Xp61uFGzXh=BqQ7IOT11XVWAeEckYql2B7h8$ zwXam;|6((C=T4AK%*?V23gCNt2Y*Q=F6B|Gjf7~Q!qfaU5%)Rqn-i-_i3_88Zmrr( zJoYTPmxD)u_ec8u%>-wSQx-p;pHZ0o6%5VCo$1(^c?r(gR(uF19i4Yj{INtQY2Rc% zi@`*WB)~Sv06_!{rH48FO;KbwRBu3 z7Ec^#68gjH%j-qP^1ElONK%nV;O_?R*s}-qQe_Q|0FY4zX7{%b@pzHM(r9w3f%6R4 zp)YXQaZ!pe^H^jXC;`Lqouvc5>9PI$@EwRD1}O@h78s#&3=Z_7FjCV+29JW#^z{%1 z++!TIc{)OstDhj9f$FV-~ z$I^w(^!#ZG2$rj|Qk|sVO6v=j7Xqqp0@hUq6LVAJQ`|PTyV;MYdn?XGJ57xRErRrv zE%O-$JQl8`y}KNyJC@=5*_}3I=TzZBN`n13!^(8i6f?rLy}r`MO$iqS5{a0xKLl5_ zTF{*TKC&J+8dE?Ap0ZC(SV|-JrswXxpZiWNJ)`FmXC?9wfh*Ge>aYv2gcI2@#h@+* z=)#0ogPyl0z$8i1_jfaz^iZo&bLAk!K%&59hBWb`UfDvtFekPrg+=h2>nCnkd!Y|} z3$qjo(LbVd&Z?SWlo3;%{j+&1VI00~D)*S0F-o+E;>ub6)h zG_k)IKbiP+F}y+$L_g7#i4>wBv4PorpGxE6&{A~BA+aMJDvJx2H_q0&OfV)N<)kL* zzK5e!*C57k1NAupa4CmW(UjZ@94Zo}{00(7!%yzEz=V(#1p*6}2LTy>TDN}=rV5aEm?6G7tFoEDWY&;ie>+9>e z2FAvA3UvbX+T7N7I&KxhCSN|T@nXf~{cZ}B7mJZ@xV3Yfow?aAeGP?&=Yk^F|E0H_ zbzaEq&N896KK@hpMfy=zHR6dBs%BcCuCqK_k5L}-HN`d~?}3j6M@%ujL;a~GME)$9 zW?3%I(!=DBD|_$!MdU6eZs@BRnt>Ac*4MA_dk4(aH!T#lcp@#rX$@O-^Eq#?e0J;B z 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«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 iF8}$0B(uQc<>;zhQ||*iIFw6(z{lB} + */ +let sd_id_to_elements = {}; +const storageKeyPrefix = "sphinx-design-tab-id-"; + +/** + * Create a key for a tab element. + * @param {HTMLElement} el - The tab element. + * @returns {[string, string, string] | null} - The key. + * + */ +function create_key(el) { + let syncId = el.getAttribute("data-sync-id"); + let syncGroup = el.getAttribute("data-sync-group"); + if (!syncId || !syncGroup) return null; + return [syncGroup, syncId, syncGroup + "--" + syncId]; +} + +/** + * Initialize the tab selection. + * + */ +function ready() { + // Find all tabs with sync data + + /** @type {string[]} */ + let groups = []; + + document.querySelectorAll(".sd-tab-label").forEach((label) => { + if (label instanceof HTMLElement) { + let data = create_key(label); + if (data) { + let [group, id, key] = data; + + // add click event listener + // @ts-ignore + label.onclick = onSDLabelClick; + + // store map of key to elements + if (!sd_id_to_elements[key]) { + sd_id_to_elements[key] = []; + } + sd_id_to_elements[key].push(label); + + if (groups.indexOf(group) === -1) { + groups.push(group); + // Check if a specific tab has been selected via URL parameter + const tabParam = new URLSearchParams(window.location.search).get( + group + ); + if (tabParam) { + console.log( + "sphinx-design: Selecting tab id for group '" + + group + + "' from URL parameter: " + + tabParam + ); + window.sessionStorage.setItem(storageKeyPrefix + group, tabParam); + } + } + + // Check is a specific tab has been selected previously + let previousId = window.sessionStorage.getItem( + storageKeyPrefix + group + ); + if (previousId === id) { + // console.log( + // "sphinx-design: Selecting tab from session storage: " + id + // ); + // @ts-ignore + label.previousElementSibling.checked = true; + } + } + } + }); +} + +/** + * Activate other tabs with the same sync id. + * + * @this {HTMLElement} - The element that was clicked. + */ +function onSDLabelClick() { + let data = create_key(this); + if (!data) return; + let [group, id, key] = data; + for (const label of sd_id_to_elements[key]) { + if (label === this) continue; + // @ts-ignore + label.previousElementSibling.checked = true; + } + window.sessionStorage.setItem(storageKeyPrefix + group, id); +} + +document.addEventListener("DOMContentLoaded", ready, false); diff --git a/docs/fern/_sphinx_design_static/sphinx-design.min.css b/docs/fern/_sphinx_design_static/sphinx-design.min.css new file mode 100644 index 000000000..860c36da0 --- /dev/null +++ b/docs/fern/_sphinx_design_static/sphinx-design.min.css @@ -0,0 +1 @@ +.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-hide-link-text{font-size:0}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative;font-size:var(--sd-fontsize-dropdown)}details.sd-dropdown:hover{cursor:pointer}details.sd-dropdown .sd-summary-content{cursor:default}details.sd-dropdown summary.sd-summary-title{padding:.5em .6em .5em 1em;font-size:var(--sd-fontsize-dropdown-title);font-weight:var(--sd-fontweight-dropdown-title);user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;list-style:none;display:inline-flex;justify-content:space-between}details.sd-dropdown summary.sd-summary-title::-webkit-details-marker{display:none}details.sd-dropdown summary.sd-summary-title:focus{outline:none}details.sd-dropdown summary.sd-summary-title .sd-summary-icon{margin-right:.6em;display:inline-flex;align-items:center}details.sd-dropdown summary.sd-summary-title .sd-summary-icon svg{opacity:.8}details.sd-dropdown summary.sd-summary-title .sd-summary-text{flex-grow:1;line-height:1.5;padding-right:.5rem}details.sd-dropdown summary.sd-summary-title .sd-summary-state-marker{pointer-events:none;display:inline-flex;align-items:center}details.sd-dropdown summary.sd-summary-title .sd-summary-state-marker svg{opacity:.6}details.sd-dropdown summary.sd-summary-title:hover .sd-summary-state-marker svg{opacity:1;transform:scale(1.1)}details.sd-dropdown[open] summary .sd-octicon.no-title{visibility:hidden}details.sd-dropdown .sd-summary-chevron-right{transition:.25s}details.sd-dropdown[open]>.sd-summary-title .sd-summary-chevron-right{transform:rotate(90deg)}details.sd-dropdown[open]>.sd-summary-title .sd-summary-chevron-down{transform:rotate(180deg)}details.sd-dropdown:not([open]).sd-card{border:none}details.sd-dropdown:not([open])>.sd-card-header{border:1px solid var(--sd-color-card-border);border-radius:.25rem}details.sd-dropdown.sd-fade-in[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out;animation:sd-fade-in .5s ease-in-out}details.sd-dropdown.sd-fade-in-slide-down[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out}.sd-col>.sd-dropdown{width:100%}.sd-summary-content>.sd-tab-set:first-child{margin-top:0}@keyframes sd-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes sd-slide-down{0%{transform:translate(0, -10px)}100%{transform:translate(0, 0)}}.sd-tab-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.sd-tab-set>input{opacity:0;position:absolute}.sd-tab-set>input:checked+label{border-color:var(--sd-color-tabs-underline-active);color:var(--sd-color-tabs-label-active)}.sd-tab-set>input:checked+label+.sd-tab-content{display:block}.sd-tab-set>input:not(:checked)+label:hover{color:var(--sd-color-tabs-label-hover);border-color:var(--sd-color-tabs-underline-hover)}.sd-tab-set>input:focus+label{outline-style:auto}.sd-tab-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.sd-tab-set>label{border-bottom:.125rem solid transparent;margin-bottom:0;color:var(--sd-color-tabs-label-inactive);border-color:var(--sd-color-tabs-underline-inactive);cursor:pointer;font-size:var(--sd-fontsize-tabs-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .sd-tab-set>label:hover{color:var(--sd-color-tabs-label-active)}.sd-col>.sd-tab-set{width:100%}.sd-tab-content{box-shadow:0 -0.0625rem var(--sd-color-tabs-overline),0 .0625rem var(--sd-color-tabs-underline);display:none;order:99;padding-bottom:.75rem;padding-top:.75rem;width:100%}.sd-tab-content>:first-child{margin-top:0 !important}.sd-tab-content>:last-child{margin-bottom:0 !important}.sd-tab-content>.sd-tab-set{margin:0}.sd-sphinx-override,.sd-sphinx-override *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sd-sphinx-override p{margin-top:0}:root{--sd-color-primary: #0071bc;--sd-color-secondary: #6c757d;--sd-color-success: #28a745;--sd-color-info: #17a2b8;--sd-color-warning: #f0b37e;--sd-color-danger: #dc3545;--sd-color-light: #f8f9fa;--sd-color-muted: #6c757d;--sd-color-dark: #212529;--sd-color-black: black;--sd-color-white: white;--sd-color-primary-highlight: #0060a0;--sd-color-secondary-highlight: #5c636a;--sd-color-success-highlight: #228e3b;--sd-color-info-highlight: #148a9c;--sd-color-warning-highlight: #cc986b;--sd-color-danger-highlight: #bb2d3b;--sd-color-light-highlight: #d3d4d5;--sd-color-muted-highlight: #5c636a;--sd-color-dark-highlight: #1c1f23;--sd-color-black-highlight: black;--sd-color-white-highlight: #d9d9d9;--sd-color-primary-bg: rgba(0, 113, 188, 0.2);--sd-color-secondary-bg: rgba(108, 117, 125, 0.2);--sd-color-success-bg: rgba(40, 167, 69, 0.2);--sd-color-info-bg: rgba(23, 162, 184, 0.2);--sd-color-warning-bg: rgba(240, 179, 126, 0.2);--sd-color-danger-bg: rgba(220, 53, 69, 0.2);--sd-color-light-bg: rgba(248, 249, 250, 0.2);--sd-color-muted-bg: rgba(108, 117, 125, 0.2);--sd-color-dark-bg: rgba(33, 37, 41, 0.2);--sd-color-black-bg: rgba(0, 0, 0, 0.2);--sd-color-white-bg: rgba(255, 255, 255, 0.2);--sd-color-primary-text: #fff;--sd-color-secondary-text: #fff;--sd-color-success-text: #fff;--sd-color-info-text: #fff;--sd-color-warning-text: #212529;--sd-color-danger-text: #fff;--sd-color-light-text: #212529;--sd-color-muted-text: #fff;--sd-color-dark-text: #fff;--sd-color-black-text: #fff;--sd-color-white-text: #212529;--sd-color-shadow: rgba(0, 0, 0, 0.15);--sd-color-card-border: rgba(0, 0, 0, 0.125);--sd-color-card-border-hover: hsla(231, 99%, 66%, 1);--sd-color-card-background: transparent;--sd-color-card-text: inherit;--sd-color-card-header: transparent;--sd-color-card-footer: transparent;--sd-color-tabs-label-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-hover: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-inactive: hsl(0, 0%, 66%);--sd-color-tabs-underline-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-underline-hover: rgba(178, 206, 245, 0.62);--sd-color-tabs-underline-inactive: transparent;--sd-color-tabs-overline: rgb(222, 222, 222);--sd-color-tabs-underline: rgb(222, 222, 222);--sd-fontsize-tabs-label: 1rem;--sd-fontsize-dropdown: inherit;--sd-fontsize-dropdown-title: 1rem;--sd-fontweight-dropdown-title: 700} diff --git a/docs/fern/_static/check-solid.svg b/docs/fern/_static/check-solid.svg new file mode 100644 index 000000000..92fad4b5c --- /dev/null +++ b/docs/fern/_static/check-solid.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/fern/_static/clipboard.min.js b/docs/fern/_static/clipboard.min.js new file mode 100644 index 000000000..54b3c4638 --- /dev/null +++ b/docs/fern/_static/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.8 + * https://clipboardjs.com/ + * + * Licensed MIT ┬й Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return o}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),c=n.n(e);function a(t){try{return document.execCommand(t)}catch(t){return}}var f=function(t){t=c()(t);return a("cut"),t};var l=function(t){var e,n,o,r=1 + + + + diff --git a/docs/fern/_static/copybutton.css b/docs/fern/_static/copybutton.css new file mode 100644 index 000000000..f1916ec7d --- /dev/null +++ b/docs/fern/_static/copybutton.css @@ -0,0 +1,94 @@ +/* Copy buttons */ +button.copybtn { + position: absolute; + display: flex; + top: .3em; + right: .3em; + width: 1.7em; + height: 1.7em; + opacity: 0; + transition: opacity 0.3s, border .3s, background-color .3s; + user-select: none; + padding: 0; + border: none; + outline: none; + border-radius: 0.4em; + /* The colors that GitHub uses */ + border: #1b1f2426 1px solid; + background-color: #f6f8fa; + color: #57606a; +} + +button.copybtn.success { + border-color: #22863a; + color: #22863a; +} + +button.copybtn svg { + stroke: currentColor; + width: 1.5em; + height: 1.5em; + padding: 0.1em; +} + +div.highlight { + position: relative; +} + +/* Show the copybutton */ +.highlight:hover button.copybtn, button.copybtn.success { + opacity: 1; +} + +.highlight button.copybtn:hover { + background-color: rgb(235, 235, 235); +} + +.highlight button.copybtn:active { + background-color: rgb(187, 187, 187); +} + +/** + * A minimal CSS-only tooltip copied from: + * https://codepen.io/mildrenben/pen/rVBrpK + * + * To use, write HTML like the following: + * + *

    Short

    + */ + .o-tooltip--left { + position: relative; + } + + .o-tooltip--left:after { + opacity: 0; + visibility: hidden; + position: absolute; + content: attr(data-tooltip); + padding: .2em; + font-size: .8em; + left: -.2em; + background: grey; + color: white; + white-space: nowrap; + z-index: 2; + border-radius: 2px; + transform: translateX(-102%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); +} + +.o-tooltip--left:hover:after { + display: block; + opacity: 1; + visibility: visible; + transform: translateX(-100%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); + transition-delay: .5s; +} + +/* By default the copy button shouldn't show up when printing a page */ +@media print { + button.copybtn { + display: none; + } +} diff --git a/docs/fern/_static/copybutton.js_t b/docs/fern/_static/copybutton.js_t new file mode 100644 index 000000000..ec91f2096 --- /dev/null +++ b/docs/fern/_static/copybutton.js_t @@ -0,0 +1,175 @@ +// Localization support +const messages = { + 'en': { + 'copy': 'Copy', + 'copy_to_clipboard': 'Copy to clipboard', + 'copy_success': 'Copied!', + 'copy_failure': 'Failed to copy', + }, + 'es' : { + 'copy': 'Copiar', + 'copy_to_clipboard': 'Copiar al portapapeles', + 'copy_success': '┬бCopiado!', + 'copy_failure': 'Error al copiar', + }, + 'de' : { + 'copy': 'Kopieren', + 'copy_to_clipboard': 'In die Zwischenablage kopieren', + 'copy_success': 'Kopiert!', + 'copy_failure': 'Fehler beim Kopieren', + }, + 'fr' : { + 'copy': 'Copier', + 'copy_to_clipboard': 'Copier dans le presse-papier', + 'copy_success': 'Copi├й !', + 'copy_failure': '├Йchec de la copie', + }, + 'ru': { + 'copy': '╨б╨║╨╛╨┐╨╕╤А╨╛╨▓╨░╤В╤М', + 'copy_to_clipboard': '╨б╨║╨╛╨┐╨╕╤А╨╛╨▓╨░╤В╤М ╨▓ ╨▒╤Г╤Д╨╡╤А', + 'copy_success': '╨б╨║╨╛╨┐╨╕╤А╨╛╨▓╨░╨╜╨╛!', + 'copy_failure': '╨Э╨╡ ╤Г╨┤╨░╨╗╨╛╤Б╤М ╤Б╨║╨╛╨┐╨╕╤А╨╛╨▓╨░╤В╤М', + }, + 'zh-CN': { + 'copy': 'хдНхИ╢', + 'copy_to_clipboard': 'хдНхИ╢хИ░хЙкш┤┤цЭ┐', + 'copy_success': 'хдНхИ╢цИРхКЯ!', + 'copy_failure': 'хдНхИ╢хд▒ш┤е', + }, + 'it' : { + 'copy': 'Copiare', + 'copy_to_clipboard': 'Copiato negli appunti', + 'copy_success': 'Copiato!', + 'copy_failure': 'Errore durante la copia', + } +} + +let locale = 'en' +if( document.documentElement.lang !== undefined + && messages[document.documentElement.lang] !== undefined ) { + locale = document.documentElement.lang +} + +let doc_url_root = DOCUMENTATION_OPTIONS.URL_ROOT; +if (doc_url_root == '#') { + doc_url_root = ''; +} + +/** + * SVG files for our copy buttons + */ +let iconCheck = ` + ${messages[locale]['copy_success']} + + +` + +// If the user specified their own SVG use that, otherwise use the default +let iconCopy = `{{ copybutton_image_svg }}`; +if (!iconCopy) { + iconCopy = ` + ${messages[locale]['copy_to_clipboard']} + + + +` +} + +/** + * Set up copy/paste for code blocks + */ + +const runWhenDOMLoaded = cb => { + if (document.readyState != 'loading') { + cb() + } else if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', cb) + } else { + document.attachEvent('onreadystatechange', function() { + if (document.readyState == 'complete') cb() + }) + } +} + +const codeCellId = index => `codecell${index}` + +// Clears selected text since ClipboardJS will select the text when copying +const clearSelection = () => { + if (window.getSelection) { + window.getSelection().removeAllRanges() + } else if (document.selection) { + document.selection.empty() + } +} + +// Changes tooltip text for a moment, then changes it back +// We want the timeout of our `success` class to be a bit shorter than the +// tooltip and icon change, so that we can hide the icon before changing back. +var timeoutIcon = 2000; +var timeoutSuccessClass = 1500; + +const temporarilyChangeTooltip = (el, oldText, newText) => { + el.setAttribute('data-tooltip', newText) + el.classList.add('success') + // Remove success a little bit sooner than we change the tooltip + // So that we can use CSS to hide the copybutton first + setTimeout(() => el.classList.remove('success'), timeoutSuccessClass) + setTimeout(() => el.setAttribute('data-tooltip', oldText), timeoutIcon) +} + +// Changes the copy button icon for two seconds, then changes it back +const temporarilyChangeIcon = (el) => { + el.innerHTML = iconCheck; + setTimeout(() => {el.innerHTML = iconCopy}, timeoutIcon) +} + +const addCopyButtonToCodeCells = () => { + // If ClipboardJS hasn't loaded, wait a bit and try again. This + // happens because we load ClipboardJS asynchronously. + if (window.ClipboardJS === undefined) { + setTimeout(addCopyButtonToCodeCells, 250) + return + } + + // Add copybuttons to all of our code cells + const COPYBUTTON_SELECTOR = '{{ copybutton_selector }}'; + const codeCells = document.querySelectorAll(COPYBUTTON_SELECTOR) + codeCells.forEach((codeCell, index) => { + const id = codeCellId(index) + codeCell.setAttribute('id', id) + + const clipboardButton = id => + `` + codeCell.insertAdjacentHTML('afterend', clipboardButton(id)) + }) + +{{ copybutton_format_func }} + +var copyTargetText = (trigger) => { + var target = document.querySelector(trigger.attributes['data-clipboard-target'].value); + + // get filtered text + let exclude = '{{ copybutton_exclude }}'; + + let text = filterText(target, exclude); + return formatCopyText(text, {{ "{!r}".format(copybutton_prompt_text) }}, {{ copybutton_prompt_is_regexp | lower }}, {{ copybutton_only_copy_prompt_lines | lower }}, {{ copybutton_remove_prompts | lower }}, {{ copybutton_copy_empty_lines | lower }}, {{ "{!r}".format(copybutton_line_continuation_character) }}, {{ "{!r}".format(copybutton_here_doc_delimiter) }}) +} + + // Initialize with a callback so we can modify the text before copy + const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText}) + + // Update UI with error/success messages + clipboard.on('success', event => { + clearSelection() + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_success']) + temporarilyChangeIcon(event.trigger) + }) + + clipboard.on('error', event => { + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_failure']) + }) +} + +runWhenDOMLoaded(addCopyButtonToCodeCells) diff --git a/docs/fern/_static/copybutton_funcs.js b/docs/fern/_static/copybutton_funcs.js new file mode 100644 index 000000000..dbe1aaad7 --- /dev/null +++ b/docs/fern/_static/copybutton_funcs.js @@ -0,0 +1,73 @@ +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +export function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} diff --git a/docs/fern/_static/css/termynal.css b/docs/fern/_static/css/termynal.css new file mode 100644 index 000000000..de6ed28ba --- /dev/null +++ b/docs/fern/_static/css/termynal.css @@ -0,0 +1,144 @@ +/** + * termynal.css + * Styling for Termynal terminal animations. + * + * @author Ines Montani + * @license MIT + * + * Adapted for NVIDIA Sphinx theme + */ + +:root { + --termynal-bg: #252a33; + --termynal-text: #eee; + --termynal-text-subtle: #a2a2a2; + --termynal-comment: #76b900; /* NVIDIA green */ +} + +[data-termynal] { + width: 100%; + max-width: 100%; + background: var(--termynal-bg); + color: var(--termynal-text); + font-size: 15px; + font-family: 'Roboto Mono', 'Fira Mono', Consolas, Menlo, Monaco, 'Courier New', Courier, monospace; + border-radius: 4px; + padding: 75px 45px 35px; + position: relative; + box-sizing: border-box; + line-height: 1.4; + margin: 1em 0; +} + +/* macOS-style window chrome */ +[data-termynal]:before { + content: ''; + position: absolute; + top: 15px; + left: 15px; + display: inline-block; + width: 15px; + height: 15px; + border-radius: 50%; + background: #d9515d; + box-shadow: 25px 0 0 #f4c025, 50px 0 0 #3ec930; +} + +/* "bash" label at top */ +[data-termynal]:after { + content: 'bash'; + position: absolute; + color: var(--termynal-text-subtle); + top: 5px; + left: 0; + width: 100%; + text-align: center; +} + +/* Control links (fast/restart) */ +a[data-terminal-control] { + text-align: right; + display: block; + color: #aebbff; + font-size: 0.85em; + margin-top: 0.5em; +} + +a[data-terminal-control]:hover { + color: #d4dbff; + text-decoration: none; +} + +/* Line styling */ +[data-ty] { + display: block; + line-height: 2; +} + +[data-ty]:before { + content: ''; + display: inline-block; + vertical-align: middle; +} + +/* Input prompt ($) */ +[data-ty="input"]:before, +[data-ty-prompt]:before { + margin-right: 0.75em; + color: var(--termynal-text-subtle); +} + +[data-ty="input"]:before { + content: '$'; +} + +/* Custom prompt */ +[data-ty][data-ty-prompt]:before { + content: attr(data-ty-prompt); +} + +/* Cursor animation */ +[data-ty-cursor]:after { + content: attr(data-ty-cursor); + font-family: monospace; + margin-left: 0.5em; + animation: blink 1s infinite; +} + +@keyframes blink { + 50% { + opacity: 0; + } +} + +/* Comment styling */ +.termynal-comment { + color: var(--termynal-comment); + font-style: italic; +} + +/* Container wrapper for .termy divs */ +.termy { + margin: 1.5em 0; +} + +/* Hide the original code block when inside .termy */ +.termy .highlight { + display: none; +} + +/* Responsive adjustments */ +@media (max-width: 768px) { + [data-termynal] { + padding: 55px 20px 25px; + font-size: 13px; + } + + [data-termynal]:before { + width: 12px; + height: 12px; + top: 12px; + left: 12px; + box-shadow: 20px 0 0 #f4c025, 40px 0 0 #3ec930; + } +} diff --git a/docs/fern/_static/customize.css b/docs/fern/_static/customize.css new file mode 100644 index 000000000..0359a65db --- /dev/null +++ b/docs/fern/_static/customize.css @@ -0,0 +1,4 @@ +.admonition.pattern-metadata { border-left-color: #f0ad4e; } +.admonition.paper-reference { border-left-color: #5bc0de; } + +.scrollable pre { max-height: 400px; overflow-y: auto; } diff --git a/docs/fern/_static/design-tabs.js b/docs/fern/_static/design-tabs.js new file mode 100644 index 000000000..b25bd6a4f --- /dev/null +++ b/docs/fern/_static/design-tabs.js @@ -0,0 +1,101 @@ +// @ts-check + +// Extra JS capability for selected tabs to be synced +// The selection is stored in local storage so that it persists across page loads. + +/** + * @type {Record} + */ +let sd_id_to_elements = {}; +const storageKeyPrefix = "sphinx-design-tab-id-"; + +/** + * Create a key for a tab element. + * @param {HTMLElement} el - The tab element. + * @returns {[string, string, string] | null} - The key. + * + */ +function create_key(el) { + let syncId = el.getAttribute("data-sync-id"); + let syncGroup = el.getAttribute("data-sync-group"); + if (!syncId || !syncGroup) return null; + return [syncGroup, syncId, syncGroup + "--" + syncId]; +} + +/** + * Initialize the tab selection. + * + */ +function ready() { + // Find all tabs with sync data + + /** @type {string[]} */ + let groups = []; + + document.querySelectorAll(".sd-tab-label").forEach((label) => { + if (label instanceof HTMLElement) { + let data = create_key(label); + if (data) { + let [group, id, key] = data; + + // add click event listener + // @ts-ignore + label.onclick = onSDLabelClick; + + // store map of key to elements + if (!sd_id_to_elements[key]) { + sd_id_to_elements[key] = []; + } + sd_id_to_elements[key].push(label); + + if (groups.indexOf(group) === -1) { + groups.push(group); + // Check if a specific tab has been selected via URL parameter + const tabParam = new URLSearchParams(window.location.search).get( + group + ); + if (tabParam) { + console.log( + "sphinx-design: Selecting tab id for group '" + + group + + "' from URL parameter: " + + tabParam + ); + window.sessionStorage.setItem(storageKeyPrefix + group, tabParam); + } + } + + // Check is a specific tab has been selected previously + let previousId = window.sessionStorage.getItem( + storageKeyPrefix + group + ); + if (previousId === id) { + // console.log( + // "sphinx-design: Selecting tab from session storage: " + id + // ); + // @ts-ignore + label.previousElementSibling.checked = true; + } + } + } + }); +} + +/** + * Activate other tabs with the same sync id. + * + * @this {HTMLElement} - The element that was clicked. + */ +function onSDLabelClick() { + let data = create_key(this); + if (!data) return; + let [group, id, key] = data; + for (const label of sd_id_to_elements[key]) { + if (label === this) continue; + // @ts-ignore + label.previousElementSibling.checked = true; + } + window.sessionStorage.setItem(storageKeyPrefix + group, id); +} + +document.addEventListener("DOMContentLoaded", ready, false); diff --git a/docs/fern/_static/js/termynal-init.js b/docs/fern/_static/js/termynal-init.js new file mode 100644 index 000000000..d84595329 --- /dev/null +++ b/docs/fern/_static/js/termynal-init.js @@ -0,0 +1,139 @@ +/** + * termynal-init.js + * Sphinx/MyST integration for Termynal terminal animations. + * + * Parses code blocks inside .termy containers and converts them + * to animated terminal widgets. + */ + +'use strict'; + +function setupTermynal() { + const progressLiteralStart = "---> 100%"; + const promptLiteralStart = "$ "; + const customPromptLiteralStart = "# "; + const termynalActivateClass = "termy"; + let termynals = []; + + function createTermynals() { + // Find all .termy containers with code blocks inside + // Sphinx/MyST generates: .termy > .highlight > pre + document + .querySelectorAll(`.${termynalActivateClass}`) + .forEach(container => { + // Find the code content - try different selectors for Sphinx HTML structure + const codeNode = container.querySelector('.highlight pre') || + container.querySelector('pre') || + container.querySelector('code'); + + if (!codeNode) { + console.warn('Termynal: No code block found in .termy container'); + return; + } + + const text = codeNode.textContent; + const lines = text.split("\n"); + const useLines = []; + let buffer = []; + + function saveBuffer() { + if (buffer.length) { + let isBlankSpace = true; + buffer.forEach(line => { + if (line) { + isBlankSpace = false; + } + }); + let dataValue = {}; + if (isBlankSpace) { + dataValue["delay"] = 0; + } + if (buffer[buffer.length - 1] === "") { + // A last single
    won't have effect + // so put an additional one + buffer.push(""); + } + const bufferValue = buffer.join("
    "); + dataValue["value"] = bufferValue; + useLines.push(dataValue); + buffer = []; + } + } + + for (let line of lines) { + if (line === progressLiteralStart) { + saveBuffer(); + useLines.push({ + type: "progress" + }); + } else if (line.startsWith(promptLiteralStart)) { + saveBuffer(); + const value = line.replace(promptLiteralStart, "").trimEnd(); + useLines.push({ + type: "input", + value: value + }); + } else if (line.startsWith("// ")) { + saveBuffer(); + const value = "ЁЯТм " + line.replace("// ", "").trimEnd(); + useLines.push({ + value: value, + class: "termynal-comment", + delay: 0 + }); + } else if (line.startsWith(customPromptLiteralStart)) { + saveBuffer(); + const promptStart = line.indexOf(promptLiteralStart); + if (promptStart === -1) { + console.error("Custom prompt found but no end delimiter", line) + buffer.push(line); + continue; + } + const prompt = line.slice(0, promptStart).replace(customPromptLiteralStart, "") + let value = line.slice(promptStart + promptLiteralStart.length); + useLines.push({ + type: "input", + value: value, + prompt: prompt + }); + } else { + buffer.push(line); + } + } + saveBuffer(); + + // Create new container for termynal + const div = document.createElement("div"); + container.innerHTML = ''; + container.appendChild(div); + + const termynal = new Termynal(div, { + lineData: useLines, + noInit: true, + lineDelay: 500 + }); + termynals.push(termynal); + }); + } + + function loadVisibleTermynals() { + termynals = termynals.filter(termynal => { + if (termynal.container.getBoundingClientRect().top - innerHeight <= 0) { + termynal.init(); + return false; + } + return true; + }); + } + + window.addEventListener("scroll", loadVisibleTermynals); + createTermynals(); + loadVisibleTermynals(); +} + +// Initialize when DOM is ready +if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', setupTermynal); +} else { + setupTermynal(); +} diff --git a/docs/fern/_static/js/termynal.js b/docs/fern/_static/js/termynal.js new file mode 100644 index 000000000..df6de688d --- /dev/null +++ b/docs/fern/_static/js/termynal.js @@ -0,0 +1,265 @@ +/** + * termynal.js + * A lightweight, modern and extensible animated terminal window, using + * async/await. + * + * @author Ines Montani + * @version 0.0.1 + * @license MIT + * + * Adapted for Sphinx/MyST documentation + */ + +'use strict'; + +/** Generate a terminal widget. */ +class Termynal { + /** + * Construct the widget's settings. + * @param {(string|Node)=} container - Query selector or container element. + * @param {Object=} options - Custom settings. + * @param {string} options.prefix - Prefix to use for data attributes. + * @param {number} options.startDelay - Delay before animation, in ms. + * @param {number} options.typeDelay - Delay between each typed character, in ms. + * @param {number} options.lineDelay - Delay between each line, in ms. + * @param {number} options.progressLength - Number of characters displayed as progress bar. + * @param {string} options.progressChar тАУ Character to use for progress bar, defaults to тЦИ. + * @param {number} options.progressPercent - Max percent of progress. + * @param {string} options.cursor тАУ Character to use for cursor, defaults to тЦЛ. + * @param {Object[]} lineData - Dynamically loaded line data objects. + * @param {boolean} options.noInit - Don't initialise the animation. + */ + constructor(container = '#termynal', options = {}) { + this.container = (typeof container === 'string') ? document.querySelector(container) : container; + this.pfx = `data-${options.prefix || 'ty'}`; + this.originalStartDelay = this.startDelay = options.startDelay + || parseFloat(this.container.getAttribute(`${this.pfx}-startDelay`)) || 600; + this.originalTypeDelay = this.typeDelay = options.typeDelay + || parseFloat(this.container.getAttribute(`${this.pfx}-typeDelay`)) || 90; + this.originalLineDelay = this.lineDelay = options.lineDelay + || parseFloat(this.container.getAttribute(`${this.pfx}-lineDelay`)) || 1500; + this.progressLength = options.progressLength + || parseFloat(this.container.getAttribute(`${this.pfx}-progressLength`)) || 40; + this.progressChar = options.progressChar + || this.container.getAttribute(`${this.pfx}-progressChar`) || 'тЦИ'; + this.progressPercent = options.progressPercent + || parseFloat(this.container.getAttribute(`${this.pfx}-progressPercent`)) || 100; + this.cursor = options.cursor + || this.container.getAttribute(`${this.pfx}-cursor`) || 'тЦЛ'; + this.lineData = this.lineDataToElements(options.lineData || []); + this.loadLines() + if (!options.noInit) this.init() + } + + loadLines() { + // Load all the lines and create the container so that the size is fixed + // Otherwise it would be changing and the user viewport would be constantly + // moving as she/he scrolls + const finish = this.generateFinish() + finish.style.visibility = 'hidden' + this.container.appendChild(finish) + // Appends dynamically loaded lines to existing line elements. + this.lines = [...this.container.querySelectorAll(`[${this.pfx}]`)].concat(this.lineData); + for (let line of this.lines) { + line.style.visibility = 'hidden' + this.container.appendChild(line) + } + const restart = this.generateRestart() + restart.style.visibility = 'hidden' + this.container.appendChild(restart) + this.container.setAttribute('data-termynal', ''); + } + + /** + * Initialise the widget, get lines, clear container and start animation. + */ + init() { + /** + * Calculates width and height of Termynal container. + * If container is empty and lines are dynamically loaded, defaults to browser `auto` or CSS. + */ + const containerStyle = getComputedStyle(this.container); + this.container.style.width = containerStyle.width !== '0px' ? + containerStyle.width : undefined; + this.container.style.minHeight = containerStyle.height !== '0px' ? + containerStyle.height : undefined; + + this.container.setAttribute('data-termynal', ''); + this.container.innerHTML = ''; + for (let line of this.lines) { + line.style.visibility = 'visible' + } + this.start(); + } + + /** + * Start the animation and rener the lines depending on their data attributes. + */ + async start() { + this.addFinish() + await this._wait(this.startDelay); + + for (let line of this.lines) { + const type = line.getAttribute(this.pfx); + const delay = line.getAttribute(`${this.pfx}-delay`) || this.lineDelay; + + if (type == 'input') { + line.setAttribute(`${this.pfx}-cursor`, this.cursor); + await this.type(line); + await this._wait(delay); + } + + else if (type == 'progress') { + await this.progress(line); + await this._wait(delay); + } + + else { + this.container.appendChild(line); + await this._wait(delay); + } + + line.removeAttribute(`${this.pfx}-cursor`); + } + this.addRestart() + this.finishElement.style.visibility = 'hidden' + this.lineDelay = this.originalLineDelay + this.typeDelay = this.originalTypeDelay + this.startDelay = this.originalStartDelay + } + + generateRestart() { + const restart = document.createElement('a') + restart.onclick = (e) => { + e.preventDefault() + this.container.innerHTML = '' + this.init() + } + restart.href = '#' + restart.setAttribute('data-terminal-control', '') + restart.innerHTML = "restart тЖ╗" + return restart + } + + generateFinish() { + const finish = document.createElement('a') + finish.onclick = (e) => { + e.preventDefault() + this.lineDelay = 0 + this.typeDelay = 0 + this.startDelay = 0 + } + finish.href = '#' + finish.setAttribute('data-terminal-control', '') + finish.innerHTML = "fast тЖТ" + this.finishElement = finish + return finish + } + + addRestart() { + const restart = this.generateRestart() + this.container.appendChild(restart) + } + + addFinish() { + const finish = this.generateFinish() + this.container.appendChild(finish) + } + + /** + * Animate a typed line. + * @param {Node} line - The line element to render. + */ + async type(line) { + const chars = [...line.textContent]; + line.textContent = ''; + this.container.appendChild(line); + + for (let char of chars) { + const delay = line.getAttribute(`${this.pfx}-typeDelay`) || this.typeDelay; + await this._wait(delay); + line.textContent += char; + } + } + + /** + * Animate a progress bar. + * @param {Node} line - The line element to render. + */ + async progress(line) { + const progressLength = line.getAttribute(`${this.pfx}-progressLength`) + || this.progressLength; + const progressChar = line.getAttribute(`${this.pfx}-progressChar`) + || this.progressChar; + const chars = progressChar.repeat(progressLength); + const progressPercent = line.getAttribute(`${this.pfx}-progressPercent`) + || this.progressPercent; + line.textContent = ''; + this.container.appendChild(line); + + for (let i = 1; i < chars.length + 1; i++) { + await this._wait(this.typeDelay); + const percent = Math.round(i / chars.length * 100); + line.textContent = `${chars.slice(0, i)} ${percent}%`; + if (percent>progressPercent) { + break; + } + } + } + + /** + * Helper function for animation delays, called with `await`. + * @param {number} time - Timeout, in ms. + */ + _wait(time) { + return new Promise(resolve => setTimeout(resolve, time)); + } + + /** + * Converts line data objects into line elements. + * + * @param {Object[]} lineData - Dynamically loaded lines. + * @param {Object} line - Line data object. + * @returns {Element[]} - Array of line elements. + */ + lineDataToElements(lineData) { + return lineData.map(line => { + let div = document.createElement('div'); + div.innerHTML = `${line.value || ''}`; + + return div.firstElementChild; + }); + } + + /** + * Helper function for generating attributes string. + * + * @param {Object} line - Line data object. + * @returns {string} - String of attributes. + */ + _attributes(line) { + let attrs = ''; + for (let prop in line) { + // Custom add class + if (prop === 'class') { + attrs += ` class=${line[prop]} ` + continue + } + if (prop === 'type') { + attrs += `${this.pfx}="${line[prop]}" ` + } else if (prop !== 'value') { + attrs += `${this.pfx}-${prop}="${line[prop]}" ` + } + } + return attrs; + } +} + +/** +* HTML API: If current script has container(s) specified, initialise Termynal. +*/ +if (document.currentScript && document.currentScript.hasAttribute('data-termynal-container')) { + const containers = document.currentScript.getAttribute('data-termynal-container'); + containers.split('|') + .forEach(container => new Termynal(container)) +} diff --git a/docs/fern/_static/sphinx-design.min.css b/docs/fern/_static/sphinx-design.min.css new file mode 100644 index 000000000..860c36da0 --- /dev/null +++ b/docs/fern/_static/sphinx-design.min.css @@ -0,0 +1 @@ +.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-hide-link-text{font-size:0}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative;font-size:var(--sd-fontsize-dropdown)}details.sd-dropdown:hover{cursor:pointer}details.sd-dropdown .sd-summary-content{cursor:default}details.sd-dropdown summary.sd-summary-title{padding:.5em .6em .5em 1em;font-size:var(--sd-fontsize-dropdown-title);font-weight:var(--sd-fontweight-dropdown-title);user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;list-style:none;display:inline-flex;justify-content:space-between}details.sd-dropdown summary.sd-summary-title::-webkit-details-marker{display:none}details.sd-dropdown summary.sd-summary-title:focus{outline:none}details.sd-dropdown summary.sd-summary-title .sd-summary-icon{margin-right:.6em;display:inline-flex;align-items:center}details.sd-dropdown summary.sd-summary-title .sd-summary-icon svg{opacity:.8}details.sd-dropdown summary.sd-summary-title .sd-summary-text{flex-grow:1;line-height:1.5;padding-right:.5rem}details.sd-dropdown summary.sd-summary-title .sd-summary-state-marker{pointer-events:none;display:inline-flex;align-items:center}details.sd-dropdown summary.sd-summary-title .sd-summary-state-marker svg{opacity:.6}details.sd-dropdown summary.sd-summary-title:hover .sd-summary-state-marker svg{opacity:1;transform:scale(1.1)}details.sd-dropdown[open] summary .sd-octicon.no-title{visibility:hidden}details.sd-dropdown .sd-summary-chevron-right{transition:.25s}details.sd-dropdown[open]>.sd-summary-title .sd-summary-chevron-right{transform:rotate(90deg)}details.sd-dropdown[open]>.sd-summary-title .sd-summary-chevron-down{transform:rotate(180deg)}details.sd-dropdown:not([open]).sd-card{border:none}details.sd-dropdown:not([open])>.sd-card-header{border:1px solid var(--sd-color-card-border);border-radius:.25rem}details.sd-dropdown.sd-fade-in[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out;animation:sd-fade-in .5s ease-in-out}details.sd-dropdown.sd-fade-in-slide-down[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out}.sd-col>.sd-dropdown{width:100%}.sd-summary-content>.sd-tab-set:first-child{margin-top:0}@keyframes sd-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes sd-slide-down{0%{transform:translate(0, -10px)}100%{transform:translate(0, 0)}}.sd-tab-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.sd-tab-set>input{opacity:0;position:absolute}.sd-tab-set>input:checked+label{border-color:var(--sd-color-tabs-underline-active);color:var(--sd-color-tabs-label-active)}.sd-tab-set>input:checked+label+.sd-tab-content{display:block}.sd-tab-set>input:not(:checked)+label:hover{color:var(--sd-color-tabs-label-hover);border-color:var(--sd-color-tabs-underline-hover)}.sd-tab-set>input:focus+label{outline-style:auto}.sd-tab-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.sd-tab-set>label{border-bottom:.125rem solid transparent;margin-bottom:0;color:var(--sd-color-tabs-label-inactive);border-color:var(--sd-color-tabs-underline-inactive);cursor:pointer;font-size:var(--sd-fontsize-tabs-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .sd-tab-set>label:hover{color:var(--sd-color-tabs-label-active)}.sd-col>.sd-tab-set{width:100%}.sd-tab-content{box-shadow:0 -0.0625rem var(--sd-color-tabs-overline),0 .0625rem var(--sd-color-tabs-underline);display:none;order:99;padding-bottom:.75rem;padding-top:.75rem;width:100%}.sd-tab-content>:first-child{margin-top:0 !important}.sd-tab-content>:last-child{margin-bottom:0 !important}.sd-tab-content>.sd-tab-set{margin:0}.sd-sphinx-override,.sd-sphinx-override *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sd-sphinx-override p{margin-top:0}:root{--sd-color-primary: #0071bc;--sd-color-secondary: #6c757d;--sd-color-success: #28a745;--sd-color-info: #17a2b8;--sd-color-warning: #f0b37e;--sd-color-danger: #dc3545;--sd-color-light: #f8f9fa;--sd-color-muted: #6c757d;--sd-color-dark: #212529;--sd-color-black: black;--sd-color-white: white;--sd-color-primary-highlight: #0060a0;--sd-color-secondary-highlight: #5c636a;--sd-color-success-highlight: #228e3b;--sd-color-info-highlight: #148a9c;--sd-color-warning-highlight: #cc986b;--sd-color-danger-highlight: #bb2d3b;--sd-color-light-highlight: #d3d4d5;--sd-color-muted-highlight: #5c636a;--sd-color-dark-highlight: #1c1f23;--sd-color-black-highlight: black;--sd-color-white-highlight: #d9d9d9;--sd-color-primary-bg: rgba(0, 113, 188, 0.2);--sd-color-secondary-bg: rgba(108, 117, 125, 0.2);--sd-color-success-bg: rgba(40, 167, 69, 0.2);--sd-color-info-bg: rgba(23, 162, 184, 0.2);--sd-color-warning-bg: rgba(240, 179, 126, 0.2);--sd-color-danger-bg: rgba(220, 53, 69, 0.2);--sd-color-light-bg: rgba(248, 249, 250, 0.2);--sd-color-muted-bg: rgba(108, 117, 125, 0.2);--sd-color-dark-bg: rgba(33, 37, 41, 0.2);--sd-color-black-bg: rgba(0, 0, 0, 0.2);--sd-color-white-bg: rgba(255, 255, 255, 0.2);--sd-color-primary-text: #fff;--sd-color-secondary-text: #fff;--sd-color-success-text: #fff;--sd-color-info-text: #fff;--sd-color-warning-text: #212529;--sd-color-danger-text: #fff;--sd-color-light-text: #212529;--sd-color-muted-text: #fff;--sd-color-dark-text: #fff;--sd-color-black-text: #fff;--sd-color-white-text: #212529;--sd-color-shadow: rgba(0, 0, 0, 0.15);--sd-color-card-border: rgba(0, 0, 0, 0.125);--sd-color-card-border-hover: hsla(231, 99%, 66%, 1);--sd-color-card-background: transparent;--sd-color-card-text: inherit;--sd-color-card-header: transparent;--sd-color-card-footer: transparent;--sd-color-tabs-label-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-hover: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-inactive: hsl(0, 0%, 66%);--sd-color-tabs-underline-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-underline-hover: rgba(178, 206, 245, 0.62);--sd-color-tabs-underline-inactive: transparent;--sd-color-tabs-overline: rgb(222, 222, 222);--sd-color-tabs-underline: rgb(222, 222, 222);--sd-fontsize-tabs-label: 1rem;--sd-fontsize-dropdown: inherit;--sd-fontsize-dropdown-title: 1rem;--sd-fontweight-dropdown-title: 700} diff --git a/docs/fern/docs.yml b/docs/fern/docs.yml new file mode 100644 index 000000000..3eb699e7f --- /dev/null +++ b/docs/fern/docs.yml @@ -0,0 +1,7 @@ +# Generated by sphinx-fern-builder. Customize as needed. +instances: + - url: your-org.docs.buildwithfern.com/your-project +title: "Nemotron" +versions: + - display-name: vnightly + path: ./versions/vnightly.yml diff --git a/docs/fern/fern.config.json b/docs/fern/fern.config.json new file mode 100644 index 000000000..44aa75f72 --- /dev/null +++ b/docs/fern/fern.config.json @@ -0,0 +1,4 @@ +{ + "organization": "NVIDIA Corporation", + "version": "4.34.1" +} diff --git a/docs/nemotron/rerank/README.md b/docs/fern/pages-nightly/nemotron/rerank/README.mdx similarity index 92% rename from docs/nemotron/rerank/README.md rename to docs/fern/pages-nightly/nemotron/rerank/README.mdx index b3a31cd1f..77f2e9aee 100644 --- a/docs/nemotron/rerank/README.md +++ b/docs/fern/pages-nightly/nemotron/rerank/README.mdx @@ -1,23 +1,29 @@ -# Reranking Model Fine-Tuning Recipe +--- +title: "Reranking Model Fine-Tuning Recipe" +slug: "nemotron/rerank/README.html" +description: "A complete 6-stage pipeline for fine-tuning and deploying cross-encoder reranking models on domain-specific data using synthetic data generation." +--- A complete 6-stage pipeline for fine-tuning and deploying cross-encoder reranking models on domain-specific data using synthetic data generation. ## Overview -This recipe fine-tunes NVIDIA's [Llama-Nemotron-Rerank-1B-v2](https://huggingface.co/nvidia/llama-nemotron-rerank-1b-v2) cross-encoder reranking model on your own domain data. By the end of this pipeline, you'll have a domain-adapted reranker that improves retrieval precision by re-scoring candidate documents returned by a first-stage retriever. +This recipe fine-tunes NVIDIAтАЩs [Llama-Nemotron-Rerank-1B-v2](https://huggingface.co/nvidia/llama-nemotron-rerank-1b-v2) cross-encoder reranking model on your own domain data. By the end of this pipeline, youтАЩll have a domain-adapted reranker that improves retrieval precision by re-scoring candidate documents returned by a first-stage retriever. ### Why Fine-Tune Reranking Models? In a typical retrieval pipeline, a fast embedding model retrieves a broad set of candidate documents, then a cross-encoder reranker re-scores each queryтАУdocument pair to improve ranking quality. Fine-tuning the reranker adapts it to: - Understand domain-specific relevance signals and terminology + - Better discriminate between subtly relevant and irrelevant documents + - Improve precision at the top of the ranked list (nDCG@k) on your specific corpus ### Embedding vs. Reranking | Aspect | Embedding Model | Reranking Model | -|--------|----------------|-----------------| +| --- | --- | --- | | **Architecture** | Bi-encoder (encodes query and document separately) | Cross-encoder (encodes query and document together) | | **Speed** | Fast (single encoding per document, offline indexable) | Slower (joint encoding per queryтАУdocument pair) | | **Accuracy** | Good for broad recall | Higher precision at top ranks | @@ -27,7 +33,7 @@ The two models are complementary тАФ use the embedding model to cast a wide net, ## Training Pipeline -``` +```default тФМтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФР тФВ YOUR DOCUMENT CORPUS тФВ тФВ (Text files: .txt, .md, etc.) тФВ @@ -85,13 +91,13 @@ The two models are complementary тАФ use the embedding model to cast a wide net, ``` | Stage | Command | Description | Output | -|-------|---------|-------------|--------| -| Stage 0: SDG | `nemotron rerank sdg` | Validate corpus, generate synthetic Q&A pairs from documents | Q&A pairs with quality scores | -| Stage 1: Data Prep | `nemotron rerank prep` | Convert, mine hard negatives, unroll | Training-ready data | -| Stage 2: Finetune | `nemotron rerank finetune` | Fine-tune cross-encoder reranking model | Model checkpoint | -| Stage 3: Eval | `nemotron rerank eval` | Evaluate reranking improvement over first-stage retrieval | Metrics comparison | -| Stage 4: Export | `nemotron rerank export` | Export to ONNX/TensorRT | Optimized inference models | -| Stage 5: Deploy | `nemotron rerank deploy` | Deploy NIM ranking service | Running inference service | +| --- | --- | --- | --- | +| Stage 0: SDG | nemotron rerank sdg | Validate corpus, generate synthetic Q&A pairs from documents | Q&A pairs with quality scores | +| Stage 1: Data Prep | nemotron rerank prep | Convert, mine hard negatives, unroll | Training-ready data | +| Stage 2: Finetune | nemotron rerank finetune | Fine-tune cross-encoder reranking model | Model checkpoint | +| Stage 3: Eval | nemotron rerank eval | Evaluate reranking improvement over first-stage retrieval | Metrics comparison | +| Stage 4: Export | nemotron rerank export | Export to ONNX/TensorRT | Optimized inference models | +| Stage 5: Deploy | nemotron rerank deploy | Deploy NIM ranking service | Running inference service | ## Installation @@ -116,10 +122,12 @@ uv sync --all-extras ### 3. Get Your NVIDIA API Key -The SDG stage (Stage 0) uses NVIDIA's hosted LLM APIs for synthetic data generation. +The SDG stage (Stage 0) uses NVIDIAтАЩs hosted LLM APIs for synthetic data generation. 1. Sign up at [build.nvidia.com](https://build.nvidia.com) + 2. Create an API key + 3. Set the environment variable: ```bash @@ -131,6 +139,7 @@ export NVIDIA_API_KEY=nvapi-your_key_here For Docker or Slurm execution, create `env.toml` in the **repository root directory**. **Minimal configuration (local execution only):** + ```toml [wandb] project = "my-reranking-project" @@ -145,13 +154,15 @@ See the [Execution Profiles](#execution-profiles) section below. ### Supported Formats - Any text files, default: .txt, .md, .text, and files with no extension + - Documents should be UTF-8 encoded + - Files are processed recursively from the corpus directory ### Corpus Size Recommendations | Corpus Size | Documents | Expected Results | -|-------------|-----------|------------------| +| --- | --- | --- | | **Minimum** | 50-100 docs (~50K tokens) | Basic domain adaptation | | **Recommended** | 500+ docs | Good domain coverage | | **Optimal** | 1000+ docs | Best performance | @@ -175,26 +186,37 @@ All files matching the `file_extensions` config (default: `.txt,.md,.text,` plus ### Hardware Requirements - **GPU**: NVIDIA GPU with at least 80GB VRAM (e.g., A100, H100) - - Stage 0 uses NVIDIA API (no GPU required) - - Stages 1-5: Require GPU for model inference and training + + - Stage 0 uses NVIDIA API (no GPU required) + + - Stages 1-5: Require GPU for model inference and training + - **CPU**: Modern multi-core processor (16+ cores recommended) + - **Memory**: 128GB+ RAM recommended + - **Storage**: ~50GB free disk space for outputs, models, and containers ### Software Requirements - **Python**: 3.12 or later + - **UV**: Package manager (installation instructions above) + - **NVIDIA API Key**: Required for synthetic data generation + - **NGC API Key**: Required for authenticated NIM deployment + - **NVIDIA GPU Drivers**: Latest drivers for your GPU + - **Docker** (optional): For containerized execution or NIM deployment + - **Slurm** (optional): For cluster execution ### Expected Runtime & Resources | Stage | GPU VRAM | CPU | Notes | -|-------|----------|-----|-------| +| --- | --- | --- | --- | | Stage 0 (SDG) | N/A | 8+ cores | Uses API (no local GPU); runtime varies by dataset size | | Stage 1 (Data Prep) | 40GB | 16+ cores | Hard negative mining on GPU; runtime varies by dataset size | | Stage 2 (Finetune) | 80GB | 16+ cores | Runtime varies by dataset size and epochs | @@ -204,11 +226,14 @@ All files matching the `file_extensions` config (default: `.txt,.md,.text,` plus ### LLM API Usage (Stage 0) -Stage 0 uses LLM APIs for synthetic data generation. By default, it uses NVIDIA's hosted LLMs: +Stage 0 uses LLM APIs for synthetic data generation. By default, it uses NVIDIAтАЩs hosted LLMs: - **Default provider**: NVIDIA API (free tier available at [build.nvidia.com](https://build.nvidia.com)) + - **Default model**: `nvidia/nemotron-3-nano-30b-a3b` (fast, reliable for structured generation) + - **Usage**: ~4 API calls per document (artifact extraction, QA generation, dedup, quality eval) + - **Cost**: Free tier has rate limits; contact NVIDIA for production usage ## Quick Start @@ -257,9 +282,9 @@ nemotron rerank finetune -c default --dry-run Stages are designed to run sequentially, but you can start from any stage if you have the required inputs: | Start From | Requirement | Use Case | -|------------|-------------|----------| +| --- | --- | --- | | **Stage 0** | Document corpus | Full pipeline from scratch | -| **Stage 1** | Q&A pairs (JSON) | Skip SDG if you have labeled data or use [NVIDIA's pre-generated dataset](#using-nvidias-pre-generated-dataset) | +| **Stage 1** | Q&A pairs (JSON) | Skip SDG if you have labeled data or use [NVIDIAтАЩs pre-generated dataset](#using-nvidia-s-pre-generated-dataset) | | **Stage 2** | Training data (Automodel format) | Skip data prep if data is ready | | **Stage 3** | Model checkpoint | Evaluate existing checkpoint | | **Stage 4** | Model checkpoint | Export existing model | @@ -267,9 +292,9 @@ Stages are designed to run sequentially, but you can start from any stage if you See individual stage configs for input format requirements. -### Using NVIDIA's Pre-Generated Dataset +### Using NVIDIAтАЩs Pre-Generated Dataset -NVIDIA provides a ready-to-use synthetic retrieval dataset on Hugging Face: [Retrieval-Synthetic-NVDocs-v1](https://huggingface.co/datasets/nvidia/Retrieval-Synthetic-NVDocs-v1). This dataset was generated from NVIDIA's publicly available content using the same SDG pipeline (Stage 0) in this recipe, and contains ~15K documents with 105K+ question-answer pairs across multiple reasoning types. +NVIDIA provides a ready-to-use synthetic retrieval dataset on Hugging Face: [Retrieval-Synthetic-NVDocs-v1](https://huggingface.co/datasets/nvidia/Retrieval-Synthetic-NVDocs-v1). This dataset was generated from NVIDIAтАЩs publicly available content using the same SDG pipeline (Stage 0) in this recipe, and contains ~15K documents with 105K+ question-answer pairs across multiple reasoning types. If you want to fine-tune a reranking model on NVIDIA-related content, you can **skip Stage 0 entirely** and start directly from Stage 1: @@ -409,14 +434,15 @@ Rerank cluster execution requires a profile with `remote_job_dir` or `env_vars.N Each stage has a `config/` directory with YAML configuration files. | File | Purpose | -|------|---------| -| `default.yaml` | Production-ready configuration | +| --- | --- | +| default.yaml | Production-ready configuration | ### Key Configuration Options The default config points at a small pinned sample corpus. For your own corpus, override the Stage 0 paths: **Stage 0: SDG** + ```yaml corpus_id: my_corpus # Identifier for your corpus corpus_dir: ./data/corpus # Path to your documents @@ -428,6 +454,7 @@ quality_judge_model: nvidia/nemotron-3-nano-30b-a3b # LLM for QA quality ``` **Stage 1: Data Prep** + ```yaml base_model: nvidia/llama-nemotron-embed-1b-v2 # Embedding model for hard negative mining quality_threshold: 7.0 # Minimum Q&A quality score (0-10) @@ -440,6 +467,7 @@ test_ratio: 0.2 # Test split (20%) ``` **Stage 2: Finetune** + ```yaml base_model: nvidia/llama-nemotron-rerank-1b-v2 num_epochs: 3 @@ -451,7 +479,7 @@ weight_decay: 0.01 optimizer_backend: auto # FusedAdam in the container, FlashAdamW locally without TE flash_adamw_master_weight_bits: 32 # Effective master-weight precision for FlashAdamW rerank_max_length: 512 # Max tokens for concatenated query+passage -prompt_template: "question:{query} \n \n passage:{passage}" +prompt_template: "question:\{query\} \n \n passage:\{passage\}" train_n_passages: 5 # 1 positive + 4 hard negatives num_labels: 1 temperature: 1.0 @@ -460,6 +488,7 @@ temperature: 1.0 > **Warning тАФ Overfitting risk**: The default `num_epochs: 3` is set for the small example dataset shipped with this recipe, where fewer epochs may not produce a visible training signal. For most real-world datasets, **1тАУ2 epochs is sufficient** and 3 epochs carries a high risk of overfitting. Lower this value when working with your own data (e.g., `nemotron rerank finetune -c default num_epochs=1`). **Stage 3: Eval** + ```yaml base_model: nvidia/llama-nemotron-rerank-1b-v2 # Base reranker for comparison retrieval_model: nvidia/llama-nemotron-embed-1b-v2 # First-stage retriever @@ -472,17 +501,19 @@ eval_nim: false # Evaluate NIM endpoint ``` **Stage 4: Export** + ```yaml model_path: ./output/rerank/stage2_finetune/checkpoints/LATEST/model/consolidated export_to_trt: false # Export to TensorRT (requires nemo:25.07+ container) quant_cfg: null # Quantization: null, "fp8", "int8_sq" calibration_query: what information is relevant to this query? -prompt_template: "question:{query} \n \n passage:{passage}" +prompt_template: "question:\{query\} \n \n passage:\{passage\}" trt_opt_batch: 16 # Optimal batch size for TRT trt_opt_seq_len: 256 # Optimal sequence length for TRT ``` **Stage 5: Deploy** + ```yaml nim_image: nvcr.io/nim/nvidia/llama-nemotron-rerank-1b-v2:1.10.0 model_dir: ./output/rerank/stage4_export/onnx # ONNX or TensorRT export directory @@ -607,7 +638,7 @@ curl -X POST http://localhost:8000/v1/ranking \ After running the full pipeline: -``` +```default output/rerank/ тФЬтФАтФА stage0_sdg/ # Synthetic Q&A pairs тФВ тФФтФАтФА generated_batch*.json @@ -634,7 +665,7 @@ output/rerank/ The evaluation stage measures reranking quality using a two-stage approach: first-stage dense retrieval followed by cross-encoder re-ranking. This mirrors how rerankers are used in production. | Metric | Description | Range | -|--------|-------------|-------| +| --- | --- | --- | | **nDCG@k** | Normalized Discounted Cumulative Gain (ranking quality) | 0.0-1.0 | | **Recall@k** | Fraction of relevant documents in top-k results | 0.0-1.0 | | **Precision@k** | Fraction of retrieved documents that are relevant | 0.0-1.0 | @@ -642,11 +673,10 @@ The evaluation stage measures reranking quality using a two-stage approach: firs Higher scores indicate better re-ranking performance. The key metric to watch is **nDCG@10**, which captures how well the reranker promotes relevant documents to the top of the list. - ## Key Components | Component | Purpose | Repository | -|-----------|---------|------------| +| --- | --- | --- | | retriever-sdg | Synthetic data generation using NeMo Data Designer | [GitHub](https://github.com/NVIDIA-NeMo/DataDesigner) | | Automodel | Cross-encoder model training framework | [GitHub](https://github.com/NVIDIA-NeMo/Automodel) | | BEIR | Evaluation framework for information retrieval | [GitHub](https://github.com/beir-cellar/beir) | @@ -656,7 +686,7 @@ Higher scores indicate better re-ranking performance. The key metric to watch is ## Base Model | Property | Value | -|----------|-------| +| --- | --- | | Model | nvidia/llama-nemotron-rerank-1b-v2 | | Parameters | ~1B | | Architecture | Cross-encoder (sequence classification) | @@ -667,15 +697,23 @@ Higher scores indicate better re-ranking performance. The key metric to watch is ## Further Reading - [NeMo Data Designer Documentation](https://github.com/NVIDIA-NeMo/DataDesigner) - Synthetic data generation framework + - [Automodel Documentation](https://github.com/NVIDIA-NeMo/Automodel) - Model training framework + - [BEIR Benchmark](https://github.com/beir-cellar/beir) - Information retrieval evaluation + - [NVIDIA NIM Documentation](https://developer.nvidia.com/nim) - Production inference microservices + - [Llama-Nemotron-Rerank-1B-v2 Model Card](https://huggingface.co/nvidia/llama-nemotron-rerank-1b-v2) - Base model details + - [Retrieval-Synthetic-NVDocs-v1 Dataset](https://huggingface.co/datasets/nvidia/Retrieval-Synthetic-NVDocs-v1) - Pre-generated synthetic retrieval dataset ## Support For issues, questions, or contributions: + - **Issues**: [GitHub Issues](https://github.com/NVIDIA-NeMo/Nemotron/issues) + - **Discussions**: [GitHub Discussions](https://github.com/NVIDIA-NeMo/Nemotron/discussions) + - **Documentation**: [Nemotron Documentation](https://github.com/NVIDIA-NeMo/Nemotron) diff --git a/docs/fern/pages-v0.1.0/index.mdx b/docs/fern/pages-v0.1.0/index.mdx new file mode 100644 index 000000000..d7d9ebb1e --- /dev/null +++ b/docs/fern/pages-v0.1.0/index.mdx @@ -0,0 +1,98 @@ +--- +title: "Nemotron Training Recipes" +slug: "index.html" +description: "Open and efficient models for agentic AI. Reproducible training pipelines with transparent data, techniques, and weights." +--- + +**Open and efficient models for agentic AI.** Reproducible training pipelines with transparent data, techniques, and weights. + +
    + +
    +## Quick Start + +
    +```console +// Install the Nemotron training recipes +$ git clone https://github.com/NVIDIA/nemotron +$ cd nemotron && uv sync + +// Run the Nano3 pipeline stage by stage +$ uv run nemotron nano3 data prep pretrain --run YOUR-CLUSTER +$ uv run nemotron nano3 pretrain --run YOUR-CLUSTER +$ uv run nemotron nano3 data prep sft --run YOUR-CLUSTER +$ uv run nemotron nano3 sft --run YOUR-CLUSTER +$ uv run nemotron nano3 data prep rl --run YOUR-CLUSTER +$ uv run nemotron nano3 rl --run YOUR-CLUSTER +``` + +
    +> **Note**: The `--run YOUR-CLUSTER` flag submits jobs to your configured Slurm cluster via [NeMo-Run](/nemo_runspec/nemo-run). See [Execution through NeMo-Run](/nemo_runspec/nemo-run) for setup instructions. + +## Usage Cookbook & Examples + + + +Deployment guides for Nemotron models: TensorRT-LLM, vLLM, SGLang, NIM, and Hugging Face. + + + + +End-to-end applications: RAG agents, ML agents, and multi-agent systems. + + + + + +## Available Training Recipes + + + +31.6B total / 3.6B active parameters, 25T tokens, up to 1M context. Hybrid Mamba-Transformer with sparse MoE. + +**Stages:** Pretraining тЖТ SFT тЖТ RL + + + + + +## Training Pipeline + +The Nemotron training pipeline has three stages, each tracked through [artifact lineage](/nemotron/artifacts): + +| Stage | Name | Description | +| --- | --- | --- | +| 0 | [Pretraining](/nemotron/nano3/pretrain) | Base model training on large text corpus | +| 1 | [SFT](/nemotron/nano3/sft) | Supervised fine-tuning for instruction following | +| 2 | [RL](/nemotron/nano3/rl) | Reinforcement learning for alignment | + +## Why Nemotron? + +| | | +| --- | --- | +| **Open Models** | Transparent training data, techniques, and weights for community innovation | +| **Compute Efficiency** | Model pruning enabling higher throughput via TensorRT-LLM | +| **High Accuracy** | Built on frontier open models with human-aligned reasoning | +| **Flexible Deployment** | Deploy anywhere: edge, single GPU, or data center with NIM | + +## Features + +- **End-to-end pipelines** from raw data to deployment-ready models + +- **[Artifact lineage](/nemotron/artifacts)** via [W&B](/nemotron/wandb) from data to model + +- **Built on [NVIDIAтАЩs NeMo stack](/nemotron/nvidia-stack)** (Megatron-Bridge, NeMo-RL) + +- **Reproducible** with versioned configs, data blends, and checkpoints + +## Resources + +- [Tech Report](https://research.nvidia.com/labs/nemotron/files/NVIDIA-Nemotron-3-Nano-Technical-Report.pdf) тАУ Nemotron 3 Nano methodology + +- [Model Weights](https://huggingface.co/collections/nvidia/nvidia-nemotron-v3) тАУ pre-trained checkpoints on HuggingFace + +- [Pre-training Datasets](https://huggingface.co/collections/nvidia/nemotron-pre-training-datasets) тАУ open pre-training data + +- [Post-training Datasets](https://huggingface.co/collections/nvidia/nemotron-post-training-v3) тАУ SFT and RL data + +- [Artifact Lineage](/nemotron/artifacts) тАУ W&B integration guide diff --git a/docs/fern/pages-v0.1.0/usage-cookbook/Nemotron-3-Super/AdvancedDeploymentGuide/README.mdx b/docs/fern/pages-v0.1.0/usage-cookbook/Nemotron-3-Super/AdvancedDeploymentGuide/README.mdx new file mode 100644 index 000000000..44df40ea2 --- /dev/null +++ b/docs/fern/pages-v0.1.0/usage-cookbook/Nemotron-3-Super/AdvancedDeploymentGuide/README.mdx @@ -0,0 +1,273 @@ +--- +title: "Nemotron 3 Super тАФ Advanced Deployment Guide" +slug: "usage-cookbook/Nemotron-3-Super/AdvancedDeploymentGuide/README.html" +description: "Three properties of Nemotron 3 Super that directly affect inference configuration:" +--- + +## Architecture Considerations + +Three properties of Nemotron 3 Super that directly affect inference configuration: + +**LatentMoE** тАФ Expert computation happens in a compressed latent dimension (`d=4096 тЖТ тДУ=1024`). All-to-all routing traffic is reduced ~4├Ч vs a standard MoE, which matters significantly for EP across NVLinks. Expert parallelism (`--enable-expert-parallel` / `--ep`) is strongly preferred over pure TP for this architecture. + +**MTP (Multi-Token Prediction)** тАФ One MTP layer is baked into the checkpoint. This layer functions as a tail augmented draft model (similar to Eagle or other MTP heads) for speculative decoding. Unlike external draft models, additional KV cache and latency overhead is minimal as there is only a single layer called per predicted token. + +**Mamba-2 Hybrid** тАФ SSM state cache (`mamba_ssm_cache`) is distinct from the KV cache. Use `float32` for all checkpoint precisions. + +## Pinned Versions + +| Framework | Pinned Version / Image | +| --- | --- | +| vLLM | 0.17.1 | +| SGLang | lmsysorg/sglang:v0.5.9 | +| TRT-LLM | nvcr.io/nvidia/tensorrt-llm/release:1.3.0rc5 | + +## vLLM + +### Install + +```bash +pip install vllm==0.17.1 +``` + +### Baseline Serve Command (4├Ч GB200, 8k/64k) + +```bash +VLLM_FLASHINFER_MOE_BACKEND=latency \ +VLLM_USE_FLASHINFER_MOE_FP4=1 \ +VLLM_USE_FLASHINFER_MOE_FP8=1 \ +vllm serve $MODEL_CKPT \ + --tensor-parallel-size 4 \ + --trust-remote-code \ + --gpu-memory-utilization 0.9 \ + --enable-expert-parallel \ + --max-cudagraph-capture-size 512 \ + --reasoning-parser-plugin super_v3_reasoning_parser.py \ + --reasoning-parser super_v3 +``` + +### Env Vars + +| Variable | Value | Effect | +| --- | --- | --- | +| VLLM_FLASHINFER_MOE_BACKEND | latency | TRT-LLM Gen kernels тАФ optimal for online/latency-bound serving. Use throughput (CUTLASS) for offline batch jobs. | +| VLLM_USE_FLASHINFER_MOE_FP4 | 1 | Enables NVFP4 MoE kernels. Blackwell only. | +| VLLM_USE_FLASHINFER_MOE_FP8 | 1 | Enables FP8 MoE kernels. | +| VLLM_FLASHINFER_ALLREDUCE_BACKEND | trtllm | Fixes allreduce on certain topologies. Fixed upstream in [#35793](https://github.com/vllm-project/vllm/pull/35793). | + +### MTP (Speculative Decoding) + +Add to the base command: + +```bash + --speculative-config '{"method": "nemotron_h_mtp", "num_speculative_tokens": 5}' +``` + +### Optional Flags Reference + +```bash +# Triton attention backend тАФ required on some configurations. Fixed upstream in vllm#35219. +--attention-backend TRITON_ATTN + +# Reduce CUDA graph memory if headroom is tight (default 512) +--max-cudagraph-capture-size 256 + +# For unconstrained memory: prefer chunked prefill off +--no-enable-chunked-prefill # required for vLLM \<= 0.15.0 due to accuracy bug + +# SSM cache precision тАФ float32 for all checkpoint precisions +--mamba-ssm-cache-dtype float32 + +# Cap context length for fair benchmarking or memory control +--max-model-len 65536 +``` + +## SGLang + +### Docker Pull + +```bash +docker pull lmsysorg/sglang:v0.5.9 +``` + +### Baseline Serve Command (4├Ч GB200, 8k/64k) + +```bash +python3 -m sglang.launch_server \ + --model nvidia/NVIDIA-Nemotron-3-Super \ + --trust-remote-code \ + --tp 4 \ + --ep 4 \ + --tool-call-parser qwen3_coder \ + --reasoning-parser nano_v3 \ + --chunked-prefill-size 8192 +``` + +### MTP (Speculative Decoding) + +```bash + --speculative-algorithm EAGLE \ + --speculative-num-steps 5 \ + --speculative-eagle-topk 1 \ + --speculative-num-draft-tokens 5 +``` + +> **NVFP4/FP8 + MTP on v0.5.9**: MTP does not work with NVFP4/FP8 on the `v0.5.9` image. The fix is merged into SGLang main. Use the nightly image `nightly-dev-20260310-0fd9a57d` and add `--disable-radix-cache`. + +### SSM Cache + +```bash +--mamba-ssm-dtype float32 # use for all checkpoint precisions +``` + +Not required if baked into the checkpoint (which it is for released Nemotron 3 Super checkpoints). + +--- + +## TensorRT-LLM + +### Docker Pull + +> **Requires branch build**: These configs depend on changes not yet merged into the `1.3.0rc7` release [image](https://catalog.ngc.nvidia.com/orgs/nvidia/teams/tensorrt-llm/containers/release?version=1.3.0rc7). Build TRT-LLM from `main` [branch](https://github.com/NVIDIA/TensorRT-LLM) before using these configs. + +TRT-LLM requires an `extra_llm_api_options` YAML for MoE backend, KV cache, and CUDA graph settings that canтАЩt be passed as CLI flags. + +### Config A тАФ NVFP4, 2├Ч B200 (TEP2, Latency-Optimized) + +Optimal for a 2-GPU B200 node running NVFP4 with MTP enabled. + +**`y.yaml`** + +```yaml +trust_remote_code: true +kv_cache_config: + enable_block_reuse: false + free_gpu_memory_fraction: 0.8 + mamba_ssm_cache_dtype: float32 +speculative_config: + decoding_type: MTP + num_nextn_predict_layers: 3 + allow_advanced_sampling: true +cuda_graph_config: + max_batch_size: 16 + enable_padding: true +moe_config: + backend: TRTLLM +stream_interval: 1 +enable_chunked_prefill: true +``` + +**Serve command** + +```bash +mpirun -n 1 --allow-run-as-root --oversubscribe \ + trtllm-serve /data/super_fp4/ \ + --host 0.0.0.0 \ + --port 8000 \ + --max_batch_size 16 \ + --tp_size 2 \ + --ep_size 2 \ + --max_num_tokens 8192 \ + --max_seq_len 262144 \ + --extra_llm_api_options y.yaml +``` + +**Config rationale** + +- `max_batch_size: 16` тАФ Conservative for 2 GPUs. Balances MTP draft acceptance overhead vs. throughput. + +- `tp_size 2 / ep_size 2` тАФ Full EP across both GPUs. On LatentMoE, EP reduces all-to-all by ~4├Ч vs TP at the same GPU count. + +- `mamba_ssm_cache_dtype: float32` тАФ Use float32 for all checkpoint precisions. + +- `enable_block_reuse: false` тАФ Mamba recurrent state is not prefix-cacheable; block reuse has no benefit here. + +- `num_nextn_predict_layers: 3` тАФ Drives MTP with 3 speculative draft steps. Average acceptance length is 3.45 on SPEED-Bench at draft length 7. + +- `allow_advanced_sampling: true` тАФ Required for MTP sampler compatibility. + +- `enable_chunked_prefill: true` тАФ Reduces inter-token latency on long prompts by interleaving prefill and decode steps. + +### Config B тАФ NVFP4, 8├Ч B200 (DEP8, Throughput-Optimized) + +Optimal for a full 8-GPU B200 node (DGX B200) serving NVFP4. + +**`y.yaml`** + +```yaml +kv_cache_config: + enable_block_reuse: false + free_gpu_memory_fraction: 0.8 +moe_config: + backend: TRTLLM +cuda_graph_config: + enable_padding: true + max_batch_size: 256 +enable_attention_dp: true +num_postprocess_workers: 4 +enable_chunked_prefill: true +stream_interval: 10 +``` + +Additionally, TRT-LLM supports using a quantized mamba cache with stochastic rounding to improve throughput. Extend the `kv_cache_config` with the following info. + +```default +kv_cache_config: + mamba_ssm_cache_dtype: float16 + mamba_ssm_stochastic_rounding: true + mamba_ssm_philox_rounds: 5 +``` + +**Serve command** + +```bash +mpirun -n 1 --allow-run-as-root --oversubscribe \ + trtllm-serve /data/super_fp4/ \ + --host 0.0.0.0 \ + --port 8000 \ + --max_batch_size 256 \ + --tp_size 8 --ep_size 8 \ + --max_num_tokens 8192 \ + --trust_remote_code \ + --reasoning_parser nano-v3 \ + --tool_parser qwen3_coder \ + --extra_llm_api_options y.yaml +``` + +### Config C тАФ NVFP4, DGX Spark + +Config to deploy the model on 1x DGX Spark. + +```default +kv_cache_config: + enable_block_reuse: false +cuda_graph_config: + max_batch_size: 32 + enable_padding: true +moe_config: + backend: CUTLASS +EOF +``` + +**Serve command** + +```bash +trtllm-serve /data/super_fp4/ \ + --host 0.0.0.0 \ + --port 8000 \ + --max_batch_size 4 \ + --trust_remote_code \ + --reasoning_parser nano-v3 \ + --tool_parser qwen3_coder \ + --extra_llm_api_options y.yaml +``` + +### Updated reasoning parser + +To use the `force_nonempty_content` kwarg in the chat template, build TRT-LLM from `main`. Alternatively, the changes from [PR-12061](https://github.com/NVIDIA/TensorRT-LLM/pull/12061) can be manually cherry-picked into the release container to enable it. + +### Contributors: + +The configurations in this document were created by: + +Izzy Putterman, Nave Assaf, Joyjit Daw, and many other talented NVIDIA engineers. diff --git a/docs/fern/pages-v0.1.0/use-case-examples/nemotron-voice-rag-agent-example/README.mdx b/docs/fern/pages-v0.1.0/use-case-examples/nemotron-voice-rag-agent-example/README.mdx new file mode 100644 index 000000000..05ce69f24 --- /dev/null +++ b/docs/fern/pages-v0.1.0/use-case-examples/nemotron-voice-rag-agent-example/README.mdx @@ -0,0 +1,205 @@ +--- +title: "ЁЯОЩя╕П Voice-Powered RAG Agent with NVIDIA Nemotron Models" +slug: "use-case-examples/nemotron-voice-rag-agent-example/README.html" +description: "Build a complete end-to-end AI agent that accepts voice input, retrieves multimodal context, reasons with long-context models, and enforces safety guardrailsтАФall using the latest NVIDIA Nemotron open " +--- + +Build a complete end-to-end AI agent that accepts voice input, retrieves multimodal context, reasons with long-context models, and enforces safety guardrailsтАФall using the latest NVIDIA Nemotron open models. + +## ЁЯМЯ Features + +- **Voice Input**: Nemotron Speech ASR for real-time speech-to-text + +- **LangChain 1.0 Agent**: Uses `langgraph.prebuilt.create_react_agent` with automatic looping + +- **RAG as a Tool**: On-demand retrieval - agent decides when to search knowledge base + +- **Automatic Agent Loop**: Can call tools multiple times until it has enough information + +- **Multimodal RAG**: Embed and retrieve both text and document images + +- **Smart Reranking**: Improve retrieval accuracy by 6-7% with cross-encoder reranking + +- **Image Understanding**: Describe visual content in context using vision-language models + +- **Long-Context Reasoning**: Generate responses with 1M token context window + +- **Safety Guardrails (Always On)**: PII detection and content moderation enforced on all inputs/outputs + +## ЁЯУж Models Used + +| Component | Model | Parameters | Deployment | +| --- | --- | --- | --- | +| **Speech-to-Text** | nvidia/nemotron-speech-streaming-en-0.6b | 600M | Self-hosted (NeMo) | +| **Embeddings** | nvidia/llama-nemotron-embed-vl-1b-v2 | 1.7B | Self-hosted (Transformers) | +| **Reranking** | nvidia/llama-nemotron-rerank-vl-1b-v2 | 1.7B | Self-hosted (Transformers) | +| **Vision-Language** | nvidia/nemotron-nano-12b-v2-vl | 12B | NVIDIA API | +| **Reasoning** | nvidia/nemotron-3-nano-30b-a3b | 30B | NVIDIA API | +| **Safety** | nvidia/Llama-3.1-Nemotron-Safety-Guard-8B-v3 | 8B | Self-hosted (Transformers) | + +## ЁЯФз Requirements + +### Hardware + +- **GPU**: NVIDIA GPU with at least 24GB VRAM recommended (for self-hosted models) + +- **CUDA**: 11.8 or later + +### Software + +- Python 3.10+ + +- PyTorch 2.0+ + +- NVIDIA API Key (for cloud-hosted models) + +## ЁЯЪА Quick Start + +### 1. Clone the Repository + +```bash +git clone https://github.com/NVIDIA-NeMo/Nemotron.git +cd Nemotron/use-case-examples/nemotron-voice-rag-agent-example +``` + +### 2. Set Up Environment + +**Option A: Standard CUDA (RTX, A100, etc.):** + +```bash +uv sync --extra cuda --index-url https://download.pytorch.org/whl/cu124 +``` + +**Option B: DGX Spark (GB10):** + +```bash +uv sync --extra cuda --index-url https://download.pytorch.org/whl/cu130 +``` + +**Note:** Since `nemo_toolkit[asr]` may have specific PyTorch requirements, if you encounter dependency conflicts, install PyTorch first: + +```bash +# For Spark/GB10 systems +uv pip install torch torchvision --index-url https://download.pytorch.org/whl/cu130 +uv sync + +# For standard CUDA systems +uv pip install torch torchvision --index-url https://download.pytorch.org/whl/cu124 +uv sync +``` + +### 3. Configure API Key + +```bash +export NVIDIA_API_KEY="your-nvidia-api-key" +``` + +Get your API key from [NVIDIA NGC](https://ngc.nvidia.com/). + +### 4. Run the Tutorial + +```bash +jupyter notebook voice_rag_agent_tutorial.ipynb +``` + +## ЁЯУБ Project Structure + +```default +nemotron-voice-rag-agent-example/ +тФЬтФАтФА voice_rag_agent_tutorial.ipynb # Main tutorial notebook +тФЬтФАтФА README.md # This file +тФЬтФАтФА requirements.txt # Python dependencies +тФФтФАтФА BlogSkeleton/ # Blog content and model docs + тФЬтФАтФА BLOG.md + тФЬтФАтФА BLOG_UPDATED.md + тФЬтФАтФА Code Snippets/ + тФФтФАтФА Model Information/ +``` + +## ЁЯПЧя╕П Architecture + +```default +тФМтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФР +тФВ Voice-Powered LangChain 1.0 Agent with RAG Tool тФВ +тФЬтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФд +тФВ тФВ +тФВ ЁЯОд Voice Input тЖТ Nemotron Speech ASR тЖТ Text Query тФВ +тФВ тЖУ тФВ +тФВ ЁЯЫбя╕П Input Safety Check (ALWAYS ENFORCED) тФВ +тФВ тЖУ тФВ +тФВ тФМтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФР тФВ +тФВ тФВ LangGraph ReAct Agent Loop тФВ тФВ +тФВ тФВ (langgraph.prebuilt.create_react_agent) тФВ тФВ +тФВ тФВ тФВ тФВ +тФВ тФВ Agent (nemotron-3-nano-30b-a3b) тФВ тФВ +тФВ тФВ тФВ тФВ тФВ +тФВ тФВ тФЬтФА> Decide: Need more info? тФВ тФВ +тФВ тФВ тФВ тФВ тФВ +тФВ тФВ тФЬтФА> YES: Call RAG Tool тФАтФАтФР тФВ тФВ +тФВ тФВ тФВ тФЬтФАтФА Embed тФВ тФВ тФВ +тФВ тФВ тФВ тФЬтФАтФА Vector Search тФВ тФВ тФВ +тФВ тФВ тФВ тФЬтФАтФА Rerank тФВ LOOP тФВ тФВ +тФВ тФВ тФВ тФФтФАтФА Describe Images тФВ UNTIL тФВ тФВ +тФВ тФВ тФВ тФВ SATISFIED тФВ тФВ +тФВ тФВ тФФтФА\< Tool Result тФАтФАтФАтФАтФАтФАтФАтФАтФАтФШ тФВ тФВ +тФВ тФВ тФВ тФВ тФВ +тФВ тФВ тФФтФА> NO: Generate final answer тФВ тФВ +тФВ тФВ тФВ тФВ +тФВ тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФШ тФВ +тФВ тЖУ тФВ +тФВ ЁЯЫбя╕П Output Safety Check (ALWAYS ENFORCED) тФВ +тФВ тЖУ тФВ +тФВ ЁЯУЭ Safe Text Output тФВ +тФВ тФВ +тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФШ +``` + +## ЁЯУЦ Tutorial Steps + +1. **Environment Setup**: Install dependencies and configure API keys + +2. **Multimodal RAG**: Build embeddings and vector store for text + images + +3. **Speech Input**: Add real-time speech transcription with Nemotron ASR + +4. **Safety Guardrails**: Implement PII detection and content moderation + +5. **Reasoning LLM**: Configure Nemotron for agent decision-making + +6. **LangChain 1.0 Agent**: Create ReAct agent with automatic looping + + - Define RAG as a tool (not a fixed workflow step) + + - Use `langgraph.prebuilt.create_react_agent` + + - Agent automatically loops until it can answer + + - Safety enforced on all inputs and outputs + +## ЁЯОп Use Cases + +- **Enterprise Q&A**: Answer questions over documents with charts, tables, and images + +- **Voice Assistants**: Build conversational AI with voice input + +- **Compliance**: Detect PII and enforce content policies + +- **Research**: Query scientific papers with visual content + +## ЁЯУД License + +This project uses NVIDIA open models. Each model is governed by its respective license: + +- [NVIDIA Open Model License](https://www.nvidia.com/en-us/agreements/enterprise-software/nvidia-open-model-license/) + +- [Llama 3.1 Community License](https://www.llama.com/llama3_1/license/) + +## ЁЯдЭ Contributing + +Contributions are welcome! Please read our contributing guidelines before submitting PRs. + +## ЁЯУм Support + +- [NVIDIA Developer Forums](https://forums.developer.nvidia.com/) + +- [GitHub Issues](https://github.com/NVIDIA-NeMo/Nemotron/issues) diff --git a/docs/fern/pages-vnightly/application-examples.mdx b/docs/fern/pages-vnightly/application-examples.mdx new file mode 100644 index 000000000..606ed3c2f --- /dev/null +++ b/docs/fern/pages-vnightly/application-examples.mdx @@ -0,0 +1,92 @@ +--- +title: "Application Examples" +slug: "application-examples.html" +description: "End-to-end applications built on Nemotron models, including agentic workflows, RAG systems, and fine-tuning pipelines. Each card links to its directory in the Nemotron GitHub repository." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + +{/* Card footer badges +================== +Add a badge only when the attribute applies. Omit it (and do not substitute its opposite) when it does not. +Absence is the signal for the simpler case. + +{bdg-success\}`Notebook` тАФ self-contained notebook; no environment beyond pip install. + Omit for multi-file projects and anything that isn't a notebook. + +{bdg-secondary\}`Local GPU` тАФ requires a local GPU or hardware beyond a laptop or desktop. + Omit for API/cloud-only examples. Do not add an "API" badge. + +{bdg-info\}`Fine-tuning` тАФ example includes a training/fine-tuning step. + Omit for inference-only examples. Do not add an "Inference" badge. */} + + + +End-to-end applications built on Nemotron models, including agentic workflows, RAG systems, and fine-tuning pipelines. Each card links to its directory in the [Nemotron GitHub repository](https://github.com/NVIDIA-NeMo/nemotron). + + + +Introductory notebook covering Nemotron 3 SuperтАЩs reasoning features: thinking, reasoning budget, low effort mode, streaming responses, tool-call streaming, and Perplexity Search integration using the OpenAI-compatible API. + +--- + +Notebook Mar 11, 2026 + + + + +End-to-end LoRA fine-tuning of Nemotron 3 Nano on Text2SQL (BIRD SQL) with deployment via NVIDIA NIM or vLLM using NeMo AutoModel or Megatron Bridge. + +--- + +Local GPU Fine-tuning Mar 11, 2026 + + + + +IDP pipeline that extracts and queries complex enterprise documents тАФ financial reports, charts, and tables тАФ using NeMo Retriever and multimodal Nemotron models. + +--- + +Local GPU Feb 09, 2026 + + + + +End-to-end voice-driven RAG agent combining speech-to-text, multimodal retrieval, 1M-token reasoning, and safety guardrails using open Nemotron models. + +--- + +Local GPU Jan 07, 2026 + + + + +Introductory notebook covering basic inference, reasoning mode toggling, and multi-agent systems using the OpenAI-compatible API via OpenRouter and LangChain. + +--- + +Notebook Dec 15, 2025 + + + + +Natural language-driven ML agent built on Nemotron Nano 9B with GPU-accelerated data exploration and model training using RAPIDS cuDF and cuML. + +--- + +Local GPU Nov 06, 2025 + + + + +Production-ready RAG agent using local Hugging Face embedding and reranking models with NVIDIA AI Endpoints for LLM inference, built on LangGraph. + +--- + +Local GPU Oct 28, 2025 + + + + diff --git a/docs/fern/pages-vnightly/architecture/README.mdx b/docs/fern/pages-vnightly/architecture/README.mdx new file mode 100644 index 000000000..45999b0e3 --- /dev/null +++ b/docs/fern/pages-vnightly/architecture/README.mdx @@ -0,0 +1,64 @@ +--- +title: "Nemotron Architecture" +slug: "architecture/README.html" +description: "This directory contains documentation about NemotronтАЩs architecture and design principles." +--- + +This directory contains documentation about NemotronтАЩs architecture and design principles. + +## Overview + +Nemotron is a **cookbook** - a reference implementation showing best practices for training LLMs at scale. ItтАЩs not a framework you install; itтАЩs a codebase you fork and customize. + +## Documents + +- [Runspec Specification](/../runspec/v1/spec) - The `[tool.runspec]` metadata format for recipe scripts + +- [CLI Architecture](/cli-architecture) - How the CLI layer works and how to fork it + +- [Design Philosophy](/design-philosophy) - What we optimize for and why + +## Quick Start + +```bash +# Run pretraining locally +nemotron nano3 pretrain -c tiny + +# Submit to cluster +nemotron nano3 pretrain -c tiny --run dgx + +# See what's happening (execution logic is visible in the code) +# Open: src/nemotron/cli/commands/nano3/pretrain.py +``` + +## Two-Layer Architecture + +| Layer | What | Where | Fork When | +| --- | --- | --- | --- | +| **Execution** | How to run and track experiments | cli/commands/ + nemo_runspec/ | nemo-run/wandb -> SkyPilot/mlflow | +| **Runtime** | Training/data processing | recipes/ | Algorithm changes | + +```default +Execution Layer Runtime Layer (recipes/) +тФМтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФР тФМтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФР +тФВ cli/commands/nano3/ тФВ тФВ recipes/nano3/ тФВ +тФВ pretrain.py тФВ тФВ pretrain/train.py тФВ +тФВ тФВ тФВ тФВ +тФВ nemo_runspec (toolkit) тФВтФАтФАтФАтФАтФАтЦ║тФВ Megatron-Bridge тФВ +тФВ config, execution, env тФВ тФВ тФВ +тФВ artifact registry тФВ тФВ тФВ +тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФШ тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФШ +``` + +The runtime layer is typically a **thin script** that delegates to NVIDIA AI stack libraries. The execution layer contains all the job submission logic, which is what youтАЩd change to swap nemo-run for SkyPilot or another backend. + +## Package Responsibilities + +| Package | Scope | +| --- | --- | +| **nemo_runspec** | Generic CLI toolkit: PEP 723 runspec parsing, config loading, env.toml profiles, execution helpers, packaging, pipeline orchestration, artifact registry (art:// resolution, fsspec/wandb backends) | +| **nemotron.kit** | Domain-specific: artifact type definitions (pretrain data, SFT data, checkpoints), lineage trackers (W&B, file-based), W&B integration | +| **nemotron.cli** | CLI commands: visible execution logic per command, typer-based command tree | +| **nemotron.recipes** | Runtime scripts: training, data prep, RL (thin scripts delegating to NVIDIA AI stack) | + +Dependency direction: `nemotron.cli` -> `nemo_runspec` + `nemotron.kit` -> NVIDIA stack. Never the reverse. diff --git a/docs/fern/pages-vnightly/architecture/cli-architecture.mdx b/docs/fern/pages-vnightly/architecture/cli-architecture.mdx new file mode 100644 index 000000000..efdfcd05f --- /dev/null +++ b/docs/fern/pages-vnightly/architecture/cli-architecture.mdx @@ -0,0 +1,319 @@ +--- +title: "CLI Architecture" +slug: "architecture/cli-architecture.html" +description: "This document explains how NemotronтАЩs CLI layer works and how to modify it for your needs." +--- + +This document explains how NemotronтАЩs CLI layer works and how to modify it for your needs. + +## Overview + +The CLI layer (`src/nemotron/cli/`) handles **execution** тАУ how jobs are submitted and tracked. Each command file contains visible execution logic, making it easy to understand and modify. + +The shared toolkit lives in the `nemo_runspec` package: config loading, env.toml profiles, execution helpers, packaging, and display utilities. CLI commands import from `nemo_runspec` and wire things together explicitly. + +## Design Principle: Visible Execution + +Nemotron makes execution **explicit** тАУ all nemo-run setup lives directly in each command function: + +```python +# src/nemotron/cli/commands/nano3/pretrain.py + +from nemo_runspec import parse as parse_runspec +from nemo_runspec.config import parse_config, build_job_config, save_configs +from nemo_runspec.execution import create_executor, execute_local, build_env_vars + +# Metadata comes from PEP 723 [tool.runspec] in the script itself +SCRIPT_PATH = "src/nemotron/recipes/nano3/stage0_pretrain/train.py" +SPEC = parse_runspec(SCRIPT_PATH) + +# Execution logic is VISIBLE in the function +def _execute_pretrain(cfg: RecipeConfig, *, experiment=None): + # 1. Parse configuration + train_config = parse_config(cfg.ctx, SPEC.config_dir, SPEC.config.default) + job_config = build_job_config(train_config, cfg.ctx, SPEC.name, ...) + + # 2. Build executor - THIS IS WHAT YOU'D CHANGE FOR SKYPILOT + executor = create_executor(env=env, env_vars=env_vars, packager=packager, ...) + + # 3. Run experiment + with run.Experiment(recipe_name) as exp: + exp.add(script_task, executor=executor) + exp.run(detach=not attached) +``` + +## Components + +### Runspec (PEP 723 metadata) + +Recipe scripts are self-describing. Each script declares its identity, container image, launch method, and config location via a `[tool.runspec]` TOML block: + +```python +# /// script +# [tool.runspec] +# name = "nano3/pretrain" +# image = "nvcr.io/nvidia/nemo:25.11.nemotron_3_nano" +# +# [tool.runspec.run] +# launch = "torchrun" +# +# [tool.runspec.config] +# dir = "./config" +# default = "default" +# /// +``` + +The CLI reads this via `nemo_runspec.parse()`, returning a frozen `Runspec` dataclass. See [nemo_runspec package](/../nemo_runspec/package-readme) for the full schema. + +### RecipeConfig + +Parsed CLI options. Handles late globals (`--run` after subcommand) and dotlist overrides: + +```python +from nemo_runspec.recipe_config import RecipeConfig, parse_recipe_config + +cfg = parse_recipe_config(ctx) +# Now you have: +# cfg.mode - "run", "batch", or "local" +# cfg.attached - True if --run, False if --batch +# cfg.profile - The env profile name +# cfg.passthrough - Args to pass through to script +# cfg.dry_run - True if --dry-run +``` + +### RecipeTyper + +Standardizes command registration with proper context settings and rich help panels: + +```python +from nemo_runspec.recipe_typer import RecipeTyper, RecipeMeta + +app = RecipeTyper(name="nano3", help="Nano3 training recipes") + +app.add_recipe_command( + pretrain, + meta=PRETRAIN_META, # RecipeMeta with config_dir, artifacts, etc. + rich_help_panel="Training Stages", +) +``` + +### Config Pipeline + +Config loading uses `nemo_runspec.config`: + +```python +from nemo_runspec.config import parse_config, build_job_config, extract_train_config, save_configs + +# 1. Load YAML config with dotlist overrides +train_config = parse_config(ctx, config_dir, default_config) + +# 2. Build full job config with provenance (env profile, CLI args, etc.) +job_config = build_job_config(train_config, ctx, recipe_name, script_path, argv, env_profile=env) + +# 3. Extract clean train config for the script +train_config_for_script = extract_train_config(job_config, for_remote=True) + +# 4. Save both configs to job directory +job_path, train_path = save_configs(job_config, train_config_for_script, job_dir) +``` + +## Directory Structure + +```default +src/nemotron/ +тФЬтФАтФА cli/ # EXECUTION LAYER +тФВ тФЬтФАтФА bin/ +тФВ тФВ тФФтФАтФА nemotron.py # Main entry point (typer app) +тФВ тФЬтФАтФА commands/ +тФВ тФВ тФЬтФАтФА evaluate.py # Top-level evaluate command +тФВ тФВ тФЬтФАтФА nano3/ +тФВ тФВ тФЬтФАтФА _typer_group.py # Command registration (RecipeTyper) +тФВ тФВ тФЬтФАтФА pretrain.py # Pretrain execution logic +тФВ тФВ тФЬтФАтФА sft.py # SFT execution logic +тФВ тФВ тФЬтФАтФА rl.py # RL execution logic (Ray) +тФВ тФВ тФЬтФАтФА eval.py # Evaluation command +тФВ тФВ тФЬтФАтФА pipe.py # Pipeline: pretrain тЖТ sft composition +тФВ тФВ тФЬтФАтФА data/ +тФВ тФВ тФВ тФЬтФАтФА prep/ # Data prep commands +тФВ тФВ тФВ тФВ тФЬтФАтФА pretrain.py +тФВ тФВ тФВ тФВ тФЬтФАтФА sft.py +тФВ тФВ тФВ тФВ тФФтФАтФА rl.py +тФВ тФВ тФВ тФФтФАтФА import_/ # Data import commands +тФВ тФВ тФВ тФЬтФАтФА pretrain.py +тФВ тФВ тФВ тФЬтФАтФА sft.py +тФВ тФВ тФВ тФФтФАтФА rl.py +тФВ тФВ тФФтФАтФА model/ # Model import/eval commands +тФВ тФВ тФЬтФАтФА eval.py +тФВ тФВ тФФтФАтФА import_/ +тФВ тФВ тФЬтФАтФА pretrain.py +тФВ тФВ тФЬтФАтФА sft.py +тФВ тФВ тФФтФАтФА rl.py +тФВ тФВ тФФтФАтФА omni3/ +тФВ тФВ тФЬтФАтФА _typer_group.py # Registers build, sft, eval, and RL sub-groups +тФВ тФВ тФЬтФАтФА build.py # Stage-local container build dispatcher +тФВ тФВ тФЬтФАтФА sft.py # Omni SFT execution logic +тФВ тФВ тФЬтФАтФА eval.py # Omni evaluation command +тФВ тФВ тФЬтФАтФА data/ # Data prep commands +тФВ тФВ тФЬтФАтФА model/ # Model import/export/eval commands +тФВ тФВ тФФтФАтФА rl/ # RL MPO / text / vision sub-stages +тФВ тФФтФАтФА kit/ # Kit CLI commands (squash, etc.) +тФВ +тФЬтФАтФА recipes/ # RUNTIME LAYER +тФВ тФЬтФАтФА data/ +тФВ тФВ тФЬтФАтФА curation/ # Data curation pipelines (for example nemotron-cc) +тФВ тФВ тФФтФАтФА sdg/ # Synthetic data generation pipelines +тФВ тФЬтФАтФА omni3/ +тФВ тФВ тФЬтФАтФА stage0_sft/ +тФВ тФВ тФВ тФЬтФАтФА Dockerfile # Stage-owned container recipe +тФВ тФВ тФВ тФЬтФАтФА build.py # Exports the OCI archive used downstream +тФВ тФВ тФВ тФЬтФАтФА train.py # -> Megatron-Bridge +тФВ тФВ тФВ тФФтФАтФА data_prep.py # -> Valor32k staging / validation +тФВ тФВ тФЬтФАтФА stage1_rl/ +тФВ тФВ тФВ тФЬтФАтФА Dockerfile # Shared RL container recipe +тФВ тФВ тФВ тФЬтФАтФА build.py # Exports the RL OCI archive +тФВ тФВ тФВ тФЬтФАтФА data_prep.py # -> RL data prep dispatcher +тФВ тФВ тФВ тФЬтФАтФА stage1_mpo/ +тФВ тФВ тФВ тФЬтФАтФА stage2_text_rl/ +тФВ тФВ тФВ тФФтФАтФА stage3_vision_rl/ +тФВ тФВ # NOTE: omni3 eval stage is on the roadmap; not yet present +тФВ тФФтФАтФА nano3/ +тФВ тФЬтФАтФА stage0_pretrain/ +тФВ тФВ тФЬтФАтФА train.py # -> Megatron-Bridge +тФВ тФВ тФФтФАтФА data_prep.py # -> Data preparation +тФВ тФЬтФАтФА stage1_sft/ +тФВ тФВ тФЬтФАтФА train.py # -> Megatron-Bridge +тФВ тФВ тФФтФАтФА data_prep.py # -> Data preparation +тФВ тФФтФАтФА stage2_rl/ +тФВ тФЬтФАтФА train.py # -> NeMo-RL +тФВ тФФтФАтФА data_prep.py # -> Data preparation + +src/nemo_runspec/ # SHARED TOOLKIT +тФЬтФАтФА _parser.py # PEP 723 [tool.runspec] parsing +тФЬтФАтФА _models.py # Runspec, RunspecRun, RunspecConfig, RunspecResources +тФЬтФАтФА config/ # Config loading and OmegaConf resolvers +тФВ тФЬтФАтФА loader.py # parse_config, build_job_config, save_configs +тФВ тФФтФАтФА resolvers.py # ${art:...}, ${auto_mount:...} +тФЬтФАтФА env.py # env.toml profile loading with inheritance +тФЬтФАтФА cli_context.py # GlobalContext (shared CLI state) +тФЬтФАтФА recipe_config.py # RecipeConfig + parse_recipe_config +тФЬтФАтФА recipe_typer.py # RecipeTyper + RecipeMeta +тФЬтФАтФА help.py # Rich help panels +тФЬтФАтФА display.py # Dry-run and job submission display +тФЬтФАтФА execution.py # Startup commands, env vars, executor creation +тФЬтФАтФА run.py # RunConfig, nemo-run patches +тФЬтФАтФА packaging/ # SelfContainedPackager, CodePackager +тФЬтФАтФА squash.py # Container squash utilities +тФЬтФАтФА pipeline.py # Pipeline orchestration +тФЬтФАтФА step.py # Step definition for pipelines +тФЬтФАтФА evaluator.py # NeMo Evaluator integration +тФЬтФАтФА artifact_registry.py # ArtifactRegistry (fsspec/wandb) +тФФтФАтФА exceptions.py # ArtifactNotFoundError, etc. +``` + +## Execution Patterns + +### Training (Slurm + torchrun) + +Pretrain and SFT use Slurm with torchrun launcher: + +```python +# cli/commands/nano3/pretrain.py, cli/commands/nano3/sft.py +executor = create_executor(env=env, env_vars=env_vars, packager=packager, ...) +script_task = run.Script(path="main.py", args=[...], entrypoint="python") + +with run.Experiment(recipe_name) as exp: + exp.add(script_task, executor=executor) + exp.run() +``` + +### RL (Ray) + +RL uses Ray for distributed execution: + +```python +# cli/commands/nano3/rl.py +from nemo_run.run.ray.job import RayJob + +executor = create_executor(env=env, ...) # Still Slurm for infrastructure +ray_job = RayJob(name=job_name, executor=executor) + +ray_job.start( + command=cmd, + workdir=str(Path.cwd()) + "/", + pre_ray_start_commands=setup_commands, +) +``` + +### Data Prep (Ray + Code Packager) + +Data prep uses Ray with full codebase rsync. The `[tool.runspec]` in the data prep script declares `launch = "ray"`: + +```python +# cli/commands/nano3/data/prep/pretrain.py +SPEC = parse_runspec(SCRIPT_PATH) # launch=ray, cmd template from [tool.runspec] +``` + +## How to Fork for Different Backends + +### Example: Replace nemo-run with SkyPilot + +1. **Read the current execution logic** in `cli/commands/nano3/pretrain.py` + +2. **Replace `_execute_remote()`** with SkyPilot equivalents: + +```python +# cli/commands/nano3/pretrain.py (forked for SkyPilot) + +def _execute_skypilot(cfg: RecipeConfig): + import sky + + # Config loading stays the same + train_config = parse_config(cfg.ctx, SPEC.config_dir, SPEC.config.default) + job_config = build_job_config(train_config, ...) + job_dir = generate_job_dir(SPEC.name) + _, train_path = save_configs(job_config, ..., job_dir) + + task = sky.Task( + run="python main.py --config config.yaml", + workdir=str(job_dir), + num_nodes=env_config.get("nodes", 1), + ) + task.set_resources(sky.Resources( + cloud=sky.AWS(), + accelerators=f"A100:{env_config.get('gpus_per_node', 8)}", + )) + + sky.launch(task, cluster_name="nano3-pretrain") +``` + +3. **Keep config loading** тАУ `nemo_runspec.config` works with any backend + +4. **Keep the `[tool.runspec]` block** тАУ metadata stays with the script + +## Shared Utilities + +Low-level helpers in `nemo_runspec.execution` are shared across commands but keep orchestration visible: + +| Function | Module | Description | +| --- | --- | --- | +| create_executor() | nemo_runspec.execution | Build nemo-run executor from env config | +| build_env_vars() | nemo_runspec.execution | Build environment variables (HF, W&B tokens) | +| execute_local() | nemo_runspec.execution | Local subprocess execution via torchrun | +| get_startup_commands() | nemo_runspec.execution | Extract startup commands from env config | +| ensure_squashed_image() | nemo_runspec.squash | Container squashing for cluster | +| clone_git_repos_via_tunnel() | nemo_runspec.execution | Git repo cloning via SSH tunnel | + +These are utilities, not abstractions. The calling code shows exactly how theyтАЩre used. + +## CLI Behavior Reference + +| Feature | How It Works | +| --- | --- | +| Late globals | split_unknown_args() in parse_recipe_config() | +| Dotlist overrides | Applied during parse_config() via OmegaConf | +| Packager selection | SelfContainedPackager or CodePackager from nemo_runspec.packaging | +| Ray execution | Visible in _execute_remote() functions in RL/data prep commands | +| Build verb | Family-specific build.py dispatchers submit stage-local container builds explicitly | +| Omni3 family layout | Top-level omni3/ mixes build/eval commands with nested data/, model/, and rl/ groups | +| Rich help panels | RecipeTyper + RecipeMeta from nemo_runspec.recipe_typer | +| env.toml profiles | Loaded via nemo_runspec.env.parse_env() with inheritance | diff --git a/docs/fern/pages-vnightly/architecture/design-philosophy.mdx b/docs/fern/pages-vnightly/architecture/design-philosophy.mdx new file mode 100644 index 000000000..aaf8bc1a2 --- /dev/null +++ b/docs/fern/pages-vnightly/architecture/design-philosophy.mdx @@ -0,0 +1,236 @@ +--- +title: "Design Philosophy" +slug: "architecture/design-philosophy.html" +description: "Nemotron is a cookbook, not a framework. Each recipe is a working example of a real training workflow, from data preparation through pretraining, fine-tuning, and reinforcement learning. Everything in" +--- + +Nemotron is a **cookbook**, not a framework. Each recipe is a working example of a real training workflow, from data preparation through pretraining, fine-tuning, and reinforcement learning. Everything in this document follows from that choice. + +A framework gives you building blocks and asks you to assemble them. A cookbook shows you the finished dish: hereтАЩs how we actually trained this model, start to finish. The code is fully runnable, but itтАЩs not meant to be your teamтАЩs production codebase. ItтАЩs a reference implementation. You read it, understand the approach, and adapt the parts you need into your own setup. + +This is a subtle but important distinction. A teamтАЩs codebase evolves around their specific infrastructure, scale, and constraints. A cookbook is optimized for something different: **teaching by showing working examples**. Because itтАЩs a cookbook, we expect every team to customize it тАФ different clusters, different data pipelines, different tracking tools. Customization isnтАЩt an edge case, itтАЩs the whole point. + +That expectation shapes everything about how we write code. We favor clarity over abstraction, self-contained examples over reusable components, and making every step visible over hiding complexity behind convenience wrappers. When the code is explicit, a human can read a recipe and understand what to change. And just as importantly, an LLM or AI agent can too тАФ which means customization can be assisted or fully driven by AI. + +## What We Optimize For + +**LLM-Native Development**: Structure the project so that AI agents and LLMs can easily understand, modify, and extend it. + +We expect users to show up with prompts like: + +> тАЬFork nemotronтАЩs CLI and replace nemo-run with SkyPilotтАЭ +тАЬAdd a new data preprocessing stage to nano3тАЭ +тАЬCustomize the SFT recipe to use my dataset formatтАЭ + +For an LLM to do this well, the codebase must be: + +1. **Readable**: An LLM (or a human new to the project) can understand what the code does by reading it + +2. **Self-contained**: Related logic lives together, not scattered across files + +3. **Forkable**: Easy to copy a module and modify it for your needs + +This is why we optimize for explicitness. When a user says тАЬswap nemo-run for SkyPilotтАЭ, an LLM should be able to read the relevant recipe and make the changes without getting lost in abstractions. This works because recipes are complete, end-to-end examples тАФ not thin wrappers around hidden framework machinery. + +## Design Principles + +### 1. Explicit Over Implicit + +Execution logic lives directly in each command function, not behind decorators or base classes: + +```python +# Recipe metadata comes from PEP 723 [tool.runspec] block in the script itself +SPEC = parse_runspec(SCRIPT_PATH) + +def _execute_pretrain(cfg: RecipeConfig): + # ALL execution logic visible here + train_config = parse_config(cfg.ctx, SPEC.config_dir, SPEC.config.default) + job_config = build_job_config(train_config, ...) + executor = create_executor(env=env, ...) # \<- Can see exactly what's happening + with run.Experiment(name) as exp: + exp.add(script_task, executor=executor) + exp.run() +``` + +An LLM reads one file and sees the full picture: what config is loaded, how the executor is built, how the job is submitted. + +### 2. Self-Describing Recipes + +Recipe scripts declare their own identity and requirements via PEP 723 inline metadata: + +```python +# /// script +# [tool.runspec] +# name = "nano3/pretrain" +# image = "nvcr.io/nvidia/nemo:25.11.nemotron_3_nano" +# +# [tool.runspec.run] +# launch = "torchrun" +# +# [tool.runspec.config] +# dir = "./config" +# default = "default" +# /// +``` + +The CLI layer reads this metadata via `nemo_runspec.parse()` instead of duplicating it. This keeps recipes portable тАУ any tool can read the same metadata. + +### 3. Locality Over DRY + +Keep related code together, even if it means some duplication. + +**Why duplication is sometimes better:** + +- Each command file is self-contained and readable + +- Changes to one command donтАЩt accidentally affect others + +- LLMs can understand one file without tracing through abstractions + +- Forking is easy: copy the file, modify what you need + +**What we donтАЩt share:** + +- High-level orchestration (executor building, experiment running) + +- Command-specific logic + +**What we do share (via `nemo_runspec`):** + +- Low-level utilities (env var building, packager construction) + +- Config loading and merging + +- Help formatting and display + +### 4. Fork Over Extend + +This is the cookbook principle in action: design for copying and modifying, not subclassing. + +**Instead of inheritance hierarchies:** + +```python +# cli/commands/nano3/pretrain.py - just copy and modify this file + +def _execute_skypilot(cfg: RecipeConfig): + import sky + + task = sky.Task( + run="python main.py --config config.yaml", + workdir=str(job_dir), + num_nodes=env_config.get("nodes", 1), + ) + sky.launch(task, cluster_name="nano3-pretrain") +``` + +This is simpler because: + +- No inheritance hierarchy to understand + +- No hook points to find + +- No registration system to configure + +- Just code you can read and change + +## Two-Layer Architecture + +We separate execution (how to run) from runtime (what to run): + +| Layer | Purpose | Change Frequency | +| --- | --- | --- | +| **Execution** (cli/commands/ + nemo_runspec/) | Job submission, tracking, orchestration | When changing backends | +| **Runtime** (recipes/) | Training algorithms, data processing | When changing algorithms | + +The runtime layer is typically a **thin script** that delegates to NVIDIA AI stack libraries: + +| Stage | Script | Library | +| --- | --- | --- | +| Pretrain | train.py | Megatron-Bridge | +| SFT | train.py | Megatron-Bridge | +| RL | train.py | NeMo-RL | +| Data prep | data_prep.py | Nemotron data_prep + Ray | + +The execution layer is one forkable unit. Want SkyPilot + MLflow? Fork the CLI and rewrite it. Runtime scripts stay unchanged because theyтАЩre just thin wrappers around library calls. + +This separation means: + +- Swapping nemo-run for SkyPilot only touches `cli/commands/` + +- Changing training algorithms only touches `recipes/` + +- Each layer can be forked independently + +## Package Boundaries + +| Package | Owns | Does NOT own | +| --- | --- | --- | +| **nemo_runspec** | Runspec parsing, config loading, env.toml, execution helpers, packaging, pipeline, artifact registry | Domain-specific artifact types, W&B integration | +| **nemotron.kit** | Artifact types, lineage trackers, W&B config, training script utilities | CLI, config loading, execution, packaging | +| **nemotron.cli** | Command implementations, typer app tree | Reusable infrastructure | + +Dependency flows one way: `nemotron.cli` -> `nemo_runspec` + `nemotron.kit`. Never the reverse. + +## What This Enables + +### For LLMs + +- **Clear boundaries**: тАЬRead `cli/commands/nano3/pretrain.py`, replace the execution logicтАЭ + +- **No dispatch tables**: No need to understand registration systems + +- **No inheritance**: No base classes to trace + +- **Self-describing scripts**: Metadata lives with the script, not in a separate config + +### For Humans + +- **Visible execution**: Read one file to understand how jobs run + +- **Simple forking**: Copy file, modify, done + +- **Testable runtime**: Training logic is pure and separate + +### For Maintenance + +- **Execution backends donтАЩt couple to algorithms**: Clean separation + +- **Easy to add new models**: Just create new recipe directory + +- **Easy to add new backends**: Just modify CLI layer + +## Trade-offs We Accept + +### More Duplication + +Each command has similar executor setup code. We accept this because: + +- Differences are visible (Slurm vs Ray, torchrun vs not) + +- Changes are local to the file + +- Forking is straightforward + +### Bigger Diffs for Backend Changes + +Changing from nemo-run to SkyPilot requires updating multiple command files. We accept this because: + +- Each update is simple (no abstractions to navigate) + +- The changes are mechanical (same pattern repeated) + +### No Centralized Abstraction + +ThereтАЩs no `run_recipe()` function that handles all execution. We accept this because: + +- Each command shows its own execution path + +- Differences between commands are visible + +- LLMs can understand without tracing through layers + +## References + +- [The Grug Brained Developer](https://grugbrain.dev/) - Complexity bad, simple good + +- [Locality of Behavior](https://htmx.org/essays/locality-of-behaviour/) - Keep related code together diff --git a/docs/fern/pages-vnightly/build-benchmarks/explanation/data-preparation.mdx b/docs/fern/pages-vnightly/build-benchmarks/explanation/data-preparation.mdx new file mode 100644 index 000000000..2620928f4 --- /dev/null +++ b/docs/fern/pages-vnightly/build-benchmarks/explanation/data-preparation.mdx @@ -0,0 +1,179 @@ +--- +title: "Data Preparation for Multiple-Choice Question Benchmarks" +slug: "build-benchmarks/explanation/data-preparation.html" +description: "The prepare stage builds the seed dataset that backs multiple-choice question (MCQ) generation in nemotron steps run byob/mcq." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + +{/* Explanation: how the BYOB prepare stage pairs Hugging Face few-shots with domain text into seed.parquet. */} + +The prepare stage builds the seed dataset that backs multiple-choice question (MCQ) generation in `nemotron steps run byob/mcq`. + +The data preparation stage pairs few-shot rows from your configured Hugging Face benchmark with domain-specific text you place under `input_dir`. + +Each seed row joins exemplar MCQs with local passages so generate can copy structure and vocabulary from the benchmark while staying grounded in your corpus. + +## Why Few-Shot Examples? + +Few-shot rows show answer format, option layout, and tone. +They steer style toward the benchmark you picked and anchor quality on curated source questions instead of inventing layout from scratch. + +## Domain-Specific Data Requirements + +Domain text is what the model reads when it proposes a new question, options, and a correct answer index. + +### Format options + +- Text files, one directory per target key in `target_source_mapping`: + + ```text + input_dir/ + тФЬтФАтФА banking/ + тФВ тФЬтФАтФА intro.txt + тФВ тФФтФАтФА regulations.txt + тФФтФАтФА police/ + тФФтФАтФА main.txt + ``` + +- One Parquet file per target, for example `input_dir/banking.parquet`. + +Each `target_source_mapping` key must match either a directory under `input_dir` or a sibling `*.parquet` basename. + +### Parquet Targets + +Parquet targets must include `text` and `file_name`. +The loader treats each row as `parquet_path:file_name`, so `file_name` acts as the stable document handle inside that table. + +### Content Practices + +- Curate plain text for every target. +One folder such as `medicine` can suffice for a pilot; another team might split into `radiology`, `podiatry`, `clinical_documentation`, and similar labels that mirror internal source taxonomy. + +- Avoid shipping personally identifiable information (PII), or replace sensitive spans with synthetic text before you run the step. + +- Few-shot tag metadata is separate from domain files. +When you set `metadata_file`, you can attach tags to benchmark rows and filter few-shots with per-target `tags`, as described in [Getting the Right Questions From the Source Benchmark](/get-right-questions). + +- Start with data you can legally host in a development environment, then tighten controls before you connect restricted enterprise corpora. + +## Step 1: Load Source Benchmark + +The loader reads `hf_dataset` together with `split`, `subset`, and `source_subjects`, letting `ByobConfig.from_yaml` fill defaults where the YAML omits them. + +Expect question text, labeled choices, a keyed correct answer, subject labels, and optional tag strings when your metadata pipeline populates them. + +### Choosing a Benchmark + +Pick a benchmark whose tone matches the style you want the generator to echo, for example: + +- `cais/mmlu` for broad academic multiple-choice style. + +- `TIGER-Lab/MMLU-Pro` for harder prompts with more reasoning surface. + +- `Idavidrein/gpqa` for graduate-level science questions. + +Authoritative identifiers and default subsets are listed in [Supported Hugging Face Benchmarks](/../reference/benchmarks). + +## Step 2: Filter by Target-Source Mapping + +This stage decides which benchmark rows are eligible before sampling. + +Each target lists `subjects` and optional `tags` (when `metadata_file` is set) using list or weighted-map syntax. + +### Sample Configuration With Weights + +```yaml +target_source_mapping: + banking: + subjects: + management: 0.7 + marketing: 0.3 + tags: + reasoning,unambiguous: 0.8 + knowledge: 0.2 +``` + +The `tags` field always requires `metadata_file` with question-level rows the loader can join. + +### How It Works + +1. Place domain text under `input_dir/banking/` or supply `input_dir/banking.parquet` with the required columns. + +2. Filter few-shot candidates to the listed subjects, then to tag combinations when tags are active. +Subject strings must exist in the Hugging Face split you loaded; confirm spelling on the dataset card. + +3. Weights on `subjects` and `tags` normalize to probabilities. + +4. The Cartesian product of subject and tag choices becomes the sampling categories inside `make_samples`. + +For the `banking` target above, you get four combined categories: + +- `management` + `reasoning,unambiguous`: 0.7 ├Ч 0.8 = 0.56 + +- `management` + `knowledge`: 0.7 ├Ч 0.2 = 0.14 + +- `marketing` + `reasoning,unambiguous`: 0.3 ├Ч 0.8 = 0.24 + +- `marketing` + `knowledge`: 0.3 ├Ч 0.2 = 0.06 + +Strings such as `reasoning,unambiguous` split on commas when matched against metadata, following `mcq/dataset.py`. + +## Step 3: Sample Few-Shot Examples + +```yaml +few_shot_samples_per_query: 1 +``` + +Each query (domain chunk plus its draw) pulls `few_shot_samples_per_query` rows from the filtered benchmark table using the combined weights from Step 2. + +Random draws add diversity, benchmark curation supplies baseline quality, and subject or tag choices keep prompts aligned with each target corpus. +One to three few-shots per query is a common starting point; higher counts improve format mimicry but raise tokens, latency, and cost. + +## Step 4: Load Domain Content + +### Input formats + +- Text files such as `input_dir/banking/intro.txt`. + +- Parquet bundles such as `input_dir/banking.parquet` with `text` and `file_name`. + +### Chunking + +```yaml +chunking_config: + window_size: 4096 # characters; use null for whole-document context +``` + +When `window_size` is a positive integer and the document exceeds the window, `chunk_text` samples a random start and returns exactly `window_size` characters for that query. +When `window_size` is `null`, the loader keeps the entire file as one segment (`segment_start` 0, `segment_end` equal to length). + +Chunking spreads questions across long manuals, exposes different sections per query, and can shrink per-call payloads compared with sending an entire chapter at once. + +## Step 5: Create Seed Dataset + +For every domain document under a target, `make_samples` follows this loop: + +1. Sample `queries_per_target_subject_document` draws from the subject├Чtag distribution. + +2. For each draw, fetch `few_shot_samples_per_query` benchmark rows that satisfy the subject and tag filters. + +3. Attach either the full document or a chunked slice according to `chunking_config`. + +```yaml +queries_per_target_subject_document: 10 +``` + +Rows accumulate in `seed.parquet`. +Refer to [Output Files](/../reference/output-files) for column names. + +Generate then reads those paired fields so the model sees canonical MCQ structure from the benchmark plus grounding text from your files. + +## Next Steps + +- [Question Generation](/question-generation) shows how generate consumes `seed.parquet`. + +- [Pipeline Overview](/pipeline-overview) situates prepare inside the wider `mcq` family. + +- [Generation Configuration Reference](/../reference/generate-config) documents every YAML knob, including chunking and query defaults. diff --git a/docs/fern/pages-vnightly/build-benchmarks/explanation/filtering.mdx b/docs/fern/pages-vnightly/build-benchmarks/explanation/filtering.mdx new file mode 100644 index 000000000..2b79e6aa1 --- /dev/null +++ b/docs/fern/pages-vnightly/build-benchmarks/explanation/filtering.mdx @@ -0,0 +1,138 @@ +--- +title: "Easiness and Hallucination Filtering" +slug: "build-benchmarks/explanation/filtering.html" +description: "Decide which generated multiple-choice question (MCQ) rows look too trivial or unreliable before you export benchmark.parquet, using only configuration and prompts." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + +{/* Explanation: easiness and hallucination scoring, YAML controls, and how rows reach benchmark.parquet. */} + +Decide which generated multiple-choice question (MCQ) rows look too trivial or unreliable before you export `benchmark.parquet`, using only configuration and prompts. + +The `HALLUCINATION_EASINESS_DETECTION` stage runs two prompt families in parallel, each backed by one or more models listed in YAML. +Every row receives numeric scores and boolean flags. +Optional removal rules decide what survives into the final export. + +Artifacts and filenames are listed in [Output Files](/../reference/output-files). +Field-level YAML is documented in [Generation Configuration Reference](/../reference/generate-config). + +## What You Control + +| Control | Purpose | +| --- | --- | +| filtering_model_configs | Which models answer the easiness and hallucination judge prompts. | +| easiness_threshold | When the easiness vote fraction is above this value, the row is marked is_easy. | +| hallucination_threshold | When the hallucination vote fraction is below this value, the row is marked is_hallucination. | +| remove_easy | If true, rows with is_easy drop out of benchmark.parquet during final assembly. | +| remove_hallucinated | If true, rows with is_hallucination drop out of benchmark.parquet during final assembly. | +| prompt_config | null keeps packaged prompts; a path must supply easiness_filter and hallucination_filter blocks. Refer to [Prompt Tuning for Benchmarks](/../how-to/prompt-tuning). | +| ndd_batch_size | Batch size for the Data Designer calls that run this stage. | + +Even when removals are false, `stage_cache/filtered_questions.parquet` keeps `correct_ratio_easiness`, `correct_ratio_hallucination`, `is_easy`, and `is_hallucination` so you can audit scores before tightening thresholds. + +## How the Scores Work + +For each filter family, every configured model returns a parsed letter answer. +The pipeline compares those letters to `answer_generated` on the row. + +- Easiness builds `correct_ratio_easiness` as the fraction of easiness models whose answer matches `answer_generated`. +When that fraction is greater than `easiness_threshold`, `is_easy` is set to true to indicate the item was too easy for the swarm to disagree with. + +- Hallucination builds `correct_ratio_hallucination` the same way for the hallucination model list. +When that fraction is less than `hallucination_threshold`, `is_hallucination` is set to true to indicate that too few models agreed with the generated label. Typically, these need human-in-the-loop review. + +Adding more models under a list increases the denominator of the ratio, so revisit thresholds whenever you add or remove swarm members. + +Each model alias produces its own response column before ratios are computed. +This approach helps to compare votes row by row. + +## Sample Configuration + +The following pattern matches the sample `tiny` configuration: one model per family with aliases that differ from other stages and from each other. + +```yaml +easiness_threshold: 0.8 +hallucination_threshold: 0.5 +remove_hallucinated: false +remove_easy: false +filtering_model_configs: + hallucination: + - alias: hal_gpt-oss-120b + model: openai/gpt-oss-120b + provider: nvidia + inference_parameters: + max_tokens: 1024 + max_parallel_requests: 1 + temperature: 0.0 + top_p: 1.0 + easiness: + - alias: eas_gpt-oss-120b + model: openai/gpt-oss-120b + provider: nvidia + inference_parameters: + max_tokens: 1024 + max_parallel_requests: 1 + temperature: 0.0 + top_p: 1.0 +``` + +### Optional Second Opinion + +Add another list entry when you want independent votes without changing code: + +```yaml +filtering_model_configs: + hallucination: + - alias: hal_primary + model: openai/gpt-oss-120b + provider: nvidia + inference_parameters: + max_tokens: 1024 + temperature: 0.0 + top_p: 1.0 + - alias: hal_backup + model: nvidia/nemotron-3-nano-omni-30b-a3b-reasoning + provider: nvidia + inference_parameters: + max_tokens: 65536 + temperature: 0.2 + top_p: 0.95 + easiness: + - alias: eas_primary + model: openai/gpt-oss-120b + provider: nvidia + inference_parameters: + max_tokens: 1024 + temperature: 0.0 + top_p: 1.0 +``` + +Use a model from a different model family when the generator model is also the primary filter model. +Set each entry to the production models you want in the vote. + +## Removal Defaults + +The `remove_hallucinated` field defaults to true when omitted from YAML, while `remove_easy` defaults to false. +Set both explicitly when you want reproducible behavior across environments. + +```yaml +remove_hallucinated: true +remove_easy: true +``` + +Turn removals off while you tune thresholds, inspect `filtered_questions.parquet`, then re-enable them for production runs. + +## Prompts + +If you specify a custom `prompt_config` file, include the `easiness_filter` and `hallucination_filter` sections expected by validation. +The default configuration files wire those prompts when `prompt_config` is `null`. + +## Related Information + +- [Quality Validation](/quality-validation) for upstream judgement, deduplication, distractors, and outlier stages that feed this step. + +- [Question Generation](/question-generation) for how rows enter the generate pipeline before filtering. + +- [Skip Stages When Iterating](/../how-to/skip-stages) if you need to rerun filtering after tweaking thresholds. diff --git a/docs/fern/pages-vnightly/build-benchmarks/explanation/get-right-questions.mdx b/docs/fern/pages-vnightly/build-benchmarks/explanation/get-right-questions.mdx new file mode 100644 index 000000000..157f381c9 --- /dev/null +++ b/docs/fern/pages-vnightly/build-benchmarks/explanation/get-right-questions.mdx @@ -0,0 +1,77 @@ +--- +title: "Getting the Right Questions From the Source Benchmark" +slug: "build-benchmarks/explanation/get-right-questions.html" +description: "Choose the best rows from the Hugging Face source benchmark, such as Massive Multitask Language Understanding (MMLU), to use as few-shot examples for each target, from broad choices down to very speci" +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + +Choose the best rows from the Hugging Face source benchmark, such as Massive Multitask Language Understanding (MMLU), to use as few-shot examples for each target, from broad choices down to very specific tags. + +You control which source questions appear as few-shots by configuring coarse filters (`split`, `subset`, `hf_dataset`, `source_subjects`) and fine filters (`target_source_mapping`, and optional `tags` backed by `metadata_file`). +The intent is to show the model exemplars that match the subject you are generating for. + +In `nemotron steps run byob/mcq`, each key in `target_source_mapping` must match a folder of `.txt` files or a `*.parquet` file under `input_dir`, not an abstract label on its own. + +## The Funnel: Coarse to Fine-Grained Control + +Most question-answer benchmark datasets expose many subjects, such as astronomy, econometrics, elementary mathematics, nutrition, and so on. +Coarse filters shrink that universe before you attach sources to each local target. + +You can narrow step by step until each target draws from the pool you intend. + +![Funnel from coarse to fine filtering: split, subset, source_subjects, then target_source_mapping with optional subjects and tags per target.](../../../_images/funnel.png) + +**Coarse (top of funnel)** + +- `hf_dataset`: which Hugging Face benchmark to load, for example `cais/mmlu`. + +- `split`: which split to read first, such as `test` or `train`, applied when the loader pulls the benchmark. + +- `subset`: which variant of that benchmark, such as `all` for MMLU or `kn` for MMLU Indic, also applied at load time. + +- `source_subjects`: which benchmark taxonomy labels may appear in the pool. +If you leave this list empty, the pipeline expands it to every subject available for the chosen `hf_dataset`, `subset`, and `split`. +Mappings only sample from subjects that remain in this pool. + +**Finer (middle of funnel)** + +- `target_source_mapping`: for each target key that exists under `input_dir`, you list which source subjects to sample and optionally assign weights. +This ties each corpus folder or Parquet file to the part of the benchmark taxonomy you want the model to imitate. + +**Finest (bottom of funnel)** + +- `tags`: optional. +When `metadata_file` lists question identifiers with tags, each target can filter few-shots further by tag strings such as `reasoning` or `unambiguous`, or by comma-joined combinations such as `reasoning,unambiguous`, optionally with weights. +Tags are the tightest lever on which rows become few-shots. + +## How It Fits Together + +1. Load: the pipeline loads the benchmark for `hf_dataset`, `split`, and `subset`, then keeps only the subjects in `source_subjects`, or all subjects when that list is empty after expansion. + +1. Map: for each target, `target_source_mapping` names source subjects and optional tag sets to sample from. +Source subjects and tags each support explicit weights; otherwise sampling is uniform over the listed entries. + +1. Sample: while building the seed dataset, the prepare step samples subject-tag pairs according to those weights and draws few-shot questions from the filtered source tables. + +The coarse settings define the global pool. +`target_source_mapping`, and tags when enabled, narrow which slice of that pool each target should use when it pairs exemplars with your domain chunks. + +## Configuration at a Glance + +| Control | Where | Effect | +| --- | --- | --- | +| hf_dataset | Top-level config | Which Hugging Face dataset supplies few-shot rows. | +| split | Top-level config | Dataset split, such as test, taken from the source benchmark. | +| subset | Top-level config | Dataset subset, such as all or kn, applied before subject filtering. | +| source_subjects | Top-level config | Restricts which benchmark subjects remain in the pool; an empty list expands to all subjects for the chosen dataset, split, and subset. | +| target_source_mapping | Per target directory or Parquet | For each target under input_dir, which source subjects and optional tags to use, with optional weights. | + +## Related documentation + +- For full option details and validation rules, see [Generation Configuration Reference](/../reference/generate-config). + +- For allowed Hugging Face benchmarks and subsets, see [Supported Hugging Face Benchmarks](/../reference/benchmarks). + +- For how the prepare step uses this mapping to build the seed dataset, see [Data Preparation for Multiple-Choice Question Benchmarks](/data-preparation). diff --git a/docs/fern/pages-vnightly/build-benchmarks/explanation/index.mdx b/docs/fern/pages-vnightly/build-benchmarks/explanation/index.mdx new file mode 100644 index 000000000..80c3061f0 --- /dev/null +++ b/docs/fern/pages-vnightly/build-benchmarks/explanation/index.mdx @@ -0,0 +1,99 @@ +--- +title: "Concepts" +slug: "build-benchmarks/explanation/index.html" +description: "These pages explain how the mcq family inside src/nemotron/steps/byob prepares data, runs each generation stage, and optionally translates benchmarks." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + +These pages explain how the `mcq` family inside `src/nemotron/steps/byob` prepares data, runs each generation stage, and optionally translates benchmarks. + +## Architecture + + + +Prepare, generate, translate, and the Parquet stage cache. + +--- + +stages + + + + + +## Core processes + + + +Seeds from Hugging Face plus local corpus chunks. + +--- + +few-shot + + + + +`source_subjects`, weights, and optional tags. + +--- + +target_source_mapping + + + + +Data Designer batched calls from prepared seeds. + +--- + +generation + + + + + +## Quality assurance + + + +Judgement, deduplication, distractors, coverage, outliers. + +--- + +validation + + + + +Easiness and hallucination scores with removal flags. + +--- + +filtering + + + + + +## Translation + + + +Curator translation, backtranslation, metrics, final schema. + +--- + +translate + + + + + +## Next steps + +- Hands-on first run: [Getting Started with Building MCQ Benchmarks](/../getting-started) + +- YAML tables: [Reference](/../reference/index) diff --git a/docs/fern/pages-vnightly/build-benchmarks/explanation/pipeline-overview.mdx b/docs/fern/pages-vnightly/build-benchmarks/explanation/pipeline-overview.mdx new file mode 100644 index 000000000..fb013717b --- /dev/null +++ b/docs/fern/pages-vnightly/build-benchmarks/explanation/pipeline-overview.mdx @@ -0,0 +1,57 @@ +--- +title: "Pipeline Overview" +slug: "build-benchmarks/explanation/pipeline-overview.html" +description: "The mcq family is registered in runtime/benchmark_families/registry.py and exposes three entrypoints: prepare_data, generate, and translate." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + +The `mcq` family is registered in `runtime/benchmark_families/registry.py` and exposes three entrypoints: `prepare_data`, `generate`, and `translate`. + +`nemotron.steps.byob.scripts.runtime.run_byob` dispatches by `stage`: + +| CLI / YAML stage | Calls | +| --- | --- | +| prepare | prepare_mcq_data | +| generate | generate_mcq | +| translate | translate_mcq | +| all | prepare_mcq_data then generate_mcq | + +`nemotron steps run byob/mcq` executes `mcq/step.py`, which forwards to the BYOB argparse dispatcher in `src/nemotron/steps/byob/scripts/run.py`. + +## Generate stage order + +`generate_mcq` in `runtime/benchmark_families/mcq/pipeline.py` writes Parquet files under `output_dir/expt_name/stage_cache/` in this order: + +1. **GENERATION** тАФ `generated_questions.parquet` + +2. **JUDGEMENT** тАФ `judged_questions.parquet` + +3. **SEMANTIC_DEDUPLICATION** тАФ `semantic_deduplicated_questions.parquet` (skipped body when `semantic_deduplication_config.enabled` is false, but the file still materializes with duplicate flags) + +4. **DISTRACTOR_EXPANSION** тАФ optional when `do_distractor_expansion` is true + +5. **COVERAGE_CHECK** тАФ optional when `do_coverage_check` is true + +6. **DISTRACTOR_VALIDITY_CHECK** тАФ `valid_distractors.parquet` + +7. **SEMANTIC_OUTLIER_DETECTION** тАФ `semantic_outlier_detection.parquet` + +8. **HALLUCINATION_EASINESS_DETECTION** тАФ `filtered_questions.parquet` + +9. **FINAL_OUTPUT** тАФ copies into `benchmark_raw.parquet`, applies `remove_hallucinated` / `remove_easy`, renames columns, and writes `benchmark.parquet` + +## Translate stage order + +`translate_mcq` writes: + +1. **TRANSLATION** тАФ `stage_cache/translated_questions.parquet` + +2. **BACKTRANSLATION** тАФ `stage_cache/backtranslated_questions.parquet` + +3. **QUALITY_METRICS** тАФ `stage_cache/quality_metrics.parquet` + +4. **FINAL_OUTPUT** тАФ `benchmark_raw.parquet`, optional `remove_low_quality` filter, column rename to the MCQ schema, `benchmark.parquet` + +See [Output Files](/../reference/output-files) for the exact filenames. diff --git a/docs/fern/pages-vnightly/build-benchmarks/explanation/quality-validation.mdx b/docs/fern/pages-vnightly/build-benchmarks/explanation/quality-validation.mdx new file mode 100644 index 000000000..0017bbb48 --- /dev/null +++ b/docs/fern/pages-vnightly/build-benchmarks/explanation/quality-validation.mdx @@ -0,0 +1,34 @@ +--- +title: "Quality Validation" +slug: "build-benchmarks/explanation/quality-validation.html" +description: "This page summarizes optional and mandatory checks between generation and the final Parquet export." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + +This page summarizes optional and mandatory checks between generation and the final Parquet export. + +## Judgement + +`judge_questions` scores each candidate against the `judge_model_config` prompt template, producing `judged_questions.parquet`. + +## Semantic deduplication + +When `semantic_deduplication_config.enabled` is true, `TextSemanticDeduplicationMCQ` runs inside `runtime/benchmark_families/mcq/deduplication.py`. +If the flag is false, the stage copies the input and marks `is_duplicate` as false for every row. + +## Distractor expansion and validity + +If `do_distractor_expansion` is true, the pipeline expands four-choice rows toward ten choices, then runs `check_distractor_validity` with `distractor_validity_model_config`. + +## Coverage + +When `do_coverage_check` is true, `TextCoverageMCQ` analyzes whether generated text still reflects the source chunk windows. + +## Semantic outliers + +`semantic_outlier_detection_config.enabled` toggles `TextSemanticOutlierDetectionMCQ`. +When disabled, the stage writes `is_outlier = False` and null neighbour metadata while still emitting the Parquet file expected by later stages. + +Each stage writes its own Parquet under `stage_cache/`; see [Output Files](/../reference/output-files). diff --git a/docs/fern/pages-vnightly/build-benchmarks/explanation/question-generation.mdx b/docs/fern/pages-vnightly/build-benchmarks/explanation/question-generation.mdx new file mode 100644 index 000000000..39ee6a1e9 --- /dev/null +++ b/docs/fern/pages-vnightly/build-benchmarks/explanation/question-generation.mdx @@ -0,0 +1,126 @@ +--- +title: "Question Generation" +slug: "build-benchmarks/explanation/question-generation.html" +description: "Understand how the generate stage turns prepared seeds into new multiple-choice question (MCQ) rows, and which YAML settings you control." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + +{/* Explanation: what operators configure for MCQ generation and what the model receives from seed.parquet. */} + +Understand how the generate stage turns prepared seeds into new multiple-choice question (MCQ) rows, and which YAML settings you control. + +Generation reads `seed.parquet` from the prepare step, batches work through Data Designer using `generation_model_config` and your prompt templates, and writes `stage_cache/generated_questions.parquet` under `output_dir`/`expt_name`. + +For YAML field names and defaults, use [Generation Configuration Reference](/../reference/generate-config). +To override packaged prompts, use [Prompt Tuning for Benchmarks](/../how-to/prompt-tuning). + +## Overview + +Question generation uses few-shot prompting so a configured model can draft MCQs grounded in your domain text. +Each call combines the following inputs: + +- Few-shot exemplars that show the answer format and tone you want, drawn from the Hugging Face benchmark you configured during prepare. + +- Domain passages taken from your `input_dir` corpora and paired in `seed.parquet`. + +- Model parameters under `generation_model_config`, including provider, model id, and `inference_parameters` such as temperature and token limits. + +## Few-Shot Prompting + +### How It Works + +Templates package exemplars and domain text into a single prompt. +The exact layout comes from the packaged defaults when `prompt_config` is `null`, or from your override file when you set `prompt_config` to a path. + +Illustrative shape: + +```text +[Few-shot example 1] +Question: [example question] +Choices: A. [...], B. [...], C. [...], D. [...] +Answer: [correct label] + +[Few-shot example 2] +... + +[Domain passage] +[Your domain-specific text here] + +Generate a question based on the content above, following the format of the examples. +``` + +What the model sees: + +1. Example MCQs in the target shape. + +2. The domain passage the prepare step attached to that row. + +3. Instructions to match the exemplar format. + +What the model returns: + +Structured fields for a four-option item: question text, choice list, and the correct answer key, aligned with the response schema Data Designer expects for this family. + +## Language + +Benchmark few-shots are often English, and many teams pair them with an English-capable model, then run the separate translation stage when they need another locale. + +To skip translation, you need benchmark rows and a model that both support your target language. + +## Row Inputs + +After prepare formats the seed for generation, each batch row carries at least: + +- `text`: domain passage the question must ground on. + +- `few_shot_examples`: formatted benchmark exemplars for the prompt. + +- `target_subject`: which corpus folder or Parquet target produced the row. + +Additional columns such as `source_subject`, `tags`, and `language` are carried through for tracing and templating. +Refer to [Output Files](/../reference/output-files) for the evolving Parquet layout. + +## Model Configuration + +You control cost, latency, and creativity through `generation_model_config`. +A minimal pattern matches the sample configuration files: + +```yaml +generation_model_config: + alias: gpt-oss-120b + model: openai/gpt-oss-120b + provider: nvidia + inference_parameters: + max_tokens: 1024 + max_parallel_requests: 1 + temperature: 0.0 + top_p: 1.0 +``` + +### Temperature and Sampling + +`temperature` controls randomness in the provider request. + +- Values closer to zero usually produce steadier, more repeatable wording. + +- Higher values increase variety but can also increase refusals or off-format answers, so raise them gradually while you watch `generated_questions.parquet`. + +`max_parallel_requests` caps concurrent calls per batch; balance it against provider rate limits. + +## After Generation + +New rows move through validation and cleanup stages before they become `benchmark.parquet`, including judgement, optional semantic deduplication, distractor expansion when enabled, optional coverage scoring, semantic outlier scoring, and easiness or hallucination filtering. + +Read [Quality Validation](/quality-validation) for the full stage list and artifacts, [Easiness and Hallucination Filtering](/filtering) for threshold behavior, and [Output Files](/../reference/output-files) for filenames under `stage_cache/`. + +## Next Steps + +- [Quality Validation](/quality-validation) for the checks that run after `generated_questions.parquet`. + +- [Easiness and Hallucination Filtering](/filtering) for how easy or hallucinated items are removed or retained. + +- [Pipeline Overview](/pipeline-overview) for where generate sits in the `mcq` family. + +- [Data Preparation for Multiple-Choice Question Benchmarks](/data-preparation) for how `seed.parquet` is built upstream. diff --git a/docs/fern/pages-vnightly/build-benchmarks/explanation/translation.mdx b/docs/fern/pages-vnightly/build-benchmarks/explanation/translation.mdx new file mode 100644 index 000000000..469b47183 --- /dev/null +++ b/docs/fern/pages-vnightly/build-benchmarks/explanation/translation.mdx @@ -0,0 +1,119 @@ +--- +title: "Translation" +slug: "build-benchmarks/explanation/translation.html" +description: "Learn how to take an existing benchmark.parquet from generation, translate it to a target locale, score quality with backtranslation metrics, and export another benchmark.parquet." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + +{/* Explanation: translation YAML, quality gates, and operator-visible artifacts for BYOB MCQ translate. */} + +Learn how to take an existing `benchmark.parquet` from generation, translate it to a target locale, score quality with backtranslation metrics, and export another `benchmark.parquet`. + +The field names, defaults, and validation rules are listed in [Translation Configuration Reference](/../reference/translation-config). +Artifact paths are summarized in [Output Files](/../reference/output-files). + +## What You Configure + +| Control | What you set | +| --- | --- | +| dataset_path | Absolute or workspace path to the source benchmark.parquet you want translated. | +| output_dir / expt_name | Where caches and the translated benchmark.parquet are written. | +| source_language / target_language | BCP-47 style tags, for example en-US and hi-IN. | +| translation_model_config | Curator experimental translation block: backend_type, params (model, provider, credentials, inference_parameters), plus optional stage and segment_stage maps. | +| backtranslation_quality_metrics | List of {type, threshold} entries. Each type must be sacrebleu, chrf, or ter; each threshold must be nonnegative. Keep at least one entry so scoring runs; outputs land in quality_metrics.parquet with per-metric scores and is_quality_metric_passed. | +| remove_low_quality | When true (the default if you omit the key), rows that fail the aggregate quality gate are dropped before the final export. When false, every row is kept so you can inspect scores first. | + +Do not set `translation_model_config.stage.enable_faith_eval` to true. +Translation relies on backtranslation metrics instead of FAITH. + +## Running the Translate Stage + +Pass `stage=translate` unless your YAML sets a top-level `stage` key. +The CLI requires an explicit stage when that key is absent. + +```console +uv run nemotron steps run byob/mcq -c translate stage=translate +``` + +## Tune Quality Gates + +The `backtranslation_quality_metrics` field is the only place you define automatic pass or fail rules for backtranslation checks. +Add or remove list entries to change which scores are computed, and adjust `threshold` values when you want stricter or looser gates. + +After a run, open `quality_metrics.parquet` under `output_dir`/`expt_name`/`stage_cache/` to read per-metric score columns and `is_quality_metric_passed` before you change YAML again. + +## Final Filtering Control + +- `remove_low_quality` decides whether failing rows disappear from the exported `benchmark.parquet`. + + ```yaml + remove_low_quality: true # omit to get the same default + ``` + + ```yaml + remove_low_quality: false # keep failing rows; filter manually using Parquet columns + ``` + +## Reference Layout + +The sample `src/nemotron/steps/byob/mcq/config/translate.yaml` file shows a complete `translation_model_config` with `backend_type: llm`, NVIDIA provider parameters, and `stage` / `segment_stage` tuning. +Copy that structure, then swap model IDs, concurrency, and language tags for your workload. + +The YAML below mirrors the sample configu, including `remove_low_quality: false` so rows that fail the aggregate quality gate remain in `benchmark.parquet` and you can inspect `stage_cache/quality_metrics.parquet` while you tune thresholds. + +When you omit `remove_low_quality` or set it to `true`, failing rows are dropped before export. + +```yaml +expt_name: byob_mcq_translation +dataset_path: /path/to/benchmark.parquet +output_dir: /path/to/outputs +source_language: en-US +target_language: hi-IN + +translation_model_config: + backend_type: llm + params: + alias: gpt-oss-120b + model: openai/gpt-oss-120b + provider: nvidia + api_key_env: NGC_API_KEY + inference_parameters: + max_tokens: 16000 + max_parallel_requests: 8 + temperature: 0.0 + top_p: 0.95 + stage: + segmentation_mode: coarse + min_segment_chars: 0 + output_mode: both + segment_stage: + health_check: true + max_concurrent_requests: 8 + +backtranslation_quality_metrics: + - type: sacrebleu + threshold: 25 + - type: chrf + threshold: 50 + - type: ter + threshold: 50 + +remove_low_quality: false +``` + +## Directory Structure + +The translation stage writes intermediate Parquet files to `//` as `translated_questions.parquet`, `backtranslated_questions.parquet`, and `quality_metrics.parquet`, followed by `benchmark_raw.parquet` and the renamed `benchmark.parquet` in the experiment root. +Use the intermediate files to debug language mix-ups, threshold misses, or model refusals before you change configuration again. + +## Related Information + +- [Translation Configuration Reference](/../reference/translation-config) for every required and optional YAML key. + +- [Configure Model Endpoints for BYOB](/../how-to/custom-model-endpoints) for credentials and base URLs on your model blocks. + +- [Skip Stages When Iterating](/../how-to/skip-stages) when you need to rerun only translation or downstream stages after a config tweak. + +- [Pipeline Overview](/pipeline-overview) to see where translate sits after generate. diff --git a/docs/fern/pages-vnightly/build-benchmarks/getting-started.mdx b/docs/fern/pages-vnightly/build-benchmarks/getting-started.mdx new file mode 100644 index 000000000..184f8bc2e --- /dev/null +++ b/docs/fern/pages-vnightly/build-benchmarks/getting-started.mdx @@ -0,0 +1,107 @@ +--- +title: "Getting Started with Building MCQ Benchmarks" +slug: "build-benchmarks/getting-started.html" +description: "In this tutorial, you will:" +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + + + +{/* Tutorial: end-to-end `tiny` BYOB run; about 10 to 15 minutes including model waits; requires Nemotron clone, uv, BYOB extra, and NVIDIA_API_KEY. */} + + + +**In this tutorial, you will**: + +1. Install Python dependencies. + +2. Run the `tiny` configuration from the repository root. + +3. Locate outputs and scan the main Parquet artifacts. + +4. Confirm `benchmark.parquet` columns against the output reference. + + This tutorial requires between 10 and 15 minutes to complete. + + + + +Help me create an MCQ benchmark using the `tiny` configuration from the Nemotron repository clone, write outputs under `./output`, then show me which Parquet files to open first. + + + + + +## Start Here + +- Run all commands from the repository root so the `input_dir` path in the procedure resolves. + +- The sample configuration uses the `cais/mmlu` dataset from Hugging Face for few-shot examples of multiple-choice questions. + +- The sample configuration uses the `src/nemotron/steps/byob/data/tiny_input/maths/tiny.txt` file for input. + + ```default startLine={1} + Algebra studies symbols and the rules for manipulating them. Linear equations can model simple relationships, such as converting between a starting value and a constant rate of change. + ``` + +## Prerequisites + +- You have a host with access to https://integrate.api.nvidia.com. + +- The `uv` tool available in your shell. + +- `NVIDIA_API_KEY` exported in the same shell session before you run the procedure. +The default model for the configuration is `openai/gpt-oss-120b`. + +## Procedure + +1. Clone the repository: + + ```console + git clone https://github.com/NVIDIA-NeMo/Nemotron && cd Nemotron + ``` + +1. From the repository root, add the dependencies for building benchmarks: + + ```console + uv sync --extra byob + ``` + +1. Run generation with host paths. +The `tiny` configuration sets `stage: all`. +This stage setting chains the data preparation and then generation for MCQ. + + ```console + uv run nemotron steps run byob/mcq \ + -c tiny \ + family=mcq \ + stage=all \ + input_dir="./src/nemotron/steps/byob/data/tiny_input" \ + output_dir=./byob-output + ``` + + When the `-c` / `--config` argument is not a path, the command resolves the config file name in the `src/nemotron/steps/byob/mcq/config/` directory. + + When the command finishes, list the `./byob-output/byob_mcq_tiny/` directory. +The `expt_name` field in the `src/nemotron/steps/byob/mcq/config/tiny.yaml` file specifies that directory. +Look for the following files: + + - `stage_cache/*.parquet`, one file per intermediate stage, described in [Output Files](/reference/output-files) + + - `benchmark_raw.parquet`, the full row set before optional removals + + - `benchmark.parquet`, the final `mcq` schema for downstream use + +1. Open `benchmark.parquet` with Pandas, Polars, or another Parquet-aware tool and confirm columns match [Output Files](/reference/output-files). + +## Next Steps + +For background on how stages connect, read [Pipeline Overview](/explanation/pipeline-overview). +For task-focused changes, continue with: + +- Swap in your own corpus and mapping: [Prepare Your Own Domain Data](/how-to/prepare-data). + +- Tune endpoints and keys: [Configure Model Endpoints for BYOB](/how-to/custom-model-endpoints). diff --git a/docs/fern/pages-vnightly/build-benchmarks/how-to/custom-model-endpoints.mdx b/docs/fern/pages-vnightly/build-benchmarks/how-to/custom-model-endpoints.mdx new file mode 100644 index 000000000..72fe43155 --- /dev/null +++ b/docs/fern/pages-vnightly/build-benchmarks/how-to/custom-model-endpoints.mdx @@ -0,0 +1,39 @@ +--- +title: "Configure Model Endpoints for BYOB" +slug: "build-benchmarks/how-to/custom-model-endpoints.html" +description: "BYOB does not ship model weights. Instead, YAML blocks describe OpenAI-compatible clients for each stage that calls a language model." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + +BYOB does not ship model weights. +Instead, YAML blocks describe OpenAI-compatible clients for each stage that calls a language model. + +## Generation and judgement + +`generation_model_config` and `judge_model_config` are required mappings. +They follow the same structure you see in `src/nemotron/steps/byob/mcq/config/default.yaml`: `alias`, `model`, `provider`, and nested `inference_parameters` such as `max_tokens`, `max_parallel_requests`, `temperature`, and `top_p`. + +`setup_model_config` in `runtime/data_designer_utils.py` reads these blocks when Data Designer runs batched stages. + +## Distractor and validity stages + +When `do_distractor_expansion` is true, `distractor_expansion_model_config` must be present. +`distractor_validity_model_config` is always required in the current schema validation. + +## Filtering swarm + +`filtering_model_configs` contains two lists, `hallucination` and `easiness`. +Each list entry needs a unique `alias` across both lists. +The structure mirrors other model blocks so you can aim filters at different endpoints than the generator. + +## Translation models + +Translation uses `translation_model_config` in `translate.yaml`. +`backend_type`, `params` (including `api_key_env` and `base_url`), and nested `stage` / `segment_stage` keys are passed into CuratorтАЩs experimental translation pipeline. + +## API keys + +Model blocks may set `api_key_env` to read secrets from the environment (for example `NGC_API_KEY` in the sample translation config). +Set those variables in the shell that launches `nemotron steps run`. diff --git a/docs/fern/pages-vnightly/build-benchmarks/how-to/domain-data.mdx b/docs/fern/pages-vnightly/build-benchmarks/how-to/domain-data.mdx new file mode 100644 index 000000000..db16867d8 --- /dev/null +++ b/docs/fern/pages-vnightly/build-benchmarks/how-to/domain-data.mdx @@ -0,0 +1,115 @@ +--- +title: "Using Your Own Domain Data" +slug: "build-benchmarks/how-to/domain-data.html" +description: "Use this tutorial to learn how to build your own benchmark with your own domain text." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + +{/* How-to: lay out bring your own benchmark (BYOB) `input_dir` with one UTF-8 `.txt` corpus per `target_source_mapping` key. Use when you supply your own domain text and need the directory layout the prepare step expects. */} + +Use this tutorial to learn how to build your own benchmark with your own domain text. + +You will create a parent folder, your `input_dir`, with one subdirectory per key in `target_source_mapping`, each holding UTF-8 `.txt` files the prepare stage can sample. + +When you finish the steps below, the prepare stage can build stems from your corpora together with your Hugging Face subject wiring. + +- Each directory name directly under `input_dir` must match a key in `target_source_mapping`, for example `banking`, `police`, or `maths`. + +- Split long material across several `.txt` files when you want different documents to drive different queries. + +- Set `input_dir` in YAML to the parent directory so `uv run nemotron steps run byob/mcq` resolves relative paths from the shell working directory, or use an absolute path for a fixed location. + +## Step 1: Create Target Directories + +Create one folder per entry you plan under `target_source_mapping`. + +```bash +# Example layout next to your workspace; adjust paths to match your machine. +mkdir -p ./data/byob/banking +mkdir -p ./data/byob/police +mkdir -p ./data/byob/maths +``` + +Path tips: + +- Prefer absolute paths in YAML when several people reuse the same file from different working directories. + +- Relative paths resolve from the shell working directory where you invoke `uv run nemotron steps run byob/mcq`. + +The pipeline resolves `input_dir` relative to that working directory. +If you need a fixed location regardless of where people run the command, set `input_dir` to an absolute path in YAML. + +Do not use Hugging Face subject names as directory names; use the same strings you use as keys under `target_source_mapping`. +Few-shot subjects such as `high_school_mathematics` still belong under `source_subjects` and under each targetтАЩs `subjects` field. + +## Step 2: Add Text Files + +Place UTF-8 text under each target directory. +Use several smaller files instead of one huge blob when you want different documents to drive different queries. + +```bash +cat > ./data/byob/banking/intro.txt \<\< 'EOF' +Modern banking in India originated in the mid-18th century... +EOF +``` + +Read the sample `src/nemotron/steps/byob/data/tiny_input/maths/tiny.txt` file for tone and length. + +## Step 3: Point YAML at the Parent Directory + +Set `input_dir` to the parent of those directories and wire few-shot subjects your Hugging Face split actually contains. + +```yaml +input_dir: ./data/byob +hf_dataset: cais/mmlu +subset: all +split: test +source_subjects: + - high_school_mathematics + +target_source_mapping: + banking: + subjects: + - business_ethics + - econometrics + police: + subjects: + - jurisprudence + - international_law + maths: + subjects: + - high_school_mathematics +``` + +Allowed `hf_dataset` values and default `subset` / `split` behavior are listed in [Supported Hugging Face Benchmarks](/../reference/benchmarks). + +## Best Practices + +### Content Quality + +- Aim for a few thousand characters per document when you want diverse stems without exhausting context. + +- Prefer complete explanations over fragments so judges and filters see coherent context. + +- Strip or replace personally identifiable information before you run in shared environments. + +### Organization + +- Keep one domain taxonomy per directory; do not mix unrelated subjects under the same target key. + +- Split long manuals into several `.txt` files so `queries_per_target_subject_document` can visit different offsets. + +### Performance and Chunking + +- Pilot with a handful of documents per target before scaling out. + +- Use `chunking_config.window_size` when you need sliding windows over very long text; `null` keeps each file as one unit. +Field detail is in [Generation Configuration Reference](/../reference/generate-config). + +## Next Steps + +- Run prepare alone or the full pipeline after you align YAML: [Prepare Your Own Domain Data](/prepare-data). + +- Inspect `seed.parquet` and downstream paths in [Output Files](/../reference/output-files). diff --git a/docs/fern/pages-vnightly/build-benchmarks/how-to/index.mdx b/docs/fern/pages-vnightly/build-benchmarks/how-to/index.mdx new file mode 100644 index 000000000..d86d0748a --- /dev/null +++ b/docs/fern/pages-vnightly/build-benchmarks/how-to/index.mdx @@ -0,0 +1,87 @@ +--- +title: "How-To Guides" +slug: "build-benchmarks/how-to/index.html" +description: "Task-focused guides for nemotron steps run byob/mcq with the mcq family." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + +Task-focused guides for `nemotron steps run byob/mcq` with the `mcq` family. + +Start with [Getting Started with Building MCQ Benchmarks](/../getting-started) if you have not produced `benchmark.parquet` yet. + +## Setup and configuration + + + +Lay out `input_dir`, text or Parquet inputs, and `target_source_mapping`. + +--- + +input_dir + + + + +Create per-target directories of `.txt` files and match them to YAML. + +--- + +corpus + + + + +Configure OpenAI-compatible providers for generation, judgement, expansion, validity, and filters. + +--- + +yaml + + + + + +## Advanced workflows + + + +Point `prompt_config` at a YAML file that defines stage templates. + +--- + +prompt + + + + +Resume with `skip_until` and cached Parquet files. + +--- + +iteration + + + + + +## Workflow overview + +```mermaid +flowchart LR + A[Prepare data layout] --> B[Edit YAML] + B --> C[uv run nemotron steps run byob/mcq] + C --> D{Need translation?} + D -->|yes| E[translate config + passthrough] + D -->|no| F[Done] + E --> F + C -.->|iterate| G[skip_until] + G --> C +``` + +## Related documentation + +- [Concepts](/../explanation/index) тАФ how each stage behaves. + +- [Reference](/../reference/index) тАФ full field lists and allowed datasets. diff --git a/docs/fern/pages-vnightly/build-benchmarks/how-to/prepare-data.mdx b/docs/fern/pages-vnightly/build-benchmarks/how-to/prepare-data.mdx new file mode 100644 index 000000000..a77b61965 --- /dev/null +++ b/docs/fern/pages-vnightly/build-benchmarks/how-to/prepare-data.mdx @@ -0,0 +1,94 @@ +--- +title: "Prepare Your Own Domain Data" +slug: "build-benchmarks/how-to/prepare-data.html" +description: "This guide shows how to place domain text under input_dir, map each target key in target_source_mapping, and set the positive integers that control how much work prepare does per document." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + +{/* How-to: lay out `input_dir`, wire `target_source_mapping`, and set sampling counts before running the prepare stage. Use when you already have a BYOB configuration and need a concrete checklist for local inputs. */} + +This guide shows how to place domain text under `input_dir`, map each target +key in `target_source_mapping`, and set the positive integers that control how +much work prepare does per document. + +Use this guide when your configuration points at local sources and you want to +validate layout before you run prepare or the full pipeline. + +For how prepare joins few-shot rows and domain text, see +[Data Preparation for Multiple-Choice Question Benchmarks](/../explanation/data-preparation). +For a filesystem-first walkthrough of directories and Parquet basenames, see [Using Your Own Domain Data](/domain-data). +Field-by-field options for the whole step live in [Generation Configuration Reference](/../reference/generate-config). + +## Directory Layout + +The prepare stage reads domain text from `input_dir` and pairs each passage with +few-shot rows from the Hugging Face dataset named in `hf_dataset`. + +For each key in `target_source_mapping`, supply one of the following next to +`input_dir`: + +- A directory `input_dir//` that contains at least one `.txt` file. + +- A Parquet file `input_dir/.parquet` whose rows include the columns the +loader expects, described in [Data Preparation for Multiple-Choice Question Benchmarks](/../explanation/data-preparation). + +If both a directory and a file named `.parquet` exist, the loader +prefers the directory and logs a warning. + +## Source Subjects And Mapping + +In this step, a *target subject* is one key in `target_source_mapping` on the +domain side of the pairing. + +The `source_subjects` lists benchmark subjects from the Hugging Face dataset that +you are allowed to sample as few-shot sources. +Every name that appears under a targetтАЩs `subjects` field must also appear in +`source_subjects`, or validation fails. + +Each target entry in `target_source_mapping` carries a `subjects` value in one +of two shapes: + +- A list of source subject names selects those rows with uniform weights. + +- An empty list means use every entry in `source_subjects`, again with uniform +weights. + +- A mapping from source subject name to a non-negative weight defines a +weighted mixture, and weights must sum to a value greater than zero. +The loader normalizes them internally. + +Optional `tags` on a target pair with `metadata_file` when you supply tag +metadata from a file. +If `metadata_file` is absent, do not set `tags`, because validation rejects that +combination. + +## Few-Shot and Query Counts + +These positive integers live in the same configuration as the rest of the step +and control how much generation work each stored document drives: + +- `few_shot_samples_per_query` caps how many few-shot exemplar rows feed each +query. + +- `queries_per_target_subject_document` sets how many queries run per domain +document. + +- `num_questions_per_query` sets how many questions each query produces. + +They must all be greater than zero. +Short definitions also appear in the tables under [Generation Configuration Reference](/../reference/generate-config). + +## Hugging Face Dataset + +Set `hf_dataset` to one of the identifiers listed in [Supported Hugging Face Benchmarks](/../reference/benchmarks). +If you omit `subset` or `split`, defaults come from `HF_DATASET_TO_SUBSET` and +the loader logic in `ByobConfig.from_yaml`. + +## Run Prepare Alone + +Set `stage: prepare` in your configuration file. + +Prepare writes the seed artifact that generate consumes. +The file names and roles are listed in [Output Files](/../reference/output-files). diff --git a/docs/fern/pages-vnightly/build-benchmarks/how-to/prompt-tuning.mdx b/docs/fern/pages-vnightly/build-benchmarks/how-to/prompt-tuning.mdx new file mode 100644 index 000000000..f91198c71 --- /dev/null +++ b/docs/fern/pages-vnightly/build-benchmarks/how-to/prompt-tuning.mdx @@ -0,0 +1,238 @@ +--- +title: "Prompt Tuning for Benchmarks" +slug: "build-benchmarks/how-to/prompt-tuning.html" +description: "The build-your-own benchmark (BYOB) pipeline for multiple-choice questions (MCQs) runs several stages that each call a large language model (LLM). Each stage reads prompt text from your configuration." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + +{/* How-to: point `prompt_config` at a YAML override for BYOB MCQ stages, keep placeholders valid, and run the step. Use when packaged prompts are close but you need different wording or guardrails. */} + + + +The build-your-own benchmark (BYOB) pipeline for multiple-choice questions (MCQs) runs several stages that each call a large language model (LLM). +Each stage reads prompt text from your configuration. +You can replace the packaged wording to change tone, difficulty, guardrails, and output shape while keeping the same pipeline contract. + +Use this guide when packaged prompts are almost right and you want different instructions, tone, or few-shot examples without changing stage order or the expected output shape. + +For every field on the main experiment YAML file, see [Generation Configuration Reference](/../reference/generate-config). +For load-time validation errors, see [Troubleshooting](/../reference/troubleshooting). + +## Point the experiment file at your prompts + +Leave `prompt_config` set to `null` when the packaged prompts are acceptable. + +Set `prompt_config` to a filesystem path when you want a full override file for all six stages. +The path is read when the configuration loads, so the file must exist and be readable at that moment. +Relative paths resolve from the shell working directory where you launch `nemotron`, not from the directory that contains your main configuration file. +Use an absolute path when you want the same resolution no matter which directory you run from. + +```yaml +prompt_config: /path/to/my_prompts.yaml +``` + +Run the step as usual. + +```console +$ uv run nemotron steps run byob/mcq -c /path/to/config.yaml +``` + +If any required stage is missing, if either string under a stage is absent, or if a value is not a string, validation stops before the pipeline starts and reports the failing field. + +The samples that you can copy from are in `src/nemotron/steps/byob/runtime/benchmark_families/mcq/prompts/` in the Nemotron repository, one module per stage. + +## Structure of the Prompt YAML File + +Create one YAML file that defines all six stages. +Each stage is a mapping with exactly two string keys, `system_prompt` and `prompt`. +Multi-line strings are fine when you use YAML block scalars. + +The loader treats a custom file as all-or-nothing. +You must include every stage even when you only intend to change one of them. + +### Required Stages + +| Stage key | Role in the pipeline | +| --- | --- | +| qa_generation | Creates new questions with four choices from the seed passage and few-shot examples. | +| question_judge | Scores clarity, validity, and knowledge versus reasoning style. | +| hallucination_filter | Asks filter models to answer with the passage present to catch unsupported content. | +| easiness_filter | Asks filter models to answer without the passage to catch questions that are too easy. | +| distractor_expansion | Adds six distractors when expansion is enabled in the main configuration file. | +| distractor_validity | Checks that only the labeled answer is correct given the passage. | + +## How Placeholders Work + +Prompt strings are not plain static prose. +They carry two different kinds of markers, and some stages use both kinds in the same string. + +*NeMo Data Designer* substitutes *seed column* markers. +After any earlier formatting, those markers look like `\{\{column_name\}\}` and pull values from the CSV row the stage is processing. + +Some stages run an earlier pass that substitutes *run-parameter* markers written with single braces, such as `\{num_questions\}`. +Those values come from your main experiment configuration file or from small integers the pipeline derives before Data Designer runs. + +Packaged templates sometimes show column names with four braces, for example `\{\{\{\{target_subject\}\}\}\}`. +That pattern survives the run-parameter pass and leaves a normal `\{\{target_subject\}\}` marker for Data Designer. + +If a stage forwards both strings as written, the pipeline does not apply the single-brace pass. +Every `\{\{column_name\}\}` token you leave in YAML must match a real column in that stageтАЩs seed data. + +### Common Run-Parameter Tokens + +- `\{num_few_shot_samples\}` is the few-shot count from the main configuration file. + +- `\{num_questions\}` is the questions per query from the main configuration file. + +- `\{num_choices\}` either rewritten for filter stages so Data Designer can inject `\{\{num_choices\}\}`, or replaced with the integer `4` or `10` for distractor validityтАЩs system prompt. + +- `\{choices\}` rewritten during filtering so Data Designer receives `\{\{choices_text\}\}` for the rendered choice list on each row. + +### Column Markers Copied from Packaged Templates + +The list below shows fields that appear in the sample files. +Quadruple-brace forms are common in `qa_generation` and in some filter user prompts. +Judging prompts use ordinary double braces because that stage is forwarded as written. + +- `\{\{\{\{target_subject\}\}\}\}` тАФ subject label for the target passage. + +- `\{\{\{\{text\}\}\}\}` тАФ source passage body. + +- `\{\{\{\{few_shot_examples\}\}\}\}` тАФ serialized few-shot examples. + +- `\{\{\{\{language\}\}\}\}` тАФ target locale string for generation. + +- `\{\{\{\{question_generated_formatted\}\}\}\}` тАФ question plus choices as produced upstream. + +- `\{\{question\}\}` тАФ generated question text for the judge stage. + +## Example: QA Generation Block + +Use the layout from `src/nemotron/steps/byob/runtime/benchmark_families/mcq/prompts/qa_generation.py` as a starting point when you author your own file. + +```yaml +qa_generation: + system_prompt: | + You are an expert in creating questions from a description of a given topic. + You will be given \{num_few_shot_samples\} example questions and answers unrelated to the topic. + + You should + 1. Create \{num_questions\} questions, four choices and answers similar to the example question answer. + 2. Follow the question style of the example question answers (Direct WH question/Completion/Best explanation/Best action/Equivalence/Other). + 3. Try to create questions that are higher in the cognitive level scale, by mostly using concepts from the text passage. + 4. The questions should not explicitly refer to the passage or example question answer. + 5. Assume that the person reading the questions does not have access to the passage or example question answer. So make the question clear as to what the topic is. + prompt: | + Definition of cognitive level (higher is better): + 1: Recall + The question asks for recall of isolated facts, definitions, or simple formulas (e.g., тАЬWhat is the full form of SEBI?тАЭ). + + 2: Understanding + The question checks comprehension of concepts, classifications, or simple explanations (e.g., interpret what an LTV ratio means for a borrower). + + 3: Application + The question requires using a concept, rule, or formula in a straightforward, familiar situation (e.g., compute postтАСtax return on a fixed deposit given basic data). + + 4: Analysis + The question involves breaking down information, comparing alternatives, or identifying relationships/causes (e.g., infer the impact of an RBI rate change on bond prices or bank NIMs). + + 5: Evaluate + The question requires judgment among alternatives based on criteria, or synthesizing information to choose the best course of action or construct a plan (e.g., select the most appropriate investment strategy for a given Indian retail investor scenario). + + Create \{num_questions\} questions, four choices and answers for the given topic: + Topic: {{{\{target_subject\}}}} + \ + {{{\{text\}}}} + \ + + Now make \{num_questions\} questions, four choices and answers for the topic similar to the example question answer. Don't make the answer too obvious. + + Example questions and answers:- + {{{\{few_shot_examples\}}}} + + Write the questions and options in the language: {{{\{language\}}}} + Return the questions in JSON format with each question having the following fields: + - question: The question + - choice_a: The first choice (A) + - choice_b: The second choice (B) + - choice_c: The third choice (C) + - choice_d: The fourth choice (D) + - answer: The answer (A/B/C/D) +``` + +## Shorter Excerpts for Other Stages + +Use these fragments when you want a quick visual check that a stage matches your expectations. + +### Judging + +Forwarded as written, so only double-brace column names appear. + +```text +Here is the question: +Question: {\{question\}} +``` + +### Filtering + +The system line keeps `\{num_choices\}` in YAML. +The pipeline rewrites it so Data Designer later fills `\{\{num_choices\}\}` per row. + +```text +You are answering a multiple-choice question with \{num_choices\} choices. +You will be given a passage on a topic and a question and a list of choices. +``` + +The hallucination user prompt carries passage markers, the formatted question, and `\{choices\}`, which becomes `\{\{choices_text\}\}` for Data Designer. + +```text +Topic: {{{\{target_subject\}}}} +\ +{{{\{text\}}}} +\ + +Answer the following question: + +{{{\{question_generated_formatted\}}}} + +The answer should be one of \{choices\}. Think step by step and then finish your answer with "The answer is (X)" where X is the correct letter choice. +``` + +The easiness filter reuses the same `\{num_choices\}` and `\{choices\}` contract on the system and user strings but omits the topic and passage block. +Copy each filter stage from its own packaged default instead of swapping strings between them. + +### Distractor Validity + +Only the system line runs the single-brace pass, replacing `\{num_choices\}` with the integer `4` or `10`. + +```text +The question claims that there is only one correct answer among the \{num_choices\} choices. +``` + +The user `prompt` is forwarded as written; keep its `\{\{column\}\}` names aligned with the packaged file. + +## Stage-by-Stage Formatting Checklist + +Use this table when you need a compact reminder of where single-brace substitution runs. + +| Stage | Single-brace pass on system_prompt | Single-brace pass on prompt | +| --- | --- | --- | +| qa_generation | Yes, {num_few_shot_samples} and {num_questions} | Yes, {num_questions} only | +| question_judge | No | No | +| hallucination_filter | Yes, {num_choices} becomes {{num_choices}} | Yes, {choices} becomes {{choices_text}} | +| easiness_filter | Same as hallucination | Same as hallucination | +| distractor_expansion | No | No | +| distractor_validity | Yes, {num_choices} becomes 4 or 10 | No | + +`distractor_expansion` is fully forwarded, so treat it like judging for placeholder editing rules. + +## Practical Tips + +Duplicate an entire packaged stage before you delete lines. +Partial copies are the most common source of missing `\{\{column\}\}` names. + +When you only need small wording edits, change sentences around the placeholder lines first and leave the markers alone until you must move them. + +You must still ship `hallucination_filter` and `easiness_filter` blocks in your override file even when your edits focus on question generation. diff --git a/docs/fern/pages-vnightly/build-benchmarks/how-to/skip-stages.mdx b/docs/fern/pages-vnightly/build-benchmarks/how-to/skip-stages.mdx new file mode 100644 index 000000000..be2d52ba8 --- /dev/null +++ b/docs/fern/pages-vnightly/build-benchmarks/how-to/skip-stages.mdx @@ -0,0 +1,42 @@ +--- +title: "Skip Stages When Iterating" +slug: "build-benchmarks/how-to/skip-stages.html" +description: "Both generate and translate honor skip_until, a string that names an enum entry on the internal stage list. Stages whose enum value is less than the named stage are skipped as long as the expected Par" +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + +Both **generate** and **translate** honor `skip_until`, a string that names an enum entry on the internal stage list. +Stages whose enum value is **less than** the named stage are skipped as long as the expected Parquet already exists. + +## Generation enum names + +From `McqGenerationStage` in `runtime/benchmark_families/mcq/pipeline.py`, valid names include: + +`GENERATION`, `JUDGEMENT`, `SEMANTIC_DEDUPLICATION`, `DISTRACTOR_EXPANSION`, `COVERAGE_CHECK`, `DISTRACTOR_VALIDITY_CHECK`, `SEMANTIC_OUTLIER_DETECTION`, `HALLUCINATION_EASINESS_DETECTION`, `FINAL_OUTPUT` + +## Translation enum names + +From `McqTranslationStage`: + +`TRANSLATION`, `BACKTRANSLATION`, `QUALITY_METRICS`, `FINAL_OUTPUT` + +## CLI usage + +Pass the resume point as a dotlist override: + +```console +uv run nemotron steps run byob/mcq -c /path/to/generate.yaml skip_until=JUDGEMENT +``` + +```console +uv run nemotron steps run byob/mcq -c translate stage=translate skip_until=BACKTRANSLATION +``` + +## Preconditions + +Skipping only works when the Parquet file produced by the previous stage is already on disk under `output_dir/expt_name/stage_cache/`. +Otherwise the next stage reads missing input and fails. + +For other common failure modes, see [Troubleshooting](/../reference/troubleshooting). diff --git a/docs/fern/pages-vnightly/build-benchmarks/index.mdx b/docs/fern/pages-vnightly/build-benchmarks/index.mdx new file mode 100644 index 000000000..0cd7bad72 --- /dev/null +++ b/docs/fern/pages-vnightly/build-benchmarks/index.mdx @@ -0,0 +1,160 @@ +--- +title: "About Building Multiple-Choice Question Benchmarks" +slug: "build-benchmarks/index.html" +description: "This section describes how to build a custom multiple-choice question (MCQ) benchmark as Apache Parquet files with the nemotron steps run byob/mcq command. You supply domain text files under input_dir" +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + + + +{/* Explanation and navigation hub for the bring your own benchmark (BYOB) MCQ series. */} + +This section describes how to build a custom multiple-choice question (MCQ) benchmark as Apache Parquet files with the `nemotron steps run byob/mcq` command. +You supply domain text files under `input_dir`, and the pipeline samples few-shot exemplars from a Hugging Face benchmark named in your configuration, such as `cais/mmlu`. +The configuration specifies subject filters such as `high_school_mathematics`. + +The benchmark step prepares seed rows, generates and judges questions, runs optional deduplication and distractor stages, and writes `benchmark.parquet`. +An optional translation stage reads an existing benchmark and writes another `benchmark.parquet` with the same column layout. + + +New to this flow? Follow [Getting Started with Building MCQ Benchmarks](/getting-started) once, then use the grids and tables below to jump to how-to guides, concepts, or reference pages. + + + +## When to Use + +The `nemotron steps run byob/mcq` command enables the following outcomes. + +- Questions grounded in your own documents, paired with few-shot items from a public benchmark subject you declare in configuration. + +- A repeatable Parquet artifact, one experiment folder under your configured `output_dir`, plus intermediate caches when you iterate. + +- Optional translation with forward passes, backtranslation, and metric thresholds before you export another Parquet benchmark. + +## Pipeline Summary + +At a high level, the benchmark step performs the following work. + +1. Prepare: sample few-shot examples and align them with chunks from your corpus into a seed dataset. + +2. Generate: run the staged MCQ pipeline from generation through filtering into `benchmark_raw.parquet` and `benchmark.parquet`. + +3. Translate, optional: translate questions and options, score backtranslation quality, and export a new `benchmark.parquet`. + +## Documentation Series + + + +Install the `byob` extra, run the sample `tiny` configuration with local paths, and inspect Parquet outputs. +The `tiny` fixture pairs `cais/mmlu` high school mathematics few-shots with a one-line input file related to algebra. + +--- + +hands-on + + + + +Prepare data, tune models in YAML, customize prompts, and resume with `skip_until`. + +--- + +task-based + + + + +How prepare, generate, and translate stages fit together and what each configuration block does. + +--- + +concept-focused + + + + +Supported Hugging Face datasets, Parquet outputs, and YAML fields. + +--- + +specification + + + + + +## All Documentation + + + + +| Guide | What you will do | +| --- | --- | +| [Getting Started with Building MCQ Benchmarks](/getting-started) | Run nemotron steps run byob/mcq with tiny and inspect outputs | + + + + +| Guide | What you will do | +| --- | --- | +| [Prepare Your Own Domain Data](/how-to/prepare-data) | Lay out input_dir and target_source_mapping | +| [Using Your Own Domain Data](/how-to/domain-data) | Lay out per-target .txt corpora under input_dir | +| [Configure Model Endpoints for BYOB](/how-to/custom-model-endpoints) | Point generation, judgement, and filter models at your endpoints | +| [Prompt Tuning for Benchmarks](/how-to/prompt-tuning) | Override prompts with a YAML file | +| [Skip Stages When Iterating](/how-to/skip-stages) | Resume after intermediate Parquet caches | + + + + +| Guide | What you will learn | +| --- | --- | +| [Pipeline Overview](/explanation/pipeline-overview) | Stage order for prepare, generate, and translate | +| [Data Preparation for Multiple-Choice Question Benchmarks](/explanation/data-preparation) | Seeds, chunking, and the prepare step | +| [Getting the Right Questions From the Source Benchmark](/explanation/get-right-questions) | source_subjects and target_source_mapping | +| [Question Generation](/explanation/question-generation) | Data Designer batched generation | +| [Quality Validation](/explanation/quality-validation) | Judgement, deduplication, distractors, coverage, outliers | +| [Easiness and Hallucination Filtering](/explanation/filtering) | Easiness and hallucination filters | +| [Translation](/explanation/translation) | Curator translation and backtranslation metrics | + + + + +| Guide | What you will find | +| --- | --- | +| [Output Files](/reference/output-files) | Paths under output_dir / expt_name | +| [Troubleshooting](/reference/troubleshooting) | Symptom-to-fix index for BYOB runs | +| [Supported Hugging Face Benchmarks](/reference/benchmarks) | Allowed hf_dataset values and default subsets | +| [Generation Configuration Reference](/reference/generate-config) | Generation YAML keys | +| [Translation Configuration Reference](/reference/translation-config) | Translation YAML keys | + + + + + +## What You Need + +- A Nemotron clone with dependencies installed, including the `byob` extra from `uv sync --extra byob`. + +- Model credentials and endpoints that match the `generation_model_config`, `judge_model_config`, and related blocks in your YAML, as described in [Configure Model Endpoints for BYOB](/how-to/custom-model-endpoints). + +- Network access to download the configured Hugging Face benchmark split unless it is already cached on disk. + +## Quick Start + +1. Follow [Getting Started with Building MCQ Benchmarks](/getting-started) if you have not run the step yet. + +2. Read [Prepare Your Own Domain Data](/how-to/prepare-data) when you are ready to point the pipeline at your own corpus and mapping. + +3. Open [Generation Configuration Reference](/reference/generate-config) or [Translation Configuration Reference](/reference/translation-config) when you need field-level YAML detail. + +## Limitations and Considerations + +- Cost: generation, judgement, expansion, validity checks, and filters call remote models whenever you configure them to do so. + +- Time: full runs depend on corpus size, model latency, and which optional stages stay enabled. + +- Rate limits: hosted APIs may throttle parallel requests that you set under `inference_parameters`. + +- Curator mount: checked-in configurations mount NeMo Curator from Git for translation and deduplication-related paths, so remote profiles must expose that tree the same way your environment expects. diff --git a/docs/fern/pages-vnightly/build-benchmarks/reference/benchmarks.mdx b/docs/fern/pages-vnightly/build-benchmarks/reference/benchmarks.mdx new file mode 100644 index 000000000..ebff40978 --- /dev/null +++ b/docs/fern/pages-vnightly/build-benchmarks/reference/benchmarks.mdx @@ -0,0 +1,26 @@ +--- +title: "Supported Hugging Face Benchmarks" +slug: "build-benchmarks/reference/benchmarks.html" +description: "hf_dataset in your generation YAML must be one of the strings in ALLOWED_HF_DATASETS inside src/nemotron/steps/byob/runtime/constants.py." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + +`hf_dataset` in your generation YAML must be one of the strings in `ALLOWED_HF_DATASETS` inside `src/nemotron/steps/byob/runtime/constants.py`. + +If you omit `subset` in YAML, `ByobConfig.from_yaml` substitutes the default from `HF_DATASET_TO_SUBSET`. + +| hf_dataset | Default subset when omitted | +| --- | --- | +| cais/mmlu | all | +| TIGER-Lab/MMLU-Pro | default | +| ai4bharat/MILU | English | +| CohereLabs/Global-MMLU | en | +| CohereLabs/Global-MMLU-Lite | en | +| LinguaLift/IndicMMLU-Pro | hindi | +| openai/MMMLU | default | +| sarvamai/mmlu-indic | en | +| Idavidrein/gpqa | gpqa_main | + +Each identifier maps to the shared MCQ dataset implementation through `HF_DATASET_TO_MODULE`, which currently resolves every row to `nemotron.steps.byob.runtime.benchmark_families.mcq`. diff --git a/docs/fern/pages-vnightly/build-benchmarks/reference/generate-config.mdx b/docs/fern/pages-vnightly/build-benchmarks/reference/generate-config.mdx new file mode 100644 index 000000000..95b482595 --- /dev/null +++ b/docs/fern/pages-vnightly/build-benchmarks/reference/generate-config.mdx @@ -0,0 +1,77 @@ +--- +title: "Generation Configuration Reference" +slug: "build-benchmarks/reference/generate-config.html" +description: "This page lists the YAML keys validated inside ByobConfig.from_yaml in runtime/config.py. Optional keys show their defaults in the dataclass or in the get calls inside from_yaml." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + +This page lists the YAML keys validated inside `ByobConfig.from_yaml` in `runtime/config.py`. +Optional keys show their defaults in the dataclass or in the `get` calls inside `from_yaml`. + +## Experiment layout + +| Key | Notes | +| --- | --- | +| expt_name | Required string; builds output_dir/expt_name/. | +| output_dir | Required writable directory. | +| input_dir | Required path containing each target_source_mapping corpus. | +| random_seed | Optional; seeds Python and NumPy when present. | +| ndd_batch_size | Optional positive int; defaults to 1000 in the dataclass but sample configs use smaller values. | + +## Dataset selection + +| Key | Notes | +| --- | --- | +| hf_dataset | Must appear in ALLOWED_HF_DATASETS. | +| subset | Optional; defaults per [Supported Hugging Face Benchmarks](/benchmarks). | +| split | Optional; defaults to "test". | +| language | Required string (for example en-US). | +| metadata_file | Optional CSV path enabling tag-aware sampling. | + +## Subjects and sampling + +| Key | Notes | +| --- | --- | +| source_subjects | Required non-empty list of benchmark subject strings. | +| target_source_mapping | Required mapping; see [Prepare Your Own Domain Data](/../how-to/prepare-data). | +| few_shot_samples_per_query | Required positive int. | +| queries_per_target_subject_document | Required positive int. | +| num_questions_per_query | Required positive int. | + +## Prompts and models + +| Key | Notes | +| --- | --- | +| prompt_config | null loads packaged defaults; a string path loads YAML with all required stages. | +| generation_model_config | Required mapping for Data Designer calls. | +| judge_model_config | Required mapping. | +| do_distractor_expansion | Required bool. | +| distractor_expansion_model_config | Required when expansion is true. | +| distractor_validity_model_config | Required mapping. | +| filtering_model_configs | Required dict with hallucination and easiness lists. | +| easiness_threshold | Required float in [0, 1]. | +| hallucination_threshold | Required float in [0, 1]. | +| remove_hallucinated | Optional bool; defaults to True. | +| remove_easy | Optional bool; defaults to False. | + +## Optional quality stages + +| Key | Notes | +| --- | --- | +| semantic_deduplication_config | Dict with enabled, embedding model id, clustering parameters, and remove_duplicates. | +| semantic_outlier_detection_config | Dict with enabled, embedding model id, and neighbour thresholds. | +| chunking_config | Dict; supports window_size (null keeps whole documents). | +| do_coverage_check | Bool; defaults to False when omitted. | +| coverage_check_config | Dict with window_size and model_identifier. | + +## Curator mount + +Sample configs include a `run.env.mounts` entry that uses `$\{auto_mount:...\}` to place NeMo Curator on `/opt/Curator`. +Remote profiles must preserve the same mount contract your environment expects. + +## Stage dispatch for `nemotron steps run` + +The generic steps CLI accepts `family`, `stage`, and `skip_until` as dotlist overrides, and you can also place those keys directly in YAML. +`family` defaults to `mcq` when omitted. diff --git a/docs/fern/pages-vnightly/build-benchmarks/reference/index.mdx b/docs/fern/pages-vnightly/build-benchmarks/reference/index.mdx new file mode 100644 index 000000000..f5003ad6d --- /dev/null +++ b/docs/fern/pages-vnightly/build-benchmarks/reference/index.mdx @@ -0,0 +1,76 @@ +--- +title: "Reference" +slug: "build-benchmarks/reference/index.html" +description: "Specifications grounded in src/nemotron/steps/byob." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + +Specifications grounded in `src/nemotron/steps/byob`. + +## Outputs + + + +Seed, stage cache, raw and final Parquet paths. + +--- + +parquet + + + + +Common configuration errors, missing caches, filtering, and endpoint issues. + +--- + +faq + + + + + +## Configuration + + + +Required keys for `ByobConfig.from_yaml`. + +--- + +yaml + + + + +`ByobTranslationConfig.from_yaml` requirements. + +--- + +yaml + + + + + +## Source benchmarks + + + +Identifiers and default subsets from `runtime/constants.py`. + +--- + +hf_dataset + + + + + +## Related documentation + +- Tutorial: [Getting Started with Building MCQ Benchmarks](/../getting-started) + +- Concepts: [Concepts](/../explanation/index) diff --git a/docs/fern/pages-vnightly/build-benchmarks/reference/output-files.mdx b/docs/fern/pages-vnightly/build-benchmarks/reference/output-files.mdx new file mode 100644 index 000000000..857ca73b8 --- /dev/null +++ b/docs/fern/pages-vnightly/build-benchmarks/reference/output-files.mdx @@ -0,0 +1,91 @@ +--- +title: "Output Files" +slug: "build-benchmarks/reference/output-files.html" +description: "All paths below are relative to output_dir from your YAML and the string expt_name." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + +All paths below are relative to `output_dir` from your YAML and the string `expt_name`. + +## Prepare + +| File | Description | +| --- | --- | +| seed.parquet | Few-shot rows plus domain chunks. | + +## Generate + +The final generation creates these files: + +| File | Description | +| --- | --- | +| benchmark_raw.parquet | Snapshot immediately before column renaming for the final schema. | +| benchmark.parquet | Final MCQ schema; column meanings and a sample row are in the next section. | + +The following intermediate files that are created in the `stage_cache` directory: + +| File | Stage | +| --- | --- | +| generated_questions.parquet | GENERATION | +| judged_questions.parquet | JUDGEMENT | +| semantic_deduplicated_questions.parquet | SEMANTIC_DEDUPLICATION | +| expanded_distractors.parquet | DISTRACTOR_EXPANSION (only when do_distractor_expansion is true) | +| coverage_check.parquet | COVERAGE_CHECK (only when do_coverage_check is true) | +| valid_distractors.parquet | DISTRACTOR_VALIDITY_CHECK | +| semantic_outlier_detection.parquet | SEMANTIC_OUTLIER_DETECTION | +| filtered_questions.parquet | HALLUCINATION_EASINESS_DETECTION | + + + +## Final MCQ Columns + +Generation and translation both export the same eight columns on the final `benchmark.parquet` file. + +| Column | Meaning | +| --- | --- | +| question_id | Stable identifier for the row, taken from the internal id_question field before export. | +| question | Stem text for the multiple-choice item. After translation this is the target-language text. | +| options | Ordered list of choice strings. The list order matches the letter labels implied by answer_index. | +| answer_index | Zero-based index into options for the correct choice. | +| answer | Letter label for the correct choice, derived from answer_index (0 тЖТ A, 1 тЖТ B, and so on). | +| cot_content | Reserved for chain-of-thought text. The current pipeline sets this column to the literal - for every row on export. | +| src | Reserved for a source document marker. The current pipeline sets this column to the literal - for every row on export. | +| category | Target key from target_source_mapping in your generation configuration, in other words the domain bucket name for the row, not the Hugging Face few-shot subject name. | + +### Sample Row + +Values below are illustrative; your identifiers and wording will differ. + +```json +{ + "question_id": "mcq-00042", + "question": "If x^2 = 9, which value can x take?", + "options": ["-3 only", "-3 or 3", "3 only", "9"], + "answer_index": 1, + "answer": "B", + "cot_content": "-", + "src": "-", + "category": "maths" +} +``` + +## Translate + +The translate stage creates the following final output files: + +| File | Description | +| --- | --- | +| benchmark_raw.parquet | Intermediate snapshot prior to optional quality filtering. | +| benchmark.parquet | Final translated MCQ after fields are renamed back to question, options, answer_index, and answer. Column semantics match generation; see [Final MCQ Columns](#final-mcq-columns). | + +The following intermediate files are created in the `staged_cache` directory. + +| File | Stage | +| --- | --- | +| translated_questions.parquet | TRANSLATION | +| backtranslated_questions.parquet | BACKTRANSLATION | +| quality_metrics.parquet | QUALITY_METRICS | + +Intermediate translation Parquet files can include additional columns such as `question_translated`, `options_translated`, backtranslation fields, and metric scores. diff --git a/docs/fern/pages-vnightly/build-benchmarks/reference/translation-config.mdx b/docs/fern/pages-vnightly/build-benchmarks/reference/translation-config.mdx new file mode 100644 index 000000000..409ff9c05 --- /dev/null +++ b/docs/fern/pages-vnightly/build-benchmarks/reference/translation-config.mdx @@ -0,0 +1,53 @@ +--- +title: "Translation Configuration Reference" +slug: "build-benchmarks/reference/translation-config.html" +description: "This page describes the YAML configuration file that you provide for the translate stage: the keys you set or override, how backtranslation quality scores show up in Parquet output columns, and which " +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + +{/* Reference: BYOB translate YAML keys, metric semantics, and parse-time validation. */} + +This page describes the YAML configuration file that you provide for the translate stage: the keys you set or override, how backtranslation quality scores show up in Parquet output columns, and which rows are omitted from the final `benchmark.parquet` when quality filtering is enabled. + +## Required Keys + +| Key | Notes | +| --- | --- | +| expt_name | Directory name under output_dir for caches and final artifacts. | +| dataset_path | Existing benchmark.parquet from a generation run. | +| output_dir | Parent directory for expt_name. | +| source_language | BCP-47 style tag (for example en-US). | +| target_language | Target locale tag (for example hi-IN). | +| translation_model_config | Dictionary with backend_type, params, and optional stage and segment_stage. | +| backtranslation_quality_metrics | Non-empty list; each element is a dictionary with type and threshold. | + +## Quality Metrics + +Each `type` must be `sacrebleu`, `chrf`, or `ter`. +Each `threshold` must be nonnegative. + +NeMo Curator writes one numeric score column and one boolean pass column per configured metric, for example `score_chrf` and `score_chrf_passed`. +The column `is_quality_metric_passed` is true on a row when every per-metric pass column is true for that row. + +Each score compares the original benchmark text with the round-trip backtranslation from the target locale, using sentence-level APIs from the *sacrebleu* library. + +| type | Measures | Scale and direction | How to interpret scores | Row passes when | +| --- | --- | --- | --- | --- | +| sacrebleu | Sentence bilingual evaluation understudy (BLEU) | 0 through 100 after *sacrebleu* tokenization; higher values track closer matches to the reference. | High scores mean the backtranslation preserved wording and order; scores near zero mean little *n*-gram overlap. | score_sacrebleu тЙе threshold | +| chrf | Sentence character n-gram F-score (chrF) | 0 through 100 in typical sentence outputs; higher values mean closer character-level match. | High scores track spelling and phrasing fidelity; low scores mean the backtranslation diverged on the surface string. | score_chrf тЙе threshold | +| ter | Sentence translation error rate (TER) | Zero means no edits; larger values report more insertions, deletions, or substitutions relative to the reference. | Values close to zero mean the backtranslation needed minimal editing to match the original; large values signal heavy rewrites or mismatch. | score_ter тЙд threshold | + +Inspect `stage_cache/quality_metrics.parquet` under your experiment directory to pick thresholds from the score spread you see in data. + +## Optional Keys + +| Key | Default | Notes | +| --- | --- | --- | +| remove_low_quality | True unless YAML overrides it | When true, the pipeline omits rows where is_quality_metric_passed is false before export. | + +## FAITH evaluation + +`translation_model_config.stage.enable_faith_eval` must not be true. +The benchmark translation relies on backtranslation metrics instead of FAITH filtering diff --git a/docs/fern/pages-vnightly/build-benchmarks/reference/troubleshooting.mdx b/docs/fern/pages-vnightly/build-benchmarks/reference/troubleshooting.mdx new file mode 100644 index 000000000..a8d040f57 --- /dev/null +++ b/docs/fern/pages-vnightly/build-benchmarks/reference/troubleshooting.mdx @@ -0,0 +1,61 @@ +--- +title: "Troubleshooting" +slug: "build-benchmarks/reference/troubleshooting.html" +description: "This page lists common symptoms when you run nemotron steps run byob/mcq with the bring your own benchmark (BYOB) multiple choice question (MCQ) family and when you tune BYOB translation settings. Eac" +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + +{/* Reference: symptom-to-remedy tables for bring your own benchmark MCQ runs and translation YAML checks. */} + +This page lists common symptoms when you run `nemotron steps run byob/mcq` with the bring your own benchmark (BYOB) multiple choice question (MCQ) family and when you tune BYOB translation settings. +Each table row pairs a symptom with the files, fields, or flags you should inspect first. +For stage flow and design rationale, see the explanation pages linked from [Concepts](/../explanation/index). + +## Configuration Rejected Before the Pipeline Runs + +| Symptom | What to do | +| --- | --- | +| Assertion that tags should not be specified when metadata_file is absent | Remove tags from every target_source_mapping entry, or set top-level metadata_file to the comma-separated values (CSV) file that supplies tag metadata. See [Prepare Your Own Domain Data](/../how-to/prepare-data). | +| Assertion that BYOB translation does not support FAITH evaluation | Under translation_model_config.stage, set enable_faith_eval to false or omit the field. BYOB translation expects backtranslation_quality_metrics instead of FAITH. See [Translation Configuration Reference](/translation-config) and [Translation](/../explanation/translation). | +| Message that a prompt override key is missing or is not a string, or validation fails on prompt_config | Open your prompt_config YAML and match the structure in [Prompt Tuning for Benchmarks](/../how-to/prompt-tuning). Easiness and hallucination overrides must include the expected blocks. | +| Schema validation reports that distractor_validity_model_config is missing | The current generation schema requires this block even when distractor expansion is off. Add the block as described in [Configure Model Endpoints for BYOB](/../how-to/custom-model-endpoints). | + +## Skipped Stages and Missing Parquet Inputs + +| Symptom | What to do | +| --- | --- | +| A stage fails because an expected Parquet file is missing under output_dir/<expt_name>/stage_cache/ | When you use skip_until, every stage before the resume point must have written its output file to disk. Rerun from an earlier stage without skipping, or copy valid caches from a prior run. See [Skip Stages When Iterating](/../how-to/skip-stages). | + +## Generation Ends With No Final Benchmark Rows + +| Symptom | What to do | +| --- | --- | +| Log line No questions left after filtering, or benchmark.parquet is missing after a run that exited early | Open stage_cache/filtered_questions.parquet and inspect is_easy, is_hallucination, and score columns. Loosen easiness_threshold or hallucination_threshold, set remove_easy and remove_hallucinated to false for a diagnostic run, or adjust upstream judgement and deduplication settings. See [Easiness and Hallucination Filtering](/../explanation/filtering). | + +## Translation Export Drops Every Row + +| Symptom | What to do | +| --- | --- | +| benchmark.parquet exists but has zero rows after translation | When remove_low_quality is true, only rows with is_quality_metric_passed are exported. Inspect stage_cache/quality_metrics.parquet, relax metric thresholds in backtranslation_quality_metrics, or set remove_low_quality to false while you tune. See [Translation](/../explanation/translation). | + +## Few-Shot Sampling Finds No Rows + +| Symptom | What to do | +| --- | --- | +| Runtime error stating there are no samples for a given source subject and tag combination | Tag filters must match comma-separated tag strings that appear in the metadata CSV for that Hugging Face subject. Widen tags, correct the CSV, or confirm source_subjects and target_source_mapping names align with [Prepare Your Own Domain Data](/../how-to/prepare-data) and [Getting the Right Questions From the Source Benchmark](/../explanation/get-right-questions). | + +## Hosted Models Throttle or Stall + +| Symptom | What to do | +| --- | --- | +| Timeouts, HTTP responses in the 429 range, or bursty failures when calling remote endpoints | Reduce max_parallel_requests and related batch settings in your YAML, rerun on a smaller slice of data, and confirm API keys and quotas. See [Question Generation](/../explanation/question-generation) and [Configure Model Endpoints for BYOB](/../how-to/custom-model-endpoints). | + +## Related Reference + +- Parquet layout and final column list: [Output Files](/output-files) + +- Generation YAML fields: [Generation Configuration Reference](/generate-config) + +- Translation YAML fields: [Translation Configuration Reference](/translation-config) diff --git a/docs/fern/pages-vnightly/curate/getting-started.mdx b/docs/fern/pages-vnightly/curate/getting-started.mdx new file mode 100644 index 000000000..de49f0a5a --- /dev/null +++ b/docs/fern/pages-vnightly/curate/getting-started.mdx @@ -0,0 +1,121 @@ +--- +title: "Getting Started With Data Curation" +slug: "curate/getting-started.html" +description: "In this tutorial, you will:" +--- + + + + + +**In this tutorial, you will**: + +1. Clone the repository and install dependencies. + +1. Configure the Ray runtime environment. + +1. Inspect the packaged fixture. + +1. Run the curation step with the tiny configuration. + +1. Inspect the output shards. + + This tutorial requires approximately 5 minutes to complete. + + + + +Run the `curate/nemo_curator` step on the packaged tiny JSONL fixture, then show me +the names and record counts of the output shards. + + + + + +## Prerequisites + +- The `uv` tool is available in your shell. + +## Procedure + +1. Clone the repository, if you havenтАЩt already: + + ```console + $ git clone https://github.com/NVIDIA-NeMo/Nemotron && cd Nemotron + ``` + +1. Install the dependencies for curating data: + + ```console + $ uv sync --extra curate + ``` + +1. Set the Ray runtime environment variable so Ray workers reuse the synchronized +project environment: + + ```console + $ export RAY_ENABLE_UV_RUN_RUNTIME_ENV=0 + ``` + +1. Inspect the packaged fixture at +`src/nemotron/steps/curate/nemo_curator/data/tiny.jsonl`. +Each record contains a `text` field. + + ```json startLine={1} + {"text":"This is a small English document for the curation smoke test with enough words for optional quality filters."} + {"text":"Another English sample about mathematics, banking, and clean data processing for a tiny curation validation run."} + ``` + +1. Run the curation step. +The `tiny` configuration disables optional language, word-count, and domain +filters, making this run a baseline validation of the reader, writer, and Ray +startup. +The checked-in `tiny.yaml` uses container paths, so override `input_glob` and +`output_dir` with host paths: + + ```console + $ uv run --no-sync nemotron steps run curate/nemo_curator -c tiny \ + input_glob="$\{PWD\}/src/nemotron/steps/curate/nemo_curator/data/tiny.jsonl" \ + output_dir="$\{PWD\}/output/curate-tiny" + ``` + +1. Inspect the output directory: + + ```console + $ find output/curate-tiny -type f + ``` + + Open a shard and confirm that records contain the configured `text_field`. +NeMo Curator assigns the exact shard name. + +## Summary + +In this tutorial, you completed the following tasks: + +- Cloned the repository and installed the project dependencies. + +- Configured the Ray runtime environment. + +- Ran the `curate/nemo_curator` step with the packaged tiny JSONL fixture. + +- Inspected the output shards and verified that records contain the configured +text field. + +The `tiny` configuration disables all optional filters. +To add language, word-count, or domain filters to a production corpus, refer to +the how-to guides below. + +## Next Steps + +- Point the step at your own JSONL corpus: [Run Curation on Local JSONL](/how-to/run-local-jsonl). + +- Download a Hugging Face dataset before curation: +[Use a Hugging Face Snapshot](/how-to/use-huggingface-snapshot). + +- Add language, word-count, or domain filters: [Enable Curation Filters](/how-to/enable-filters). + +- Look up all configuration fields and CLI flags: [curate/nemo_curator Configuration](/reference/curate-config) +and [curate/nemo_curator CLI](/reference/cli-curate). diff --git a/docs/fern/pages-vnightly/curate/how-to/enable-filters.mdx b/docs/fern/pages-vnightly/curate/how-to/enable-filters.mdx new file mode 100644 index 000000000..95861c9e7 --- /dev/null +++ b/docs/fern/pages-vnightly/curate/how-to/enable-filters.mdx @@ -0,0 +1,68 @@ +--- +title: "Enable Curation Filters" +slug: "curate/how-to/enable-filters.html" +description: "Start with no filters, confirm JSONL input and output, then add one filter family at a time." +--- + +Start with no filters, confirm JSONL input and output, then add one filter family at a time. + +## Language Filtering + +Set `language_codes` to uppercase language codes and provide a FastText language identification model. + +```console +$ uv run --no-sync nemotron steps run curate/nemo_curator -c tiny \ + input_glob="$\{PWD\}/data/my_corpus/**/*.jsonl" \ + output_dir="$\{PWD\}/output/curated-en" \ + language_codes=[EN] \ + models.fasttext_langid="$\{PWD\}/cache/models/fasttext/lid.176.bin" \ + quality_filters.min_langid_score=0.3 +``` + +Set `language_codes=[]` to skip FastText language identification entirely. + +## Word-Count Filtering + +Set both `quality_filters.min_words` and `quality_filters.max_words`. +The step raises an error if only one of those keys is present. + +```console +$ uv run --no-sync nemotron steps run curate/nemo_curator -c tiny \ + input_glob="$\{PWD\}/data/my_corpus/**/*.jsonl" \ + output_dir="$\{PWD\}/output/curated-word-count" \ + quality_filters.min_words=50 \ + quality_filters.max_words=5000 +``` + +Set `quality_filters=\{\}` to skip word-count filtering. + +## Domain Filtering + +Set `domains` to the domains you want to keep. +The step uses NeMo CuratorтАЩs multilingual domain classifier. + +```console +$ uv run --no-sync nemotron steps run curate/nemo_curator -c tiny \ + input_glob="$\{PWD\}/data/my_corpus/**/*.jsonl" \ + output_dir="$\{PWD\}/output/curated-domain" \ + domains=[STEM] \ + models.hf_cache_dir="$\{PWD\}/cache/huggingface" +``` + + +Keep the first domain-filtered run small. +The classifier may download or cache model assets on first use. + + + +## Filter Order + +The step applies filters in this order: + +1. FastText language identification and language filtering, when `language_codes` is non-empty. + +2. Word-count filtering, when `quality_filters.min_words` and `quality_filters.max_words` are both set. + +3. Multilingual domain classification, when `domains` is non-empty. + +When output is unexpectedly small, disable later filters first, then relax thresholds. diff --git a/docs/fern/pages-vnightly/curate/how-to/index.mdx b/docs/fern/pages-vnightly/curate/how-to/index.mdx new file mode 100644 index 000000000..53a1da7c0 --- /dev/null +++ b/docs/fern/pages-vnightly/curate/how-to/index.mdx @@ -0,0 +1,13 @@ +--- +title: "Curation How-To Guides" +slug: "curate/how-to/index.html" +description: "Use these guides after the local initial validation in Getting Started With Data Curation." +--- + +Use these guides after the local initial validation in [Getting Started With Data Curation](/../getting-started). + +- [Run Curation on Local JSONL](/run-local-jsonl) + +- [Use a Hugging Face Snapshot](/use-huggingface-snapshot) + +- [Enable Curation Filters](/enable-filters) diff --git a/docs/fern/pages-vnightly/curate/how-to/run-local-jsonl.mdx b/docs/fern/pages-vnightly/curate/how-to/run-local-jsonl.mdx new file mode 100644 index 000000000..86ccc313d --- /dev/null +++ b/docs/fern/pages-vnightly/curate/how-to/run-local-jsonl.mdx @@ -0,0 +1,64 @@ +--- +title: "Run Curation on Local JSONL" +slug: "curate/how-to/run-local-jsonl.html" +description: "Use this path when your corpus already exists as local JSONL files." +--- + +Use this path when your corpus already exists as local JSONL files. + +## Input Requirements + +Each input record must contain the configured `text_field`. +The default field name is `text`. + +Example record: + +```json +{"id": "doc-001", "text": "The text to keep, filter, or route downstream."} +``` + +## Minimal Local Run + +Start with optional filters disabled. +This verifies the reader and writer path before adding model-backed filters. + +```console +$ uv sync --extra curate +$ export RAY_ENABLE_UV_RUN_RUNTIME_ENV=0 + +$ uv run --no-sync nemotron steps run curate/nemo_curator -c tiny \ + input_glob="$\{PWD\}/data/my_corpus/**/*.jsonl" \ + output_dir="$\{PWD\}/output/curated-jsonl" \ + text_field=text \ + language_codes=[] \ + domains=[] \ + quality_filters={} +``` + +Use an absolute path or a path relative to the repository root. +When running on a remote executor, make sure the path exists inside the container or shared mount. + +## Add CPU Resources + +For local runs, you can set Ray CPU count in YAML or as a CLI override: + +```console +$ uv run --no-sync nemotron steps run curate/nemo_curator -c tiny \ + input_glob="$\{PWD\}/data/my_corpus/**/*.jsonl" \ + output_dir="$\{PWD\}/output/curated-jsonl" \ + ray.num_cpus=4 +``` + +For generated Lepton profiles, `NEMOTRON_CURATOR_RAY_NUM_CPUS` can provide the CPU count when `ray.num_cpus` is omitted. + +## Validate Output + +After the run: + +- Confirm that output shards exist under `output_dir`. + +- Count records before and after filtering. + +- Inspect a few output records to confirm the `text_field` is present and not empty. + +If output is empty, run again with `language_codes=[]`, `domains=[]`, and `quality_filters=\{\}` before enabling filters. diff --git a/docs/fern/pages-vnightly/curate/how-to/use-huggingface-snapshot.mdx b/docs/fern/pages-vnightly/curate/how-to/use-huggingface-snapshot.mdx new file mode 100644 index 000000000..4515e44ea --- /dev/null +++ b/docs/fern/pages-vnightly/curate/how-to/use-huggingface-snapshot.mdx @@ -0,0 +1,62 @@ +--- +title: "Use a Hugging Face Snapshot" +slug: "curate/how-to/use-huggingface-snapshot.html" +description: "Set the dataset block when the curation job should call huggingface_hub.snapshot_download before NeMo Curator reads files." +--- + +Set the `dataset` block when the curation job should call `huggingface_hub.snapshot_download` before NeMo Curator reads files. + +## Configuration Shape + +```yaml +dataset: + repo_id: HuggingFaceFW/fineweb-edu + repo_type: dataset + local_dir: ./data/fineweb-edu + allow_patterns: + - data/*.jsonl + +input_glob: ./data/fineweb-edu/**/*.jsonl +``` + +The `dataset` block is passed to `snapshot_download`. +After the download finishes, `input_glob` must point at JSONL files under `dataset.local_dir`. + +## Run With the Default Configuration + +The default config demonstrates a FineWeb-Edu-style snapshot. +It also enables language filtering, so you must provide the FastText language identification model path if you keep `language_codes` non-empty. + +```console +$ uv sync --extra curate +$ export RAY_ENABLE_UV_RUN_RUNTIME_ENV=0 + +$ uv run --no-sync nemotron steps run curate/nemo_curator -c default \ + dataset.local_dir="$\{PWD\}/data/fineweb-edu" \ + input_glob="$\{PWD\}/data/fineweb-edu/**/*.jsonl" \ + output_dir="$\{PWD\}/output/fineweb-edu-curated" \ + models.fasttext_langid="$\{PWD\}/cache/models/fasttext/lid.176.bin" +``` + +## Snapshot Without Optional Filters + +For a first infrastructure run, disable filters and verify that snapshot download and JSONL IO work. + +```console +$ uv run --no-sync nemotron steps run curate/nemo_curator -c default \ + dataset.local_dir="$\{PWD\}/data/fineweb-edu" \ + input_glob="$\{PWD\}/data/fineweb-edu/**/*.jsonl" \ + output_dir="$\{PWD\}/output/fineweb-edu-curated" \ + language_codes=[] \ + domains=[] \ + quality_filters={} +``` + +## Private or Gated Datasets + +If the Hugging Face repository requires authentication, export `HF_TOKEN` before running. +For remote jobs, pass `HF_TOKEN` through the environment profile. + +```console +$ export HF_TOKEN="\" +``` diff --git a/docs/fern/pages-vnightly/curate/index.mdx b/docs/fern/pages-vnightly/curate/index.mdx new file mode 100644 index 000000000..9c2894dbc --- /dev/null +++ b/docs/fern/pages-vnightly/curate/index.mdx @@ -0,0 +1,136 @@ +--- +title: "About Data Curation With NeMo Curator" +slug: "curate/index.html" +description: "The nemotron steps run curate/nemo_curator command reads JSONL data, optionally materializes a Hugging Face dataset snapshot, applies lightweight NeMo Curator filters, and writes filtered JSONL shards" +--- + + + +The `nemotron steps run curate/nemo_curator` command reads JSONL data, optionally materializes a Hugging Face dataset snapshot, applies lightweight NeMo Curator filters, and writes filtered JSONL shards for downstream translation or training data preparation. + +Use this step when you already have JSONL records and need a small, repeatable curation pass before a later step such as `translate/nemo_curator`, `data_prep/pretrain_prep`, or `data_prep/sft_packing`. + +## When to Use + +Use `curate/nemo_curator` when you need: + +- A local JSONL reader and writer path using NeMo Curator. + +- Optional FastText language identification and language filtering. + +- Optional word-count filtering. + +- Optional multilingual domain classification and filtering. + +- Optional Hugging Face dataset snapshot download before the Curator reader runs. + + +This step is intentionally lightweight. +It does not crawl web pages, extract Common Crawl WARC files, or run large deduplication workflows. +Use a dedicated Curator recipe for those jobs before this step, or add a separate step when that behavior is needed. + + + +## Pipeline Summary + +```mermaid +flowchart LR + A[Optional Hugging Face snapshot] --> B[JSONL files] + C[Local JSONL files] --> B + B --> D[JsonlReader] + D --> E{Language filter enabled?} + E -->|yes| F[FastText language ID] + E -->|no| G{Word-count filter enabled?} + F --> G + G -->|yes| H[WordCountFilter] + G -->|no| I{Domain filter enabled?} + H --> I + I -->|yes| J[MultilingualDomainClassifier] + I -->|no| K[JsonlWriter] + J --> K + K --> L[Filtered JSONL shards] +``` + +## Documentation Series + + + +Install the Nemotron CLI, run a local tiny JSONL initial curation validation, and inspect output shards. + +--- + +hands-on + + + + +Run local JSONL curation, download a Hugging Face snapshot, and enable optional filters. + +--- + +task-based + + + + +YAML parameters, CLI syntax, input/output format, and troubleshooting. + +--- + +lookup + + + + + +## All Documentation + + + + +| Guide | What you do | +| --- | --- | +| [Getting Started With Data Curation](/getting-started) | Run curate/nemo_curator on the packaged tiny JSONL fixture | + + + + +| Guide | Focus | +| --- | --- | +| [Run Curation on Local JSONL](/how-to/run-local-jsonl) | Local JSONL reader/writer path | +| [Use a Hugging Face Snapshot](/how-to/use-huggingface-snapshot) | dataset block and Hugging Face snapshot download | +| [Enable Curation Filters](/how-to/enable-filters) | Language, word-count, and domain filters | + + + + +| Guide | Content | +| --- | --- | +| [curate/nemo_curator Configuration](/reference/curate-config) | YAML field reference | +| [curate/nemo_curator CLI](/reference/cli-curate) | nemotron steps run curate/nemo_curator syntax | +| [Curation Input and Output Format](/reference/io-format) | Input and output shapes | +| [Curation Troubleshooting](/reference/troubleshooting) | Common failures and fixes | + + + + + +## What You Need + +- JSONL input with one text field, usually named `text`. + +- Optional model assets when filters are enabled, such as a FastText language identification model for `language_codes`. + +- A writable output directory for JSONL shards. + +## Quick Paths + +1. First local run: [Getting Started With Data Curation](/getting-started) + +2. Local corpus setup: [Run Curation on Local JSONL](/how-to/run-local-jsonl) + +3. Hugging Face snapshot setup: [Use a Hugging Face Snapshot](/how-to/use-huggingface-snapshot) + +4. Filter setup: [Enable Curation Filters](/how-to/enable-filters) + +5. Lookup flags: [curate/nemo_curator CLI](/reference/cli-curate) diff --git a/docs/fern/pages-vnightly/curate/reference/cli-curate.mdx b/docs/fern/pages-vnightly/curate/reference/cli-curate.mdx new file mode 100644 index 000000000..eee7eccbd --- /dev/null +++ b/docs/fern/pages-vnightly/curate/reference/cli-curate.mdx @@ -0,0 +1,73 @@ +--- +title: "curate/nemo_curator CLI" +slug: "curate/reference/cli-curate.html" +description: "Use -c tiny for a small initial validation configuration and -c default for the Hugging Face snapshot example. Refer to Nemotron Steps CLI Reference for the shared flag set." +--- + +## Syntax + +```bash +uv run --no-sync nemotron steps run curate/nemo_curator \ + [-c \] \ + [-r \ | -b \] \ + [-d] \ + [\...] +``` + +Use `-c tiny` for a small initial validation configuration and `-c default` for the Hugging Face snapshot example. +Refer to [Nemotron Steps CLI Reference](/../../train-models/reference/cli-reference) for the shared flag set. + +## Common Commands + +Show the step contract: + +```console +$ uv run --no-sync nemotron steps show curate/nemo_curator +``` + +Run a local JSONL initial validation: + +```console +$ uv run --no-sync nemotron steps run curate/nemo_curator -c tiny \ + input_glob="$\{PWD\}/src/nemotron/steps/curate/nemo_curator/data/tiny.jsonl" \ + output_dir="$\{PWD\}/output/curate-tiny" +``` + +Run on Lepton with the generated Curator profile: + +```console +$ uv run --no-sync nemotron steps run curate/nemo_curator -c tiny --batch lepton_curate +``` + +Run against local corpus shards: + +```console +$ uv run --no-sync nemotron steps run curate/nemo_curator -c tiny \ + input_glob="$\{PWD\}/data/my_corpus/**/*.jsonl" \ + output_dir="$\{PWD\}/output/curated-jsonl" \ + text_field=text \ + language_codes=[] \ + domains=[] \ + quality_filters={} +``` + +## Dotlist Overrides + +All YAML fields can be overridden from the command line with `key=value` syntax. +Examples: + +- `input_glob=/data/**/*.jsonl` + +- `output_dir=/output/curated` + +- `text_field=body` + +- `language_codes=[EN]` + +- `quality_filters.min_words=50` + +- `quality_filters.max_words=5000` + +- `ray.num_cpus=4` + +Use shell quoting around globs or lists when your shell expands them unexpectedly. diff --git a/docs/fern/pages-vnightly/curate/reference/curate-config.mdx b/docs/fern/pages-vnightly/curate/reference/curate-config.mdx new file mode 100644 index 000000000..bc97e554c --- /dev/null +++ b/docs/fern/pages-vnightly/curate/reference/curate-config.mdx @@ -0,0 +1,120 @@ +--- +title: "curate/nemo_curator Configuration" +slug: "curate/reference/curate-config.html" +description: "The step reads YAML from src/nemotron/steps/curate/nemo_curator/config/." +--- + +The step reads YAML from `src/nemotron/steps/curate/nemo_curator/config/`. + +| File | Purpose | +| --- | --- | +| tiny.yaml | Curator-container initial validation configuration. Optional filters are disabled. Override input_glob for local runs because the checked-in path is a container path. | +| default.yaml | Example Hugging Face snapshot workflow for FineWeb-Edu-style JSONL with language and word-count filters enabled. | + +## Top-Level Fields + +### `input_glob` + +JSONL file path or glob passed to NeMo Curator `JsonlReader`. + +--- + +### `output_dir` + +Directory where NeMo Curator writes JSONL output shards. + +--- + +### `text_field` + +Record field containing the text to curate. + +Default: `text`. + +--- + +### `dataset` + +Optional keyword arguments passed to `huggingface_hub.snapshot_download`. +Set `dataset: null` for local-input-only runs. + +Common keys are `repo_id`, `repo_type`, `local_dir`, and `allow_patterns`. + +--- + +### `language_codes` + +Uppercase language codes to keep. +Set `language_codes: []` to skip FastText language identification and language filtering. +When this list is non-empty, `models.fasttext_langid` must point at a FastText language identification model. + +--- + +### `domains` + +Domains to keep through NeMo Curator `MultilingualDomainClassifier`. +Set `domains: []` to skip domain classification. + +--- + +### `quality_filters` + +Optional quality settings. +`min_langid_score` applies when language filtering is enabled. +`min_words` and `max_words` enable word-count filtering and must be set together. +Set `quality_filters: \{\}` to skip word-count filtering. + +--- + +### `models` + +Optional model and cache paths. + +Common keys: + +- Set `fasttext_langid` to the path of the FastText language identification model. + +- Set `hf_cache_dir` to the Hugging Face model cache directory for classifier assets. + +--- + +### `num_cpus` + +```python +ray.num_cpus +``` + +Optional Ray CPU count. +If omitted, the Lepton curate profile can provide `NEMOTRON_CURATOR_RAY_NUM_CPUS`. + +## Minimal Local Configuration + +```yaml +language_codes: [] +domains: [] +text_field: text +input_glob: ./data/**/*.jsonl +output_dir: ./output/curated-jsonl +dataset: null +models: {} +quality_filters: {} +``` + +## Filtered Configuration + +```yaml +language_codes: + - EN +domains: [] +text_field: text +input_glob: ./data/**/*.jsonl +output_dir: ./output/curated-jsonl +dataset: null +models: + fasttext_langid: ./cache/models/fasttext/lid.176.bin + hf_cache_dir: ./cache/huggingface +quality_filters: + min_langid_score: 0.3 + min_words: 50 + max_words: 5000 +``` diff --git a/docs/fern/pages-vnightly/curate/reference/index.mdx b/docs/fern/pages-vnightly/curate/reference/index.mdx new file mode 100644 index 000000000..3c848b912 --- /dev/null +++ b/docs/fern/pages-vnightly/curate/reference/index.mdx @@ -0,0 +1,15 @@ +--- +title: "Curation Reference" +slug: "curate/reference/index.html" +description: "Use these pages to look up CLI syntax, configuration fields, input/output format, and common failures." +--- + +Use these pages to look up CLI syntax, configuration fields, input/output format, and common failures. + +- [curate/nemo_curator CLI](/cli-curate) + +- [curate/nemo_curator Configuration](/curate-config) + +- [Curation Input and Output Format](/io-format) + +- [Curation Troubleshooting](/troubleshooting) diff --git a/docs/fern/pages-vnightly/curate/reference/io-format.mdx b/docs/fern/pages-vnightly/curate/reference/io-format.mdx new file mode 100644 index 000000000..ceeb55e62 --- /dev/null +++ b/docs/fern/pages-vnightly/curate/reference/io-format.mdx @@ -0,0 +1,44 @@ +--- +title: "Curation Input and Output Format" +slug: "curate/reference/io-format.html" +description: "Input files must be JSON Lines. Each line is a JSON object. The configured text_field must exist on each record." +--- + +## Input + +Input files must be JSON Lines. +Each line is a JSON object. +The configured `text_field` must exist on each record. + +```json +{"id": "doc-001", "text": "The text to curate."} +``` + +By default, `text_field` is `text`. + +## Output + +The step writes JSONL shards under `output_dir` using NeMo Curator `JsonlWriter`. +The output contains the fields read by `JsonlReader`, plus filter or classifier fields when those stages are enabled. + +Typical no-filter output: + +```json +{"text": "The text to curate."} +``` + +When language filtering is enabled, the pipeline adds a language score field used by the filter. +When domain classification is enabled, classifier output fields depend on the installed NeMo Curator classifier implementation. + +## Downstream Use + +Use the output as `filtered_jsonl`. +Common downstream paths are: + +- Use `translate/nemo_curator` for corpus translation. + +- Use `data_prep/pretrain_prep` for pretraining data preparation. + +- Use `data_prep/sft_packing` when the curated records are already in the required supervised fine-tuning (SFT) format. + +If a downstream step needs fields beyond `text`, verify that the curation reader/writer path preserves those fields before scaling the run. diff --git a/docs/fern/pages-vnightly/curate/reference/troubleshooting.mdx b/docs/fern/pages-vnightly/curate/reference/troubleshooting.mdx new file mode 100644 index 000000000..feecb9eb0 --- /dev/null +++ b/docs/fern/pages-vnightly/curate/reference/troubleshooting.mdx @@ -0,0 +1,27 @@ +--- +title: "Curation Troubleshooting" +slug: "curate/reference/troubleshooting.html" +description: "Symptom" +--- + +| Symptom | Likely Cause | Fix | +| --- | --- | --- | +| input_glob matches no files | Path does not exist in the current host, container, or shared mount | Use an absolute path or verify the mount. For local tiny runs, override the packaged /nemo_run/code/... path with ${PWD}/src/nemotron/steps/curate/nemo_curator/data/tiny.jsonl. | +| Missing FastText model | language_codes is non-empty but models.fasttext_langid is missing or invalid | Set language_codes=[] to disable language filtering, or provide the FastText lid.176.bin path. | +| quality_filters error about min_words and max_words | Only one word-count bound was set | Set both quality_filters.min_words and quality_filters.max_words, or set quality_filters={}. | +| Output is empty or much smaller than expected | Filters are too strict or applied before corpus shape is understood | Re-run with language_codes=[], domains=[], and quality_filters={}. Add filters back one at a time. | +| Ray worker starts a new .venv or cannot import dependencies | Local uv run and the Ray runtime environment are both attempting to manage dependency setup | Export RAY_ENABLE_UV_RUN_RUNTIME_ENV=0 and run with uv run --no-sync after uv sync --extra curate. | +| Large local file causes memory pressure | Input shard is too large for the available Ray worker memory | Split large JSONL files into smaller shards before running Curator. | +| Domain classifier downloads repeatedly | Hugging Face cache path is not persistent | Set models.hf_cache_dir to a persistent cache location and mount it in remote profiles. | + +## Debug Checklist + +1. Run the local tiny command with filters disabled. + +2. Confirm `uv sync --extra curate` completed in the same repository clone. + +3. Confirm the input path exists where the command runs. + +4. Confirm `output_dir` is writable. + +5. Add language, word-count, and domain filters one at a time. diff --git a/docs/fern/pages-vnightly/deployment-guides.mdx b/docs/fern/pages-vnightly/deployment-guides.mdx new file mode 100644 index 000000000..e08706b2b --- /dev/null +++ b/docs/fern/pages-vnightly/deployment-guides.mdx @@ -0,0 +1,104 @@ +--- +title: "Deployment Guides" +slug: "deployment-guides.html" +description: "Deployment guides, fine-tuning recipes, and agentic usage examples for Nemotron models. Each card links to its directory in the Nemotron GitHub repository." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + +{/* Card footer badges + +Add a badge only when the attribute applies. Omit it (and do not substitute its opposite) when it does not. +Absence is the signal for the simpler case. + +{bdg-success\}`Beginner` тАФ no GPU required and no fine-tuning step. Uses an API or cloud endpoint. + Add when no other attribute badges apply. + +{bdg-success\}`Notebook` тАФ self-contained notebook and no environment beyond pip install. + Omit for multi-file projects. + +{bdg-secondary\}`Local GPU` тАФ requires a local GPU or managed hardware. + Omit for API/cloud-only examples. + +{bdg-info\}`Fine-tuning` тАФ example includes a training or fine-tuning step. + Omit for inference-only examples. */} + + + +Deployment guides, fine-tuning recipes, and agentic usage examples for Nemotron models. Each card links to its directory in the [Nemotron GitHub repository](https://github.com/NVIDIA-NeMo/nemotron). + + + +Notebooks for deploying the 120B/12B-active hybrid Mamba-Transformer MoE model with vLLM, SGLang, and TensorRT-LLM. + +--- + +Notebook Local GPU Apr 28, 2026 + + + + +Supervised fine-tuning with LoRA for Text2SQL using the BIRD SQL benchmark. Includes recipes for both NeMo AutoModel and Megatron Bridge. + +--- + +Local GPU Fine-tuning Apr 28, 2026 + + + + +Deploy on a single DGX Spark with 128 GB unified memory using vLLM (nightly) and TensorRT-LLM, including NVFP4 quantization and MTP speculative decoding. + +--- + +Local GPU Apr 10, 2026 + + + + +550B total / 55B active parameter base model checkpoint announced at GTC 2026. A starting point for custom fine-tuning and RL post-training pipelines тАФ not yet instruction-tuned. + +--- + +Local GPU Fine-tuning Mar 23, 2026 + + + + +Full-weight RL training from a base model using the GRPO/DAPO algorithm to reproduce emergent math reasoning. Requires 5├Ч GB200 or 3├Ч B200 nodes. + +--- + +Local GPU Fine-tuning Mar 11, 2026 + + + + +Use Nemotron 3 Super with OpenCode, OpenClaw, Kilo Code CLI, and OpenHands via OpenRouter and build.nvidia.com. + +--- + +Beginner Mar 11, 2026 + + + + +Notebooks for the 12B multimodal model that unifies visual and textual understanding. Covers NIM inference via build.nvidia.com and local Hugging Face deployment. + +--- + +Notebook Local GPU Oct 28, 2025 + + + + +Notebook for the document-parsing VLM that converts PDFs and unstructured documents into structured JSON, LaTeX, and Markdown. Available via NIM at build.nvidia.com. + +--- + +Beginner Notebook Oct 28, 2025 + + + + diff --git a/docs/fern/pages-vnightly/index.mdx b/docs/fern/pages-vnightly/index.mdx new file mode 100644 index 000000000..173e4426d --- /dev/null +++ b/docs/fern/pages-vnightly/index.mdx @@ -0,0 +1,170 @@ +--- +title: "Nemotron Training Recipes" +slug: "index.html" +description: "Open and efficient models for agentic AI. Reproducible training pipelines with transparent data, techniques, and weights." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + +**Open and efficient models for agentic AI.** Reproducible training pipelines with transparent data, techniques, and weights. + +
    + +
    +## Quick Start + +
    +```console +// Install the Nemotron training recipes +$ git clone https://github.com/NVIDIA-NeMo/Nemotron +$ cd Nemotron && uv sync + +// Run a tiny SFT job on your cluster +$ uv run nemotron steps run sft/automodel -c tiny --run YOUR-CLUSTER + +// Run the Nano3 pipeline stage by stage +$ uv run nemotron nano3 data prep pretrain --run YOUR-CLUSTER +$ uv run nemotron nano3 pretrain --run YOUR-CLUSTER +$ uv run nemotron nano3 data prep sft --run YOUR-CLUSTER +$ uv run nemotron nano3 sft --run YOUR-CLUSTER +$ uv run nemotron nano3 data prep rl --run YOUR-CLUSTER +$ uv run nemotron nano3 rl --run YOUR-CLUSTER +``` + +
    +> **Note**: The `--run YOUR-CLUSTER` flag submits jobs to your configured Slurm cluster via [NeMo-Run](/nemo_runspec/nemo-run). See [Execution through NeMo-Run](/nemo_runspec/nemo-run) for setup instructions. + +## Sample Deployments and Applications + + + +Deployment guides for Nemotron models: TensorRT-LLM, vLLM, SGLang, NIM, and Hugging Face. + + + + +End-to-end applications: RAG agents, ML agents, and multi-agent systems. + + + + + +## Customization Workflows with Nemotron Steps + + + +Translate JSONL or Parquet corpora with `translate/nemo_curator`, NeMo Curator +backends, and optional FAITH quality scoring. + + + + +Generate and translate custom multiple-choice benchmarks with `byob/mcq`. + + + + +Filter JSONL text with `curate/nemo_curator` before translation or training data preparation. + + + + +Use `sdg/data_designer` to produce SFT, tool-use, and preference datasets. + + + + +Evaluate hosted endpoints or checkpoints with `eval/model_eval`. + + + + + +## Training Recipes + + + +31.6B total / 3.6B active parameters, 25T tokens, up to 1M context. Hybrid Mamba-Transformer with sparse MoE. + +**Stages:** Pretraining тЖТ SFT тЖТ RL + + + + +GA-checkpoint multimodal post-training recipe with stage-local container builds and a three-step RL stack. + +**Stages:** SFT тЖТ RL MPO тЖТ RL text тЖТ RL vision тЖТ Eval + + + + +Fine-tune Llama-Nemotron-Embed-1B-v2 on domain-specific data with synthetic data generation, evaluation, and NIM deployment. + +**Stages:** SDG тЖТ Data Prep тЖТ Finetune тЖТ Eval тЖТ Export тЖТ Deploy + + + + +Fine-tune Llama-Nemotron-Rerank-1B-v2 cross-encoders for domain-specific reranking with synthetic data generation, evaluation, export, and NIM deployment. + +**Stages:** SDG тЖТ Data Prep тЖТ Finetune тЖТ Eval тЖТ Export тЖТ Deploy + + + + + +## Recipe Layout + +Nemotron keeps **data-producing recipes** separate from **model-family training recipes**: + +| Path | Purpose | Example | +| --- | --- | --- | +| src/nemotron/recipes/data/curation/ | Filter, dedup, and curate existing corpora | [Nemotron-CC](/nemotron/data/curation/nemotron-cc) | +| src/nemotron/recipes/data/sdg/ | Generate synthetic datasets that can feed multiple families | [Long-document SDG](/nemotron/data/sdg/long-document) feeding [Omni3 SFT](/nemotron/omni3/sft) | +| src/nemotron/recipes/<family>/ | Family-specific training, RL, evaluation, and model lifecycle commands | [Nano3](/nemotron/nano3/README), [Omni3](/nemotron/omni3/README) | + +## Training Pipeline + +Each recipe family has its own stage layout, and all of them can be tracked through [artifact lineage](/nemotron/artifacts): + +| Family | Stage layout | +| --- | --- | +| [Nano3](/nemotron/nano3/README) | Pretraining тЖТ SFT тЖТ RL | +| [Omni3](/nemotron/omni3/README) | SFT тЖТ RL MPO тЖТ RL text тЖТ RL vision тЖТ Eval | +| [Super3](/nemotron/super3/README) | Pretraining тЖТ SFT тЖТ RL тЖТ Quantization тЖТ Eval | +| [Embed](/nemotron/embed/README) | SDG тЖТ Data Prep тЖТ Finetune тЖТ Eval тЖТ Export тЖТ Deploy | +| [Rerank](/nemotron/rerank/README) | SDG тЖТ Data Prep тЖТ Finetune тЖТ Eval тЖТ Export тЖТ Deploy | + +## Why Nemotron? + +| | | +| --- | --- | +| **Open Models** | Transparent training data, techniques, and weights for community innovation | +| **Compute Efficiency** | Model pruning enabling higher throughput via TensorRT-LLM | +| **High Accuracy** | Built on frontier open models with human-aligned reasoning | +| **Flexible Deployment** | Deploy anywhere: edge, single GPU, or data center with NIM | + +## Features + +- **End-to-end pipelines** from raw data to deployment-ready models + +- **[Artifact lineage](/nemotron/artifacts)** via [W&B](/nemotron/wandb) from data to model + +- **Built on [NVIDIAтАЩs NeMo stack](/nemotron/nvidia-stack)** (Megatron-Bridge, NeMo-RL) + +- **Reproducible** with versioned configs, data blends, and checkpoints + +## Resources + +- [Tech Report](https://research.nvidia.com/labs/nemotron/files/NVIDIA-Nemotron-3-Nano-Technical-Report.pdf) тАУ Nemotron 3 Nano methodology + +- [Model Weights](https://huggingface.co/collections/nvidia/nvidia-nemotron-v3) тАУ pre-trained checkpoints on HuggingFace + +- [Pre-training Datasets](https://huggingface.co/collections/nvidia/nemotron-pre-training-datasets) тАУ open pre-training data + +- [Post-training Datasets](https://huggingface.co/collections/nvidia/nemotron-post-training-v3) тАУ SFT and RL data + +- [Artifact Lineage](/nemotron/artifacts) тАУ W&B integration guide + +- [Model training steps](/train-models/index) тАУ SFT, PEFT, RL, and optimization with `nemotron step run` diff --git a/docs/fern/pages-vnightly/model-eval/explanation/endpoint-types-and-benchmarks.mdx b/docs/fern/pages-vnightly/model-eval/explanation/endpoint-types-and-benchmarks.mdx new file mode 100644 index 000000000..9f2e5b65c --- /dev/null +++ b/docs/fern/pages-vnightly/model-eval/explanation/endpoint-types-and-benchmarks.mdx @@ -0,0 +1,51 @@ +--- +title: "Endpoint Types And Task Families" +slug: "model-eval/explanation/endpoint-types-and-benchmarks.html" +description: "eval/model_eval passes endpoint and task configuration to NeMo Evaluator Launcher. The endpoint type must match the selected task family." +--- + + + +`eval/model_eval` passes endpoint and task configuration to NeMo Evaluator Launcher. +The endpoint type must match the selected task family. + +## Endpoint Fields + +Hosted endpoint runs use: + +```text +target.api_endpoint.url +target.api_endpoint.model_id +target.api_endpoint.api_key_name +target.api_endpoint.type +``` + +The `type` value is usually `chat` or `completions`. +The URL path should agree with that value. + +## Task Families + +- Chat and instruction tasks issue chat-completions requests and score generated answers. + +- Log-probability tasks need a completions endpoint with logprobs support and a tokenizer that matches the served model. + +## Decision Table + +| Task family | Required endpoint type | Extra requirements | +| --- | --- | --- | +| Hosted chat smoke tests | chat | A chat-completions URL and a valid API key. | +| Instruction/chat tasks | chat | Generation parameters appropriate for the model and task. | +| Log-probability tasks | completions | A completions endpoint with logprobs support and a matching tokenizer. | + +The repository smoke-test config, `tiny_chat.yaml`, uses `mmlu_instruct` with `target.api_endpoint.type=chat`. +The checkpoint config, `default.yaml`, includes launcher tasks for Megatron checkpoint evaluation; verify endpoint and tokenizer requirements before changing those tasks. + +## Related Pages + +- [Tokenizer Alignment](/tokenizer-alignment) for the tokenizer side of log-probability tasks. + +- [Pipeline Overview](/pipeline-overview) for where endpoint config enters the run. + +- [Evaluate A Deployed Checkpoint](/../how-to/evaluate-deployed-checkpoint) for choosing the hosted or checkpoint path. + +- [Tasks Catalog](/../reference/benchmarks-catalog) for task identifiers. diff --git a/docs/fern/pages-vnightly/model-eval/explanation/index.mdx b/docs/fern/pages-vnightly/model-eval/explanation/index.mdx new file mode 100644 index 000000000..7d5bf7b21 --- /dev/null +++ b/docs/fern/pages-vnightly/model-eval/explanation/index.mdx @@ -0,0 +1,45 @@ +--- +title: "Concepts" +slug: "model-eval/explanation/index.html" +description: "The pages in this section cover the design rules behind eval/model_eval. Read them when you want to understand why the how-to pages take the actions they do, before you change a configuration default " +--- + +The pages in this section cover the design rules behind `eval/model_eval`. +Read them when you want to understand why the how-to pages take the actions they do, before you change a configuration default or adapt a recipe to a new deployment. + +## Pipeline And Architecture + + + +Artifact flow from a checkpoint or hosted endpoint, through `eval/model_eval`, into `eval_results` on disk. + +--- + +architecture + + + + + +## Deployment Contract + + + +Chat versus completions endpoints, and which benchmark families match each one. + +--- + +endpoint + + + + +Why log-probability benchmarks need a tokenizer that matches the served model. + +--- + +tokenizer + + + + diff --git a/docs/fern/pages-vnightly/model-eval/explanation/pipeline-overview.mdx b/docs/fern/pages-vnightly/model-eval/explanation/pipeline-overview.mdx new file mode 100644 index 000000000..7c76e9ca8 --- /dev/null +++ b/docs/fern/pages-vnightly/model-eval/explanation/pipeline-overview.mdx @@ -0,0 +1,70 @@ +--- +title: "Pipeline Overview" +slug: "model-eval/explanation/pipeline-overview.html" +description: "The eval/model_eval step is a thin Nemotron wrapper around NeMo Evaluator Launcher. It does not implement benchmark scoring itself. It loads a YAML config, applies command-line overrides, saves the la" +--- + + + +The `eval/model_eval` step is a thin Nemotron wrapper around NeMo Evaluator Launcher. +It does not implement benchmark scoring itself. +It loads a YAML config, applies command-line overrides, saves the launcher config, and calls `run_eval`. + +## Architecture + +```mermaid +%%{init: {'theme': 'base', 'themeVariables': { 'primaryBorderColor': '#333333', 'lineColor': '#333333', 'primaryTextColor': '#333333', 'clusterBkg': '#ffffff', 'clusterBorder': '#333333'}}}%% +flowchart LR + hosted["Hosted OpenAI-compatible endpoint"] --> cfg["target.api_endpoint"] + ckpt["Megatron Bridge iter_* checkpoint"] --> deploy["launcher deployment block"] + cfg --> step["eval/model_eval"] + deploy --> step + step --> launcher["NeMo Evaluator Launcher run_eval"] + launcher --> results["eval_results under output_dir"] +``` + +## Runtime Flow + +1. `step.py` calls `run_model_eval` from `runtime.py`. + +1. The runtime loads the selected config from `config/default.yaml`, `config/tiny_chat.yaml`, or a user-supplied YAML path. + +1. Hydra-style dotlist overrides are merged into the config. + +1. Nemotron-only keys are removed before launcher dispatch: `dry_run`, `output_dir`, `task_filters`, and `run`. + +1. `output_dir` is copied into `execution.output_dir`. + +1. The resolved launcher config is saved and printed as `launcher_config`. + +1. `nemo_evaluator_launcher.api.functional.run_eval` is called with the launcher config and optional task filters. + +## Input Artifacts + +The step declares optional `checkpoint_megatron` input. +Hosted endpoint runs do not consume a checkpoint artifact. +Launcher-managed checkpoint runs usually pass a concrete Megatron Bridge `iter_*` directory through `deployment.checkpoint_path`. + +## Output Artifact + +The step produces `eval_results`. +The exact directory layout and files are owned by NeMo Evaluator Launcher and the selected task implementations. +For result inspection guidance, refer to [Output Artifacts](/../reference/output-artifacts). + +## What Is Owned Where + +| Owned by Nemotron | Owned by NeMo Evaluator Launcher | +| --- | --- | +| Step discovery, config loading, dotlist overrides, launcher config saving. | Task implementations, endpoint probing, deployment orchestration, and result files. | +| dry_run, output_dir, task_filters, and run preprocessing. | execution, deployment, target, evaluation, tasks, and export semantics after dispatch. | +| The step.toml contract and agent-facing guidance. | Accepted task identifiers and version-specific task behavior. | + +## Related Pages + +- [Endpoint Types And Task Families](/endpoint-types-and-benchmarks) for endpoint/task pairing. + +- [Tokenizer Alignment](/tokenizer-alignment) for why log-probability tasks need a matching tokenizer. + +- [Output Artifacts](/../reference/output-artifacts) for result inspection. + +- [Discover The Model Evaluation Step](/../how-to/discover-the-step) for reading the step contract before configuring a run. diff --git a/docs/fern/pages-vnightly/model-eval/explanation/tokenizer-alignment.mdx b/docs/fern/pages-vnightly/model-eval/explanation/tokenizer-alignment.mdx new file mode 100644 index 000000000..0adcf41cd --- /dev/null +++ b/docs/fern/pages-vnightly/model-eval/explanation/tokenizer-alignment.mdx @@ -0,0 +1,48 @@ +--- +title: "Tokenizer Alignment" +slug: "model-eval/explanation/tokenizer-alignment.html" +description: "The hosted chat smoke path in tiny_chat.yaml does not require a tokenizer override. Tokenizer alignment becomes important when you run log-probability tasks such as HellaSwag or other tasks that score" +--- + + + +The hosted chat smoke path in `tiny_chat.yaml` does not require a tokenizer override. +Tokenizer alignment becomes important when you run log-probability tasks such as HellaSwag or other tasks that score candidate continuations by token likelihood. + +## Where The Tokenizer Lives + +Tokenizer settings live under: + +```text +evaluation.nemo_evaluator_config.config.params.extra.tokenizer +evaluation.nemo_evaluator_config.config.params.extra.tokenizer_backend +``` + +The `default.yaml` config sets the tokenizer to `$\{deployment.checkpoint_path\}/tokenizer`, which matches the Megatron Bridge checkpoint path when that checkpoint contains a tokenizer subdirectory. + +## Why It Must Match + +Log-probability tasks ask the endpoint to score candidate token sequences. +If the evaluator tokenizes candidates differently from the served model, the model scores the wrong token ids and the metric is not meaningful. + +## Accepted Shapes + +Use one of these tokenizer values when a selected task requires local tokenization: + +- A Hugging Face model id. + +- A filesystem path containing tokenizer files. + +- The `tokenizer/` subdirectory inside a Megatron Bridge `iter_*` checkpoint. + +Use `huggingface` for `evaluation.nemo_evaluator_config.config.params.extra.tokenizer_backend` unless the selected launcher task explicitly requires another backend. + +## Related Pages + +- [Endpoint Types And Task Families](/endpoint-types-and-benchmarks) for endpoint/task pairing. + +- [Pipeline Overview](/pipeline-overview) for runtime flow. + +- [Configuration Reference](/../reference/config-schema) for field-by-field documentation. + +- [Troubleshooting](/../reference/troubleshooting) for common tokenizer and checkpoint-path failures. diff --git a/docs/fern/pages-vnightly/model-eval/getting-started.mdx b/docs/fern/pages-vnightly/model-eval/getting-started.mdx new file mode 100644 index 000000000..70563f50b --- /dev/null +++ b/docs/fern/pages-vnightly/model-eval/getting-started.mdx @@ -0,0 +1,179 @@ +--- +title: "Getting Started With Model Evaluation" +slug: "model-eval/getting-started.html" +description: "In this tutorial, you will:" +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + + + + + +**In this tutorial, you will**: + +1. Discover the `eval/model_eval` step from the local catalog. + +1. Inspect the hosted-endpoint sample config, `tiny_chat.yaml`. + +1. Run a one-sample hosted chat evaluation. + +1. List the result files on disk. + + This tutorial requires between 15 and 30 minutes to complete, depending on endpoint latency. + + + + +Run a one-sample hosted chat evaluation with `eval/model_eval` and `tiny_chat.yaml`, then show me the launcher config and result files. + + + + + +## Prerequisites + +- Run all commands from the repository root. + +- Install the evaluator extra: + + ```console + $ uv sync --extra evaluator + ``` + +- A reachable OpenAI-compatible chat-completions endpoint. + +- A model identifier advertised by that endpoint. + +- A bearer token exported as the environment variable referenced by `target.api_endpoint.api_key_name`. + +## About The Sample Configuration + +The hosted chat sample file is at `src/nemotron/steps/eval/model_eval/config/tiny_chat.yaml`. +It sets `deployment.type: none`, points NeMo Evaluator Launcher at `target.api_endpoint`, and runs the chat-compatible `mmlu_instruct` task with `limit_samples: 1`. + +```yaml startLine={1} +# Tiny hosted chat endpoint smoke-test config. +# +# Export endpoint settings before running: +# export NEMO_EVALUATOR_MODEL_ID=\ +# export NEMO_EVALUATOR_MODEL_URL=\ +# export NEMO_EVALUATOR_API_KEY_NAME=NVIDIA_API_KEY +# export NEMO_EVALUATOR_ENDPOINT_TYPE=chat + +dry_run: false +output_dir: ./results-tiny-chat +task_filters: null + +execution: + type: local + mode: sequential + output_dir: $\{output_dir\} + +deployment: + type: none + +target: + api_endpoint: + model_id: ${oc.env:NEMO_EVALUATOR_MODEL_ID,''} + url: ${oc.env:NEMO_EVALUATOR_MODEL_URL,''} + api_key_name: ${oc.env:NEMO_EVALUATOR_API_KEY_NAME,NVIDIA_API_KEY} + type: ${oc.env:NEMO_EVALUATOR_ENDPOINT_TYPE,chat} + +evaluation: + nemo_evaluator_config: + config: + params: + temperature: 0.0 + top_p: 1.0 + max_new_tokens: 1024 + max_retries: 5 + parallelism: 1 + request_timeout: 3600 + limit_samples: 1 + target: + api_endpoint: + adapter_config: + output_dir: /results + use_progress_tracking: false + use_caching: true + caching_dir: /results/cache + use_response_logging: true + max_logged_responses: 5 + use_request_logging: true + max_logged_requests: 5 + tasks: + - name: mmlu_instruct +``` + +## Procedure + +1. Clone the repository, if you havenтАЩt already: + + ```console + $ git clone https://github.com/NVIDIA-NeMo/Nemotron && cd Nemotron + ``` + +1. Synchronize dependencies: + + ```console + $ uv sync --extra evaluator + ``` + +1. Export the endpoint values. +`EVAL_ROOT` is a directory you choose; it is the parent of the per-run `output_dir`. + + ```console + $ export NVIDIA_API_KEY="\" + $ export NEMO_EVALUATOR_MODEL_URL="\" + $ export NEMO_EVALUATOR_MODEL_ID="\" + $ export NEMO_EVALUATOR_ENDPOINT_TYPE=chat + $ export EVAL_ROOT="$(pwd)/output/eval-getting-started" + ``` + +1. Confirm that the local catalog exposes `eval/model_eval`. + + ```console + $ uv run --no-sync nemotron steps show eval/model_eval + ``` + +1. Run the hosted chat smoke test. + + ```console + $ uv run --no-sync nemotron steps run eval/model_eval \ + -c tiny_chat \ + output_dir="$EVAL_ROOT/results-tiny-chat" \ + target.api_endpoint.url="$NEMO_EVALUATOR_MODEL_URL" \ + target.api_endpoint.model_id="$NEMO_EVALUATOR_MODEL_ID" \ + target.api_endpoint.api_key_name=NVIDIA_API_KEY \ + target.api_endpoint.type=chat \ + evaluation.nemo_evaluator_config.config.params.limit_samples=1 + ``` + + The step writes the launcher config path to stdout. +If NeMo Evaluator Launcher returns an invocation id, the step also prints `status_command` and `logs_command` values that you can run to inspect the job. +Treat those commands as part of the run: wait until the launcher reports a +terminal status before expecting final metric artifacts. + + To inspect the merged Nemotron job config without invoking the launcher, add `--dry-run`. +To pass NeMo Evaluator LauncherтАЩs own dry-run flag, use the config override `dry_run=true`. + +1. List the files written under the output directory after the launcher job +reaches a terminal status. + + ```console + $ find "$EVAL_ROOT/results-tiny-chat" -maxdepth 5 -type f | sort + ``` + + The exact file names are owned by NeMo Evaluator Launcher and can vary by task version. + +## Next Steps + +- Run the standard checkpoint-evaluation config: [Evaluate A Deployed Checkpoint](/how-to/evaluate-deployed-checkpoint). + +- Look up the full YAML schema: [Configuration Reference](/reference/config-schema). + +- Drive the step from a coding agent: [Use The Model Evaluation Skill With Confidence](/using-skills). + +- Run hosted evaluations with custom task settings: [Run A Hosted Evaluation](/how-to/run-hosted-evaluation). diff --git a/docs/fern/pages-vnightly/model-eval/how-to/discover-the-step.mdx b/docs/fern/pages-vnightly/model-eval/how-to/discover-the-step.mdx new file mode 100644 index 000000000..7caca4521 --- /dev/null +++ b/docs/fern/pages-vnightly/model-eval/how-to/discover-the-step.mdx @@ -0,0 +1,244 @@ +--- +title: "Discover The Model Evaluation Step" +slug: "model-eval/how-to/discover-the-step.html" +description: "This guide shows how to find eval/model_eval in the step catalog, how to read its contract, and how to decide whether it applies." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + + + +This guide shows how to find `eval/model_eval` in the step catalog, how to read its contract, and how to decide whether it applies. + +## Prerequisites + +- The Nemotron repository is synced. + +- A local checkout is sufficient; discovery reads local `step.toml` files only. + +## List Eval-Category Steps + +```bash +uv run --no-sync nemotron steps list --category eval --json +``` + +The response includes `eval/model_eval`, the step that wraps NeMo Evaluator Launcher. + +## Inspect The Step Contract + +```bash +uv run --no-sync nemotron steps show eval/model_eval --json +``` + +The response contains the fields declared in `src/nemotron/steps/eval/model_eval/step.toml`. + +| Field | What It Tells You | +| --- | --- | +| consumes | Optional input artifact type. This step accepts checkpoint_megatron. | +| produces | Output artifact type. This step produces eval_results. | +| parameters | Documented knobs such as target.api_endpoint.*, deployment.checkpoint_path, task_filters, and launcher params. | +| strategies | Rules for hosted smoke tests, checkpoint evaluation, endpoint/task pairing, and task-name selection. | +| errors | Named failure modes and recovery guidance. | +| reference | Upstream NeMo Evaluator Launcher references. | + +## Read The Sample Files + +The step provides two config files under `src/nemotron/steps/eval/model_eval/config/`. + +```yaml startLine={1} +# Tiny hosted chat endpoint smoke-test config. +# +# Export endpoint settings before running: +# export NEMO_EVALUATOR_MODEL_ID=\ +# export NEMO_EVALUATOR_MODEL_URL=\ +# export NEMO_EVALUATOR_API_KEY_NAME=NVIDIA_API_KEY +# export NEMO_EVALUATOR_ENDPOINT_TYPE=chat + +dry_run: false +output_dir: ./results-tiny-chat +task_filters: null + +execution: + type: local + mode: sequential + output_dir: $\{output_dir\} + +deployment: + type: none + +target: + api_endpoint: + model_id: ${oc.env:NEMO_EVALUATOR_MODEL_ID,''} + url: ${oc.env:NEMO_EVALUATOR_MODEL_URL,''} + api_key_name: ${oc.env:NEMO_EVALUATOR_API_KEY_NAME,NVIDIA_API_KEY} + type: ${oc.env:NEMO_EVALUATOR_ENDPOINT_TYPE,chat} + +evaluation: + nemo_evaluator_config: + config: + params: + temperature: 0.0 + top_p: 1.0 + max_new_tokens: 1024 + max_retries: 5 + parallelism: 1 + request_timeout: 3600 + limit_samples: 1 + target: + api_endpoint: + adapter_config: + output_dir: /results + use_progress_tracking: false + use_caching: true + caching_dir: /results/cache + use_response_logging: true + max_logged_responses: 5 + use_request_logging: true + max_logged_requests: 5 + tasks: + - name: mmlu_instruct +``` + +`tiny_chat.yaml` is the hosted chat smoke-test config. +It sets `deployment.type: none`, reads `target.api_endpoint.*` from environment variables, and runs `mmlu_instruct` with `limit_samples: 1`. + +```yaml startLine={1} +# Standard NeMo Evaluator Launcher config for Megatron checkpoint evaluation. +# +# This mirrors the Nano3/Super3 eval shape: the `run` section is used by +# Nemotron for env/profile/artifact interpolation, then removed before handing +# the config to NeMo Evaluator Launcher. + +dry_run: false +output_dir: ./results + +run: + # Use a concrete Megatron Bridge iter_* checkpoint via + # `deployment.checkpoint_path=...`, or keep this as a W&B artifact reference + # consumed by `${art:model,path}`. + model: model:latest + env: + executor: local + container_image: nvcr.io/nvidia/nemo:25.11.nemotron_3_nano + host: ${oc.env:HOSTNAME,localhost} + user: ${oc.env:USER,''} + account: null + partition: null + remote_job_dir: ${oc.env:PWD}/.nemotron + time: "04:00:00" + wandb: + entity: null + project: null + +execution: + type: ${run.env.executor} + hostname: ${run.env.host} + username: ${run.env.user} + account: ${run.env.account} + partition: ${run.env.partition} + output_dir: $\{output_dir\} + walltime: ${run.env.time} + num_nodes: ${oc.select:run.env.nodes,1} + deployment: + n_tasks: ${execution.num_nodes} + auto_export: + destinations: + - wandb + env_vars: + deployment: + HF_HOME: ${run.env.remote_job_dir}/hf + HF_TOKEN: HF_TOKEN + NIM_CACHE_PATH: ${run.env.remote_job_dir}/nim + VLLM_CACHE_ROOT: ${run.env.remote_job_dir}/vllm + evaluation: + HF_HOME: ${run.env.remote_job_dir}/hf + HF_TOKEN: HF_TOKEN + mounts: + deployment: {} + evaluation: {} + mount_home: false + +deployment: + type: generic + image: ${run.env.container_image} + checkpoint_path: ${art:model,path} + multiple_instances: false + port: 1235 + served_model_name: nemo-model + health_check_path: /v1/health + command: >- + bash -c 'export TRITON_CACHE_DIR=/tmp/triton_cache; + python /opt/Export-Deploy/scripts/deploy/nlp/deploy_ray_inframework.py + --megatron_checkpoint /checkpoint/ + --num_gpus ${oc.select:run.env.gpus_per_node,1} + --tensor_model_parallel_size 1 + --expert_model_parallel_size 1 + --port 1235 + --num_replicas 1' + endpoints: + chat: /v1/chat/completions/ + completions: /v1/completions/ + health: /v1/health + +evaluation: + nemo_evaluator_config: + config: + params: + max_retries: 5 + parallelism: 4 + request_timeout: 6000 + limit_samples: null + extra: + tokenizer: ${deployment.checkpoint_path}/tokenizer + tokenizer_backend: huggingface + target: + api_endpoint: + adapter_config: + output_dir: /results + use_progress_tracking: false + use_caching: true + caching_dir: /results/cache + use_response_logging: true + max_logged_responses: 10 + use_request_logging: true + max_logged_requests: 10 + tasks: + - name: adlr_mmlu + nemo_evaluator_config: + config: + params: + top_p: 0.0 + - name: hellaswag + +export: + wandb: + entity: ${run.wandb.entity} + project: ${run.wandb.project} +``` + +`default.yaml` is the Megatron Bridge checkpoint evaluation config. +It uses NeMo Evaluator Launcher deployment and evaluates the configured `tasks` entries. + +## Decide Whether It Applies + +`eval/model_eval` applies when the following statements are true. + +- The model is already available as an OpenAI-compatible endpoint, or NeMo Evaluator Launcher can deploy the checkpoint from the selected config. + +- The tasks you need are implemented by the installed NeMo Evaluator Launcher stack. + +- The endpoint type matches the selected task family. + +`eval/model_eval` is not the right step when the evaluation needs a custom scorer that NeMo Evaluator Launcher does not implement. +Write a dedicated evaluation step in that case, modeled on the contract layout under `src/nemotron/steps/`. + +## Related + +- `src/nemotron/steps/eval/model_eval/step.toml` for the full step contract. + +- [Run A Hosted Evaluation](/run-hosted-evaluation) for the first procedural walk-through after discovery. + +- [Configuration Reference](/../reference/config-schema) for field-by-field YAML reference. + +- [CLI Reference](/../reference/cli-reference) for the flag and override surface. diff --git a/docs/fern/pages-vnightly/model-eval/how-to/evaluate-deployed-checkpoint.mdx b/docs/fern/pages-vnightly/model-eval/how-to/evaluate-deployed-checkpoint.mdx new file mode 100644 index 000000000..40e2d1b79 --- /dev/null +++ b/docs/fern/pages-vnightly/model-eval/how-to/evaluate-deployed-checkpoint.mdx @@ -0,0 +1,89 @@ +--- +title: "Evaluate A Deployed Checkpoint" +slug: "model-eval/how-to/evaluate-deployed-checkpoint.html" +description: "This guide covers the two supported evaluation shapes in the current eval/model_eval step." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + + + +This guide covers the two supported evaluation shapes in the current `eval/model_eval` step. + +- Use `tiny_chat.yaml` when the model is already hosted behind an OpenAI-compatible chat endpoint. + +- Use `default.yaml` when NeMo Evaluator Launcher should deploy a Megatron Bridge checkpoint and run the configured tasks. + +## Prerequisites + +- `uv sync --extra evaluator` has completed. + +- For hosted evaluation, you have the endpoint URL, model id, and API key environment variable. + +- For checkpoint evaluation, you have a concrete Megatron Bridge `iter_*` checkpoint path. + +## Hosted Endpoint Path + +For an existing endpoint, use the same command shape as [Run A Hosted Evaluation](/run-hosted-evaluation). + +```bash +export NVIDIA_API_KEY="\" +export NEMO_EVALUATOR_MODEL_URL="https://\/v1/chat/completions" +export NEMO_EVALUATOR_MODEL_ID="\" + +uv run --no-sync nemotron steps run eval/model_eval \ + -c tiny_chat \ + output_dir=./output/eval-hosted \ + target.api_endpoint.url="$NEMO_EVALUATOR_MODEL_URL" \ + target.api_endpoint.model_id="$NEMO_EVALUATOR_MODEL_ID" \ + target.api_endpoint.api_key_name=NVIDIA_API_KEY \ + target.api_endpoint.type=chat +``` + +## Launcher-Managed Checkpoint Path + +For Megatron Bridge checkpoints, use `default.yaml`. +Point `deployment.checkpoint_path` at the concrete iteration directory. + +```bash +uv run --no-sync nemotron steps run eval/model_eval \ + -c default \ + output_dir=./output/eval-megatron \ + deployment.checkpoint_path=/path/to/run/iter_0001000 \ + evaluation.nemo_evaluator_config.config.params.limit_samples=1 +``` + +The default config uses the launcher `deployment` block to serve the checkpoint and then runs the configured `tasks`. +If you change tasks to a log-probability task, keep `evaluation.nemo_evaluator_config.config.params.extra.tokenizer` aligned with the deployed checkpoint. + +## Endpoint And Task Pairing + +The endpoint type must match the task family. +Chat and instruction tasks need `target.api_endpoint.type=chat`. +Log-probability tasks such as HellaSwag need a completions endpoint with logprobs support and a matching tokenizer. +For the matching rule, refer to [Endpoint Types And Task Families](/../explanation/endpoint-types-and-benchmarks). + +## What To Check After Submission + +The step prints the launcher config path. +When NeMo Evaluator Launcher returns an invocation id, it also prints: + +```text +status_command: nemo-evaluator-launcher status \ +logs_command: nemo-evaluator-launcher logs \ +``` + +Run those commands to monitor the job, then inspect `output_dir` after completion. + +## Related + +- [Run A Hosted Evaluation](/run-hosted-evaluation) for the hosted endpoint walk-through. + +- [Concepts](/../explanation/index) for endpoint type, tokenizer alignment, and task-family concepts. + +- [Comparing Runs](/../reference/output-artifacts#model-eval-comparing-runs) for before-and-after evaluation framing. + +- [Deployment Guides](/../../deployment-guides) for broader deployment options. + +- [Configuration Reference](/../reference/config-schema) for the YAML field reference. diff --git a/docs/fern/pages-vnightly/model-eval/how-to/index.mdx b/docs/fern/pages-vnightly/model-eval/how-to/index.mdx new file mode 100644 index 000000000..7fc19479c --- /dev/null +++ b/docs/fern/pages-vnightly/model-eval/how-to/index.mdx @@ -0,0 +1,46 @@ +--- +title: "Model Evaluation How-To Guides" +slug: "model-eval/how-to/index.html" +description: "This section provides task-focused procedures for running eval/model_eval. For your first run, start with Getting Started With Model Evaluation. For agent-driven sessions, read Use The Model Evaluatio" +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + + + +This section provides task-focused procedures for running `eval/model_eval`. +For your first run, start with [Getting Started With Model Evaluation](/../getting-started). +For agent-driven sessions, read [Use The Model Evaluation Skill With Confidence](/../using-skills) first. + +## Choose A Guide + + + +List the step, read its contract, and decide whether it applies to the task. + +--- + +discovery + + + + +Run benchmarks against an already-running, OpenAI-compatible endpoint. + +--- + +hosted-endpoint + + + + +Choose a deployment path, deploy the endpoint, and point the step at it. + +--- + +deployment + + + + diff --git a/docs/fern/pages-vnightly/model-eval/how-to/run-hosted-evaluation.mdx b/docs/fern/pages-vnightly/model-eval/how-to/run-hosted-evaluation.mdx new file mode 100644 index 000000000..e9cf70a9d --- /dev/null +++ b/docs/fern/pages-vnightly/model-eval/how-to/run-hosted-evaluation.mdx @@ -0,0 +1,93 @@ +--- +title: "Run A Hosted Evaluation" +slug: "model-eval/how-to/run-hosted-evaluation.html" +description: "This guide runs eval/model_eval against an already-running OpenAI-compatible endpoint. For the out-of-the-box hosted smoke test, use tiny_chat.yaml." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + + + +This guide runs `eval/model_eval` against an already-running OpenAI-compatible endpoint. +For the out-of-the-box hosted smoke test, use `tiny_chat.yaml`. + +## Prerequisites + +- The Nemotron repository is synced with `uv sync --extra evaluator`. + +- A reachable endpoint URL. + +- The endpointтАЩs advertised model id. + +- A credential exported as an environment variable. + +## Choose The Starting Config + +| Config | Use | +| --- | --- | +| tiny_chat.yaml | Hosted chat smoke test. Runs mmlu_instruct with limit_samples: 1. | +| default.yaml | Launcher-managed checkpoint deployment and evaluation. Use this when the launcher should deploy a Megatron Bridge checkpoint. | + +Hosted chat QA should start with `tiny_chat.yaml`. + +## Set Endpoint Values + +```bash +export NVIDIA_API_KEY="\" +export NEMO_EVALUATOR_MODEL_URL="\" +export NEMO_EVALUATOR_MODEL_ID="\" +export NEMO_EVALUATOR_ENDPOINT_TYPE=chat +``` + +The config stores the API key environment variable name, not the secret value. + +## Run And Stream Output + +```bash +uv run --no-sync nemotron steps run eval/model_eval \ + -c tiny_chat \ + output_dir=./output/eval-tiny-chat \ + target.api_endpoint.url="$NEMO_EVALUATOR_MODEL_URL" \ + target.api_endpoint.model_id="$NEMO_EVALUATOR_MODEL_ID" \ + target.api_endpoint.api_key_name=NVIDIA_API_KEY \ + target.api_endpoint.type=chat \ + evaluation.nemo_evaluator_config.config.params.limit_samples=1 +``` + +The step saves the launcher config and then calls NeMo Evaluator Launcher. +If the launcher returns an invocation id, the command prints the status and log commands to run next. + +To compile the Nemotron job without invoking the launcher: + +```bash +uv run --no-sync nemotron steps run eval/model_eval -d -c tiny_chat \ + target.api_endpoint.url="$NEMO_EVALUATOR_MODEL_URL" \ + target.api_endpoint.model_id="$NEMO_EVALUATOR_MODEL_ID" +``` + +To invoke the launcher in its own dry-run mode: + +```bash +uv run --no-sync nemotron steps run eval/model_eval -c tiny_chat dry_run=true +``` + +## Validate Output Artifacts + +After the run completes, list files under `output_dir`. + +```bash +find ./output/eval-tiny-chat -maxdepth 5 -type f | sort +``` + +The exact file set is owned by NeMo Evaluator Launcher and can vary by task version. + +## Related + +- [Discover The Model Evaluation Step](/discover-the-step) for discovery commands. + +- [Evaluate A Deployed Checkpoint](/evaluate-deployed-checkpoint) for the launcher-managed checkpoint path. + +- [CLI Reference](/../reference/cli-reference) for the full flag and override surface. + +- [Configuration Reference](/../reference/config-schema) for the YAML field reference. diff --git a/docs/fern/pages-vnightly/model-eval/index.mdx b/docs/fern/pages-vnightly/model-eval/index.mdx new file mode 100644 index 000000000..2dd682e9b --- /dev/null +++ b/docs/fern/pages-vnightly/model-eval/index.mdx @@ -0,0 +1,184 @@ +--- +title: "About Model Evaluation" +slug: "model-eval/index.html" +description: "The eval/model_eval Nemotron step is a wrapper around NeMo Evaluator Launcher. It runs launcher tasks against either an existing OpenAI-compatible endpoint or a launcher-managed Megatron Bridge checkp" +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + + + +The `eval/model_eval` Nemotron step is a wrapper around NeMo Evaluator Launcher. +It runs launcher tasks against either an existing OpenAI-compatible endpoint or a launcher-managed Megatron Bridge checkpoint deployment, then writes an `eval_results` artifact to disk. + + +New to model evaluation or the Nemotron CLI? +Read [Use The Model Evaluation Skill With Confidence](/using-skills) for a short guide to productive agent sessions, then start the [Getting Started With Model Evaluation](/getting-started) tutorial to run one benchmark on one sample against a hosted endpoint. + + + +## When To Use + +Use `eval/model_eval` when the work matches one of the following. + +- Score a trained checkpoint with NeMo Evaluator Launcher tasks. + +- Compare a new training run against a baseline by running the same task set against both, with generation parameters and endpoint type held constant. + +- Perform a sample run against a hosted endpoint, to confirm the URL, credential, and model id before scaling up. + +- Pair this step with a baseline evaluation before training to capture before-and-after measurements around a training change, by following [Comparing Runs](/reference/output-artifacts#model-eval-comparing-runs). + +## Pipeline At A Glance + +```mermaid +%%{init: {'theme': 'base', 'themeVariables': { 'primaryBorderColor': '#333333', 'lineColor': '#333333', 'primaryTextColor': '#333333', 'clusterBkg': '#ffffff', 'clusterBorder': '#333333'}}}%% +flowchart LR + ckpt["Hugging Face or
    Megatron Bridge checkpoint"] --> deploy["OpenAI-compatible
    endpoint"] + hosted["Hosted endpoint"] --> deploy + deploy --> step["eval/model_eval
    (NeMo Evaluator)"] + step --> results["eval_results
    per-benchmark subdirs"] +``` + +NeMo Evaluator Launcher owns task execution and result files under `output_dir`. +For the contract and the on-disk layout, refer to [Output Artifacts](/reference/output-artifacts). + +## How It Works + +The runner reads a single YAML document, applies command-line overrides, removes Nemotron-only keys, saves the resolved launcher config, and calls `nemo_evaluator_launcher.api.functional.run_eval`. + +The endpoint type must match the benchmark family. +Chat and instruction benchmarks need a *chat* endpoint. +*Log-probability* tasks, such as HellaSwag, need a *completions* endpoint with `logprobs` support and a tokenizer that matches the served model. + +The hosted smoke-test config is `tiny_chat.yaml`. +The checkpoint-evaluation config is `default.yaml`. +Generation settings live under `evaluation.nemo_evaluator_config.config.params`. + +For the full concept set behind these design rules, refer to [Concepts](/explanation/index). + +## Documentation + + + +Run one benchmark on one sample against a hosted endpoint, end to end. + +--- + +15-30 min tutorial + + + + +Run a productive agent session: opening brief, four required inputs, and how `SKILL.md` keeps the session focused. + +--- + +10 min read newcomer + + + + +Discover the step, run a hosted evaluation, and evaluate a deployed checkpoint. + +--- + +3 guides task-focused + + + + +YAML schema, command-line flags, output artifact layout, benchmark catalog, and troubleshooting. + +--- + +5 references lookup + + + + +Architecture, endpoint and benchmark families, and tokenizer alignment. + +--- + +3 pages explanation + + + + + +## All Documentation + + + + +| Guide | What You Will Do | Time | +| --- | --- | --- | +| [Getting Started With Model Evaluation](/getting-started) | Run a one-sample evaluation against a hosted endpoint | 15-30 min | +| [Use The Model Evaluation Skill With Confidence](/using-skills) | Drive eval/model_eval from a coding agent | 10 min read | + + + + +| Guide | What You Will Do | +| --- | --- | +| [Discover The Model Evaluation Step](/how-to/discover-the-step) | List the step, read its contract, and decide whether it applies | +| [Run A Hosted Evaluation](/how-to/run-hosted-evaluation) | Run benchmarks against an already-running endpoint | +| [Evaluate A Deployed Checkpoint](/how-to/evaluate-deployed-checkpoint) | Pick a deployment path, then point the step at the endpoint | + + + + +| Reference | What You Will Find | +| --- | --- | +| [Configuration Reference](/reference/config-schema) | YAML field reference for default.yaml and tiny_chat.yaml | +| [CLI Reference](/reference/cli-reference) | Flags and Hydra overrides for nemotron steps run eval/model_eval | +| [Output Artifacts](/reference/output-artifacts) | eval_results contract and on-disk layout | +| [Tasks Catalog](/reference/benchmarks-catalog) | NeMo Evaluator Launcher task identifiers grouped by family | +| [Troubleshooting](/reference/troubleshooting) | Named error modes from step.toml, with cause and recovery | + + + + +| Concept | What You Will Learn | +| --- | --- | +| [Concepts](/explanation/index) | Map of the concept pages and how they relate | +| [Pipeline Overview](/explanation/pipeline-overview) | Artifact flow from checkpoint through eval/model_eval into eval_results | +| [Endpoint Types And Task Families](/explanation/endpoint-types-and-benchmarks) | Chat versus completions endpoints, and which benchmark families match each one | +| [Tokenizer Alignment](/explanation/tokenizer-alignment) | Why log-probability benchmarks need a tokenizer that matches the served model | + + + + + +## Before You Start + +- The Nemotron repository is synced and `uv sync` is complete. + +- A bearer token is exported as the environment variable named in `target.api_endpoint.api_key_name`. +Hosted smoke tests usually use `NVIDIA_API_KEY`. + +- A reachable evaluation endpoint URL and a model identifier the endpoint advertises. + +- A tokenizer that matches the served model when running log-probability tasks. +The hosted chat smoke test does not require a tokenizer override. + +## Limitations And Considerations + +- Cost: every benchmark sample issues at least one request to the endpoint, and hosted endpoints incur per-token cost. + +- Rate limits: hosted endpoints throttle concurrent requests, so set `evaluation.nemo_evaluator_config.config.params.parallelism` to a value the endpoint can serve. + +- Deployment: `tiny_chat.yaml` targets an already-deployed endpoint; `default.yaml` uses launcher-managed deployment for a Megatron Bridge checkpoint. + +- Comparability: scores are comparable when the endpoint type, task version, tokenizer, and generation parameters are held constant across runs. +The [Comparing Runs](/reference/output-artifacts#model-eval-comparing-runs) section explains the framing. + +## Related Documentation + +- The full `step.toml` contract: `src/nemotron/steps/eval/model_eval/step.toml` in the repository. + +- The before-and-after evaluation framing: [Comparing Runs](/reference/output-artifacts#model-eval-comparing-runs). + +- Upstream NeMo Evaluator quick-start: [https://docs.nvidia.com/nemo/evaluator/latest/get-started/quickstart/launcher.html](https://docs.nvidia.com/nemo/evaluator/latest/get-started/quickstart/launcher.html). diff --git a/docs/fern/pages-vnightly/model-eval/reference/benchmarks-catalog.mdx b/docs/fern/pages-vnightly/model-eval/reference/benchmarks-catalog.mdx new file mode 100644 index 000000000..bd4f85cd8 --- /dev/null +++ b/docs/fern/pages-vnightly/model-eval/reference/benchmarks-catalog.mdx @@ -0,0 +1,78 @@ +--- +title: "Tasks Catalog" +slug: "model-eval/reference/benchmarks-catalog.html" +description: "This page catalogs task identifiers used by eval/model_eval. NeMo Evaluator Launcher owns the authoritative task list. Use this page as a quick map, then verify exact names with the installed launcher" +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + + + +This page catalogs task identifiers used by `eval/model_eval`. +NeMo Evaluator Launcher owns the authoritative task list. +Use this page as a quick map, then verify exact names with the installed launcher. + +```bash +nemo-evaluator-launcher ls tasks +nemo-evaluator-launcher ls task \ +``` + +## Naming Rule + +Use the exact task id listed by NeMo Evaluator Launcher. +Do not prepend a harness name unless the launcher lists that exact dotted id. + +## Repository Starting Points + +| Config | Task entries | When to use | +| --- | --- | --- | +| tiny_chat.yaml | mmlu_instruct | Hosted chat smoke test. | +| default.yaml | adlr_mmlu, hellaswag | Launcher-managed Megatron checkpoint evaluation. | + +## Chat And Instruction Tasks + +These tasks use a chat endpoint. +The hosted smoke-test config uses this family. + +| Identifier | Notes | +| --- | --- | +| mmlu_instruct | Chat/instruction smoke task used by tiny_chat.yaml. | +| adlr_mmlu | Configured by default.yaml; verify endpoint requirements in the installed launcher. | + +## Log-Probability Tasks + +These tasks generally need a completions endpoint with logprobs support and a tokenizer that matches the served model. + +| Identifier | Notes | +| --- | --- | +| hellaswag | Configured by default.yaml; requires endpoint/tokenizer compatibility for meaningful scores. | + +Configure tokenizer values under: + +```text +evaluation.nemo_evaluator_config.config.params.extra.tokenizer +evaluation.nemo_evaluator_config.config.params.extra.tokenizer_backend +``` + +## Choosing Tasks + +Ask three questions before changing the task list. + +1. Does the installed launcher list the task id exactly? + +1. Does the endpoint type match the task family? + +1. Is this a smoke test or a production comparison? + +For production comparisons, keep the same task list, endpoint type, tokenizer, and generation parameters across baseline and post-training runs. + +## Related + +- [Configuration Reference](/config-schema) for the `tasks` section and evaluator params. + +- [Output Artifacts](/output-artifacts) for result layout expectations. + +- [Endpoint Types And Task Families](/../explanation/endpoint-types-and-benchmarks) for endpoint/task pairing. + +- [Comparing Runs](/output-artifacts#model-eval-comparing-runs) for before-and-after evaluation framing. diff --git a/docs/fern/pages-vnightly/model-eval/reference/cli-reference.mdx b/docs/fern/pages-vnightly/model-eval/reference/cli-reference.mdx new file mode 100644 index 000000000..47928d89c --- /dev/null +++ b/docs/fern/pages-vnightly/model-eval/reference/cli-reference.mdx @@ -0,0 +1,117 @@ +--- +title: "CLI Reference" +slug: "model-eval/reference/cli-reference.html" +description: "This page documents the CLI surface for nemotron steps run eval/model_eval. The flags are shared by every Nemotron step. The override examples are specific to the eval/model_eval YAML schema." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + + + +This page documents the CLI surface for `nemotron steps run eval/model_eval`. +The flags are shared by every Nemotron step. +The override examples are specific to the `eval/model_eval` YAML schema. + +## Syntax + +```bash +uv run nemotron steps run eval/model_eval [FLAGS] [HYDRA_OVERRIDES...] +``` + +Run the command from the repository root after `uv sync --extra evaluator`. +Pass the configuration name with `-c`, per-step overrides as `key=value` dotlists, and optional execution flags. + +## Flags + +| Flag | Long form | Purpose | +| --- | --- | --- | +| -c | --config | Config name inside src/nemotron/steps/eval/model_eval/config/, such as default or tiny_chat. Accepts a path to a YAML file. | +| -r | --run | Attached execution by using an environment profile defined in env.toml. | +| -b | --batch | Detached execution by using an environment profile defined in env.toml. | +| -d | --dry-run | Compile the Nemotron job config and exit without dispatching. | +| | --force-squash | Force re-squash of the container image when the selected backend builds one. | + +Invoking the command without `-c` resolves the runspec default, `default.yaml`. + +## Common Overrides + +| Override | Purpose | +| --- | --- | +| output_dir=<path> | Base output directory. The runtime also writes this into execution.output_dir before calling NeMo Evaluator Launcher. | +| dry_run=true | Pass dry-run mode to NeMo Evaluator Launcher. This is different from CLI --dry-run, which only compiles the Nemotron job. | +| task_filters=[<task>,...] | Optional subset of configured task names passed to NeMo Evaluator Launcher. | +| target.api_endpoint.url=<url> | OpenAI-compatible endpoint URL for hosted evaluation when deployment.type=none. | +| target.api_endpoint.model_id=<id> | Exact model id advertised by the hosted endpoint. | +| target.api_endpoint.api_key_name=<env-var-name> | Name of the environment variable holding the bearer token. This is the variable name, not the secret. | +| `target.api_endpoint.type=\` | +| evaluation.nemo_evaluator_config.config.params.limit_samples=<int> | Per-task sample cap for smoke tests. | +| evaluation.nemo_evaluator_config.config.params.parallelism=<int> | Concurrent requests issued by the evaluator where supported. | +| evaluation.nemo_evaluator_config.config.params.request_timeout=<int> | Per-request timeout in seconds. | +| evaluation.nemo_evaluator_config.config.params.extra.tokenizer=<path-or-id> | Tokenizer used by log-probability tasks such as HellaSwag. | +| deployment.checkpoint_path=<iter_* path> | Megatron Bridge checkpoint path used by default.yaml launcher deployment. | +| deployment.image=<container> | Container image used by the launcher deployment in default.yaml. | + +## Discovery Commands + +```bash +uv run --no-sync nemotron steps list --category eval --json +uv run --no-sync nemotron steps show eval/model_eval --json +``` + +`nemotron steps show eval/model_eval --json` prints the full step contract, including `consumes`, `produces`, `parameters`, `strategies`, and `errors`. + +## Examples + +### Hosted Chat Smoke Test + +```bash +: "${NVIDIA_API_KEY:?Set NVIDIA_API_KEY}" +: "${NEMO_EVALUATOR_MODEL_URL:?Set the chat-completions endpoint URL}" +: "${NEMO_EVALUATOR_MODEL_ID:?Set the endpoint model id}" + +uv run --no-sync nemotron steps run eval/model_eval \ + -c tiny_chat \ + output_dir=./output/eval-tiny-chat \ + target.api_endpoint.url="$NEMO_EVALUATOR_MODEL_URL" \ + target.api_endpoint.model_id="$NEMO_EVALUATOR_MODEL_ID" \ + target.api_endpoint.api_key_name=NVIDIA_API_KEY \ + target.api_endpoint.type=chat \ + evaluation.nemo_evaluator_config.config.params.limit_samples=1 +``` + +### Megatron Checkpoint Evaluation Config + +Use `default.yaml` when NeMo Evaluator Launcher should deploy a Megatron Bridge checkpoint and then run the configured tasks. + +```bash +uv run --no-sync nemotron steps run eval/model_eval \ + -c default \ + output_dir=./output/eval-megatron \ + deployment.checkpoint_path=/path/to/checkpoint/iter_0001000 \ + evaluation.nemo_evaluator_config.config.params.limit_samples=1 +``` + +### Compile Without Dispatching + +```bash +uv run --no-sync nemotron steps run eval/model_eval -d -c tiny_chat \ + target.api_endpoint.url="$NEMO_EVALUATOR_MODEL_URL" \ + target.api_endpoint.model_id="$NEMO_EVALUATOR_MODEL_ID" +``` + +### Launcher Dry Run + +```bash +uv run --no-sync nemotron steps run eval/model_eval -c tiny_chat dry_run=true +``` + +## Related + +- [Configuration Reference](/config-schema) for the YAML schema accepted by `-c` and dotlist overrides. + +- [Output Artifacts](/output-artifacts) for the on-disk layout produced under `output_dir`. + +- [Run A Hosted Evaluation](/../how-to/run-hosted-evaluation) for a procedural walk-through. + +- [Discover The Model Evaluation Step](/../how-to/discover-the-step) for the step-contract discovery commands. diff --git a/docs/fern/pages-vnightly/model-eval/reference/config-schema.mdx b/docs/fern/pages-vnightly/model-eval/reference/config-schema.mdx new file mode 100644 index 000000000..f0faa2d8f --- /dev/null +++ b/docs/fern/pages-vnightly/model-eval/reference/config-schema.mdx @@ -0,0 +1,287 @@ +--- +title: "Configuration Reference" +slug: "model-eval/reference/config-schema.html" +description: "This page documents the YAML schema consumed by nemotron steps run eval/model_eval. The step is a thin wrapper around NeMo Evaluator Launcher: it loads a YAML config, applies Hydra-style overrides, re" +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + + + +This page documents the YAML schema consumed by `nemotron steps run eval/model_eval`. +The step is a thin wrapper around NeMo Evaluator Launcher: it loads a YAML config, applies Hydra-style overrides, removes Nemotron-only keys, saves a launcher config, and calls `nemo_evaluator_launcher.api.functional.run_eval`. + +## Sample Configs + +| Config | Purpose | +| --- | --- | +| tiny_chat.yaml | Hosted chat endpoint smoke test. Uses deployment.type: none, target.api_endpoint.*, and one configured task, mmlu_instruct. | +| default.yaml | Megatron Bridge checkpoint evaluation through NeMo Evaluator Launcher. Uses launcher-managed execution, deployment, evaluation, and tasks sections. | + +## Top-Level Keys + +```yaml startLine={1} +# Tiny hosted chat endpoint smoke-test config. +# +# Export endpoint settings before running: +# export NEMO_EVALUATOR_MODEL_ID=\ +# export NEMO_EVALUATOR_MODEL_URL=\ +# export NEMO_EVALUATOR_API_KEY_NAME=NVIDIA_API_KEY +# export NEMO_EVALUATOR_ENDPOINT_TYPE=chat + +dry_run: false +output_dir: ./results-tiny-chat +task_filters: null + +execution: + type: local + mode: sequential + output_dir: $\{output_dir\} + +deployment: + type: none + +target: + api_endpoint: + model_id: ${oc.env:NEMO_EVALUATOR_MODEL_ID,''} + url: ${oc.env:NEMO_EVALUATOR_MODEL_URL,''} + api_key_name: ${oc.env:NEMO_EVALUATOR_API_KEY_NAME,NVIDIA_API_KEY} + type: ${oc.env:NEMO_EVALUATOR_ENDPOINT_TYPE,chat} + +evaluation: + nemo_evaluator_config: + config: + params: + temperature: 0.0 + top_p: 1.0 + max_new_tokens: 1024 + max_retries: 5 + parallelism: 1 + request_timeout: 3600 + limit_samples: 1 + target: + api_endpoint: + adapter_config: + output_dir: /results + use_progress_tracking: false + use_caching: true + caching_dir: /results/cache + use_response_logging: true + max_logged_responses: 5 + use_request_logging: true + max_logged_requests: 5 + tasks: + - name: mmlu_instruct +``` + +```yaml startLine={1} +# Standard NeMo Evaluator Launcher config for Megatron checkpoint evaluation. +# +# This mirrors the Nano3/Super3 eval shape: the `run` section is used by +# Nemotron for env/profile/artifact interpolation, then removed before handing +# the config to NeMo Evaluator Launcher. + +dry_run: false +output_dir: ./results + +run: + # Use a concrete Megatron Bridge iter_* checkpoint via + # `deployment.checkpoint_path=...`, or keep this as a W&B artifact reference + # consumed by `${art:model,path}`. + model: model:latest + env: + executor: local + container_image: nvcr.io/nvidia/nemo:25.11.nemotron_3_nano + host: ${oc.env:HOSTNAME,localhost} + user: ${oc.env:USER,''} + account: null + partition: null + remote_job_dir: ${oc.env:PWD}/.nemotron + time: "04:00:00" + wandb: + entity: null + project: null + +execution: + type: ${run.env.executor} + hostname: ${run.env.host} + username: ${run.env.user} + account: ${run.env.account} + partition: ${run.env.partition} + output_dir: $\{output_dir\} + walltime: ${run.env.time} + num_nodes: ${oc.select:run.env.nodes,1} + deployment: + n_tasks: ${execution.num_nodes} + auto_export: + destinations: + - wandb + env_vars: + deployment: + HF_HOME: ${run.env.remote_job_dir}/hf + HF_TOKEN: HF_TOKEN + NIM_CACHE_PATH: ${run.env.remote_job_dir}/nim + VLLM_CACHE_ROOT: ${run.env.remote_job_dir}/vllm + evaluation: + HF_HOME: ${run.env.remote_job_dir}/hf + HF_TOKEN: HF_TOKEN + mounts: + deployment: {} + evaluation: {} + mount_home: false + +deployment: + type: generic + image: ${run.env.container_image} + checkpoint_path: ${art:model,path} + multiple_instances: false + port: 1235 + served_model_name: nemo-model + health_check_path: /v1/health + command: >- + bash -c 'export TRITON_CACHE_DIR=/tmp/triton_cache; + python /opt/Export-Deploy/scripts/deploy/nlp/deploy_ray_inframework.py + --megatron_checkpoint /checkpoint/ + --num_gpus ${oc.select:run.env.gpus_per_node,1} + --tensor_model_parallel_size 1 + --expert_model_parallel_size 1 + --port 1235 + --num_replicas 1' + endpoints: + chat: /v1/chat/completions/ + completions: /v1/completions/ + health: /v1/health + +evaluation: + nemo_evaluator_config: + config: + params: + max_retries: 5 + parallelism: 4 + request_timeout: 6000 + limit_samples: null + extra: + tokenizer: ${deployment.checkpoint_path}/tokenizer + tokenizer_backend: huggingface + target: + api_endpoint: + adapter_config: + output_dir: /results + use_progress_tracking: false + use_caching: true + caching_dir: /results/cache + use_response_logging: true + max_logged_responses: 10 + use_request_logging: true + max_logged_requests: 10 + tasks: + - name: adlr_mmlu + nemo_evaluator_config: + config: + params: + top_p: 0.0 + - name: hellaswag + +export: + wandb: + entity: ${run.wandb.entity} + project: ${run.wandb.project} +``` + +| Key | Used By | Purpose | +| --- | --- | --- | +| dry_run | Nemotron runtime | Passed to NeMo Evaluator Launcher as run_eval(..., dry_run=...). | +| output_dir | Nemotron runtime | Copied into execution.output_dir before launcher dispatch. | +| task_filters | Nemotron runtime | Optional task-name subset passed to launcher. | +| run | Nemotron runtime | Nemotron-side artifact, environment, and W&B interpolation. Removed before launcher dispatch. | +| execution | NeMo Evaluator Launcher | Where and how launcher execution runs. | +| deployment | NeMo Evaluator Launcher | How the evaluated model is deployed, or type: none for an existing endpoint. | +| target | NeMo Evaluator Launcher | Existing API endpoint metadata for hosted evaluation. | +| evaluation | NeMo Evaluator Launcher | Evaluator config, generation params, logging, caching, and adapter settings. | +| tasks | NeMo Evaluator Launcher | Exact task entries to run. Each entry has a name. | +| export | NeMo Evaluator Launcher | Optional export settings, such as W&B export. | + +## Hosted Endpoint Fields + +Use these fields with `tiny_chat.yaml` or any config that sets `deployment.type: none`. + +| Field | Purpose | +| --- | --- | +| target.api_endpoint.model_id | Exact model id advertised by the endpoint. | +| target.api_endpoint.url | Full OpenAI-compatible endpoint URL, including /v1/chat/completions or /v1/completions. | +| target.api_endpoint.api_key_name | Environment variable name that holds the bearer token. Never put the secret value in config. | +| target.api_endpoint.type | Endpoint type, usually chat for hosted chat smoke tests. | + +The `tiny_chat.yaml` file reads these values from `NEMO_EVALUATOR_MODEL_ID`, `NEMO_EVALUATOR_MODEL_URL`, `NEMO_EVALUATOR_API_KEY_NAME`, and `NEMO_EVALUATOR_ENDPOINT_TYPE`. + +## Evaluation Params + +Generation and evaluator controls live under: + +```text +evaluation.nemo_evaluator_config.config.params +``` + +Common fields are: + +| Field | Purpose | +| --- | --- | +| temperature | Sampling temperature for generation tasks. | +| top_p | Top-p nucleus sampling. | +| max_new_tokens | Maximum generated tokens for chat/instruction tasks. | +| max_retries | Request retry count. | +| parallelism | Request concurrency where supported. | +| request_timeout | Per-request timeout in seconds. | +| limit_samples | Optional per-task sample cap. Use 1 for smoke tests. | +| extra.tokenizer | Tokenizer path or Hugging Face id required by log-probability tasks. | +| extra.tokenizer_backend | Tokenizer backend, usually huggingface. | + +## Tasks + +Tasks are NeMo Evaluator Launcher task entries. +Use exact task IDs from the installed launcher, for example: + +```bash +nemo-evaluator-launcher ls tasks +nemo-evaluator-launcher ls task mmlu_instruct +``` + +The sample configs define these starting points. + +| Config | Tasks | +| --- | --- | +| tiny_chat.yaml | mmlu_instruct | +| default.yaml | adlr_mmlu, hellaswag | + +Do not prepend a harness name unless the launcher lists that exact dotted task id. + +## Checkpoint Deployment Fields + +The `default.yaml` config uses launcher-managed deployment for a Megatron Bridge checkpoint. +The most common override is: + +```bash +deployment.checkpoint_path=/path/to/iter_0001000 +``` + +Use the concrete `iter_*` checkpoint directory, not just the parent training output directory. +For log-probability tasks, keep the tokenizer aligned with the deployed checkpoint through `evaluation.nemo_evaluator_config.config.params.extra.tokenizer`. + +## Validation Behavior + +Nemotron does not implement a separate benchmark loop for this step. +It validates only enough to build the launcher config and import NeMo Evaluator Launcher. +Endpoint checks, task validation, result writing, and launcher invocation state are owned by NeMo Evaluator Launcher. + +## Related + +- [CLI Reference](/cli-reference) for command-line flags and Hydra override syntax. + +- [Tasks Catalog](/benchmarks-catalog) for task identifiers grouped by endpoint family. + +- [Output Artifacts](/output-artifacts) for the `eval_results` contract and the on-disk layout. + +- [Troubleshooting](/troubleshooting) for common launcher and config failures. + +- `src/nemotron/steps/eval/model_eval/step.toml` for the full step contract. diff --git a/docs/fern/pages-vnightly/model-eval/reference/index.mdx b/docs/fern/pages-vnightly/model-eval/reference/index.mdx new file mode 100644 index 000000000..91e3e89bc --- /dev/null +++ b/docs/fern/pages-vnightly/model-eval/reference/index.mdx @@ -0,0 +1,62 @@ +--- +title: "Model Evaluation Reference" +slug: "model-eval/reference/index.html" +description: "Lookup pages for eval/model_eval. For the section overview, refer to About Model Evaluation. For procedural walk-throughs, refer to Model Evaluation How-To Guides." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + + + +Lookup pages for `eval/model_eval`. +For the section overview, refer to [About Model Evaluation](/../index). +For procedural walk-throughs, refer to [Model Evaluation How-To Guides](/../how-to/index). + + + +YAML schema for `default.yaml` and `tiny_chat.yaml`, field by field. + +--- + +yaml + + + + +`nemotron steps run eval/model_eval` flags and Hydra overrides. + +--- + +cli + + + + +The `eval_results` contract and the on-disk directory layout. + +--- + +artifacts + + + + +Benchmark identifiers grouped by family, with endpoint-type guidance. + +--- + +tasks + + + + +Named error modes from `step.toml`, with the most common cause and the recovery for each. + +--- + +errors + + + + diff --git a/docs/fern/pages-vnightly/model-eval/reference/output-artifacts.mdx b/docs/fern/pages-vnightly/model-eval/reference/output-artifacts.mdx new file mode 100644 index 000000000..b084aa0c2 --- /dev/null +++ b/docs/fern/pages-vnightly/model-eval/reference/output-artifacts.mdx @@ -0,0 +1,88 @@ +--- +title: "Output Artifacts" +slug: "model-eval/reference/output-artifacts.html" +description: "This page describes the artifact produced by eval/model_eval." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + + + +This page describes the artifact produced by `eval/model_eval`. + +## The `eval_results` Contract + +`step.toml` declares a single produced artifact. + +| Field | Value | +| --- | --- | +| type | eval_results | +| description | Benchmark metrics, artifacts, and evaluation summaries produced by NeMo Evaluator. | + +The contract is intentionally loose. +Nemotron does not normalize evaluator outputs. +NeMo Evaluator Launcher owns the exact file set and directory shape under the configured `output_dir`. + +## Launcher Config + +Before calling the launcher, the step saves the resolved launcher config and prints: + +```text +launcher_config: \ +``` + +If the launcher returns an invocation id, the step also prints: + +```text +launcher_invocation_id: \ +status_command: nemo-evaluator-launcher status \ +logs_command: nemo-evaluator-launcher logs \ +``` + +Those commands are the source of truth for job state and logs after submission. + +## Directory Layout + +The base output directory is `output_dir`, copied into `execution.output_dir`. +The exact files inside that directory depend on the configured launcher tasks. + +For the hosted chat smoke test, inspect: + +```bash +find ./output/eval-tiny-chat -maxdepth 5 -type f | sort +``` + +For checkpoint evaluation, inspect the output directory you supplied: + +```bash +find ./output/eval-megatron -maxdepth 5 -type f | sort +``` + + + +## Comparing Runs + +Evaluation results carry meaning when paired with another evaluation. +A trained checkpoint is scored against a baseline, a new prompt format is scored against an older one, and a quantized export is scored against the unquantized weights. +The comparison is honest when the surrounding configuration is held constant. + +Apply the following practices before treating any single evaluation as a result. + +- Run a lightweight baseline before the training, conversion, or quantization step you are measuring. + +- Snapshot the exact evaluation config, including config file name, `output_dir`, endpoint fields, task list, tokenizer, and generation parameters. + +- Place a date or run identifier in `output_dir` so baseline and post-change directories live side by side. + +- Keep endpoint type, task versions, tokenizer, and generation parameters identical between runs. + +- Rerun the baseline task set first before exploring new tasks. + +## Related + +- [Configuration Reference](/config-schema) for the YAML keys that influence what is written. + +- [Tasks Catalog](/benchmarks-catalog) for task identifiers. + +- `src/nemotron/steps/eval/model_eval/step.toml` for the full step contract. diff --git a/docs/fern/pages-vnightly/model-eval/reference/troubleshooting.mdx b/docs/fern/pages-vnightly/model-eval/reference/troubleshooting.mdx new file mode 100644 index 000000000..55dc85776 --- /dev/null +++ b/docs/fern/pages-vnightly/model-eval/reference/troubleshooting.mdx @@ -0,0 +1,101 @@ +--- +title: "Troubleshooting" +slug: "model-eval/reference/troubleshooting.html" +description: "This page maps common eval/model_eval failures to the config fields that usually need correction. Nemotron builds a launcher config and calls NeMo Evaluator Launcher; task execution, endpoint checks, " +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + + + +This page maps common `eval/model_eval` failures to the config fields that usually need correction. +Nemotron builds a launcher config and calls NeMo Evaluator Launcher; task execution, endpoint checks, and result writing are owned by the launcher. + +## Evaluator Extra Missing + +Symptom: + +```text +Error: nemo-evaluator-launcher is required for evaluation +Install with: uv sync --extra evaluator +``` + +Recovery: + +```bash +uv sync --extra evaluator +``` + +Then rerun the same `nemotron steps run eval/model_eval` command with `uv run --no-sync`. + +## Hosted Endpoint Fails + +Most hosted failures come from one of these fields: + +| Field | What To Check | +| --- | --- | +| target.api_endpoint.url | Full endpoint URL, including /v1/chat/completions or /v1/completions. | +| target.api_endpoint.model_id | Exact model id returned by the endpointтАЩs models API or UI. | +| target.api_endpoint.api_key_name | Environment variable name, not the secret value. | +| target.api_endpoint.type | chat for chat tasks, completions for completions/logprob tasks. | + +For hosted smoke tests, start with `tiny_chat.yaml` and `target.api_endpoint.type=chat`. + +## Wrong Task For Endpoint Type + +Chat tasks need a chat endpoint. +Log-probability tasks generally need a completions endpoint with logprobs support and a tokenizer. + +If the launcher fails after endpoint setup, check: + +```text +tasks +target.api_endpoint.type +evaluation.nemo_evaluator_config.config.params.extra.tokenizer +``` + +Use exact task IDs from: + +```bash +nemo-evaluator-launcher ls tasks +``` + +## Bad Checkpoint Path + +When using `default.yaml`, point `deployment.checkpoint_path` at a concrete Megatron Bridge `iter_*` directory. +Do not point it only at the parent training output directory. + +```bash +deployment.checkpoint_path=/path/to/run/iter_0001000 +``` + +For log-probability tasks, also verify: + +```bash +evaluation.nemo_evaluator_config.config.params.extra.tokenizer=/path/to/run/iter_0001000/tokenizer +``` + +## Launcher Job State + +The step prints launcher follow-up commands when the launcher returns an invocation id. + +```text +status_command: nemo-evaluator-launcher status \ +logs_command: nemo-evaluator-launcher logs \ +``` + +Run those commands before changing config. +The launcher logs usually distinguish endpoint/authentication failures from task-schema failures. + +## Related Pages + +- [Configuration Reference](/config-schema) for field names and config shape. + +- [Output Artifacts](/output-artifacts) for launcher config and result paths. + +- [Tokenizer Alignment](/../explanation/tokenizer-alignment) for tokenizer alignment. + +- [Endpoint Types And Task Families](/../explanation/endpoint-types-and-benchmarks) for endpoint/task pairing. + +- `src/nemotron/steps/eval/model_eval/step.toml` for the documented error names. diff --git a/docs/fern/pages-vnightly/model-eval/using-skills.mdx b/docs/fern/pages-vnightly/model-eval/using-skills.mdx new file mode 100644 index 000000000..8af7746b8 --- /dev/null +++ b/docs/fern/pages-vnightly/model-eval/using-skills.mdx @@ -0,0 +1,86 @@ +--- +title: "Use The Model Evaluation Skill With Confidence" +slug: "model-eval/using-skills.html" +description: "This page is for users who plan to drive eval/model_eval from a coding agent. The goal is a clear handoff between what you decide and what the agent edits or runs." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + + + +This page is for users who plan to drive `eval/model_eval` from a coding agent. +The goal is a clear handoff between what you decide and what the agent edits or runs. + +## What The Agent Needs + +For the hosted chat smoke test, provide: + +- The endpoint URL, including the `/v1/chat/completions` path. + +- The model id advertised by the endpoint. + +- The API key environment variable name, usually `NVIDIA_API_KEY`. + +- The output directory to use. + +For checkpoint evaluation with `default.yaml`, also provide: + +- The concrete Megatron Bridge `iter_*` checkpoint path. + +- The tokenizer path or Hugging Face tokenizer id if the selected task needs logprobs. + +## Recommended First Run + +Ask the agent to start with `tiny_chat.yaml` unless you explicitly need launcher-managed checkpoint deployment. +The first command should look like: + +```bash +uv run --no-sync nemotron steps run eval/model_eval \ + -c tiny_chat \ + output_dir=./output/eval-tiny-chat \ + target.api_endpoint.url="$NEMO_EVALUATOR_MODEL_URL" \ + target.api_endpoint.model_id="$NEMO_EVALUATOR_MODEL_ID" \ + target.api_endpoint.api_key_name=NVIDIA_API_KEY \ + target.api_endpoint.type=chat +``` + +## A Reusable Opening Brief + +```text +Context: [one sentence on the model and what you want to score] +Goal for this session: [for example, a hosted chat smoke test that writes files on disk] +Endpoint URL: [full URL with path, or "I do not have this yet, please ask"] +Model identifier: [as the endpoint advertises it] +API key environment variable: [name only, for example NVIDIA_API_KEY] +Checkpoint path: [only if using default.yaml launcher deployment] +Tokenizer: [only if using log-probability tasks] +Hard limits: [for example, do not change endpoint type, do not fabricate values] +Please: Use `eval/model_eval` defaults from the repo unless something blocks that. +``` + +The agent should ask for missing fields instead of guessing. + +## What Success Looks Like + +A reasonable first success is the hosted chat smoke test described in [Getting Started With Model Evaluation](/getting-started). +The session reaches that point when: + +- The agent issues one `nemotron steps run eval/model_eval -c tiny_chat ...` command. + +- The command prints a `launcher_config` path. + +- The output directory contains files after NeMo Evaluator Launcher completes. + +If the launcher fails, the agent should report the error and the relevant config fields. +It should not retry with fabricated endpoint, model, or credential values. + +## Next Steps + +- Run the tutorial: [Getting Started With Model Evaluation](/getting-started). + +- Pick a deployment path: [Evaluate A Deployed Checkpoint](/how-to/evaluate-deployed-checkpoint). + +- Run a hosted evaluation: [Run A Hosted Evaluation](/how-to/run-hosted-evaluation). + +- Look up flags and YAML fields: [CLI Reference](/reference/cli-reference) and [Configuration Reference](/reference/config-schema). diff --git a/docs/fern/pages-vnightly/nemo_runspec/artifacts.mdx b/docs/fern/pages-vnightly/nemo_runspec/artifacts.mdx new file mode 100644 index 000000000..a53269f55 --- /dev/null +++ b/docs/fern/pages-vnightly/nemo_runspec/artifacts.mdx @@ -0,0 +1,309 @@ +--- +title: "Artifact Tracking" +slug: "nemo_runspec/artifacts.html" +description: "nemo_runspec.artifacts provides the tracking infrastructure that connects data prep, training, and evaluation stages through versioned artifact references. It supports two backends that can run simult" +--- + +`nemo_runspec.artifacts` provides the tracking infrastructure that connects data prep, training, and evaluation stages through versioned artifact references. It supports two backends that can run simultaneously: + +- **Manifest-based tracking** (`nemo_runspec.manifest_tracker`) тАФ writes structured JSON manifests to any fsspec-compatible storage (local, Lustre, S3, GCS, HF Hub). Always reliable, zero external dependencies. + +- **W&B artifact tracking** тАФ logs artifacts to [Weights & Biases](/../nemotron/wandb) for team collaboration, UI browsing, and lineage graphs. + +Manifests are the always-on foundation; W&B is best-effort on top. + +> For artifact *types* (PretrainBlendsArtifact, SFTDataArtifact, etc.) and the Pydantic base class, see [nemotron.kit artifacts](/../nemotron/artifacts). + +## Configuration + +### env.toml + +Configure artifact tracking in your `env.toml`. These are team-wide defaults merged into every job config by `build_job_config()`: + +```toml +# Both backends: manifest always, wandb best-effort +[artifacts] +wandb = true + +[artifacts.manifest] +root = "/lustre/team/artifacts" + +[wandb] +project = "nemotron" +entity = "YOUR-TEAM" +``` + +Backend combinations: + +| Setup | Use Case | +| --- | --- | +| manifest + wandb = true | **Recommended.** Manifest is always reliable; wandb adds UI + team features | +| manifest only | Offline / local development, no wandb dependency | +| wandb = true only | Legacy behavior, wandb-only tracking | +| Neither | No artifact tracking | + +### Disabling per-run + +Override via dotlist on any command: + +```bash +# Run with manifest only (no wandb) +uv run nemotron super3 sft --run dlw artifacts.wandb=false + +# Fully disable artifact tracking +uv run nemotron super3 sft --run dlw artifacts.manifest.root=null artifacts.wandb=false +``` + +### Manifest Storage Backends + +The `manifest.root` value supports any fsspec-compatible URI: + +| Backend | Example | Notes | +| --- | --- | --- | +| Local / Lustre / NFS | /lustre/team/artifacts | Best for training clusters | +| S3 | s3://bucket/artifacts | Requires AWS credentials | +| GCS | gs://bucket/artifacts | Requires GCP credentials | +| HF Hub | hf://org/repo-name | Great for sharing; batched commits | + +### Config Flow + +1. `build_job_config()` merges `[artifacts]` from env.toml into the job config (YAML overrides env.toml) + +2. `extract_train_config()` preserves the top-level `artifacts:` section + +3. Inside the container, `setup_artifact_tracking()` reads `config.artifacts` to initialize backends + +4. `build_env_vars()` extracts `WANDB_PROJECT` / `WANDB_ENTITY` from `[wandb]` in env.toml + +## The Two-Function API + +Scripts use two functions from `nemo_runspec.artifacts`: + +```python +from nemo_runspec.artifacts import setup_artifact_tracking, log_artifact +``` + +### `setup_artifact_tracking(config)` тАФ Initialize backends and resolve references + +Called early, **before** dataclass conversion. Reads `config.artifacts`, initializes the active backends, and resolves `$\{art:...\}` references. + +```python +config = load_omegaconf_yaml(config_path) +tracking = setup_artifact_tracking(config) # BEFORE dataclass conversion +cfg = omegaconf_to_dataclass(config, MyConfig) +``` + +Returns an `ArtifactTrackingResult` with flags: + +- `tracking.manifest` тАФ whether manifest backend is active + +- `tracking.wandb` тАФ whether wandb backend is active + +- `tracking.qualified_names` тАФ wandb artifact qualified names for lineage registration + +### `log_artifact(artifact, tracking)` тАФ Save to all active backends + +Saves the artifact to **all** active backends. Replaces `artifact.save()` in data-prep scripts: + +```python +artifact = SFTDataArtifact(path=output_dir, pack_size=4096, ...) +log_artifact(artifact, tracking) # logs to manifest + wandb +``` + +When both backends are active: + +1. `artifact.save()` logs via the global lineage tracker (WandbTracker after `init_wandb_from_env()`) + +2. `log_artifact` additionally writes to ManifestTracker (stored reference survives the global overwrite) + +When only one backend is active, `artifact.save()` handles everything and `log_artifact` is effectively a pass-through. + +### Resolution Priority + +When resolving `$\{art:...\}` references: + +| Active Backends | Resolution Method | +| --- | --- | +| wandb + manifest | Resolve via wandb API (downloads artifact, gets lineage) | +| manifest only | Resolve from local/fsspec manifest files | +| wandb only | Resolve via wandb API | +| neither | Fall through to local resolver | + +## Usage Patterns + +### Train Scripts (self-contained packager) + +Train scripts are inlined into `main.py` by the self-contained packager. They use `setup_artifact_tracking` for initialization and stage-specific monkey-patches for checkpoint logging: + +```python +tracking = setup_artifact_tracking(config, artifacts_key="run") + +# Stage-specific monkey-patches based on active backends +if tracking.manifest and tracking.wandb: + patch_checkpoint_logging_both() +elif tracking.wandb: + patch_wandb_checkpoint_logging() +elif tracking.manifest: + patch_manifest_checkpoint_logging() + +# Wandb lineage: register input artifacts after wandb.init() +if tracking.wandb: + patch_wandb_init_for_lineage( + artifact_qualified_names=tracking.qualified_names, + tags=["pretrain"], + ) +``` + +### Data Prep Scripts (code packager) + +Data prep scripts use the code packager (full rsync), so the complete `nemo_runspec` API is available at runtime. They use `log_artifact` for explicit artifact saving: + +```python +tracking = setup_artifact_tracking(config) + +if tracking.wandb: + init_wandb_from_env() # creates wandb run for metrics + +# ... run pipeline ... + +log_artifact(artifact, tracking) # logs to manifest + wandb +wandb_kit.finish_run(exit_code=0) +``` + +## Manifest Directory Structure + +```default +\{root\}/ +тФЬтФАтФА nano3-pretrain-data/ +тФВ тФЬтФАтФА v1/ +тФВ тФВ тФЬтФАтФА manifest.json # Full provenance record +тФВ тФВ тФФтФАтФА metadata.json # Resolver-compatible format +тФВ тФЬтФАтФА v2/ +тФВ тФВ тФЬтФАтФА manifest.json +тФВ тФВ тФФтФАтФА metadata.json +тФВ тФФтФАтФА latest # Plain text file: "v2" +тФВ +тФЬтФАтФА nano3-sft-model/ +тФВ тФЬтФАтФА v1/ +тФВ тФВ тФЬтФАтФА manifest.json +тФВ тФВ тФФтФАтФА metadata.json +тФВ тФФтФАтФА latest +``` + +- **Zero-copy**: Data stays at its original location. Only JSON metadata is written. + +- **`latest` file**: Plain text containing the version directory name (e.g., `v2`). Works on all filesystems тАФ no symlink issues. + +- **Version discovery**: Scan `v*/` directories. `latest` provides O(1) latest lookup. + +### manifest.json + +Full provenance and lineage record: + +```json +{ + "name": "nano3-sft-data", + "version": 2, + "type": "SFTDataArtifact", + "path": "/lustre/data/nano3/sft/output/splits", + "created_at": "2026-03-11T10:30:00-07:00", + "producer": "nemo_abc123", + "metadata": { + "pack_size": 4096, + "total_tokens": 15000000 + }, + "inputs": ["hf://nvidia/dataset-a"], + "used_artifacts": ["nano3-pretrain-data:v2"] +} +``` + +### metadata.json + +Resolver-compatible format тАФ the full Pydantic `model_dump()` output. The `$\{art:data,field\}` resolver reads fields from this file. + +## CLI Display + +### Job Submission Panel + +Shows which artifact stores are active before the job runs: + +```default +Job Submission +тФЬтФАтФА configs +тФВ тФЬтФАтФА job: /path/to/job.yaml +тФВ тФФтФАтФА train: /path/to/train.yaml +тФЬтФАтФА artifacts +тФВ тФЬтФАтФА manifest: /lustre/.../artifacts +тФВ тФФтФАтФА wandb: тЬУ enabled +тФФтФАтФА mode: attached +``` + +### Completion Panel + +After a data prep or training job completes: + +```default +тХнтФАтФА Step Complete (super3-pretrain-data-tiny) тФАтФАтХо +тФВ ... тФВ +тФВ Manifest: /lustre/.../super3-pretrain-data/v1 тФВ +тФВ W&B: https://wandb.ai/romeyn/nemotron/.. тФВ +тХ░тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтХп +``` + +## Viewing Lineage + +### From Manifest Files + +Inspect manifests directly on the filesystem: + +```bash +# See latest version +cat /lustre/artifacts/nano3-sft-data/latest +# v2 + +# Read manifest +cat /lustre/artifacts/nano3-sft-data/v2/manifest.json +# {"name": "nano3-sft-data", "version": 2, "path": "...", ...} +``` + +### In W&B + +1. Navigate to your projectтАЩs **Artifacts** tab + +2. Select any artifact (e.g., `ModelArtifact-rl`) + +3. Click the **Graph** view to see upstream dependencies + +## Troubleshooting + +### тАЬArtifact not foundтАЭ + +- Check artifact name and version (inspect manifest directory or W&B UI) + +- Verify `manifest.root` in env.toml points to the correct location + +- For wandb: ensure `project` and `entity` match, and run `wandb login` + +### Manifest path empty in completion panel + +- Verify `[artifacts.manifest]` is configured in `env.toml` + +- Check that the manifest root directory is writable + +### Wandb digest mismatch + +The pipeline automatically patches wandbтАЩs digest verification for local file references. If you still see errors, ensure youтАЩre using the latest version of the pipeline code. + +### Running without wandb + +Set `artifacts.wandb=false` on the command line or remove the `wandb = true` line from `[artifacts]` in env.toml. Manifest tracking works independently. + +## Further Reading + +- [Artifact Types](/../nemotron/artifacts) тАУ Pydantic artifact classes and custom types + +- [OmegaConf Resolvers](/omegaconf) тАУ `$\{art:...\}` interpolations + +- [W&B Integration](/../nemotron/wandb) тАУ credentials and configuration + +- [Execution & env.toml](/nemo-run) тАУ execution profiles and env.toml reference diff --git a/docs/fern/pages-vnightly/nemo_runspec/nemo-run.mdx b/docs/fern/pages-vnightly/nemo_runspec/nemo-run.mdx new file mode 100644 index 000000000..9a025c5ea --- /dev/null +++ b/docs/fern/pages-vnightly/nemo_runspec/nemo-run.mdx @@ -0,0 +1,747 @@ +--- +title: "Execution through NeMo-Run" +slug: "nemo_runspec/nemo-run.html" +description: "Nemotron recipes use NeMo-Run for job orchestration. NeMo-Run is an NVIDIA tool for configuring, executing, and managing ML experiments across computing environments." +--- + +Nemotron recipes use [NeMo-Run](https://github.com/NVIDIA-NeMo/Run) for job orchestration. NeMo-Run is an NVIDIA tool for configuring, executing, and managing ML experiments across computing environments. + +> **Note**: This release supports Slurm, DGX Cloud (run:ai), and Lepton executors, including Ray-based runs on all three backends. + +## What is NeMo-Run? + +NeMo-Run decouples **what** you want to run from **where** you run it: + +```mermaid +%%{init: {'theme': 'base', 'themeVariables': { 'primaryBorderColor': '#333333', 'lineColor': '#333333', 'primaryTextColor': '#333333', 'clusterBkg': '#ffffff', 'clusterBorder': '#333333'}}}%% +flowchart LR + subgraph config["Configuration"] + Task["Training Task"] + end + + subgraph nemorun["NeMo-Run"] + Packager["Packager"] + Executor["Executor"] + end + + subgraph targets["Execution Targets"] + Local["Local"] + Docker["Docker"] + Slurm["Slurm"] + Cloud["Cloud"] + end + + Task --> Packager + Packager --> Executor + Executor --> Local + Executor --> Docker + Executor --> Slurm + Executor --> Cloud +``` + +**Core concepts:** + +- **Executor** тАУ where to run (local, Docker, Slurm, cloud) + +- **Packager** тАУ how to package code for the executor + +- **Launcher** тАУ how to launch the process (torchrun, direct) + +For full documentation, see the [NeMo-Run GitHub repository](https://github.com/NVIDIA-NeMo/Run). + +## Quick Start + +Add `--run ` to any recipe command: + +```bash +# Execute on a Slurm cluster +uv run nemotron nano3 pretrain -c tiny --run YOUR-CLUSTER + +# Detached execution (submit and exit) +uv run nemotron nano3 pretrain -c tiny --batch YOUR-CLUSTER + +# Preview without executing +uv run nemotron nano3 pretrain -c tiny --run YOUR-CLUSTER --dry-run +``` + +## Execution Profiles + +The `nemo_runspec` package adds an `env.toml` configuration layer on top of NeMo-Run. This gives you declarative execution profiles that integrate with the CLI. This is a **Nemotron-specific feature** тАУ standard NeMo-Run requires programmatic configuration. + +Create an `env.toml` in your project root. Each section defines a named execution profile that can be referenced via `--run ` or `--batch `: + +```toml +# env.toml + +[wandb] +project = "nemotron" +entity = "YOUR-TEAM" + +[YOUR-CLUSTER] +executor = "slurm" +account = "YOUR-ACCOUNT" +partition = "batch" +nodes = 2 +ntasks_per_node = 8 +gpus_per_node = 8 +mounts = ["/lustre:/lustre"] +``` + +When you run `uv run nemotron nano3 pretrain --run YOUR-CLUSTER`, the kit reads this profile, builds the appropriate NeMo-Run executor, and submits your job. + +### Profile Inheritance + +Profiles can extend other profiles to reduce duplication: + +```toml +[base-slurm] +executor = "slurm" +account = "my-account" +partition = "gpu" +time = "04:00:00" + +[YOUR-CLUSTER] +extends = "base-slurm" +nodes = 4 +ntasks_per_node = 8 +gpus_per_node = 8 + +[YOUR-CLUSTER-large] +extends = "YOUR-CLUSTER" +nodes = 16 +time = "08:00:00" +``` + +## Executors + +### Slurm + +Submit jobs to a Slurm cluster. Container execution requires [Pyxis](https://github.com/NVIDIA/pyxis), NVIDIAтАЩs container plugin for Slurm. + +```toml +[YOUR-CLUSTER] +executor = "slurm" +account = "my-account" +partition = "gpu" +nodes = 4 +ntasks_per_node = 8 +gpus_per_node = 8 +time = "04:00:00" +mounts = ["/data:/data"] +``` + +#### SSH Tunnel Submission + +Submit from a remote machine via SSH: + +```toml +[YOUR-CLUSTER] +executor = "slurm" +account = "my-account" +partition = "gpu" +nodes = 4 +tunnel = "ssh" +host = "cluster.example.com" +user = "username" +identity = "~/.ssh/id_rsa" +``` + +#### Partition Overrides + +Specify different partitions for `--run` vs `--batch`: + +```toml +[YOUR-CLUSTER] +executor = "slurm" +partition = "batch" # Default +run_partition = "interactive" # For --run (attached) +batch_partition = "backfill" # For --batch (detached) +``` + +### DGX Cloud (run:ai) + +Submit jobs to NVIDIA DGX Cloud via the run:ai API. This executor handles authentication, data movement to PVCs, and multi-node distributed training through DGX Cloud workloads. + +```toml +[dgxcloud] +executor = "dgxcloud" +base_url = "https://your-dgxcloud-instance.example.com/api/v1" +kube_apiserver_url = "https://your-dgxcloud-k8s.example.com" +client_id = "YOUR-CLIENT-ID" # `app_id` accepted as legacy alias +client_secret = "YOUR-CLIENT-SECRET" # `app_secret` accepted as legacy alias +project_name = "YOUR-PROJECT" +container_image = "nvcr.io/nvidia/nemo:latest" +pvc_nemo_run_dir = "/pvc/nemo_run" +nodes = 2 +gpus_per_node = 8 +nprocs_per_node = 8 +pvcs = [ + { claimName = "my-pvc", path = "/pvc", readOnly = false } +] +``` + +For run:ai scheduler integration, use `custom_spec`: + +```toml +[dgxcloud-runai] +extends = "dgxcloud" +custom_spec = { schedulerName = "runai-scheduler" } +``` + +### Lepton + +Submit jobs to NVIDIA DGX Cloud Lepton clusters. Lepton provides SDK-based job submission with node group scheduling and shared memory configuration. + +```toml +[lepton] +executor = "lepton" +container_image = "nvcr.io/nvidia/nemo:latest" +nemo_run_dir = "/nemo_run" +nodes = 2 +gpus_per_node = 8 +resource_shape = "gpu.h100.8" +node_group = "my-node-group" +shared_memory_size = 65536 +mounts = [ + { path = "/data", mount_path = "/data" } +] +pre_launch_commands = ["pip install my-package"] +``` + +### Docker + +Run in a local Docker container with GPU support: + +```toml +[docker] +executor = "docker" +container_image = "nvcr.io/nvidia/nemo:latest" +gpus_per_node = 8 +runtime = "nvidia" +mounts = ["/data:/data"] +``` + +### Building Containers + +Some recipes, including Omni3, build stage-local containers through the same profile system instead of pulling a pre-baked image. + +**Cluster-side build via Nemotron CLI** + +```bash +uv run nemotron omni3 build sft --run YOUR-CLUSTER +uv run nemotron omni3 build rl --run YOUR-CLUSTER +``` + +These commands submit short CPU-oriented build jobs through NeMo-Run. If your site uses a different partition or walltime for build jobs, set `build_partition` and `build_time` in `env.toml`. The dispatcher only runs on slurm executors today; non-slurm executors (e.g. Lepton, k8s) error out cleanly with a hook for future PRs. + +```toml +[YOUR-CLUSTER] +executor = "slurm" +partition = "batch" +build_partition = "cpu" +build_time = "02:00:00" +# Lustre-visible host path for the build cache; mounted into the build +# container at /nemotron-cache and used to land the OCI archive output. +build_cache_dir = "/lustre/.../users/\/.cache/nemotron" +``` + +> **Why `build_cache_dir`?** The dispatcher mounts this path into the +build container so podman can save the resulting OCI archive somewhere +a future training job can read. Pre-`build_cache_dir`, the dispatcher +hard-coded `~/.cache/nemotron` evaluated at submission time, which +resolved to the laptopтАЩs home directory and didnтАЩt exist on cluster +nodes. Set `build_cache_dir` to a Lustre-visible path; the dispatcher +will `mkdir -p` it on the remote before submission so first-run is +seamless. + +### How the build container authenticates with private registries + +The SFT DockerfileтАЩs `FROM` references `nvcr.io/nvidian/nemo:`, +which is gated behind NGC credentials. Rather than ask operators to +provision a separate `~/.docker/config.json`, the dispatcher reuses +enrootтАЩs existing credentials at job-submission time: + +1. The dispatcher reads `~/.config/enroot/.credentials` (netrc format) +over the SSH tunnel. + +2. It filters to the `nvcr.io` entry (other registries in the file тАФ +gitlab tokens, etc. тАФ are *not* exposed to the build container). + +3. It transcodes the entry into a docker-format `auth.json` and writes +it to `/.auth/auth.json` with mode `0600`. + +4. It mounts that file into the build container at +`/root/.config/containers/auth.json:ro`. + +Podman inside the build container then authenticates with `nvcr.io` +automatically. No env vars, no per-job secrets in slurm scripts. If you +add a new private registry the build needs, add an entry for it in +`~/.config/enroot/.credentials` and extend the dispatcherтАЩs allowlist +(see `materialize_podman_auth_from_enroot` in +`src/nemo_runspec/execution.py`). + +**Local build from the stage Dockerfile** + +```bash +cd src/nemotron/recipes/omni3/stage0_sft +docker build -t nemotron/omni3-sft:latest -f Dockerfile . +# or +podman build -t nemotron/omni3-sft:latest -f Dockerfile . +``` + +Use the local path when iterating on the Dockerfile itself; use `nemotron omni3 build --run ` when you want the same build recipe executed on the cluster. + +### Other Executors + +NeMo-Run also supports these executors (not yet integrated into env.toml profiles): + +| Executor | Description | +| --- | --- | +| skypilot | Cloud instances (AWS, GCP, Azure) via SkyPilot | +| kubeflow | Kubernetes Training Operator (PyTorchJob) | + +## Packagers + +Packagers determine how your code is bundled and transferred to the execution target. NeMo-Run provides several packagers for different workflows. + +### GitArchivePackager (Default) + +Packages code from a git repository using `git archive`. Only includes committed files. + +```toml +[YOUR-CLUSTER] +executor = "slurm" +packager = "git" +# ... other settings +``` + +**How it works:** + +1. Runs `git archive --format=tar.gz` from repository root + +2. Includes only committed files (uncommitted changes are excluded) + +3. Optionally includes git submodules + +4. Transfers archive to execution target + +**Key options:** + +| Option | Default | Description | +| --- | --- | --- | +| subpath | - | Package only a subdirectory of the repo | +| include_submodules | true | Include git submodules in archive | +| include_pattern | - | Glob pattern for additional uncommitted files | + +**Best for:** Production runs with version-controlled code. + +### PatternPackager + +Packages files matching glob patterns. Useful for code not under version control. + +```toml +[YOUR-CLUSTER] +executor = "slurm" +packager = "pattern" +packager_include_pattern = "src/**/*.py" +``` + +**How it works:** + +1. Finds files matching the glob pattern + +2. Creates tar archive of matched files + +3. Preserves directory structure relative to pattern base + +**Key options:** + +| Option | Description | +| --- | --- | +| include_pattern | Glob pattern(s) for files to include | +| relative_path | Base path for pattern matching | + +**Best for:** Quick iterations, non-git projects, or including generated files. + +### HybridPackager + +Combines multiple packagers into a single archive. Useful for complex projects. + +```toml +[YOUR-CLUSTER] +executor = "slurm" +packager = "hybrid" +# Configuration via code (see below) +``` + +**How it works:** + +1. Runs each sub-packager independently + +2. Extracts outputs to temporary directories + +3. Merges all into final archive with folder organization + +**Example in code:** + +```python +import nemo_run as run + +hybrid = run.HybridPackager( + sub_packagers={ + "code": run.GitArchivePackager(subpath="src"), + "configs": run.PatternPackager(include_pattern="configs/*.yaml"), + "data": run.PatternPackager(include_pattern="data/*.json"), + } +) +``` + +**Best for:** Projects with mixed version-controlled and generated content. + +### Passthrough Packager + +No packagingтАФassumes code is already available on the target (e.g., in a container image or shared filesystem). + +```toml +[YOUR-CLUSTER] +executor = "slurm" +packager = "none" +``` + +**Best for:** Pre-built containers, shared filesystems like `/lustre`. + +## CLI Options + +### `--run` vs `--batch` + +| Option | Behavior | Use Case | +| --- | --- | --- | +| --run | AttachedтАФwaits for completion, streams logs | Interactive development | +| --batch | DetachedтАФsubmits and exits immediately | Long-running jobs | + +### Config Overrides + +Override config values using Hydra-style syntax: + +```bash +# Override training iterations +uv run nemotron nano3 pretrain --run YOUR-CLUSTER train.train_iters=5000 + +# Override nodes +uv run nemotron nano3 pretrain --run YOUR-CLUSTER run.env.nodes=8 +``` + +## env.toml Reference + +An `env.toml` file contains two kinds of sections: **system-level sections** (reserved names) and **execution profiles** (any other name). + +### System-Level Sections + +These sections have reserved names and are not execution profiles: + +```toml +[wandb] +project = "nemotron" +entity = "YOUR-TEAM" + +[artifacts] +backend = "file" # "file" or "wandb" (default: "wandb" if [wandb] exists) +root = "/path/to/artifacts" # Root directory for file-based artifacts + +[cache] +git_dir = "/lustre/.../git-cache" # Directory for caching git repos (for auto_mount) + +[cli] +theme = "github-light" # Rich console theme +``` + +| Section | Field | Type | Description | +| --- | --- | --- | --- | +| [wandb] | project | str | W&B project name (injected into run.wandb.project) | +| [wandb] | entity | str | W&B entity/team name (injected into run.wandb.entity) | +| [artifacts] | backend | str | Artifact storage backend: "file" or "wandb" | +| [artifacts] | root | str | Root directory for file-based artifact storage | +| [cache] | git_dir | str | Directory for caching git repos cloned by ${auto_mount:...} | +| [cli] | theme | str | Rich console theme name | + +### Execution Profile Fields + +Every other section is an execution profile. Use `--run ` or `--batch ` to select one. + +```toml +[my-cluster] +executor = "slurm" +account = "my-account" +partition = "batch" +run_partition = "interactive" +batch_partition = "batch" +tunnel = "ssh" +host = "cluster.example.com" +user = "username" +remote_job_dir = "/lustre/users/me/run" +time = "04:00:00" +nodes = 2 +ntasks_per_node = 8 +gpus_per_node = 8 +mem = "0" +exclusive = true +container_image = "/path/to/image.sqsh" +mounts = ["/lustre:/lustre"] +startup_commands = ["source /opt/env.sh"] +``` + +**Core:** + +| Field | Type | Default | Description | +| --- | --- | --- | --- | +| executor | str | "local" | Execution backend: "local", "docker", "slurm", "dgxcloud", or "lepton" | +| extends | str | - | Parent profile to inherit from | + +**Local executor:** + +| Field | Type | Default | Description | +| --- | --- | --- | --- | +| nproc_per_node | int | 1 | Number of GPU processes (for torchrun) | + +**Slurm executor:** + +| Field | Type | Default | Description | +| --- | --- | --- | --- | +| account | str | - | Slurm account for job billing | +| partition | str | - | Default Slurm partition | +| run_partition | str | - | Partition for --run (attached mode) | +| batch_partition | str | - | Partition for --batch (detached mode) | +| nodes | int | 1 | Number of compute nodes | +| ntasks_per_node | int | 1 | Tasks per node | +| gpus_per_node | int | - | GPUs per node | +| cpus_per_task | int | - | CPU cores per task | +| time | str | "04:00:00" | Job time limit (HH:MM:SS) | +| mem | str | - | Memory per node ("0" = all available) | +| exclusive | bool | - | Request exclusive node access | + +**SSH tunnel (for remote submission):** + +| Field | Type | Default | Description | +| --- | --- | --- | --- | +| tunnel | str | - | Set to "ssh" for remote submission | +| host | str | - | SSH hostname | +| user | str | - | SSH username | +| remote_job_dir | str | - | Working directory on the remote cluster | + +**Container:** + +| Field | Type | Default | Description | +| --- | --- | --- | --- | +| container_image | str | - | Container image path (.sqsh for Slurm, Docker URI for local) | +| container | str | - | Alias for container_image (checked as fallback) | +| mounts | list | [] | Container mount points ("/host:/container") | + +**Startup:** + +| Field | Type | Default | Description | +| --- | --- | --- | --- | +| startup_commands | list | [] | Shell commands to run before the training script | + +**DGX Cloud executor:** + +| Field | Type | Default | Description | +| --- | --- | --- | --- | +| base_url | str | *required* | DGX Cloud API base URL | +| kube_apiserver_url | str | *required* | Kubernetes API server URL for the DGX Cloud cluster | +| client_id | str | *required* | Client ID for authentication | +| client_secret | str | *required* | Client secret for authentication | +| app_id | str | - | Legacy alias for client_id (back-compat shim) | +| app_secret | str | - | Legacy alias for client_secret (back-compat shim) | +| project_name | str | *required* | DGX Cloud project name | +| pvc_nemo_run_dir | str | *required* | PVC path for nemo-run job directory | +| nodes | int | 1 | Number of compute nodes | +| gpus_per_node | int | 0 | GPUs per node | +| nprocs_per_node | int | 1 | Processes per node | +| pvcs | list | [] | PVC mount specifications (list of dicts with claimName, path, readOnly) | +| distributed_framework | str | "PyTorch" | Distributed framework ("PyTorch") | +| custom_spec | dict | {} | Additional workload spec overrides (e.g., schedulerName for run:ai) | + +**Lepton executor:** + +| Field | Type | Default | Description | +| --- | --- | --- | --- | +| nemo_run_dir | str | *required* | Remote directory for nemo-run job files | +| nodes | int | 1 | Number of compute nodes | +| gpus_per_node | int | 0 | GPUs per node | +| nprocs_per_node | int | 1 | Processes per node | +| resource_shape | str | "" | Resource shape (e.g., "gpu.h100.8") | +| node_group | str | "" | Target node group | +| node_reservation | str | "" | Node reservation identifier | +| shared_memory_size | int | 65536 | Shared memory size in MB | +| mounts | list | [] | Mount specifications (list of dicts with path, mount_path) | +| image_pull_secrets | list | [] | Container registry authentication secrets | +| pre_launch_commands | list | [] | Commands to run before launching the job | +| custom_spec | dict | {} | Additional job spec overrides | + +### How Profiles Are Resolved + +When you run `--run my-cluster`: + +1. **Load**: `env.toml` is found by walking up from the current directory + +2. **Inherit**: If `extends = "parent"` is set, fields are inherited recursively + +3. **Merge**: The profile overlays the config YAMLтАЩs `run.env` defaults (`\{**yaml_defaults, **profile\}`) + +4. **Inject**: `[wandb]` section is injected into `run.wandb` + +This means config YAML provides defaults for any field env.toml doesnтАЩt set. For example, the evaluator config sets `container: nvcr.io/nvidia/nemo-evaluator:latest` in its YAML, which is used unless your env.toml profile overrides it. + +### Full Example + +```toml +# env.toml + +# --- System sections (not profiles) --- + +[wandb] +project = "nemotron" +entity = "my-team" + +[artifacts] +backend = "file" +root = "/lustre/users/me/artifacts" + +[cache] +git_dir = "/lustre/users/me/git-cache" + +# --- Execution profiles --- + +[local] +executor = "local" +nproc_per_node = 8 + +[my-cluster] +executor = "slurm" +account = "my-account" +partition = "batch" +run_partition = "interactive" +batch_partition = "batch" +time = "04:00:00" +tunnel = "ssh" +host = "login.cluster.com" +user = "me" +remote_job_dir = "/lustre/users/me/run" + +[pretrain] +extends = "my-cluster" +nodes = 2 +ntasks_per_node = 8 +gpus_per_node = 8 +mem = "0" +exclusive = true +mounts = ["/lustre:/lustre"] + +[pretrain-large] +extends = "pretrain" +nodes = 8 +time = "08:00:00" + +[data-prep] +extends = "my-cluster" +run_partition = "cpu" +batch_partition = "cpu" +nodes = 1 +ntasks_per_node = 1 +cpus_per_task = 96 + +[rl] +extends = "pretrain" +container_image = "/lustre/users/me/nano3-rl.sqsh" + +# --- DGX Cloud (run:ai) --- + +[dgxcloud] +executor = "dgxcloud" +base_url = "https://dgx.example.com/api/v1" +app_id = "MY-APP-ID" +app_secret = "MY-APP-SECRET" +project_name = "my-project" +container_image = "nvcr.io/nvidia/nemo:latest" +pvc_nemo_run_dir = "/pvc/nemo_run" +nodes = 2 +gpus_per_node = 8 +nprocs_per_node = 8 +pvcs = [ + { claimName = "my-pvc", path = "/pvc", readOnly = false } +] + +# --- Lepton --- + +[lepton] +executor = "lepton" +container_image = "nvcr.io/nvidia/nemo:latest" +nemo_run_dir = "/nemo_run" +nodes = 2 +gpus_per_node = 8 +resource_shape = "gpu.h100.8" +node_group = "my-node-group" +``` + +## Ray-Enabled Recipes + +Some recipes use Ray for distributed execution. When you run a Ray-enabled recipe with `--run`, the Ray cluster is set up automatically: + +```bash +# Data prep uses Ray +uv run nemotron nano3 data prep pretrain --run YOUR-CLUSTER + +# RL training uses Ray +uv run nemotron nano3 rl -c tiny --run YOUR-CLUSTER +``` + +### Ray on DGX Cloud and Lepton + +Ray-based recipes work with DGX Cloud and Lepton executors. The framework automatically selects the appropriate Ray backend based on the executor type: + +- **Slurm**: Uses `SlurmRayJob` with SSH tunnel (default) + +- **DGX Cloud**: Uses `DGXCloudRayJob` for self-organizing Ray topology within distributed workloads + +- **Lepton**: Uses `LeptonRayJob` with the Lepton SDK + +```toml +# Ray-enabled RL on DGX Cloud +[dgxcloud-rl] +executor = "dgxcloud" +base_url = "https://dgx.example.com/api/v1" +app_id = "YOUR-ID" +app_secret = "YOUR-SECRET" +project_name = "your-project" +container_image = "nvcr.io/nvidia/nemo-rl:latest" +pvc_nemo_run_dir = "/pvc/nemo_run" +nodes = 4 +gpus_per_node = 8 + +# Ray-enabled RL on Lepton +[lepton-rl] +executor = "lepton" +container_image = "nvcr.io/nvidia/nemo-rl:latest" +nemo_run_dir = "/nemo_run" +nodes = 4 +gpus_per_node = 8 +resource_shape = "gpu.h100.8" +node_group = "my-node-group" +``` + +Use with any Ray-enabled recipe: + +```bash +uv run nemotron nano3 rl -c tiny --run dgxcloud-rl +uv run nemotron nano3 rl -c tiny --run lepton-rl +``` + +## Further Reading + +- [NeMo-Run GitHub](https://github.com/NVIDIA-NeMo/Run) тАУ full documentation + +- [W&B Integration](/../nemotron/wandb) тАУ credential handling + +- [Nemotron Kit](/../nemotron/kit) тАУ artifact system and lineage tracking + +- [CLI Framework](/../nemotron/cli) тАУ building recipe CLIs diff --git a/docs/fern/pages-vnightly/nemo_runspec/omegaconf.mdx b/docs/fern/pages-vnightly/nemo_runspec/omegaconf.mdx new file mode 100644 index 000000000..3fe1d946f --- /dev/null +++ b/docs/fern/pages-vnightly/nemo_runspec/omegaconf.mdx @@ -0,0 +1,354 @@ +--- +title: "OmegaConf Configuration System" +slug: "nemo_runspec/omegaconf.html" +description: "Nemotron uses OmegaConf for configuration management, with custom resolvers (in nemo_runspec.config.resolvers) for automatic artifact resolution and W&B lineage tracking. This page covers the run sect" +--- + +Nemotron uses [OmegaConf](https://omegaconf.readthedocs.io/) for configuration management, with custom resolvers (in `nemo_runspec.config.resolvers`) for automatic artifact resolution and W&B lineage tracking. This page covers the `run` section in configs, artifact interpolations, and unified W&B logging. + +## The `run` Section + +The `run` section in recipe configs holds execution and artifact metadata. ItтАЩs separate from the training algorithm configuration. + +```yaml +# config.yaml +run: + # Artifact references - automatically resolved with W&B lineage + data: PretrainBlendsArtifact-default:latest + model: ModelArtifact-pretrain:v5 + + # Environment configuration (container image) + env: + container: nvcr.io/nvidia/nemo:25.11.nemotron_3_nano + +# Training configuration sections +recipe: + _target_: megatron.bridge.recipes.nemotronh.nemotron_next_3b_v2_pretrain_config + per_split_data_args_path: ${art:data,path}/blend.json # Resolved from artifact + +logger: + wandb_project: ${run.wandb.project} # Injected from env.toml + wandb_entity: ${run.wandb.entity} # Injected from env.toml + +checkpoint: + save: /nemo_run/pretrain + save_interval: 20 +``` + +### How `run.wandb` is Populated + +When you run a recipe with `--run `, the CLI reads your `env.toml` and injects the `[wandb]` section into `run.wandb`: + +```toml +# env.toml +[wandb] +project = "nemotron" +entity = "my-team" + +[YOUR-CLUSTER] +executor = "slurm" +# ... +``` + +This allows configs to reference W&B settings via interpolation (`$\{run.wandb.project\}`) without hardcoding them. + +## Artifact Interpolations + +The `$\{art:NAME,FIELD\}` resolver enables automatic artifact resolution with W&B lineage tracking. + +### Syntax + +```yaml +# Basic path resolution +data_path: ${art:data,path} # /path/to/artifact + +# Field resolution +model_version: ${art:model,version} # v5 +model_type: ${art:model,type} # "model" +checkpoint_step: ${art:model,iteration} # 10000 + +# Metadata field resolution (from metadata.json) +pack_size: ${art:data,pack_size} # 4096 +training_path: ${art:data,training_path} # /path/to/training_4096.parquet +``` + +### Supported Fields + +| Field | Source | Description | +| --- | --- | --- | +| path | Artifact info | Local filesystem path to artifact (default) | +| version | Artifact info | W&B artifact version (e.g., тАЬv5тАЭ) | +| name | Artifact info | Artifact name | +| type | Artifact info | Artifact type (тАЬdatasetтАЭ, тАЬmodelтАЭ) | +| iteration | Metadata | Training iteration (for model checkpoints) | +| * | metadata.json | Any field from the artifactтАЩs metadata | + +### Example: Pretrain Config + +```yaml +run: + data: PretrainBlendsArtifact-default:latest + +recipe: + _target_: megatron.bridge.recipes.nemotronh.nemotron_next_3b_v2_pretrain_config + # Resolved to: /path/to/wandb/artifacts/PretrainBlendsArtifact-default-v3/blend.json + per_split_data_args_path: ${art:data,path}/blend.json +``` + +### Example: SFT Config with Model Checkpoint + +```yaml +run: + data: SFTDataArtifact-default:latest + model: pretrain:latest + +recipe: + _target_: megatron.bridge.recipes.nemotronh.nemotron_nano_9b_v2_finetune_config + # Resolved to the pretrain checkpoint save directory + pretrained_checkpoint: ${art:model,path} + # Resolved to the checkpoint iteration number + ckpt_step: ${art:model,iteration} +``` + +### Example: RL Config + +```yaml +run: + data: SplitJsonlDataArtifact-rl:latest + model: sft:latest + env: + container: nvcr.io/nvidia/nemo-rl:v0.4.0.nemotron_3_nano + +policy: + # Resolved to the SFT model checkpoint path + model_name: ${art:model,path} + +data: + # Resolved from artifact metadata + train_jsonl_fpath: ${art:data,train_path} + validation_jsonl_fpath: ${art:data,val_path} +``` + +## How Artifact Resolution Works + +### Resolution Modes + +The artifact resolver supports two modes to handle different framework requirements: + +| Mode | When Used | Description | +| --- | --- | --- | +| active_run | W&B run already active | Calls wandb.use_artifact() directly | +| pre_init | Before wandb.init() | Uses wandb.Api() to resolve, defers lineage | + +**Why two modes?** Megatron-Bridge owns `wandb.init()` during training. The kit resolves artifacts *before* training starts, then patches `wandb.init()` to register lineage once the run is active. + +### Resolution Pipeline + +```default +тФМтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФР +тФВ 1. Config Loading тФВ +тФВ - Load YAML with OmegaConf тФВ +тФВ - Detect artifact references in run section тФВ +тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФмтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФШ + тЦ╝ +тФМтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФР +тФВ 2. register_resolvers_from_config() тФВ +тФВ - Scan run section for artifact patterns тФВ +тФВ - Download artifacts from W&B (rank 0 only in distributed) тФВ +тФВ - Store qualified_name for lineage registration тФВ +тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФмтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФШ + тЦ╝ +тФМтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФР +тФВ 3. OmegaConf Resolver Registration тФВ +тФВ - Register ${art:NAME,FIELD} resolver тФВ +тФВ - Fields resolve to artifact path, version, or metadata тФВ +тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФмтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФШ + тЦ╝ +тФМтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФР +тФВ 4. patch_wandb_init_for_lineage() тФВ +тФВ - Patch wandb.init() to call use_artifact() when run starts тФВ +тФВ - Registers lineage in W&B graph тФВ +тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФШ +``` + +### Distributed Coordination + +In multi-GPU training, only rank 0 downloads artifacts: + +1. **Rank 0**: Downloads artifacts, writes results to shared marker file + +2. **Other ranks**: Wait for marker file, read shared results + +3. **All ranks**: Use identical artifact paths + +This prevents redundant downloads and ensures consistency across workers. + +## Unified W&B Logging + +Nemotron Kit provides a unified W&B logging approach that works across Megatron-Bridge and NeMo-RL, which have different logging conventions. + +> **Coming Soon**: Native support for artifact lineage and checkpoint logging is being added directly to Megatron-Bridge and NeMo-RL. Once available, the monkey patches described below will no longer be necessary. + +### The Problem + +| Framework | Checkpoint Logging | W&B Init | +| --- | --- | --- | +| Megatron-Bridge | on_save_checkpoint_success() | Owns wandb.init() | +| NeMo-RL | CheckpointManager.finalize_checkpoint() | Separate init | + +Both frameworks need to: + +- Log checkpoints as W&B artifacts + +- Track lineage from input artifacts + +- Store metadata for downstream jobs + +### The Solution: Monkey Patches (Temporary) + +Until native support is available, the kit uses targeted monkey patches to unify logging behavior: + +```python +# In train.py (pretraining/SFT) +from nemotron.kit.wandb_kit import ( + patch_wandb_checkpoint_logging, + patch_wandb_init_for_lineage, +) + +# Resolve artifacts before wandb.init() +qualified_names = register_resolvers_from_config(config, mode="pre_init") + +# Patch wandb.init to register lineage when MB initializes it +patch_wandb_init_for_lineage(artifact_qualified_names=qualified_names) + +# Patch checkpoint saving to log artifacts with metadata +patch_wandb_checkpoint_logging() +``` + +```python +# In train.py (RL) +from nemotron.kit.wandb_kit import patch_nemo_rl_checkpoint_logging + +# Patch NeMo-RL checkpoint manager +patch_nemo_rl_checkpoint_logging() +``` + +### What the Patches Do + +**`patch_wandb_checkpoint_logging()`** (Megatron-Bridge): + +- Wraps `on_save_checkpoint_success()` + +- Adds `wait()` call so artifacts appear immediately in W&B + +- Stores `absolute_path` in metadata for cross-job access + +- Resolves container paths (`/nemo_run/`) to actual Lustre paths + +**`patch_nemo_rl_checkpoint_logging()`** (NeMo-RL): + +- Wraps `CheckpointManager.finalize_checkpoint()` + +- Logs checkpoints as W&B artifacts with consistent naming + +- Same metadata format as Megatron-Bridge patches + +**`patch_wandb_init_for_lineage()`**: + +- Patches `wandb.init()` to call `use_artifact()` for resolved artifacts + +- Registers lineage in W&B graph once run is active + +### Container Path Resolution + +When running in containers, checkpoints are saved to mount paths like `/nemo_run/`. The kit resolves these to actual filesystem paths for cross-job access: + +```python +# Container path (inside job) +/nemo_run/pretrain/iter_0010000 + +# Resolved path (for artifact metadata) +/lustre/scratch/user/jobs/12345/pretrain/iter_0010000 +``` + +Resolution uses: + +1. `NEMO_RUN_DIR` environment variable (set by nemo-run) + +2. `/proc/mounts` to find bind mount source + +## Usage in Training Scripts + +### Pretraining/SFT (Megatron-Bridge) + +```python +from nemo_runspec.config.resolvers import register_resolvers_from_config +from nemotron.kit.wandb_kit import ( + patch_wandb_checkpoint_logging, + patch_wandb_init_for_lineage, +) + +def main(): + config = OmegaConf.load("config.yaml") + + # Resolve artifacts before wandb.init() + qualified_names = register_resolvers_from_config( + config, + artifacts_key="run", + mode="pre_init", + ) + + # Patch for lineage and checkpoint logging + patch_wandb_init_for_lineage(artifact_qualified_names=qualified_names) + patch_wandb_checkpoint_logging() + + # Now Megatron-Bridge handles the rest + pretrain(config=cfg, forward_step_func=forward_step) +``` + +### RL (NeMo-RL) + +```python +from nemo_runspec.config.resolvers import register_resolvers_from_config +from nemotron.kit.wandb_kit import patch_nemo_rl_checkpoint_logging + +def main(): + config = load_config("grpo_config.yaml") + + # Patch before any wandb interaction + patch_nemo_rl_checkpoint_logging() + + # Resolve artifacts + register_resolvers_from_config( + config, + artifacts_key="run", + mode="pre_init", + ) + + # Resolve config (${art:...} interpolations now work) + config = OmegaConf.to_container(config, resolve=True) + + # NeMo-RL training + grpo_train(...) +``` + +## Additional Resolvers + +The kit also provides utility resolvers: + +```yaml +# Multiplication resolver (NeMo-RL) +train_mb_tokens: ${mul:${policy.max_total_sequence_length}, ${policy.train_micro_batch_size}} +``` + +## Further Reading + +- [Artifact Lineage](/../nemotron/artifacts) тАУ W&B artifact system and lineage tracking + +- [Creating Custom Artifacts](/../nemotron/artifacts#creating-custom-artifacts) тАУ defining typed artifact classes + +- [W&B Integration](/../nemotron/wandb) тАУ credential handling + +- [CLI Framework](/../nemotron/cli) тАУ recipe CLIs and `--run` execution + +- [Execution through NeMo-Run](/nemo-run) тАУ `env.toml` profiles diff --git a/docs/fern/pages-vnightly/nemo_runspec/package-readme.mdx b/docs/fern/pages-vnightly/nemo_runspec/package-readme.mdx new file mode 100644 index 000000000..c20f41da2 --- /dev/null +++ b/docs/fern/pages-vnightly/nemo_runspec/package-readme.mdx @@ -0,0 +1,152 @@ +--- +title: "nemo_runspec Package" +slug: "nemo_runspec/package-readme.html" +description: "The following content is pulled from the package source for convenience. The canonical source file in the repository is src/nemo_runspec/README.md." +--- + +The following content is pulled from the package source for convenience. The canonical source file in the repository is `src/nemo_runspec/README.md`. + +# nemo_runspec + +Bridge layer for PEP 723 `[tool.runspec]` metadata. Parses declarative metadata +from recipe scripts and provides the shared CLI toolkit that Nemotron commands +build on. + +## Philosophy + +Recipe scripts should be self-describing. Rather than scattering identity, +container images, launch methods, and resource defaults across CLI wrappers and +config files, each recipe script declares all of this as standard PEP 723 inline +metadata in a `[tool.runspec]` block at the top of the file. The CLI layer reads +this metadata and stays thin тАУ it doesnтАЩt encode policy about *how* to run a +script, it just asks the script what it needs. This keeps recipes portable +(any tool can read the same metadata), eliminates hidden coupling between CLI +commands and the scripts they wrap, and makes it trivial to add a new recipe: +write the script, add the `[tool.runspec]` block, and the CLI machinery picks +it up automatically. + +## What it does + +`nemo_runspec` solves two problems: + +1. **Runspec parsing** тАУ Extracts `[tool.runspec]` TOML from PEP 723 inline +script metadata blocks, returning a frozen `Runspec` dataclass describing a +recipeтАЩs identity, container image, launch method, config directory, and +resource requirements. + +1. **CLI toolkit** тАУ Provides the reusable building blocks that every recipe +command needs: config loading, env.toml profile resolution, display helpers, +`RecipeTyper`, packaging, and nemo-run support. + +## Quick start + +```python +from nemo_runspec import parse + +SPEC = parse("src/nemotron/recipes/nano3/stage0_pretrain/train.py") +print(SPEC.name) # "nano3/pretrain" +print(SPEC.image) # "nvcr.io/nvidia/nemo:25.11.nemotron_3_nano" +print(SPEC.config_dir) # Path("/abs/path/to/config") +``` + +## Runspec schema + +See [docs/runspec/v1/spec.md](/../runspec/v1/spec) for the +full `[tool.runspec]` specification тАУ field reference, format, and usage guide. + +## Package modules + +| Module | Purpose | +| --- | --- | +| _parser | PEP 723 TOML extraction and [tool.runspec] parsing | +| _models | Frozen Runspec, RunspecRun, RunspecConfig, RunspecResources dataclasses | +| config/ | Config loading and OmegaConf resolver package | +| config/loader | Config pipeline: YAML loading, dotlist overrides, profile merging, job YAML | +| config/resolvers | OmegaConf resolvers: ${art:...} artifact resolution, ${auto_mount:...} git mounts | +| env | env.toml profile loading with inheritance (extends), plus wandb/cache/artifacts config | +| cli_context | GlobalContext for shared CLI state (config, run, batch, dry-run) | +| recipe_config | RecipeConfig тАУ normalizes CLI options into a typed object | +| recipe_typer | RecipeTyper тАУ Typer subclass standardizing recipe command registration | +| help | RecipeCommand with custom Rich help panels (configs, overrides, profiles) | +| display | Rich display utilities for dry-run output and job submission summaries | +| step | Step dataclass for pipeline step definition (module, torchrun, command builders) | +| exceptions | ArtifactNotFoundError, ArtifactVersionNotFoundError | +| artifacts | High-level setup_artifact_tracking() + log_artifact() API for scripts | +| artifact_registry | ArtifactRegistry with fsspec/wandb backends, global accessors, resolver mode | +| manifest_tracker | ManifestTracker тАУ zero-copy manifest-based artifact tracker (fsspec) | +| filesystem | ArtifactFileSystem тАУ fsspec filesystem for art:// URIs | +| run | nemo-run patches (Ray CPU template, rsync host key handling) | +| pipeline | Pipeline orchestration: local subprocess piping, nemo-run, and sbatch launchers | +| execution | Execution helpers: startup commands, env vars, executor creation, local run | +| packaging | SelfContainedPackager and CodePackager for remote execution | +| squash | Container squash utilities (Docker to enroot sqsh, ensure squashed on cluster) | +| templates/ | Custom Ray CPU Slurm template (ray_cpu.sub.j2) | +| evaluator | Evaluator helpers: task flag parsing, W&B injection, config save, image collection | +| utils | Shared utilities like ${run.*} template interpolation | + +## env.toml + +Environment configuration uses TOML profiles with inheritance: + +```toml +[base] +executor = "slurm" +account = "my-account" +remote_job_dir = "/lustre/jobs" + +[dev] +extends = "base" +partition = "dev-gpu" +nodes = 1 + +[prod] +extends = "base" +partition = "prod-gpu" +nodes = 8 + +[wandb] +entity = "my-team" +project = "nemotron" + +[artifacts] +wandb = true + +[artifacts.manifest] +root = "/lustre/artifacts" + +[cache] +git_dir = "/lustre/git-cache" +``` + +Profiles are selected via `--run ` or `--batch `. +Special sections (`wandb`, `cli`, `cache`, `artifacts`) are not executor profiles. + +### Build-context keys + +For commands that compile or import container images on Slurm +(`nemotron build`, `kit squash`, etc.), profiles can set +build-specific overrides. Each key falls back through a precedence chain +so non-build jobs are unaffected: + +| Key | Purpose | Precedence | +| --- | --- | --- | +| build_partition | Slurm partition for the build job | build_partition > run_partition > partition | +| build_time | Walltime for the build job | build_time > time > caller default | +| build_image | Container image used to *run* the build (e.g. podman-in-pyxis) | build_image > caller default | +| build_cache_dir | Host-side cache dir mounted into the build container at /nemotron-cache | build_cache_dir > caller default (~/.cache/nemotron) | + +Builds are typically CPU-only, so on training profiles whose +`run_partition` is GPU-only you should set `build_partition` to a CPU +partition. Likewise, on remote builds `build_cache_dir` should point at +a cluster-visible path (typically Lustre); the laptopтАЩs `~/.cache/` +default is not visible to compute nodes. + +```toml +[dlw] +extends = "base" +partition = "batch" +run_partition = "interactive" # GPU partition, used for training +build_partition = "cpu" # CPU partition, used for builds +build_cache_dir = "/lustre/fsw/portfolios/\/users/\/.cache/nemotron" +build_image = "docker://quay.io#podman/stable:v5.3" +``` diff --git a/docs/nemotron/artifacts.md b/docs/fern/pages-vnightly/nemotron/artifacts.mdx similarity index 68% rename from docs/nemotron/artifacts.md rename to docs/fern/pages-vnightly/nemotron/artifacts.mdx index a5b526b87..55266dd8c 100644 --- a/docs/nemotron/artifacts.md +++ b/docs/fern/pages-vnightly/nemotron/artifacts.mdx @@ -1,8 +1,12 @@ -# Artifact Types & Lineage +--- +title: "Artifact Types & Lineage" +slug: "nemotron/artifacts.html" +description: "Nemotron uses typed Pydantic artifacts to version data and models across training stages. Each artifact stores its output path plus typed metadata fields that are accessible via ${art:NAME,FIELD} conf" +--- -Nemotron uses typed Pydantic artifacts to version data and models across training stages. Each artifact stores its output path plus typed metadata fields that are accessible via `${art:NAME,FIELD}` config resolvers. +Nemotron uses typed Pydantic artifacts to version data and models across training stages. Each artifact stores its output path plus typed metadata fields that are accessible via `$\{art:NAME,FIELD\}` config resolvers. -> For the tracking infrastructure (manifest + wandb backends, `setup_artifact_tracking`, `log_artifact`, env.toml configuration), see [nemo_runspec artifacts](../nemo_runspec/artifacts.md). +> For the tracking infrastructure (manifest + wandb backends, `setup_artifact_tracking`, `log_artifact`, env.toml configuration), see [nemo_runspec artifacts](/../nemo_runspec/artifacts). ## End-to-End Lineage @@ -42,25 +46,25 @@ flowchart TB ## Artifact Types | Artifact | Stage | Format | Description | -|----------|-------|--------|-------------| -| `PretrainBlendsArtifact` | [0](./nano3/pretrain.md) | bin/idx | Tokenized pretraining data in Megatron format | -| `ModelArtifact` | 0, 1, 2 | checkpoint | Model checkpoints (pretrain, sft, rl) | -| `SFTDataArtifact` | [1](./nano3/sft.md) | Packed Parquet | Packed SFT sequences with loss masks | -| `SplitJsonlDataArtifact` | [2](./nano3/rl.md) | JSONL | RL prompts for [NeMo-RL](./nvidia-stack.md#nemo-rl) | +| --- | --- | --- | --- | +| PretrainBlendsArtifact | [0](/nano3/pretrain) | bin/idx | Tokenized pretraining data in Megatron format | +| ModelArtifact | 0, 1, 2 | checkpoint | Model checkpoints (pretrain, sft, rl) | +| SFTDataArtifact | [1](/nano3/sft) | Packed Parquet | Packed SFT sequences with loss masks | +| SplitJsonlDataArtifact | [2](/nano3/rl) | JSONL | RL prompts for [NeMo-RL](/nvidia-stack#nemo-rl) | ## Artifact Naming | Concept | Example | Where Used | -|---------|---------|------------| -| **Python class** | `PretrainBlendsArtifact` | Code imports (`from nemotron.kit import ...`) | -| **Registered name** | `super3-pretrain-data-tiny` | W&B artifact names, manifest directories | -| **Config reference** | `super3-pretrain-data-tiny:latest` | YAML configs (`run.data`), CLI overrides | +| --- | --- | --- | +| **Python class** | PretrainBlendsArtifact | Code imports (from nemotron.kit import ...) | +| **Registered name** | super3-pretrain-data-tiny | W&B artifact names, manifest directories | +| **Config reference** | super3-pretrain-data-tiny:latest | YAML configs (run.data), CLI overrides | ## Using Artifacts in Configs ### Semantic URIs -``` +```default art://super3-pretrain-data-tiny:latest # Latest version art://ModelArtifact-sft:v3 # Specific version ``` @@ -76,7 +80,7 @@ recipe: seq_length: ${art:data,pack_size} ``` -The `${art:data,FIELD}` resolver reads typed fields from the artifact's `metadata.json`. +The `$\{art:data,FIELD\}` resolver reads typed fields from the artifactтАЩs `metadata.json`. ### CLI Overrides @@ -95,7 +99,6 @@ from typing import Annotated from pydantic import Field from nemotron.kit.artifacts.base import Artifact - class MyDataArtifact(Artifact): """Custom data artifact with typed metadata.""" @@ -150,11 +153,14 @@ uv run nemotron nano3 data import pretrain /path/to/blend.json uv run nemotron nano3 data import sft /path/to/sft_data/ ``` -See [Importing Models & Data](./nano3/import.md) for detailed directory structures. +See [Importing Models & Data](/nano3/import) for detailed directory structures. ## Further Reading -- [Artifact Tracking](../nemo_runspec/artifacts.md) тАУ tracking infrastructure, manifest backend, env.toml config -- [Nemotron Kit](./kit.md) тАУ kit internals -- [OmegaConf Configuration](../nemo_runspec/omegaconf.md) тАУ `${art:...}` resolver details -- [W&B Integration](./wandb.md) тАУ credentials and configuration +- [Artifact Tracking](/../nemo_runspec/artifacts) тАУ tracking infrastructure, manifest backend, env.toml config + +- [Nemotron Kit](/kit) тАУ kit internals + +- [OmegaConf Configuration](/../nemo_runspec/omegaconf) тАУ `$\{art:...\}` resolver details + +- [W&B Integration](/wandb) тАУ credentials and configuration diff --git a/docs/nemotron/cli.md b/docs/fern/pages-vnightly/nemotron/cli.mdx similarity index 80% rename from docs/nemotron/cli.md rename to docs/fern/pages-vnightly/nemotron/cli.mdx index 2f8471f08..55b671a51 100644 --- a/docs/nemotron/cli.md +++ b/docs/fern/pages-vnightly/nemotron/cli.mdx @@ -1,9 +1,12 @@ -# CLI Framework +--- +title: "CLI Framework" +slug: "nemotron/cli.html" +description: "The CLI framework is built on Typer and nemo_runspec. Each command file contains its own execution logic, so you can see exactly how jobs are submitted." +--- -The CLI framework is built on [Typer](https://typer.tiangolo.com/) and [`nemo_runspec`](../nemo_runspec/package-readme). Each command file contains its own execution logic, so you can see exactly how jobs are submitted. +The CLI framework is built on [Typer](https://typer.tiangolo.com/) and [`nemo_runspec`](/../nemo_runspec/package-readme). Each command file contains its own execution logic, so you can see exactly how jobs are submitted.
    - ```console $ uv run nemotron nano3 sft --help Usage: nemotron nano3 sft [OPTIONS] @@ -49,18 +52,21 @@ Usage: nemotron nano3 sft [OPTIONS] ```
    - ## Overview The CLI framework supports: - **Nested commands** like `uv run nemotron nano3 data prep pretrain` + - **Config integration** with automatic YAML loading and dotlist overrides -- **[Artifact resolution](./artifacts.md)** mapping [W&B artifacts](./wandb.md) to config fields via `${art:...}` -- **[Remote execution](../nemo_runspec/nemo-run.md)** via NeMo-Run with `--run` / `--batch` + +- **[Artifact resolution](/artifacts)** mapping [W&B artifacts](/wandb) to config fields via `$\{art:...\}` + +- **[Remote execution](/../nemo_runspec/nemo-run)** via NeMo-Run with `--run` / `--batch` + - **Visible execution** with all submission logic in each command file -For artifacts, see [Nemotron Kit](./kit.md). For execution profiles, see [Execution through NeMo-Run](../nemo_runspec/nemo-run.md). For the full `nemo_runspec` toolkit, see the [nemo_runspec package readme](../nemo_runspec/package-readme). +For artifacts, see [Nemotron Kit](/kit). For execution profiles, see [Execution through NeMo-Run](/../nemo_runspec/nemo-run). For the full `nemo_runspec` toolkit, see the [nemo_runspec package readme](/../nemo_runspec/package-readme). ## Architecture @@ -149,13 +155,13 @@ nano3_app.add_recipe_command(pretrain, meta=PRETRAIN_META, rich_help_panel="Trai All recipe commands automatically receive these global options: | Option | Short | Description | -|--------|-------|-------------| -| `--config` | `-c` | Config name or path (from `config_dir`) | -| `--run` | `-r` | Attached [NeMo-Run](../nemo_runspec/nemo-run.md) execution (waits, streams logs) | -| `--batch` | `-b` | Detached [NeMo-Run](../nemo_runspec/nemo-run.md) execution (submits, exits) | -| `--dry-run` | `-d` | Preview config without executing | -| `--stage` | | Stage files to remote for debugging | -| `key=value` | | Dotlist overrides (any position) | +| --- | --- | --- | +| --config | -c | Config name or path (from config_dir) | +| --run | -r | Attached [NeMo-Run](/../nemo_runspec/nemo-run) execution (waits, streams logs) | +| --batch | -b | Detached [NeMo-Run](/../nemo_runspec/nemo-run) execution (submits, exits) | +| --dry-run | -d | Preview config without executing | +| --stage | | Stage files to remote for debugging | +| key=value | | Dotlist overrides (any position) | ### GlobalContext @@ -174,7 +180,9 @@ class GlobalContext: ``` Key properties: + - `mode` -> `"run"`, `"batch"`, or `"local"` + - `profile` -> Environment profile name (from `--run` or `--batch`) ## Configuration Pipeline @@ -196,11 +204,12 @@ flowchart LR The CLI generates two config files: | File | Purpose | -|------|---------| -| `job.yaml` | Full provenance: config + CLI args + env profile | -| `train.yaml` | Clean config for script (paths rewritten for remote) | +| --- | --- | +| job.yaml | Full provenance: config + CLI args + env profile | +| train.yaml | Clean config for script (paths rewritten for remote) | **job.yaml structure:** + ```yaml recipe: _target_: megatron.bridge.recipes... @@ -286,7 +295,7 @@ uv run nemotron nano3 rl -c tiny --run MY-CLUSTER ### Config Resolver -Use `${art:...}` in YAML configs to resolve artifact paths: +Use `$\{art:...\}` in YAML configs to resolve artifact paths: ```yaml run: @@ -311,15 +320,14 @@ uv run nemotron nano3 sft --run MY-CLUSTER \ Control how code is synced to remote (configured in `[tool.runspec.run]`): | Packager | Description | Use Case | -|----------|-------------|----------| -| `pattern` | Minimal sync (`main.py` + `config.yaml`) | Default | -| `code` | Full codebase with exclusions | Ray jobs needing imports | -| `self_contained` | Inline all `nemotron.*` imports | Isolated scripts | +| --- | --- | --- | +| pattern | Minimal sync (main.py + config.yaml) | Default | +| code | Full codebase with exclusions | Ray jobs needing imports | +| self_contained | Inline all nemotron.* imports | Isolated scripts | ## CLI Examples
    - ```console // Preview config without executing $ uv run nemotron nano3 pretrain -c tiny --dry-run @@ -344,7 +352,6 @@ $ uv run nemotron nano3 rl -c tiny --run MY-CLUSTER ```
    - ## Building a Recipe ### Step 1: Create Recipe Script with Runspec @@ -386,7 +393,7 @@ if __name__ == "__main__": ### Step 2: Create Config Directory -``` +```default src/nemotron/recipes/myrecipe/ тФЬтФАтФА config/ тФВ тФЬтФАтФА default.yaml @@ -463,26 +470,32 @@ uv run nemotron myrecipe train -c tiny --run MY-CLUSTER ### nemo_runspec Toolkit | Export | Module | Description | -|--------|--------|-------------| -| `parse()` | `nemo_runspec` | Parse `[tool.runspec]` from a script file | -| `parse_config()` | `nemo_runspec.config` | Load YAML config with dotlist overrides | -| `build_job_config()` | `nemo_runspec.config` | Build full job config with provenance | -| `save_configs()` | `nemo_runspec.config` | Save job.yaml and train.yaml | -| `parse_env()` | `nemo_runspec.env` | Load env.toml profile | -| `parse_recipe_config()` | `nemo_runspec.recipe_config` | Parse CLI options into RecipeConfig | -| `RecipeTyper` | `nemo_runspec.recipe_typer` | Typer subclass with rich help panels | -| `RecipeMeta` | `nemo_runspec.recipe_typer` | Recipe metadata for help panels | -| `GlobalContext` | `nemo_runspec.cli_context` | Shared CLI state | -| `create_executor()` | `nemo_runspec.execution` | Build NeMo-Run executor | -| `execute_local()` | `nemo_runspec.execution` | Run locally via torchrun | -| `build_env_vars()` | `nemo_runspec.execution` | Build env vars (HF, W&B tokens) | +| --- | --- | --- | +| parse() | nemo_runspec | Parse [tool.runspec] from a script file | +| parse_config() | nemo_runspec.config | Load YAML config with dotlist overrides | +| build_job_config() | nemo_runspec.config | Build full job config with provenance | +| save_configs() | nemo_runspec.config | Save job.yaml and train.yaml | +| parse_env() | nemo_runspec.env | Load env.toml profile | +| parse_recipe_config() | nemo_runspec.recipe_config | Parse CLI options into RecipeConfig | +| RecipeTyper | nemo_runspec.recipe_typer | Typer subclass with rich help panels | +| RecipeMeta | nemo_runspec.recipe_typer | Recipe metadata for help panels | +| GlobalContext | nemo_runspec.cli_context | Shared CLI state | +| create_executor() | nemo_runspec.execution | Build NeMo-Run executor | +| execute_local() | nemo_runspec.execution | Run locally via torchrun | +| build_env_vars() | nemo_runspec.execution | Build env vars (HF, W&B tokens) | ## Further Reading -- [Nemotron Kit](./kit.md) тАУ artifacts and lineage tracking -- [`nemo_runspec` Package](../nemo_runspec/package-readme) тАУ toolkit documentation -- [Execution through NeMo-Run](../nemo_runspec/nemo-run.md) тАУ execution profiles and env.toml -- [Data Preparation](./data-prep.md) тАУ data preparation module -- [Artifact Lineage](./artifacts.md) тАУ W&B artifact system and lineage tracking -- [W&B Integration](./wandb.md) тАУ credentials and configuration -- [Nano3 Recipe](./nano3/README.md) тАУ training recipe example +- [Nemotron Kit](/kit) тАУ artifacts and lineage tracking + +- [`nemo_runspec` Package](/../nemo_runspec/package-readme) тАУ toolkit documentation + +- [Execution through NeMo-Run](/../nemo_runspec/nemo-run) тАУ execution profiles and env.toml + +- [Data Preparation](/data-prep) тАУ data preparation module + +- [Artifact Lineage](/artifacts) тАУ W&B artifact system and lineage tracking + +- [W&B Integration](/wandb) тАУ credentials and configuration + +- [Nano3 Recipe](/nano3/README) тАУ training recipe example diff --git a/docs/nemotron/data-prep.md b/docs/fern/pages-vnightly/nemotron/data-prep.mdx similarity index 79% rename from docs/nemotron/data-prep.md rename to docs/fern/pages-vnightly/nemotron/data-prep.mdx index 113e43e6d..3c626dca3 100644 --- a/docs/nemotron/data-prep.md +++ b/docs/fern/pages-vnightly/nemotron/data-prep.mdx @@ -1,4 +1,8 @@ -# Data Preparation Module +--- +title: "Data Preparation Module" +slug: "nemotron/data-prep.html" +description: "The nemotron.data_prep module handles last-mile data processing: transforming curated datasets into training-ready formats. It sits between data curation (handled by NeMo Curator) and model training, " +--- The `nemotron.data_prep` module handles **last-mile data processing**: transforming curated datasets into training-ready formats. It sits between data curation (handled by [NeMo Curator](https://github.com/NVIDIA-NeMo/Curator)) and model training, producing outputs compatible with the NVIDIA AI training stack. @@ -9,9 +13,13 @@ The `nemotron.data_prep` module handles **last-mile data processing**: transform Built on [Ray](https://ray.io/), the module provides: - **Last-mile processing** тАУ convert curated datasets to training-ready formats (tokenization, packing, chat templating) + - **Distributed processing** тАУ scale from a single machine to a cluster of workers using Ray actors + - **Cloud-native I/O** тАУ read from HuggingFace Hub (`hf://`), S3 (`s3://`), GCS (`gs://`), or local paths via fsspec + - **Deterministic output** тАУ frozen shard plans ensure reproducible results across runs + - **Resumable pipelines** тАУ skip completed shards on restart; verify output integrity with checksums ### Data Pipeline: Curator тЖТ Data Prep тЖТ Training @@ -54,22 +62,24 @@ flowchart LR ``` **Typical workflow:** + 1. Use **[NeMo Curator](https://github.com/NVIDIA-NeMo/Curator)** to curate raw data at scaleтАФdeduplication, quality filtering, language identification, PII removal + 2. Use **Data Prep** to transform curated data into training-ready formatsтАФtokenization, chat templating, sequence packing, loss mask generation This separation allows you to curate once and prepare data multiple times for different training configurations (different tokenizers, sequence lengths, or output formats). ### Recipe Integration -Each training stage in a recipe includes a dedicated data preparation step that transforms source data into the format required by that stage's training framework: +Each training stage in a recipe includes a dedicated data preparation step that transforms source data into the format required by that stageтАЩs training framework: | Stage | Data Prep Output | Training Framework | Guide | -|-------|------------------|-------------------|-------| -| Stage 0: Pretrain | bin/idx indexed datasets | [Megatron-Bridge](./nvidia-stack.md#megatron-bridge) | [pretrain.md](./nano3/pretrain.md#data-preparation) | -| Stage 1: SFT | Packed Parquet with loss masks | [Megatron-Bridge](./nvidia-stack.md#megatron-bridge) | [sft.md](./nano3/sft.md#data-preparation) | -| Stage 2: RL | JSONL with OpenAI chat format | [NeMo-RL](./nvidia-stack.md#nemo-rl) | [rl.md](./nano3/rl.md#data-preparation) | +| --- | --- | --- | --- | +| Stage 0: Pretrain | bin/idx indexed datasets | [Megatron-Bridge](/nvidia-stack#megatron-bridge) | [pretrain.md](/nano3/pretrain#data-preparation) | +| Stage 1: SFT | Packed Parquet with loss masks | [Megatron-Bridge](/nvidia-stack#megatron-bridge) | [sft.md](/nano3/sft#data-preparation) | +| Stage 2: RL | JSONL with OpenAI chat format | [NeMo-RL](/nvidia-stack#nemo-rl) | [rl.md](/nano3/rl#data-preparation) | -Run data preparation for any stage using the [CLI](./cli.md): +Run data preparation for any stage using the [CLI](/cli): ```bash uv run nemotron nano3 data prep pretrain --run YOUR-CLUSTER # Stage 0 @@ -77,11 +87,11 @@ uv run nemotron nano3 data prep sft --run YOUR-CLUSTER # Stage 1 uv run nemotron nano3 data prep rl --run YOUR-CLUSTER # Stage 2 ``` -> **Note**: The `--run YOUR-CLUSTER` flag submits jobs via [NeMo-Run](../nemo_runspec/nemo-run.md). See [Execution through NeMo-Run](../nemo_runspec/nemo-run.md) for setup. +> **Note**: The `--run YOUR-CLUSTER` flag submits jobs via [NeMo-Run](/../nemo_runspec/nemo-run). See [Execution through NeMo-Run](/../nemo_runspec/nemo-run) for setup. ### NeMo-Run Integration -The module integrates natively with [NeMo-Run](../nemo_runspec/nemo-run.md) for job orchestration. Submit data preparation jobs to various executors (Slurm, local, Docker, cloud) directly from your local machine: +The module integrates natively with [NeMo-Run](/../nemo_runspec/nemo-run) for job orchestration. Submit data preparation jobs to various executors (Slurm, local, Docker, cloud) directly from your local machine: ```bash # Submit to Slurm cluster @@ -103,29 +113,32 @@ account = "YOUR-ACCOUNT" partition = "batch" ``` -See [Execution through NeMo-Run](../nemo_runspec/nemo-run.md) for complete configuration options. +See [Execution through NeMo-Run](/../nemo_runspec/nemo-run) for complete configuration options. ## Choosing an API | API | Use When | Output Format | -|-----|----------|---------------| -| `run_pretrain_pipeline()` | Pretraining tokenization | bin/idx | -| `run_sft_pipeline()` | Chat SFT with loss masking | Packed Parquet | +| --- | --- | --- | +| run_pretrain_pipeline() | Pretraining tokenization | bin/idx | +| run_sft_pipeline() | Chat SFT with loss masking | Packed Parquet | - `run_pretrain_pipeline()` тАФ Standard pretraining tokenization to bin/idx format + - `run_sft_pipeline()` тАФ Chat SFT with role-based loss masking to packed Parquet **For JSONL output** (RL training): + - Use the stage-specific scripts in `nemotron/recipes/nano3/stage2_rl/data_prep.py` + - Or call `process_jsonl_shard_core()` directly from `nemotron.data_prep.core` ## Supported Output Formats | Format | Recipe | Output | Use Case | -|--------|--------|--------|----------| -| `binidx` | `run_pretrain_pipeline()` | `.bin/.idx` pairs | Pretraining | -| `packed_parquet` | `run_sft_pipeline()` | `.parquet` files | Chat SFT | -| `jsonl` | Stage scripts | `.jsonl` files | RL training | +| --- | --- | --- | --- | +| binidx | run_pretrain_pipeline() | .bin/.idx pairs | Pretraining | +| packed_parquet | run_sft_pipeline() | .parquet files | Chat SFT | +| jsonl | Stage scripts | .jsonl files | RL training | ## Quick Start @@ -170,7 +183,6 @@ print(f"Run hash: {result.run_hash}") print(f"Total sequences: {result.total_sequences:,}") ``` - ## Output Formats ### BinIdx (Default) @@ -243,6 +255,7 @@ result = run_sft_pipeline( ``` **Input format** (OpenAI chat messages): + ```json { "messages": [ @@ -254,8 +267,11 @@ result = run_sft_pipeline( ``` **Output**: + - `.parquet` files with packed `input_ids` and `loss_mask` arrays + - Loss mask: `0` for system/user tokens, `1` for assistant tokens + - Metadata files for Megatron-Bridge compatibility ## Transforms @@ -374,7 +390,7 @@ transform = lambda r: {"input": r["q"], "output": r["a"]} if r.get("valid") else # Function def my_transform(record: dict) -> dict | None: - if len(record.get("text", "")) < 10: + if len(record.get("text", "")) \< 10: return None # Skip short records return {"input": record["question"], "output": record["answer"]} ``` @@ -388,7 +404,7 @@ def filter_by_length(min_chars: int = 100) -> Transform: """Skip records with text shorter than min_chars.""" def transform(record: dict) -> dict | None: text = record.get("text", "") - if len(text) < min_chars: + if len(text) \< min_chars: return None # Record will be skipped return record return transform @@ -442,7 +458,8 @@ config = PipelineConfig( ``` **Output structure:** -``` + +```default output/ тФЬтФАтФА train/ тФВ тФЬтФАтФА shard_000000.bin @@ -456,6 +473,7 @@ output/ ``` **blend.json format** (per-split mode): + ```json { "train": [["1.0", "/path/to/train/shard_000000"], ["1.0", "/path/to/train/shard_000001"]], @@ -464,7 +482,7 @@ output/ } ``` -This format is directly compatible with Megatron-Bridge's per-split data loading. +This format is directly compatible with Megatron-BridgeтАЩs per-split data loading. ## Type Definitions @@ -484,37 +502,37 @@ from nemotron.data_prep.formats.transforms import ( ### Recipe Entry Points | Function | Description | -|----------|-------------| -| `run_pretrain_pipeline(blend, output_dir, tokenizer, num_shards, ...)` | Tokenize to Megatron bin/idx format | -| `run_sft_pipeline(blend, output_dir, tokenizer, num_shards, ...)` | Chat SFT to packed Parquet format | +| --- | --- | +| run_pretrain_pipeline(blend, output_dir, tokenizer, num_shards, ...) | Tokenize to Megatron bin/idx format | +| run_sft_pipeline(blend, output_dir, tokenizer, num_shards, ...) | Chat SFT to packed Parquet format | ### Core Processing Functions | Function | Description | -|----------|-------------| -| `process_binidx_shard_core(...)` | Tokenize shard to bin/idx (alias: `process_binidx_shard_files_core`) | -| `process_jsonl_shard_core(...)` | Transform and write JSONL records | -| `process_chat_sft_spool_core(...)` | Tokenize chat messages to spool intermediate | -| `process_chat_sft_parquet_core(...)` | Pack spool to Parquet output | +| --- | --- | +| process_binidx_shard_core(...) | Tokenize shard to bin/idx (alias: process_binidx_shard_files_core) | +| process_jsonl_shard_core(...) | Transform and write JSONL records | +| process_chat_sft_spool_core(...) | Tokenize chat messages to spool intermediate | +| process_chat_sft_parquet_core(...) | Pack spool to Parquet output | ### Configuration Classes | Class | Description | -|-------|-------------| -| `PipelineConfig` | Pipeline configuration | -| `TokenizerConfig` | Tokenizer settings (model, type, add_bos, add_eos) | -| `OutputConfig` | Output directory and format | -| `BinIdxOutputConfig` | Tokenized binary format options | -| `JsonlOutputConfig` | JSONL format options | -| `ChatSftOutputConfig` | Chat SFT with loss masking options | -| `ObservabilityConfig` | W&B and pipeline logging settings | +| --- | --- | +| PipelineConfig | Pipeline configuration | +| TokenizerConfig | Tokenizer settings (model, type, add_bos, add_eos) | +| OutputConfig | Output directory and format | +| BinIdxOutputConfig | Tokenized binary format options | +| JsonlOutputConfig | JSONL format options | +| ChatSftOutputConfig | Chat SFT with loss masking options | +| ObservabilityConfig | W&B and pipeline logging settings | ### Result Classes | Class | Description | -|-------|-------------| -| `FormatResult` | Pipeline result with run metadata, data paths, and statistics | -| `DataBlendsArtifact` | Artifact with blend.json path and metrics | +| --- | --- | +| FormatResult | Pipeline result with run metadata, data paths, and statistics | +| DataBlendsArtifact | Artifact with blend.json path and metrics | ## Compression @@ -531,21 +549,33 @@ Requires the `zstandard` package: `uv pip install zstandard` ## Dependencies Core dependencies: + - `ray` - Parallel processing + - `pyarrow` - Parquet file reading + - `xxhash` - Fast checksums Optional dependencies: + - `orjson` - Fast JSON serialization (falls back to stdlib json) + - `zstandard` - Zstd compression for JSONL output ## Further Reading - [NeMo Curator](https://github.com/NVIDIA-NeMo/Curator) тАУ data curation at scale (coming soon) + - [NeMo Data Designer](https://github.com/NVIDIA-NeMo/DataDesigner) тАУ synthetic data generation (coming soon) -- [NVIDIA AI Stack](./nvidia-stack.md) тАУ Megatron-Core, Megatron-Bridge, NeMo-RL -- [Execution through NeMo-Run](../nemo_runspec/nemo-run.md) тАУ job orchestration and execution profiles -- [CLI Framework](./cli.md) тАУ CLI building and recipe commands -- [Artifact Lineage](./artifacts.md) тАУ W&B artifact system and lineage tracking -- [Xenna Observability](./xenna-observability.md) тАУ real-time W&B logging for xenna pipelines -- [Nano3 Recipe](./nano3/README.md) тАУ training recipe example + +- [NVIDIA AI Stack](/nvidia-stack) тАУ Megatron-Core, Megatron-Bridge, NeMo-RL + +- [Execution through NeMo-Run](/../nemo_runspec/nemo-run) тАУ job orchestration and execution profiles + +- [CLI Framework](/cli) тАУ CLI building and recipe commands + +- [Artifact Lineage](/artifacts) тАУ W&B artifact system and lineage tracking + +- [Xenna Observability](/xenna-observability) тАУ real-time W&B logging for xenna pipelines + +- [Nano3 Recipe](/nano3/README) тАУ training recipe example diff --git a/docs/nemotron/embed/README.md b/docs/fern/pages-vnightly/nemotron/embed/README.mdx similarity index 92% rename from docs/nemotron/embed/README.md rename to docs/fern/pages-vnightly/nemotron/embed/README.mdx index 82480f0b4..763a3176e 100644 --- a/docs/nemotron/embed/README.md +++ b/docs/fern/pages-vnightly/nemotron/embed/README.mdx @@ -1,22 +1,28 @@ -# Embedding Model Fine-Tuning Recipe +--- +title: "Embedding Model Fine-Tuning Recipe" +slug: "nemotron/embed/README.html" +description: "A complete 6-stage pipeline for fine-tuning and deploying embedding models on domain-specific data using synthetic data generation." +--- A complete 6-stage pipeline for fine-tuning and deploying embedding models on domain-specific data using synthetic data generation. ## Overview -This recipe fine-tunes NVIDIA's [Llama-Nemotron-Embed-1B-v2](https://huggingface.co/nvidia/llama-nemotron-embed-1b-v2) embedding model on your own domain data. By the end of this pipeline, you'll have a domain-adapted embedding model that excels at retrieving relevant documents from your specific corpus. +This recipe fine-tunes NVIDIAтАЩs [Llama-Nemotron-Embed-1B-v2](https://huggingface.co/nvidia/llama-nemotron-embed-1b-v2) embedding model on your own domain data. By the end of this pipeline, youтАЩll have a domain-adapted embedding model that excels at retrieving relevant documents from your specific corpus. ### Why Fine-Tune Embedding Models? Pre-trained embedding models work well for general-purpose retrieval, but may underperform on specialized domains with unique terminology, document structures, or query patterns. Fine-tuning adapts the model to: - Understand domain-specific vocabulary and concepts + - Better match the types of queries your users will ask + - Improve retrieval accuracy on your specific document corpus ## Training Pipeline -``` +```default тФМтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФР тФВ YOUR DOCUMENT CORPUS тФВ тФВ (Text files: .txt, .md, etc.) тФВ @@ -74,13 +80,13 @@ Pre-trained embedding models work well for general-purpose retrieval, but may un ``` | Stage | Command | Description | Output | -|-------|---------|-------------|--------| -| Stage 0: SDG | `nemotron embed sdg` | Validate corpus, generate synthetic Q&A pairs from documents | Q&A pairs with quality scores | -| Stage 1: Data Prep | `nemotron embed prep` | Convert, mine hard negatives, unroll | Training-ready data | -| Stage 2: Finetune | `nemotron embed finetune` | Fine-tune embedding model | Model checkpoint | -| Stage 3: Eval | `nemotron embed eval` | Evaluate on retrieval metrics | Metrics comparison | -| Stage 4: Export | `nemotron embed export` | Export to ONNX/TensorRT | Optimized inference models | -| Stage 5: Deploy | `nemotron embed deploy` | Deploy NIM with custom model | Running inference service | +| --- | --- | --- | --- | +| Stage 0: SDG | nemotron embed sdg | Validate corpus, generate synthetic Q&A pairs from documents | Q&A pairs with quality scores | +| Stage 1: Data Prep | nemotron embed prep | Convert, mine hard negatives, unroll | Training-ready data | +| Stage 2: Finetune | nemotron embed finetune | Fine-tune embedding model | Model checkpoint | +| Stage 3: Eval | nemotron embed eval | Evaluate on retrieval metrics | Metrics comparison | +| Stage 4: Export | nemotron embed export | Export to ONNX/TensorRT | Optimized inference models | +| Stage 5: Deploy | nemotron embed deploy | Deploy NIM with custom model | Running inference service | ## Installation @@ -105,10 +111,12 @@ uv sync --all-extras ### 3. Get Your NVIDIA API Key -The SDG stage (Stage 0) uses NVIDIA's hosted LLM APIs for synthetic data generation. +The SDG stage (Stage 0) uses NVIDIAтАЩs hosted LLM APIs for synthetic data generation. 1. Sign up at [build.nvidia.com](https://build.nvidia.com) + 2. Create an API key + 3. Set the environment variable: ```bash @@ -120,6 +128,7 @@ export NVIDIA_API_KEY=nvapi-your_key_here For Docker or Slurm execution, create `env.toml` in the **repository root directory**. **Minimal configuration (local execution only):** + ```toml [wandb] project = "my-embedding-project" @@ -134,13 +143,15 @@ See the [Execution Profiles](#execution-profiles) section below. ### Supported Formats - Any text files, default: .txt, .md, .text, and files with no extension + - Documents should be UTF-8 encoded + - Files are processed recursively from the corpus directory ### Corpus Size Recommendations | Corpus Size | Documents | Expected Results | -|-------------|-----------|------------------| +| --- | --- | --- | | **Minimum** | 50-100 docs (~50K tokens) | Basic domain adaptation | | **Recommended** | 500+ docs | Good domain coverage | | **Optimal** | 1000+ docs | Best performance | @@ -162,8 +173,11 @@ All files matching the `file_extensions` config (default: `.txt,.md`) will be pr ### Document Quality Tips - **Length**: Aim for 200-2000 tokens per document + - **Content**: Ensure documents are representative of your domain + - **Diversity**: Include various document types/topics from your domain + - **Quality**: Clean, well-formatted text yields better synthetic Q&A pairs ## Prerequisites @@ -171,25 +185,35 @@ All files matching the `file_extensions` config (default: `.txt,.md`) will be pr ### Hardware Requirements - **GPU**: NVIDIA GPU with at least 80GB VRAM (e.g., A100, H100) - - Stages 0 uses NVIDIA API (no GPU required) - - Stage 1-5: Require GPU for model inference and training + + - Stages 0 uses NVIDIA API (no GPU required) + + - Stage 1-5: Require GPU for model inference and training + - **CPU**: Modern multi-core processor (16+ cores recommended) + - **Memory**: 128GB+ RAM recommended + - **Storage**: ~50GB free disk space for outputs, models, and containers ### Software Requirements - **Python**: 3.12 or later + - **UV**: Package manager (installation instructions above) + - **NVIDIA API Key**: Required for synthetic data generation + - **NVIDIA GPU Drivers**: Latest drivers for your GPU + - **Docker** (optional): For containerized execution + - **Slurm** (optional): For cluster execution ### Expected Runtime & Resources | Stage | GPU VRAM | CPU | Notes | -|-------|----------|-----|-------| +| --- | --- | --- | --- | | Stage 0 (SDG) | N/A | 8+ cores | Uses API (no local GPU); runtime varies by dataset size | | Stage 1 (Data Prep) | 40GB | 16+ cores | Hard negative mining on GPU; runtime varies by dataset size | | Stage 2 (Finetune) | 80GB | 16+ cores | Runtime varies by dataset size and epochs | @@ -200,22 +224,30 @@ All files matching the `file_extensions` config (default: `.txt,.md`) will be pr **Total disk space**: ~50GB for outputs, model checkpoints, and containers **Runtime**: Highly dependent on dataset size. Expect longer runtimes for larger corpora and more training epochs. - - For small dataset (e.g. nv_pp_random with ~70 input files), it can take ~30 minutes for Stage 0 (SDG) with the default setup. Changing to other LLM endpoints or tune `max_parallel_requests_for_gen` can affect the runtime, rate limit failures, and generation quality. It can take 10-20 minutes for Stage 2 (Finetune) with the default setup. - - For large dataset (e.g. 10K+ input files), it can take tens of hours or 1-2 days for Stage 0 (SDG) and 5-10 hours for Stage 2 (Finetune). Changing model endpoints, type and number of GPUs (and other fine-tune parameters) can affect the runtime. +- For small dataset (e.g. nv_pp_random with ~70 input files), it can take ~30 minutes for Stage 0 (SDG) with the default setup. Changing to other LLM endpoints or tune `max_parallel_requests_for_gen` can affect the runtime, rate limit failures, and generation quality. It can take 10-20 minutes for Stage 2 (Finetune) with the default setup. + +- For large dataset (e.g. 10K+ input files), it can take tens of hours or 1-2 days for Stage 0 (SDG) and 5-10 hours for Stage 2 (Finetune). Changing model endpoints, type and number of GPUs (and other fine-tune parameters) can affect the runtime. ### LLM API Usage (Stage 0) -Stage 0 uses LLM APIs for synthetic data generation. By default, it uses NVIDIA's hosted LLMs: +Stage 0 uses LLM APIs for synthetic data generation. By default, it uses NVIDIAтАЩs hosted LLMs: - **Default provider**: NVIDIA API (free tier available at [build.nvidia.com](https://build.nvidia.com)) + - **Default model**: `nvidia/nemotron-3-nano-30b-a3b` (fast, reliable for structured generation) + - **Usage**: ~4 API calls per document (artifact extraction, QA generation, dedup, quality eval) + - **Cost**: Free tier has rate limits; contact NVIDIA for production usage + - **Progress**: Built-in progress logging shows completion %, records/second, and ETA per stage + - **Other providers**: NeMo Data Designer supports multiple providers (OpenAI, OpenRouter, etc.) - - Customize provider settings in the config file - - See [default provider settings](https://nvidia-nemo.github.io/DataDesigner/latest/concepts/models/default-model-settings/) for configuration options + + - Customize provider settings in the config file + + - See [default provider settings](https://nvidia-nemo.github.io/DataDesigner/latest/concepts/models/default-model-settings/) for configuration options ## Quick Start @@ -260,9 +292,9 @@ nemotron embed finetune -c default --dry-run Stages are designed to run sequentially, but you can start from any stage if you have the required inputs: | Start From | Requirement | Use Case | -|------------|-------------|----------| +| --- | --- | --- | | **Stage 0** | Document corpus | Full pipeline from scratch | -| **Stage 1** | Q&A pairs (JSON) | Skip SDG if you have labeled data or use [NVIDIA's pre-generated dataset](#using-nvidias-pre-generated-dataset) | +| **Stage 1** | Q&A pairs (JSON) | Skip SDG if you have labeled data or use [NVIDIAтАЩs pre-generated dataset](#using-nvidia-s-pre-generated-dataset) | | **Stage 2** | Training data (Automodel format) | Skip data prep if data is ready | | **Stage 3** | Model checkpoint | Evaluate existing checkpoint | | **Stage 4** | Model checkpoint | Export existing model | @@ -270,9 +302,9 @@ Stages are designed to run sequentially, but you can start from any stage if you See individual stage READMEs for input format requirements. -### Using NVIDIA's Pre-Generated Dataset +### Using NVIDIAтАЩs Pre-Generated Dataset -NVIDIA provides a ready-to-use synthetic retrieval dataset on Hugging Face: [Retrieval-Synthetic-NVDocs-v1](https://huggingface.co/datasets/nvidia/Retrieval-Synthetic-NVDocs-v1). This dataset was generated from NVIDIA's publicly available content using the same SDG pipeline (Stage 0) in this recipe, and contains ~15K documents with 105K+ question-answer pairs across multiple reasoning types. +NVIDIA provides a ready-to-use synthetic retrieval dataset on Hugging Face: [Retrieval-Synthetic-NVDocs-v1](https://huggingface.co/datasets/nvidia/Retrieval-Synthetic-NVDocs-v1). This dataset was generated from NVIDIAтАЩs publicly available content using the same SDG pipeline (Stage 0) in this recipe, and contains ~15K documents with 105K+ question-answer pairs across multiple reasoning types. If you want to fine-tune an embedding model on NVIDIA-related content, you can **skip Stage 0 entirely** and start directly from Stage 1: @@ -413,12 +445,13 @@ cd /path/to/staged/files Each stage has a `config/` directory with YAML configuration files. | File | Purpose | -|------|---------| -| `default.yaml` | Production-ready configuration | +| --- | --- | +| default.yaml | Production-ready configuration | ### Key Configuration Options **Stage 0: SDG** + ```yaml corpus_id: my_corpus # Identifier for your corpus corpus_dir: ./data/corpus # Path to your documents @@ -431,6 +464,7 @@ max_parallel_requests_for_gen: 4 # Number of parallel requests to submit to LLM ``` **Stage 1: Data Prep** + ```yaml base_model: nvidia/llama-nemotron-embed-1b-v2 # Model for hard negative mining quality_threshold: 7.0 # Minimum Q&A quality score (0-10) @@ -446,6 +480,7 @@ test_ratio: 0.1 # Test split (10%) ``` **Stage 2: Finetune** + ```yaml base_model: nvidia/llama-nemotron-embed-1b-v2 num_epochs: 3 @@ -460,6 +495,7 @@ train_n_passages: 5 # 1 positive + 4 hard negatives > **Warning тАФ Overfitting risk**: The default `num_epochs: 3` is set for the small example dataset shipped with this recipe, where fewer epochs may not produce a visible training signal. For most real-world datasets, **1тАУ2 epochs is sufficient** and 3 epochs carries a high risk of overfitting. Lower this value when working with your own data (e.g., `nemotron embed finetune -c default num_epochs=1`). **Stage 3: Eval** + ```yaml k_values: [1, 5, 10, 100] # K values for Recall@k, nDCG@k max_length: 512 # Max sequence length (check your base model's max sequence length) @@ -469,6 +505,7 @@ eval_nim: false # Evaluate NIM endpoint ``` **Stage 4: Export** + ```yaml model_path: ./output/embed/stage2_finetune/checkpoints/LATEST/model/consolidated export_to_trt: true # Export to TensorRT (requires nemo:25.07+ container) @@ -478,6 +515,7 @@ trt_opt_seq_len: 128 # Optimal sequence length for TRT ``` **Stage 5: Deploy** + ```yaml nim_image: nvcr.io/nim/nvidia/llama-3.2-nv-embedqa-1b-v2:1.10.1 model_dir: ./output/embed/stage4_export/onnx # Path to exported model @@ -487,7 +525,7 @@ detach: false # Run in background ### Customizing Sequence Length -The pipeline defaults to 512-token sequences. You can change this to match your use case, up to the base model's max sequence length (e.g., 8192 for the default `nvidia/llama-nemotron-embed-1b-v2`; check your model's documentation if using a different base model). +The pipeline defaults to 512-token sequences. You can change this to match your use case, up to the base modelтАЩs max sequence length (e.g., 8192 for the default `nvidia/llama-nemotron-embed-1b-v2`; check your modelтАЩs documentation if using a different base model). For example, to use 2000-token passages, override the sequence length consistently across stages: @@ -606,7 +644,7 @@ nemotron embed eval -c default eval_nim=true eval_base=false After running the full pipeline: -``` +```default output/embed/ тФЬтФАтФА stage0_sdg/ # Synthetic Q&A pairs тФВ тФФтФАтФА generated_batch*.json @@ -634,7 +672,7 @@ output/embed/ The evaluation stage computes standard information retrieval metrics using the BEIR framework. | Metric | Description | Range | -|--------|-------------|-------| +| --- | --- | --- | | **nDCG@k** | Normalized Discounted Cumulative Gain (ranking quality) | 0.0-1.0 | | **Recall@k** | Fraction of relevant documents in top-k results | 0.0-1.0 | | **Precision@k** | Fraction of retrieved documents that are relevant | 0.0-1.0 | @@ -645,12 +683,14 @@ Higher scores indicate better retrieval performance. ### Interpreting Results **Good fine-tuning results typically show:** + - nDCG@10 and Recall@10 improvement of **15%** over base model + - Consistent improvements across all k values **Example successful evaluation:** -``` +```default Model: base - nDCG@10: 0.42 - Recall@10: 0.65 @@ -663,14 +703,17 @@ Model: fine-tuned ``` **Warning signs:** + - **No improvement**: May need more training data or higher quality Q&A pairs + - **Worse performance**: Check for data quality issues or training hyperparameters + - **Overfitting**: Good training metrics but poor validation metrics ## Key Components | Component | Purpose | Repository | -|-----------|---------|------------| +| --- | --- | --- | | retriever-sdg | Synthetic data generation using NeMo Data Designer | [GitHub](https://github.com/NVIDIA-NeMo/DataDesigner) | | Automodel | Embedding model training framework | [GitHub](https://github.com/NVIDIA/NeMo-Automodel) | | BEIR | Evaluation framework for information retrieval | [GitHub](https://github.com/beir-cellar/beir) | @@ -680,7 +723,7 @@ Model: fine-tuned ## Base Model | Property | Value | -|----------|-------| +| --- | --- | | Model | nvidia/llama-nemotron-embed-1b-v2 | | Parameters | ~1B | | Embedding Dimension | 768 | @@ -693,6 +736,7 @@ Model: fine-tuned ### Installation Issues **Error: `uv: command not found`** + ```bash # Install UV package manager curl -LsSf https://astral.sh/uv/install.sh | sh @@ -701,6 +745,7 @@ export PATH="$HOME/.cargo/bin:$PATH" ``` **Error: `nemotron: command not found`** + ```bash # Make sure you're in the Nemotron directory cd /path/to/Nemotron @@ -711,32 +756,41 @@ uv run nemotron embed info ### Stage 0: SDG Issues **Error: `NVIDIA_API_KEY not set`** + ```bash # Set your API key export NVIDIA_API_KEY=nvapi-your_key_here ``` **Error: API rate limiting** + - **Solution**: Reduce batch size in config or add delays between API calls + - **Alternative**: Contact NVIDIA for increased rate limits for production use **Error: Poor Q&A quality scores** + - **Solution**: Check document quality - ensure clean, well-formatted text + - **Solution**: Adjust `sentences_per_chunk` in config (default: 5 sentences per chunk) ### Stage 1: Data Preparation Issues **Error: `CUDA out of memory` during hard negative mining** + ```bash # Reduce mining batch size in config nemotron embed prep -c default mining_batch_size=64 ``` **Error: No valid Q&A pairs after quality filtering** + - **Solution**: Lower quality_threshold (default: 7.0) + - **Solution**: Check SDG output quality scores **Error: Import errors for `nemo_automodel`** + ```bash # Ensure dependencies are installed cd /path/to/Nemotron @@ -746,28 +800,38 @@ uv sync --all-extras ### Stage 2: Training Issues **Error: Train Loss not decreasing** + - **Solution**: Try adjusting learning rate (default: 1e-5; try 5e-6 or 2e-5) + - **Solution**: Lower `global_batch_size` to increase the number of gradient update steps + - **Solution**: Check training data quality **Error: Train Loss is NaN** + - **Solution**: Reduce learning rate significantly + - **Solution**: Check for data quality issues (missing values, corrupted entries) **Error: `CUDA out of memory` during training** + ```bash # Reduce local batch size nemotron embed finetune -c default local_batch_size=2 ``` **Error: Training very slow** + - **Check**: GPU utilization with `nvidia-smi` + - **Solution**: Increase batch size if GPU not fully utilized + - **Solution**: Enable mixed precision training (usually enabled by default) ### Stage 3: Evaluation Issues **Error: Model checkpoint not found** + ```bash # Check checkpoint path ls -la output/embed/stage2_finetune/checkpoints/LATEST/model/consolidated/ @@ -777,22 +841,29 @@ nemotron embed eval -c default finetuned_model_path=/path/to/checkpoint ``` **Error: BEIR evaluation fails** + - **Solution**: Ensure eval_beir data was created in Stage 1 + - **Solution**: Check that corpus.jsonl and queries.jsonl exist ### Stage 4: Export Issues **Error: TensorRT export fails** + - **Solution**: Ensure using NGC container with TensorRT (nemo:25.07+) + - **Solution**: Try ONNX-only export first: `export_to_trt=false` **Error: ONNX export fails** + - **Solution**: Check model checkpoint is valid + - **Solution**: Ensure sufficient disk space ### Stage 5: Deployment Issues **Error: NIM container fails to start** + ```bash # Check NGC credentials docker login nvcr.io @@ -805,19 +876,24 @@ nemotron embed deploy -c default host_port=8002 ``` **Error: NIM accuracy differs from checkpoint** + - **Solution**: Ensure using same model format (TensorRT vs ONNX) + - **Solution**: Check quantization settings match + - **Solution**: Verify model files are complete and not corrupted ### CUDA Library Errors **Error: `nvJitLink` or CUDA symbol errors** + ```bash # Clear LD_LIBRARY_PATH to avoid conflicts export LD_LIBRARY_PATH="" ``` **Error: HybridCache import errors** + ```bash # Clear HuggingFace cache rm -rf ~/.cache/huggingface/modules/transformers_modules/nvidia/ @@ -826,6 +902,7 @@ rm -rf ~/.cache/huggingface/modules/transformers_modules/nvidia/ ### Docker Issues **Error: Container has no GPU access** + ```bash # Verify NVIDIA runtime is installed docker run --rm --gpus all nvidia/cuda:12.1.0-base-ubuntu22.04 nvidia-smi @@ -837,6 +914,7 @@ cat /etc/docker/daemon.json ### Slurm Issues **Error: Job submission fails** + ```bash # Check Slurm is configured in env.toml cat env.toml @@ -849,15 +927,17 @@ sinfo -p interactive ``` **Error: Job stays in pending state** + ```bash # Check job queue squeue -u $USER # Check job reason -squeue -j -o "%.18i %.9P %.8j %.8u %.2t %.10M %.6D %R" +squeue -j \ -o "%.18i %.9P %.8j %.8u %.2t %.10M %.6D %R" ``` **Debugging Slurm jobs** + ```bash # Check job status squeue -u $USER @@ -867,15 +947,16 @@ cat /path/to/job/logs/stdout.txt cat /path/to/job/logs/stderr.txt # Cancel stuck job -scancel +scancel \ # View job details -scontrol show job +scontrol show job \ ``` ### General Debugging **Enable verbose logging** + ```bash # Add --verbose flag (if available) nemotron embed finetune -c default --verbose @@ -885,6 +966,7 @@ cat output/embed/stage2_finetune/logs/*.log ``` **Dry run to preview** + ```bash # Preview command without executing nemotron embed finetune -c default --dry-run @@ -907,16 +989,19 @@ Monitor training progress at: `https://wandb.ai//` ### Local Monitoring **Check training logs:** + ```bash tail -f output/embed/stage2_finetune/logs/train.log ``` **GPU utilization:** + ```bash watch -n 1 nvidia-smi ``` **Checkpoint progress:** + ```bash ls -lh output/embed/stage2_finetune/checkpoints/ ``` @@ -924,36 +1009,52 @@ ls -lh output/embed/stage2_finetune/checkpoints/ ## Best Practices ### Data Quality + - Use clean, well-formatted documents + - Ensure documents represent your target domain + - Aim for diverse document types and topics + - Start with small corpus to test pipeline, then scale up ### Training + - Start with default hyperparameters (1-2 epochs, LR 1e-5, batch size 128) + - Monitor validation metrics to avoid overfitting + - Attention implementation is auto-detected (flash_attention_2 if available, else sdpa) + - Checkpoint frequency: if `ckpt_every_steps` is omitted, defaults to once per epoch for map-style datasets or twice during training for iterable datasets **Key hyperparameters to tune:** | Parameter | Default | Notes | -| :---- | :---- | :---- | +| --- | --- | --- | | Epochs | 3 | **Default is tuned for the small example dataset; for real-world data, 1тАУ2 epochs is usually sufficient.** 3 epochs risks overfitting on most datasets. See [epoch guidance in FAQ](#how-many-epochs-typically-improve-accuracy-before-overfitting-becomes-a-risk-is-there-a-rule-of-thumb). | | Learning rate | 1e-5 | Try double and half of the default value | | Learning rate warmup steps | 5 | Set to 5-10% of total steps of finetune to have better early training stability | -| Sequence length | 512 | Set `query_max_length` / `passage_max_length` consistently across Stages 1-3 (up to your base model's max sequence length). Increase `sentences_per_chunk` in Stage 0 accordingly. Longer sequences require reducing batch size. See [Customizing Sequence Length](#customizing-sequence-length). | +| Sequence length | 512 | Set query_max_length / passage_max_length consistently across Stages 1-3 (up to your base modelтАЩs max sequence length). Increase sentences_per_chunk in Stage 0 accordingly. Longer sequences require reducing batch size. See [Customizing Sequence Length](#customizing-sequence-length). | ### Evaluation + - Always compare against base model + - Test on held-out test set (not used in training) + - Evaluate on realistic queries from your domain + - Consider multiple metrics (nDCG, Recall, Precision) ### Deployment + - Test exported models thoroughly before production + - Verify NIM accuracy matches checkpoint + - Monitor inference latency and throughput + - Set up proper logging and monitoring ## FAQ @@ -979,12 +1080,12 @@ In addition, prompts can be tailored to the specific document type - bug vs tick There is no universal threshold тАФ saturation depends on domain complexity, vocabulary diversity, and document heterogeneity. As a rough guide: | Corpus Size | Typical Outcome | -|-------------|-----------------| +| --- | --- | | 100+ docs | Basic domain adaptation | | 500-1000 docs | Good domain coverage for enterprise corpora | | 5000+ docs | Strong and reliable adaptation | -After SDG and quality filtering (default threshold 7.0), the effective training set is typically smaller than the raw doc count. Monitor Stage 3 eval metrics (nDCG@10, Recall@10) across runs with increasing data to find your domain's saturation point. +After SDG and quality filtering (default threshold 7.0), the effective training set is typically smaller than the raw doc count. Monitor Stage 3 eval metrics (nDCG@10, Recall@10) across runs with increasing data to find your domainтАЩs saturation point. **How can we reliably detect saturation of the embedding model as we scale data volume?** @@ -1015,7 +1116,9 @@ Exact matching is ideal but approximate alignment is usually good enough. What m Hard-negative mining uses a margin-based filter to exclude documents that are too similar to the positive. The key parameter is `hard_neg_margin` (default: 0.95 with `perc` margin type), which acts as an exclusion ceiling: any document scoring *above* `min_positive_score * margin` is eliminated, and the top-k highest-scoring survivors become the hard negatives. To tune: - **Raise the margin** (e.g., 0.98тАУ1.0) to narrow the exclusion zone, allowing negatives that score closer to the positive. This produces harder negatives that improve discrimination but risks including false negatives (relevant documents mislabeled as negative), especially in corpora with near-duplicate passages. + - **Lower the margin** (e.g., 0.85тАУ0.90) to widen the exclusion zone, forcing negatives to be further from the positive score. This produces easier, safer negatives with less risk of false negatives, but provides weaker training signal. + - **Increase `hard_negatives_to_mine`** (default: 5) to give the model more contrastive examples per query. The training stage uses `train_n_passages` (default: 5, meaning 1 positive + 4 negatives), so mine at least as many as you plan to train with. Start with defaults and only raise the margin if Stage 3 metrics plateau тАФ aggressive hard negatives on noisy data can hurt more than help. @@ -1031,21 +1134,24 @@ The default of 4 hard negatives per query (`train_n_passages: 5` = 1 positive + In order of typical impact: 1. **Learning rate** (default: 1e-5) тАФ the single most sensitive parameter. Try 5e-6 and 2e-5 as first alternatives. Too high causes instability or NaN loss; too low undertrains. + 2. **Epochs** (default: 3) тАФ controls how many passes the model makes over the data. The default of 3 is calibrated for the small example dataset in this recipe; **for most real-world datasets, 1тАУ2 epochs is recommended** to avoid overfitting. See the epoch table below. + 3. **Learning rate warmup** (default: 5 steps) тАФ set to 5тАУ10% of total training steps for better early stability. + 4. **Batch size** (default: 128) тАФ determines the number of gradient update steps per epoch. Use smaller values for small datasets to get more updates; see the [batch size FAQ](#how-does-batch-size-affect-training-and-how-should-it-be-set) below. **What learning-rate sweep strategy is recommended to maximize accuracy (e.g., halve/double defaults)?** -A simple three-point sweep around the default is the most cost-effective approach. Start with the default 1e-5, then try 5e-6 (half) and 2e-5 (double). Compare Stage 3 eval metrics (nDCG@10) across the three runs тАФ the winner is usually obvious. If the best result is at an endpoint (e.g., 2e-5 beats both others), extend one more step in that direction (try 4e-5) to confirm you haven't undershot. Keep epochs and all other hyperparameters fixed during the sweep so that LR is the only variable. +A simple three-point sweep around the default is the most cost-effective approach. Start with the default 1e-5, then try 5e-6 (half) and 2e-5 (double). Compare Stage 3 eval metrics (nDCG@10) across the three runs тАФ the winner is usually obvious. If the best result is at an endpoint (e.g., 2e-5 beats both others), extend one more step in that direction (try 4e-5) to confirm you havenтАЩt undershot. Keep epochs and all other hyperparameters fixed during the sweep so that LR is the only variable. #### How many epochs typically improve accuracy before overfitting becomes a risk? Is there a rule of thumb? The default `num_epochs: 3` exists because the example dataset shipped with this recipe is very small and training for only 1тАУ2 epochs may not produce a measurable signal. **For your own data, start with 1тАУ2 epochs and only increase if evaluation metrics are still improving.** | Dataset Size | Recommended Epochs | Notes | -|--------------|--------------------|-------| -| Small (<1K examples) | 2тАУ3 | Use 3 only if val loss is still decreasing | +| --- | --- | --- | +| Small (\<1K examples) | 2тАУ3 | Use 3 only if val loss is still decreasing | | Medium (1KтАУ10K examples) | 1тАУ2 | 2 epochs is usually the upper bound | | Large (10K+ examples) | 1 | More than 1 epoch rarely helps and often hurts | @@ -1060,12 +1166,14 @@ As a rule of thumb, use a **smaller `global_batch_size` for small datasets** and **How should training loss and evaluation loss be interpreted to assess real accuracy gains?** - **Training loss** (contrastive/InfoNCE loss) measures how well the model separates positives from negatives in each batch. A steadily decreasing training loss is expected; a very low floor (~0.0тАУ0.01) suggests the model has learned the training set well. + - **Validation loss** tracks the same metric on held-out data. The gap between training and validation loss is your primary overfitting indicator. If validation loss decreases alongside training loss, the model is generalizing. If validation loss plateaus or rises while training loss keeps falling, stop training or reduce epochs. -- **Neither loss directly equals retrieval accuracy.** Always rely on Stage 3 eval metrics (nDCG@k, Recall@k) as the ground truth for actual embedding quality. Loss is a proxy тАФ it's possible for loss to improve while retrieval metrics stagnate if the hard negatives are too easy. + +- **Neither loss directly equals retrieval accuracy.** Always rely on Stage 3 eval metrics (nDCG@k, Recall@k) as the ground truth for actual embedding quality. Loss is a proxy тАФ itтАЩs possible for loss to improve while retrieval metrics stagnate if the hard negatives are too easy. **Are there target loss behaviors or patterns that indicate optimal embedding learning?** -Healthy training typically shows: (1) rapid loss decrease in the first 20тАУ30% of training, (2) gradual flattening toward a stable floor, (3) validation loss tracking close to training loss throughout. Warning signs include loss spikes (often caused by bad data or LR too high), NaN loss (reduce LR or batch size), or loss that never decreases (LR too low, or data quality issues). There is no universal "target loss value" тАФ the absolute number depends on batch size, number of negatives, and temperature. Focus on the trajectory and the train/val gap rather than the absolute value. +Healthy training typically shows: (1) rapid loss decrease in the first 20тАУ30% of training, (2) gradual flattening toward a stable floor, (3) validation loss tracking close to training loss throughout. Warning signs include loss spikes (often caused by bad data or LR too high), NaN loss (reduce LR or batch size), or loss that never decreases (LR too low, or data quality issues). There is no universal тАЬtarget loss valueтАЭ тАФ the absolute number depends on batch size, number of negatives, and temperature. Focus on the trajectory and the train/val gap rather than the absolute value. **Should a fixed evaluation dataset always be used to measure true accuracy gains across runs?** @@ -1077,20 +1185,28 @@ Aim for at least 100 queries in the evaluation set to get stable metric estimate **What level of accuracy improvement (relative vs absolute) is typical or expected from embedding fine-tuning in similar enterprise domains?** -Typical results on enterprise domains show **+5 to +20 absolute points of nDCG@10** over the base model, depending on how specialized the domain is. Domains with highly specialized vocabulary (legal, biomedical, internal engineering docs) tend to see larger gains because the base model has less prior exposure. Domains closer to general web text see smaller but still meaningful improvements. If you see less than 5 absolute points of nDCG@10 improvement, investigate data quality, SDG coverage, or hyperparameter settings before concluding that fine-tuning doesn't help your domain. +Typical results on enterprise domains show **+5 to +20 absolute points of nDCG@10** over the base model, depending on how specialized the domain is. Domains with highly specialized vocabulary (legal, biomedical, internal engineering docs) tend to see larger gains because the base model has less prior exposure. Domains closer to general web text see smaller but still meaningful improvements. If you see less than 5 absolute points of nDCG@10 improvement, investigate data quality, SDG coverage, or hyperparameter settings before concluding that fine-tuning doesnтАЩt help your domain. ## Further Reading - [NeMo Data Designer](https://github.com/NVIDIA-NeMo/DataDesigner) - Synthetic data generation framework + - [Automodel](https://github.com/NVIDIA/NeMo-Automodel) - Model training framework + - [BEIR Benchmark](https://github.com/beir-cellar/beir) - Information retrieval evaluation + - [NVIDIA NIM Documentation](https://developer.nvidia.com/nim) - Production inference microservices + - [Llama-Nemotron-Embed-1B-v2 Model Card](https://huggingface.co/nvidia/llama-nemotron-embed-1b-v2) - Base model details + - [Retrieval-Synthetic-NVDocs-v1 Dataset](https://huggingface.co/datasets/nvidia/Retrieval-Synthetic-NVDocs-v1) - Pre-generated synthetic retrieval dataset on NVIDIA content ## Support For issues, questions, or contributions: + - **Issues**: [GitHub Issues](https://github.com/NVIDIA-NeMo/Nemotron/issues) + - **Discussions**: [GitHub Discussions](https://github.com/NVIDIA-NeMo/Nemotron/discussions) + - **Documentation**: [Nemotron Documentation](https://docs.nvidia.com/nemotron/latest) diff --git a/docs/nemotron/kit.md b/docs/fern/pages-vnightly/nemotron/kit.mdx similarity index 54% rename from docs/nemotron/kit.md rename to docs/fern/pages-vnightly/nemotron/kit.mdx index 025026f48..6c0baac1d 100644 --- a/docs/nemotron/kit.md +++ b/docs/fern/pages-vnightly/nemotron/kit.mdx @@ -1,20 +1,24 @@ -# Nemotron Kit +--- +title: "Nemotron Kit" +slug: "nemotron/kit.html" +description: "The nemotron.kit module provides artifact type definitions, lineage trackers, and W&B integration for Nemotron training recipes." +--- The `nemotron.kit` module provides artifact type definitions, lineage trackers, and W&B integration for Nemotron training recipes. -> **Focused by Design**: Kit owns the artifact *types* (data classes like `PretrainBlendsArtifact`, `ModelArtifact`) and *tracking behavior* (W&B/file-based lineage). The underlying artifact *registry* and *resolution* (`art://` URIs, fsspec/wandb storage backends) live in [`nemo_runspec`](../nemo_runspec/package-readme). CLI, configuration, and execution also live in `nemo_runspec`. All heavy-lifting training is done by the [NVIDIA AI Stack](./nvidia-stack.md): [Megatron-Core](https://github.com/NVIDIA/Megatron-LM) for distributed training primitives, [Megatron-Bridge](https://github.com/NVIDIA-NeMo/Megatron-Bridge) for model training, and [NeMo-RL](https://github.com/NVIDIA/NeMo-RL) for reinforcement learning. +> **Focused by Design**: Kit owns the artifact *types* (data classes like `PretrainBlendsArtifact`, `ModelArtifact`) and *tracking behavior* (W&B/file-based lineage). The underlying artifact *registry* and *resolution* (`art://` URIs, fsspec/wandb storage backends) live in [`nemo_runspec`](/../nemo_runspec/package-readme). CLI, configuration, and execution also live in `nemo_runspec`. All heavy-lifting training is done by the [NVIDIA AI Stack](/nvidia-stack): [Megatron-Core](https://github.com/NVIDIA/Megatron-LM) for distributed training primitives, [Megatron-Bridge](https://github.com/NVIDIA-NeMo/Megatron-Bridge) for model training, and [NeMo-RL](https://github.com/NVIDIA/NeMo-RL) for reinforcement learning. ## Overview Kit handles three core responsibilities: | Component | What kit owns | What nemo_runspec owns | -|-----------|--------------|----------------------| -| **[Artifacts](./artifacts.md)** | Type definitions (`PretrainBlendsArtifact`, `ModelArtifact`, etc.) | Registry, `art://` resolution, fsspec/wandb storage backends | -| **[Lineage Tracking](./artifacts.md)** | Trackers (`WandbTracker`, `FileTracker`) | `${art:...}` OmegaConf resolvers, distributed coordination | -| **[W&B Integration](./wandb.md)** | Init, credential handling, monkey patches, tag management | Env var injection (`build_env_vars`), `[wandb]` config loading | +| --- | --- | --- | +| **[Artifacts](/artifacts)** | Type definitions (PretrainBlendsArtifact, ModelArtifact, etc.) | Registry, art:// resolution, fsspec/wandb storage backends | +| **[Lineage Tracking](/artifacts)** | Trackers (WandbTracker, FileTracker) | ${art:...} OmegaConf resolvers, distributed coordination | +| **[W&B Integration](/wandb)** | Init, credential handling, monkey patches, tag management | Env var injection (build_env_vars), [wandb] config loading | -For CLI infrastructure, config loading, execution, and packaging, see [`nemo_runspec`](../nemo_runspec/package-readme). +For CLI infrastructure, config loading, execution, and packaging, see [`nemo_runspec`](/../nemo_runspec/package-readme). ## Architecture @@ -91,7 +95,7 @@ model.save(name="ModelArtifact-pretrain") ### Artifacts -Artifacts are path-centric objects with typed metadata. The core field is always `path` -- the filesystem location of the data. See [Artifact Lineage](./artifacts.md) for details. +Artifacts are path-centric objects with typed metadata. The core field is always `path` тАУ the filesystem location of the data. See [Artifact Lineage](/artifacts) for details. ```python from nemotron.kit import PretrainBlendsArtifact @@ -104,7 +108,7 @@ print(f"Tokens: {artifact.total_tokens:,}") ### Lineage Tracking -Kit tracks artifact lineage through pluggable backends. The `WandbTracker` logs to W&B; the `FileTracker` writes to local filesystem. See [W&B Integration](./wandb.md) for credential handling and [Artifact Lineage](./artifacts.md) for the lineage graph. +Kit tracks artifact lineage through pluggable backends. The `WandbTracker` logs to W&B; the `FileTracker` writes to local filesystem. See [W&B Integration](/wandb) for credential handling and [Artifact Lineage](/artifacts) for the lineage graph. ```python from nemotron.kit import set_lineage_tracker, WandbTracker @@ -128,7 +132,7 @@ add_run_tags(["pretrain", "nano3"]) ## Module Structure -``` +```default src/nemotron/kit/ тФЬтФАтФА __init__.py # Public API exports + kit.init() тФЬтФАтФА artifact.py # Artifact base class, ArtifactInput, display helpers @@ -145,51 +149,58 @@ src/nemotron/kit/ ### Artifacts | Export | Description | -|--------|-------------| -| `Artifact` | Base artifact class | -| `PretrainBlendsArtifact` | Pretrain data with train/valid/test splits | -| `PretrainDataArtifact` | Raw pretrain data | -| `SFTDataArtifact` | Packed SFT sequences | -| `SplitJsonlDataArtifact` | RL JSONL data | -| `DataBlendsArtifact` | Generic data blends | -| `ModelArtifact` | Model checkpoints | -| `TrackingInfo` | Tracking metadata for artifacts | +| --- | --- | +| Artifact | Base artifact class | +| PretrainBlendsArtifact | Pretrain data with train/valid/test splits | +| PretrainDataArtifact | Raw pretrain data | +| SFTDataArtifact | Packed SFT sequences | +| SplitJsonlDataArtifact | RL JSONL data | +| DataBlendsArtifact | Generic data blends | +| ModelArtifact | Model checkpoints | +| TrackingInfo | Tracking metadata for artifacts | ### Tracking | Export | Description | -|--------|-------------| -| `LineageTracker` | Abstract base for lineage tracking | -| `WandbTracker` | W&B-backed lineage tracker | -| `FileTracker` | File-based lineage tracker | -| `NoOpTracker` | No-op tracker (for testing) | -| `set_lineage_tracker()` | Set the global lineage tracker | -| `get_lineage_tracker()` | Get the current lineage tracker | -| `to_wandb_uri()` | Convert artifact to W&B URI | -| `tokenizer_to_uri()` | Convert tokenizer to URI | +| --- | --- | +| LineageTracker | Abstract base for lineage tracking | +| WandbTracker | W&B-backed lineage tracker | +| FileTracker | File-based lineage tracker | +| NoOpTracker | No-op tracker (for testing) | +| set_lineage_tracker() | Set the global lineage tracker | +| get_lineage_tracker() | Get the current lineage tracker | +| to_wandb_uri() | Convert artifact to W&B URI | +| tokenizer_to_uri() | Convert tokenizer to URI | ### W&B | Export | Description | -|--------|-------------| -| `WandbConfig` | W&B configuration dataclass | -| `init_wandb_if_configured()` | Conditional W&B initialization | -| `add_run_tags()` | Add tags to W&B runs | +| --- | --- | +| WandbConfig | W&B configuration dataclass | +| init_wandb_if_configured() | Conditional W&B initialization | +| add_run_tags() | Add tags to W&B runs | ### Kit Initialization | Export | Description | -|--------|-------------| -| `init()` | Initialize kit with storage backend (fsspec or wandb) | -| `is_initialized()` | Check if kit has been initialized | +| --- | --- | +| init() | Initialize kit with storage backend (fsspec or wandb) | +| is_initialized() | Check if kit has been initialized | ## Further Reading -- [`nemo_runspec` Package](../nemo_runspec/package-readme) тАУ CLI toolkit, config loading, execution, packaging -- [NVIDIA AI Stack](./nvidia-stack.md) тАУ Megatron-Core, Megatron-Bridge, NeMo-RL -- [OmegaConf Configuration](../nemo_runspec/omegaconf.md) тАУ artifact interpolations and unified W&B logging -- [Artifact Lineage](./artifacts.md) тАУ artifact versioning and W&B lineage -- [W&B Integration](./wandb.md) тАУ credential handling -- [Execution through NeMo-Run](../nemo_runspec/nemo-run.md) тАУ execution profiles and packagers -- [CLI Framework](./cli.md) тАУ building recipe CLIs -- [Data Preparation](./data-prep.md) тАУ data prep module +- [`nemo_runspec` Package](/../nemo_runspec/package-readme) тАУ CLI toolkit, config loading, execution, packaging + +- [NVIDIA AI Stack](/nvidia-stack) тАУ Megatron-Core, Megatron-Bridge, NeMo-RL + +- [OmegaConf Configuration](/../nemo_runspec/omegaconf) тАУ artifact interpolations and unified W&B logging + +- [Artifact Lineage](/artifacts) тАУ artifact versioning and W&B lineage + +- [W&B Integration](/wandb) тАУ credential handling + +- [Execution through NeMo-Run](/../nemo_runspec/nemo-run) тАУ execution profiles and packagers + +- [CLI Framework](/cli) тАУ building recipe CLIs + +- [Data Preparation](/data-prep) тАУ data prep module diff --git a/docs/nemotron/nano3/README.md b/docs/fern/pages-vnightly/nemotron/nano3/README.mdx similarity index 79% rename from docs/nemotron/nano3/README.md rename to docs/fern/pages-vnightly/nemotron/nano3/README.mdx index 50316081d..31e0b2290 100644 --- a/docs/nemotron/nano3/README.md +++ b/docs/fern/pages-vnightly/nemotron/nano3/README.mdx @@ -1,4 +1,8 @@ -# Nemotron 3 Nano Training Recipe +--- +title: "Nemotron 3 Nano Training Recipe" +slug: "nemotron/nano3/README.html" +description: "Reproducible training pipeline for Nemotron 3 Nano, an open Mixture-of-Experts hybrid Mamba-Transformer model optimized for agentic reasoning." +--- Reproducible training pipeline for Nemotron 3 Nano, an open Mixture-of-Experts hybrid Mamba-Transformer model optimized for agentic reasoning. @@ -6,11 +10,15 @@ Reproducible training pipeline for Nemotron 3 Nano, an open Mixture-of-Experts h ### Prerequisites -- **Slurm cluster** with GPU nodes (H100 recommended). See [Execution through NeMo-Run](../../nemo_runspec/nemo-run.md) -- **[Weights & Biases](../wandb.md) account** for experiment tracking and [artifact lineage](../artifacts.md) +- **Slurm cluster** with GPU nodes (H100 recommended). See [Execution through NeMo-Run](/../../nemo_runspec/nemo-run) + +- **[Weights & Biases](/../wandb) account** for experiment tracking and [artifact lineage](/../artifacts) + - **Container images**: - - Training: `nvcr.io/nvidia/nemo:25.11.nemotron_3_nano` - - RL: `nvcr.io/nvidia/nemo-rl:v0.4.0.nemotron_3_nano` + + - Training: `nvcr.io/nvidia/nemo:25.11.nemotron_3_nano` + + - RL: `nvcr.io/nvidia/nemo-rl:v0.4.0.nemotron_3_nano` ### Installation @@ -22,7 +30,7 @@ uv sync ### Configuration -Create an `env.toml` file (see [Execution through NeMo-Run](../../nemo_runspec/nemo-run.md) for details): +Create an `env.toml` file (see [Execution through NeMo-Run](/../../nemo_runspec/nemo-run) for details): ```toml [wandb] @@ -42,7 +50,6 @@ mounts = ["/lustre:/lustre"] ### Run the Pipeline
    - ```console // Stage 0: Pretraining $ uv run nemotron nano3 data prep pretrain --run YOUR-CLUSTER @@ -61,40 +68,46 @@ $ uv run nemotron nano3 pipe --run YOUR-CLUSTER ```
    - > **Note**: The `pipe` command composes pretrain тЖТ SFT into a single nemo-run Experiment for coordinated remote execution. RL uses Ray and must be run separately. ## Resources - **Tech Report:** [Nemotron 3 Nano Technical Report](https://research.nvidia.com/labs/nemotron/files/NVIDIA-Nemotron-3-Nano-Technical-Report.pdf) + - **Model Weights:** - - [NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16](https://huggingface.co/nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16) (Base model) - - [NVIDIA-Nemotron-3-Nano-30B-A3B-BF16](https://huggingface.co/nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16) (Instruct model) - - [NVIDIA-Nemotron-3-Nano-30B-A3B-FP8](https://huggingface.co/nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-FP8) (FP8 quantized) + + - [NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16](https://huggingface.co/nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16) (Base model) + + - [NVIDIA-Nemotron-3-Nano-30B-A3B-BF16](https://huggingface.co/nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16) (Instruct model) + + - [NVIDIA-Nemotron-3-Nano-30B-A3B-FP8](https://huggingface.co/nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-FP8) (FP8 quantized) + - **Model Collection:** [NVIDIA Nemotron v3 Collection](https://huggingface.co/collections/nvidia/nvidia-nemotron-v3) + - **Training Datasets:** - - [Pre-training Datasets](https://huggingface.co/collections/nvidia/nemotron-pre-training-datasets) (Open pre-training data) - - [Post-training Datasets](https://huggingface.co/collections/nvidia/nemotron-post-training-v3) (SFT and RL data) - + - [Pre-training Datasets](https://huggingface.co/collections/nvidia/nemotron-pre-training-datasets) (Open pre-training data) + + - [Post-training Datasets](https://huggingface.co/collections/nvidia/nemotron-post-training-v3) (SFT and RL data) + +{/* TODO - move whatever customization docs for Nano 3 to this section of the docs. +```{seealso\} +For model cards, technical report chunks, and recipe summaries, see {doc\}`/customize/models/nano3/index`. +``` */} ## Training Pipeline | Stage | Name | Purpose | Guide | -|-------|------|---------|-------| -| 0 | [Pretraining](./pretrain.md) | Base model on 25T tokens with curriculum learning | [pretrain.md](./pretrain.md) | -| 1 | [SFT](./sft.md) | Multi-domain instruction tuning with 12+ data sources | [sft.md](./sft.md) | -| 2 | [RL](./rl.md) | GRPO alignment with multi-environment rewards | [rl.md](./rl.md) | -| 3 | [Evaluation](./evaluate.md) | Benchmark evaluation with NeMo Evaluator | [evaluate.md](./evaluate.md) | +| --- | --- | --- | --- | +| 0 | [Pretraining](/pretrain) | Base model on 25T tokens with curriculum learning | [pretrain.md](/pretrain) | +| 1 | [SFT](/sft) | Multi-domain instruction tuning with 12+ data sources | [sft.md](/sft) | +| 2 | [RL](/rl) | GRPO alignment with multi-environment rewards | [rl.md](/rl) | +| 3 | [Evaluation](/evaluate) | Benchmark evaluation with NeMo Evaluator | [evaluate.md](/evaluate) | ## Model Specifications | Specification | Value | -|---------------|-------| +| --- | --- | | **Total Parameters** | 31.6B | | **Active Parameters** | 3.6B (per forward pass) | | **Pretraining Tokens** | 25 trillion | @@ -109,35 +122,35 @@ For model cards, technical report chunks, and recipe summaries, see {doc}`/custo Two-phase curriculum on 25 trillion tokens: Phase 1 (23.5T) focuses on diversity across web, code, math, and multilingual data; Phase 2 (1.5T) emphasizes high-quality sources. Includes long-context extension to 1M tokens. -тЖТ [Pretraining Guide](./pretrain.md) +тЖТ [Pretraining Guide](/pretrain) ### Stage 1: Supervised Fine-Tuning Multi-domain instruction tuning covering 12+ data domains including competition math/code, InfinityByte cross-domain synthesis, STEM reasoning, conversational tool use, and multilingual support. -тЖТ [SFT Guide](./sft.md) +тЖТ [SFT Guide](/sft) ### Stage 2: Reinforcement Learning Multi-environment RLVR training across 7 reward environments using GRPO, plus GenRM-based RLHF and DPO for reducing tool hallucination. -тЖТ [RL Guide](./rl.md) +тЖТ [RL Guide](/rl) ## Execution Options -All commands support [NeMo-Run](../../nemo_runspec/nemo-run.md) execution modes: +All commands support [NeMo-Run](/../../nemo_runspec/nemo-run) execution modes: | Option | Behavior | Use Case | -|--------|----------|----------| -| `--run ` | AttachedтАФsubmits job and streams logs | Interactive development | -| `--batch ` | DetachedтАФsubmits and exits immediately | Long-running jobs | -| `--dry-run` | Preview execution plan | Validation | +| --- | --- | --- | +| --run <profile> | AttachedтАФsubmits job and streams logs | Interactive development | +| --batch <profile> | DetachedтАФsubmits and exits immediately | Long-running jobs | +| --dry-run | Preview execution plan | Validation | -See [Execution through NeMo-Run](../../nemo_runspec/nemo-run.md) for profile configuration and advanced options. +See [Execution through NeMo-Run](/../../nemo_runspec/nemo-run) for profile configuration and advanced options. ## Artifact Lineage -The pipeline tracks lineage via [W&B Artifacts](../artifacts.md), so you can trace any model back to the data it was trained on. +The pipeline tracks lineage via [W&B Artifacts](/../artifacts), so you can trace any model back to the data it was trained on. ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryBorderColor': '#333333', 'lineColor': '#333333', 'primaryTextColor': '#333333', 'clusterBkg': '#ffffff', 'clusterBorder': '#333333'}}}%% @@ -165,7 +178,7 @@ flowchart TB style rl fill:#e8f5e9,stroke:#4caf50 ``` -тЖТ [Artifact Lineage & W&B Integration](../artifacts.md) +тЖТ [Artifact Lineage & W&B Integration](/../artifacts) ## Open-Source Data @@ -173,10 +186,10 @@ flowchart TB ## Coming Soon -Native integrations with NVIDIA's NeMo ecosystem: +Native integrations with NVIDIAтАЩs NeMo ecosystem: | Tool | Description | Status | -|------|-------------|--------| +| --- | --- | --- | | [NeMo Curator](https://github.com/NVIDIA-NeMo/Curator) | Data curation: deduplication, quality filtering, PII removal | Planned | | [NeMo Data Designer](https://github.com/NVIDIA-NeMo/DataDesigner) | Synthetic data generation for instruction tuning and alignment | Planned | | [NeMo Export-Deploy](https://github.com/NVIDIA-NeMo/Export-Deploy) | Model export to TensorRT-LLM and deployment | Planned | @@ -187,7 +200,6 @@ These integrations will connect data curation directly to model evaluation. ## CLI Reference
    - ```console // Show available commands $ uv run nemotron nano3 --help @@ -256,38 +268,38 @@ Usage: nemotron nano3 sft [OPTIONS] ```
    - ## Troubleshooting -**W&B authentication**: See [W&B Integration](../wandb.md) for setup. +**W&B authentication**: See [W&B Integration](/../wandb) for setup. + ```bash wandb login ``` **Container not found**: Verify image path in config files. -**Job submission fails**: Check Slurm account and partition in `env.toml`. See [Execution through NeMo-Run](../../nemo_runspec/nemo-run.md). +**Job submission fails**: Check Slurm account and partition in `env.toml`. See [Execution through NeMo-Run](/../../nemo_runspec/nemo-run). ## Further Reading -- [Stage 0: Pretraining](./pretrain.md) -- [Stage 1: SFT](./sft.md) -- [Stage 2: RL](./rl.md) -- [Stage 3: Evaluation](./evaluate.md) -- [Importing Models & Data](./import.md) -- [Artifact Lineage](../artifacts.md) -- [Execution through NeMo-Run](../../nemo_runspec/nemo-run.md) -- [W&B Integration](../wandb.md) -- [NVIDIA AI Stack](../nvidia-stack.md) -- [CLI Framework](../cli.md) -- [Data Preparation Module](../data-prep.md) - -```{toctree} -:hidden: - -pretrain.md -sft.md -rl.md -evaluate.md -import.md -``` +- [Stage 0: Pretraining](/pretrain) + +- [Stage 1: SFT](/sft) + +- [Stage 2: RL](/rl) + +- [Stage 3: Evaluation](/evaluate) + +- [Importing Models & Data](/import) + +- [Artifact Lineage](/../artifacts) + +- [Execution through NeMo-Run](/../../nemo_runspec/nemo-run) + +- [W&B Integration](/../wandb) + +- [NVIDIA AI Stack](/../nvidia-stack) + +- [CLI Framework](/../cli) + +- [Data Preparation Module](/../data-prep) diff --git a/docs/nemotron/nano3/evaluate.md b/docs/fern/pages-vnightly/nemotron/nano3/evaluate.mdx similarity index 75% rename from docs/nemotron/nano3/evaluate.md rename to docs/fern/pages-vnightly/nemotron/nano3/evaluate.mdx index 34ef60af4..9bb89d2c2 100644 --- a/docs/nemotron/nano3/evaluate.md +++ b/docs/fern/pages-vnightly/nemotron/nano3/evaluate.mdx @@ -1,4 +1,8 @@ -# Stage 3: Evaluation +--- +title: "Stage 3: Evaluation" +slug: "nemotron/nano3/evaluate.html" +description: "Evaluate trained Nemotron Nano 3 models against standard benchmarks using NeMo Evaluator." +--- Evaluate trained Nemotron Nano 3 models against standard benchmarks using [NeMo Evaluator](https://github.com/NVIDIA-NeMo/Evaluator). @@ -8,7 +12,7 @@ Evaluate trained Nemotron Nano 3 models against standard benchmarks using [NeMo ## How Evaluation Works -The eval command resolves model artifacts from W&B lineage and uses NeMo Framework's Ray-based in-framework deployment. It defaults to evaluating the latest RL stage output. +The eval command resolves model artifacts from W&B lineage and uses NeMo FrameworkтАЩs Ray-based in-framework deployment. It defaults to evaluating the latest RL stage output. ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryBorderColor': '#333333', 'lineColor': '#333333', 'primaryTextColor': '#333333'}}}%% @@ -35,20 +39,28 @@ flowchart TB The CLI performs several transformations on the YAML config before passing it to the launcher: 1. **Load** the YAML config via OmegaConf (with Hydra defaults resolution) + 2. **Merge** env.toml profile values and CLI dotlist overrides + 3. **Auto-inject** W&B credential mappings if W&B export is configured + 4. **Auto-squash** container images for Slurm (converts Docker images to `.sqsh` files) -5. **Strip** the `run` section and resolve all `${run.*}` interpolations -6. **Resolve** artifact references (`${art:model,path}`) via W&B Artifacts -7. **Pass** the cleaned config to `nemo-evaluator-launcher`'s `run_eval()` + +5. **Strip** the `run` section and resolve all `$\{run.*\}` interpolations + +6. **Resolve** artifact references (`$\{art:model,path\}`) via W&B Artifacts + +7. **Pass** the cleaned config to `nemo-evaluator-launcher`тАЩs `run_eval()` Two YAML files are saved for provenance: + - `job.yaml` тАФ full config including `run` section (for reproducibility) + - `eval.yaml` тАФ compiled config as seen by the launcher ### Deployment -The default config uses NeMo Framework's Ray-based in-framework deployment (`type: generic`) with a custom command for serving: +The default config uses NeMo FrameworkтАЩs Ray-based in-framework deployment (`type: generic`) with a custom command for serving: ```yaml deployment: @@ -69,11 +81,11 @@ deployment: Parallelism settings are tuned for the Nano3 30B MoE model: | Setting | Value | Purpose | -|---------|-------|---------| -| `tensor_model_parallel_size` | 2 | Tensor parallelism across GPUs | -| `expert_model_parallel_size` | 8 | Expert parallelism for MoE layers | -| `num_gpus` | 8 | Total GPUs per node | -| `port` | 1235 | Ray serving port | +| --- | --- | --- | +| tensor_model_parallel_size | 2 | Tensor parallelism across GPUs | +| expert_model_parallel_size | 8 | Expert parallelism for MoE layers | +| num_gpus | 8 | Total GPUs per node | +| port | 1235 | Ray serving port | The model is deployed using the same NeMo Megatron container as training (`nvcr.io/nvidia/nemo:25.11.nemotron_3_nano`); nemo-evaluator-launcher pulls its own containers for evaluation tasks. @@ -98,12 +110,12 @@ evaluation: The default config includes five standard benchmarks: | Task | Type | Description | -|------|------|-------------| -| `adlr_mmlu` | Text Generation | Massive Multitask Language Understanding | -| `adlr_arc_challenge_llama_25_shot` | Log Probability | ARC Challenge with 25-shot prompting | -| `adlr_winogrande_5_shot` | Log Probability | Winogrande commonsense reasoning | -| `hellaswag` | Log Probability | Commonsense sentence completion | -| `openbookqa` | Log Probability | Open-domain science questions | +| --- | --- | --- | +| adlr_mmlu | Text Generation | Massive Multitask Language Understanding | +| adlr_arc_challenge_llama_25_shot | Log Probability | ARC Challenge with 25-shot prompting | +| adlr_winogrande_5_shot | Log Probability | Winogrande commonsense reasoning | +| hellaswag | Log Probability | Commonsense sentence completion | +| openbookqa | Log Probability | Open-domain science questions | To discover additional tasks: `nemo-evaluator-launcher ls tasks` @@ -114,7 +126,6 @@ To discover additional tasks: `nemo-evaluator-launcher ls tasks` ### Quick Start
    - ```console // Evaluate the latest RL model from the pipeline $ uv run nemotron nano3 eval --run YOUR-CLUSTER @@ -130,21 +141,23 @@ $ uv run nemotron nano3 eval --dry-run ```
    - -> **Note**: The `--run YOUR-CLUSTER` flag submits jobs via [NeMo-Run](../../nemo_runspec/nemo-run.md). See [Execution through NeMo-Run](../../nemo_runspec/nemo-run.md) for setup. +> **Note**: The `--run YOUR-CLUSTER` flag submits jobs via [NeMo-Run](/../../nemo_runspec/nemo-run). See [Execution through NeMo-Run](/../../nemo_runspec/nemo-run) for setup. ### Prerequisites - **[NeMo Evaluator](https://github.com/NVIDIA-NeMo/Evaluator)**: Install with `pip install "nemotron[evaluator]"` or ensure `nemo-evaluator-launcher` is available + - **Container image**: `nvcr.io/nvidia/nemo:25.11.nemotron_3_nano` (NeMo Megatron container for model serving) -- **[Weights & Biases](../wandb.md)**: For result export (optional but recommended) + +- **[Weights & Biases](/../wandb)**: For result export (optional but recommended) + - **Slurm cluster**: For remote execution ### Configuration | File | Purpose | -|------|---------| -| `config/default.yaml` | Evaluation config with NeMo Ray deployment and benchmark tasks | +| --- | --- | +| config/default.yaml | Evaluation config with NeMo Ray deployment and benchmark tasks | The config has five sections: @@ -201,16 +214,16 @@ export: ``` | Section | Purpose | Passed to Launcher? | -|---------|---------|:-------------------:| -| `run` | env.toml injection, artifact references | No (stripped) | -| `execution` | Where to run, auto-export, mounts | Yes | -| `deployment` | How to serve the model | Yes | -| `evaluation` | Tasks and evaluation parameters | Yes | -| `export` | Result destinations (W&B) | Yes | +| --- | --- | --- | +| run | env.toml injection, artifact references | No (stripped) | +| execution | Where to run, auto-export, mounts | Yes | +| deployment | How to serve the model | Yes | +| evaluation | Tasks and evaluation parameters | Yes | +| export | Result destinations (W&B) | Yes | ### Artifact Resolution -The default config uses `${art:model,path}` for the model checkpoint: +The default config uses `$\{art:model,path\}` for the model checkpoint: ```yaml run: @@ -274,17 +287,19 @@ gpus_per_node = 8 mounts = ["/lustre:/lustre"] ``` -See [Execution through NeMo-Run](../../nemo_runspec/nemo-run.md) for complete configuration options. +See [Execution through NeMo-Run](/../../nemo_runspec/nemo-run) for complete configuration options. ### W&B Integration Results are automatically exported to W&B when configured: 1. **Auto-detection**: The CLI detects your local `wandb login` and propagates `WANDB_API_KEY` to evaluation containers + 2. **env.toml config**: `WANDB_PROJECT` and `WANDB_ENTITY` are loaded from `env.toml` + 3. **Auto-export**: Results are exported after evaluation completes when `execution.auto_export.destinations` includes `wandb` -See [W&B Integration](../wandb.md) for setup. +See [W&B Integration](/../wandb) for setup. ### Artifact Lineage @@ -305,7 +320,7 @@ flowchart TB style results fill:#e8f5e9,stroke:#4caf50 ``` -> [Artifact Lineage & W&B Integration](../artifacts.md) +> [Artifact Lineage & W&B Integration](/../artifacts) --- @@ -314,13 +329,13 @@ flowchart TB This stage uses the following components: | Component | Role | Documentation | -|-----------|------|---------------| +| --- | --- | --- | | [NeMo Evaluator](https://github.com/NVIDIA-NeMo/Evaluator) | Benchmark evaluation framework and launcher | [GitHub](https://github.com/NVIDIA-NeMo/Evaluator) | -| [NeMo Framework](../nvidia-stack.md) | Ray-based in-framework model deployment | [Docs](https://docs.nvidia.com/nemo/) | +| [NeMo Framework](/../nvidia-stack) | Ray-based in-framework model deployment | [Docs](https://docs.nvidia.com/nemo/) | ### Container -``` +```default nvcr.io/nvidia/nemo:25.11.nemotron_3_nano ``` @@ -329,7 +344,6 @@ The NeMo Megatron container is used for model serving. The nemo-evaluator-launch ## CLI Reference
    - ```console $ uv run nemotron nano3 eval --help Usage: nemotron nano3 eval [OPTIONS] @@ -355,24 +369,29 @@ Usage: nemotron nano3 eval [OPTIONS] ## Troubleshooting | Problem | Solution | -|---------|----------| -| `nemo-evaluator-launcher` not found | Install with `pip install "nemotron[evaluator]"` | -| W&B authentication fails | Run `wandb login`. See [W&B Integration](../wandb.md) | +| --- | --- | +| nemo-evaluator-launcher not found | Install with pip install "nemotron[evaluator]" | +| W&B authentication fails | Run wandb login. See [W&B Integration](/../wandb) | | Model deployment fails | Check parallelism settings match GPU config (TP=2, EP=8 for Nano3) | -| Artifact resolution fails | Verify artifact exists in W&B. Use `deployment.checkpoint_path=/explicit/path` to bypass | -| Task not found | List available tasks with `nemo-evaluator-launcher ls tasks` | +| Artifact resolution fails | Verify artifact exists in W&B. Use deployment.checkpoint_path=/explicit/path to bypass | +| Task not found | List available tasks with nemo-evaluator-launcher ls tasks | --- ## Previous Stage -After RL completes in [Stage 2: RL](./rl.md), evaluation is the final step in the pipeline. +After RL completes in [Stage 2: RL](/rl), evaluation is the final step in the pipeline. ## Reference -- [NeMo Evaluator](https://github.com/NVIDIA-NeMo/Evaluator) -- Upstream evaluation framework -- [Artifact Lineage](../artifacts.md) -- W&B artifact system -- [Execution through NeMo-Run](../../nemo_runspec/nemo-run.md) -- Cluster configuration -- [W&B Integration](../wandb.md) -- Credentials and export setup +- [NeMo Evaluator](https://github.com/NVIDIA-NeMo/Evaluator) тАУ Upstream evaluation framework + +- [Artifact Lineage](/../artifacts) тАУ W&B artifact system + +- [Execution through NeMo-Run](/../../nemo_runspec/nemo-run) тАУ Cluster configuration + +- [W&B Integration](/../wandb) тАУ Credentials and export setup + - **Recipe Source:** `src/nemotron/recipes/nano3/stage3_eval/` -- [Back to Overview](./README.md) + +- [Back to Overview](/README) diff --git a/docs/nemotron/nano3/import.md b/docs/fern/pages-vnightly/nemotron/nano3/import.mdx similarity index 68% rename from docs/nemotron/nano3/import.md rename to docs/fern/pages-vnightly/nemotron/nano3/import.mdx index 023d7aba4..d7235c2f6 100644 --- a/docs/nemotron/nano3/import.md +++ b/docs/fern/pages-vnightly/nemotron/nano3/import.mdx @@ -1,24 +1,32 @@ -# Importing Models and Data +--- +title: "Importing Models and Data" +slug: "nemotron/nano3/import.html" +description: "This guide covers how to import existing models and data as W&B artifacts using the nemotron CLI. This is useful when you want to:" +--- -This guide covers how to import existing models and data as [W&B artifacts](../artifacts.md) using the nemotron CLI. This is useful when you want to: +This guide covers how to import existing models and data as [W&B artifacts](/../artifacts) using the nemotron CLI. This is useful when you want to: - Use a pre-existing checkpoint from another training run + - Import data prepared outside of the standard pipeline -- Connect external assets to the [W&B artifact lineage](../artifacts.md) system + +- Connect external assets to the [W&B artifact lineage](/../artifacts) system ## Prerequisites -- [W&B](../wandb.md) configuration in `env.toml` (see [Execution through NeMo-Run](../../nemo_runspec/nemo-run.md)): +- [W&B](/../wandb) configuration in `env.toml` (see [Execution through NeMo-Run](/../../nemo_runspec/nemo-run)): + ```toml [wandb] project = "nemotron" entity = "YOUR-TEAM" ``` + - Or provide `--project` and `--entity` CLI flags ## Model Import -Import model checkpoints as [W&B artifacts](../artifacts.md) for use in downstream training stages. +Import model checkpoints as [W&B artifacts](/../artifacts) for use in downstream training stages. ### Commands @@ -36,11 +44,11 @@ uv run nemotron nano3 model import rl /path/to/model_dir --step 2000 ### Options | Option | Description | -|--------|-------------| -| `--step, -s` | Training step number (optional) | -| `--name, -n` | Custom artifact name (default: `nano3//model`) | -| `--project, -p` | W&B project (overrides env.toml) | -| `--entity, -e` | W&B entity (overrides env.toml) | +| --- | --- | +| --step, -s | Training step number (optional) | +| --name, -n | Custom artifact name (default: nano3/<stage>/model) | +| --project, -p | W&B project (overrides env.toml) | +| --entity, -e | W&B entity (overrides env.toml) | ### Examples @@ -54,7 +62,7 @@ uv run nemotron nano3 model import sft /path/to/sft_checkpoint --project other-p ## Data Import -Import data directories as [W&B artifacts](../artifacts.md) for use in training stages. +Import data directories as [W&B artifacts](/../artifacts) for use in training stages. ### Commands @@ -72,12 +80,14 @@ uv run nemotron nano3 data import rl /path/to/rl_data_dir ### Expected Directory Structures **Pretrain**: Direct path to `blend.json` file -``` + +```default /path/to/blend.json ``` **SFT**: Directory containing `blend.json` and split subdirectories -``` + +```default /path/to/sft_data_dir/ тФЬтФАтФА blend.json тФЬтФАтФА splits/ @@ -91,7 +101,8 @@ uv run nemotron nano3 data import rl /path/to/rl_data_dir ``` **RL**: Directory containing `manifest.json` -``` + +```default /path/to/rl_data_dir/ тФЬтФАтФА manifest.json тФЬтФАтФА train.jsonl # or path referenced in manifest.json @@ -102,10 +113,10 @@ uv run nemotron nano3 data import rl /path/to/rl_data_dir ### Options | Option | Description | -|--------|-------------| -| `--name, -n` | Custom artifact name (default: `nano3//data`) | -| `--project, -p` | W&B project (overrides env.toml) | -| `--entity, -e` | W&B entity (overrides env.toml) | +| --- | --- | +| --name, -n | Custom artifact name (default: nano3/<stage>/data) | +| --project, -p | W&B project (overrides env.toml) | +| --entity, -e | W&B entity (overrides env.toml) | ### Examples @@ -127,7 +138,7 @@ Runs model evaluation using [NeMo Evaluator](https://github.com/NVIDIA-NeMo/Eval ## Using Imported Artifacts -After importing, [artifacts](../artifacts.md) can be referenced in training commands via dotlist overrides (see [CLI Framework](../cli.md#artifact-resolution)): +After importing, [artifacts](/../artifacts) can be referenced in training commands via dotlist overrides (see [CLI Framework](/../cli#artifact-resolution)): ```bash # Use imported model in SFT training @@ -161,7 +172,10 @@ uv run nemotron nano3 data import rl --help ## Further Reading -- [Artifact Lineage](../artifacts.md) тАУ W&B artifact system -- [W&B Integration](../wandb.md) тАУ credentials and configuration -- [CLI Framework](../cli.md) тАУ CLI documentation -- [Back to Overview](./README.md) +- [Artifact Lineage](/../artifacts) тАУ W&B artifact system + +- [W&B Integration](/../wandb) тАУ credentials and configuration + +- [CLI Framework](/../cli) тАУ CLI documentation + +- [Back to Overview](/README) diff --git a/docs/nemotron/nano3/pretrain.md b/docs/fern/pages-vnightly/nemotron/nano3/pretrain.mdx similarity index 75% rename from docs/nemotron/nano3/pretrain.md rename to docs/fern/pages-vnightly/nemotron/nano3/pretrain.mdx index a07477af7..faac39a60 100644 --- a/docs/nemotron/nano3/pretrain.md +++ b/docs/fern/pages-vnightly/nemotron/nano3/pretrain.mdx @@ -1,6 +1,10 @@ -# Stage 0: Pretraining +--- +title: "Stage 0: Pretraining" +slug: "nemotron/nano3/pretrain.html" +description: "This stage trains the base Nemotron 3 Nano model from scratch on 25 trillion tokens using Megatron-Bridge." +--- -This stage trains the base Nemotron 3 Nano model from scratch on 25 trillion tokens using [Megatron-Bridge](../nvidia-stack.md#megatron-bridge). +This stage trains the base Nemotron 3 Nano model from scratch on 25 trillion tokens using [Megatron-Bridge](/../nvidia-stack#megatron-bridge). Nemotron 3 Nano is a **hybrid Mamba-Transformer-MoE** model with 52 layers, combining state-space models for efficiency, attention for global context, and mixture-of-experts for capacity. Notable design choices include aux-loss-free MoE balancing and a two-phase data curriculum. @@ -11,15 +15,15 @@ Nemotron 3 Nano is a **hybrid Mamba-Transformer-MoE** model with 52 layers, comb ## Training Methodology > **Training Framework**: Pretraining is implemented using [Megatron-Bridge](https://docs.nvidia.com/nemo/megatron-bridge/latest/), which provides the training loop, distributed training primitives, and checkpoint management. See [Training Entry Points](https://docs.nvidia.com/nemo/megatron-bridge/latest/training/entry-points.html) for details on how `pretrain()` works. -> -> For complete methodology, see [Tech Report Section 2](https://research.nvidia.com/labs/nemotron/files/NVIDIA-Nemotron-3-Nano-Technical-Report.pdf). + +For complete methodology, see [Tech Report Section 2](https://research.nvidia.com/labs/nemotron/files/NVIDIA-Nemotron-3-Nano-Technical-Report.pdf). ### Model Architecture Nemotron 3 Nano uses a **hybrid Mamba-Transformer-MoE** architecture with 52 layers: | Layer Type | Count | Role | -|------------|-------|------| +| --- | --- | --- | | Mamba-2 | 23 | Efficient sequence modeling via state space | | Attention | 6 | Global context at key positions | | MoE | 23 | Sparse computation with 8 experts per layer | @@ -45,19 +49,21 @@ flowchart LR **Design choices:** - **Mamba-2 layers** provide linear-time sequence processing, making long-context inference practical + - **Attention layers** appear at regular intervals (every ~8 layers) for global information mixing + - **MoE layers** use 128 routed experts plus 1 shared expert, with 6 experts activated per token. This keeps active parameters at ~3.5B while total parameters reach ~31.6B > For architecture rationale, see [Tech Report Section 2.1](https://research.nvidia.com/labs/nemotron/files/NVIDIA-Nemotron-3-Nano-Technical-Report.pdf). -> -> For implementation details, see [Megatron-Bridge Nemotron 3](https://docs.nvidia.com/nemo/megatron-bridge/latest/models/llm/nemotron3.html). + +For implementation details, see [Megatron-Bridge Nemotron 3](https://docs.nvidia.com/nemo/megatron-bridge/latest/models/llm/nemotron3.html). ### Pretraining Data The pretraining corpus comprises four main dataset families: | Dataset Family | Description | -|----------------|-------------| +| --- | --- | | **Nemotron-CC-Code-v1** | High-quality code from Common Crawl | | **Nemotron-Pretraining-Code-v2** | GitHub code with student-teacher generation | | **Nemotron-CC-v2.1** | General English web crawl with synthetic rephrasing | @@ -72,22 +78,28 @@ Data spans 15 categories including web crawl (various quality tiers), code, math Training follows a two-phase curriculum that transitions from broad coverage to focused quality: | Phase | Tokens | Focus | Strategy | -|-------|--------|-------|----------| +| --- | --- | --- | --- | | Phase 1 | 23.5T | Diversity | Broad coverage across all data sources | | Phase 2 | 1.5T | Quality | Increased weight on high-quality and STEM data | **Phase 1: Foundation Building** - Uses all dataset families with balanced weights + - Emphasizes diversity: web (multiple quality tiers), code, math, multilingual + - Builds broad knowledge base and language understanding **Phase 2: Quality Refinement** - Increases sampling from high-quality sources: - - `High-Quality` and `High-Quality-Synthetic` subsets - - Nemotron-Pretraining-Specialized-v1 (STEM, math textbooks, scientific coding) + + - `High-Quality` and `High-Quality-Synthetic` subsets + + - Nemotron-Pretraining-Specialized-v1 (STEM, math textbooks, scientific coding) + - Reduces low-quality web content + - Sharpens model capabilities on curated data > For mixture strategy details, see [Tech Report Section 2.3](https://research.nvidia.com/labs/nemotron/files/NVIDIA-Nemotron-3-Nano-Technical-Report.pdf). @@ -95,7 +107,7 @@ Training follows a two-phase curriculum that transitions from broad coverage to ### Hyperparameters | Parameter | Value | -|-----------|-------| +| --- | --- | | **Total Tokens** | 25 trillion | | **Batch Size** | 3,072 sequences | | **Sequence Length** | 8,192 tokens | @@ -108,7 +120,7 @@ Training follows a two-phase curriculum that transitions from broad coverage to **Learning Rate Schedule:** | Phase | Tokens | LR | -|-------|--------|-----| +| --- | --- | --- | | Warmup | 8.4B | 0 тЖТ 1e-3 | | Stable | 20T (80%) | 1e-3 | | Decay | 5T (20%) | 1e-3 тЖТ 1e-5 | @@ -124,16 +136,23 @@ Nemotron 3 Nano uses the **aux-loss-free load balancing** strategy from DeepSeek **Why aux-loss-free?** Traditional MoE training adds an auxiliary loss term to encourage balanced routing. However, this: -- Adds a hyperparameter (aux loss weight) that's hard to tune + +- Adds a hyperparameter (aux loss weight) thatтАЩs hard to tune + - Can conflict with the main training objective + - May hurt model quality at scale **How it works:** Instead of auxiliary losses, the router uses **bias terms** that are adjusted dynamically: + - Track expert utilization over a sliding window + - Increase bias for underutilized experts (more tokens routed to them) + - Decrease bias for overloaded experts + - No gradient flows through the bias adjustment This achieves balanced expert utilization without interfering with the main loss function. @@ -145,7 +164,7 @@ This achieves balanced expert utilization without interfering with the main loss The LC-Phase extends context to 1M tokens after main pretraining: | Parameter | Value | -|-----------|-------| +| --- | --- | | **Duration** | 121 billion tokens | | **Learning Rate** | 1e-5 (constant) | | **Global Batch Size** | 48 | @@ -160,7 +179,6 @@ The LC-Phase extends context to 1M tokens after main pretraining: ### Quick Start
    - ```console // 1. Prepare data (tokenize to bin/idx format) $ uv run nemotron nano3 data prep pretrain --run YOUR-CLUSTER @@ -170,8 +188,7 @@ $ uv run nemotron nano3 pretrain --run YOUR-CLUSTER ```
    - -> **Note**: The `--run YOUR-CLUSTER` flag submits jobs via [NeMo-Run](../../nemo_runspec/nemo-run.md). See [Execution through NeMo-Run](../../nemo_runspec/nemo-run.md) for setup. +> **Note**: The `--run YOUR-CLUSTER` flag submits jobs via [NeMo-Run](/../../nemo_runspec/nemo-run). See [Execution through NeMo-Run](/../../nemo_runspec/nemo-run) for setup. #### Direct Script Execution (Megatron-Bridge) @@ -200,10 +217,10 @@ See the [Megatron-Bridge Nemotron 3 documentation](https://docs.nvidia.com/nemo/ ### Configuration | File | Purpose | -|------|---------| -| `config/default.yaml` | Production configuration | -| `config/data_prep/default.yaml` | Data preparation settings | -| `config/data_prep/data_blend_raw.json` | Dataset blend definition | +| --- | --- | +| config/default.yaml | Production configuration | +| config/data_prep/default.yaml | Data preparation settings | +| config/data_prep/data_blend_raw.json | Dataset blend definition | **Blend Configuration** @@ -222,7 +239,7 @@ Weights control sampling probability during data preparation. Phase transitions ### Data Preparation -The `data_prep.py` script tokenizes raw text datasets into Megatron's binary format. See [Data Preparation Module](../data-prep.md) for detailed documentation. +The `data_prep.py` script tokenizes raw text datasets into MegatronтАЩs binary format. See [Data Preparation Module](/../data-prep) for detailed documentation. #### CLI Command @@ -231,14 +248,14 @@ uv run nemotron nano3 data prep pretrain [options] ``` | Option | Description | -|--------|-------------| -| `--run ` | Execute on Slurm via [NeMo-Run](../../nemo_runspec/nemo-run.md) | -| `sample=N` | Limit rows per dataset (for testing) | -| `force=true` | Force re-run, ignoring cache | +| --- | --- | +| --run <profile> | Execute on Slurm via [NeMo-Run](/../../nemo_runspec/nemo-run) | +| sample=N | Limit rows per dataset (for testing) | +| force=true | Force re-run, ignoring cache | #### Output -``` +```default output/nano3/stage0_pretrain/ тФЬтФАтФА blend.json # Per-split blend {"train": [...], "valid": [...], "test": [...]} тФЬтФАтФА splits/ @@ -249,10 +266,10 @@ output/nano3/stage0_pretrain/ тФВ тФВ тФФтФАтФА shard_000000.bin/.idx тФВ тФФтФАтФА test/ тФВ тФФтФАтФА shard_000000.bin/.idx -тФФтФАтФА runs// # Raw shard outputs (splits/ symlinks here) +тФФтФАтФА runs/\/ # Raw shard outputs (splits/ symlinks here) ``` -The output is registered as a [W&B Artifact](../artifacts.md) (`PretrainBlendsArtifact-`) for lineage tracking. +The output is registered as a [W&B Artifact](/../artifacts) (`PretrainBlendsArtifact-`) for lineage tracking. ### Training @@ -263,11 +280,11 @@ uv run nemotron nano3 pretrain [options] [overrides...] ``` | Option | Description | -|--------|-------------| -| `--run ` | AttachedтАФsubmits and waits, streaming logs ([NeMo-Run](../../nemo_runspec/nemo-run.md)) | -| `--batch ` | DetachedтАФsubmits and exits immediately ([NeMo-Run](../../nemo_runspec/nemo-run.md)) | -| `--dry-run` | Preview execution plan | -| `key=value` | Override config values ([CLI Framework](../cli.md#dotlist-overrides)) | +| --- | --- | +| --run <profile> | AttachedтАФsubmits and waits, streaming logs ([NeMo-Run](/../../nemo_runspec/nemo-run)) | +| --batch <profile> | DetachedтАФsubmits and exits immediately ([NeMo-Run](/../../nemo_runspec/nemo-run)) | +| --dry-run | Preview execution plan | +| key=value | Override config values ([CLI Framework](/../cli#dotlist-overrides)) | #### Override Examples @@ -301,7 +318,7 @@ gpus_per_node = 8 mounts = ["/lustre:/lustre"] ``` -See [Execution through NeMo-Run](../../nemo_runspec/nemo-run.md) for complete configuration options. +See [Execution through NeMo-Run](/../../nemo_runspec/nemo-run) for complete configuration options. ### Checkpoint & Resume @@ -318,12 +335,12 @@ uv run nemotron nano3 pretrain checkpoint.load=/path/to/checkpoints/ **Checkpoint Configuration:** | Option | Description | -|--------|-------------| -| `checkpoint.save` | Directory for saving checkpoints | -| `checkpoint.load` | Path to checkpoint for resuming | -| `checkpoint.save_interval` | Steps between saves (default: 1000) | +| --- | --- | +| checkpoint.save | Directory for saving checkpoints | +| checkpoint.load | Path to checkpoint for resuming | +| checkpoint.save_interval | Steps between saves (default: 1000) | -Checkpoints use Megatron's distributed format, which handles model parallelism automatically. Each checkpoint contains model weights, optimizer state, and training progress. +Checkpoints use MegatronтАЩs distributed format, which handles model parallelism automatically. Each checkpoint contains model weights, optimizer state, and training progress. > For checkpoint format and advanced options, see [Megatron-Bridge Checkpointing](https://docs.nvidia.com/nemo/megatron-bridge/latest/training/checkpointing.html). @@ -350,37 +367,39 @@ flowchart TB ## Infrastructure -This stage uses the following components from the [NVIDIA AI Stack](../nvidia-stack.md): +This stage uses the following components from the [NVIDIA AI Stack](/../nvidia-stack): | Component | Role | Documentation | -|-----------|------|---------------| -| [Megatron-Core](../nvidia-stack.md#megatron-core) | Distributed training primitives (TP, PP, DP, EP, CP, SP) | [GitHub](https://github.com/NVIDIA/Megatron-LM) | -| [Megatron-Bridge](../nvidia-stack.md#megatron-bridge) | Model definitions, training loop, checkpoint management | [Docs](https://docs.nvidia.com/nemo/megatron-bridge/latest/) | +| --- | --- | --- | +| [Megatron-Core](/../nvidia-stack#megatron-core) | Distributed training primitives (TP, PP, DP, EP, CP, SP) | [GitHub](https://github.com/NVIDIA/Megatron-LM) | +| [Megatron-Bridge](/../nvidia-stack#megatron-bridge) | Model definitions, training loop, checkpoint management | [Docs](https://docs.nvidia.com/nemo/megatron-bridge/latest/) | ### Parallelism Configuration Pretraining uses multiple parallelism strategies for efficient scaling. The specific values differ between main pretraining and long-context extension: | Parallelism | Main Pretraining | Long-Context (LC) | Config Key | -|-------------|------------------|-------------------|------------| -| Tensor (TP) | 8 | 8 | `model.tensor_model_parallel_size` | -| Pipeline (PP) | 1 | 4 | `model.pipeline_model_parallel_size` | -| Expert (EP) | 8 | 8 | `model.expert_model_parallel_size` | -| Context (CP) | 1 | 8 | `model.context_parallel_size` | -| Sequence (SP) | Yes | Yes | `model.sequence_parallel` | +| --- | --- | --- | --- | +| Tensor (TP) | 8 | 8 | model.tensor_model_parallel_size | +| Pipeline (PP) | 1 | 4 | model.pipeline_model_parallel_size | +| Expert (EP) | 8 | 8 | model.expert_model_parallel_size | +| Context (CP) | 1 | 8 | model.context_parallel_size | +| Sequence (SP) | Yes | Yes | model.sequence_parallel | | Data (DP) | Auto | Auto | Computed from world size | **Why the difference?** -- **Main pretraining** uses 4K sequences, so context parallelism (CP=1) isn't needed +- **Main pretraining** uses 4K sequences, so context parallelism (CP=1) isnтАЩt needed + - **Long-context extension** handles up to 1M tokens, requiring CP=8 to distribute sequences across GPUs + - **Pipeline parallelism** increases in LC phase (PP=4) to handle larger activation memory -> For parallelism concepts, see [NVIDIA AI Stack: Parallelism](../nvidia-stack.md#parallelism-strategies). +> For parallelism concepts, see [NVIDIA AI Stack: Parallelism](/../nvidia-stack#parallelism-strategies). ### Container -``` +```default nvcr.io/nvidia/nemo:25.11.nemotron_3_nano ``` @@ -388,12 +407,16 @@ nvcr.io/nvidia/nemo:25.11.nemotron_3_nano ## Next Steps -After pretraining completes, proceed to [Stage 1: SFT](./sft.md) for instruction tuning. +After pretraining completes, proceed to [Stage 1: SFT](/sft) for instruction tuning. ## Reference - [Tech Report Section 2](https://research.nvidia.com/labs/nemotron/files/NVIDIA-Nemotron-3-Nano-Technical-Report.pdf) тАУ pretraining methodology -- [NVIDIA AI Stack](../nvidia-stack.md) тАУ Megatron-Core, Megatron-Bridge -- [Artifact Lineage](../artifacts.md) тАУ W&B artifact system + +- [NVIDIA AI Stack](/../nvidia-stack) тАУ Megatron-Core, Megatron-Bridge + +- [Artifact Lineage](/../artifacts) тАУ W&B artifact system + - **Recipe Source:** `src/nemotron/recipes/nano3/stage0_pretrain/` -- [Back to Overview](./README.md) + +- [Back to Overview](/README) diff --git a/docs/nemotron/nano3/rl.md b/docs/fern/pages-vnightly/nemotron/nano3/rl.mdx similarity index 63% rename from docs/nemotron/nano3/rl.md rename to docs/fern/pages-vnightly/nemotron/nano3/rl.mdx index 6dfc65e4c..7d6f4ab25 100644 --- a/docs/nemotron/nano3/rl.md +++ b/docs/fern/pages-vnightly/nemotron/nano3/rl.mdx @@ -1,6 +1,10 @@ -# Stage 2: Reinforcement Learning (RL) +--- +title: "Stage 2: Reinforcement Learning (RL)" +slug: "nemotron/nano3/rl.html" +description: "This stage aligns the instruction-tuned model using GRPO (Group Relative Policy Optimization) with NeMo-RL." +--- -This stage aligns the instruction-tuned model using GRPO (Group Relative Policy Optimization) with [NeMo-RL](../nvidia-stack.md#nemo-rl). +This stage aligns the instruction-tuned model using GRPO (Group Relative Policy Optimization) with [NeMo-RL](/../nvidia-stack#nemo-rl). > **Open-Source Data Only**: This recipe uses exclusively open-sourced RL data from the [Nemotron Post-training Datasets](https://huggingface.co/collections/nvidia/nemotron-post-training-v3) collection, which is a subset of the full data used to train the released model. The recipe uses the [Nemotron-3-Nano-RL-Training-Blend](https://huggingface.co/datasets/nvidia/Nemotron-3-Nano-RL-Training-Blend) dataset. Results will differ from the benchmarks in the [tech report](https://research.nvidia.com/labs/nemotron/files/NVIDIA-Nemotron-3-Nano-Technical-Report.pdf). Use this recipe as a reference implementation to apply the methodology with your own data. @@ -9,14 +13,17 @@ This stage aligns the instruction-tuned model using GRPO (Group Relative Policy ## Training Methodology > **Training Framework**: RL alignment is implemented using [NeMo-RL](https://docs.nvidia.com/nemo/rl/latest/) with Ray for distributed actor coordination and vLLM for fast rollout generation. The Megatron backend handles distributed policy training with tensor, pipeline, context, and expert parallelism. See [NeMo-RL Documentation](https://docs.nvidia.com/nemo/rl/latest/) for implementation details. -> -> For complete methodology, see [Tech Report Section 3.2](https://research.nvidia.com/labs/nemotron/files/NVIDIA-Nemotron-3-Nano-Technical-Report.pdf). + +For complete methodology, see [Tech Report Section 3.2](https://research.nvidia.com/labs/nemotron/files/NVIDIA-Nemotron-3-Nano-Technical-Report.pdf). ### RL Pipeline Overview The RL pipeline consists of three components: + 1. **RLVR** тАУ multi-environment training with verifiable rewards + 2. **RLHF with GenRM** тАУ generative reward model-based alignment + 3. **DPO** тАУ preference learning to reduce tool hallucination ### Data Preparation Pipeline @@ -44,10 +51,10 @@ flowchart LR ``` | Stage | What Happens | -|-------|--------------| +| --- | --- | | **HuggingFace Dataset** | Load [Nemotron-3-Nano-RL-Training-Blend](https://huggingface.co/datasets/nvidia/Nemotron-3-Nano-RL-Training-Blend) from HuggingFace Hub | -| **Placeholder Resolution** | Resolve `_hf_placeholder` records by fetching from external datasets (DAPO, Skywork) and applying template restoration | -| **JSONL Format** | Convert to JSONL with `question`, `expected_answer`, and `responses_create_params` fields | +| **Placeholder Resolution** | Resolve _hf_placeholder records by fetching from external datasets (DAPO, Skywork) and applying template restoration | +| **JSONL Format** | Convert to JSONL with question, expected_answer, and responses_create_params fields | | **Train/Val/Test Split** | Split into training (98%), validation (1%), and test (1%) sets | | **NeMo-Gym Environment** | Route samples to appropriate reward environments based on task type | | **Reward Computation** | Compute verifiable rewards (math correctness, code execution, schema adherence) | @@ -57,10 +64,14 @@ flowchart LR The [Nemotron-3-Nano-RL-Training-Blend](https://huggingface.co/datasets/nvidia/Nemotron-3-Nano-RL-Training-Blend) dataset contains placeholder records that reference external HuggingFace datasets. The `data_prep.py` script resolves these by: 1. Detecting placeholder records by the presence of `_hf_placeholder` field + 2. Fetching actual data from external HF datasets: - - [BytedTsinghua-SIA/DAPO-Math-17k](https://huggingface.co/datasets/BytedTsinghua-SIA/DAPO-Math-17k) тАФ Math reasoning problems - - [Skywork/Skywork-OR1-RL-Data](https://huggingface.co/datasets/Skywork/Skywork-OR1-RL-Data) тАФ Open reasoning data -3. Applying template restoration (DAPO prefix/suffix, Skywork `{question}` replacement) + + - [BytedTsinghua-SIA/DAPO-Math-17k](https://huggingface.co/datasets/BytedTsinghua-SIA/DAPO-Math-17k) тАФ Math reasoning problems + + - [Skywork/Skywork-OR1-RL-Data](https://huggingface.co/datasets/Skywork/Skywork-OR1-RL-Data) тАФ Open reasoning data + +3. Applying template restoration (DAPO prefix/suffix, Skywork `\{question\}` replacement) > For data preparation implementation, see **Recipe Source**: `src/nemotron/recipes/nano3/stage2_rl/data_prep.py` @@ -69,34 +80,40 @@ The [Nemotron-3-Nano-RL-Training-Blend](https://huggingface.co/datasets/nvidia/N GRPO (Group Relative Policy Optimization) optimizes the policy using group-relative advantages: 1. **Generate responses** from the current policy using vLLM + 2. **Evaluate** responses using NeMo-Gym reward environments + 3. **Compute group-relative advantages** across response groups per prompt + 4. **Update the policy** to favor higher-reward responses with clipped gradients **Loss Function:** The GRPO loss uses clipped policy gradients with KL regularization: -$$ -L(\theta) = E_{x \sim \pi_{\theta_{\text{old}}}} \Big[ \min \Big(\frac{\pi_\theta(x)}{\pi_{\theta_{\text{old}}}(x)}A_t, \text{clip} \big( \frac{\pi_\theta(x)}{\pi_{\theta_{\text{old}}}(x)}, 1 - \varepsilon, 1 + \varepsilon \big) A_t \Big) \Big] - \beta D_{\text{KL}} (\pi_\theta \| \pi_\text{ref}) -$$ - +L(\theta) = E_\{x \sim \pi_\{\theta_\{\text\{old\}\}\}\} \Big[ \min \Big(\frac\{\pi_\theta(x)\}\{\pi_\{\theta_\{\text\{old\}\}\}(x)\}A_t, \text\{clip\} \big( \frac\{\pi_\theta(x)\}\{\pi_\{\theta_\{\text\{old\}\}\}(x)\}, 1 - \varepsilon, 1 + \varepsilon \big) A_t \Big) \Big] - \beta D_\{\text\{KL\}\} (\pi_\theta \| \pi_\text\{ref\}) Where: -- $\pi_\theta$ is the policy being optimized -- $\pi_{\theta_{\text{old}}}$ is the policy from the beginning of this step -- $A_t$ is the advantage estimate (group-relative) -- $\varepsilon$ is the clipping hyperparameter (0.2тАУ0.28) -- $\beta$ is the KL penalty coefficient -- $\pi_{\text{ref}}$ is the reference policy (frozen SFT checkpoint) + +- \pi_\theta is the policy being optimized + +- \pi_\{\theta_\{\text\{old\}\}\} is the policy from the beginning of this step + +- A_t is the advantage estimate (group-relative) + +- \varepsilon is the clipping hyperparameter (0.2тАУ0.28) + +- \beta is the KL penalty coefficient + +- \pi_\{\text\{ref\}\} is the reference policy (frozen SFT checkpoint) **Stability Improvements:** | Improvement | Description | -|-------------|-------------| +| --- | --- | | **On-Policy KL Approximation** | Uses importance weights to correct for off-policy samples. This gives an unbiased and guaranteed-positive KL estimator | | **Importance Sampling Correction** | Corrects for discrepancies between inference (vLLM) and training (Megatron) token probabilities | | **Overlong Filtering** | Excludes sequences that hit max length without EOS from loss computation, reducing noise from truncated generations | -| **Asymmetric Clipping** | Uses `ratio_clip_min=0.2` and `ratio_clip_max=0.28` for asymmetric policy update bounds | +| **Asymmetric Clipping** | Uses ratio_clip_min=0.2 and ratio_clip_max=0.28 for asymmetric policy update bounds | > For detailed loss function derivations, see the [NeMo-RL GRPO Guide](https://docs.nvidia.com/nemo/rl/latest/guides/grpo.html#loss). @@ -105,7 +122,7 @@ Where: Training uses 6 reward environments through NeMo-Gym: | Environment | Description | Reward Type | -|-------------|-------------|-------------| +| --- | --- | --- | | **math_with_judge** | Mathematical reasoning (DAPO, Skywork math) | Answer correctness verification | | **code_gen** | Code correctness with test case execution | Unit test pass rate | | **mcqa** | STEM multiple choice questions | Answer matching | @@ -122,7 +139,7 @@ Training on all environments simultaneously provides stable gains without co-rew Generative reward models use circular comparison strategy (N comparisons instead of O(N┬▓)) with length-normalized reward adjustment: | Parameter | Value | -|-----------|-------| +| --- | --- | | **Prompts per batch** | 128 | | **Responses per prompt** | 16 | | **Comparison strategy** | Circular | @@ -135,7 +152,7 @@ Generative reward models use circular comparison strategy (N comparisons instead DPO reduces hallucinated tool usage with minimal computational overhead: | Metric | Before DPO | After DPO | -|--------|------------|-----------| +| --- | --- | --- | | **AIME25 Accuracy** | 80.88% | 84.58% | | **Hallucination Rate** | 8.33% | 0.7% | @@ -144,7 +161,9 @@ DPO reduces hallucinated tool usage with minimal computational overhead: ### Reasoning Control The model supports: + - **Reasoning on/off control** тАУ strip reasoning from 10% of samples + - **Token budget control** тАУ truncate 3% of reasoning traces to different budgets ### Hyperparameters @@ -152,47 +171,47 @@ The model supports: **GRPO Settings:** | Parameter | Value | Description | -|-----------|-------|-------------| -| `num_prompts_per_step` | 128 | Prompts sampled per training step | -| `num_generations_per_prompt` | 16 | Rollouts generated per prompt | -| `max_total_sequence_length` | 49152 | Maximum sequence length (~49K tokens) | -| `normalize_rewards` | true | Normalize rewards across batch | -| `use_leave_one_out_baseline` | true | Variance reduction for advantage estimation | -| `val_period` | 5 | Validation every N steps | -| `max_num_epochs` | 1 | Single epoch over data | -| `seed` | 42 | Random seed for reproducibility | +| --- | --- | --- | +| num_prompts_per_step | 128 | Prompts sampled per training step | +| num_generations_per_prompt | 16 | Rollouts generated per prompt | +| max_total_sequence_length | 49152 | Maximum sequence length (~49K tokens) | +| normalize_rewards | true | Normalize rewards across batch | +| use_leave_one_out_baseline | true | Variance reduction for advantage estimation | +| val_period | 5 | Validation every N steps | +| max_num_epochs | 1 | Single epoch over data | +| seed | 42 | Random seed for reproducibility | **Loss Function:** | Parameter | Value | Description | -|-----------|-------|-------------| -| `ratio_clip_min` | 0.2 | Lower bound for importance ratio clipping | -| `ratio_clip_max` | 0.28 | Upper bound for importance ratio clipping | -| `use_on_policy_kl_approximation` | true | Use unbiased on-policy KL estimator | -| `use_importance_sampling_correction` | true | Correct for inference/training mismatch | -| `token_level_loss` | true | Per-token loss normalization | -| `reference_policy_kl_penalty` | 0 | KL regularization weight (disabled) | +| --- | --- | --- | +| ratio_clip_min | 0.2 | Lower bound for importance ratio clipping | +| ratio_clip_max | 0.28 | Upper bound for importance ratio clipping | +| use_on_policy_kl_approximation | true | Use unbiased on-policy KL estimator | +| use_importance_sampling_correction | true | Correct for inference/training mismatch | +| token_level_loss | true | Per-token loss normalization | +| reference_policy_kl_penalty | 0 | KL regularization weight (disabled) | **Optimizer:** | Parameter | Value | -|-----------|-------| -| `optimizer` | AdamW | -| `lr` | 3e-6 | -| `min_lr` | 3e-6 | -| `weight_decay` | 0.0 | -| `adam_beta1` | 0.9 | -| `adam_beta2` | 0.999 | -| `adam_eps` | 1e-8 | -| `clip_grad` | 1.0 | +| --- | --- | +| optimizer | AdamW | +| lr | 3e-6 | +| min_lr | 3e-6 | +| weight_decay | 0.0 | +| adam_beta1 | 0.9 | +| adam_beta2 | 0.999 | +| adam_eps | 1e-8 | +| clip_grad | 1.0 | **Sequence Packing:** | Parameter | Value | -|-----------|-------| -| `enabled` | true | -| `algorithm` | modified_first_fit_decreasing | -| `sequence_length_round` | 64 | +| --- | --- | +| enabled | true | +| algorithm | modified_first_fit_decreasing | +| sequence_length_round | 64 | --- @@ -201,7 +220,6 @@ The model supports: ### Quick Start
    - ```console // 1. Prepare data (convert to JSONL format) $ uv run nemotron nano3 data prep rl --run YOUR-CLUSTER @@ -211,8 +229,7 @@ $ uv run nemotron nano3 rl --run YOUR-CLUSTER ```
    - -> **Note**: The `--run YOUR-CLUSTER` flag submits jobs via [NeMo-Run](../../nemo_runspec/nemo-run.md). See [Execution through NeMo-Run](../../nemo_runspec/nemo-run.md) for setup. +> **Note**: The `--run YOUR-CLUSTER` flag submits jobs via [NeMo-Run](/../../nemo_runspec/nemo-run). See [Execution through NeMo-Run](/../../nemo_runspec/nemo-run) for setup. ### Running in NeMo-RL Repository @@ -251,14 +268,14 @@ uv run python examples/nemo_gym/run_grpo_nemo_gym.py \ ### Configuration | File | Purpose | -|------|---------| -| `config/default.yaml` | Production GRPO configuration | -| `config/data_prep/default.yaml` | Data preparation settings | -| `config/data_prep/data_blend_raw.json` | RL dataset blend | +| --- | --- | +| config/default.yaml | Production GRPO configuration | +| config/data_prep/default.yaml | Data preparation settings | +| config/data_prep/data_blend_raw.json | RL dataset blend | ### Data Preparation -The `data_prep.py` script converts datasets to JSONL format compatible with [NeMo-RL](../nvidia-stack.md#nemo-rl)'s NeMo-Gym interface. See [Data Preparation Module](../data-prep.md) for detailed documentation. +The `data_prep.py` script converts datasets to JSONL format compatible with [NeMo-RL](/../nvidia-stack#nemo-rl)тАЩs NeMo-Gym interface. See [Data Preparation Module](/../data-prep) for detailed documentation. #### CLI Command @@ -267,26 +284,26 @@ uv run nemotron nano3 data prep rl [options] ``` | Option | Description | -|--------|-------------| -| `--run ` | Execute on Slurm via [NeMo-Run](../../nemo_runspec/nemo-run.md) | -| `sample=N` | Limit rows per dataset (for testing) | -| `force=true` | Force re-run, ignoring cache | +| --- | --- | +| --run <profile> | Execute on Slurm via [NeMo-Run](/../../nemo_runspec/nemo-run) | +| sample=N | Limit rows per dataset (for testing) | +| force=true | Force re-run, ignoring cache | #### Output -``` +```default output/nano3/stage2_rl/ -тФЬтФАтФА manifest.json # {"train": "", "val": "", "test": ""} -тФФтФАтФА runs// - тФЬтФАтФА __train/ +тФЬтФАтФА manifest.json # {"train": "\", "val": "\", "test": "\"} +тФФтФАтФА runs/\/ + тФЬтФАтФА \__train/ тФВ тФФтФАтФА shard_000000.jsonl - тФЬтФАтФА __val/ + тФЬтФАтФА \__val/ тФВ тФФтФАтФА shard_000000.jsonl - тФФтФАтФА __test/ + тФФтФАтФА \__test/ тФФтФАтФА shard_000000.jsonl ``` -The output is registered as a [W&B Artifact](../artifacts.md) (`SplitJsonlDataArtifact-`) for lineage tracking. +The output is registered as a [W&B Artifact](/../artifacts) (`SplitJsonlDataArtifact-`) for lineage tracking. ### Training @@ -297,11 +314,11 @@ uv run nemotron nano3 rl [options] [overrides...] ``` | Option | Description | -|--------|-------------| -| `--run ` | AttachedтАФsubmits and waits, streaming logs ([NeMo-Run](../../nemo_runspec/nemo-run.md)) | -| `--batch ` | DetachedтАФsubmits and exits immediately ([NeMo-Run](../../nemo_runspec/nemo-run.md)) | -| `--dry-run` | Preview execution plan | -| `key=value` | Override config values ([CLI Framework](../cli.md#dotlist-overrides)) | +| --- | --- | +| --run <profile> | AttachedтАФsubmits and waits, streaming logs ([NeMo-Run](/../../nemo_runspec/nemo-run)) | +| --batch <profile> | DetachedтАФsubmits and exits immediately ([NeMo-Run](/../../nemo_runspec/nemo-run)) | +| --dry-run | Preview execution plan | +| key=value | Override config values ([CLI Framework](/../cli#dotlist-overrides)) | #### Override Examples @@ -340,7 +357,7 @@ exclusive = true mounts = ["/lustre:/lustre"] ``` -See [Execution through NeMo-Run](../../nemo_runspec/nemo-run.md) for complete configuration options. +See [Execution through NeMo-Run](/../../nemo_runspec/nemo-run) for complete configuration options. ### Checkpoint & Resume @@ -357,28 +374,31 @@ uv run nemotron nano3 rl checkpointing.checkpoint_dir=/path/to/results **Checkpoint Configuration:** | Option | Value | Description | -|--------|-------|-------------| -| `save_period` | 10 | Steps between checkpoint saves | -| `metric_name` | val:total_reward/mean | Metric for best checkpoint selection | -| `higher_is_better` | true | Higher reward = better checkpoint | -| `keep_top_k` | 1000000 | Number of checkpoints to retain | +| --- | --- | --- | +| save_period | 10 | Steps between checkpoint saves | +| metric_name | val:total_reward/mean | Metric for best checkpoint selection | +| higher_is_better | true | Higher reward = better checkpoint | +| keep_top_k | 1000000 | Number of checkpoints to retain | ### Troubleshooting Common errors and solutions: | Error | Cause | Solution | -|-------|-------|----------| -| High `token_mult_prob_error` | Mismatch between vLLM and Megatron probabilities | Check weight refitting; ensure vLLM compilation settings match | -| KL divergence spikes | Single token probability errors in MoE | Monitor `gen_kl_error` metric; values above 1e-3 indicate issues | -| OOM during generation | vLLM memory allocation too high | Reduce `gpu_memory_utilization` (default 0.5) | -| Slow convergence | Learning rate too low or high | Adjust `policy.megatron_cfg.optimizer.lr` | +| --- | --- | --- | +| High token_mult_prob_error | Mismatch between vLLM and Megatron probabilities | Check weight refitting; ensure vLLM compilation settings match | +| KL divergence spikes | Single token probability errors in MoE | Monitor gen_kl_error metric; values above 1e-3 indicate issues | +| OOM during generation | vLLM memory allocation too high | Reduce gpu_memory_utilization (default 0.5) | +| Slow convergence | Learning rate too low or high | Adjust policy.megatron_cfg.optimizer.lr | **Debugging tips:** - Monitor `token_mult_prob_error` for inference/training consistency (should stay below ~2%) + - Watch `sampling_importance_ratio` (should hover around 1.0) + - Check `approx_entropy` for entropy collapse during training + - Use `sample=N` in data prep for quick iteration --- @@ -406,12 +426,12 @@ flowchart TB ## Infrastructure -This stage uses the following components from the [NVIDIA AI Stack](../nvidia-stack.md): +This stage uses the following components from the [NVIDIA AI Stack](/../nvidia-stack): | Component | Role | Documentation | -|-----------|------|---------------| -| [NeMo-RL](../nvidia-stack.md#nemo-rl) | GRPO algorithm, policy training, reward computation | [Docs](https://docs.nvidia.com/nemo/rl/latest/) | -| [Megatron-Core](../nvidia-stack.md#megatron-core) | Distributed training primitives (TP, PP, CP, EP) | [GitHub](https://github.com/NVIDIA/Megatron-LM) | +| --- | --- | --- | +| [NeMo-RL](/../nvidia-stack#nemo-rl) | GRPO algorithm, policy training, reward computation | [Docs](https://docs.nvidia.com/nemo/rl/latest/) | +| [Megatron-Core](/../nvidia-stack#megatron-core) | Distributed training primitives (TP, PP, CP, EP) | [GitHub](https://github.com/NVIDIA/Megatron-LM) | | [Ray](https://ray.io/) | Distributed actor coordination | [Docs](https://docs.ray.io/) | | vLLM | Fast rollout generation | [GitHub](https://github.com/vllm-project/vllm) | @@ -420,39 +440,39 @@ This stage uses the following components from the [NVIDIA AI Stack](../nvidia-st Training uses multiple parallelism strategies for efficient scaling: | Parallelism | Value | Config Key | -|-------------|-------|------------| -| Tensor (TP) | 2 | `policy.megatron_cfg.tensor_model_parallel_size` | -| Pipeline (PP) | 2 | `policy.megatron_cfg.pipeline_model_parallel_size` | -| Context (CP) | 4 | `policy.megatron_cfg.context_parallel_size` | -| Expert (EP) | 8 | `policy.megatron_cfg.expert_model_parallel_size` | -| Sequence (SP) | Yes | `policy.megatron_cfg.sequence_parallel` | +| --- | --- | --- | +| Tensor (TP) | 2 | policy.megatron_cfg.tensor_model_parallel_size | +| Pipeline (PP) | 2 | policy.megatron_cfg.pipeline_model_parallel_size | +| Context (CP) | 4 | policy.megatron_cfg.context_parallel_size | +| Expert (EP) | 8 | policy.megatron_cfg.expert_model_parallel_size | +| Sequence (SP) | Yes | policy.megatron_cfg.sequence_parallel | **Generation (vLLM):** | Parameter | Value | Description | -|-----------|-------|-------------| -| `tensor_parallel_size` | 4 | TP for vLLM generation | -| `gpu_memory_utilization` | 0.5 | GPU memory fraction for KV cache | -| `colocated` | true | Share GPUs with training | -| `enforce_eager` | false | Use torch.compile | +| --- | --- | --- | +| tensor_parallel_size | 4 | TP for vLLM generation | +| gpu_memory_utilization | 0.5 | GPU memory fraction for KV cache | +| colocated | true | Share GPUs with training | +| enforce_eager | false | Use torch.compile | **Cluster:** | Parameter | Value | -|-----------|-------| -| `num_nodes` | 32 | -| `gpus_per_node` | 8 | +| --- | --- | +| num_nodes | 32 | +| gpus_per_node | 8 | ### Features Used | Feature | Purpose | -|---------|--------| +| --- | --- | | GRPO algorithm | Group Relative Policy Optimization with clipped gradients | | Megatron backend | Distributed training with TP/PP/CP/EP parallelism | | Sequence Packing | Efficient batch utilization for variable-length generations | | vLLM Generation | Fast rollout with tensor parallelism | -| MoE Router Bias | Aux-loss-free load balancing (`freeze_moe_router=true`) | -| Per-token Loss | Consistent gradient signal (`calculate_per_token_loss=true`) | +| MoE Router Bias | Aux-loss-free load balancing (freeze_moe_router=true) | +| Per-token Loss | Consistent gradient signal (calculate_per_token_loss=true) | ### NeMo-Gym Environments @@ -476,7 +496,7 @@ env: NeMo-RL uses a Ray-based actor model: | Actor | Function | -|-------|----------| +| --- | --- | | **Policy Model** | Trainable policy weights (Megatron backend) | | **Generator** | vLLM-backed rollout generation (colocated) | | **Reward Environments** | NeMo-Gym environments for reward computation | @@ -484,7 +504,7 @@ NeMo-RL uses a Ray-based actor model: ### Container -``` +```default nvcr.io/nvidia/nemo-rl:v0.4.0.nemotron_3_nano ``` @@ -492,16 +512,24 @@ nvcr.io/nvidia/nemo-rl:v0.4.0.nemotron_3_nano ## Next Steps -After RL completes, proceed to [Stage 3: Evaluation](./evaluate.md) to benchmark the aligned model. +After RL completes, proceed to [Stage 3: Evaluation](/evaluate) to benchmark the aligned model. ## Reference - [Tech Report Section 3.2](https://research.nvidia.com/labs/nemotron/files/NVIDIA-Nemotron-3-Nano-Technical-Report.pdf) тАУ RL methodology + - [NeMo-RL Documentation](https://docs.nvidia.com/nemo/rl/latest/) тАУ GRPO, DPO, environments + - [NeMo-RL Nemotron 3 Nano Guide](https://docs.nvidia.com/nemo/rl/nightly/guides/nemotron-3-nano.html) тАФ upstream training guide -- [NVIDIA AI Stack](../nvidia-stack.md) тАУ NeMo-RL, Megatron-Core -- [Artifact Lineage](../artifacts.md) тАУ W&B artifact system -- [Stage 0: Pretraining](./pretrain.md) тАУ pretrain the base model -- [Stage 1: SFT](./sft.md) тАУ instruction tuning + +- [NVIDIA AI Stack](/../nvidia-stack) тАУ NeMo-RL, Megatron-Core + +- [Artifact Lineage](/../artifacts) тАУ W&B artifact system + +- [Stage 0: Pretraining](/pretrain) тАУ pretrain the base model + +- [Stage 1: SFT](/sft) тАУ instruction tuning + - **Recipe Source:** `src/nemotron/recipes/nano3/stage2_rl/` -- [Back to Overview](./README.md) + +- [Back to Overview](/README) diff --git a/docs/nemotron/nano3/sft.md b/docs/fern/pages-vnightly/nemotron/nano3/sft.mdx similarity index 71% rename from docs/nemotron/nano3/sft.md rename to docs/fern/pages-vnightly/nemotron/nano3/sft.mdx index a55b491ff..cb7834faf 100644 --- a/docs/nemotron/nano3/sft.md +++ b/docs/fern/pages-vnightly/nemotron/nano3/sft.mdx @@ -1,6 +1,10 @@ -# Stage 1: Supervised Fine-Tuning (SFT) +--- +title: "Stage 1: Supervised Fine-Tuning (SFT)" +slug: "nemotron/nano3/sft.html" +description: "This stage fine-tunes the pretrained model for instruction following using Megatron-Bridge." +--- -This stage fine-tunes the pretrained model for instruction following using [Megatron-Bridge](../nvidia-stack.md#megatron-bridge). +This stage fine-tunes the pretrained model for instruction following using [Megatron-Bridge](/../nvidia-stack#megatron-bridge). > **Open-Source Data Only**: This recipe uses exclusively open-sourced SFT data from the [Nemotron Post-training Datasets](https://huggingface.co/collections/nvidia/nemotron-post-training-v3) collection, which is a subset of the full data used to train the released model. The recipe includes datasets from Nemotron-Science-v1, Nemotron-Instruction-Following-Chat-v1, Nemotron-Math-Proofs-v1, Nemotron-SWE-v1, Nemotron-Agentic-v1, and Nemotron-Competitive-Programming-v1. Results will differ from the benchmarks in the [tech report](https://research.nvidia.com/labs/nemotron/files/NVIDIA-Nemotron-3-Nano-Technical-Report.pdf). Use this recipe as a reference implementation to apply the methodology with your own data. @@ -8,9 +12,9 @@ This stage fine-tunes the pretrained model for instruction following using [Mega ## Training Methodology -> **Training Framework**: SFT is implemented using [Megatron-Bridge](https://docs.nvidia.com/nemo/megatron-bridge/latest/)'s `finetune()` entry point, which loads a pretrained checkpoint and handles the training loop with role-based loss masking. See [Training Entry Points](https://docs.nvidia.com/nemo/megatron-bridge/latest/training/entry-points.html) for implementation details. -> -> For complete methodology, see [Tech Report Section 3.1](https://research.nvidia.com/labs/nemotron/files/NVIDIA-Nemotron-3-Nano-Technical-Report.pdf). +> **Training Framework**: SFT is implemented using [Megatron-Bridge](https://docs.nvidia.com/nemo/megatron-bridge/latest/)тАЩs `finetune()` entry point, which loads a pretrained checkpoint and handles the training loop with role-based loss masking. See [Training Entry Points](https://docs.nvidia.com/nemo/megatron-bridge/latest/training/entry-points.html) for implementation details. + +For complete methodology, see [Tech Report Section 3.1](https://research.nvidia.com/labs/nemotron/files/NVIDIA-Nemotron-3-Nano-Technical-Report.pdf). ### Data Preparation Pipeline @@ -41,16 +45,16 @@ flowchart LR ``` | Stage | What Happens | -|-------|--------------| -| **OpenAI Chat Format** | Input messages with `role` (system/user/assistant) and `content` fields | -| **Chat Template** | Renders messages using Nano3 Jinja template with special tokens (`<\|im_start\|>`, `<\|im_end\|>`) | +| --- | --- | +| **OpenAI Chat Format** | Input messages with role (system/user/assistant) and content fields | +| **Chat Template** | Renders messages using Nano3 Jinja template with special tokens (<|im_start|>, <|im_end|>) | | **Role-Labeled Chunks** | Splits rendered text back into chunks, each tagged with its source role | | **Tokenization** | Converts text chunks to token IDs | -| **Loss Mask** | Builds mask: `1` for assistant tokens, `0` for system/user tokens | +| **Loss Mask** | Builds mask: 1 for assistant tokens, 0 for system/user tokens | | **Packing** | Multiple sequences packed into fixed-length bins (4096 tokens) | | **Mask Rolling** | Shifts mask by 1 position for next-token prediction alignment | -**Multi-turn splitting**: For conversations with reasoning content (`reasoning_content` field), the pipeline creates separate training sequences at each user turn. Reasoning from previous turns is dropped when a new user message appearsтАФthis matches inference behavior where users don't see intermediate reasoning. +**Multi-turn splitting**: For conversations with reasoning content (`reasoning_content` field), the pipeline creates separate training sequences at each user turn. Reasoning from previous turns is dropped when a new user message appearsтАФthis matches inference behavior where users donтАЩt see intermediate reasoning. > For data preparation implementation, see **Recipe Source**: `src/nemotron/recipes/nano3/stage1_sft/data_prep.py` @@ -60,29 +64,29 @@ Loss masking determines which tokens contribute to the training loss. In SFT, we **Why mask non-assistant tokens?** -The model should learn to *respond*, not to *prompt*. If we computed loss on user messages, the model would be optimized to predict "What is 2+2?" given prior contextтАФwhich isn't useful for an assistant. By masking user and system tokens (setting their loss weight to 0), gradients only flow from assistant responses, teaching the model what to generate without wasting capacity on predicting inputs. +The model should learn to *respond*, not to *prompt*. If we computed loss on user messages, the model would be optimized to predict тАЬWhat is 2+2?тАЭ given prior contextтАФwhich isnтАЩt useful for an assistant. By masking user and system tokens (setting their loss weight to 0), gradients only flow from assistant responses, teaching the model what to generate without wasting capacity on predicting inputs. | Role | Loss Mask | Training Signal | -|------|-----------|-----------------| -| `system` | 0 | Ignored (instructions) | -| `user` | 0 | Ignored (prompts) | -| `assistant` | 1 | Learned (responses) | +| --- | --- | --- | +| system | 0 | Ignored (instructions) | +| user | 0 | Ignored (prompts) | +| assistant | 1 | Learned (responses) | **Why roll the mask by 1?** In next-token prediction, the model predicts `token[i+1]` given `tokens[0:i]`. The loss compares the prediction against the *label*, which is the input sequence shifted by one position: -``` +```default Position: 0 1 2 3 4 Input: [A] [B] [C] [D] [E] -Label: [B] [C] [D] [E] [_] <- shifted by 1 +Label: [B] [C] [D] [E] [_] \<- shifted by 1 ``` If assistant content starts at position 2 (`[C]`), we want loss on predicting `[C]`, `[D]`, and `[E]`. But the label for position 2 is `[D]`тАФso we need to shift the mask to align with labels: -``` -Original mask: [0] [0] [1] [1] [1] <- "assistant starts at C" -Rolled mask: [0] [0] [0] [1] [1] <- aligns with labels D, E +```default +Original mask: [0] [0] [1] [1] [1] \<- "assistant starts at C" +Rolled mask: [0] [0] [0] [1] [1] \<- aligns with labels D, E ``` The pipeline rolls the loss mask by 1 position so it correctly masks the *predictions* (labels) rather than the *inputs*. @@ -90,6 +94,7 @@ The pipeline rolls the loss mask by 1 position so it correctly masks the *predic **Truncation behavior (`max_doc_tokens`):** - **Default (null)**: No truncationтАФfull sequences are preserved + - **When set**: Sequences exceeding the limit are truncated from the end, with the loss mask adjusted accordingly > For implementation details, see `src/nemotron/data_prep/core/chat_sft_shard_core.py` @@ -103,23 +108,25 @@ Individual chat conversations vary in lengthтАФsome are 50 tokens, others 3000. The packed sequence format stores everything Megatron-Bridge needs for training: | Field | Description | -|-------|-------------| -| `input_ids` | Concatenated token IDs from multiple conversations | -| `loss_mask` | Rolled mask indicating which positions contribute to loss (see [Loss Masking](#loss-masking)) | -| `seq_start_id` | Boundary indices marking where each original conversation starts within the pack | +| --- | --- | +| input_ids | Concatenated token IDs from multiple conversations | +| loss_mask | Rolled mask indicating which positions contribute to loss (see [Loss Masking](#loss-masking)) | +| seq_start_id | Boundary indices marking where each original conversation starts within the pack | **How `seq_start_id` works:** -When multiple conversations are packed together, the model needs to know where one ends and another beginsтАФotherwise attention could "leak" between unrelated conversations. The `seq_start_id` array marks these boundaries: +When multiple conversations are packed together, the model needs to know where one ends and another beginsтАФotherwise attention could тАЬleakтАЭ between unrelated conversations. The `seq_start_id` array marks these boundaries: -``` +```default Pack: [Conv A tokens] [Conv B tokens] [Conv C tokens] ^ ^ ^ seq_start_id: [0, 128, 384] ``` Megatron-Bridge uses these boundaries for: -- **Variable-length attention**: Attention is masked so tokens from Conv A can't attend to Conv B + +- **Variable-length attention**: Attention is masked so tokens from Conv A canтАЩt attend to Conv B + - **FlashAttention optimization**: Boundaries map to `cu_seqlens` parameter for efficient packed attention > For packing implementation, see `src/nemotron/data_prep/packing/builder.py` @@ -129,13 +136,15 @@ Megatron-Bridge uses these boundaries for: Nemotron 3 Nano supports both reasoning and non-reasoning modes: - **Multi-Step**: Existing reasoning tokens preserved for reuse in subsequent steps + - **Multi-Turn**: Reasoning from previous turns dropped when user message introduced + - **Tool Calling**: Uses XML-style special tags to reduce character escaping ### SFT Data Domains | Domain | Description | -|--------|-------------| +| --- | --- | | **Competition Math** | Tool-integrated reasoning with GPT-OSS teachers | | **Competition Code** | OpenCodeReasoning solutions with obfuscation/complication | | **InfinityByte** | Cross-domain code synthesis at model capability boundaries | @@ -156,9 +165,13 @@ Nemotron 3 Nano supports both reasoning and non-reasoning modes: ### Data Filtering The pipeline applies: + - **Structural checks**: Discard malformed examples + - **Pathological repetition filtering**: Remove repeated n-grams + - **Consistency filtering**: Judge-based action consistency verification + - **Narrative filtering**: Remove political/nationalistic narratives ### Troubleshooting @@ -166,32 +179,35 @@ The pipeline applies: Common data preparation errors and solutions: | Error | Cause | Solution | -|-------|-------|----------| -| "# Tools missing" validation failure | Messages contain `` but system prompt lacks `# Tools` header | Add a `# Tools` section in the system prompt before tool definitions | +| --- | --- | --- | +| тАЬ# Tools missingтАЭ validation failure | Messages contain <tool_call> but system prompt lacks # Tools header | Add a # Tools section in the system prompt before tool definitions | | Empty sequences after processing | All tokens masked (no assistant content in conversation) | Verify input data contains assistant responses with actual content | | Template rendering mismatch | Tokenizer BPE splits differ from template expectations | Ensure tokenizer model matches the one used during template creation | -| Sequences truncated excessively | Many conversations exceed `max_doc_tokens` | Consider increasing `max_doc_tokens` or `pack_size`, or chunking long conversations | +| Sequences truncated excessively | Many conversations exceed max_doc_tokens | Consider increasing max_doc_tokens or pack_size, or chunking long conversations | **Debugging tips:** - Use `sample=100` to test data preparation on a small subset + - Check `metadata.json` output for statistics on filtered/truncated sequences + - Review W&B artifacts for lineage tracking and validation metrics ### Hyperparameters | Parameter | Value | -|-----------|-------| +| --- | --- | | **Learning Rate** | 1e-5 | | **Sequence Length** | 4096 tokens (pack_size) | | **Loss Masking** | Role-based (assistant tokens only) | -| **Loss Normalization** | Per-token (`calculate_per_token_loss: true`) | +| **Loss Normalization** | Per-token (calculate_per_token_loss: true) | | **Optimizer** | AdamW | | **Total Samples** | 18M+ | **`calculate_per_token_loss` explained:** - **True (default)**: Loss is normalized by the number of tokens with `loss_mask=1` across the batch. Each token contributes equally regardless of which sequence it belongs to. + - **False**: Loss is normalized by the number of sequences. Longer sequences (more assistant tokens) contribute more to the gradient. Per-token normalization is preferred for SFT because it ensures consistent learning signal regardless of conversation length. @@ -203,7 +219,6 @@ Per-token normalization is preferred for SFT because it ensures consistent learn ### Quick Start
    - ```console // 1. Prepare data (apply chat templates, tokenize to Packed Parquet) $ uv run nemotron nano3 data prep sft --run YOUR-CLUSTER @@ -213,8 +228,7 @@ $ uv run nemotron nano3 sft --run YOUR-CLUSTER ```
    - -> **Note**: The `--run YOUR-CLUSTER` flag submits jobs via [NeMo-Run](../../nemo_runspec/nemo-run.md). See [Execution through NeMo-Run](../../nemo_runspec/nemo-run.md) for setup. +> **Note**: The `--run YOUR-CLUSTER` flag submits jobs via [NeMo-Run](/../../nemo_runspec/nemo-run). See [Execution through NeMo-Run](/../../nemo_runspec/nemo-run) for setup. #### Direct Script Execution (Megatron-Bridge) @@ -243,14 +257,14 @@ See the [Megatron-Bridge Nemotron 3 documentation](https://docs.nvidia.com/nemo/ ### Configuration | File | Purpose | -|------|---------| -| `config/default.yaml` | Production configuration | -| `config/data_prep/default.yaml` | Data preparation settings | -| `config/data_prep/data_blend_raw.json` | Dataset blend definition | +| --- | --- | +| config/default.yaml | Production configuration | +| config/data_prep/default.yaml | Data preparation settings | +| config/data_prep/data_blend_raw.json | Dataset blend definition | ### Data Preparation -The `data_prep.py` script processes OpenAI-format chat data into packed sequences with role-based loss masking. See [Data Preparation Module](../data-prep.md) for detailed documentation. +The `data_prep.py` script processes OpenAI-format chat data into packed sequences with role-based loss masking. See [Data Preparation Module](/../data-prep) for detailed documentation. #### CLI Command @@ -259,14 +273,14 @@ uv run nemotron nano3 data prep sft [options] ``` | Option | Description | -|--------|-------------| -| `--run ` | Execute on Slurm via [NeMo-Run](../../nemo_runspec/nemo-run.md) | -| `sample=N` | Limit rows per dataset (for testing) | -| `force=true` | Force re-run, ignoring cache | +| --- | --- | +| --run <profile> | Execute on Slurm via [NeMo-Run](/../../nemo_runspec/nemo-run) | +| sample=N | Limit rows per dataset (for testing) | +| force=true | Force re-run, ignoring cache | #### Output -``` +```default output/stage1_sft/ тФЬтФАтФА blend.json # Per-split blend {"train": [...], "valid": [...], "test": [...]} тФЬтФАтФА splits/ @@ -277,10 +291,10 @@ output/stage1_sft/ тФВ тФВ тФФтФАтФА shard_000000.parquet тФВ тФФтФАтФА test/ тФВ тФФтФАтФА shard_000000.parquet -тФФтФАтФА runs// # Raw shard outputs (splits/ symlinks here) +тФФтФАтФА runs/\/ # Raw shard outputs (splits/ symlinks here) ``` -The output is registered as a [W&B Artifact](../artifacts.md) (`SFTDataArtifact-`) for lineage tracking. +The output is registered as a [W&B Artifact](/../artifacts) (`SFTDataArtifact-`) for lineage tracking. ### Training @@ -291,11 +305,11 @@ uv run nemotron nano3 sft [options] [overrides...] ``` | Option | Description | -|--------|-------------| -| `--run ` | AttachedтАФsubmits and waits, streaming logs ([NeMo-Run](../../nemo_runspec/nemo-run.md)) | -| `--batch ` | DetachedтАФsubmits and exits immediately ([NeMo-Run](../../nemo_runspec/nemo-run.md)) | -| `--dry-run` | Preview execution plan | -| `key=value` | Override config values ([CLI Framework](../cli.md#dotlist-overrides)) | +| --- | --- | +| --run <profile> | AttachedтАФsubmits and waits, streaming logs ([NeMo-Run](/../../nemo_runspec/nemo-run)) | +| --batch <profile> | DetachedтАФsubmits and exits immediately ([NeMo-Run](/../../nemo_runspec/nemo-run)) | +| --dry-run | Preview execution plan | +| key=value | Override config values ([CLI Framework](/../cli#dotlist-overrides)) | #### Override Examples @@ -329,7 +343,7 @@ gpus_per_node = 8 mounts = ["/lustre:/lustre"] ``` -See [Execution through NeMo-Run](../../nemo_runspec/nemo-run.md) for complete configuration options. +See [Execution through NeMo-Run](/../../nemo_runspec/nemo-run) for complete configuration options. ### Artifact Lineage @@ -356,25 +370,25 @@ flowchart TB ## Infrastructure -This stage uses the following components from the [NVIDIA AI Stack](../nvidia-stack.md): +This stage uses the following components from the [NVIDIA AI Stack](/../nvidia-stack): | Component | Role | Documentation | -|-----------|------|---------------| -| [Megatron-Core](../nvidia-stack.md#megatron-core) | Distributed training primitives (TP, PP, DP, EP) | [GitHub](https://github.com/NVIDIA/Megatron-LM) | -| [Megatron-Bridge](../nvidia-stack.md#megatron-bridge) | Fine-tuning loop, checkpoint loading, loss masking | [Docs](https://docs.nvidia.com/nemo/megatron-bridge/latest/) | +| --- | --- | --- | +| [Megatron-Core](/../nvidia-stack#megatron-core) | Distributed training primitives (TP, PP, DP, EP) | [GitHub](https://github.com/NVIDIA/Megatron-LM) | +| [Megatron-Bridge](/../nvidia-stack#megatron-bridge) | Fine-tuning loop, checkpoint loading, loss masking | [Docs](https://docs.nvidia.com/nemo/megatron-bridge/latest/) | ### Features Used | Feature | Purpose | -|---------|--------| -| `finetune()` entry point | SFT training with pre-loaded checkpoint | +| --- | --- | +| finetune() entry point | SFT training with pre-loaded checkpoint | | Role-based loss masking | Only compute loss on assistant tokens | | Mixed precision (BF16) | Memory-efficient training | | Gradient checkpointing | Reduce memory footprint | ### Container -``` +```default nvcr.io/nvidia/nemo:25.11.nemotron_3_nano ``` @@ -382,13 +396,18 @@ nvcr.io/nvidia/nemo:25.11.nemotron_3_nano ## Next Steps -After SFT completes, proceed to [Stage 2: RL](./rl.md) for alignment training. +After SFT completes, proceed to [Stage 2: RL](/rl) for alignment training. ## Reference - [Tech Report Section 3.1](https://research.nvidia.com/labs/nemotron/files/NVIDIA-Nemotron-3-Nano-Technical-Report.pdf) тАУ SFT methodology -- [NVIDIA AI Stack](../nvidia-stack.md) тАУ Megatron-Core, Megatron-Bridge -- [Artifact Lineage](../artifacts.md) тАУ W&B artifact system -- [Stage 0: Pretraining](./pretrain.md) тАУ pretrain the base model + +- [NVIDIA AI Stack](/../nvidia-stack) тАУ Megatron-Core, Megatron-Bridge + +- [Artifact Lineage](/../artifacts) тАУ W&B artifact system + +- [Stage 0: Pretraining](/pretrain) тАУ pretrain the base model + - **Recipe Source:** `src/nemotron/recipes/nano3/stage1_sft/` -- [Back to Overview](./README.md) + +- [Back to Overview](/README) diff --git a/docs/nemotron/nvidia-stack.md b/docs/fern/pages-vnightly/nemotron/nvidia-stack.mdx similarity index 73% rename from docs/nemotron/nvidia-stack.md rename to docs/fern/pages-vnightly/nemotron/nvidia-stack.mdx index 9a2113d9d..6376af6f4 100644 --- a/docs/nemotron/nvidia-stack.md +++ b/docs/fern/pages-vnightly/nemotron/nvidia-stack.mdx @@ -1,12 +1,16 @@ -# NVIDIA AI Stack +--- +title: "NVIDIA AI Stack" +slug: "nemotron/nvidia-stack.html" +description: "Nemotron training recipes are built on NVIDIAтАЩs AI stack. While nemotron.kit handles artifact versioning and lineage tracking and nemo_runspec provides the CLI toolkit and execution infrastructure, al" +--- -Nemotron training recipes are built on NVIDIA's AI stack. While `nemotron.kit` handles artifact versioning and lineage tracking and `nemo_runspec` provides the CLI toolkit and execution infrastructure, all heavy-lifting for distributed training is delegated to specialized NVIDIA libraries. +Nemotron training recipes are built on NVIDIAтАЩs AI stack. While `nemotron.kit` handles artifact versioning and lineage tracking and `nemo_runspec` provides the CLI toolkit and execution infrastructure, all heavy-lifting for distributed training is delegated to specialized NVIDIA libraries. ## NeMo Framework Nemotron recipes are part of the broader NeMo Framework ecosystem, which provides end-to-end tools for the full LLM lifecycle: -![NeMo Framework Overview](../assets/nemo-framework-overview.png) +![NeMo Framework Overview](../../_images/nemo-framework-overview.png) *Image credit: [NeMo-RL Documentation](https://docs.nvidia.com/nemo/rl/latest/)* @@ -15,7 +19,7 @@ The Nemotron recipes focus on the **Pre-training & SFT** (via Megatron-Bridge) a ## Stack Overview | Component | Purpose | Used In | -|-----------|---------|---------| +| --- | --- | --- | | [Megatron-Core](https://github.com/NVIDIA/Megatron-LM) | Distributed training primitives (TP, PP, DP, CP) | All stages | | [Megatron-Bridge](https://github.com/NVIDIA-NeMo/Megatron-Bridge) | Model definitions, training loops, HF conversion | Pretrain, SFT | | [NeMo-RL](https://github.com/NVIDIA-NeMo/RL) | RL algorithms (GRPO, DPO), reward environments | RL stage | @@ -32,7 +36,7 @@ Megatron-Core implements multiple parallelism strategies that can be combined fo Split model layers across GPUs to handle large weight matrices: -![Tensor Parallelism](../assets/tensor-parallelism.png) +![Tensor Parallelism](../../_images/tensor-parallelism.png) *Image credit: [Megatron-Bridge Documentation](https://docs.nvidia.com/nemo/megatron-bridge/latest/)* @@ -40,22 +44,22 @@ Split model layers across GPUs to handle large weight matrices: Distribute LayerNorm and Dropout activations across the sequence dimension: -![Sequence Parallelism](../assets/sequence-parallelism.png) +![Sequence Parallelism](../../_images/sequence-parallelism.png) *Image credit: [Megatron-Bridge Documentation](https://docs.nvidia.com/nemo/megatron-bridge/latest/)* #### Expert Parallelism (EP) -Distribute MoE experts across GPUs, which is central to Nemotron's sparse MoE architecture: +Distribute MoE experts across GPUs, which is central to NemotronтАЩs sparse MoE architecture: -![Expert Parallelism](../assets/expert-parallelism.png) +![Expert Parallelism](../../_images/expert-parallelism.png) *Image credit: [Megatron-Bridge Documentation](https://docs.nvidia.com/nemo/megatron-bridge/latest/)* ### All Parallelism Types | Parallelism | Abbreviation | Description | -|-------------|--------------|-------------| +| --- | --- | --- | | Tensor | TP | Split weight matrices across GPUs | | Pipeline | PP | Split model layers into stages | | Data | DP | Replicate model, distribute batches | @@ -66,6 +70,7 @@ Distribute MoE experts across GPUs, which is central to Nemotron's sparse MoE ar ### Documentation - [Megatron-Core GitHub](https://github.com/NVIDIA/Megatron-LM/tree/main/megatron/core) + - [Parallelism Tutorial](https://docs.nvidia.com/nemo-framework/user-guide/latest/nemotoolkit/features/parallelisms.html) ## Megatron-Bridge @@ -75,18 +80,25 @@ Megatron-Bridge is a PyTorch-native library that bridges Hugging Face models wit ### Features - **Bidirectional checkpoint conversion** between Hugging Face and Megatron formats + - **Scalable training loop** with all Megatron parallelisms + - **Pre-configured recipes** for Llama, Qwen, DeepSeek, Nemotron, and more + - **Mixed precision** (FP8, BF16, FP4) via Transformer Engine + - **PEFT** with LoRA and DoRA ### How Nemotron Uses It -Nemotron's pretraining and SFT stages use Megatron-Bridge for: +NemotronтАЩs pretraining and SFT stages use Megatron-Bridge for: 1. **Model definition** via `NemotronHModel` provider for the hybrid Mamba-Transformer architecture + 2. **Training loop** with `pretrain()` and `finetune()` entry points + 3. **Checkpoint management** with distributed save/load in Megatron format + 4. **HF export** to convert trained checkpoints back to Hugging Face format ```python @@ -103,20 +115,23 @@ pretrain(config) Megatron-Bridge uses a central `ConfigContainer` dataclass that combines: | Section | Purpose | -|---------|---------| -| `model` | Model architecture and parallelism settings | -| `train` | Batch sizes, iterations, gradient accumulation | -| `optimizer` | Optimizer type, learning rate, weight decay | -| `scheduler` | LR schedule (warmup, decay) | -| `dataset` | Data loading configuration | -| `checkpoint` | Save/load intervals and paths | -| `mixed_precision` | FP8/BF16 settings | +| --- | --- | +| model | Model architecture and parallelism settings | +| train | Batch sizes, iterations, gradient accumulation | +| optimizer | Optimizer type, learning rate, weight decay | +| scheduler | LR schedule (warmup, decay) | +| dataset | Data loading configuration | +| checkpoint | Save/load intervals and paths | +| mixed_precision | FP8/BF16 settings | ### Documentation - [Megatron-Bridge GitHub](https://github.com/NVIDIA-NeMo/Megatron-Bridge) + - [Official Documentation](https://docs.nvidia.com/nemo/megatron-bridge/latest/) + - [Training Entry Points](https://docs.nvidia.com/nemo/megatron-bridge/latest/training/entry-points.html) + - [Adding New Models](https://docs.nvidia.com/nemo/megatron-bridge/latest/adding-new-models.html) ## NeMo-RL @@ -126,19 +141,27 @@ NeMo-RL is a post-training library for reinforcement learning on LLMs and VLMs, ### Features - **GRPO** (Group Relative Policy Optimization) тАУ main RL algorithm with clipped policy gradients + - **DAPO** (Dual-Clip Asymmetric Policy Optimization) тАУ extended GRPO with asymmetric clipping + - **DPO** (Direct Preference Optimization) тАУ RL-free alignment from preference data + - **Reward Models** тАУ Bradley-Terry reward model training + - **Multi-Environment Training** тАУ math, code, tool-use, and custom reward environments + - **Flexible Backends** тАУ DTensor (FSDP2) for native PyTorch, Megatron for large models ### How Nemotron Uses It -Nemotron's RL stage uses NeMo-RL for: +NemotronтАЩs RL stage uses NeMo-RL for: 1. **GRPO Training** with multi-environment RLVR across 7 reward environments + 2. **Generation** via vLLM backend for fast rollouts + 3. **Reward Computation** including math verification, code execution, GenRM scoring + 4. **Ray Orchestration** for distributed policy-environment coordination ```python @@ -155,16 +178,20 @@ run_grpo(config) ### Architecture -NeMo-RL uses a Ray-based actor model for distributed training. Each "RL Actor" (Policy, Generator, Reward Model) manages a `RayWorkerGroup` that controls multiple workers distributed across GPUs: +NeMo-RL uses a Ray-based actor model for distributed training. Each тАЬRL ActorтАЭ (Policy, Generator, Reward Model) manages a `RayWorkerGroup` that controls multiple workers distributed across GPUs: -![NeMo-RL Actor Architecture](../assets/nemo-rl-actors.png) +![NeMo-RL Actor Architecture](../../_images/nemo-rl-actors.png) *Image credit: [NeMo-RL Documentation](https://docs.nvidia.com/nemo/rl/latest/)* Core concepts: + - **RL Actors** тАУ high-level components (Policy Model, Generator, Reward Model) + - **RayWorkerGroup** тАУ manages a pool of workers for each actor + - **Workers** тАУ individual processes handling computation + - **RayVirtualCluster** тАУ allocates GPU resources to worker groups ### Reward Environments @@ -172,17 +199,17 @@ Core concepts: NeMo-RL provides several built-in reward environments: | Environment | Description | -|-------------|-------------| -| `MathEnvironment` | Verifies mathematical solutions | -| `CodeEnvironment` | Executes code in sandbox, checks correctness | -| `RewardModelEnvironment` | Scores responses with trained reward model | -| `ToolEnvironment` | Evaluates tool-use and function calling | -| `NemoGym` | Game environments for multi-turn RL | +| --- | --- | +| MathEnvironment | Verifies mathematical solutions | +| CodeEnvironment | Executes code in sandbox, checks correctness | +| RewardModelEnvironment | Scores responses with trained reward model | +| ToolEnvironment | Evaluates tool-use and function calling | +| NemoGym | Game environments for multi-turn RL | ### Training Backends | Backend | Best For | Parallelism | -|---------|----------|-------------| +| --- | --- | --- | | **DTensor (FSDP2)** | Models up to ~32B | FSDP, TP, CP, SP | | **Megatron** | Large models (>100B) | Full 6D parallelism | @@ -191,9 +218,13 @@ Backend selection is automatic based on YAML configuration. ### Documentation - [NeMo-RL GitHub](https://github.com/NVIDIA/NeMo-RL) + - [Official Documentation](https://docs.nvidia.com/nemo/rl/latest/) + - [GRPO Guide](https://docs.nvidia.com/nemo/rl/latest/guides/grpo.html) + - [Environment Guide](https://docs.nvidia.com/nemo/rl/latest/guides/environments.html) + - [Training Backends](https://docs.nvidia.com/nemo/rl/latest/design-docs/training-backends.html) ## Version Compatibility @@ -201,13 +232,15 @@ Backend selection is automatic based on YAML configuration. Nemotron recipes are tested with specific versions of the NVIDIA AI stack. Check the container images in recipe configs for exact versions. | Component | Tested Version | Container | -|-----------|----------------|-----------| -| Megatron-Core | 0.13+ | `nvcr.io/nvidia/nemo:*` | -| Megatron-Bridge | 0.2+ | `nvcr.io/nvidia/nemo:*` | -| NeMo-RL | 0.4+ | `nvcr.io/nvidia/nemo-rl:*` | +| --- | --- | --- | +| Megatron-Core | 0.13+ | nvcr.io/nvidia/nemo:* | +| Megatron-Bridge | 0.2+ | nvcr.io/nvidia/nemo:* | +| NeMo-RL | 0.4+ | nvcr.io/nvidia/nemo-rl:* | ## Further Reading -- [Nemotron Kit](./kit.md) тАУ artifact system and lineage tracking -- [Execution through NeMo-Run](../nemo_runspec/nemo-run.md) тАУ execution profiles and packagers -- [Nano3 Recipe](./nano3/README.md) тАУ training pipeline +- [Nemotron Kit](/kit) тАУ artifact system and lineage tracking + +- [Execution through NeMo-Run](/../nemo_runspec/nemo-run) тАУ execution profiles and packagers + +- [Nano3 Recipe](/nano3/README) тАУ training pipeline diff --git a/docs/nemotron/omni3/README.md b/docs/fern/pages-vnightly/nemotron/omni3/README.mdx similarity index 69% rename from docs/nemotron/omni3/README.md rename to docs/fern/pages-vnightly/nemotron/omni3/README.mdx index 105e92a96..8b2ab126e 100644 --- a/docs/nemotron/omni3/README.md +++ b/docs/fern/pages-vnightly/nemotron/omni3/README.mdx @@ -1,6 +1,10 @@ -# Nemotron 3 Omni Training Recipe +--- +title: "Nemotron 3 Omni Training Recipe" +slug: "nemotron/omni3/README.html" +description: "Multimodal post-training pipeline for Nemotron 3 Nano Omni, NVIDIAтАЩs 30B-A3B hybrid mixture-of-experts model. Unlike Nano3 and Super3, Omni starts from a GA checkpoint and owns its stage-local contain" +--- -Multimodal post-training pipeline for **Nemotron 3 Nano Omni**, NVIDIA's +Multimodal post-training pipeline for **Nemotron 3 Nano Omni**, NVIDIAтАЩs 30B-A3B hybrid mixture-of-experts model. Unlike Nano3 and Super3, Omni starts from a GA checkpoint and owns its stage-local container builds. @@ -10,76 +14,85 @@ builds. Quick navigation for developers landing here from the [release blog](https://developer.nvidia.com/blog/nvidia-nemotron-3-nano-omni-powers-multimodal-agent-reasoning-in-a-single-efficient-open-model/): | You wantтАж | Go to | -|---|---| -| Architecture deep-dive (Mamba+transformer, EVS, NemoClaw) | [`architecture.md`](./architecture.md) | -| Inference engines, quantization, cloud platforms, providers | [`inference.md`](./inference.md) | +| --- | --- | +| Architecture deep-dive (Mamba+transformer, EVS, NemoClaw) | [architecture.md](/architecture) | +| Inference engines, quantization, cloud platforms, providers | [inference.md](/inference) | | Reproduce training | [┬зQuick Start](#quick-start) below | -| SFT details | [`sft.md`](./sft.md) | -| RL details | [`rl.md`](./rl.md) ┬╖ [`rl/data-prep.md`](./rl/data-prep.md) | - +| SFT details | [sft.md](/sft) | +| RL details | [rl.md](/rl) ┬╖ [rl/data-prep.md](/rl/data-prep) | ## Model Overview -![Nemotron 3 Nano Omni hybrid MoE architecture: Parakeet audio encoder тЖТ audio adaptor, C-RADIOv4-H vision encoder + 3D convolution + Efficient Video Sampling тЖТ vision adaptor, text tokenizer, all feeding the unified 30B-A3B LLM decoder](../../assets/omni-3.png) +![Nemotron 3 Nano Omni hybrid MoE architecture: Parakeet audio encoder тЖТ audio adaptor, C-RADIOv4-H vision encoder + 3D convolution + Efficient Video Sampling тЖТ vision adaptor, text tokenizer, all feeding the unified 30B-A3B LLM decoder](../../../_images/omni-3.png) | Property | Value | -|---|---| -| Architecture | Hybrid MoE тАФ Mamba layers (sequence/memory efficiency) + transformer layers (reasoning), with a unified text decoder ([details](./architecture.md#hybrid-moe-decoder)) | +| --- | --- | +| Architecture | Hybrid MoE тАФ Mamba layers (sequence/memory efficiency) + transformer layers (reasoning), with a unified text decoder ([details](/architecture#hybrid-moe-decoder)) | | Total / active parameters | 30B / 3B (A3B MoE) | | Native modalities | Text, image, video, audio | | Max context length | 262K tokens | -| Training context schedule | 16K тЖТ 49K тЖТ 262K (progressive scaling, see [┬зProgressive context scaling](./architecture.md#progressive-context-scaling)) | -| Vision encoder | [C-RADIOv4-H](./architecture.md#vision-encoder--c-radiov4-h) | -| Audio encoder | [NVIDIA Parakeet (extended via Granary, Music Flamingo)](./architecture.md#audio-encoder--parakeet-extended) | -| Video pipeline | [3D convolutions + Efficient Video Sampling (EVS)](./architecture.md#video-pipeline--3d-convolutions--efficient-video-sampling-evs) | -| GA checkpoint | [`nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-BF16`](https://huggingface.co/nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-BF16) | +| Training context schedule | 16K тЖТ 49K тЖТ 262K (progressive scaling, see [┬зProgressive context scaling](/architecture#progressive-context-scaling)) | +| Vision encoder | [C-RADIOv4-H](/architecture#vision-encoder-c-radiov4-h) | +| Audio encoder | [NVIDIA Parakeet (extended via Granary, Music Flamingo)](/architecture#audio-encoder-parakeet-extended) | +| Video pipeline | [3D convolutions + Efficient Video Sampling (EVS)](/architecture#video-pipeline-3d-convolutions-efficient-video-sampling-evs) | +| GA checkpoint | [nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-BF16](https://huggingface.co/nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-BF16) | | License | [NVIDIA Nemotron Open Model License](https://huggingface.co/nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-BF16) (enterprise-friendly, on-prem and any deployment) | -For the full architectural deep-dive тАФ including why EVS drives the throughput numbers, the perception-sub-agent framing, and the released training-data scale (127B / 124M / 20├Ч25 / 11.4M) тАФ see [`architecture.md`](./architecture.md). +For the full architectural deep-dive тАФ including why EVS drives the throughput numbers, the perception-sub-agent framing, and the released training-data scale (127B / 124M / 20├Ч25 / 11.4M) тАФ see [`architecture.md`](/architecture). ### Capabilities (released benchmarks) - Best-in-class on [MMlongbench-Doc](https://github.com/mayubo2333/MMLongBench-Doc) and [OCRBenchV2](https://github.com/Yuliang-Liu/MultimodalOCR) (document intelligence) + - Leading on [WorldSense](https://huggingface.co/datasets/honglyhly/WorldSense), [DailyOmni](https://lliar-liar.github.io/Daily-Omni/#leaderboard), [VoiceBench](https://huggingface.co/datasets/hlt-lab/voicebench) (video / audio understanding) + - **~9.2├Ч** greater effective system capacity on video reasoning, **~7.4├Ч** on multi-document workloads vs. comparable open omni models -- "Highest throughput across every task" in MediaPerf; "lowest inference cost for video-level tagging" -- See [`inference.md`](./inference.md) for engines, quantization paths, hardware support, and deployment + +- тАЬHighest throughput across every taskтАЭ in MediaPerf; тАЬlowest inference cost for video-level taggingтАЭ + +- See [`inference.md`](/inference) for engines, quantization paths, hardware support, and deployment ### Use cases -Designed as a **multimodal perception sub-agent** for agentic AI тАФ finance, healthcare, scientific discovery, media/entertainment, ad-tech. Especially strong on long-horizon reasoning over complex documents and large video batches. The [NemoClaw sandbox](./inference.md#nemoclaw--privacy-first-video-processing) provides privacy-first video processing for compliance-bounded workloads. +Designed as a **multimodal perception sub-agent** for agentic AI тАФ finance, healthcare, scientific discovery, media/entertainment, ad-tech. Especially strong on long-horizon reasoning over complex documents and large video batches. The [NemoClaw sandbox](/inference#nemoclaw-privacy-first-video-processing) provides privacy-first video processing for compliance-bounded workloads. ### Upstream training recipes This recipe folder is the cookbook view; upstream sources are: | Stage | Upstream guide | Branch root | -|---|---|---| -| SFT (Megatron-Bridge) | [`nemotron_3_omni` README](https://github.com/NVIDIA-NeMo/Megatron-Bridge/blob/nemotron_3_omni/examples/models/vlm/nemotron_3_omni/README.md) | [`Megatron-Bridge` `nemotron_3_omni`](https://github.com/NVIDIA-NeMo/Megatron-Bridge/tree/nemotron_3_omni) | -| RL (NeMo-RL) | [`nano-v3-omni` Nemotron 3 Nano Omni guide](https://github.com/NVIDIA-NeMo/RL/blob/nano-v3-omni/docs/guides/nemotron-3-nano-omni.md) | [`NeMo-RL` `nano-v3-omni`](https://github.com/NVIDIA-NeMo/RL/tree/nano-v3-omni) | +| --- | --- | --- | +| SFT (Megatron-Bridge) | [nemotron_3_omni README](https://github.com/NVIDIA-NeMo/Megatron-Bridge/blob/nemotron_3_omni/examples/models/vlm/nemotron_3_omni/README.md) | [Megatron-Bridge nemotron_3_omni](https://github.com/NVIDIA-NeMo/Megatron-Bridge/tree/nemotron_3_omni) | +| RL (NeMo-RL) | [nano-v3-omni Nemotron 3 Nano Omni guide](https://github.com/NVIDIA-NeMo/RL/blob/nano-v3-omni/docs/guides/nemotron-3-nano-omni.md) | [NeMo-RL nano-v3-omni](https://github.com/NVIDIA-NeMo/RL/tree/nano-v3-omni) | | Evaluation | Same Megatron-Bridge path | (above) | -| Image training data | тАФ | [`huggingface.co/datasets/nvidia/Nemotron-Image-Training-v3`](https://huggingface.co/datasets/nvidia/Nemotron-Image-Training-v3) | -| Long-document SDG | [Long-document SDG guide](../data/sdg/long-document.md) | [`src/nemotron/recipes/data/sdg/long-document/`](https://github.com/NVIDIA-NeMo/Nemotron/tree/main/src/nemotron/recipes/data/sdg/long-document) (structure released; bodies port at upstream release) | +| Image training data | тАФ | [huggingface.co/datasets/nvidia/Nemotron-Image-Training-v3](https://huggingface.co/datasets/nvidia/Nemotron-Image-Training-v3) | +| Long-document SDG | [Long-document SDG guide](/../data/sdg/long-document) | [src/nemotron/recipes/data/sdg/long-document/](https://github.com/NVIDIA-NeMo/Nemotron/tree/main/src/nemotron/recipes/data/sdg/long-document) (structure released; bodies port at upstream release) | ## Current Limitations The recipe structure, CLI, Dockerfiles, and configs are all in place, but some pieces still depend on upstream work or internal-only data: -- **Evaluation stage not yet included тАФ coming soon.** The omni3 CLI doesn't have an `eval` subcommand today. Multimodal sanity checks against a trained checkpoint run via `nemotron omni3 model eval`; see [SFT guide ┬зModel lifecycle](./sft.md). A dedicated eval stage that compiles a benchmark task list and submits through `nemo-evaluator-launcher` will land in a follow-up release. +- **Evaluation stage not yet included тАФ coming soon.** The omni3 CLI doesnтАЩt have an `eval` subcommand today. Multimodal sanity checks against a trained checkpoint run via `nemotron omni3 model eval`; see [SFT guide ┬зModel lifecycle](/sft). A dedicated eval stage that compiles a benchmark task list and submits through `nemo-evaluator-launcher` will land in a follow-up release. + - **SFT default uses CORD-v2 (open); Valor32k is an opt-in.** `default.yaml` pulls [CORD-v2](https://huggingface.co/datasets/naver-clova-ix/cord-v2) from HuggingFace via the `vlm-hf` loader тАФ no local shard building required. `-c valor32k` switches to the full audio-visual-language flow, but requires internal access to a prepared Valor32k-AVQA Energon dataset (the raw-shard builder is internal-only at release). `data_prep.py` validates the Energon path or emits a manifest for HF тАФ it does not assemble shards. + - **Long-document SDG pipeline is a scaffold.** `src/nemotron/recipes/data/sdg/long-document/` has 9 numbered scripts with their argparse surfaces and a thorough README, but the script bodies raise `NotImplementedError` тАФ port bodies from upstream at release time. See `designs/long-document-sdg-pipeline.md`. + - **Pinned to release branches.** The SFT Dockerfile pulls `github.com/NVIDIA-NeMo/Megatron-Bridge @ nemotron_3_omni` (and `github.com/NVIDIA/Megatron-LM @ nemotron_3_omni` as a recursive submodule fetch); the RL flow uses `github.com/NVIDIA/NeMo-RL @ nano-v3-omni`. These are the active release branches for Nemotron 3 Omni тАФ bump to a versioned tag (or `main`) once these changes merge upstream. -The linked stage guides (SFT / RL / Evaluate) call out each stage's specific limitations. +The linked stage guides (SFT / RL / Evaluate) call out each stageтАЩs specific limitations. ## Quick Start ### Prerequisites -- **Slurm cluster** with GPU nodes for SFT, RL, and evaluation тАФ see [Execution through NeMo-Run](../../nemo_runspec/nemo-run.md) -- **[Weights & Biases](../wandb.md)** for experiment tracking and [artifact lineage](../artifacts.md) +- **Slurm cluster** with GPU nodes for SFT, RL, and evaluation тАФ see [Execution through NeMo-Run](/../../nemo_runspec/nemo-run) + +- **[Weights & Biases](/../wandb)** for experiment tracking and [artifact lineage](/../artifacts) + - **Build-capable execution profile** for `nemotron omni3 build ` jobs -- **GA checkpoint**: [nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-BF16](https://huggingface.co/nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-BF16) (BF16 weights). FP8 and NVFP4 quantization paths are supported by the inference engines listed in [`inference.md`](./inference.md#inference-engines). + +- **GA checkpoint**: [nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-BF16](https://huggingface.co/nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-BF16) (BF16 weights). FP8 and NVFP4 quantization paths are supported by the inference engines listed in [`inference.md`](/inference#inference-engines). ### Installation @@ -116,15 +129,14 @@ gpus_per_node = 8 mounts = ["/lustre:/lustre"] ``` -> See [How container builds authenticate](../../nemo_runspec/nemo-run.md#how-the-build-container-authenticates-with-private-registries) -> for how the dispatcher reuses your existing -> `~/.config/enroot/.credentials` to pull `nvcr.io` images inside the -> build container тАФ no separate podman login required. +> See [How container builds authenticate](/../../nemo_runspec/nemo-run#how-the-build-container-authenticates-with-private-registries) +for how the dispatcher reuses your existing +`~/.config/enroot/.credentials` to pull `nvcr.io` images inside the +build container тАФ no separate podman login required. ### Run the Pipeline
    - ```console // Stage 0: SFT $ uv run nemotron omni3 build sft --run YOUR-CLUSTER @@ -150,25 +162,28 @@ $ uv run nemotron omni3 rl vision --run YOUR-CLUSTER ```
    - -> **Note**: `omni3 build` submits a short CPU-only container build job through [NeMo-Run](../../nemo_runspec/nemo-run.md). The build produces `${build_cache_dir}/containers/omni3-{sft,rl}.sqsh` (squashfs) which pyxis mounts directly at training time тАФ no per-job `enroot import`. +> **Note**: `omni3 build` submits a short CPU-only container build job through [NeMo-Run](/../../nemo_runspec/nemo-run). The build produces `$\{build_cache_dir\}/containers/omni3-\{sft,rl\}.sqsh` (squashfs) which pyxis mounts directly at training time тАФ no per-job `enroot import`. ## Resources - **Model checkpoint**: [nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-BF16](https://huggingface.co/nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-BF16) + - **Release blog**: [NVIDIA Nemotron 3 Nano Omni тАФ multimodal agent reasoning](https://developer.nvidia.com/blog/nvidia-nemotron-3-nano-omni-powers-multimodal-agent-reasoning-in-a-single-efficient-open-model/) -- **SFT recipe**: [Stage 0: SFT](./sft.md) -- **RL recipe**: [Stage 1: RL](./rl.md) + +- **SFT recipe**: [Stage 0: SFT](/sft) + +- **RL recipe**: [Stage 1: RL](/rl) + - **Image training data**: [`nvidia/Nemotron-Image-Training-v3`](https://huggingface.co/datasets/nvidia/Nemotron-Image-Training-v3) ## Training Pipeline | Stage | Name | Purpose | Guide | -|-------|------|---------|-------| -| 0 | [SFT](./sft.md) | Fine-tune the GA checkpoint on Valor32k and related multimodal variants | [sft.md](./sft.md) | -| 1 | [RL](./rl.md) | Multi-stage Omni RL: MPO тЖТ text RL тЖТ vision RL | [rl.md](./rl.md) | +| --- | --- | --- | --- | +| 0 | [SFT](/sft) | Fine-tune the GA checkpoint on Valor32k and related multimodal variants | [sft.md](/sft) | +| 1 | [RL](/rl) | Multi-stage Omni RL: MPO тЖТ text RL тЖТ vision RL | [rl.md](/rl) | -> An evaluation stage (`nemotron omni3 eval`) is on the roadmap; until it lands, run benchmarks via `nemotron omni3 model eval` (see [SFT guide ┬зModel lifecycle](./sft.md)). +> An evaluation stage (`nemotron omni3 eval`) is on the roadmap; until it lands, run benchmarks via `nemotron omni3 model eval` (see [SFT guide ┬зModel lifecycle](/sft)). ## Pipeline Overview @@ -192,44 +207,47 @@ flowchart LR The upstream synthetic-data pipeline lives outside the family tree under `src/nemotron/recipes/data/sdg/long-document/`. That keeps the recipe split explicit: -- **`src/nemotron/recipes/data/curation/`** тАФ filter, dedup, and curate existing corpora (for example [Nemotron-CC](../data/curation/nemotron-cc.md)) +- **`src/nemotron/recipes/data/curation/`** тАФ filter, dedup, and curate existing corpora (for example [Nemotron-CC](/../data/curation/nemotron-cc)) + - **`src/nemotron/recipes/data/sdg/`** тАФ generate new datasets, including the long-document SDG pipeline consumed by Omni SFT + - **`src/nemotron/recipes/omni3/`** тАФ family-specific training, RL, and evaluation stages ## Stage Summaries ### Stage 0: SFT -Omni SFT owns its own `Dockerfile`, `data_prep.py`, and `train.py` (built via the `nemotron omni3 build sft` dispatcher). The stage ports the Valor32k flow plus LoRA/PEFT variants for image-text and audio-text tuning. The released open-data configs target shorter sequence lengths; the upstream 16K тЖТ 49K тЖТ 262K progressive schedule is documented in [`architecture.md`](./architecture.md#progressive-context-scaling). +Omni SFT owns its own `Dockerfile`, `data_prep.py`, and `train.py` (built via the `nemotron omni3 build sft` dispatcher). The stage ports the Valor32k flow plus LoRA/PEFT variants for image-text and audio-text tuning. The released open-data configs target shorter sequence lengths; the upstream 16K тЖТ 49K тЖТ 262K progressive schedule is documented in [`architecture.md`](/architecture#progressive-context-scaling). -тЖТ [SFT Guide](./sft.md) +тЖТ [SFT Guide](/sft) ### Stage 1: RL The RL stack uses one shared NeMo-RL container and three sub-stages, mirroring the upstream [`nano-v3-omni` flow](https://github.com/NVIDIA-NeMo/RL/tree/nano-v3-omni): 1. **MPO** тАФ multimodal preference optimization on the public MMPR dataset (~83K-row preference triples per subset) + 2. **Text RL** тАФ GRPO continuation of alignment on `nvidia/Nemotron-3-Nano-RL-Training-Blend` + 3. **Vision RL** тАФ GRPO on MMPR-Tiny (data prep ready; training launcher pending upstream) The 20 RL datasets / 25 environments / ~2.3M rollouts referenced in the [release blog](https://developer.nvidia.com/blog/nvidia-nemotron-3-nano-omni-powers-multimodal-agent-reasoning-in-a-single-efficient-open-model/) compose the full upstream alignment corpus; this recipe surfaces the public/open-source subset. -тЖТ [RL Guide](./rl.md) ┬╖ [RL Data Prep](./rl/data-prep.md) +тЖТ [RL Guide](/rl) ┬╖ [RL Data Prep](/rl/data-prep) ## Execution Options -All Omni commands support [NeMo-Run](../../nemo_runspec/nemo-run.md) execution modes: +All Omni commands support [NeMo-Run](/../../nemo_runspec/nemo-run) execution modes: | Option | Behavior | Use Case | -|--------|----------|----------| -| `--run ` | AttachedтАФsubmits job and streams logs | Interactive development | -| `--batch ` | DetachedтАФsubmits and exits immediately | Long-running jobs | -| `--dry-run` | Preview resolved config or build plan | Validation | +| --- | --- | --- | +| --run <profile> | AttachedтАФsubmits job and streams logs | Interactive development | +| --batch <profile> | DetachedтАФsubmits and exits immediately | Long-running jobs | +| --dry-run | Preview resolved config or build plan | Validation | ## CLI Reference
    - ```console $ uv run nemotron omni3 --help Usage: nemotron omni3 [OPTIONS] COMMAND [ARGS]... @@ -250,23 +268,18 @@ Usage: nemotron omni3 [OPTIONS] COMMAND [ARGS]... ```
    - ## Further Reading -- [Stage 0: SFT](./sft.md) -- [Stage 1: RL](./rl.md) -- [Architecture](./architecture.md) -- [Inference & Deployment](./inference.md) -- [Artifact Lineage](../artifacts.md) -- [Execution through NeMo-Run](../../nemo_runspec/nemo-run.md) -- [W&B Integration](../wandb.md) - -```{toctree} -:hidden: - -sft.md -rl.md -rl/data-prep.md -architecture.md -inference.md -``` +- [Stage 0: SFT](/sft) + +- [Stage 1: RL](/rl) + +- [Architecture](/architecture) + +- [Inference & Deployment](/inference) + +- [Artifact Lineage](/../artifacts) + +- [Execution through NeMo-Run](/../../nemo_runspec/nemo-run) + +- [W&B Integration](/../wandb) diff --git a/docs/nemotron/omni3/architecture.md b/docs/fern/pages-vnightly/nemotron/omni3/architecture.mdx similarity index 63% rename from docs/nemotron/omni3/architecture.md rename to docs/fern/pages-vnightly/nemotron/omni3/architecture.mdx index d11eec840..3b1366b2e 100644 --- a/docs/nemotron/omni3/architecture.md +++ b/docs/fern/pages-vnightly/nemotron/omni3/architecture.mdx @@ -1,15 +1,19 @@ -# Nemotron 3 Nano Omni тАФ Architecture +--- +title: "Nemotron 3 Nano Omni тАФ Architecture" +slug: "nemotron/omni3/architecture.html" +description: "A deep-dive into the architectural decisions behind Nemotron 3 Nano Omni тАФ whatтАЩs in the model, why each piece is there, and where the efficiency story comes from. For training instructions see the re" +--- -A deep-dive into the architectural decisions behind Nemotron 3 Nano Omni тАФ what's in the model, why each piece is there, and where the efficiency story comes from. For training instructions see the [recipe overview](./README.md); for deployment see [`inference.md`](./inference.md). +A deep-dive into the architectural decisions behind Nemotron 3 Nano Omni тАФ whatтАЩs in the model, why each piece is there, and where the efficiency story comes from. For training instructions see the [recipe overview](/README); for deployment see [`inference.md`](/inference). -![Nemotron 3 Nano Omni hybrid MoE architecture: Parakeet audio encoder тЖТ audio adaptor, C-RADIOv4-H vision encoder + 3D convolution + Efficient Video Sampling тЖТ vision adaptor, text tokenizer, all feeding the unified 30B-A3B LLM decoder](../../assets/omni-3.png) +![Nemotron 3 Nano Omni hybrid MoE architecture: Parakeet audio encoder тЖТ audio adaptor, C-RADIOv4-H vision encoder + 3D convolution + Efficient Video Sampling тЖТ vision adaptor, text tokenizer, all feeding the unified 30B-A3B LLM decoder](../../../_images/omni-3.png) *Figure 1. Cross-modal integration. Each modality has a dedicated encoder and adaptor; all token streams converge on the unified 30B-A3B Mamba-transformer decoder, which is the only place reasoning happens.* ## Hybrid MoE decoder | Property | Value | -|---|---| +| --- | --- | | Total parameters | 30B | | Active parameters per forward pass | 3B | | Architecture | Hybrid MoE | @@ -18,11 +22,11 @@ A deep-dive into the architectural decisions behind Nemotron 3 Nano Omni тАФ wha | Max context length | 262K tokens | | Training context schedule | 16K тЖТ 49K тЖТ 262K (progressive scaling, see [┬зProgressive context scaling](#progressive-context-scaling)) | -The "A3B" in the model name (`30B-A3B`) means **30B total parameters / 3B active**: the MoE router selects a small subset of expert layers per token, so inference compute is bounded by the 3B active count rather than the 30B total. The Mamba layers handle long-context state with linear time/memory; the transformer layers handle the local-reasoning hot path. The two compose into a unified decoder that all modality encoders feed into тАФ so reasoning, planning, and tool-calling stay in one place rather than fanning out to per-modality heads. +The тАЬA3BтАЭ in the model name (`30B-A3B`) means **30B total parameters / 3B active**: the MoE router selects a small subset of expert layers per token, so inference compute is bounded by the 3B active count rather than the 30B total. The Mamba layers handle long-context state with linear time/memory; the transformer layers handle the local-reasoning hot path. The two compose into a unified decoder that all modality encoders feed into тАФ so reasoning, planning, and tool-calling stay in one place rather than fanning out to per-modality heads. ## Vision encoder тАФ C-RADIOv4-H -The vision side uses **C-RADIOv4-H**, a high-resolution image encoder. It's the same family as RADIO (Robust Anti-Distillation On vision foundation models) тАФ a learned distillation across multiple frozen teacher models (CLIP, DINOv2, SAM, etc.) that produces a single ViT capable of standing in for any of them. The "v4-H" variant is the high-res release with stronger document-understanding signal, which is part of why omni places best-in-class on **MMlongbench-Doc** and **OCRBenchV2**. +The vision side uses **C-RADIOv4-H**, a high-resolution image encoder. ItтАЩs the same family as RADIO (Robust Anti-Distillation On vision foundation models) тАФ a learned distillation across multiple frozen teacher models (CLIP, DINOv2, SAM, etc.) that produces a single ViT capable of standing in for any of them. The тАЬv4-HтАЭ variant is the high-res release with stronger document-understanding signal, which is part of why omni places best-in-class on **MMlongbench-Doc** and **OCRBenchV2**. ## Audio encoder тАФ Parakeet (extended) @@ -33,41 +37,45 @@ Audio uses **NVIDIA Parakeet** as the encoder, extended via the **Granary** and Video is handled in two stages: **3D convolutions** capture spatiotemporal features natively (motion is a first-class signal, not inferred from a frame-by-frame transcript), and an **Efficient Video Sampling (EVS) layer** compresses high-density visual tokens across consecutive frames before they hit the decoder. This is the key efficiency lever for the model. The release blog cites: + - **~9.2├Ч greater effective system capacity** vs. comparable open omni models on video reasoning workloads + - **~7.4├Ч greater capacity** on multi-document workloads -- **"Highest throughput across every task"** in the MediaPerf benchmark, **"lowest inference cost for video-level tagging"** + +- **тАЬHighest throughput across every taskтАЭ** in the MediaPerf benchmark, **тАЬlowest inference cost for video-level taggingтАЭ** Why 3D conv + EVS is decisive vs. transcript-style approaches: -- **3D conv preserves motion**. Frame-by-frame transcript pipelines can't see motion natively тАФ they hallucinate temporal relations from spatial features in adjacent frames. Native 3D conv gives the decoder real motion features. +- **3D conv preserves motion**. Frame-by-frame transcript pipelines canтАЩt see motion natively тАФ they hallucinate temporal relations from spatial features in adjacent frames. Native 3D conv gives the decoder real motion features. + - **EVS bounds the token count**. Without EVS, a 60-second video at 24 fps ├Ч per-frame patch count blows past 262K tokens trivially. EVS compresses frame redundancy *before* the decoder, so the unified text decoder can still reason over the full clip in-context. -If you're doing video-heavy inference and tuning for throughput, EVS configuration is the lever to optimize тАФ see [`inference.md`](./inference.md) for runtime knobs. +If youтАЩre doing video-heavy inference and tuning for throughput, EVS configuration is the lever to optimize тАФ see [`inference.md`](/inference) for runtime knobs. ## Progressive context scaling -The **16K тЖТ 49K тЖТ 262K** sequence is a *training schedule*, not a property of the inference model. The training pipeline grows the context window in stages so the model first masters short-context cross-modal instruction-following, then extends to medium context, and finally to long context тАФ each stage unfreezing more parameters as needed. This is the same recipe shape used by Nemotron 3 Nano's pretrain тЖТ SFT тЖТ RL flow, scaled to the multimodal case. +The **16K тЖТ 49K тЖТ 262K** sequence is a *training schedule*, not a property of the inference model. The training pipeline grows the context window in stages so the model first masters short-context cross-modal instruction-following, then extends to medium context, and finally to long context тАФ each stage unfreezing more parameters as needed. This is the same recipe shape used by Nemotron 3 NanoтАЩs pretrain тЖТ SFT тЖТ RL flow, scaled to the multimodal case. > **Implementation note for this recipe folder.** The released configs in -> `src/nemotron/recipes/omni3/stage0_sft/config/` target shorter context -> lengths than the upstream 49K/262K stages тАФ those longer-context -> schedules use additional internal data and aren't fully reproducible -> from the open-source subset. The `default.yaml` open-data flow trains -> the projector only on CORD-v2 with the GA model frozen; longer-context -> stages are documented here for completeness but ship as configuration -> stubs. Operators with internal data access can reproduce them by -> bumping `seq_length` and the data path. See -> [`docs/nemotron/omni3/sft.md`](./sft.md#config-variants) for the -> per-config breakdown. +`src/nemotron/recipes/omni3/stage0_sft/config/` target shorter context +lengths than the upstream 49K/262K stages тАФ those longer-context +schedules use additional internal data and arenтАЩt fully reproducible +from the open-source subset. The `default.yaml` open-data flow trains +the projector only on CORD-v2 with the GA model frozen; longer-context +stages are documented here for completeness but ship as configuration +stubs. Operators with internal data access can reproduce them by +bumping `seq_length` and the data path. See +[`docs/nemotron/omni3/sft.md`](/sft#config-variants) for the +per-config breakdown. ## Synthetic data тАФ long-document SDG -The release blog calls out **~11.4M synthetic visual QA pairs (~45B tokens)** generated via NVIDIA NeMo Data Designer. The long-document SDG recipe is published in this repository ([guide](../data/sdg/long-document.md), [source](https://github.com/NVIDIA-NeMo/Nemotron/tree/main/src/nemotron/recipes/data/sdg/long-document)) тАФ a 9-stage pipeline with structured argparse surfaces. +The release blog calls out **~11.4M synthetic visual QA pairs (~45B tokens)** generated via NVIDIA NeMo Data Designer. The long-document SDG recipe is published in this repository ([guide](/../data/sdg/long-document), [source](https://github.com/NVIDIA-NeMo/Nemotron/tree/main/src/nemotron/recipes/data/sdg/long-document)) тАФ a 9-stage pipeline with structured argparse surfaces. ## Training scale (release figures) | Stage | Scale | -|---|---| +| --- | --- | | Adapter & encoder training | ~127B tokens, mixed modalities (text+image, text+video, text+audio, text+video+audio) | | Curated post-training examples | ~124M | | RL alignment | 20 datasets across 25 environments, ~2.3M rollouts | @@ -75,16 +83,19 @@ The release blog calls out **~11.4M synthetic visual QA pairs (~45B tokens)** ge This recipe folder reproduces the **public-data subset** of these stages тАФ see each stage doc for which datasets are open-source vs. internal-only. -## Why "perception sub-agent" +## Why тАЬperception sub-agentтАЭ The release blog frames omni as a **multimodal perception sub-agent for agentic AI** тАФ *not* a general-purpose chat model. The architecture choices follow: - **Single unified decoder** so an outer agent can call this model with any combination of modalities and get reasoning back through one stable interface + - **EVS-bounded video tokens** so the model can be invoked on full-length video inputs without per-clip pre-processing pipelines + - **Reasoning-trained checkpoint** (`Reasoning-BF16` suffix) for explicit multi-step thinking before tool calls + - **NIM + open-license** so it can drop into existing agent stacks (LangChain, LlamaIndex, custom orchestrators) without licensing friction -Stage docs ([`sft.md`](./sft.md), [`rl.md`](./rl.md)) train and align this perception-sub-agent surface тАФ instruction-following over multimodal inputs, not free-form chat. +Stage docs ([`sft.md`](/sft), [`rl.md`](/rl)) train and align this perception-sub-agent surface тАФ instruction-following over multimodal inputs, not free-form chat. ## License @@ -93,7 +104,11 @@ The model is released under the **NVIDIA Nemotron Open Model License**, which pe ## References - **[Release blog](https://developer.nvidia.com/blog/nvidia-nemotron-3-nano-omni-powers-multimodal-agent-reasoning-in-a-single-efficient-open-model/)** тАФ the canonical positioning + benchmark source for this doc + - **[Model weights тАФ `nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-BF16`](https://huggingface.co/nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-BF16)** + - **[Image training data тАФ `nvidia/Nemotron-Image-Training-v3`](https://huggingface.co/datasets/nvidia/Nemotron-Image-Training-v3)** + - **Upstream pre-training recipe**: [`NVIDIA-NeMo/Megatron-Bridge` `nemotron_3_omni`](https://github.com/NVIDIA-NeMo/Megatron-Bridge/tree/nemotron_3_omni/examples/models/vlm/nemotron_3_omni) + - **Upstream RL recipe**: [`NVIDIA-NeMo/RL` `nano-v3-omni`](https://github.com/NVIDIA-NeMo/RL/tree/nano-v3-omni) diff --git a/docs/nemotron/omni3/inference.md b/docs/fern/pages-vnightly/nemotron/omni3/inference.mdx similarity index 60% rename from docs/nemotron/omni3/inference.md rename to docs/fern/pages-vnightly/nemotron/omni3/inference.mdx index 306762161..044bb1e24 100644 --- a/docs/nemotron/omni3/inference.md +++ b/docs/fern/pages-vnightly/nemotron/omni3/inference.mdx @@ -1,17 +1,21 @@ -# Nemotron 3 Nano Omni тАФ Inference & Deployment +--- +title: "Nemotron 3 Nano Omni тАФ Inference & Deployment" +slug: "nemotron/omni3/inference.html" +description: "How to deploy and serve Nemotron 3 Nano Omni after training (or against the public release checkpoint). For training instructions see the recipe overview; for architectural background see architecture" +--- -How to deploy and serve Nemotron 3 Nano Omni after training (or against the public release checkpoint). For training instructions see the [recipe overview](./README.md); for architectural background see [`architecture.md`](./architecture.md). +How to deploy and serve Nemotron 3 Nano Omni after training (or against the public release checkpoint). For training instructions see the [recipe overview](/README); for architectural background see [`architecture.md`](/architecture). ## TL;DR | If you wantтАж | Use | -|---|---| -| Drop-in agent endpoint | NIM at [`build.nvidia.com`](https://build.nvidia.com) | +| --- | --- | +| Drop-in agent endpoint | NIM at [build.nvidia.com](https://build.nvidia.com) | | Production high-throughput serving | TensorRT-LLM (Hopper / Blackwell) with NVFP4 | | Continuous batching + streaming | vLLM | | Multi-agent + tool-calling, lightweight | SGLang | | Disaggregated serving with intelligent routing | Dynamo | -| Local laptop inference | Ollama or `llama.cpp` (GGUF) | +| Local laptop inference | Ollama or llama.cpp (GGUF) | | Local desktop UI | LM Studio | | Managed cloud | Amazon SageMaker JumpStart, Oracle Cloud, Microsoft Azure (coming soon), Dell on-premises | | Privacy-first video processing | NemoClaw sandbox (sandboxed video analysis with policy-bounded output) | @@ -19,19 +23,20 @@ How to deploy and serve Nemotron 3 Nano Omni after training (or against the publ ## Inference engines | Engine | Strengths | Hardware | Quantization | -|---|---|---|---| +| --- | --- | --- | --- | | **vLLM** | Continuous batching, streaming, broad ecosystem | Ampere / Hopper / Blackwell | FP8, NVFP4 | | **SGLang** | Lightweight, strong multi-agent + tool-calling story | Ampere / Hopper / Blackwell | FP8, NVFP4 | | **NVIDIA TensorRT-LLM** | Lowest-latency production serving, latent MoE kernels | Hopper / Blackwell | FP8, NVFP4 | | **Dynamo** | Disaggregated serving, intelligent routing, multi-tier KV caching | Hopper / Blackwell | FP8, NVFP4 | -Pyxis-mounting the trained `omni3-sft.sqsh` from this repo's training pipeline produces a container compatible with all four engines тАФ see the engine documentation for serving entry points. For the open release checkpoint, pull `nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-BF16` from Hugging Face directly and let the engine handle weight loading + (optional) on-the-fly quantization. +Pyxis-mounting the trained `omni3-sft.sqsh` from this repoтАЩs training pipeline produces a container compatible with all four engines тАФ see the engine documentation for serving entry points. For the open release checkpoint, pull `nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-BF16` from Hugging Face directly and let the engine handle weight loading + (optional) on-the-fly quantization. ## Quantization The model supports two quantization paths out of the box: - **FP8** тАФ works on Hopper and Blackwell; ~2├Ч memory reduction over BF16 with minimal quality loss for this model class + - **NVFP4** тАФ Blackwell-only; produces the highest reported throughput among open omnimodal models per the release blog Quantization is applied at the inference-engine level, not as separately published HF checkpoints. All four engines above support both formats. For Blackwell + NVFP4 specifically, the release blog reports the highest throughput of any open omnimodal model in this class. @@ -39,7 +44,7 @@ Quantization is applied at the inference-engine level, not as separately publish ## Hardware | Family | Supported | Notes | -|---|---|---| +| --- | --- | --- | | Ampere (A100, A40, тАж) | тЬЕ | BF16 / FP8; older GPUs lack NVFP4 hardware | | Hopper (H100, H200) | тЬЕ | All paths supported; FP8 most efficient | | Blackwell (B100, B200, GB200) | тЬЕ | NVFP4 unlocks peak throughput | @@ -47,8 +52,8 @@ Quantization is applied at the inference-engine level, not as separately publish ## Cloud platforms | Platform | Status | Path | -|---|---|---| -| Amazon SageMaker JumpStart | Available | Search for `Nemotron-3-Nano-Omni` in JumpStart catalog | +| --- | --- | --- | +| Amazon SageMaker JumpStart | Available | Search for Nemotron-3-Nano-Omni in JumpStart catalog | | Oracle Cloud | Available | OCI AI services | | Microsoft Azure | Coming soon (per release blog) | Azure AI catalog | | Dell Technologies | Available (on-premises / hybrid) | Dell AI Factory | @@ -59,14 +64,14 @@ The model is hosted by: - **Baseten**, **Clarifai**, **DeepInfra**, **Fireworks AI**, **Together AI**, **Vultr**, **Bitdeer**, **Crusoe**, **DigitalOcean**, **Lightning AI**, **Nebius** -These provide managed endpoints if you don't want to run inference yourself. +These provide managed endpoints if you donтАЩt want to run inference yourself. ## Local / edge | Format | Tool | Notes | -|---|---|---| -| GGUF | **`llama.cpp`** | Quantized weights for CPU / Apple Silicon / consumer GPU | -| GGUF | **Ollama** | Wraps `llama.cpp`; one-line model pull + chat | +| --- | --- | --- | +| GGUF | **llama.cpp** | Quantized weights for CPU / Apple Silicon / consumer GPU | +| GGUF | **Ollama** | Wraps llama.cpp; one-line model pull + chat | | Native | **LM Studio** | Desktop UI for local inference | | Inference Snaps | NVIDIA Inference Snaps | Pre-packaged endpoints for edge deployment | @@ -74,26 +79,28 @@ These are best for local development, offline analysis, or edge inference where ## NemoClaw тАФ privacy-first video processing -For workloads where video frames can't leave a sandboxed environment (compliance, healthcare, classified content), the model integrates with **NemoClaw**, NVIDIA's sandboxed video-processing layer. The sandbox runs the perception model, then exports only policy-bounded outputs (transcripts, summaries, structured tags) тАФ raw frames stay inside. +For workloads where video frames canтАЩt leave a sandboxed environment (compliance, healthcare, classified content), the model integrates with **NemoClaw**, NVIDIAтАЩs sandboxed video-processing layer. The sandbox runs the perception model, then exports only policy-bounded outputs (transcripts, summaries, structured tags) тАФ raw frames stay inside. -This is a distinguishing capability for the model's "perception sub-agent" framing: a downstream agent can invoke the omni model on private video content and get usable summaries back without ever handling raw frames itself. +This is a distinguishing capability for the modelтАЩs тАЬperception sub-agentтАЭ framing: a downstream agent can invoke the omni model on private video content and get usable summaries back without ever handling raw frames itself. ## Tuning notes - **Per-user interactivity**: the release blog reports throughput numbers at a fixed per-user tokens-per-second floor; aggregate throughput scales by holding user-level interactivity constant and adding concurrency. -- **EVS configuration**: for video-heavy workloads, the EVS layer's frame-compression ratio is the most important throughput knob (see [`architecture.md` ┬зVideo pipeline](./architecture.md#video-pipeline--3d-convolutions--efficient-video-sampling-evs) for the why). Lower compression тЖТ higher quality, lower throughput; tune per workload. + +- **EVS configuration**: for video-heavy workloads, the EVS layerтАЩs frame-compression ratio is the most important throughput knob (see [`architecture.md` ┬зVideo pipeline](/architecture#video-pipeline-3d-convolutions-efficient-video-sampling-evs) for the why). Lower compression тЖТ higher quality, lower throughput; tune per workload. + - **MoE expert dispatch**: the 30B-A3B router is sensitive to batch composition. For peak throughput, group requests with similar modality mix. -## Deployment from this recipe's training output +## Deployment from this recipeтАЩs training output -The training pipeline in this repo produces `${build_cache_dir}/containers/omni3-sft.sqsh`, a squashfs container that pyxis mounts directly. To use it for inference: +The training pipeline in this repo produces `$\{build_cache_dir\}/containers/omni3-sft.sqsh`, a squashfs container that pyxis mounts directly. To use it for inference: ```bash # Verify the squashfs is in place -ls -lh ${build_cache_dir}/containers/omni3-sft.sqsh +ls -lh $\{build_cache_dir\}/containers/omni3-sft.sqsh # Submit an inference job (example with vLLM) -srun --container-image=${build_cache_dir}/containers/omni3-sft.sqsh \ +srun --container-image=$\{build_cache_dir\}/containers/omni3-sft.sqsh \ --container-mounts=/lustre:/lustre,/path/to/checkpoint:/checkpoint \ bash -lc 'vllm serve /checkpoint --tensor-parallel-size 1 --gpu-memory-utilization 0.9' ``` @@ -103,6 +110,9 @@ For benchmark evaluation against a deployed checkpoint, run `nemotron omni3 mode ## References - **[Release blog](https://developer.nvidia.com/blog/nvidia-nemotron-3-nano-omni-powers-multimodal-agent-reasoning-in-a-single-efficient-open-model/)** тАФ canonical source for the throughput claims, provider list, and deployment paths + - **[NIM at build.nvidia.com](https://build.nvidia.com)** + - **[Model weights](https://huggingface.co/nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-BF16)** -- [`architecture.md`](./architecture.md) тАФ the *why* behind the inference characteristics + +- [`architecture.md`](/architecture) тАФ the *why* behind the inference characteristics diff --git a/docs/nemotron/omni3/rl.md b/docs/fern/pages-vnightly/nemotron/omni3/rl.mdx similarity index 62% rename from docs/nemotron/omni3/rl.md rename to docs/fern/pages-vnightly/nemotron/omni3/rl.mdx index 9d19ef2c5..3f8409dd7 100644 --- a/docs/nemotron/omni3/rl.md +++ b/docs/fern/pages-vnightly/nemotron/omni3/rl.mdx @@ -1,13 +1,20 @@ -# Stage 1: Reinforcement Learning (RL) +--- +title: "Stage 1: Reinforcement Learning (RL)" +slug: "nemotron/omni3/rl.html" +description: "Omni RL continues the multimodal post-training pipeline with NeMo-RL using one shared container and three explicit sub-stages. RL aligns the modelтАЩs perception-sub-agent surface тАФ preference quality o" +--- -Omni RL continues the multimodal post-training pipeline with [NeMo-RL](../nvidia-stack.md#nemo-rl) using one shared container and three explicit sub-stages. RL aligns the model's perception-sub-agent surface тАФ preference quality on visual reasoning, factual grounding for downstream agent calls, and ASR fidelity. The full upstream alignment corpus runs **~2.3M rollouts across 20 RL datasets / 25 environments** covering visual grounding, charts, vision-critical STEM, video understanding, and ASR (per the [release blog](https://developer.nvidia.com/blog/nvidia-nemotron-3-nano-omni-powers-multimodal-agent-reasoning-in-a-single-efficient-open-model/)). This recipe folder surfaces the **3 of 25** environments that have public data: MMPR (preference), the Nano RL training blend (text), and MMPR-Tiny (vision); the remaining 22 environments use internal or third-party data and aren't included. +Omni RL continues the multimodal post-training pipeline with [NeMo-RL](/../nvidia-stack#nemo-rl) using one shared container and three explicit sub-stages. RL aligns the modelтАЩs perception-sub-agent surface тАФ preference quality on visual reasoning, factual grounding for downstream agent calls, and ASR fidelity. The full upstream alignment corpus runs **~2.3M rollouts across 20 RL datasets / 25 environments** covering visual grounding, charts, vision-critical STEM, video understanding, and ASR (per the [release blog](https://developer.nvidia.com/blog/nvidia-nemotron-3-nano-omni-powers-multimodal-agent-reasoning-in-a-single-efficient-open-model/)). This recipe folder surfaces the **3 of 25** environments that have public data: MMPR (preference), the Nano RL training blend (text), and MMPR-Tiny (vision); the remaining 22 environments use internal or third-party data and arenтАЩt included. > **Shared container**: All RL sub-stages use `src/nemotron/recipes/omni3/stage1_rl/Dockerfile`. The `nemotron omni3 build rl` dispatcher turns it into `omni3-rl.sqsh` under your `build_cache_dir`. -> **Current notes** (also summarized in the [family README](./README.md#current-limitations)): -> - **All three sub-stages have working launchers** that mirror the upstream NeMo-RL `nano-v3-omni` flow (`scripts/nanov3_mpo.sh`, `scripts/nanov3_text_rl.sh`, `scripts/nanov3_vision_rl.sh`). -> - **`stage1_rl/Dockerfile` mirrors NeMo-RL's release Dockerfile** тАФ clones `NVIDIA/NeMo-RL @ nano-v3-omni` recursively (carrying the [omni vllm fork](https://github.com/aroshanghias-nvd/vllm) as a `3rdparty/vllm` submodule) and runs the same `BUILD_CUSTOM_VLLM=1` + `uv sync` flow as the upstream `docker/Dockerfile`. `omni3 build rl` produces `omni3-rl.sqsh`. -> - **`nano-v3-omni` is the active release branch for Nemotron 3 Omni**; bump to a versioned tag (or `main`) once these changes merge upstream. +> **Current notes** (also summarized in the [family README](/README#current-limitations)): + +- **All three sub-stages have working launchers** that mirror the upstream NeMo-RL `nano-v3-omni` flow (`scripts/nanov3_mpo.sh`, `scripts/nanov3_text_rl.sh`, `scripts/nanov3_vision_rl.sh`). + +- **`stage1_rl/Dockerfile` mirrors NeMo-RLтАЩs release Dockerfile** тАФ clones `NVIDIA/NeMo-RL @ nano-v3-omni` recursively (carrying the [omni vllm fork](https://github.com/aroshanghias-nvd/vllm) as a `3rdparty/vllm` submodule) and runs the same `BUILD_CUSTOM_VLLM=1` + `uv sync` flow as the upstream `docker/Dockerfile`. `omni3 build rl` produces `omni3-rl.sqsh`. + +- **`nano-v3-omni` is the active release branch for Nemotron 3 Omni**; bump to a versioned tag (or `main`) once these changes merge upstream. --- @@ -30,20 +37,20 @@ flowchart LR The shared RL tree contains: | Path | Purpose | -|------|---------| -| `stage1_rl/Dockerfile` | Shared NeMo-RL Omni image | -| `stage1_rl/data_prep.py` | Dispatcher for `-c mpo` / `-c text` / `-c vision` | -| `stage1_rl/stage1_mpo/` | MPO launcher, config, and data prep | -| `stage1_rl/stage2_text_rl/` | Text RL launcher, config, and data prep | -| `stage1_rl/stage3_vision_rl/` | Vision RL launcher stub, config, and data prep | +| --- | --- | +| stage1_rl/Dockerfile | Shared NeMo-RL Omni image | +| stage1_rl/data_prep.py | Dispatcher for -c mpo / -c text / -c vision | +| stage1_rl/stage1_mpo/ | MPO launcher, config, and data prep | +| stage1_rl/stage2_text_rl/ | Text RL launcher, config, and data prep | +| stage1_rl/stage3_vision_rl/ | Vision RL launcher stub, config, and data prep | ## Sub-Stages | Sub-stage | Command | Default input model | Data prep config | Notes | -|-----------|---------|---------------------|------------------|-------| -| MPO | `nemotron omni3 rl mpo` | `omni3-sft-model:latest` | `-c mpo` | Public MMPR preference optimization | -| Text RL | `nemotron omni3 rl text` | `omni3-rl-mpo-model:latest` | `-c text` | Continues alignment on text-only RL data | -| Vision RL | `nemotron omni3 rl vision` | `omni3-rl-text-model:latest` | `-c vision` | Data prep is wired; training launcher is still upstream-stubbed | +| --- | --- | --- | --- | --- | +| MPO | nemotron omni3 rl mpo | omni3-sft-model:latest | -c mpo | Public MMPR preference optimization | +| Text RL | nemotron omni3 rl text | omni3-rl-mpo-model:latest | -c text | Continues alignment on text-only RL data | +| Vision RL | nemotron omni3 rl vision | omni3-rl-text-model:latest | -c vision | Data prep is wired; training launcher is still upstream-stubbed | ## Build the Shared RL Container @@ -69,7 +76,6 @@ podman build -t nemotron/omni3-rl:latest -f Dockerfile . ## Quick Start
    - ```console // 1. Build the shared RL container $ uv run nemotron omni3 build rl --run YOUR-CLUSTER @@ -88,7 +94,6 @@ $ uv run nemotron omni3 rl vision --run YOUR-CLUSTER ```
    - ## Data Preparation Use one CLI command with config variants: @@ -102,19 +107,19 @@ uv run nemotron omni3 data prep rl -c vision --run YOUR-CLUSTER The configs under `stage1_rl/config/data_prep/` map to: | Config | Source | Output | -|--------|--------|--------| -| `mpo.yaml` | `hf://OpenGVLab/MMPR` (auto-downloads via `source_uri`) | `MMPR-v1.2/` cache + rewritten `meta_public.json` | -| `text.yaml` | `hf://nvidia/Nemotron-3-Nano-RL-Training-Blend` (resolved through Nano3's HF placeholder pipeline) | per-blend train/val JSONL with `responses_create_params` schema | -| `vision.yaml` | `hf://OpenGVLab/MMPR-Tiny` (auto-downloads via `source_uri`) | `MMPR-Tiny/` cache + parquet + preview | +| --- | --- | --- | +| mpo.yaml | hf://OpenGVLab/MMPR (auto-downloads via source_uri) | MMPR-v1.2/ cache + rewritten meta_public.json | +| text.yaml | hf://nvidia/Nemotron-3-Nano-RL-Training-Blend (resolved through Nano3тАЩs HF placeholder pipeline) | per-blend train/val JSONL with responses_create_params schema | +| vision.yaml | hf://OpenGVLab/MMPR-Tiny (auto-downloads via source_uri) | MMPR-Tiny/ cache + parquet + preview | When `input_dir` is empty/incomplete and `source_uri` is set, the dispatcher snapshot-downloads the HF repo before the prep stage runs. Pre-stage data manually (or set `OMNI3_MMPR_PUBLIC_RAW` / `OMNI3_MMPR_TINY_RAW`) to skip the download. -> **See [data-prep.md](rl/data-prep.md)** for the full data-prep guide: -> auto-download semantics, helper scripts under `scripts/`, output -> layouts, artifact registration, and parallel-submission notes. +> **See [data-prep.md](/rl/data-prep)** for the full data-prep guide: +auto-download semantics, helper scripts under `scripts/`, output +layouts, artifact registration, and parallel-submission notes. ## Stage-Specific Notes @@ -127,9 +132,13 @@ MPO uses the SFT checkpoint as input and launches `bash scripts/omni/step_1_nano Text RL consumes the MPO checkpoint and exposes the key launcher overrides described in the design doc: - `CONTEXT_PARALLEL_SIZE` + - `TRAIN_GLOBAL_BATCH_SIZE` + - `NUM_PROMPTS_PER_STEP` + - `NUM_GENERATIONS_PER_PROMPT` + - `WANDB_PROJECT` ### Vision RL @@ -137,7 +146,9 @@ Text RL consumes the MPO checkpoint and exposes the key launcher overrides descr The vision stage is intentionally honest about its current status: - data prep is implemented + - the command exists and resolves the expected config + - `train.py` raises `NotImplementedError` until the upstream launcher lands That keeps the pipeline wiring visible without pretending the missing upstream piece is available yet. @@ -147,10 +158,10 @@ That keeps the pipeline wiring visible without pretending the missing upstream p This stage uses: | Component | Role | Documentation | -|-----------|------|---------------| -| [NeMo-RL](../nvidia-stack.md#nemo-rl) | RL trainers and launch scripts | [Docs](https://docs.nvidia.com/nemo/rl/latest/) | +| --- | --- | --- | +| [NeMo-RL](/../nvidia-stack#nemo-rl) | RL trainers and launch scripts | [Docs](https://docs.nvidia.com/nemo/rl/latest/) | | [Ray](https://ray.io/) | Distributed execution for RL and data prep | [Docs](https://docs.ray.io/) | -| [Megatron-Core](../nvidia-stack.md#megatron-core) | Distributed training backend | [GitHub](https://github.com/NVIDIA/Megatron-LM) | +| [Megatron-Core](/../nvidia-stack#megatron-core) | Distributed training backend | [GitHub](https://github.com/NVIDIA/Megatron-LM) | ## Next Steps @@ -171,9 +182,15 @@ to a versioned tag. ## Reference - **Recipe source:** [`src/nemotron/recipes/omni3/stage1_rl/`](https://github.com/NVIDIA-NeMo/Nemotron/tree/main/src/nemotron/recipes/omni3/stage1_rl) ([README](https://github.com/NVIDIA-NeMo/Nemotron/blob/main/src/nemotron/recipes/omni3/stage1_rl/README.md)) + - **Upstream**: [NeMo-RL `nano-v3-omni` guide](https://github.com/NVIDIA-NeMo/RL/blob/nano-v3-omni/docs/guides/nemotron-3-nano-omni.md) -- [RL data prep deep-dive](./rl/data-prep.md) -- [Architecture deep-dive](./architecture.md) -- [Inference & deployment](./inference.md) -- [Back to Overview](./README.md) -- [Execution through NeMo-Run](../../nemo_runspec/nemo-run.md) + +- [RL data prep deep-dive](/rl/data-prep) + +- [Architecture deep-dive](/architecture) + +- [Inference & deployment](/inference) + +- [Back to Overview](/README) + +- [Execution through NeMo-Run](/../../nemo_runspec/nemo-run) diff --git a/docs/nemotron/omni3/rl/data-prep.md b/docs/fern/pages-vnightly/nemotron/omni3/rl/data-prep.mdx similarity index 67% rename from docs/nemotron/omni3/rl/data-prep.md rename to docs/fern/pages-vnightly/nemotron/omni3/rl/data-prep.mdx index 564fba86b..349d448f7 100644 --- a/docs/nemotron/omni3/rl/data-prep.md +++ b/docs/fern/pages-vnightly/nemotron/omni3/rl/data-prep.mdx @@ -1,15 +1,19 @@ -# RL Data Preparation +--- +title: "RL Data Preparation" +slug: "nemotron/omni3/rl/data-prep.html" +description: "The omni3 RL pipeline has three sub-stages (MPO, text RL, vision RL), each backed by its own dataset and prep flow. The CLI dispatches by -c {mpo|text|vision} and routes through a single shared data_p" +--- The omni3 RL pipeline has three sub-stages (MPO, text RL, vision RL), each backed by its own dataset and prep flow. The CLI dispatches by -`-c {mpo|text|vision}` and routes through a single shared +`-c \{mpo|text|vision\}` and routes through a single shared `data_prep.py` driver. | Sub-stage | Source | Cache shape | Backed by | -|-----------|--------|-------------|-----------| -| `mpo` | `hf://OpenGVLab/MMPR` (full preference dataset) | `MMPR/images/` + `MMPR/annotations/` + `meta_public.json` | Vendored `scripts/prepare_public_mmpr_for_mpo.py` (subprocess inside a Xenna stage) | -| `text` | `hf://nvidia/Nemotron-3-Nano-RL-Training-Blend` | per-blend train/val JSONL with `responses_create_params` schema | Shared with Nano3's text-RL recipe (`run_rl_resolve_pipeline`) | -| `vision` | `hf://OpenGVLab/MMPR-Tiny` | `MMPR-Tiny/images/` + `mmpr_tiny.parquet` + preview JSONL | In-tree `VlmPreferencePrepStage(flavor="tiny")` (no shell-out) | +| --- | --- | --- | --- | +| mpo | hf://OpenGVLab/MMPR (full preference dataset) | MMPR/images/ + MMPR/annotations/ + meta_public.json | Vendored scripts/prepare_public_mmpr_for_mpo.py (subprocess inside a Xenna stage) | +| text | hf://nvidia/Nemotron-3-Nano-RL-Training-Blend | per-blend train/val JSONL with responses_create_params schema | Shared with Nano3тАЩs text-RL recipe (run_rl_resolve_pipeline) | +| vision | hf://OpenGVLab/MMPR-Tiny | MMPR-Tiny/images/ + mmpr_tiny.parquet + preview JSONL | In-tree VlmPreferencePrepStage(flavor="tiny") (no shell-out) | All three flows go through the same shared dispatcher (`src/nemotron/cli/commands/omni3/data/prep/rl.py`) so they share @@ -34,7 +38,7 @@ flowchart LR style manifest fill:#e8f5e9,stroke:#4caf50 ``` -`ensure_raw_dir` is a precondition step: when the per-stage YAML's +`ensure_raw_dir` is a precondition step: when the per-stage YAMLтАЩs `source_uri` is set and `input_dir` is empty/incomplete, it fetches the HF snapshot into `input_dir` before the prep stage runs. Operators who pre-stage data manually (or set `OMNI3_MMPR_PUBLIC_RAW` / @@ -53,20 +57,23 @@ uv run nemotron --batch prep omni3 data prep rl -c vision Each command: 1. Resolves the per-stage YAML - (`src/nemotron/recipes/omni3/stage1_rl/config/data_prep/{mpo,text,vision}.yaml`) - merged with your env profile. +(`src/nemotron/recipes/omni3/stage1_rl/config/data_prep/\{mpo,text,vision\}.yaml`) +merged with your env profile. + 2. Downloads inputs from `source_uri` into `input_dir` if missing - (vision/mpo only; text uses `run_rl_resolve_pipeline` which downloads - directly from HF as part of the recipe). +(vision/mpo only; text uses `run_rl_resolve_pipeline` which downloads +directly from HF as part of the recipe). + 3. Runs the prep stage (Xenna single-worker pipeline) with run-hash - caching, receipts, and W&B lineage. -4. Registers the result as an artifact under `omni3/rl/{stage}/data`. +caching, receipts, and W&B lineage. + +4. Registers the result as an artifact under `omni3/rl/\{stage\}/data`. > **Submitting in parallel:** safe тАФ sibling RL configs (mpo / text / -> vision) get unique job names from `_make_job_name` (PID + random -> token), so the local config-staging file and the remote Ray code dir -> never collide between concurrent invocations. Earlier versions raced -> on a wall-clock-second timestamp; that's fixed. +vision) get unique job names from `_make_job_name` (PID + random +token), so the local config-staging file and the remote Ray code dir +never collide between concurrent invocations. Earlier versions raced +on a wall-clock-second timestamp; thatтАЩs fixed. ## Auto-download via `source_uri` @@ -91,19 +98,20 @@ input_dir: ${oc.env:OMNI3_MMPR_PUBLIC_RAW,data/mmpr_public/raw} When the dispatcher runs: - If `input_dir` already contains the required files - (`images.zip`, `mmpr_tiny.parquet` for tiny; *any* non-empty content - for mpo, since the upstream layout isn't fully declarative), it - skips the download. +(`images.zip`, `mmpr_tiny.parquet` for tiny; *any* non-empty content +for mpo, since the upstream layout isnтАЩt fully declarative), it +skips the download. + - Otherwise, if `source_uri` is set, it calls - `huggingface_hub.snapshot_download(repo_id=тАж, repo_type="dataset", - local_dir=input_dir)` and proceeds. +`huggingface_hub.snapshot_download(repo_id=тАж, repo_type="dataset", local_dir=input_dir)` and proceeds. + - If `input_dir` is missing required files *and* `source_uri` is - unset/empty, it fails fast with the exact list of missing files - and a remediation hint. +unset/empty, it fails fast with the exact list of missing files +and a remediation hint. The download lands in whatever you set `input_dir` to. Default is `data//raw` (relative to `cwd` of the Ray worker, which is -the rsync'd repo root); override per environment by exporting +the rsyncтАЩd repo root); override per environment by exporting `OMNI3_MMPR_TINY_RAW` / `OMNI3_MMPR_PUBLIC_RAW`. ## What each substage produces @@ -114,12 +122,12 @@ Cache rooted at `/MMPR-v1.2/` (where `output_dir` defaults to `/stage1_rl/data_prep/mpo/MMPR-v1.2`): -``` +```default MMPR-v1.2/ тФЬтФАтФА meta_public.json # rewritten meta with relative paths тФЬтФАтФА MMPR/ -тФВ тФЬтФАтФА images//... # extracted images.zip -тФВ тФФтФАтФА annotations/.jsonl # extracted annotations.zip +тФВ тФЬтФАтФА images/\/... # extracted images.zip +тФВ тФФтФАтФА annotations/\.jsonl # extracted annotations.zip тФЬтФАтФА mmpr_public_preview.jsonl # 2 sampled rows per subset тФЬтФАтФА prepare_public_mmpr_for_mpo_summary.json # per-run summary тФФтФАтФА .mmpr_ready # sentinel for trainer-side discovery @@ -134,7 +142,7 @@ paths, swap `_relpath_for_meta` in ### `text` -Per-blend train/val JSONL split, identical schema to Nano3's +Per-blend train/val JSONL split, identical schema to Nano3тАЩs `stage2_rl` recipe. Shared with Nano3 because the source dataset (`nvidia/Nemotron-3-Nano-RL-Training-Blend`) and output schema (`responses_create_params`-shaped JSONL) are the same. @@ -144,7 +152,7 @@ Per-blend train/val JSONL split, identical schema to Nano3's Cache rooted at `/` (defaults to `/stage1_rl/data_prep/vision`): -``` +```default vision/ тФЬтФАтФА MMPR-Tiny/images/... # extracted images.zip тФЬтФАтФА mmpr_tiny.parquet # source records, copied through @@ -160,25 +168,25 @@ operators who want to run the prep by hand or debug it outside the dispatcher: | Script | Equivalent dispatcher path | When to invoke directly | -|--------|---------------------------|------------------------| -| `scripts/prepare_mmpr_tiny_for_vision_rl.py` | `omni3 data prep rl -c vision` | Iterating on the tiny prep logic; reproducing a cache shape outside Ray; CI dry-runs. | -| `scripts/prepare_public_mmpr_for_mpo.py` | `omni3 data prep rl -c mpo` | Iterating on MMPR-Public layout; testing meta-rewrite changes; bisecting subset-extraction issues. | +| --- | --- | --- | +| scripts/prepare_mmpr_tiny_for_vision_rl.py | omni3 data prep rl -c vision | Iterating on the tiny prep logic; reproducing a cache shape outside Ray; CI dry-runs. | +| scripts/prepare_public_mmpr_for_mpo.py | omni3 data prep rl -c mpo | Iterating on MMPR-Public layout; testing meta-rewrite changes; bisecting subset-extraction issues. | Both take the same `--input-dir` / `--output-dir` shape and produce the cache layout above. The dispatcher invokes the *MMPR-Public* script -through `mpo.yaml`'s `builder_command`; the *MMPR-Tiny* logic is also +through `mpo.yaml`тАЩs `builder_command`; the *MMPR-Tiny* logic is also vendored inline in `nemotron.data_prep.stages.vlm_preference_prep._run_tiny`, so the dispatcher does not currently shell out for the tiny flavor. The standalone tiny script is for ad-hoc / reproducible-by-hand use. - - ## Output artifact registration Each successful run emits an artifact: - `art://omni3/rl/mpo/data` тЖТ `/MMPR-v1.2/meta_public.json` + - `art://omni3/rl/text/data` тЖТ `/manifest.json` + - `art://omni3/rl/vision/data` тЖТ `/` Artifact metadata captures `elapsed_sec`, `run_hash`, and (for vision) @@ -188,7 +196,7 @@ Artifact metadata captures `elapsed_sec`, `run_hash`, and (for vision) All three substages declare `resources: nodes=1, gpus_per_node=0` so they fit on the prep / CPU -partition. MMPR-Public's images.zip is ~14 GB so first-run takes +partition. MMPR-PublicтАЩs images.zip is ~14 GB so first-run takes ~5тАУ10 min on Lustre; subsequent runs short-circuit via run-hash cache. --- @@ -196,7 +204,11 @@ partition. MMPR-Public's images.zip is ~14 GB so first-run takes **Recipe sources**: - Dispatcher: `src/nemotron/cli/commands/omni3/data/prep/rl.py` + - Driver: `src/nemotron/recipes/omni3/stage1_rl/_data_prep_base.py` + - Stage logic: `src/nemotron/data_prep/stages/vlm_preference_prep.py` + - Auto-download: `src/nemotron/data_prep/recipes/rl_omni.py::ensure_raw_dir` + - Standalone scripts: `scripts/prepare_*.py` diff --git a/docs/nemotron/omni3/sft.md b/docs/fern/pages-vnightly/nemotron/omni3/sft.mdx similarity index 62% rename from docs/nemotron/omni3/sft.md rename to docs/fern/pages-vnightly/nemotron/omni3/sft.mdx index 2235ac51e..cb15504d4 100644 --- a/docs/nemotron/omni3/sft.md +++ b/docs/fern/pages-vnightly/nemotron/omni3/sft.mdx @@ -1,15 +1,22 @@ -# Stage 0: Supervised Fine-Tuning (SFT) +--- +title: "Stage 0: Supervised Fine-Tuning (SFT)" +slug: "nemotron/omni3/sft.html" +description: "Omni starts from the GA nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-BF16 checkpoint (30B-A3B hybrid Mamba-transformer MoE) and fine-tunes it with the Valor32k multimodal recipe family using Megatron" +--- -Omni starts from the GA [`nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-BF16`](https://huggingface.co/nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-BF16) checkpoint (30B-A3B hybrid Mamba-transformer MoE) and fine-tunes it with the Valor32k multimodal recipe family using [Megatron-Bridge](../nvidia-stack.md#megatron-bridge). SFT teaches the perception-sub-agent surface тАФ instruction-following over multimodal inputs тАФ that downstream RL alignment and agentic systems consume. The released configs target the open-data subset; see [`architecture.md` ┬зProgressive context scaling](./architecture.md#progressive-context-scaling) for how the open configs relate to the upstream 16K тЖТ 49K тЖТ 262K training schedule. +Omni starts from the GA [`nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-BF16`](https://huggingface.co/nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-BF16) checkpoint (30B-A3B hybrid Mamba-transformer MoE) and fine-tunes it with the Valor32k multimodal recipe family using [Megatron-Bridge](/../nvidia-stack#megatron-bridge). SFT teaches the perception-sub-agent surface тАФ instruction-following over multimodal inputs тАФ that downstream RL alignment and agentic systems consume. The released configs target the open-data subset; see [`architecture.md` ┬зProgressive context scaling](/architecture#progressive-context-scaling) for how the open configs relate to the upstream 16K тЖТ 49K тЖТ 262K training schedule. > **Container-first stage**: Omni does not ship with a pre-baked image. This stage owns the `Dockerfile` that the `nemotron omni3 build sft` dispatcher turns into `omni3-sft.sqsh`, which all later SFT/eval commands reuse via the per-cluster `build_cache_dir`. -> **Defaults** тАФ the shipped `default.yaml` uses [CORD-v2](https://huggingface.co/datasets/naver-clova-ix/cord-v2) from HuggingFace via Megatron-Bridge's `vlm-hf` loader, so `nemotron omni3 sft --run ` works out of the box with no internal data access. `-c valor32k` switches to the full audio-visual-language Energon flow but requires the internal Valor32k-AVQA dataset (see [Config Variants](#config-variants)). +> **Defaults** тАФ the shipped `default.yaml` uses [CORD-v2](https://huggingface.co/datasets/naver-clova-ix/cord-v2) from HuggingFace via Megatron-BridgeтАЩs `vlm-hf` loader, so `nemotron omni3 sft --run ` works out of the box with no internal data access. `-c valor32k` switches to the full audio-visual-language Energon flow but requires the internal Valor32k-AVQA dataset (see [Config Variants](#config-variants)). + +> **Current limitations** (also summarized in the [family README](/README#current-limitations)): + +- **Open-dataset default trains projector only.** CORD-v2 plus `freeze_language_model: true` fits on a single 8-GPU node (per QA guide ┬з5.2.2). For full-model SFT, switch to `-c image_text_peft` (LoRA on CORD-v2) or prepare your own Energon dataset and point `dataset.path` at it. + +- `nemotron omni3 data prep sft` with `-c valor32k` validates a **prepared** Energon dataset; the raw-shard builder is internal-only. With the default (HF) flow the command is a no-op manifest writer тАФ the training container pulls from the Hub on demand. -> **Current limitations** (also summarized in the [family README](./README.md#current-limitations)): -> - **Open-dataset default trains projector only.** CORD-v2 plus `freeze_language_model: true` fits on a single 8-GPU node (per QA guide ┬з5.2.2). For full-model SFT, switch to `-c image_text_peft` (LoRA on CORD-v2) or prepare your own Energon dataset and point `dataset.path` at it. -> - `nemotron omni3 data prep sft` with `-c valor32k` validates a **prepared** Energon dataset; the raw-shard builder is internal-only. With the default (HF) flow the command is a no-op manifest writer тАФ the training container pulls from the Hub on demand. -> - The `omni3-sft` Dockerfile clones `NVIDIA-NeMo/Megatron-Bridge @ nemotron_3_omni` (with `NVIDIA/Megatron-LM @ nemotron_3_omni` as a recursive submodule fetch). These are the active release branches for Nemotron 3 Omni; bump to a versioned tag (or `main`) once these changes merge upstream. +- The `omni3-sft` Dockerfile clones `NVIDIA-NeMo/Megatron-Bridge @ nemotron_3_omni` (with `NVIDIA/Megatron-LM @ nemotron_3_omni` as a recursive submodule fetch). These are the active release branches for Nemotron 3 Omni; bump to a versioned tag (or `main`) once these changes merge upstream. --- @@ -18,8 +25,8 @@ Omni starts from the GA [`nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning-BF16`](h The stage directory is `src/nemotron/recipes/omni3/stage0_sft/` and contains: | File | Purpose | -|------|---------| -| `Dockerfile` | Builds the Megatron-Bridge `nemotron_3_omni` environment | +| --- | --- | +| Dockerfile | Builds the Megatron-Bridge nemotron_3_omni environment | | `data_prep.py` | Validates or stages a prepared Valor32k Energon dataset | | `train.py` | Runs `scripts/training/run_recipe.py` with the selected recipe | @@ -36,7 +43,7 @@ uv run nemotron omni3 build sft --run YOUR-CLUSTER The canonical archive path is: ```text -${build_cache_dir}/containers/omni3-sft.sqsh +$\{build_cache_dir\}/containers/omni3-sft.sqsh ``` `build_cache_dir` is set per profile in `env.toml` and is mounted into @@ -44,7 +51,7 @@ the build container at `/nemotron-cache`. The dispatcher also pulls your `nvcr.io` credentials out of `~/.config/enroot/.credentials` and exposes them to the build container as a docker-format `auth.json`, so `FROM nvcr.io/nvidian/nemo:` resolves without a separate -podman login. See [How container builds authenticate](../../nemo_runspec/nemo-run.md#how-the-build-container-authenticates-with-private-registries) +podman login. See [How container builds authenticate](/../../nemo_runspec/nemo-run#how-the-build-container-authenticates-with-private-registries) for the full mechanism + how to extend the registry allowlist. For local iteration, you can build the same stage directly from the Dockerfile: @@ -78,8 +85,11 @@ flowchart LR The public CLI does not build Valor32k shards from scratch yet. Instead, `data_prep.py` gives the recipe a concrete staging hook by: - validating `dataset_path` + - optionally running a site-local `builder_command` + - writing `manifest.json` under `metadata_dir` + - optionally refreshing a convenience symlink with `link_path` Run it with: @@ -91,7 +101,6 @@ uv run nemotron omni3 data prep sft --run YOUR-CLUSTER ## Quick Start
    - ```console // 1. Build the container $ uv run nemotron omni3 build sft --run YOUR-CLUSTER @@ -109,19 +118,18 @@ $ uv run nemotron omni3 sft --run YOUR-CLUSTER ```
    - ## Config Variants The stage ports the QA-guide variants into explicit YAML files: | Config | Purpose | -|--------|---------| -| `default.yaml` | Full Valor32k SFT | -| `image_text_sft.yaml` | Image-text projector SFT | -| `image_text_peft.yaml` | Image-text LoRA / PEFT | -| `audio_text.yaml` | Audio-text SFT | -| `peft_valor32k.yaml` | Valor32k LoRA / PEFT | -| `tiny.yaml` | Small smoke-test config | +| --- | --- | +| default.yaml | Full Valor32k SFT | +| image_text_sft.yaml | Image-text projector SFT | +| image_text_peft.yaml | Image-text LoRA / PEFT | +| audio_text.yaml | Audio-text SFT | +| peft_valor32k.yaml | Valor32k LoRA / PEFT | +| tiny.yaml | Small smoke-test config | Select a variant with `-c`: @@ -134,12 +142,15 @@ uv run nemotron omni3 sft -c image_text_peft --run YOUR-CLUSTER The two PEFT-oriented configs are: - `image_text_peft.yaml` + - `peft_valor32k.yaml` They keep the same stage-local execution path as full SFT but swap in LoRA-oriented training settings. After training, the family also exposes the related model lifecycle commands: - `uv run nemotron omni3 model lora-merge --run YOUR-CLUSTER ...` + - `uv run nemotron omni3 model adapter-export --run YOUR-CLUSTER ...` + - `uv run nemotron omni3 model export pretrain --run YOUR-CLUSTER ...` ## Training Configuration Notes @@ -147,13 +158,13 @@ They keep the same stage-local execution path as full SFT but swap in LoRA-orien The default Omni SFT config currently uses: | Setting | Value | -|---------|-------| -| `nproc_per_node` | 8 | -| `tensor_model_parallel_size` | 4 | -| `expert_model_parallel_size` | 4 | -| `seq_length` | 4096 | -| `global_batch_size` | 128 | -| `micro_batch_size` | 1 | +| --- | --- | +| nproc_per_node | 8 | +| tensor_model_parallel_size | 4 | +| expert_model_parallel_size | 4 | +| seq_length | 4096 | +| global_batch_size | 128 | +| micro_batch_size | 1 | The model checkpoint and staged dataset are passed through the artifact system or environment overrides: @@ -170,13 +181,13 @@ dataset: This stage uses: | Component | Role | Documentation | -|-----------|------|---------------| -| [Megatron-Core](../nvidia-stack.md#megatron-core) | Distributed TP/EP training primitives | [GitHub](https://github.com/NVIDIA/Megatron-LM) | -| [Megatron-Bridge](../nvidia-stack.md#megatron-bridge) | Recipe execution and checkpoint conversion | [Docs](https://docs.nvidia.com/nemo/megatron-bridge/latest/) | +| --- | --- | --- | +| [Megatron-Core](/../nvidia-stack#megatron-core) | Distributed TP/EP training primitives | [GitHub](https://github.com/NVIDIA/Megatron-LM) | +| [Megatron-Bridge](/../nvidia-stack#megatron-bridge) | Recipe execution and checkpoint conversion | [Docs](https://docs.nvidia.com/nemo/megatron-bridge/latest/) | ## Next Steps -After SFT completes, proceed to [Stage 1: RL](./rl.md). +After SFT completes, proceed to [Stage 1: RL](/rl). ## Upstream @@ -189,8 +200,13 @@ The Dockerfile in this stage pins `NVIDIA-NeMo/Megatron-Bridge @ nemotron_3_omni ## Reference - **Recipe source:** [`src/nemotron/recipes/omni3/stage0_sft/`](https://github.com/NVIDIA-NeMo/Nemotron/tree/main/src/nemotron/recipes/omni3/stage0_sft) ([README](https://github.com/NVIDIA-NeMo/Nemotron/blob/main/src/nemotron/recipes/omni3/stage0_sft/README.md)) + - **Upstream**: [Megatron-Bridge omni SFT recipe](https://github.com/NVIDIA-NeMo/Megatron-Bridge/blob/nemotron_3_omni/examples/models/vlm/nemotron_3_omni/README.md) -- [Architecture deep-dive](./architecture.md) -- [Inference & deployment](./inference.md) -- [Back to Overview](./README.md) -- [Execution through NeMo-Run](../../nemo_runspec/nemo-run.md) + +- [Architecture deep-dive](/architecture) + +- [Inference & deployment](/inference) + +- [Back to Overview](/README) + +- [Execution through NeMo-Run](/../../nemo_runspec/nemo-run) diff --git a/docs/nemotron/super3/README.md b/docs/fern/pages-vnightly/nemotron/super3/README.mdx similarity index 70% rename from docs/nemotron/super3/README.md rename to docs/fern/pages-vnightly/nemotron/super3/README.mdx index 9b2319c1a..a52fafe43 100644 --- a/docs/nemotron/super3/README.md +++ b/docs/fern/pages-vnightly/nemotron/super3/README.mdx @@ -1,4 +1,8 @@ -# Nemotron 3 Super Training Recipe +--- +title: "Nemotron 3 Super Training Recipe" +slug: "nemotron/super3/README.html" +description: "A complete, reproducible training pipeline for Nemotron 3 SuperтАФan open, high-capacity Mixture-of-Experts hybrid Mamba-Transformer model with LatentMoE and multi-token prediction." +--- A complete, reproducible training pipeline for Nemotron 3 SuperтАФan open, high-capacity Mixture-of-Experts hybrid Mamba-Transformer model with LatentMoE and multi-token prediction. @@ -6,8 +10,10 @@ A complete, reproducible training pipeline for Nemotron 3 SuperтАФan open, high- ### Prerequisites -- **Slurm cluster** with GPU nodes (B200 recommended for NVFP4 support) тАФ see [Execution through NeMo-Run](../../nemo_runspec/nemo-run.md) -- **[Weights & Biases](../wandb.md) account** for experiment tracking and [artifact lineage](../../nemo_runspec/artifacts.md) +- **Slurm cluster** with GPU nodes (B200 recommended for NVFP4 support) тАФ see [Execution through NeMo-Run](/../../nemo_runspec/nemo-run) + +- **[Weights & Biases](/../wandb) account** for experiment tracking and [artifact lineage](/../../nemo_runspec/artifacts) + - **Container image**: `nvcr.io/nvidia/nemo:26.02.nemotron_3_super` ### Installation @@ -20,7 +26,7 @@ uv sync ### Configuration -Create an `env.toml` file (see [Execution through NeMo-Run](../../nemo_runspec/nemo-run.md) for details): +Create an `env.toml` file (see [Execution through NeMo-Run](/../../nemo_runspec/nemo-run) for details): ```toml [wandb] @@ -40,7 +46,6 @@ mounts = ["/lustre:/lustre"] ### Run the Pipeline
    - ```console // Stage 0: Pretraining $ uv run nemotron super3 data prep pretrain --run YOUR-CLUSTER @@ -59,44 +64,50 @@ $ uv run nemotron super3 eval --run YOUR-CLUSTER ```
    - ## Resources - **Tech Report**: [Nemotron 3 Super Technical Report](https://research.nvidia.com/labs/nemotron/files/NVIDIA-Nemotron-3-Super-Technical-Report.pdf) + - **Model Weights**: - - [NVIDIA-Nemotron-3-Super-120B-A12B-BF16](https://huggingface.co/nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16) (Post-trained model) - - [NVIDIA-Nemotron-3-Super-120B-A12B-FP8](https://huggingface.co/nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-FP8) (FP8 quantized) - - [NVIDIA-Nemotron-3-Super-120B-A12B-NVFP4](https://huggingface.co/nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-NVFP4) (NVFP4 quantized) - - [NVIDIA-Nemotron-3-Super-120B-A12B-Base-BF16](https://huggingface.co/nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-Base-BF16) (Base model) + + - [NVIDIA-Nemotron-3-Super-120B-A12B-BF16](https://huggingface.co/nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16) (Post-trained model) + + - [NVIDIA-Nemotron-3-Super-120B-A12B-FP8](https://huggingface.co/nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-FP8) (FP8 quantized) + + - [NVIDIA-Nemotron-3-Super-120B-A12B-NVFP4](https://huggingface.co/nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-NVFP4) (NVFP4 quantized) + + - [NVIDIA-Nemotron-3-Super-120B-A12B-Base-BF16](https://huggingface.co/nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-Base-BF16) (Base model) + - **Training Datasets**: - - [Nemotron-Pretraining-Specialized-v1.1](https://huggingface.co/datasets/nvidia/Nemotron-Pretraining-Specialized-v1.1) (Synthetic pretraining data) + + - [Nemotron-Pretraining-Specialized-v1.1](https://huggingface.co/datasets/nvidia/Nemotron-Pretraining-Specialized-v1.1) (Synthetic pretraining data) + - **Megatron-Bridge Docs**: [Nemotron 3 Super](https://github.com/NVIDIA-NeMo/Megatron-Bridge/blob/super-v3/docs/models/llm/nemotron3-super.md) - +{/* TODO - Move whatever customization docs for Super 3 to this section of the docs. +```{seealso\} +For model cards, technical report chunks, and recipe summaries, see {doc\}`/customize/models/super3/index`. +``` */} ## Training Pipeline | Stage | Name | Purpose | Guide | -|-------|------|---------|-------| -| 0 | [Pretraining](./pretrain.md) | Base model training on 25T tokens with LatentMoE and MTP | [pretrain.md](./pretrain.md) | -| 1 | [SFT](./sft.md) | Multi-domain instruction tuning with two-stage loss | [sft.md](./sft.md) | -| 2 | [RL](./rl/index.md) | Multi-environment RLVR + SWE-RL + RLHF alignment | [rl/](./rl/index.md) | -| 3 | [Quantization](./quantization.md) | FP8 and NVFP4 post-training quantization | [quantization.md](./quantization.md) | +| --- | --- | --- | --- | +| 0 | [Pretraining](/pretrain) | Base model training on 25T tokens with LatentMoE and MTP | [pretrain.md](/pretrain) | +| 1 | [SFT](/sft) | Multi-domain instruction tuning with two-stage loss | [sft.md](/sft) | +| 2 | [RL](/rl/index) | Multi-environment RLVR + SWE-RL + RLHF alignment | [rl/](/rl/index) | +| 3 | [Quantization](/quantization) | FP8 and NVFP4 post-training quantization | [quantization.md](/quantization) | | тАФ | Distillation | Knowledge distillation (see tech report) | Coming soon | -| 4 | [Evaluation](./evaluate.md) | Benchmark evaluation across 20+ benchmarks | [evaluate.md](./evaluate.md) | +| 4 | [Evaluation](/evaluate) | Benchmark evaluation across 20+ benchmarks | [evaluate.md](/evaluate) | ## Architecture -![Nemotron 3 Super architecture](../../assets/super3/super-pattern.png) +![Nemotron 3 Super architecture](../../../_images/super-pattern.png) ## Model Specifications | Specification | Value | -|---------------|-------| +| --- | --- | | **Total Parameters** | 120.6B | | **Active Parameters** | 12.7B (per forward pass) | | **Pretraining Tokens** | 25 trillion | @@ -118,47 +129,47 @@ For model cards, technical report chunks, and recipe summaries, see {doc}`/custo Two-phase curriculum on 25 trillion tokens: Phase 1 (20T, 80%) focuses on diversity across 16 data categories; Phase 2 (5T, 20%) emphasizes high-quality sources. Introduces LatentMoE for hardware-aware sparse scaling, MTP for inference acceleration, and checkpoint merging for quality tracking during the stable LR phase. Includes long-context extension to 1M tokens. -> [Pretraining Guide](./pretrain.md) +> [Pretraining Guide](/pretrain) ### Stage 1: Supervised Fine-Tuning Multi-domain instruction tuning over 7M samples covering 15+ data domains including competition math/code, software engineering, agentic programming, CUDA, financial reasoning, long context, safety, search, terminal use, SQL, and more. Uses a novel two-stage SFT loss (token-level then sample-level) and continues MTP training from pretraining. Supports three reasoning modes: reasoning-off, regular, and low-effort. -> [SFT Guide](./sft.md) +> [SFT Guide](/sft) ### Stage 2: Reinforcement Learning Three-stage RL pipeline: (1) multi-environment RLVR across 21 environments and 37 datasets covering math, code, STEM, safety, agentic tasks, and reasoning gym; (2) SWE-RL for end-to-end software engineering using OpenHands with Apptainer containers; (3) RLHF with a principle-following GenRM (Qwen3-235B initialization). -> [RL Guide](./rl/index.md) +> [RL Guide](/rl/index) ### Stage 3: Quantization Post-training quantization producing FP8 (Hopper) and NVFP4 (Blackwell) checkpoints. NVFP4 uses a hybrid PTQ recipe with AutoQuantize mixed-precision NAS achieving 99.8% median accuracy vs BF16. Includes QAD (Quantization-Aware Distillation) and Mamba state quantization with FP16 stochastic rounding. -> [Quantization Guide](./quantization.md) +> [Quantization Guide](/quantization) ### Stage 4: Evaluation Comprehensive evaluation across general knowledge (MMLU-Pro), reasoning (AIME25, HMMT, GPQA, LiveCodeBench, SciCode, HLE), agentic (TerminalBench, SWE-Bench with 3 harnesses, TauBench V2, BrowseComp, BIRD), chat & IF (IFBench, Multi-Challenge, Arena-Hard-V2), long context (AA-LCR, RULER at 256K/512K/1M), and multilingual (MMLU-ProX, WMT24++). -> [Evaluation Guide](./evaluate.md) +> [Evaluation Guide](/evaluate) ## Execution Options -All commands support [NeMo-Run](../../nemo_runspec/nemo-run.md) execution modes: +All commands support [NeMo-Run](/../../nemo_runspec/nemo-run) execution modes: | Option | Behavior | Use Case | -|--------|----------|----------| -| `--run ` | AttachedтАФsubmits job and streams logs | Interactive development | -| `--batch ` | DetachedтАФsubmits and exits immediately | Long-running jobs | -| `--dry-run` | Preview execution plan | Validation | +| --- | --- | --- | +| --run <profile> | AttachedтАФsubmits job and streams logs | Interactive development | +| --batch <profile> | DetachedтАФsubmits and exits immediately | Long-running jobs | +| --dry-run | Preview execution plan | Validation | -See [Execution through NeMo-Run](../../nemo_runspec/nemo-run.md) for profile configuration and advanced options. +See [Execution through NeMo-Run](/../../nemo_runspec/nemo-run) for profile configuration and advanced options. ## Artifact Lineage -The pipeline tracks full lineage via [W&B Artifacts](../../nemo_runspec/artifacts.md), enabling traceability from raw data to final model. +The pipeline tracks full lineage via [W&B Artifacts](/../../nemo_runspec/artifacts), enabling traceability from raw data to final model. ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryBorderColor': '#333333', 'lineColor': '#333333', 'primaryTextColor': '#333333', 'clusterBkg': '#ffffff', 'clusterBorder': '#333333'}}}%% @@ -209,7 +220,7 @@ flowchart TB style eval fill:#fce4ec,stroke:#e91e63 ``` -> [Artifact Lineage & W&B Integration](../../nemo_runspec/artifacts.md) +> [Artifact Lineage & W&B Integration](/../../nemo_runspec/artifacts) ## Open-Source Data @@ -218,7 +229,6 @@ flowchart TB ## CLI Reference
    - ```console // Show available commands $ uv run nemotron super3 --help @@ -239,38 +249,38 @@ Usage: nemotron super3 [OPTIONS] COMMAND [ARGS]... ```
    - ## Troubleshooting -**W&B authentication**: See [W&B Integration](../wandb.md) for setup. +**W&B authentication**: See [W&B Integration](/../wandb) for setup. + ```bash wandb login ``` **Container not found**: Verify image path in config files. -**Job submission fails**: Check Slurm account and partition in `env.toml`. See [Execution through NeMo-Run](../../nemo_runspec/nemo-run.md). +**Job submission fails**: Check Slurm account and partition in `env.toml`. See [Execution through NeMo-Run](/../../nemo_runspec/nemo-run). ## Further Reading -- [Stage 0: Pretraining](./pretrain.md) -- [Stage 1: SFT](./sft.md) -- [Stage 2: RL](./rl/index.md) -- [Stage 3: Quantization](./quantization.md) -- [Stage 4: Evaluation](./evaluate.md) -- [Artifact Lineage](../../nemo_runspec/artifacts.md) -- [Execution through NeMo-Run](../../nemo_runspec/nemo-run.md) -- [W&B Integration](../wandb.md) -- [NVIDIA AI Stack](../nvidia-stack.md) -- [Execution through NeMo-Run](../../nemo_runspec/nemo-run.md) -- [Data Preparation Module](../data-prep.md) - -```{toctree} -:hidden: - -pretrain.md -sft.md -rl/index.md -evaluate.md -quantization.md -``` +- [Stage 0: Pretraining](/pretrain) + +- [Stage 1: SFT](/sft) + +- [Stage 2: RL](/rl/index) + +- [Stage 3: Quantization](/quantization) + +- [Stage 4: Evaluation](/evaluate) + +- [Artifact Lineage](/../../nemo_runspec/artifacts) + +- [Execution through NeMo-Run](/../../nemo_runspec/nemo-run) + +- [W&B Integration](/../wandb) + +- [NVIDIA AI Stack](/../nvidia-stack) + +- [Execution through NeMo-Run](/../../nemo_runspec/nemo-run) + +- [Data Preparation Module](/../data-prep) diff --git a/docs/nemotron/super3/evaluate.md b/docs/fern/pages-vnightly/nemotron/super3/evaluate.mdx similarity index 77% rename from docs/nemotron/super3/evaluate.md rename to docs/fern/pages-vnightly/nemotron/super3/evaluate.mdx index c476f6d65..94a931f8a 100644 --- a/docs/nemotron/super3/evaluate.md +++ b/docs/fern/pages-vnightly/nemotron/super3/evaluate.mdx @@ -1,4 +1,8 @@ -# Stage 4: Evaluation +--- +title: "Stage 4: Evaluation" +slug: "nemotron/super3/evaluate.html" +description: "Evaluate trained Nemotron 3 Super models against standard benchmarks using NeMo Evaluator." +--- Evaluate trained Nemotron 3 Super models against standard benchmarks using [NeMo Evaluator](https://github.com/NVIDIA-NeMo/Evaluator). @@ -10,7 +14,7 @@ The evaluation recipe here covers a subset of the benchmarks used in the full te ## How Evaluation Works -The eval command resolves model artifacts from W&B lineage and uses NeMo Framework's Ray-based in-framework deployment. It defaults to evaluating the latest RL stage output. +The eval command resolves model artifacts from W&B lineage and uses NeMo FrameworkтАЩs Ray-based in-framework deployment. It defaults to evaluating the latest RL stage output. ```mermaid %%{init: {'theme': 'base', 'themeVariables': { 'primaryBorderColor': '#333333', 'lineColor': '#333333', 'primaryTextColor': '#333333'}}}%% @@ -34,10 +38,10 @@ flowchart TB ### Deployment -The model checkpoint (HuggingFace format) is converted to [Megatron-Bridge](../nvidia-stack.md#megatron-bridge) format and deployed with Ray as an OpenAI API-compatible endpoint. The evaluator launcher handles deployment, benchmark execution, and result export in a single command. +The model checkpoint (HuggingFace format) is converted to [Megatron-Bridge](/../nvidia-stack#megatron-bridge) format and deployed with Ray as an OpenAI API-compatible endpoint. The evaluator launcher handles deployment, benchmark execution, and result export in a single command. | Setting | Value | Notes | -|---------|-------|-------| +| --- | --- | --- | | Deployment backend | MBridge + Ray | In-framework NeMo deployment | | Minimum GPUs | 8 (1 node) | Expert parallelism requires 8 GPUs | | Tensor parallelism (TP) | 1 | Single-GPU tensor parallelism | @@ -52,24 +56,24 @@ The evaluation covers six categories of benchmarks, matching the tech report eva ### General Knowledge | Benchmark | Description | -|-----------|-------------| +| --- | --- | | MMLU-Pro | Massive Multitask Language Understanding (Professional) | ### Reasoning | Benchmark | Description | -|-----------|-------------| +| --- | --- | | AIME25 | American Invitational Mathematics Examination 2025 (no tools / with tools) | | HMMT | Harvard-MIT Mathematics Tournament (no tools) | | GPQA | Graduate-Level Google-Proof QA (no tools / with tools) | | LiveCodeBench v5 | Live competitive coding (2024-08 to 2025-05) | | SciCode | Scientific coding (subtask) | -| HLE | Humanity's Last Exam (no tools / with tools) | +| HLE | HumanityтАЩs Last Exam (no tools / with tools) | ### Agentic | Benchmark | Description | -|-----------|-------------| +| --- | --- | | TerminalBench | Terminal use (hard subset + v2.0) | | SWE-Bench | Software engineering (OpenHands, OpenCode, Codex harnesses + Multilingual) | | TauBench V2 | Conversational tool use (Airline, Retail, Telecom) | @@ -79,7 +83,7 @@ The evaluation covers six categories of benchmarks, matching the tech report eva ### Chat & Instruction Following | Benchmark | Description | -|-----------|-------------| +| --- | --- | | IFBench | Instruction following (prompt-level) | | Multi-Challenge | Complex multi-constraint instructions | | Arena-Hard-V2 | Hard prompt evaluation | @@ -87,14 +91,14 @@ The evaluation covers six categories of benchmarks, matching the tech report eva ### Long Context | Benchmark | Description | -|-----------|-------------| +| --- | --- | | AA-LCR | Long-context reasoning | | RULER-100 | Retrieval tasks at 256K, 512K, and 1M context | ### Multilingual | Benchmark | Description | -|-----------|-------------| +| --- | --- | | MMLU-ProX | Multilingual MMLU-Pro (averaged over languages) | | WMT24++ | Machine translation (enтЖТxx) | @@ -105,10 +109,10 @@ The evaluation covers six categories of benchmarks, matching the tech report eva Comparison against Qwen3.5-122B-A10B and GPT-OSS-120B (officially reported numbers are used when available; otherwise scores are computed using official evaluation settings): | Benchmark | N-3-Super | Qwen3.5-122B-A10B | GPT-OSS-120B | -|-----------|-----------|---------------------|--------------| -| **General Knowledge** | | | | +| --- | --- | --- | --- | +| **General Knowledge** | | | | | MMLU-Pro | 83.73 | 86.70 | 81.00 | -| **Reasoning** | | | | +| **Reasoning** | | | | | AIME25 (no tools) | 90.21 | 90.36 | 92.50 | | HMMT (no tools) | 93.67 | 91.67 | 92.33 | | GPQA (no tools) | 79.23 | 86.60 | 80.10 | @@ -117,7 +121,7 @@ Comparison against Qwen3.5-122B-A10B and GPT-OSS-120B (officially reported numbe | SciCode (subtask) | 42.05 | 42.00 | 39.00 | | HLE (no tools) | 18.26 | 25.30 | 14.90 | | HLE (with tools) | 22.82 | тАФ | 19.00 | -| **Agentic** | | | | +| **Agentic** | | | | | TerminalBench (hard) | 22.30 | 26.80 | 24.00 | | TerminalBench 2.0 | 31.00 | 37.50 | 18.70 | | SWE-Bench (OpenHands) | 60.47 | 66.40 | 41.90 | @@ -130,16 +134,16 @@ Comparison against Qwen3.5-122B-A10B and GPT-OSS-120B (officially reported numbe | TauBench V2 Average | 64.64 | 74.53 | 61.00 | | BrowseComp | 31.28 | TBD | 33.89 | | BIRD Bench | 41.80 | тАФ | 38.25 | -| **Chat & IF** | | | | +| **Chat & IF** | | | | | IFBench (prompt) | 75.03 | 76.10 | 65.00 | | Multi-Challenge | 55.23 | 61.50 | 58.29 | | Arena-Hard-V2 | 73.88 | 75.15 | 90.26 | -| **Long Context** | | | | +| **Long Context** | | | | | AA-LCR | 59.67 | 66.90 | 51.00 | | RULER-100 @ 256k | 96.30 | TBD | 52.30 | | RULER-100 @ 512k | 95.67 | TBD | 46.70 | | RULER-100 @ 1M | 91.75 | TBD | 22.30 | -| **Multilingual** | | | | +| **Multilingual** | | | | | MMLU-ProX (avg) | 80.00 | 82.20 | 75.90 | | WMT24++ (enтЖТxx) | 87.30 | 78.30 | 87.80 | @@ -148,7 +152,7 @@ Comparison against Qwen3.5-122B-A10B and GPT-OSS-120B (officially reported numbe The following table validates the MBridge deployment by comparing accuracy against research team numbers on the base (pretrained) model: | Benchmark | MBridge Deployment | Research Team | Delta | -|-----------|-------------------|---------------|-------| +| --- | --- | --- | --- | | MMLU (5-shot) | 85.86 | 85.89 | -0.03 | | ARC-Challenge (25-shot) | 95.82 | 95.65 | +0.17 | | Winogrande (5-shot) | 78.37 | 78.69 | -0.32 | @@ -162,7 +166,6 @@ The following table validates the MBridge deployment by comparing accuracy again ### Quick Start
    - ```console // Evaluate the latest RL model from the pipeline $ uv run nemotron super3 eval --run YOUR-CLUSTER @@ -178,37 +181,39 @@ $ uv run nemotron super3 eval --dry-run ```
    - -> **Note**: The `--run YOUR-CLUSTER` flag submits jobs via [NeMo-Run](../../nemo_runspec/nemo-run.md). See [Execution through NeMo-Run](../../nemo_runspec/nemo-run.md) for setup. +> **Note**: The `--run YOUR-CLUSTER` flag submits jobs via [NeMo-Run](/../../nemo_runspec/nemo-run). See [Execution through NeMo-Run](/../../nemo_runspec/nemo-run) for setup. ### Prerequisites - **[NeMo Evaluator](https://github.com/NVIDIA-NeMo/Evaluator)**: Install with `pip install "nemotron[evaluator]"` or ensure `nemo-evaluator-launcher` is available + - **`HF_TOKEN`**: Required for gated models and some benchmark datasets -- **[Weights & Biases](../wandb.md)**: For result export (optional but recommended) + +- **[Weights & Biases](/../wandb)**: For result export (optional but recommended) + - **Slurm cluster**: For remote execution ### Configuration | File | Purpose | -|------|---------| -| `config/default.yaml` | Evaluation config with deployment and benchmark tasks | +| --- | --- | +| config/default.yaml | Evaluation config with deployment and benchmark tasks | ### Default Evaluation Tasks The recipe config ships with the following default benchmarks: | Task | Benchmark | Shots | -|------|-----------|-------| -| `adlr_mmlu` | MMLU | 5-shot | -| `adlr_arc_challenge_llama_25_shot` | ARC-Challenge | 25-shot | -| `hellaswag` | HellaSwag | 10-shot | -| `openbookqa` | OpenBookQA | 0-shot | -| `adlr_winogrande_5_shot` | Winogrande | 5-shot | +| --- | --- | --- | +| adlr_mmlu | MMLU | 5-shot | +| adlr_arc_challenge_llama_25_shot | ARC-Challenge | 25-shot | +| hellaswag | HellaSwag | 10-shot | +| openbookqa | OpenBookQA | 0-shot | +| adlr_winogrande_5_shot | Winogrande | 5-shot | ### Artifact Resolution -The default config uses `${art:model,path}` for the model checkpoint: +The default config uses `$\{art:model,path\}` for the model checkpoint: ```yaml run: @@ -260,7 +265,7 @@ pip install "nemo-evaluator-launcher[all]" **2. Set your HuggingFace token** (required for gated models and some benchmarks): ```bash -export HF_TOKEN= +export HF_TOKEN=\ ``` **3. Run evaluation:** @@ -290,17 +295,19 @@ gpus_per_node = 8 mounts = ["/lustre:/lustre"] ``` -See [Execution through NeMo-Run](../../nemo_runspec/nemo-run.md) for complete configuration options. +See [Execution through NeMo-Run](/../../nemo_runspec/nemo-run) for complete configuration options. ### W&B Integration Results are automatically exported to W&B when configured: 1. **Auto-detection**: The CLI detects your local `wandb login` and propagates `WANDB_API_KEY` to evaluation containers + 2. **env.toml config**: `WANDB_PROJECT` and `WANDB_ENTITY` are loaded from `env.toml` + 3. **Auto-export**: Results are exported after evaluation completes -See [W&B Integration](../wandb.md) for setup. +See [W&B Integration](/../wandb) for setup. ### Artifact Lineage @@ -321,7 +328,7 @@ flowchart TB style results fill:#e8f5e9,stroke:#4caf50 ``` -> [Artifact Lineage & W&B Integration](../../nemo_runspec/artifacts.md) +> [Artifact Lineage & W&B Integration](/../../nemo_runspec/artifacts) --- @@ -330,45 +337,54 @@ flowchart TB This stage uses the following components: | Component | Role | Documentation | -|-----------|------|---------------| +| --- | --- | --- | | [NeMo Evaluator](https://github.com/NVIDIA-NeMo/Evaluator) | Benchmark evaluation framework and launcher | [GitHub](https://github.com/NVIDIA-NeMo/Evaluator) | -| [NeMo Framework](../nvidia-stack.md) | Ray-based in-framework model deployment | [Docs](https://docs.nvidia.com/nemo/) | +| [NeMo Framework](/../nvidia-stack) | Ray-based in-framework model deployment | [Docs](https://docs.nvidia.com/nemo/) | ### Parallelism Configuration | Setting | Value | Purpose | -|---------|-------|---------| -| `tensor_parallel_size` | 1 | Tensor parallelism per GPU | -| `expert_model_parallel_size` | 8 | Expert parallelism for MoE layers | -| `num_gpus` | 8 | Total GPUs per node | +| --- | --- | --- | +| tensor_parallel_size | 1 | Tensor parallelism per GPU | +| expert_model_parallel_size | 8 | Expert parallelism for MoE layers | +| num_gpus | 8 | Total GPUs per node | --- ## Troubleshooting | Problem | Solution | -|---------|----------| -| `nemo-evaluator-launcher` not found | Install with `pip install "nemotron[evaluator]"` | -| W&B authentication fails | Run `wandb login`. See [W&B Integration](../wandb.md) | +| --- | --- | +| nemo-evaluator-launcher not found | Install with pip install "nemotron[evaluator]" | +| W&B authentication fails | Run wandb login. See [W&B Integration](/../wandb) | | Model deployment fails | Check parallelism settings match GPU config (TP=1, EP=8 for Super3) | -| Artifact resolution fails | Verify artifact exists in W&B. Use `deployment.checkpoint_path=/explicit/path` to bypass | -| Task not found | List available tasks with `nemo-evaluator-launcher ls tasks` | +| Artifact resolution fails | Verify artifact exists in W&B. Use deployment.checkpoint_path=/explicit/path to bypass | +| Task not found | List available tasks with nemo-evaluator-launcher ls tasks | --- ## Previous Stages -- [Stage 0: Pretraining](./pretrain.md) тАФ Pretrain the base model -- [Stage 1: SFT](./sft.md) тАФ Instruction tuning -- [Stage 2: RL](./rl/index.md) тАФ Reinforcement learning alignment -- [Stage 3: Quantization](./quantization.md) тАФ Post-training quantization +- [Stage 0: Pretraining](/pretrain) тАФ Pretrain the base model + +- [Stage 1: SFT](/sft) тАФ Instruction tuning + +- [Stage 2: RL](/rl/index) тАФ Reinforcement learning alignment + +- [Stage 3: Quantization](/quantization) тАФ Post-training quantization ## Reference - [NeMo Evaluator](https://github.com/NVIDIA-NeMo/Evaluator) тАФ Upstream evaluation framework + - [Nemotron 3 Super Reproducibility Guide](https://github.com/NVIDIA-NeMo/Evaluator/blob/main/packages/nemo-evaluator-launcher/examples/nemotron/nemotron-3-super/reproducibility.md) тАФ Full reproduction instructions with configs and expected scores -- [Artifact Lineage](../../nemo_runspec/artifacts.md) тАФ W&B artifact system -- [Execution through NeMo-Run](../../nemo_runspec/nemo-run.md) тАФ Cluster configuration -- [W&B Integration](../wandb.md) тАФ Credentials and export setup + +- [Artifact Lineage](/../../nemo_runspec/artifacts) тАФ W&B artifact system + +- [Execution through NeMo-Run](/../../nemo_runspec/nemo-run) тАФ Cluster configuration + +- [W&B Integration](/../wandb) тАФ Credentials and export setup + - **Recipe Source:** `src/nemotron/recipes/super3/stage3_eval/` -- [Back to Overview](./README.md) + +- [Back to Overview](/README) diff --git a/docs/nemotron/super3/pretrain.md b/docs/fern/pages-vnightly/nemotron/super3/pretrain.mdx similarity index 73% rename from docs/nemotron/super3/pretrain.md rename to docs/fern/pages-vnightly/nemotron/super3/pretrain.mdx index cb44c3b17..fcc11bc99 100644 --- a/docs/nemotron/super3/pretrain.md +++ b/docs/fern/pages-vnightly/nemotron/super3/pretrain.mdx @@ -1,6 +1,10 @@ -# Stage 0: Pretraining +--- +title: "Stage 0: Pretraining" +slug: "nemotron/super3/pretrain.html" +description: "This stage trains the base Nemotron 3 Super model using Megatron-Bridge." +--- -This stage trains the base Nemotron 3 Super model using [Megatron-Bridge](../nvidia-stack.md#megatron-bridge). +This stage trains the base Nemotron 3 Super model using [Megatron-Bridge](/../nvidia-stack#megatron-bridge). Nemotron 3 Super is a **hybrid Mamba-Transformer-MoE** model with multi-token prediction (MTP) and LatentMoE, combining state-space models for efficiency, attention for global context, LatentMoE for hardware-aware sparse scaling, and MTP for improved training signal and inference acceleration. @@ -8,7 +12,7 @@ Nemotron 3 Super is a **hybrid Mamba-Transformer-MoE** model with multi-token pr ## Training Methodology -> **Training Framework**: Pretraining is implemented using [Megatron-Bridge](https://docs.nvidia.com/nemo/megatron-bridge/latest/)'s `pretrain()` entry point. See [Training Entry Points](https://docs.nvidia.com/nemo/megatron-bridge/latest/training/entry-points.html) for implementation details. +> **Training Framework**: Pretraining is implemented using [Megatron-Bridge](https://docs.nvidia.com/nemo/megatron-bridge/latest/)тАЩs `pretrain()` entry point. See [Training Entry Points](https://docs.nvidia.com/nemo/megatron-bridge/latest/training/entry-points.html) for implementation details. ### Model Architecture @@ -17,7 +21,7 @@ Nemotron 3 Super extends the hybrid Mamba-Transformer MoE design from Nemotron 3 #### Architecture Dimensions | Configuration | Value | -|---------------|-------| +| --- | --- | | **Total Layers** | 88 | | **Model Dimension** | 4096 | | **Q-Heads** | 32 | @@ -36,31 +40,35 @@ Nemotron 3 Super extends the hybrid Mamba-Transformer MoE design from Nemotron 3 #### LatentMoE: Hardware-Aware Expert Design -Nemotron 3 Super is the first model to scale sparsely using **LatentMoE** rather than standard MoE layers. In LatentMoE, input tokens are projected from the hidden dimension $d$ into a smaller latent dimension $\ell$ (1024) for routing and expert computation, reducing routed parameter loads and all-to-all traffic by a factor of $d/\ell$. +Nemotron 3 Super is the first model to scale sparsely using **LatentMoE** rather than standard MoE layers. In LatentMoE, input tokens are projected from the hidden dimension d into a smaller latent dimension \ell (1024) for routing and expert computation, reducing routed parameter loads and all-to-all traffic by a factor of d/\ell. -These savings are used to increase both the total number of experts (to 512) and the top-k active experts per token (to 22), improving model accuracy at approximately constant inference cost. All non-routed computationsтАФincluding the routing gate, shared expert computation, and non-expert layersтАФremain in the full hidden dimension $d$. +These savings are used to increase both the total number of experts (to 512) and the top-k active experts per token (to 22), improving model accuracy at approximately constant inference cost. All non-routed computationsтАФincluding the routing gate, shared expert computation, and non-expert layersтАФremain in the full hidden dimension d. **Key design principles:** -- Reducing hidden dimension $d$ for routed computation relieves memory bandwidth and communication bottlenecks -- Increasing both total experts $N$ and active experts $K$ improves quality by exponentially expanding the space of expert combinations + +- Reducing hidden dimension d for routed computation relieves memory bandwidth and communication bottlenecks + +- Increasing both total experts N and active experts K improves quality by exponentially expanding the space of expert combinations + - Shared experts provide additional knowledge sharing across tokens -The MoE blocks employ squared ReLU activations, a sigmoid router with expert biasing, and aux-loss-free load balancing (update rate $10^{-3}$) paired with standard load balancing loss (coefficient $10^{-4}$). +The MoE blocks employ squared ReLU activations, a sigmoid router with expert biasing, and aux-loss-free load balancing (update rate 10^\{-3\}) paired with standard load balancing loss (coefficient 10^\{-4\}). #### Multi-Token Prediction (MTP) MTP optimizes the model to predict multiple future tokens at each position, improving both training quality and inference efficiency: - **Quality improvement**: Encourages representations that capture multi-step dependencies and longer-range structure + - **Inference acceleration**: MTP heads function as a native speculative decoding engine, generating candidate continuations verified by the main model in a single forward pass -**Shared-weight design for robust autoregressive drafting:** Unlike standard MTP with $N$ independent heads, Nemotron 3 Super shares parameters across MTP heads during training. This yields a unified prediction head that can be applied recursively at inference to generate longer drafts with stable acceptance behavior. The model achieves the highest overall average acceptance length (3.45 on SPEED-Bench) across all domains compared to DeepSeek-R1 (2.70) and is competitive with Qwen3-Next (3.33). +**Shared-weight design for robust autoregressive drafting:** Unlike standard MTP with N independent heads, Nemotron 3 Super shares parameters across MTP heads during training. This yields a unified prediction head that can be applied recursively at inference to generate longer drafts with stable acceptance behavior. The model achieves the highest overall average acceptance length (3.45 on SPEED-Bench) across all domains compared to DeepSeek-R1 (2.70) and is competitive with Qwen3-Next (3.33). #### Hybrid Interleaving Pattern -![Nemotron 3 Super architecture pattern](../../assets/super3/super-pattern.png) +![Nemotron 3 Super architecture pattern](../../../_images/super-pattern.png) -The 88-layer stack follows a periodic interleaving pattern where MoE layers are paired with Mamba-2 blocks. A limited number of self-attention layers are strategically inserted as global "anchors" to enable full-token interaction and long-range information routing. The attention layers employ Grouped-Query Attention (GQA) with 32 query heads and 2 KV heads. Consistent with the Nemotron family, the model omits positional embeddings, dropout, and bias terms in linear layers, uses RMSNorm for normalization, and maintains un-tied embedding and output weights. +The 88-layer stack follows a periodic interleaving pattern where MoE layers are paired with Mamba-2 blocks. A limited number of self-attention layers are strategically inserted as global тАЬanchorsтАЭ to enable full-token interaction and long-range information routing. The attention layers employ Grouped-Query Attention (GQA) with 32 query heads and 2 KV heads. Consistent with the Nemotron family, the model omits positional embeddings, dropout, and bias terms in linear layers, uses RMSNorm for normalization, and maintains un-tied embedding and output weights. This synergy enables up to **6.4x higher inference throughput** compared to similarly-sized Transformer MoEs (e.g., GPT-OSS-120B) under 8K input / 16K output workloads. @@ -73,7 +81,7 @@ This synergy enables up to **6.4x higher inference throughput** compared to simi Several new datasets were added for Super3, released as [Nemotron-Pretraining-Specialized-v1.1](https://huggingface.co/datasets/nvidia/Nemotron-Pretraining-Specialized-v1.1): | Dataset | Description | Scale | -|---------|-------------|-------| +| --- | --- | --- | | **Synthetic Code Concepts** | Python problems and solutions generated using concept taxonomy from HumanEval | ~15M problem-solution pairs | | **Synthetic Algorithmic** | Algorithmic Python problems with edge cases and unit tests | ~0.2B tokens | | **Synthetic Economics** | Economics MCQs across microeconomics, macroeconomics, econometrics | TBD | @@ -87,33 +95,29 @@ The pretraining corpus spans **16 high-level categories** including web crawl da **Two-phase curriculum:** | Phase | Internal Scale | Focus | Proportion | -|-------|----------------|-------|------------| +| --- | --- | --- | --- | | Phase 1 | 20T (80%) | Data diversity тАФ broad coverage and generalization | Higher weight on crawl data | | Phase 2 | 5T (20%) | High-quality sources тАФ refined model performance | Higher weight on Wikipedia, curated sources |
    Phase 1 blend distribution (click to expand) - -![Phase 1 pretrain data blend](../../assets/super3/super-phase1.png) +![Phase 1 pretrain data blend](../../../_images/super-phase1.png)
    -
    Phase 2 blend distribution (click to expand) - -![Phase 2 pretrain data blend](../../assets/super3/super-phase2.png) +![Phase 2 pretrain data blend](../../../_images/super-phase2.png)
    - > **Open-source data coverage**: The released datasets cover an estimated 8тАУ10T tokens -> (~40тАУ50% of the internal 25T blend). Missing categories include code (~14% of blend), -> nemotron-cc-code (~2%), crawl++ (~2%), and academic text (~2%). Users should supplement -> with their own data for these categories and adjust `train_iters` accordingly. +(~40тАУ50% of the internal 25T blend). Missing categories include code (~14% of blend), +nemotron-cc-code (~2%), crawl++ (~2%), and academic text (~2%). Users should supplement +with their own data for these categories and adjust `train_iters` accordingly. ### Hyperparameters | Parameter | Value | -|-----------|-------| +| --- | --- | | **Total Training Tokens** | 25 trillion | | **Batch Size** | 3,072 sequences (~25.17M tokens/batch) | | **Sequence Length** | 8,192 tokens | @@ -132,7 +136,7 @@ The pretraining corpus spans **16 high-level categories** including web crawl da Nemotron 3 Super was trained with NVFP4 precision on B200 GPUs for the entire 25T token horizon, demonstrating stable and accurate low-precision pretraining at scale. | Layer Type | Format | Rationale | -|------------|--------|-----------| +| --- | --- | --- | | All Linear Layers (default) | NVFP4 | тАФ | | Final 15% of Network | BF16 | Training stability at scale | | Latent Projections | BF16 | Negligible step-time impact | @@ -148,7 +152,7 @@ Testing showed that switching all tensors to MXFP8 before LR annealing improved During the stable phase of the WSD learning rate schedule, individual checkpoints exhibit noisy benchmark performance. Following recent work on weight-space merging, checkpoint merging (weighted averaging over a sliding window of recent checkpoints) produces stronger readouts of model quality without requiring dedicated learning rate decay runs. | Metric | Value | -|--------|-------| +| --- | --- | | **Improvement** | 2тАУ4 points on 12-benchmark average during stable LR phase | | **FLOP Savings** | ~16% of total pretraining budget (eliminates ~4T tokens of decay-run compute) | | **Merge Schedule** | minus-sqrt decay emulation | @@ -162,7 +166,7 @@ The final base model checkpoint selected for downstream alignment was a 500B mer A long-context phase (LC-Phase) at the end of pretraining extends the model to **1M token context**: | Parameter | Value | -|-----------|-------| +| --- | --- | | **Context Length** | 1,048,576 (1M) tokens | | **Learning Rate** | 4.5e-6 (constant) | | **Global Batch Size** | 16 | @@ -180,23 +184,23 @@ Data blend: 20% document QA data (reused from Nemotron 2 & 3 Nano), 80% downscal ### Base Model Evaluations -![Average benchmark score during pretraining](../../assets/super3/avg_benchmark.png) +![Average benchmark score during pretraining](../../../_images/avg_benchmark.png) | Task | N-Super-3 Base | Ling-flash Base-2.0 | GLM-4.5 Air-Base | -|------|----------------|---------------------|-------------------| -| **General** | | | | +| --- | --- | --- | --- | +| **General** | | | | | MMLU | **85.89** | 81.0 | 81.0 | | MMLU-Pro 5-shot | **74.65** | 62.1 | 58.2 | | AGIEval English CoT | **77.45** | 61.7 | 59.4 | -| **Math** | | | | +| **Math** | | | | | GSM8K CoT | **91.05** | 90.4 | 82.6 | | MATH | **84.68** | 62.4 | 49.6 | | MATH Level 5 | **70.00** | 39.8 | 26.3 | | AIME 2024 pass@32 | **53.33** | 30.0 | 20.0 | -| **Code** | | | | +| **Code** | | | | | HumanEval+ avg@32 | **79.40** | 70.1 | 76.3 | | MBPP+ avg@32 | 77.60 | 77.3 | **77.5** | -| **Commonsense** | | | | +| **Commonsense** | | | | | ARC Challenge | **95.65** | 94.8 | 93.9 | | HellaSwag | **88.99** | 84.5 | 87.7 | | OpenBookQA | **50.20** | 47.0 | 47.8 | @@ -206,8 +210,8 @@ Data blend: 20% document QA data (reused from Nemotron 2 & 3 Nano), 80% downscal #### Multilingual Base Model Evaluations | Task | N-Super-3 Base | Ling-flash Base-2.0 | GLM-4.5 Air-Base | -|------|----------------|---------------------|-------------------| -| **Global-MMLU-Lite** | | | | +| --- | --- | --- | --- | +| **Global-MMLU-Lite** | | | | | German | **87.50** | 75.8 | 78.0 | | Spanish | **88.50** | 78.0 | 81.3 | | French | **85.75** | 76.8 | 79.3 | @@ -217,7 +221,7 @@ Data blend: 20% document QA data (reused from Nemotron 2 & 3 Nano), 80% downscal | Portuguese | **86.25** | 79.3 | 82.8 | | Chinese | **84.00** | 76.0 | 77.8 | | Average | **85.88** | 74.81 | 79.00 | -| **Multilingual Math (MGSM)** | | | | +| **Multilingual Math (MGSM)** | | | | | Spanish | **90.40** | тАФ | 85.6 | | German | **89.60** | тАФ | 80.8 | | French | **86.40** | тАФ | 80.8 | @@ -235,7 +239,6 @@ Data blend: 20% document QA data (reused from Nemotron 2 & 3 Nano), 80% downscal Pretraining follows a **4-phase curriculum**:
    - ```console // 1. Prepare data for each phase $ uv run nemotron super3 data prep pretrain -c phase1 --run YOUR-CLUSTER @@ -250,10 +253,9 @@ $ uv run nemotron super3 pretrain -c long_context_mixed --run YOUR-CLUSTER # 17B ```
    +Each phase resumes from the previous phaseтАЩs checkpoint automatically. -Each phase resumes from the previous phase's checkpoint automatically. - -> **Note**: The `--run YOUR-CLUSTER` flag submits jobs via [NeMo-Run](../../nemo_runspec/nemo-run.md). See [Execution through NeMo-Run](../../nemo_runspec/nemo-run.md) for setup. +> **Note**: The `--run YOUR-CLUSTER` flag submits jobs via [NeMo-Run](/../../nemo_runspec/nemo-run). See [Execution through NeMo-Run](/../../nemo_runspec/nemo-run) for setup. #### Direct Script Execution (Megatron-Bridge) @@ -289,21 +291,21 @@ See the [Megatron-Bridge Nemotron 3 Super documentation](https://github.com/NVID **Training configs:** | File | Phase | Tokens | Key differences | -|------|-------|--------|----------------| -| `config/phase1.yaml` | Phase 1 | 20T | Diversity blend, WSD warmup + stable LR | -| `config/phase2.yaml` | Phase 2 | 5T | Quality blend, WSD minus_sqrt decay | -| `config/long_context_1m.yaml` | LC Stage 1 | 34B | seq_len=1M, GBS=16, CP=64, constant LR | -| `config/long_context_mixed.yaml` | LC Stage 2 | 17B | Alternating 1M/4K sequences | -| `config/default.yaml` | (alias) | тАФ | Points to phase1 | -| `config/tiny.yaml` | (test) | тАФ | Quick testing configuration | +| --- | --- | --- | --- | +| config/phase1.yaml | Phase 1 | 20T | Diversity blend, WSD warmup + stable LR | +| config/phase2.yaml | Phase 2 | 5T | Quality blend, WSD minus_sqrt decay | +| config/long_context_1m.yaml | LC Stage 1 | 34B | seq_len=1M, GBS=16, CP=64, constant LR | +| config/long_context_mixed.yaml | LC Stage 2 | 17B | Alternating 1M/4K sequences | +| config/default.yaml | (alias) | тАФ | Points to phase1 | +| config/tiny.yaml | (test) | тАФ | Quick testing configuration | **Data prep configs:** | File | Purpose | -|------|---------| -| `config/data_prep/phase1.yaml` | Phase 1 data blend (29 datasets, ~13.06B rows) | -| `config/data_prep/phase2.yaml` | Phase 2 data blend (27 datasets, ~10.53B rows) | -| `config/data_prep/long_context.yaml` | LC blend (80% phase2 + 20% doc QA) | +| --- | --- | +| config/data_prep/phase1.yaml | Phase 1 data blend (29 datasets, ~13.06B rows) | +| config/data_prep/phase2.yaml | Phase 2 data blend (27 datasets, ~10.53B rows) | +| config/data_prep/long_context.yaml | LC blend (80% phase2 + 20% doc QA) | ### Training @@ -314,11 +316,11 @@ uv run nemotron super3 pretrain [options] [overrides...] ``` | Option | Description | -|--------|-------------| -| `--run ` | AttachedтАФsubmits and waits, streaming logs ([NeMo-Run](../../nemo_runspec/nemo-run.md)) | -| `--batch ` | DetachedтАФsubmits and exits immediately ([NeMo-Run](../../nemo_runspec/nemo-run.md)) | -| `--dry-run` | Preview execution plan | -| `key=value` | Override config values ([NeMo-Run](../../nemo_runspec/nemo-run.md)) | +| --- | --- | +| --run <profile> | AttachedтАФsubmits and waits, streaming logs ([NeMo-Run](/../../nemo_runspec/nemo-run)) | +| --batch <profile> | DetachedтАФsubmits and exits immediately ([NeMo-Run](/../../nemo_runspec/nemo-run)) | +| --dry-run | Preview execution plan | +| key=value | Override config values ([NeMo-Run](/../../nemo_runspec/nemo-run)) | #### Override Examples @@ -364,31 +366,31 @@ flowchart TB ## Infrastructure -This stage uses the following components from the [NVIDIA AI Stack](../nvidia-stack.md): +This stage uses the following components from the [NVIDIA AI Stack](/../nvidia-stack): | Component | Role | Documentation | -|-----------|------|---------------| -| [Megatron-Core](../nvidia-stack.md#megatron-core) | Distributed training primitives (TP, PP, DP, EP, CP, SP) | [GitHub](https://github.com/NVIDIA/Megatron-LM) | -| [Megatron-Bridge](../nvidia-stack.md#megatron-bridge) | Model definitions, training loop, checkpoint management | [Docs](https://docs.nvidia.com/nemo/megatron-bridge/latest/) | +| --- | --- | --- | +| [Megatron-Core](/../nvidia-stack#megatron-core) | Distributed training primitives (TP, PP, DP, EP, CP, SP) | [GitHub](https://github.com/NVIDIA/Megatron-LM) | +| [Megatron-Bridge](/../nvidia-stack#megatron-bridge) | Model definitions, training loop, checkpoint management | [Docs](https://docs.nvidia.com/nemo/megatron-bridge/latest/) | | [Transformer Engine](https://github.com/NVIDIA/TransformerEngine) | NVFP4 GEMM kernels (cuBLAS backend) | [GitHub](https://github.com/NVIDIA/TransformerEngine) | ### Parallelism Configuration | Parallelism | Default | Config Key | -|-------------|---------|------------| -| Tensor (TP) | 4 | `model.tensor_model_parallel_size` | -| Pipeline (PP) | 1 | `model.pipeline_model_parallel_size` | -| Expert (EP) | 8 | `model.expert_model_parallel_size` | -| Expert Tensor (ETP) | 1 | `model.expert_tensor_parallel_size` | -| Context (CP) | 1 | `model.context_parallel_size` | -| Sequence (SP) | Yes | `model.sequence_parallel` | +| --- | --- | --- | +| Tensor (TP) | 4 | model.tensor_model_parallel_size | +| Pipeline (PP) | 1 | model.pipeline_model_parallel_size | +| Expert (EP) | 8 | model.expert_model_parallel_size | +| Expert Tensor (ETP) | 1 | model.expert_tensor_parallel_size | +| Context (CP) | 1 | model.context_parallel_size | +| Sequence (SP) | Yes | model.sequence_parallel | | Data (DP) | Auto | Computed from world size | **Minimum resources:** 4 nodes with 8 GPUs each (32 GPUs total). ### Container -``` +```default nvcr.io/nvidia/nemo:26.02.nemotron_3_super ``` @@ -396,13 +398,18 @@ nvcr.io/nvidia/nemo:26.02.nemotron_3_super ## Next Steps -After pretraining completes, proceed to [Stage 1: SFT](./sft.md) for instruction tuning. +After pretraining completes, proceed to [Stage 1: SFT](/sft) for instruction tuning. ## Reference - [Nemotron 3 Super Tech Report](https://research.nvidia.com/labs/nemotron/files/NVIDIA-Nemotron-3-Super-Technical-Report.pdf) тАФ Pretraining methodology + - [Megatron-Bridge Nemotron 3 Super](https://github.com/NVIDIA-NeMo/Megatron-Bridge/blob/super-v3/docs/models/llm/nemotron3-super.md) тАФ MB documentation and examples -- [NVIDIA AI Stack](../nvidia-stack.md) тАФ Megatron-Core, Megatron-Bridge documentation -- [Artifact Lineage](../../nemo_runspec/artifacts.md) тАФ W&B artifact system + +- [NVIDIA AI Stack](/../nvidia-stack) тАФ Megatron-Core, Megatron-Bridge documentation + +- [Artifact Lineage](/../../nemo_runspec/artifacts) тАФ W&B artifact system + - **Recipe Source**: `src/nemotron/recipes/super3/stage0_pretrain/` тАФ Implementation details -- [Back to Overview](./README.md) + +- [Back to Overview](/README) diff --git a/docs/nemotron/super3/quantization.md b/docs/fern/pages-vnightly/nemotron/super3/quantization.mdx similarity index 77% rename from docs/nemotron/super3/quantization.md rename to docs/fern/pages-vnightly/nemotron/super3/quantization.mdx index 8c650b883..4e03430ca 100644 --- a/docs/nemotron/super3/quantization.md +++ b/docs/fern/pages-vnightly/nemotron/super3/quantization.mdx @@ -1,4 +1,8 @@ -# Stage 3: Quantization +--- +title: "Stage 3: Quantization" +slug: "nemotron/super3/quantization.html" +description: "This stage applies post-training quantization (PTQ) to the aligned Nemotron 3 Super model for efficient deployment across GPU generations." +--- This stage applies post-training quantization (PTQ) to the aligned Nemotron 3 Super model for efficient deployment across GPU generations. @@ -11,11 +15,11 @@ Quantization improves inference efficiency in several ways: quantized GEMMs incr Two quantized checkpoints are released: | Checkpoint | Target Hardware | Format | Key Benefit | -|------------|-----------------|--------|-------------| +| --- | --- | --- | --- | | **FP8** (W8A8) | Hopper (H100) | FP8 weights and activations | Balanced accuracy/throughput | -| **NVFP4** (W4A4) | Blackwell (B200) | NVFP4 weights and activations | 1.5--2.2x higher GEMM FLOPS than FP8 | +| **NVFP4** (W4A4) | Blackwell (B200) | NVFP4 weights and activations | 1.5тАУ2.2x higher GEMM FLOPS than FP8 | -Both checkpoints are produced using [Model Optimizer](https://github.com/NVIDIA/Model-Optimizer/tree/main/examples/llm_ptq) PTQ with [Megatron-Bridge](../nvidia-stack.md#megatron-bridge). +Both checkpoints are produced using [Model Optimizer](https://github.com/NVIDIA/Model-Optimizer/tree/main/examples/llm_ptq) PTQ with [Megatron-Bridge](/../nvidia-stack#megatron-bridge). --- @@ -26,7 +30,7 @@ The FP8 checkpoint quantizes MoE GEMMs and Mamba GEMMs to FP8, with FP8 KV Cache ### Precision Settings | Configuration | FP8 Checkpoint | BF16 Baseline | -|---------------|----------------|---------------| +| --- | --- | --- | | Embedding | BF16 | BF16 | | Attention GEMM (QKV and Out Projection) | BF16 | BF16 | | KV Cache + Attention BMM1 | FP8 | FP8 | @@ -43,14 +47,14 @@ The FP8 checkpoint quantizes MoE GEMMs and Mamba GEMMs to FP8, with FP8 KV Cache ## NVFP4 Checkpoint -FP4 is attractive for efficient inference because NVFP4 offers roughly 1.5x--2.2x higher GEMM FLOPS than FP8 on Blackwell GPUs, while also reducing model memory footprint by about 2x. This makes FP4 especially appealing for prefill-heavy workloads, such as coding-agent deployments, where MoE GEMMs dominate latency. +FP4 is attractive for efficient inference because NVFP4 offers roughly 1.5xтАУ2.2x higher GEMM FLOPS than FP8 on Blackwell GPUs, while also reducing model memory footprint by about 2x. This makes FP4 especially appealing for prefill-heavy workloads, such as coding-agent deployments, where MoE GEMMs dominate latency. ### FP4 PTQ Recipe The best results were obtained with a **hybrid FP4 recipe**: | Component | Scaling Method | Rationale | -|-----------|---------------|-----------| +| --- | --- | --- | | **Weight per-block scales** | Minimizing weight MSE | Calibrated offline; supports scale search | | **Activation per-block scales** | Max-based scaling | Must be computed efficiently at runtime | @@ -65,7 +69,7 @@ AutoQuantize is a mixed-precision quantization algorithm that casts format assig QAD uses the BF16 checkpoint as teacher and the NVFP4 checkpoint as student: | Parameter | Value | -|-----------|-------| +| --- | --- | | **Calibration (PTQ student)** | 2K samples, 131K context from post-training reasoning SFT | | **Loss Function** | Logit-based loss (best of logit, logit+LM, hidden-cosine) | | **Learning Rate** | 1e-5 | @@ -76,10 +80,10 @@ QAD uses the BF16 checkpoint as teacher and the NVFP4 checkpoint as student: The Mamba SSM cache presents a unique quantization challenge: during training the cache is computed via chunked SSD without per-token quantization boundaries, but during inference per-token recurrent quantization accumulates errors across every token. -**Selected Recipe:** FP16 with Stochastic Rounding (Philox<5>) +**Selected Recipe:** FP16 with Stochastic Rounding (Philox\<5>) | Reason | Detail | -|--------|--------| +| --- | --- | | No block scales required | Simpler implementation | | Blackwell hardware support | Dedicated PTX instruction for FP16 conversion with stochastic rounding | | cuRAND support | Philox PRNG on Blackwell via cuRAND | @@ -92,11 +96,11 @@ The Mamba SSM cache presents a unique quantization challenge: during training th Nemotron 3 Super supports four quantization configurations tailored for the Mamba-MoE architecture: | Config Name | Format | Description | -|---|---|---| -| `mamba_moe_fp8_aggressive` | FP8 | Aggressive FP8 quantization for Mamba-MoE | -| `mamba_moe_fp8_conservative` | FP8 | Conservative FP8 quantization for Mamba-MoE | -| `mamba_moe_nvfp4_aggressive` | NVFP4 | Aggressive NVFP4 quantization for Mamba-MoE | -| `mamba_moe_nvfp4_conservative` | NVFP4 | Conservative NVFP4 quantization for Mamba-MoE | +| --- | --- | --- | +| mamba_moe_fp8_aggressive | FP8 | Aggressive FP8 quantization for Mamba-MoE | +| mamba_moe_fp8_conservative | FP8 | Conservative FP8 quantization for Mamba-MoE | +| mamba_moe_nvfp4_aggressive | NVFP4 | Aggressive NVFP4 quantization for Mamba-MoE | +| mamba_moe_nvfp4_conservative | NVFP4 | Conservative NVFP4 quantization for Mamba-MoE | Pass the desired config name via `--export-quant-cfg` to `quantize.py`. @@ -167,51 +171,51 @@ torchrun --nproc_per_node=16 examples/quantization/export.py \ Comparison of BF16, FP8, and NVFP4 checkpoints. -> **Note**: LiveCodeBench uses v6 here (vs v5 in the [post-trained model evaluations](./evaluate.md)), which accounts for the slightly different BF16 baselines between the two tables. +> **Note**: LiveCodeBench uses v6 here (vs v5 in the [post-trained model evaluations](/evaluate)), which accounts for the slightly different BF16 baselines between the two tables. | Benchmark | N-3-Super (BF16) | N-3-Super FP8 | N-3-Super NVFP4 | -|-----------|-------------------|---------------|-----------------| -| **General Knowledge** | | | | +| --- | --- | --- | --- | +| **General Knowledge** | | | | | MMLU-Pro | 83.57 | 83.78 | 83.41 | -| **Reasoning** | | | | +| **Reasoning** | | | | | GPQA (no tools) | 79.29 | 79.67 | 79.23 | | LiveCodeBench (v6 2024-08тЖФ2025-05) | 78.25 | 78.80 | 78.57 | | SciCode (subtask) | 40.64 | 39.87 | 39.94 | | HLE (no tools) | 18.02 | 17.70 | 17.33 | -| **Agentic** | | | | +| **Agentic** | | | | | Terminal Bench (hard) | 25.78 | 26.82 | 25.78 | | TauBench V2 Airline | 57.00 | 55.00 | 55.25 | | TauBench V2 Retail | 65.13 | 62.17 | 63.71 | | TauBench V2 Telecom | 60.96 | 62.39 | 60.63 | -| **Chat & IF** | | | | +| **Chat & IF** | | | | | IFBench (prompt) | 72.91 | 71.25 | 72.79 | | Multi-Challenge | 52.31 | 54.55 | 51.70 | | Arena-Hard-V2 | 75.19 | 74.83 | 75.50 | -| **Long Context** | | | | +| **Long Context** | | | | | AA-LCR | 57.63 | 58.13 | 59.25 | -| **Multilingual** | | | | +| **Multilingual** | | | | | MMLU-ProX (avg) | 80.00 | 78.97 | 79.36 | --- ## Infrastructure -This stage uses the following components from the [NVIDIA AI Stack](../nvidia-stack.md): +This stage uses the following components from the [NVIDIA AI Stack](/../nvidia-stack): | Component | Role | Documentation | -|-----------|------|---------------| -| [Megatron-Core](../nvidia-stack.md#megatron-core) | Distributed training primitives (TP, PP, EP) | [GitHub](https://github.com/NVIDIA/Megatron-LM) | -| [Megatron-Bridge](../nvidia-stack.md#megatron-bridge) | PTQ quantization, checkpoint export | [Docs](https://docs.nvidia.com/nemo/megatron-bridge/latest/) | +| --- | --- | --- | +| [Megatron-Core](/../nvidia-stack#megatron-core) | Distributed training primitives (TP, PP, EP) | [GitHub](https://github.com/NVIDIA/Megatron-LM) | +| [Megatron-Bridge](/../nvidia-stack#megatron-bridge) | PTQ quantization, checkpoint export | [Docs](https://docs.nvidia.com/nemo/megatron-bridge/latest/) | | [Model-Optimizer](https://github.com/NVIDIA/TensorRT-Model-Optimizer) | Quantization algorithms (FP8, NVFP4), AutoQuantize, QAD | [GitHub](https://github.com/NVIDIA/TensorRT-Model-Optimizer) | | [Transformer Engine](https://github.com/NVIDIA/TransformerEngine) | NVFP4/FP8 GEMM kernels | [GitHub](https://github.com/NVIDIA/TransformerEngine) | ### Parallelism Configuration | Parallelism | Default | Flag | -|-------------|---------|------| -| Tensor (TP) | 8 | `--tp` | -| Pipeline (PP) | 2 | `--pp` | -| Expert (EP) | 8 | `--ep` | +| --- | --- | --- | +| Tensor (TP) | 8 | --tp | +| Pipeline (PP) | 2 | --pp | +| Expert (EP) | 8 | --ep | **Minimum resources:** 2 nodes with 8├Ч H100 GPUs. @@ -220,10 +224,17 @@ This stage uses the following components from the [NVIDIA AI Stack](../nvidia-st ## Reference - [Nemotron 3 Super Tech Report](https://research.nvidia.com/labs/nemotron/files/NVIDIA-Nemotron-3-Super-Technical-Report.pdf) тАФ Quantization methodology + - [Megatron-Bridge Nemotron 3 Super](https://github.com/NVIDIA-NeMo/Megatron-Bridge/blob/super-v3/docs/models/llm/nemotron3-super.md) тАФ MB documentation and examples + - [Model-Optimizer](https://github.com/NVIDIA/TensorRT-Model-Optimizer) тАФ PTQ and AutoQuantize -- [NVIDIA AI Stack](../nvidia-stack.md) тАФ Megatron-Core, Megatron-Bridge, Transformer Engine -- [Stage 2: RL](./rl/index.md) тАФ RL alignment (input to quantization) -- [Stage 4: Evaluation](./evaluate.md) тАФ Benchmark evaluation + +- [NVIDIA AI Stack](/../nvidia-stack) тАФ Megatron-Core, Megatron-Bridge, Transformer Engine + +- [Stage 2: RL](/rl/index) тАФ RL alignment (input to quantization) + +- [Stage 4: Evaluation](/evaluate) тАФ Benchmark evaluation + - **Recipe Source**: `src/nemotron/recipes/super3/` тАФ Implementation details -- [Back to Overview](./README.md) + +- [Back to Overview](/README) diff --git a/docs/nemotron/super3/rl/data-prep.md b/docs/fern/pages-vnightly/nemotron/super3/rl/data-prep.mdx similarity index 71% rename from docs/nemotron/super3/rl/data-prep.md rename to docs/fern/pages-vnightly/nemotron/super3/rl/data-prep.mdx index 056fa6a98..45d9c3610 100644 --- a/docs/nemotron/super3/rl/data-prep.md +++ b/docs/fern/pages-vnightly/nemotron/super3/rl/data-prep.mdx @@ -1,4 +1,8 @@ -# RL Data Preparation +--- +title: "RL Data Preparation" +slug: "nemotron/super3/rl/data-prep.html" +description: "Data preparation for the RL pipeline downloads nvidia/Nemotron-3-Super-RL-Training-Blends from HuggingFace, resolves placeholder entries by fetching from external datasets (DAPO, Skywork), and produce" +--- Data preparation for the RL pipeline downloads `nvidia/Nemotron-3-Super-RL-Training-Blends` from HuggingFace, resolves placeholder entries by fetching from external datasets (DAPO, Skywork), and produces 6 data blends with train/val splits. @@ -25,12 +29,12 @@ flowchart LR ``` | Stage | What Happens | -|-------|--------------| -| **HuggingFace Dataset** | Download `nvidia/Nemotron-3-Super-RL-Training-Blends` (6 blend files) | -| **Placeholder Resolution** | Resolve `_hf_placeholder` records by fetching from external datasets (DAPO, Skywork) and applying template restoration | -| **JSONL Format** | Convert to JSONL with `question`, `expected_answer`, and `responses_create_params` fields | +| --- | --- | +| **HuggingFace Dataset** | Download nvidia/Nemotron-3-Super-RL-Training-Blends (6 blend files) | +| **Placeholder Resolution** | Resolve _hf_placeholder records by fetching from external datasets (DAPO, Skywork) and applying template restoration | +| **JSONL Format** | Convert to JSONL with question, expected_answer, and responses_create_params fields | | **Train/Val Split** | Last 100 rows held out for validation per blend | -| **6 Data Blends** | `rlvr1/`, `rlvr2/`, `rlvr3/`, `swe1/`, `swe2/`, `rlhf/` тАФ each with `train-split.jsonl` + `val-split.jsonl` | +| **6 Data Blends** | rlvr1/, rlvr2/, rlvr3/, swe1/, swe2/, rlhf/ тАФ each with train-split.jsonl + val-split.jsonl | --- @@ -72,19 +76,19 @@ uv run nemotron super3 data prep rl rlhf --run YOUR-CLUSTER Each sub-stage has its own data prep command because the data blends differ (RLVR uses HF placeholder resolution, while SWE/RLHF use direct JSONL splitting). > **`--run YOUR-CLUSTER`** refers to a profile defined in your `env.toml` file. -> See the [env.toml setup guide](../README.md#configuration) for details. +See the [env.toml setup guide](/../README#configuration) for details. | Option | Description | -|--------|-------------| -| `--run ` | Execute on Slurm via [NeMo-Run](../../../nemo_runspec/nemo-run.md) | -| `sample=N` | Limit rows per dataset (for testing) | -| `force=true` | Force re-run, ignoring cache | +| --- | --- | +| --run <profile> | Execute on Slurm via [NeMo-Run](/../../../nemo_runspec/nemo-run) | +| sample=N | Limit rows per dataset (for testing) | +| force=true | Force re-run, ignoring cache | --- ## Output -``` +```default output/stage2_rl_resolved/ тФЬтФАтФА rlvr1/ тФВ тФЬтФАтФА train-split.jsonl diff --git a/docs/nemotron/super3/rl/index.md b/docs/fern/pages-vnightly/nemotron/super3/rl/index.mdx similarity index 69% rename from docs/nemotron/super3/rl/index.md rename to docs/fern/pages-vnightly/nemotron/super3/rl/index.mdx index 71943598d..f1459d7af 100644 --- a/docs/nemotron/super3/rl/index.md +++ b/docs/fern/pages-vnightly/nemotron/super3/rl/index.mdx @@ -1,6 +1,10 @@ -# Stage 2: Reinforcement Learning (RL) +--- +title: "Stage 2: Reinforcement Learning (RL)" +slug: "nemotron/super3/rl/index.html" +description: "This stage aligns the instruction-tuned model using GRPO (Group Relative Policy Optimization) with NeMo-RL." +--- -This stage aligns the instruction-tuned model using GRPO (Group Relative Policy Optimization) with [NeMo-RL](../../nvidia-stack.md#nemo-rl). +This stage aligns the instruction-tuned model using GRPO (Group Relative Policy Optimization) with [NeMo-RL](/../../nvidia-stack#nemo-rl). > **Open-Source Data Only**: This recipe uses exclusively open-sourced RL data, which is a subset of the full data used to train the released model. Results will differ from the benchmarks in the tech report. Use this recipe as a reference implementation to apply the methodology with your own data. @@ -9,23 +13,30 @@ This stage aligns the instruction-tuned model using GRPO (Group Relative Policy ## Training Methodology > **Training Framework**: RL alignment is implemented using [NeMo-RL](https://docs.nvidia.com/nemo/rl/latest/) with Ray for distributed actor coordination and vLLM for fast rollout generation. The Megatron backend handles distributed policy training with tensor, pipeline, context, and expert parallelism. See [NeMo-RL Documentation](https://docs.nvidia.com/nemo/rl/latest/) for implementation details. -> -> For complete methodology, see the [Nemotron 3 Super Tech Report](https://research.nvidia.com/labs/nemotron/files/NVIDIA-Nemotron-3-Super-Technical-Report.pdf). + +For complete methodology, see the [Nemotron 3 Super Tech Report](https://research.nvidia.com/labs/nemotron/files/NVIDIA-Nemotron-3-Super-Technical-Report.pdf). ### RL Pipeline Overview The RL pipeline consists of three main stages with 6 total sub-stages, each targeting a different alignment objective: -1. **[Multi-Environment RLVR](rlvr.md)** (3 sub-stages) тАФ Unified training across 21 environments with verifiable rewards - - RL Phase 1.1: RLVR 1 тАФ Initial RL training from SFT checkpoint - - RL Phase 1.2: RLVR 2 тАФ Continued training with second data blend - - RL Phase 1.3: RLVR 3 тАФ Final RLVR with third data blend -2. **[SWE-RL](swe.md)** (2 sub-stages) тАФ End-to-end reinforcement learning for software engineering tasks - - RL Phase 2.1: SWE 1 тАФ SWE-pivot training - - RL Phase 2.2: SWE 2 тАФ SWE-bench training with isolated sandbox environments -3. **[RLHF](rlhf.md)** (1 sub-stage) тАФ Principle-following generative reward model-based alignment +1. **[Multi-Environment RLVR](/rlvr)** (3 sub-stages) тАФ Unified training across 21 environments with verifiable rewards + + - RL Phase 1.1: RLVR 1 тАФ Initial RL training from SFT checkpoint + + - RL Phase 1.2: RLVR 2 тАФ Continued training with second data blend + + - RL Phase 1.3: RLVR 3 тАФ Final RLVR with third data blend -> **Note on numbering**: The RL sub-stage numbering (Phases 1.1тАУ3) is internal to Stage 2 of the overall pipeline. See the [pipeline overview](../README.md) for the top-level stage numbering. +2. **[SWE-RL](/swe)** (2 sub-stages) тАФ End-to-end reinforcement learning for software engineering tasks + + - RL Phase 2.1: SWE 1 тАФ SWE-pivot training + + - RL Phase 2.2: SWE 2 тАФ SWE-bench training with isolated sandbox environments + +3. **[RLHF](/rlhf)** (1 sub-stage) тАФ Principle-following generative reward model-based alignment + +> **Note on numbering**: The RL sub-stage numbering (Phases 1.1тАУ3) is internal to Stage 2 of the overall pipeline. See the [pipeline overview](/../README) for the top-level stage numbering. Each sub-stage uses a different data blend and takes the output checkpoint of the previous sub-stage as input. The RLVR sub-stages share the same config (`stage1_rlvr.yaml`) with different data paths. @@ -54,8 +65,8 @@ Multi-environment RLVR is the primary stage, training on all environments simult ### Per-Stage Parameters -| | RLVR (1.1тАУ1.3) | SWE 1 (2.1) | SWE 2 (2.2) | RLHF (3) | -|---|---|---|---|---| +| | RLVR (1.1тАУ1.3) | SWE 1 (2.1) | SWE 2 (2.2) | RLHF (3) | +| --- | --- | --- | --- | --- | | **Nodes** | 109 | 64 | 64 | 72 | | **Prompts/step** | 256 | 64 | 16 | 128 | | **Gens/prompt** | 16 | 16 | 32 | 16 | @@ -64,7 +75,7 @@ Multi-environment RLVR is the primary stage, training on all environments simult | **Learning rate** | 3e-6 | 1e-6 | 1e-6 | 1e-6 | | **KL penalty** | 0 | 0 | 0 | 1e-4 | | **Overlong filter** | false | true | true | false | -| **Config** | `stage1_rlvr.yaml` | `stage2_swe1.yaml` | `stage2_swe2.yaml` | `stage3_rlhf.yaml` | +| **Config** | stage1_rlvr.yaml | stage2_swe1.yaml | stage2_swe2.yaml | stage3_rlhf.yaml | Node counts assume B200 nodes with 8 GPUs each and may need adjustment for other GPU types. @@ -73,11 +84,14 @@ Node counts assume B200 nodes with 8 GPUs each and may need adjustment for other GRPO (Group Relative Policy Optimization) optimizes the policy using group-relative advantages: 1. **Generate responses** from the current policy using vLLM + 2. **Evaluate** responses using NeMo-Gym reward environments + 3. **Compute group-relative advantages** across response groups per prompt + 4. **Update the policy** to favor higher-reward responses with clipped gradients -All stages use **asynchronous GRPO** where training and inference are decoupled across separate GPU devices. See [RLVR](rlvr.md#algorithm) for full algorithm details. +All stages use **asynchronous GRPO** where training and inference are decoupled across separate GPU devices. See [RLVR](/rlvr#algorithm) for full algorithm details. --- @@ -86,8 +100,11 @@ All stages use **asynchronous GRPO** where training and inference are decoupled ### Prerequisites - **NeMo-RL repo**: Clone the `super-v3` branch + - **Sandbox container**: Required for code execution environments + - **SWE container**: Required for SWE stages 2.1 and 2.2 (pre-fetched venvs) тАФ see [SWE container build](#swe-container) below + - **SIF images**: Required for Stage 2.2 only (SWE-bench sandbox environments (Apptainer `.sif` on SLURM, or Docker/Podman)) ### Using nemotron CLI (Recommended) @@ -119,8 +136,8 @@ uv run nemotron super3 rl rlvr -c test --run YOUR-CLUSTER ``` > **`--run YOUR-CLUSTER`** refers to a profile defined in your `env.toml` file, -> which configures SLURM account, partition, mounts, and other cluster settings. -> See the [env.toml setup guide](../README.md#configuration) for details. +which configures SLURM account, partition, mounts, and other cluster settings. +See the [env.toml setup guide](/../README#configuration) for details. ### Using super_launch.sh (Direct) @@ -158,14 +175,14 @@ done Set these environment variables before launching each stage: | Variable | Description | -|----------|-------------| -| `DATA_DIR` | Path to the `data/` directory produced above | -| `SANDBOX_CONTAINER` | Sandbox container image (`.sqsh` path or registry URI) | -| `PERSISTENT_CACHE` | Directory for vLLM and FlashInfer caches | -| `EXTRA_MOUNTS` | Comma-separated `host:container` mount pairs for shared filesystems | -| `SIF_DIR` | *(Stage 2.2 only)* Directory containing Apptainer `.sif` images | -| `SLURM_PARTITION` | Slurm partition | -| `SLURM_ACCOUNT` | Slurm account | +| --- | --- | +| DATA_DIR | Path to the data/ directory produced above | +| SANDBOX_CONTAINER | Sandbox container image (.sqsh path or registry URI) | +| PERSISTENT_CACHE | Directory for vLLM and FlashInfer caches | +| EXTRA_MOUNTS | Comma-separated host:container mount pairs for shared filesystems | +| SIF_DIR | *(Stage 2.2 only)* Directory containing Apptainer .sif images | +| SLURM_PARTITION | Slurm partition | +| SLURM_ACCOUNT | Slurm account | Then launch each stage sequentially. `MODEL_PATH` is the input checkpoint тАФ Stage 1.1 starts from SFT; every subsequent stage takes the output of the previous one. @@ -185,7 +202,7 @@ SLURM_ACCOUNT=$SLURM_ACCOUNT \ bash super_launch.sh ``` -See [RLVR](rlvr.md), [SWE-RL](swe.md), and [RLHF](rlhf.md) for complete launch commands for each stage. +See [RLVR](/rlvr), [SWE-RL](/swe), and [RLHF](/rlhf) for complete launch commands for each stage. --- @@ -194,30 +211,30 @@ See [RLVR](rlvr.md), [SWE-RL](swe.md), and [RLHF](rlhf.md) for complete launch c ### Config Files | File | Purpose | Details | -|------|---------|---------| -| `stage1_rlvr.yaml` | RLVR stages 1.1тАУ1.3 (109 nodes, 21 environments) | [RLVR](rlvr.md) | -| `stage2_swe1.yaml` | SWE stage 2.1 тАФ SWE-pivot (64 nodes) | [SWE-RL](swe.md#stage-21--swe-1-64-nodes) | -| `stage2_swe2.yaml` | SWE stage 2.2 тАФ SWE-bench with sandbox containers (64 nodes) | [SWE-RL](swe.md#stage-22--swe-2-64-nodes) | -| `stage3_rlhf.yaml` | RLHF stage (72 nodes, GenRM reward) | [RLHF](rlhf.md) | -| `small_*.yaml` | Reduced-scale variants for testing | | -| `default.yaml` | Base GRPO configuration | | -| `tiny.yaml` | Testing variant (1 node) | | +| --- | --- | --- | +| stage1_rlvr.yaml | RLVR stages 1.1тАУ1.3 (109 nodes, 21 environments) | [RLVR](/rlvr) | +| stage2_swe1.yaml | SWE stage 2.1 тАФ SWE-pivot (64 nodes) | [SWE-RL](/swe#stage-2-1-swe-1-64-nodes) | +| stage2_swe2.yaml | SWE stage 2.2 тАФ SWE-bench with sandbox containers (64 nodes) | [SWE-RL](/swe#stage-2-2-swe-2-64-nodes) | +| stage3_rlhf.yaml | RLHF stage (72 nodes, GenRM reward) | [RLHF](/rlhf) | +| small_*.yaml | Reduced-scale variants for testing | | +| default.yaml | Base GRPO configuration | | +| tiny.yaml | Testing variant (1 node) | | ### Data Preparation -The `data_prep.py` script downloads `nvidia/Nemotron-3-Super-RL-Training-Blends` from HuggingFace, resolves placeholder entries, and produces 6 data blends. See [Data Preparation](data-prep.md) for details. +The `data_prep.py` script downloads `nvidia/Nemotron-3-Super-RL-Training-Blends` from HuggingFace, resolves placeholder entries, and produces 6 data blends. See [Data Preparation](/data-prep) for details. --- ## Infrastructure -This stage uses the following components from the [NVIDIA AI Stack](../../nvidia-stack.md): +This stage uses the following components from the [NVIDIA AI Stack](/../../nvidia-stack): | Component | Role | Documentation | -|-----------|------|---------------| -| [NeMo-RL](../../nvidia-stack.md#nemo-rl) | Async GRPO algorithm, policy training, reward computation | [Docs](https://docs.nvidia.com/nemo/rl/latest/) | +| --- | --- | --- | +| [NeMo-RL](/../../nvidia-stack#nemo-rl) | Async GRPO algorithm, policy training, reward computation | [Docs](https://docs.nvidia.com/nemo/rl/latest/) | | [NeMo-Gym](https://github.com/NVIDIA-NeMo/Gym) | Multi-environment reward evaluation (21+ environments) | [GitHub](https://github.com/NVIDIA-NeMo/Gym) | -| [Megatron-Core](../../nvidia-stack.md#megatron-core) | Distributed training primitives (TP, PP, CP, EP) | [GitHub](https://github.com/NVIDIA/Megatron-LM) | +| [Megatron-Core](/../../nvidia-stack#megatron-core) | Distributed training primitives (TP, PP, CP, EP) | [GitHub](https://github.com/NVIDIA/Megatron-LM) | | [Ray](https://ray.io/) | Distributed actor coordination and resource management | [Docs](https://docs.ray.io/) | | vLLM | Fast rollout generation | [GitHub](https://github.com/vllm-project/vllm) | @@ -225,7 +242,7 @@ This stage uses the following components from the [NVIDIA AI Stack](../../nvidia All RL stages use the base NeMo-RL container: -``` +```default nvcr.io/nvidia/nemo-rl:v0.5.0.nemotron_3_super ``` @@ -241,10 +258,10 @@ included in the base image. Build the SWE container once (from within the docker buildx build \ -t your-registry/nemo-rl:v0.5.0.nemotron_3_super_swe \ --push \ - -f- . <<'EOF' + -f- . \<\<'EOF' FROM nvcr.io/nvidia/nemo-rl:v0.5.0.nemotron_3_super -RUN <<'RUNEOF' +RUN \<\<'RUNEOF' set -euxo pipefail UV_TORCH_BACKEND=$(uv run python -c "import tomllib,pathlib; \ indexes=tomllib.loads(pathlib.Path('pyproject.toml').read_text())['tool']['uv']['index']; \ @@ -256,28 +273,24 @@ RUNEOF EOF ``` -SWE2 additionally requires Apptainer `.sif` images тАФ see [SWE-RL Stage 2.2](swe.md#prerequisites). +SWE2 additionally requires Apptainer `.sif` images тАФ see [SWE-RL Stage 2.2](/swe#prerequisites). --- ## Next Steps -After RL completes, the aligned model can be [quantized](../quantization.md) for efficient deployment or [evaluated](../evaluate.md) against standard benchmarks. +After RL completes, the aligned model can be [quantized](/../quantization) for efficient deployment or [evaluated](/../evaluate) against standard benchmarks. ## Reference - [Nemotron 3 Super Tech Report](https://research.nvidia.com/labs/nemotron/files/NVIDIA-Nemotron-3-Super-Technical-Report.pdf) тАФ RL methodology + - [NeMo-RL Documentation](https://docs.nvidia.com/nemo/rl/latest/) тАФ GRPO, DPO, environments -- [NVIDIA AI Stack](../../nvidia-stack.md) тАФ NeMo-RL, Megatron-Core documentation -- [Artifact Lineage](../../../nemo_runspec/artifacts.md) тАФ W&B artifact system -- **Recipe Source**: `src/nemotron/recipes/super3/stage2_rl/` тАФ Implementation details -- [Back to Overview](../README.md) -```{toctree} -:hidden: +- [NVIDIA AI Stack](/../../nvidia-stack) тАФ NeMo-RL, Megatron-Core documentation -rlvr.md -swe.md -rlhf.md -data-prep.md -``` +- [Artifact Lineage](/../../../nemo_runspec/artifacts) тАФ W&B artifact system + +- **Recipe Source**: `src/nemotron/recipes/super3/stage2_rl/` тАФ Implementation details + +- [Back to Overview](/../README) diff --git a/docs/nemotron/super3/rl/rlhf.md b/docs/fern/pages-vnightly/nemotron/super3/rl/rlhf.mdx similarity index 86% rename from docs/nemotron/super3/rl/rlhf.md rename to docs/fern/pages-vnightly/nemotron/super3/rl/rlhf.mdx index dfeca5322..e8c0b315a 100644 --- a/docs/nemotron/super3/rl/rlhf.md +++ b/docs/fern/pages-vnightly/nemotron/super3/rl/rlhf.mdx @@ -1,4 +1,8 @@ -# RLHF (Stage 3) +--- +title: "RLHF (Stage 3)" +slug: "nemotron/super3/rl/rlhf.html" +description: "Reinforcement Learning from Human Feedback is the final RL stage, run after RLVR and SWE-RL to improve model behavior and interaction quality." +--- Reinforcement Learning from Human Feedback is the final RL stage, run after RLVR and SWE-RL to improve model behavior and interaction quality. @@ -6,12 +10,12 @@ Reinforcement Learning from Human Feedback is the final RL stage, run after RLVR ## Approach -Uses a large **Generative Reward Model (GenRM)** to provide supervision during RL. The GenRM is a principle-following model trained as described in [RL-BFF](https://arxiv.org/abs/2505.18849), which allows guiding Nemotron Super 3's behavior on important domains like identity and safety-related topics. +Uses a large **Generative Reward Model (GenRM)** to provide supervision during RL. The GenRM is a principle-following model trained as described in [RL-BFF](https://arxiv.org/abs/2505.18849), which allows guiding Nemotron Super 3тАЩs behavior on important domains like identity and safety-related topics. ### GenRM Model | Parameter | Value | -|-----------|-------| +| --- | --- | | **Initialization** | Qwen3-235B-A22B-Thinking-2507 | | **Training Data** | [HelpSteer 3](https://huggingface.co/datasets/nvidia/HelpSteer3) + commercially friendly subsets of lmarena-140k + recently collected human preference data | | **Approach** | Principle-following GenRM for guiding behavior on identity and safety domains | @@ -27,7 +31,7 @@ Unlike the RLVR and SWE stages (which use KL=0), RLHF applies a **KL penalty of ## Configuration | Parameter | Value | -|-----------|-------| +| --- | --- | | Nodes | 72 (576 GPUs) | | Generation nodes | 32 (colocated=false) | | NeMo Gym GPU nodes | 8 | @@ -46,11 +50,13 @@ Unlike the RLVR and SWE stages (which use KL=0), RLHF applies a **KL penalty of The RLHF stage uses GenRM comparison as the primary reward signal, along with tool use evaluation: - `genrm_compare` тАФ Pairwise comparison using the GenRM model with principle-following prompts + - `single_step_tool_use_with_argument_comparison` тАФ Tool use correctness ### Config Files - `stage3_rlhf/config/default.yaml` тАФ Full-scale 72-node config + - `stage3_rlhf/config/small.yaml` тАФ Reduced 24-node variant for testing --- @@ -64,7 +70,7 @@ uv run nemotron super3 rl rlhf --run YOUR-CLUSTER ``` > **`--run YOUR-CLUSTER`** refers to a profile defined in your `env.toml` file. -> See the [env.toml setup guide](../README.md#configuration) for details. +See the [env.toml setup guide](/../README#configuration) for details. ### Using super_launch.sh @@ -88,6 +94,7 @@ bash super_launch.sh ## References - [RL-BFF: Reinforcement Learning with Best-of-F Feedback](https://arxiv.org/abs/2505.18849) + - [HelpSteer 3](https://huggingface.co/datasets/nvidia/HelpSteer3) **Recipe Source**: `src/nemotron/recipes/super3/stage2_rl/stage3_rlhf/` diff --git a/docs/nemotron/super3/rl/rlvr.md b/docs/fern/pages-vnightly/nemotron/super3/rl/rlvr.mdx similarity index 87% rename from docs/nemotron/super3/rl/rlvr.md rename to docs/fern/pages-vnightly/nemotron/super3/rl/rlvr.mdx index 8d9ec56f2..f7a61846f 100644 --- a/docs/nemotron/super3/rl/rlvr.md +++ b/docs/fern/pages-vnightly/nemotron/super3/rl/rlvr.mdx @@ -1,4 +1,8 @@ -# Multi-Environment RLVR (Stages 1.1тАУ1.3) +--- +title: "Multi-Environment RLVR (Stages 1.1тАУ1.3)" +slug: "nemotron/super3/rl/rlvr.html" +description: "Multi-environment Reinforcement Learning from Verifiable Rewards (RLVR) is the primary RL stage for Nemotron 3 Super. It trains on 21 environments and 37 datasets simultaneously, covering math, code, " +--- Multi-environment Reinforcement Learning from Verifiable Rewards (RLVR) is the primary RL stage for Nemotron 3 Super. It trains on 21 environments and 37 datasets simultaneously, covering math, code, STEM, safety, chat, instruction following, long context, puzzles, and agentic tasks. @@ -11,7 +15,7 @@ The RLVR stage consists of 3 sub-stages with different data blends. All 3 use th ## Data | Domain | Description | -|--------|-------------| +| --- | --- | | **Math** | Competitive math problems, trained with and without python execution tool. Includes formal proof verification environment. | | **Code** | Competition code data. | | **STEM** | Scientific problems including newly curated difficult problems. | @@ -28,7 +32,7 @@ The RLVR stage consists of 3 sub-stages with different data blends. All 3 use th A subset of prompts are converted to low-effort mode. For each low-effort prompt, the reward accounts for both correctness and token count, encouraging efficient reasoning. | Phase | Scope | Proportion | -|-------|-------|------------| +| --- | --- | --- | | Early | Math, STEM QA, Competitive Coding | 2% of all RL prompts | | Late | Math, STEM QA only | 1% of RL prompts | @@ -39,11 +43,17 @@ A subset of prompts are converted to low-effort mode. For each low-effort prompt Uses **asynchronous GRPO** where training and inference are decoupled across separate GPU devices: - Inference workers continuously generate trajectories stored in a rollout buffer + - Batches are sent to the training engine once enough trajectories are collected + - Updated weights are pushed to inference workers as soon as a new model version is available + - **In-flight weight updates**: weights can be pushed mid-rollout without waiting for ongoing rollouts to finish + - KV cache is NOT recomputed after weight updates + - Policy lag is limited to at most one step behind the latest model version + - Importance sampling ratio masking stabilizes training under the training-inference mismatch --- @@ -51,7 +61,7 @@ Uses **asynchronous GRPO** where training and inference are decoupled across sep ## Configuration | Parameter | Value | -|-----------|-------| +| --- | --- | | Nodes | 109 (872 GPUs) | | Generation nodes | 72 (colocated=false) | | NeMo Gym GPU nodes | 5 | @@ -67,16 +77,17 @@ Uses **asynchronous GRPO** where training and inference are decoupled across sep ### Parallelism | Parallelism | Value | Config Key | -|-------------|-------|------------| -| Tensor (TP) | 4 | `policy.megatron_cfg.tensor_model_parallel_size` | -| Pipeline (PP) | 1 | `policy.megatron_cfg.pipeline_model_parallel_size` | -| Context (CP) | 8 | `policy.megatron_cfg.context_parallel_size` | -| Expert (EP) | 8 | `policy.megatron_cfg.expert_model_parallel_size` | -| Sequence (SP) | Yes | `policy.megatron_cfg.sequence_parallel` | +| --- | --- | --- | +| Tensor (TP) | 4 | policy.megatron_cfg.tensor_model_parallel_size | +| Pipeline (PP) | 1 | policy.megatron_cfg.pipeline_model_parallel_size | +| Context (CP) | 8 | policy.megatron_cfg.context_parallel_size | +| Expert (EP) | 8 | policy.megatron_cfg.expert_model_parallel_size | +| Sequence (SP) | Yes | policy.megatron_cfg.sequence_parallel | ### Config Files - `stage1_rlvr/config/default.yaml` тАФ Full-scale 109-node config + - `stage1_rlvr/config/small.yaml` тАФ Reduced 21-node variant for testing --- @@ -86,13 +97,15 @@ Uses **asynchronous GRPO** where training and inference are decoupled across sep All RLVR experiments use an integrated NeMo RL + NeMo Gym infrastructure: - **NeMo RL** acts as the RL training loop controller using Megatron-Core for model training + - **NeMo Gym** handles rollout environments using three server types: agents, models (vLLM), and resources (verifiers) + - **Ray** orchestrates resource management on SLURM тАФ training workers, vLLM generation workers, Gym environments, and judge models all run on a single Ray cluster ### Judge Models | Model | Purpose | -|-------|---------| +| --- | --- | | Qwen3-235B-A22B | Equivalence/instruction-following judging | | Nemotron-Content-Safety-Reasoning-4B | Safety evaluation | | Qwen3-Nemotron-235B-A22B-GenRM | GenRM pairwise comparison | @@ -102,7 +115,9 @@ All RLVR experiments use an integrated NeMo RL + NeMo Gym infrastructure: At 1K GPU scale, intermittent failures from hardware and software issues required: - Parallelized initialization with prefetching of virtual environments and binaries + - Careful port management to avoid TOCTOU race conditions between Ray control plane, vLLM workers, TCP rendezvous, and NeMo Gym servers + - Caching in upstream repos (vLLM, flashinfer) to reduce startup time --- @@ -119,7 +134,7 @@ uv run nemotron super3 rl rlvr -c rlvr3 --run YOUR-CLUSTER ``` > **`--run YOUR-CLUSTER`** refers to a profile defined in your `env.toml` file. -> See the [env.toml setup guide](../README.md#configuration) for details. +See the [env.toml setup guide](/../README#configuration) for details. ### Using super_launch.sh diff --git a/docs/nemotron/super3/rl/swe.md b/docs/fern/pages-vnightly/nemotron/super3/rl/swe.mdx similarity index 88% rename from docs/nemotron/super3/rl/swe.md rename to docs/fern/pages-vnightly/nemotron/super3/rl/swe.mdx index fe3ae0a0d..37fcb39cd 100644 --- a/docs/nemotron/super3/rl/swe.md +++ b/docs/fern/pages-vnightly/nemotron/super3/rl/swe.mdx @@ -1,4 +1,8 @@ -# SWE-RL (Stages 2.1тАУ2.2) +--- +title: "SWE-RL (Stages 2.1тАУ2.2)" +slug: "nemotron/super3/rl/swe.html" +description: "End-to-end RL for software engineering tasks. SWE-RL is handled as a separate stage because its rollouts take substantially longer and require much longer context lengths, making it a throughput bottl" +--- End-to-end RL for software engineering tasks. SWE-RL is handled as a separate stage because its rollouts take substantially longer and require much longer context lengths, making it a throughput bottleneck when trained alongside the other RLVR environments. @@ -12,10 +16,10 @@ Both SWE stages require pre-fetched Python virtual environments that are not inc docker buildx build \ -t your-registry/nemo-rl:v0.5.0.nemotron_3_super_swe \ --push \ - -f- . <<'EOF' + -f- . \<\<'EOF' FROM nvcr.io/nvidia/nemo-rl:v0.5.0.nemotron_3_super -RUN <<'RUNEOF' +RUN \<\<'RUNEOF' set -euxo pipefail UV_TORCH_BACKEND=$(uv run python -c "import tomllib,pathlib; \ indexes=tomllib.loads(pathlib.Path('pyproject.toml').read_text())['tool']['uv']['index']; \ @@ -43,7 +47,7 @@ SWE-pivot training using a single-step tool use comparison approach. The model r ### Configuration | Parameter | Value | -|-----------|-------| +| --- | --- | | Nodes | 64 (512 GPUs) | | Generation nodes | 32 (colocated=false) | | Prompts/step | 64 | @@ -59,6 +63,7 @@ SWE-pivot training using a single-step tool use comparison approach. The model r ### Config Files - `stage2_swe1/config/default.yaml` тАФ Full-scale 64-node config + - `stage2_swe1/config/small.yaml` тАФ Reduced 8-node variant for testing ### Using nemotron CLI @@ -68,9 +73,9 @@ uv run nemotron super3 rl swe1 --run YOUR-CLUSTER ``` > **`--run YOUR-CLUSTER`** refers to a profile defined in your `env.toml` file. -> See the [env.toml setup guide](../README.md#configuration) for details. -> -> SWE stages require the [SWE container](index.md#swe-container) with pre-fetched venvs. +See the [env.toml setup guide](/../README#configuration) for details. + +SWE stages require the [SWE container](/index#swe-container) with pre-fetched venvs. ### Using super_launch.sh @@ -98,7 +103,7 @@ Full SWE-bench training with container-isolated sandboxes. Each rollout launches ### Configuration | Parameter | Value | -|-----------|-------| +| --- | --- | | Nodes | 64 (512 GPUs) | | Generation nodes | 32 (colocated=false) | | Prompts/step | 16 | @@ -129,16 +134,16 @@ Each SWE task instance needs an isolated environment with its own filesystem to Because Apptainer shares the host kernel and memory space, additional safeguards are needed: | Component | Description | -|-----------|-------------| -| **Memory Watchdog** | Monitors aggregate RSS of tmux process trees and proactively kills runaway processes, since Apptainer containers share host memory (unlike Docker's cgroup isolation). | -| **Command Blocklist** | Regex-based blocklist intercepts dangerous commands (`killall`, `pkill`) that could terminate training processes or vLLM servers on the same node. | +| --- | --- | +| **Memory Watchdog** | Monitors aggregate RSS of tmux process trees and proactively kills runaway processes, since Apptainer containers share host memory (unlike DockerтАЩs cgroup isolation). | +| **Command Blocklist** | Regex-based blocklist intercepts dangerous commands (killall, pkill) that could terminate training processes or vLLM servers on the same node. | These safeguards are less critical when using Docker or Podman, which provide cgroup-based process and memory isolation by default. #### Agent Loop | Component | Description | -|-----------|-------------| +| --- | --- | | **OpenHands Agent Loop** | Manages the full lifecycle: initializing runtime, presenting problems, running agent steps (up to 200 turns), extracting git patches, and running tests for binary reward. | | **Harness Diversity** | OpenCode and Codex agent classes within OpenHands match external harness tool formats (Claude Code, Codex CLI) for training diversity. | @@ -164,9 +169,9 @@ uv run nemotron super3 rl swe2 \ ``` > **`--run YOUR-CLUSTER`** refers to a profile defined in your `env.toml` file. -> See the [env.toml setup guide](../README.md#configuration) for details. -> -> SWE stages require the [SWE container](index.md#swe-container) with pre-fetched venvs. +See the [env.toml setup guide](/../README#configuration) for details. + +SWE stages require the [SWE container](/index#swe-container) with pre-fetched venvs. ### Using super_launch.sh diff --git a/docs/nemotron/super3/sft.md b/docs/fern/pages-vnightly/nemotron/super3/sft.mdx similarity index 72% rename from docs/nemotron/super3/sft.md rename to docs/fern/pages-vnightly/nemotron/super3/sft.mdx index 85002b9a6..c4ee64d0f 100644 --- a/docs/nemotron/super3/sft.md +++ b/docs/fern/pages-vnightly/nemotron/super3/sft.mdx @@ -1,6 +1,10 @@ -# Stage 1: Supervised Fine-Tuning (SFT) +--- +title: "Stage 1: Supervised Fine-Tuning (SFT)" +slug: "nemotron/super3/sft.html" +description: "This stage fine-tunes the pretrained Nemotron 3 Super model for instruction following using Megatron-Bridge." +--- -This stage fine-tunes the pretrained Nemotron 3 Super model for instruction following using [Megatron-Bridge](../nvidia-stack.md#megatron-bridge). +This stage fine-tunes the pretrained Nemotron 3 Super model for instruction following using [Megatron-Bridge](/../nvidia-stack#megatron-bridge). --- @@ -8,7 +12,7 @@ This stage fine-tunes the pretrained Nemotron 3 Super model for instruction foll > **Chat Template**: The chat template is identical to Nemotron 3 Nano. -> **Training Framework**: SFT is implemented using [Megatron-Bridge](https://docs.nvidia.com/nemo/megatron-bridge/latest/)'s `finetune()` entry point, which loads a pretrained checkpoint and handles the training loop with role-based loss masking. See [Training Entry Points](https://docs.nvidia.com/nemo/megatron-bridge/latest/training/entry-points.html) for implementation details. +> **Training Framework**: SFT is implemented using [Megatron-Bridge](https://docs.nvidia.com/nemo/megatron-bridge/latest/)тАЩs `finetune()` entry point, which loads a pretrained checkpoint and handles the training loop with role-based loss masking. See [Training Entry Points](https://docs.nvidia.com/nemo/megatron-bridge/latest/training/entry-points.html) for implementation details. ### Two-Stage SFT Loss @@ -16,18 +20,12 @@ Nemotron 3 Super uses a novel **two-stage SFT loss** procedure. The model is sup **Stage 1: Token-level (global) average.** The loss averages over all output tokens in the packed global batch: -$$ -\mathcal{L}_{\text{tok}} = \frac{\sum_{c \in \mathcal{B}} \sum_{t \in \mathcal{O}_c} \ell_t}{\sum_{c \in \mathcal{B}} |\mathcal{O}_c|} -$$ - +\mathcal\{L\}_\{\text\{tok\}\} = \frac\{\sum_\{c \in \mathcal\{B\}\} \sum_\{t \in \mathcal\{O\}_c\} \ell_t\}\{\sum_\{c \in \mathcal\{B\}\} |\mathcal\{O\}_c|\} This corresponds to summing output-token log probabilities across all conversations and normalizing by the total number of output tokens. **Stage 2: Sample-level average.** The loss then switches to a per-conversation normalized loss averaged equally across conversations: -$$ -\mathcal{L}_{\text{samp}} = \frac{1}{|\mathcal{B}|} \sum_{c \in \mathcal{B}} \left( \frac{1}{|\mathcal{O}_c|} \sum_{t \in \mathcal{O}_c} \ell_t \right) -$$ - +\mathcal\{L\}_\{\text\{samp\}\} = \frac\{1\}\{|\mathcal\{B\}|\} \sum_\{c \in \mathcal\{B\}\} \left( \frac\{1\}\{|\mathcal\{O\}_c|\} \sum_\{t \in \mathcal\{O\}_c\} \ell_t \right) This stage reduces the dominance of long outputs by normalizing each conversation by its own output-token count before averaging across the batch. The switch from token-level to sample-level loss is configured in the recipe YAML (`config/default.yaml`). @@ -65,12 +63,12 @@ flowchart LR ``` | Stage | What Happens | -|-------|--------------| -| **OpenAI Chat Format** | Input messages with `role` (system/user/assistant) and `content` fields | +| --- | --- | +| **OpenAI Chat Format** | Input messages with role (system/user/assistant) and content fields | | **Chat Template** | Renders messages using the Jinja chat template (identical to Nemotron 3 Nano) | | **Role-Labeled Chunks** | Splits rendered text back into chunks, each tagged with its source role | | **Tokenization** | Converts text chunks to token IDs | -| **Loss Mask** | Builds mask: `1` for assistant tokens, `0` for system/user tokens | +| **Loss Mask** | Builds mask: 1 for assistant tokens, 0 for system/user tokens | | **Packing** | Multiple sequences packed into fixed-length bins (4096 tokens) | | **Mask Rolling** | Shifts mask by 1 position for next-token prediction alignment | @@ -81,10 +79,10 @@ flowchart LR Loss masking determines which tokens contribute to the training loss. In SFT, we only want the model to learn to generate responsesтАФnot to predict prompts or system instructions. | Role | Loss Mask | Training Signal | -|------|-----------|-----------------| -| `system` | 0 | Ignored (instructions) | -| `user` | 0 | Ignored (prompts) | -| `assistant` | 1 | Learned (responses) | +| --- | --- | --- | +| system | 0 | Ignored (instructions) | +| user | 0 | Ignored (prompts) | +| assistant | 1 | Learned (responses) | ### Packed Sequences @@ -93,23 +91,23 @@ Individual chat conversations vary in length. Packing concatenates multiple conv The packed sequence format stores everything Megatron-Bridge needs for training: | Field | Description | -|-------|-------------| -| `input_ids` | Concatenated token IDs from multiple conversations | -| `loss_mask` | Rolled mask indicating which positions contribute to loss | -| `seq_start_id` | Boundary indices marking where each original conversation starts within the pack | +| --- | --- | +| input_ids | Concatenated token IDs from multiple conversations | +| loss_mask | Rolled mask indicating which positions contribute to loss | +| seq_start_id | Boundary indices marking where each original conversation starts within the pack | Megatron-Bridge uses `seq_start_id` boundaries for variable-length attention (preventing cross-conversation attention leak) and FlashAttention optimization. ### SFT Data Domains -![SFT data blend distribution](../../assets/super3/super_sft_blend.png) +![SFT data blend distribution](../../../_images/super_sft_blend.png) The SFT dataset covers 15+ domains across **7M total samples**: #### Reused from Nano3 | Domain | Description | -|--------|-------------| +| --- | --- | | **Chat** | General conversational data | | **Infinibyte** | Cross-domain synthesis | | **Formal Proofs** | Mathematical proof generation | @@ -117,7 +115,7 @@ The SFT dataset covers 15+ domains across **7M total samples**: #### Refreshed with New Teachers (DeepSeek v3.2, Kimi K2) | Domain | Description | -|--------|-------------| +| --- | --- | | **Competition Math** | Competitive mathematics problems | | **Competition Code** | Competitive programming problems | | **Conversational Tool Use** | Multi-turn tool-using interactions (fully rebuilt pipeline: scaled from 5 domains/15K conversations in Nano3 to 838 domains/279K conversations) | @@ -127,7 +125,7 @@ The SFT dataset covers 15+ domains across **7M total samples**: #### New Domains | Domain | Description | Scale | -|--------|-------------|-------| +| --- | --- | --- | | **Software Engineering** | Coding tasks from GitHub issues (SWE-Gym, R2E-Gym, SWE-rebench) distilled via OpenHands with Qwen3-Coder-480B | тАФ | | **Agentic Programming** | Agentic CLI tasks: solution synthesis, SWE tasks, web development across Codex/OpenCode/Qwen Code CLI harnesses | ~28K tasks | | **Long Context** | Multi-document QA at 128KтАУ512K context with multi-hop reasoning (4тАУ7 retrieval steps) + 7 synthetic sequential reasoning tasks | тАФ | @@ -143,7 +141,7 @@ The SFT dataset covers 15+ domains across **7M total samples**: Nemotron 3 Super supports **three reasoning modes**: | Mode | Description | -|------|-------------| +| --- | --- | | **Reasoning-off** | No reasoning traces (3% of samples have reasoning stripped) | | **Regular reasoning** | Standard chain-of-thought reasoning | | **Low-effort reasoning** | New: shorter reasoning traces generated by GPT-OSS-120B low-effort mode (2% of SFT data) | @@ -155,7 +153,7 @@ Both regular and low-effort modes support **inference-time budget control**. Aft #### Full SFT (default) | Parameter | Value | -|-----------|-------| +| --- | --- | | **Learning Rate** | 1e-5 (constant after warmup) | | **LR Warmup** | 30,000 samples (linear ramp to constant LR) | | **Sequence Packing** | Up to 256K context | @@ -172,9 +170,9 @@ Both regular and low-effort modes support **inference-time budget control**. Aft #### LoRA Fine-Tuning | Parameter | Value | -|-----------|-------| +| --- | --- | | **Learning Rate** | 1e-4 | -| **Target Modules** | `linear_qkv`, `linear_proj`, `linear_fc1`, `linear_fc2`, `in_proj`, `out_proj` | +| **Target Modules** | linear_qkv, linear_proj, linear_fc1, linear_fc2, in_proj, out_proj | | **Parallelism** | TP=1, EP=1 | ### Troubleshooting @@ -182,15 +180,17 @@ Both regular and low-effort modes support **inference-time budget control**. Aft Common data preparation errors and solutions: | Error | Cause | Solution | -|-------|-------|----------| +| --- | --- | --- | | Empty sequences after processing | All tokens masked (no assistant content) | Verify input data contains assistant responses | | Template rendering mismatch | Tokenizer BPE splits differ from template expectations | Ensure tokenizer model matches the one used during template creation | -| Sequences truncated excessively | Many conversations exceed `max_doc_tokens` | Consider increasing `max_doc_tokens` or `pack_size` | +| Sequences truncated excessively | Many conversations exceed max_doc_tokens | Consider increasing max_doc_tokens or pack_size | **Debugging tips:** - Use `--sample 100` to test data preparation on a small subset + - Check `metadata.json` output for statistics on filtered/truncated sequences + - Review W&B artifacts for lineage tracking and validation metrics --- @@ -200,7 +200,6 @@ Common data preparation errors and solutions: ### Quick Start
    - ```console // 1. Prepare data (apply chat templates, tokenize to Packed Parquet) $ uv run nemotron super3 data prep sft --run YOUR-CLUSTER @@ -210,8 +209,7 @@ $ uv run nemotron super3 sft --run YOUR-CLUSTER ```
    - -> **Note**: The `--run YOUR-CLUSTER` flag submits jobs via [NeMo-Run](../../nemo_runspec/nemo-run.md). See [Execution through NeMo-Run](../../nemo_runspec/nemo-run.md) for setup. +> **Note**: The `--run YOUR-CLUSTER` flag submits jobs via [NeMo-Run](/../../nemo_runspec/nemo-run). See [Execution through NeMo-Run](/../../nemo_runspec/nemo-run) for setup. #### Direct Script Execution (Megatron-Bridge) @@ -254,14 +252,14 @@ See the [Megatron-Bridge Nemotron 3 Super documentation](https://github.com/NVID ### Configuration | File | Purpose | -|------|---------| -| `config/default.yaml` | Production configuration (full SFT) | -| `config/tiny.yaml` | Quick testing configuration | -| `config/data_prep/default.yaml` | Data preparation settings | +| --- | --- | +| config/default.yaml | Production configuration (full SFT) | +| config/tiny.yaml | Quick testing configuration | +| config/data_prep/default.yaml | Data preparation settings | ### Data Preparation -The `data_prep.py` script processes OpenAI-format chat data into packed sequences with role-based loss masking. See [Data Preparation Module](../data-prep.md) for detailed documentation. +The `data_prep.py` script processes OpenAI-format chat data into packed sequences with role-based loss masking. See [Data Preparation Module](/../data-prep) for detailed documentation. #### CLI Command @@ -270,14 +268,14 @@ uv run nemotron super3 data prep sft [options] ``` | Option | Description | -|--------|-------------| -| `--run ` | Execute on Slurm via [NeMo-Run](../../nemo_runspec/nemo-run.md) | -| `--sample N` | Limit rows per dataset (for testing) | -| `--force` | Force re-run, ignoring cache | +| --- | --- | +| --run <profile> | Execute on Slurm via [NeMo-Run](/../../nemo_runspec/nemo-run) | +| --sample N | Limit rows per dataset (for testing) | +| --force | Force re-run, ignoring cache | #### Output -``` +```default output/stage1_sft/ тФЬтФАтФА blend.json тФЬтФАтФА splits/ @@ -286,11 +284,11 @@ output/stage1_sft/ тФВ тФВ тФФтФАтФА ... тФВ тФЬтФАтФА valid/ тФВ тФФтФАтФА test/ -тФФтФАтФА runs/{run_hash}/ - тФФтФАтФА datasets/{name}/{hash}/ +тФФтФАтФА runs/\{run_hash\}/ + тФФтФАтФА datasets/\{name\}/\{hash\}/ ``` -The output is registered as a [W&B Artifact](../../nemo_runspec/artifacts.md) (`SFTDataArtifact-sft`) for lineage tracking. +The output is registered as a [W&B Artifact](/../../nemo_runspec/artifacts) (`SFTDataArtifact-sft`) for lineage tracking. ### Training @@ -301,11 +299,11 @@ uv run nemotron super3 sft [options] [overrides...] ``` | Option | Description | -|--------|-------------| -| `--run ` | AttachedтАФsubmits and waits, streaming logs ([NeMo-Run](../../nemo_runspec/nemo-run.md)) | -| `--batch ` | DetachedтАФsubmits and exits immediately ([NeMo-Run](../../nemo_runspec/nemo-run.md)) | -| `--dry-run` | Preview execution plan | -| `key=value` | Override config values ([NeMo-Run](../../nemo_runspec/nemo-run.md)) | +| --- | --- | +| --run <profile> | AttachedтАФsubmits and waits, streaming logs ([NeMo-Run](/../../nemo_runspec/nemo-run)) | +| --batch <profile> | DetachedтАФsubmits and exits immediately ([NeMo-Run](/../../nemo_runspec/nemo-run)) | +| --dry-run | Preview execution plan | +| key=value | Override config values ([NeMo-Run](/../../nemo_runspec/nemo-run)) | #### Override Examples @@ -339,7 +337,7 @@ gpus_per_node = 8 mounts = ["/lustre:/lustre"] ``` -See [Execution through NeMo-Run](../../nemo_runspec/nemo-run.md) for complete configuration options. +See [Execution through NeMo-Run](/../../nemo_runspec/nemo-run) for complete configuration options. ### Artifact Lineage @@ -364,18 +362,18 @@ flowchart TB ## Infrastructure -This stage uses the following components from the [NVIDIA AI Stack](../nvidia-stack.md): +This stage uses the following components from the [NVIDIA AI Stack](/../nvidia-stack): | Component | Role | Documentation | -|-----------|------|---------------| -| [Megatron-Core](../nvidia-stack.md#megatron-core) | Distributed training primitives (TP, PP, DP, EP) | [GitHub](https://github.com/NVIDIA/Megatron-LM) | -| [Megatron-Bridge](../nvidia-stack.md#megatron-bridge) | Fine-tuning loop, checkpoint loading, loss masking | [Docs](https://docs.nvidia.com/nemo/megatron-bridge/latest/) | +| --- | --- | --- | +| [Megatron-Core](/../nvidia-stack#megatron-core) | Distributed training primitives (TP, PP, DP, EP) | [GitHub](https://github.com/NVIDIA/Megatron-LM) | +| [Megatron-Bridge](/../nvidia-stack#megatron-bridge) | Fine-tuning loop, checkpoint loading, loss masking | [Docs](https://docs.nvidia.com/nemo/megatron-bridge/latest/) | ### Key Features Used | Feature | Purpose | -|---------|---------| -| `finetune()` entry point | SFT training with pre-loaded checkpoint | +| --- | --- | +| finetune() entry point | SFT training with pre-loaded checkpoint | | Role-based loss masking | Only compute loss on assistant tokens | | Two-stage loss | Token-level then sample-level normalization | | Mixed precision (BF16) | Memory-efficient training | @@ -387,28 +385,28 @@ This stage uses the following components from the [NVIDIA AI Stack](../nvidia-st #### Full SFT (default, `peft: null`) | Parallelism | Default | Config Key | -|-------------|---------|------------| -| Tensor (TP) | 1 | `model.tensor_model_parallel_size` | -| Pipeline (PP) | 1 | `model.pipeline_model_parallel_size` | -| Expert (EP) | 8 | `model.expert_model_parallel_size` | -| Expert Tensor (ETP) | 1 | `model.expert_tensor_parallel_size` | -| Sequence (SP) | Yes | `model.sequence_parallel` | +| --- | --- | --- | +| Tensor (TP) | 1 | model.tensor_model_parallel_size | +| Pipeline (PP) | 1 | model.pipeline_model_parallel_size | +| Expert (EP) | 8 | model.expert_model_parallel_size | +| Expert Tensor (ETP) | 1 | model.expert_tensor_parallel_size | +| Sequence (SP) | Yes | model.sequence_parallel | | Data (DP) | Auto | Computed from world size | #### LoRA (`peft: lora`) | Parallelism | Default | Config Key | -|-------------|---------|------------| -| Tensor (TP) | 1 | `model.tensor_model_parallel_size` | -| Pipeline (PP) | 1 | `model.pipeline_model_parallel_size` | -| Expert (EP) | 1 | `model.expert_model_parallel_size` | -| Sequence (SP) | Yes | `model.sequence_parallel` | +| --- | --- | --- | +| Tensor (TP) | 1 | model.tensor_model_parallel_size | +| Pipeline (PP) | 1 | model.pipeline_model_parallel_size | +| Expert (EP) | 1 | model.expert_model_parallel_size | +| Sequence (SP) | Yes | model.sequence_parallel | **Minimum resources:** 4 nodes with 8 GPUs each (32 GPUs total). ### Container -``` +```default nvcr.io/nvidia/nemo:26.02.nemotron_3_super ``` @@ -416,15 +414,22 @@ nvcr.io/nvidia/nemo:26.02.nemotron_3_super ## Next Steps -After SFT completes, proceed to [Stage 2: RL](./rl/index.md) for reinforcement learning alignment. +After SFT completes, proceed to [Stage 2: RL](/rl/index) for reinforcement learning alignment. ## Reference - [Nemotron 3 Super Tech Report](https://research.nvidia.com/labs/nemotron/files/NVIDIA-Nemotron-3-Super-Technical-Report.pdf) тАФ SFT methodology + - [Megatron-Bridge Nemotron 3 Super](https://github.com/NVIDIA-NeMo/Megatron-Bridge/blob/super-v3/docs/models/llm/nemotron3-super.md) тАФ MB documentation and examples -- [NVIDIA AI Stack](../nvidia-stack.md) тАФ Megatron-Core, Megatron-Bridge documentation -- [Artifact Lineage](../../nemo_runspec/artifacts.md) тАФ W&B artifact system -- [Stage 0: Pretraining](./pretrain.md) тАФ Pretrain the base model -- [Stage 2: RL](./rl/index.md) тАФ Reinforcement learning alignment + +- [NVIDIA AI Stack](/../nvidia-stack) тАФ Megatron-Core, Megatron-Bridge documentation + +- [Artifact Lineage](/../../nemo_runspec/artifacts) тАФ W&B artifact system + +- [Stage 0: Pretraining](/pretrain) тАФ Pretrain the base model + +- [Stage 2: RL](/rl/index) тАФ Reinforcement learning alignment + - **Recipe Source**: `src/nemotron/recipes/super3/stage1_sft/` тАФ Implementation details -- [Back to Overview](./README.md) + +- [Back to Overview](/README) diff --git a/docs/nemotron/wandb.md b/docs/fern/pages-vnightly/nemotron/wandb.mdx similarity index 65% rename from docs/nemotron/wandb.md rename to docs/fern/pages-vnightly/nemotron/wandb.mdx index 81613dedc..6810f3343 100644 --- a/docs/nemotron/wandb.md +++ b/docs/fern/pages-vnightly/nemotron/wandb.mdx @@ -1,8 +1,12 @@ -# Weights & Biases Integration +--- +title: "Weights & Biases Integration" +slug: "nemotron/wandb.html" +description: "Nemotron automatically passes W&B credentials and settings to containers running via nemo-run. nemotron.kit.wandb_kit handles W&B initialization; nemo_runspec.execution handles credential injection in" +--- -Nemotron automatically passes W&B credentials and settings to containers running via nemo-run. `nemotron.kit.wandb_kit` handles W&B initialization; `nemo_runspec.execution` handles credential injection into executors. You don't need to manage credentials manually across local, Docker, Slurm, or cloud executors. +Nemotron automatically passes W&B credentials and settings to containers running via nemo-run. `nemotron.kit.wandb_kit` handles W&B initialization; `nemo_runspec.execution` handles credential injection into executors. You donтАЩt need to manage credentials manually across local, Docker, Slurm, or cloud executors. -> **Note**: W&B works alongside the [manifest-based tracker](./artifacts.md) for full lineage tracking and team collaboration. Configure both in your `env.toml` under `[artifacts]`. The manifest backend provides always-reliable local tracking; W&B adds the UI, lineage graphs, and team sharing. +> **Note**: W&B works alongside the [manifest-based tracker](/artifacts) for full lineage tracking and team collaboration. Configure both in your `env.toml` under `[artifacts]`. The manifest backend provides always-reliable local tracking; W&B adds the UI, lineage graphs, and team sharing. ## Configuration @@ -17,9 +21,9 @@ entity = "YOUR-TEAM" ``` | Field | Description | -|-------|-------------| -| `project` | W&B project name (required to enable tracking) | -| `entity` | W&B team/entity name | +| --- | --- | +| project | W&B project name (required to enable tracking) | +| entity | W&B team/entity name | ### Authentication @@ -36,17 +40,21 @@ Your API key is stored in `~/.netrc` and automatically detected by the kit. When you run jobs via nemo-run, `nemo_runspec.execution.build_env_vars()` automatically detects your W&B configuration and passes it to the container as environment variables: | Variable | Source | Description | -|----------|--------|-------------| -| `WANDB_API_KEY` | `wandb.api.api_key` | API key from local wandb login | -| `WANDB_PROJECT` | `env.toml [wandb]` | Project name | -| `WANDB_ENTITY` | `env.toml [wandb]` | Team/entity name | +| --- | --- | --- | +| WANDB_API_KEY | wandb.api.api_key | API key from local wandb login | +| WANDB_PROJECT | env.toml [wandb] | Project name | +| WANDB_ENTITY | env.toml [wandb] | Team/entity name | This works across all executor types: - **Local** тАУ environment variables set directly + - **Docker** тАУ passed via container env vars + - **Slurm** тАУ included in job submission + - **SkyPilot** тАУ set in cloud instance environment + - **Ray** тАУ passed via `runtime_env.env_vars` ### How It Works @@ -118,10 +126,12 @@ if config.enabled: ## Artifact Lineage -W&B artifacts provide lineage tracking. See [Artifact Lineage](./artifacts.md) for details on: +W&B artifacts provide lineage tracking. See [Artifact Lineage](/artifacts) for details on: - End-to-end lineage from raw data to final model + - Semantic URIs for artifact references + - Viewing lineage in the W&B UI ## Advanced Features @@ -138,8 +148,11 @@ patch_wandb_checkpoint_logging() ``` This enables: + - Automatic artifact creation for each checkpoint + - Lineage links to training data artifacts + - Version tracking with step numbers ### NeMo-RL Checkpoint Logging @@ -155,7 +168,7 @@ patch_nemo_rl_checkpoint_logging() ### Seeded Random Fix -When using seeded random states (common in RL), W&B's default run ID generation can fail. The kit provides a patch: +When using seeded random states (common in RL), W&BтАЩs default run ID generation can fail. The kit provides a patch: ```python from nemotron.kit.wandb_kit import patch_wandb_runid_for_seeded_random @@ -166,15 +179,15 @@ patch_wandb_runid_for_seeded_random() ## Troubleshooting -### "WANDB_API_KEY not found" +### тАЬWANDB_API_KEY not foundтАЭ -Ensure you're logged in locally: +Ensure youтАЩre logged in locally: ```bash wandb login ``` -### "Project not found" +### тАЬProject not foundтАЭ Verify the project exists in your W&B workspace, or let W&B create it automatically on first run. @@ -197,23 +210,26 @@ For Ray data prep jobs, credentials are passed via `runtime_env.env_vars`. Ensur ### wandb.py Exports | Export | Description | -|--------|-------------| -| `WandbConfig` | Configuration dataclass | -| `init_wandb_if_configured()` | Conditional W&B initialization | -| `patch_wandb_checkpoint_logging()` | Enable Megatron-Bridge checkpoint artifacts | -| `patch_nemo_rl_checkpoint_logging()` | Enable NeMo-RL checkpoint artifacts | -| `patch_wandb_runid_for_seeded_random()` | Fix seeded random ID generation | +| --- | --- | +| WandbConfig | Configuration dataclass | +| init_wandb_if_configured() | Conditional W&B initialization | +| patch_wandb_checkpoint_logging() | Enable Megatron-Bridge checkpoint artifacts | +| patch_nemo_rl_checkpoint_logging() | Enable NeMo-RL checkpoint artifacts | +| patch_wandb_runid_for_seeded_random() | Fix seeded random ID generation | ### nemo_runspec Exports | Export | Module | Description | -|--------|--------|-------------| -| `get_wandb_config()` | `nemo_runspec.env` | Load W&B config from env.toml | -| `build_env_vars()` | `nemo_runspec.execution` | Build env vars with auto W&B detection | +| --- | --- | --- | +| get_wandb_config() | nemo_runspec.env | Load W&B config from env.toml | +| build_env_vars() | nemo_runspec.execution | Build env vars with auto W&B detection | ## Further Reading -- [OmegaConf Configuration](../nemo_runspec/omegaconf.md) тАУ artifact interpolations and unified logging patches -- [Artifact Lineage](./artifacts.md) тАУ lineage tracking and W&B UI -- [Nemotron Kit](./kit.md) тАУ artifact system and lineage tracking -- [Execution through NeMo-Run](../nemo_runspec/nemo-run.md) тАУ execution profiles and env.toml +- [OmegaConf Configuration](/../nemo_runspec/omegaconf) тАУ artifact interpolations and unified logging patches + +- [Artifact Lineage](/artifacts) тАУ lineage tracking and W&B UI + +- [Nemotron Kit](/kit) тАУ artifact system and lineage tracking + +- [Execution through NeMo-Run](/../nemo_runspec/nemo-run) тАУ execution profiles and env.toml diff --git a/docs/nemotron/xenna-observability.md b/docs/fern/pages-vnightly/nemotron/xenna-observability.mdx similarity index 60% rename from docs/nemotron/xenna-observability.md rename to docs/fern/pages-vnightly/nemotron/xenna-observability.mdx index fb46c0506..ef48246ae 100644 --- a/docs/nemotron/xenna-observability.md +++ b/docs/fern/pages-vnightly/nemotron/xenna-observability.mdx @@ -1,4 +1,8 @@ -# Xenna Pipeline Observability +--- +title: "Xenna Pipeline Observability" +slug: "nemotron/xenna-observability.html" +description: "Real-time observability for cosmos-xenna data preparation pipelines, with W&B metrics logging and pipeline statistics tracking." +--- Real-time observability for cosmos-xenna data preparation pipelines, with W&B metrics logging and pipeline statistics tracking. @@ -9,8 +13,11 @@ Real-time observability for cosmos-xenna data preparation pipelines, with W&B me When running data preparation pipelines (pretrain, SFT), you can log pipeline statistics to Weights & Biases in real time. This gives you visibility into: - **Pipeline progress** тАУ inputs processed, outputs generated, completion percentage + - **Cluster utilization** тАУ CPU/GPU/memory usage across the Ray cluster + - **Per-stage metrics** тАУ actor counts, queue depths, processing speeds for each pipeline stage + - **Bottleneck detection** тАУ which stages are blocking throughput ## Configuration @@ -34,9 +41,9 @@ observability: ### The Monkey-Patch Approach -cosmos-xenna's `PipelineMonitor` class builds a `PipelineStats` object every `logging_interval_s` via the internal `_make_stats()` method. Our hook intercepts this method: +cosmos-xennaтАЩs `PipelineMonitor` class builds a `PipelineStats` object every `logging_interval_s` via the internal `_make_stats()` method. Our hook intercepts this method: -``` +```default тФМтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФР тФВ cosmos-xenna pipeline тФВ тФВ тФВ @@ -53,16 +60,23 @@ cosmos-xenna's `PipelineMonitor` class builds a `PipelineStats` object every `lo ``` **Benefits of this approach:** + - **No cosmos-xenna changes required** тАУ works with current cosmos-xenna main -- **Same update frequency** тАУ matches cosmos-xenna's internal logging cadence + +- **Same update frequency** тАУ matches cosmos-xennaтАЩs internal logging cadence + - **Structured data** тАУ gets full `PipelineStats` object, not just text output + - **Zero pipeline impact** тАУ original return value is preserved unchanged ### Thread Safety The hook uses reference counting for safe nested contexts: + - Multiple hooks can be active simultaneously + - Patch is installed when first hook enters, restored when last hook exits + - Thread-safe with a reentrant lock ## Metrics Logged @@ -70,41 +84,41 @@ The hook uses reference counting for safe nested contexts: ### Pipeline-Level Metrics | Metric | Description | -|--------|-------------| -| `{kind}/pipeline_duration_s` | Total elapsed time since pipeline start | -| `{kind}/main_loop_rate_hz` | Pipeline main loop frequency | -| `{kind}/progress` | Percentage of inputs processed (0-100) | -| `{kind}/num_input_remaining` | Inputs still waiting to be processed | -| `{kind}/num_outputs` | Total outputs generated | -| `{kind}/inputs_processed_per_s` | Input processing rate | -| `{kind}/outputs_per_s` | Output generation rate | +| --- | --- | +| {kind}/pipeline_duration_s | Total elapsed time since pipeline start | +| {kind}/main_loop_rate_hz | Pipeline main loop frequency | +| {kind}/progress | Percentage of inputs processed (0-100) | +| {kind}/num_input_remaining | Inputs still waiting to be processed | +| {kind}/num_outputs | Total outputs generated | +| {kind}/inputs_processed_per_s | Input processing rate | +| {kind}/outputs_per_s | Output generation rate | ### Cluster Resource Metrics | Metric | Description | -|--------|-------------| -| `{kind}/cluster/total_cpus` | Total CPUs in Ray cluster | -| `{kind}/cluster/avail_cpus` | Available (unused) CPUs | -| `{kind}/cluster/total_gpus` | Total GPUs in cluster | -| `{kind}/cluster/avail_gpus` | Available GPUs | -| `{kind}/cluster/total_mem_gb` | Total cluster memory (GB) | -| `{kind}/cluster/avail_mem_gb` | Available memory (GB) | +| --- | --- | +| {kind}/cluster/total_cpus | Total CPUs in Ray cluster | +| {kind}/cluster/avail_cpus | Available (unused) CPUs | +| {kind}/cluster/total_gpus | Total GPUs in cluster | +| {kind}/cluster/avail_gpus | Available GPUs | +| {kind}/cluster/total_mem_gb | Total cluster memory (GB) | +| {kind}/cluster/avail_mem_gb | Available memory (GB) | ### Per-Stage Metrics (Consolidated Charts) Stage metrics are logged as consolidated `line_series` charts (one chart per metric, one line per stage): | Metric | Description | -|--------|-------------| -| `stages/actors_target` | Target number of actors per stage | -| `stages/actors_ready` | Actors ready to process per stage | -| `stages/actors_running` | Actors currently processing per stage | -| `stages/tasks_completed` | Total completed tasks per stage | -| `stages/queue_in` | Input queue depth per stage | -| `stages/queue_out` | Output queue depth per stage | -| `stages/speed_tasks_per_s` | Processing speed per stage | -| `stages/resource_cpu_util_pct` | CPU utilization per stage | -| `stages/resource_mem_gb` | Memory usage (GB) per stage | +| --- | --- | +| stages/actors_target | Target number of actors per stage | +| stages/actors_ready | Actors ready to process per stage | +| stages/actors_running | Actors currently processing per stage | +| stages/tasks_completed | Total completed tasks per stage | +| stages/queue_in | Input queue depth per stage | +| stages/queue_out | Output queue depth per stage | +| stages/speed_tasks_per_s | Processing speed per stage | +| stages/resource_cpu_util_pct | CPU utilization per stage | +| stages/resource_mem_gb | Memory usage (GB) per stage | ## Usage in Recipes @@ -132,7 +146,7 @@ else: ## JSONL Output -For offline analysis or when W&B isn't available, enable JSONL output: +For offline analysis or when W&B isnтАЩt available, enable JSONL output: ```yaml observability: @@ -162,27 +176,28 @@ Each line contains a JSON record: ### wandb_hook.py | Export | Description | -|--------|-------------| -| `WandbStatsHook` | Context manager that patches `PipelineMonitor._make_stats` | -| `make_wandb_stats_hook()` | Factory function for recipes | -| `log_plan_table_to_wandb()` | Log plan table showing datasets and processing config | +| --- | --- | +| WandbStatsHook | Context manager that patches PipelineMonitor._make_stats | +| make_wandb_stats_hook() | Factory function for recipes | +| log_plan_table_to_wandb() | Log plan table showing datasets and processing config | ### ObservabilityConfig | Field | Type | Default | Description | -|-------|------|---------|-------------| -| `wandb_log_pipeline_stats` | `bool` | `True` | Enable W&B logging | -| `wandb_log_plan_table` | `bool` | `True` | Log plan table to W&B | -| `wandb_log_progress_table` | `bool` | `True` | Log per-dataset progress table | -| `wandb_log_stage_table` | `bool` | `True` | Log stage overview table | -| `pipeline_logging_interval_s` | `int` | `30` | Logging interval in seconds | -| `pipeline_stats_jsonl_path` | `str \| None` | `None` | Path for JSONL output | +| --- | --- | --- | --- | +| wandb_log_pipeline_stats | bool | True | Enable W&B logging | +| wandb_log_plan_table | bool | True | Log plan table to W&B | +| wandb_log_progress_table | bool | True | Log per-dataset progress table | +| wandb_log_stage_table | bool | True | Log stage overview table | +| pipeline_logging_interval_s | int | 30 | Logging interval in seconds | +| pipeline_stats_jsonl_path | str | None | None | Path for JSONL output | ## Troubleshooting ### Metrics not appearing in W&B 1. Verify W&B is initialized before the pipeline runs: + ```python import wandb assert wandb.run is not None, "W&B not initialized" @@ -190,25 +205,30 @@ Each line contains a JSON record: 2. Check that `wandb_log_pipeline_stats: true` in your config -3. Ensure the hook is active during pipeline execution (check for log message: "Installed PipelineMonitor._make_stats patch") +3. Ensure the hook is active during pipeline execution (check for log message: тАЬInstalled PipelineMonitor._make_stats patchтАЭ) ### Import errors for cosmos_xenna The hook lazy-imports `cosmos_xenna` only when entering the context. If you see import errors: 1. Ensure cosmos-xenna is installed: `uv pip install cosmos-xenna` + 2. For Ray workers, use `--extra xenna` in the run command (handled automatically by recipes) ### Missing stage metrics Some stages may not report all metrics if: -- The stage hasn't processed any tasks yet + +- The stage hasnтАЩt processed any tasks yet + - The stage has `processing_speed_tasks_per_second = None` (no speed data available) These are expected behaviors and the hook gracefully handles missing data. ## Further Reading -- [Weights & Biases Integration](./wandb.md) тАУ W&B configuration and authentication -- [Data Preparation](./data-prep.md) тАУ data prep module overview -- [Artifact Lineage](./artifacts.md) тАУ tracking data lineage in W&B +- [Weights & Biases Integration](/wandb) тАУ W&B configuration and authentication + +- [Data Preparation](/data-prep) тАУ data prep module overview + +- [Artifact Lineage](/artifacts) тАУ tracking data lineage in W&B diff --git a/docs/fern/pages-vnightly/runspec/v1/spec.mdx b/docs/fern/pages-vnightly/runspec/v1/spec.mdx new file mode 100644 index 000000000..d17a7a857 --- /dev/null +++ b/docs/fern/pages-vnightly/runspec/v1/spec.mdx @@ -0,0 +1,168 @@ +--- +title: "Runspec: `[tool.runspec]` Specification" +slug: "runspec/v1/spec.html" +description: "Runspec is a declarative metadata format for recipe scripts. Each recipe embeds a [tool.runspec] block inside standard PEP 723 inline script metadata, describing what the script is and what it needs t" +--- + +## What is runspec? + +Runspec is a declarative metadata format for recipe scripts. Each recipe embeds +a `[tool.runspec]` block inside standard [PEP 723](https://peps.python.org/pep-0723/) inline script metadata, +describing **what the script is and what it needs** to run тАФ identity, container +image, launch method, config layout, and resource defaults. + +This keeps recipes self-describing and portable. Any tool (CLI, CI, notebook, +another cookbook) can read the same metadata without importing cookbook-specific +code. + +## Motivation + +Nemotron is a cookbook тАФ a reference implementation you fork and customize. The +key architectural goal is that an agent (or human) can freely port recipes between +workflow engines (nemo-run, SkyPilot, plain bash) without reverse-engineering how +a script should be launched. Runspec makes this possible by separating **what a +script needs** (declarative metadata) from **how it gets run** (execution logic +in CLI commands). + +Without runspec, recipe metadata is scattered across CLI wrappers, config files, +and docstrings. Adding a new recipe means editing multiple files. Porting to a +different workflow engine means tracing through code to rediscover identity, +image, launch method, and resource requirements. Runspec collapses all of this +into the script itself: + +- **Identity**: what is this recipe called? + +- **Environment**: what container image and setup does it need? + +- **Launch**: how should it be started (torchrun, ray, direct)? + +- **Config**: where do YAML configs live relative to the script? + +- **Resources**: what are sensible defaults for nodes and GPUs? + +Because this metadata is declarative and machine-readable, any tool can consume +it тАФ a CLI, a CI pipeline, a notebook, or an agent building a completely +different execution backend. See the [Design Philosophy](/../../architecture/design-philosophy) +for the broader principles behind this approach. + +## Format + +Runspec lives inside [PEP 723](https://peps.python.org/pep-0723/) inline script metadata тАФ the `# /// script` block +at the top of a Python file. Inside that block, runspec uses the `[tool.runspec]` +TOML table and its sub-tables. + +```python +#!/usr/bin/env python3 +# /// script +# [tool.runspec] +# schema = "1" +# docs = "https://raw.githubusercontent.com/NVIDIA-NeMo/Nemotron/main/docs/runspec/v1/spec.md" +# name = "nano3/pretrain" +# image = "nvcr.io/nvidia/nemo:25.11.nemotron_3_nano" +# setup = "NeMo and all training dependencies are pre-installed in the image." +# +# [tool.runspec.run] +# launch = "torchrun" +# +# [tool.runspec.config] +# dir = "./config" +# default = "default" +# format = "omegaconf" +# +# [tool.runspec.resources] +# nodes = 1 +# gpus_per_node = 8 +# /// +``` + +Each line is prefixed with `# ` per PEP 723 convention. The block starts with +`# /// script` and ends with `# ///`. + +## Schema (v1) + +### `[tool.runspec]` тАФ Top-level + +| Field | Type | Default | Description | +| --- | --- | --- | --- | +| schema | str | "1" | Schema version. Always "1" for now. | +| docs | str | "" | URL to this specification. Enables agents and tools to fetch the spec for context. Use a raw GitHub URL (e.g., https://raw.githubusercontent.com/NVIDIA-NeMo/Nemotron/main/docs/runspec/v1/spec.md). | +| name | str | "" | Recipe identity (e.g., "nano3/pretrain", "nano3/data/prep/sft"). Used in job names, display, and directory layout. | +| image | str? | null | Default container image for remote execution. | +| setup | str | "" | Human-readable description of what the image provides or what setup is needed. | + +### `[tool.runspec.run]` тАФ Launch configuration + +| Field | Type | Default | Description | +| --- | --- | --- | --- | +| launch | str | "torchrun" | How to start the script: "torchrun" (distributed), "ray" (Ray cluster), or "direct" (plain python). | +| cmd | str | "python {script} --config {config}" | Command template. Supports {script} and {config} placeholders. | +| workdir | str? | null | Working directory inside the container (e.g., "/opt/nemo-rl"). | + +### `[tool.runspec.config]` тАФ Config layout + +| Field | Type | Default | Description | +| --- | --- | --- | --- | +| dir | str | "./config" | Config directory, relative to the script file. | +| default | str | "default" | Name of the default config (without extension). | +| format | str | "omegaconf" | Config format: "omegaconf", "yaml", or "json". | + +### `[tool.runspec.resources]` тАФ Resource defaults + +| Field | Type | Default | Description | +| --- | --- | --- | --- | +| nodes | int | 1 | Default number of nodes. | +| gpus_per_node | int | 8 | Default GPUs per node. | + +### `[tool.runspec.env]` тАФ Environment variables + +An optional key-value table of environment variables to set at runtime: + +```toml +[tool.runspec.env] +NCCL_NVLS_ENABLE = "0" +``` + +## How the CLI uses runspec + +A typical CLI command reads runspec at import time and uses it throughout: + +```python +from nemo_runspec import parse as parse_runspec + +SCRIPT_PATH = "src/nemotron/recipes/nano3/stage0_pretrain/train.py" +SPEC = parse_runspec(SCRIPT_PATH) + +# SPEC.name тЖТ "nano3/pretrain" +# SPEC.image тЖТ container image for remote execution +# SPEC.config_dir тЖТ absolute path to config directory +# SPEC.config.default тЖТ "default" config name +# SPEC.run.launch тЖТ "torchrun" +``` + +The command file contains the visible execution logic тАФ runspec tells it **what** +to run, the command decides **how** (local, slurm, ray, etc.). + +## Adding a new recipe + +1. Write the training/data-prep script + +2. Add a `[tool.runspec]` block at the top + +3. Create a CLI command that calls `parse_runspec()` on it + +4. Register the command in the typer group + +The runspec block is the single source of truth. No need to duplicate metadata +in the CLI layer. + +## Reference implementation + +The `nemo_runspec` Python package (`src/nemo_runspec/`) implements: + +- **Parsing**: `_parser.py` extracts the PEP 723 block and parses the TOML + +- **Models**: `_models.py` defines the frozen `Runspec` dataclass + +- **CLI toolkit**: config loading, env.toml profiles, RecipeTyper, packaging, etc. + +See `src/nemo_runspec/README.md` for package-level documentation. diff --git a/docs/fern/pages-vnightly/sdg/getting-started.mdx b/docs/fern/pages-vnightly/sdg/getting-started.mdx new file mode 100644 index 000000000..b6fd025eb --- /dev/null +++ b/docs/fern/pages-vnightly/sdg/getting-started.mdx @@ -0,0 +1,308 @@ +--- +title: "Generate Your First Synthetic Dataset" +slug: "sdg/getting-started.html" +description: "In this tutorial, you will:" +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +SPDX-License-Identifier: Apache-2.0 + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */} + + + + + +**In this tutorial, you will**: + +1. Set up prerequisites: the repository and an NVIDIA API key. + +1. Read the default pipeline configuration. + +1. Run a preview to verify the pipeline and model. + +1. Generate a small dataset of five records. + +1. Locate and inspect the output JSON Lines (JSONL) file. + + This tutorial requires between 5 and 10 minutes to complete. + + + + +Run a 2-record preview of the default synthetic data generation (SDG) pipeline, then generate 5 records and show me the first output record. + + + + + +## Prerequisites + +- Run all commands from the repository root. + +- An `NVIDIA_API_KEY` for the default model, `nvidia/nemotron-3-nano-30b-a3b`. +Data generation runs against an NVIDIA-hosted endpoint, so you can complete this tutorial on any machine with network access. + +## How the Default Pipeline Works + +The default pipeline at `src/nemotron/steps/sdg/data_designer/config/default.yaml` combines two sources of variation for each record. +A *seed topic* is sampled from `sft_topic_seeds.jsonl`, for example a topic on safe deployment of AI assistants in enterprise support workflows. +A *persona category*, such as teacher or engineer, is sampled from a fixed category set. +Together they anchor a user prompt. +The pipeline generates a matching assistant response and projects the result into OpenAI chat-format messages. + +```yaml startLine={1} +# SFT synthetic chat тАФ expand seed topics into user/assistant turns. +# Schema mirrors the NVIDIA-NeMo/DataDesigner Python SDK; column specs are +# translated by step.py into the corresponding typed config builder calls. +# +# Defaults are Lepton-friendly and local-friendly: output lands under +# $SDG_OUTPUT_DIR when set, otherwise $NEMO_RUN_DIR/sdg or ./output/sdg. +# The seed dataset is packaged with this step. Override either at the CLI: +# `output_path=... seed_dataset.path=...`. + +output_dir: ${oc.env:SDG_OUTPUT_DIR,${oc.env:NEMO_RUN_DIR,${oc.env:PWD}/output}/sdg} +output_path: $\{output_dir\}/sft.jsonl +num_records: 1000 + +seed_dataset: + path: ${oc.env:PWD}/src/nemotron/steps/sdg/data_designer/data/sft_topic_seeds.jsonl + strategy: shuffle # shuffle | ordered + fields: [topic] + +# Models map an `alias` (referenced by llm_text/llm_structured columns) to a +# concrete model + provider + inference parameters. Override per-environment: +# - Cloud: provider: nvidia, set NVIDIA_API_KEY in the env profile. +# - Local: provider: openai, point at a vLLM/OpenAI-compatible endpoint. +# +# Set skip_health_check: true to skip Designer's startup probe тАФ useful when +# the model exists at runtime but isn't in the provider's catalog at config +# time, or for offline / vLLM endpoints. +models: + - alias: nvidia-text + model: nvidia/nemotron-3-nano-30b-a3b + provider: nvidia + skip_health_check: false + inference_parameters: + temperature: 0.8 + top_p: 1.0 + max_tokens: 1024 + +# Seed columns (e.g. `topic`) are added automatically when seed_dataset is set. +# Reference them in prompts as `{{ topic }}` without declaring them here. +columns: + - name: persona + type: category + values: [teacher, engineer, student, researcher, support_agent] + + - name: user_query + type: llm_text + model_alias: nvidia-text + prompt: | + Write a single user message for a {{ persona }} asking about: {{ topic }}. + Keep it natural, 1-3 sentences. + + - name: assistant_response + type: llm_text + model_alias: nvidia-text + prompt: | + Helpful assistant reply to: "{{ user_query }}". + Style: concise, factual, no markdown. + +output_projection: + type: openai_messages + user_field: user_query + assistant_field: assistant_response + metadata_fields: [persona, topic] +``` + +## Procedure + +1. Clone the repository, if you have not already done so: + + ```console + $ git clone https://github.com/NVIDIA-NeMo/Nemotron && cd Nemotron + ``` + +1. Install the dependencies for synthetic data generation: + + ```console + $ uv sync --extra data-sdg + ``` + +1. Set your NVIDIA API key: + + ```console + $ export NVIDIA_API_KEY="\" + ``` + +1. Run a 2-record preview to verify the model alias, prompts, and column mappings before generating at scale. + + ```console + $ uv run nemotron steps run sdg/data_designer -c default preview=true num_records=2 + ``` + + The pipeline registers the model alias, generates two rows, and prints a summary: + +**Example Output** + + ```text startLine={1} + + Compiled Configuration + + тХнтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА run тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтХо + тФВ mode: local тФВ + тФВ profile: null тФВ + тФВ env: {} тФВ + тФВ cli: тФВ + тФВ argv: тФВ + тФВ - preview=true тФВ + тФВ - num_records=2 тФВ + тФВ dotlist: тФВ + тФВ - preview=true тФВ + тФВ - num_records=2 тФВ + тФВ passthrough: [] тФВ + тФВ config: default тФВ + тФВ recipe: тФВ + тФВ name: steps/sdg/data_designer тФВ + тФВ script: /local/var/tmp/nvidia/nemotron/src/nemotron/steps/sdg/data_designer/step.py тФВ + тХ░тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтХп + + тХнтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА config тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтХо + тФВ output_dir: ${oc.env:SDG_OUTPUT_DIR,${oc.env:NEMO_RUN_DIR,${oc.env:PWD}/output}/sdg} тФВ + тФВ output_path: $\{output_dir\}/sft.jsonl тФВ + тФВ num_records: 2 тФВ + тФВ seed_dataset: тФВ + тФВ path: ${oc.env:PWD}/src/nemotron/steps/sdg/data_designer/data/sft_topic_seeds.jsonl тФВ + тФВ strategy: shuffle тФВ + тФВ fields: тФВ + тФВ - topic тФВ + тФВ models: тФВ + тФВ - alias: nvidia-text тФВ + тФВ model: nvidia/nemotron-3-nano-30b-a3b тФВ + тФВ provider: nvidia тФВ + тФВ skip_health_check: true тФВ + тФВ inference_parameters: тФВ + тФВ temperature: 0.8 тФВ + тФВ top_p: 1.0 тФВ + тФВ max_tokens: '******' тФВ + тФВ columns: тФВ + тФВ - name: persona тФВ + тФВ type: category тФВ + тФВ values: тФВ + тФВ - teacher тФВ + тФВ - engineer тФВ + тФВ - student тФВ + тФВ - researcher тФВ + тФВ - support_agent тФВ + тФВ - name: user_query тФВ + тФВ type: llm_text тФВ + тФВ model_alias: nvidia-text тФВ + тФВ prompt: 'Write a single user message for a {{ persona }} asking about: {{ topic тФВ + тФВ }}. тФВ + тФВ тФВ + тФВ Keep it natural, 1-3 sentences. тФВ + тФВ тФВ + тФВ ' тФВ + тФВ - name: assistant_response тФВ + тФВ type: llm_text тФВ + тФВ model_alias: nvidia-text тФВ + тФВ prompt: 'Helpful assistant reply to: "{{ user_query }}". тФВ + тФВ тФВ + тФВ Style: concise, factual, no markdown. тФВ + тФВ тФВ + тФВ ' тФВ + тФВ output_projection: тФВ + тФВ type: openai_messages тФВ + тФВ user_field: user_query тФВ + тФВ assistant_field: assistant_response тФВ + тФВ metadata_fields: тФВ + тФВ - persona тФВ + тФВ - topic тФВ + тФВ preview: true тФВ + тХ░тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтХп + + тХнтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтХо + тФВ Job Submission тФВ + тФВ тФЬтФАтФА configs тФВ + тФВ тФВ тФЬтФАтФА job: /local/var/tmp/nvidia/nemotron/.nemotron/jobs/20260509-133530-steps-sdg-data_designer/job.yaml тФВ + тФВ тФВ тФФтФАтФА train: /local/var/tmp/nvidia/nemotron/.nemotron/jobs/20260509-133530-steps-sdg-data_designer/train.yaml тФВ + тФВ тФФтФАтФА mode: local тФВ + тХ░тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтХп + + Executing: /local/var/tmp/nvidia/nemotron/.venv/bin/python3 /local/var/tmp/nvidia/nemotron/src/nemotron/steps/sdg/data_designer/step.py --config /local/var/tmp/nvidia/nemotron/.nemotron/jobs/20260509-133530-steps-sdg-data_designer/train.yaml + Preview 2 records тЖТ /local/var/tmp/nvidia/nemotron/output/sdg/sft.jsonl + ``` + +1. Generate the five-record dataset: + + ```console + $ uv run nemotron steps run sdg/data_designer -c default num_records=5 + ``` + + The default output path is `./output/sdg/sft.jsonl`. +To change the path, set the `SDG_OUTPUT_DIR` environment variable or pass `output_path=...` on the command line. + +1. Inspect the output. +Each line of `sft.jsonl` is one chat record. +The `openai_messages` projection emits a `messages` array along with the seed `topic` and sampled `persona` as metadata for traceability. +The following sample shows one record from the `sft.jsonl` file. + + ```json startLine={1} + { + "messages": [ + { + "role": "user", + "content": "Could you explain how reducing latency affects the quality of the modelтАЩs responses? IтАЩm trying to understand the tradeтАСoffs involved." + }, + { + "role": "assistant", + "content": "Reducing latency shortens the time the model takes to generate a response, which often means it has less computational budget or fewer inference steps. With fewer steps or a tighter budget, the model may:\n\n- Produce shorter, less nuanced outputs \n- Miss subtle contextual cues or deeper reasoning \n- Rely more on surfaceтАСlevel patterns rather than elaborate context \n- Be more prone to errors or hallucinations that would be filtered out with additional processing \n\nThe tradeтАСoff is speed versus depth: faster responses can be less thorough, less coherent, or lower in quality, especially for tasks that benefit from extended reasoning or detailed elaboration. Balancing the two involves choosing an acceptable latency target while preserving enough inference capacity to maintain the desired response quality." + } + ], + "persona": "teacher", + "topic": "tradeoffs between model latency and response quality" + } + ``` + +## Summary + +In this tutorial, you completed the following tasks: + +- Ran a 2-record preview to verify the pipeline and model. + +- Generated a 5-record SFT chat dataset with `default.yaml`. + +- Located the OpenAI-format JSONL output. + +As you scale this workflow up, keep two principles in mind: + +- Run a preview first. +The `preview=true num_records=N` form runs the same pipeline against a small record count, so you can iterate on column specifications and prompts before scaling `num_records` up. + +- The output format matches the trainer. +The `openai_messages` projection emits records ready for `data_prep/sft_packing` or AutoModel SFT. + +## Next Steps + +- Adapt the pipeline to a specific domain: [Create a Domain Dataset for Airlines Customer Service](/how-to/create-domain-dataset). + +- Preview, generate, and customize output: [Tips for the Data Generation Pipeline](/how-to/run). + +- Generate preference pairs for direct preference optimization (DPO): [Generate Preference Data for DPO](/how-to/preference-data). + +- Dispatch to a cluster: [Dispatch SDG to a Cluster](/how-to/dispatch-to-cluster) describes env.toml profiles and container images. + +- Look up flags and config fields: [CLI Reference](/reference/cli-reference), [Config Schema](/reference/config-schema). diff --git a/docs/fern/pages-vnightly/sdg/how-to/create-domain-dataset.mdx b/docs/fern/pages-vnightly/sdg/how-to/create-domain-dataset.mdx new file mode 100644 index 000000000..ec13e564f --- /dev/null +++ b/docs/fern/pages-vnightly/sdg/how-to/create-domain-dataset.mdx @@ -0,0 +1,249 @@ +--- +title: "Create a Domain Dataset for Airlines Customer Service" +slug: "sdg/how-to/create-domain-dataset.html" +description: "In this how-to guide, you will:" +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +SPDX-License-Identifier: Apache-2.0 + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */} + + + + + +**In this how-to guide, you will**: + +1. Create an airline-domain pipeline config. + +2. Create a seed file of airline inquiry scenarios. + +3. Swap the category columns for three airline-relevant dimensions. + +4. Rewrite the LLM prompts for the airline domain. + +5. Update the output projection and output path. + +6. Run a preview to verify, then generate 100 records. + + This guide requires between 20 and 30 minutes to complete. + + + + +Adapt the default SDG pipeline for Greenteme Airlines customer service with three category dimensions, run a 2-record preview, then generate 100 records and show me one output record. + + + + + +## Prerequisites + +- тЬЕ Completed [Generate Your First Synthetic Dataset](/../getting-started) тАФ at least one successful preview and full run of `default.yaml` so you know the pipeline works end-to-end. + +- тЬЕ `NVIDIA_API_KEY` set in your environment. + +## How This Differs From the Default Pipeline + +The default pipeline mixes a single category dimension, `persona`, with seed topics. +This example adds category dimensions, `traveler_segment`, `inquiry_type`, and `channel`, on top of seed scenarios so that diversity comes from explicit, controllable values. + +## Procedure + +1. Create a `src/nemotron/steps/sdg/data_designer/config/greenteme.yaml` (download) file like the following example: + + ```yaml startLine={1} + output_dir: ${oc.env:SDG_OUTPUT_DIR,${oc.env:NEMO_RUN_DIR,${oc.env:PWD}/output}/sdg} + output_path: $\{output_dir\}/greenteme_sft.jsonl + num_records: 100 + + seed_dataset: + path: ${oc.env:PWD}/src/nemotron/steps/sdg/data_designer/data/greenteme_inquiry_seeds.jsonl + strategy: shuffle + fields: [scenario] + + models: + - alias: nvidia-text + model: nvidia/nemotron-3-nano-30b-a3b + provider: nvidia + skip_health_check: true + inference_parameters: + temperature: 0.8 + top_p: 1.0 + max_tokens: 1200 + + columns: + - name: traveler_segment + type: category + values: + - frequent_flyer + - business_traveler + - family_with_children + - first_time_international + - elite_loyalty_member + - leisure_couple + + - name: inquiry_type + type: category + values: + - rebooking + - baggage_issue + - refund_request + - loyalty_status + - fare_rules + - flight_status + + - name: channel + type: category + values: [chat, phone, app] + + - name: user_query + type: llm_text + model_alias: nvidia-text + prompt: | + You are role-playing a {{ traveler_segment }} contacting Greenteme Airlines + via {{ channel }} about a {{ inquiry_type }}. The scenario is: + "{{ scenario }}" + + Write the customer's first message. Keep it natural, 1-3 sentences. + Do not reference any real airline name, real flight number, or real + loyalty program. + + - name: assistant_response + type: llm_text + model_alias: nvidia-text + prompt: | + You are a customer-service agent at Greenteme Airlines, a fictional airline. + Reply to this customer message: + + "{{ user_query }}" + + Provide a concise, professional, compliant response, 2-4 sentences. Stay + realistic and grounded in standard airline policy. Do not invent real + airline names, real flight numbers, real PNR codes, or real loyalty + program details. No markdown. + + output_projection: + type: openai_messages + user_field: user_query + assistant_field: assistant_response + metadata_fields: [traveler_segment, inquiry_type, channel, scenario] + ``` + + The key differences from the default pipeline: + + - The variation for traveler segment, inquiry type, and channel are all provided by category-type columns. + + - The variation for the scenarios is provided by the seed JSONL file from the next step. + + - The system-style instruction lives at the top of each prompt rather than as a separate field. The LLM text columns take a single prompt that includes the role for the LLM to assume. + + - The `output_projection` field includes the new metadata fields. + +2. Create a seed file, `src/nemotron/steps/sdg/data_designer/data/greenteme_inquiry_seeds.jsonl`, (download) like the following example: + + ```json startLine={1} + {"scenario": "Connecting flight cancelled due to weather; customer needs to arrive at destination by tomorrow morning for a wedding."} + {"scenario": "Checked baggage missing on arrival; flight landed two hours ago and the bag did not appear at the carousel."} + {"scenario": "Customer wants a refund on a non-refundable ticket due to a documented medical emergency."} + {"scenario": "Customer is unsure why their loyalty status was downgraded this year and wants to understand the qualifying criteria."} + {"scenario": "Customer wants to change a fare class on an existing booking and needs to know the fare difference and any change fees."} + {"scenario": "Flight is showing a four-hour delay and the customer wants to know whether they will make their connection."} + {"scenario": "Customer was double-charged for a seat upgrade and wants the duplicate charge reversed."} + {"scenario": "Customer needs to add a service animal to an upcoming international flight and wants to know what documentation is required."} + {"scenario": "Bag damaged in transit; customer needs to file a claim and wants the timeline and required documentation."} + {"scenario": "Customer rebooked through self-service and is now seated apart from a travel companion; they want to be reseated together."} + {"scenario": "Customer wants to use a travel credit from a previous cancellation but cannot find the credit number in their account."} + {"scenario": "Customer's payment method was declined when trying to complete a booking and they want to know what to do."} + ``` + +1. Run a preview by specifying `preview=true num_records=2` to verify the pipeline before scaling: + + ```console + $ nemotron steps run sdg/data_designer -c greenteme preview=true num_records=2 + ``` + +**Example Output** + + ```json startLine={1} + { + "messages": [ + { + "role": "user", + "content": "Hi! I'm traveling internationally for the first time soon and need to add a service animal to my booking. Could you let me know what documentation I need to provide?" + }, + { + "role": "assistant", + "content": "Thank you for contacting Greenteme Airlines. Please provide a valid government-issued health certificate and a signed service animal relief form for your destination country. You can upload these documents through the Manage Booking section of our website at least 48 hours before departure." + } + ], + "traveler_segment": "first_time_international", + "inquiry_type": "rebooking", + "channel": "app", + "scenario": "Customer needs to add a service animal to an upcoming international flight and wants to know what documentation is required." + } + { + "messages": [ + { + "role": "user", + "content": "\"Hi, I just rebooked my flight online and realized my companion and I are now seated in different rows. Is there any way you can help us get seats together?\"" + }, + { + "role": "assistant", + "content": "Hello, thank you for reaching out to Greenteme Airlines. Please provide your booking reference, and we will check for available adjacent seats to move you and your companion together. Note that depending on your fare class, a seat selection fee may apply." + } + ], + "traveler_segment": "first_time_international", + "inquiry_type": "refund_request", + "channel": "phone", + "scenario": "Customer rebooked through self-service and is now seated apart from a travel companion; they want to be reseated together." + } + ``` + +1. Generate the dataset by raising `num_records` after the preview output looks correct: + + ```console + $ nemotron steps run sdg/data_designer -c greenteme num_records=100 + ``` + +## Going Further + +**Locale-aware persona profiles.** The current YAML schema supports category, seed, and LLM column types. To replace the static `traveler_segment` category with Census-grounded persona profiles using Data DesignerтАЩs [person sampler](https://nvidia-nemo.github.io/DataDesigner/latest/concepts/person_sampling/), you can include locale, age range, and synthetic-personas integration. + +**Multi-turn conversations.** The example shows a single user and assistant exchange. +For multi-turn dialogue, follow the `customer_support_tools.yaml` pattern: ask one `llm_text` column to return a JSON object with `messages` and optional `tools`, then use the `structured_messages` output projection to write training-ready JSONL. + +**Dispatch to a cluster.** Generation runs locally against the NVIDIA-hosted endpoint by default. To run on Lepton or Slurm, see [Dispatch SDG to a Cluster](/dispatch-to-cluster) тАФ env.toml profiles, container images, and the gotchas that bite first-time cluster runs. + +## Schema and Downstream Use + +The `openai_messages` projection emits records with a `messages` array plus the metadata fields you list. These flow directly into: + +- `data_prep/sft_packing` for Megatron-Bridge-style training, or + +- AutoModel SFT, which consumes the chat format directly. + +For a full reference of available projection shapes, see [Output Projections](/../reference/output-projections). + +## Next Steps + +- **Generate preference pairs for DPO**: [Generate Preference Data for DPO](/preference-data) тАФ the `rl_pref.yaml` pattern. + +- **Generate tool-calling SFT data**: [Generate Tool-Calling Data for SFT](/tool-call-data) тАФ multi-turn `messages` and `tools` with `structured_messages`. + +- **CLI flags and overrides**: [CLI Reference](/../reference/cli-reference). + +- **Config schema**: [Config Schema](/../reference/config-schema) тАФ full reference for column types, samplers, and projections. + +- **Pipeline overview**: [About Synthetic Data Generation](/../index). diff --git a/docs/fern/pages-vnightly/sdg/how-to/dispatch-to-cluster.mdx b/docs/fern/pages-vnightly/sdg/how-to/dispatch-to-cluster.mdx new file mode 100644 index 000000000..37d55b0f9 --- /dev/null +++ b/docs/fern/pages-vnightly/sdg/how-to/dispatch-to-cluster.mdx @@ -0,0 +1,169 @@ +--- +title: "Dispatch SDG to a Cluster" +slug: "sdg/how-to/dispatch-to-cluster.html" +description: "This guide covers configuring an env.toml profile and running sdg/data_designer on Lepton or Slurm. Generation is CPU-only (no GPUs needed) and calls a remote LLM endpoint, so the step fits naturally " +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +SPDX-License-Identifier: Apache-2.0 + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */} + + + +This guide covers configuring an env.toml profile and running `sdg/data_designer` on Lepton or Slurm. Generation is CPU-only (no GPUs needed) and calls a remote LLM endpoint, so the step fits naturally on a CPU node with outbound network access. + +## env.toml Profile Shape + +Add a profile to `env.toml` (repository root). The example below targets a Lepton CPU node: + +```toml +[lepton_sdg_data_designer] +executor = "lepton" +container_image = "nvcr.io/nvidia/nemo:25.11.nemotron_3_nano" +nemo_run_dir = "/mnt/shared/nemo-run" +nodes = 1 +gpus_per_node = 0 +resource_shape = "cpu.large" +node_group = "your-node-group" +shared_memory_size = 1024 +can_be_preempted = true +queue_priority = "mid-4000" +startup_commands = [ + "python -m pip install --quiet --break-system-packages 'data-designer==0.5.5'" +] +mounts = [ + { path = "/your-nfs-source", mount_path = "/mnt/shared", from = "node-nfs:your-nfs-id" } +] + +[lepton_sdg_data_designer.env_vars] +NVIDIA_API_KEY = "${oc.env:NVIDIA_API_KEY}" +``` + +## Run + +```console +$ uv run --no-sync nemotron steps run sdg/data_designer -c default --batch lepton_sdg_data_designer num_records=1000 +``` + +Use `--run` instead of `--batch` to stream logs interactively. + +## Known Gotchas + +These are the failure modes that commonly affect first-time cluster SDG runs. + +### `data-designer` is not pre-installed in the container + +The NeMo container image does not include `data-designer`. Install it at startup via `startup_commands`: + +```toml +startup_commands = [ + "python -m pip install --quiet --break-system-packages 'data-designer==0.5.5'" +] +``` + +Do not omit `--break-system-packages` тАФ without it pip refuses to install into the system Python on recent NeMo images. + +### Default `shared_memory_size` crashes a CPU node + +The runspec default for `shared_memory_size` is 65536 MB (64 GB), which exceeds the RAM of most CPU node types and causes the job to be rejected or OOM-killed immediately. Set it to a small value; this step makes no use of shared memory: + +```toml +shared_memory_size = 1024 +``` + +### `nemo_run_dir` must be on shared storage + +`nemo-run` uses a busybox data-mover sidecar to stage the launch script into `nemo_run_dir`. If this path is not visible to both the data-mover and the main container тАФ specifically if it is local to one node тАФ the main container never finds the script and the job fails with `No such file or directory`. + +Set `nemo_run_dir` to a path on the shared NFS mount and include the mount in your profile: + +```toml +nemo_run_dir = "/mnt/shared/nemo-run" +mounts = [ + { path = "/your-nfs-source", mount_path = "/mnt/shared", from = "node-nfs:your-nfs-id" } +] +``` + + +In the `mounts` table, `path` is the NFS **source** path on the NFS server тАФ not the in-container destination. `mount_path` is the in-container path. + + + +### `NVIDIA_API_KEY` is not forwarded automatically + +Unlike `HF_TOKEN` and `WANDB_API_KEY`, `NVIDIA_API_KEY` is not automatically forwarded to the container. Declare it explicitly in the `env_vars` section: + +```toml +[lepton_sdg_data_designer.env_vars] +NVIDIA_API_KEY = "${oc.env:NVIDIA_API_KEY}" +``` + +Set it in your local shell before submitting the job: + +```console +$ export NVIDIA_API_KEY="your-api-key" +$ uv run --no-sync nemotron steps run sdg/data_designer -c default --batch lepton_sdg_data_designer num_records=1000 +``` + +### Container image: always look up, never guess + +Do not invent image tags. `nemo:latest` does not exist on `nvcr.io`. Check `src/nemotron/steps/sdg/data_designer/step.py` header comments or `src/nemotron/steps/env/env_toml/config/lepton.yaml` for known-good image references before setting `container_image`. + +### Preemption and queue-priority fields were not wired (now fixed) + +`can_be_preempted`, `can_preempt`, and `queue_priority` are now forwarded from env.toml to `LeptonExecutor`. If you are on an older version of the repo where these were silently ignored, upgrade before expecting preemption scheduling to take effect. + +## Slurm Profile + +For Slurm, replace the Lepton-specific fields with Slurm equivalents. The `startup_commands` and `env_vars` gotchas apply equally: + +```toml +[slurm-sdg] +executor = "slurm" +container_image = "nvcr.io/nvidia/nemo:25.11.nemotron_3_nano" +nemo_run_dir = "/lustre/team/nemo-run" +nodes = 1 +gpus_per_node = 0 +run_partition = "cpu" +batch_partition = "cpu" +startup_commands = [ + "python -m pip install --quiet --break-system-packages 'data-designer==0.5.5'" +] + +[slurm-sdg.env_vars] +NVIDIA_API_KEY = "${oc.env:NVIDIA_API_KEY}" +``` + + +On clusters where the default partition requires GPUs (for example, NVIDIAтАЩs `dlw` cluster), set `run_partition` and `batch_partition` to a CPU-capable partition. `gpus_per_node = 0` alone is not sufficient тАФ the partition itself must accept zero-GPU jobs. + + + +## Verify Before Scaling + +Run a preview via the cluster profile before a large batch: + +```console +$ uv run --no-sync nemotron steps run sdg/data_designer -c default --run lepton_sdg_data_designer preview=true num_records=2 +``` + +Confirm the job reaches `Running`, the model alias check succeeds, and two records are returned before submitting the full job. + +## Next Steps + +- **env.toml reference**: `docs/nemo_runspec/nemo-run.md` тАФ full profile field reference. + +- **CLI flags**: [CLI Reference](/../reference/cli-reference). + +- **Troubleshooting**: [Troubleshooting](/../reference/troubleshooting) тАФ full failure-mode reference. diff --git a/docs/fern/pages-vnightly/sdg/how-to/index.mdx b/docs/fern/pages-vnightly/sdg/how-to/index.mdx new file mode 100644 index 000000000..0be1b61cd --- /dev/null +++ b/docs/fern/pages-vnightly/sdg/how-to/index.mdx @@ -0,0 +1,75 @@ +--- +title: "Synthetic Data How-To Guides" +slug: "sdg/how-to/index.html" +description: "This section provides task-focused guides for common SDG workflows. For your first run, start with Generate Your First Synthetic Dataset." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +SPDX-License-Identifier: Apache-2.0 + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */} + + + +This section provides task-focused guides for common SDG workflows. +For your first run, start with [Generate Your First Synthetic Dataset](/../getting-started). + +If you are new to model training or want a calmer on-ramp before tasks, read [Use the SDG Skill With Confidence](/../using-skills) for how to run a productive session with a coding agent. + + + +Preview, generate, and customize output path and projection. + +--- + +10 min intermediate + + + + +Adapt the pipeline to a custom domain with a seed file and multiple category dimensions. + +--- + +20 min intermediate + + + + +Generate multi-turn conversations with OpenAI-style tool calls for tool-use SFT. + +--- + +15 min intermediate + + + + +Generate DPO preference pairs (prompt / chosen / rejected) from `rl_pref.yaml`. + +--- + +15 min intermediate + + + + +Configure an env.toml profile and run SDG on Lepton or Slurm. + +--- + +30 min intermediate + + + + diff --git a/docs/fern/pages-vnightly/sdg/how-to/preference-data.mdx b/docs/fern/pages-vnightly/sdg/how-to/preference-data.mdx new file mode 100644 index 000000000..2d428da19 --- /dev/null +++ b/docs/fern/pages-vnightly/sdg/how-to/preference-data.mdx @@ -0,0 +1,166 @@ +--- +title: "Generate Preference Data for DPO" +slug: "sdg/how-to/preference-data.html" +description: "This example shows how to use the rl_pref.yaml configuration file. The example generates prompt, chosen, and rejected triples for direct preference optimization (DPO) training. Output flows directly i" +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +SPDX-License-Identifier: Apache-2.0 + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */} + + + +This example shows how to use the `rl_pref.yaml` configuration file. +The example generates *prompt*, *chosen*, and *rejected* triples for direct preference optimization (DPO) training. +Output flows directly into `data_prep/rl_prep` and then `rl/nemo_rl/dpo`. + +## How It Works + +The `rl_pref.yaml` file registers two model aliases at different temperatures: +a high-temperature creative model and a low-temperature precise model. +The goal is to produce two responses per prompt that are distinct: + +```yaml startLine={1} +# DPO preference data тАФ two responses per prompt + LLM judge for chosen/rejected. + +output_dir: ${oc.env:SDG_OUTPUT_DIR,${oc.env:NEMO_RUN_DIR,${oc.env:PWD}/output}/sdg} +output_path: $\{output_dir\}/rl_pref.jsonl +num_records: 100 + +seed_dataset: + path: ${oc.env:PWD}/src/nemotron/steps/sdg/data_designer/data/rl_pref_prompt_seeds.jsonl + strategy: shuffle + fields: [prompt] + +# Two model aliases: a high-temperature 'creative' model and a low-temperature +# 'precise' model, so the resulting preference pairs are meaningfully distinct. +models: + - alias: nvidia-text + model: nvidia/nemotron-3-nano-30b-a3b + provider: nvidia + skip_health_check: false + inference_parameters: + temperature: 0.9 + top_p: 1.0 + max_tokens: 1024 + + - alias: nvidia-text-precise + model: nvidia/nemotron-3-nano-30b-a3b + provider: nvidia + skip_health_check: false + inference_parameters: + temperature: 0.3 + top_p: 1.0 + max_tokens: 1024 + +# `prompt` is supplied automatically by the seed dataset (must match the field +# name in the seed JSONL). No need to declare it here. +columns: + - name: response_a + type: llm_text + model_alias: nvidia-text + prompt: "Answer the user's question: {{ prompt }}" + + - name: response_b + type: llm_text + model_alias: nvidia-text-precise + prompt: "Answer the user's question: {{ prompt }}" + + - name: judge + type: llm_judge + model_alias: nvidia-text + prompt: | + Compare two responses for: {{ prompt }} + A: {{ response_a }} + B: {{ response_b }} + Which is more helpful and correct? + output_format: + type: object + properties: + winner: + type: string + enum: [A, B] + required: [winner] + +output_projection: + type: dpo_preference + prompt_field: prompt + response_a_field: response_a + response_b_field: response_b + judge_field: judge + winner_field: winner +``` + +For each seed prompt the pipeline: + +1. Generates `response_a` (high temperature) and `response_b` (low temperature) independently. + +2. Asks a third LLM call (`judge` column, `llm_judge` type) to compare them and return `\{"winner": "A"\}` or `\{"winner": "B"\}`. + +3. The `dpo_preference` projection maps winner тЖТ chosen / rejected and writes `\{"prompt": "...", "chosen": "...", "rejected": "..."\}`. + +## Prerequisites + +- `NVIDIA_API_KEY` set in your environment. + +- A seed file with one `prompt` field per line. The bundled `rl_pref_prompt_seeds.jsonl` contains general reasoning prompts. Replace it with domain-specific prompts for targeted preference data. + +## Procedure + +1. Preview two records to verify the judge returns valid `winner` values: + + ```console + $ nemotron steps run sdg/data_designer -c rl_pref preview=true num_records=2 + ``` + +2. Generate the dataset. The checked-in `rl_pref.yaml` default is 100 records: + + ```console + $ nemotron steps run sdg/data_designer -c rl_pref num_records=500 + ``` + + Output is written to `./output/sdg/rl_pref.jsonl`. + + Inspect the output. Each line is a preference triple: + + ```json + {"prompt": "Explain why retrieval-augmented generation can reduce hallucinations.", "chosen": "RAG grounds the model in retrieved documents, so claims are tied to specific passages rather than purely to weights.", "rejected": "RAG is better because it uses more data and is generally smarter than standard models."} + ``` + +## Adapt the Seed File + +Swap `seed_dataset.path` to point at your own prompt seed file. Each line must be valid JSON with a `prompt` field: + +```json +{"prompt": "Describe the tradeoffs between batch and streaming inference for real-time applications."} +``` + +Keep seed prompts representative of the target capability and diverse across difficulty levels. +The judge performs better when the two responses have a clear quality differenceтАУconsider widening the temperature gap between the two model aliases if the judge returns many ties or unexpected results. + +## Downstream Pipeline + +```text +rl_pref.jsonl тЖТ data_prep/rl_prep тЖТ rl/nemo_rl/dpo +``` + +`data_prep/rl_prep` tokenizes and prepares preference pairs. `rl/nemo_rl/dpo` consumes the prepared dataset. Verify the `prompt`, `chosen`, and `rejected` fields are present in every record before handing off. + +## Next Steps + +- **Output projection reference**: [Output Projections](/../reference/output-projections) тАФ `dpo_preference` schema. + +- **Config schema**: [Config Schema](/../reference/config-schema) тАФ `llm_judge` column type and `dpo_preference` projection fields. + +- **Dispatch to a cluster**: [Dispatch SDG to a Cluster](/dispatch-to-cluster). diff --git a/docs/fern/pages-vnightly/sdg/how-to/run.mdx b/docs/fern/pages-vnightly/sdg/how-to/run.mdx new file mode 100644 index 000000000..7adfaa4ce --- /dev/null +++ b/docs/fern/pages-vnightly/sdg/how-to/run.mdx @@ -0,0 +1,67 @@ +--- +title: "Tips for the Data Generation Pipeline" +slug: "sdg/how-to/run.html" +description: "Always preview before running a full generation job. Preview mode calls the same pipeline with a small record count, projects the records, and writes them to output_path:" +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +SPDX-License-Identifier: Apache-2.0 + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */} + + + +## Preview Before Generating + +Always preview before running a full generation job. Preview mode calls the same pipeline with a small record count, projects the records, and writes them to `output_path`: + +```console +$ nemotron steps run sdg/data_designer -c default preview=true num_records=2 +``` + +Use preview to verify: + +- Column references in prompts (`\{\{ column_name \}\}`) resolve to the expected values. + +- Seed fields, such as `\{\{ scenario \}\}`, `\{\{ prompt \}\}`, and so on, are populated from the seed file. + +- The model returns text that matches the promptтАЩs intent. + +- The `output_projection` produces the schema downstream steps expect. + +## Specify a Configuration File + +The repository includes the following sample config files in the `src/nemotron/steps/sdg/data_designer/config` directory: + +| Config | Output | Use for | +| --- | --- | --- | +| default.yaml | SFT chat (openai_messages) | General chat SFT | +| customer_support_tools.yaml | Tool-call SFT (structured_messages) | Tool-use SFT | +| rl_pref.yaml | Preference pairs (dpo_preference) | DPO / RLHF | +| tiny.yaml | SFT chat, 10 records, short tokens | Fast iteration | + +Specify the file in the `-c` argument: + +```console +$ nemotron steps run sdg/data_designer -c customer_support_tools preview=true num_records=2 +``` + +## Run Attached on a Cluster Profile + +To dispatch to a Lepton or Slurm profile configured in `env.toml`, use `--run` (attached, streams logs) or `--batch` (detached): + +```console +$ nemotron steps run sdg/data_designer -c default --run my-lepton-profile num_records=1000 +``` + +For cluster setup, see [Dispatch SDG to a Cluster](/dispatch-to-cluster). diff --git a/docs/fern/pages-vnightly/sdg/how-to/tool-call-data.mdx b/docs/fern/pages-vnightly/sdg/how-to/tool-call-data.mdx new file mode 100644 index 000000000..796bac4a1 --- /dev/null +++ b/docs/fern/pages-vnightly/sdg/how-to/tool-call-data.mdx @@ -0,0 +1,310 @@ +--- +title: "Generate Tool-Calling Data for SFT" +slug: "sdg/how-to/tool-call-data.html" +description: "Use this guide when you need multi-turn chat JSONL where the assistant issues OpenAI-style tool_calls and a tool role returns structured results, suitable for supervised fine-tuning (SFT) with a tools" +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +SPDX-License-Identifier: Apache-2.0 + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */} + + + +Use this guide when you need multi-turn chat JSONL where the assistant issues OpenAI-style `tool_calls` and a `tool` role returns structured results, suitable for supervised fine-tuning (SFT) with a `tools` definition array. + +You will use the sample config `customer_support_tools.yaml`, which produces ecommerce-style support threads. Each output row includes a `messages` array (with tool turns) and a `tools` array, ready for packing and training. + +## Outcomes + +- Understand how the shipped config asks one `llm_text` column to emit a full JSON multi-turn trace in a single model call. + +- Preview, generate, and validate records before training. + +- Know how to retarget seeds, prompts, and schema for your own domain. + +## How It Works + +Compared with single-turn configs such as `default.yaml`, this setup drives the whole conversation from one `llm_text` column. +The prompt tells the model to return a JSON object with `tools` and `messages` keys. +The `structured_messages` output projection parses that JSON object, extracts `messages` and `tools`, adds metadata, and serializes nested tool payload objects into OpenAI-compatible string fields. + +```yaml startLine={1} +# Multi-turn customer-support SFT data with OpenAI-style tool calls. +# +# Output records are training-ready JSONL: +# {"messages": [...], "tools": [...], ...metadata} +# +# Each generated conversation includes one assistant tool call, one matching +# tool response, and a final assistant answer grounded in that tool result. + +output_dir: ${oc.env:SDG_OUTPUT_DIR,${oc.env:NEMO_RUN_DIR,${oc.env:PWD}/output}/sdg} +output_path: $\{output_dir\}/customer_support_tool_sft.jsonl +num_records: 100 + +seed_dataset: + path: ${oc.env:PWD}/src/nemotron/steps/sdg/data_designer/data/customer_support_tool_seeds.jsonl + strategy: shuffle + fields: [customer_name, issue, order_id, product, policy_hint] + +# Optional custom endpoint example: +# +# To route this pipeline through an OpenAI-compatible endpoint instead of the +# built-in NVIDIA provider, uncomment and edit both blocks below. +# Keep providers[].api_key as the environment variable name. Data Designer +# resolves it at request time; using `${oc.env:OPENAI_API_KEY}` here would put +# the secret into the resolved config. +# +# providers: +# - name: my-provider +# endpoint: ${oc.env:OPENAI_BASE_URL} +# provider_type: openai +# api_key: OPENAI_API_KEY +# +# models: +# - alias: nvidia-text +# model: google/gemma-4-31B-it +# provider: my-provider +# skip_health_check: true +# inference_parameters: +# temperature: 0.75 +# top_p: 0.95 +# max_tokens: 1800 + +models: + - alias: nvidia-text + model: openai/gpt-oss-20b + provider: nvidia + skip_health_check: false + inference_parameters: + temperature: 0.75 + top_p: 0.95 + max_tokens: 1800 + +columns: + - name: urgency + type: category + values: [calm, frustrated, rushed, confused] + + - name: channel + type: category + values: [web_chat, mobile_app, email_followup] + + - name: conversation + # Keep this as text instead of llm_structured: Designer writes intermediate + # batches to parquet before this step can project records, and complex + # nested objects can produce mixed object schemas across rows. + type: llm_text + model_alias: nvidia-text + prompt: | + Generate one realistic multi-turn ecommerce customer-support chat for SFT. + + Seed facts: + - customer_name: {{ customer_name }} + - customer_issue: {{ issue }} + - order_id: {{ order_id }} + - product: {{ product }} + - policy_hint: {{ policy_hint }} + - customer_tone: {{ urgency }} + - channel: {{ channel }} + + Requirements: + - Return ONLY a JSON object. The first character MUST be `{`, the last MUST be `}`. + - No prose, no preamble, no apology, no commentary, no markdown fences (no ```). + - Top-level keys MUST be exactly "tools" and "messages". + - Produce 6 to 10 messages in OpenAI chat format. + - Include a brief system message that defines the support-agent behavior. + - The user should speak naturally and provide imperfect information at first. + - The assistant should ask at least one clarifying question before using a tool. + - Include exactly one assistant message with tool_calls. + - Include exactly one tool message that has the matching tool_call_id. + - The assistant's final answer must use the tool result and the policy_hint. + - Do not include markdown in message content. + - In the generated JSON object, function arguments must be JSON objects, not escaped JSON strings. + - In the generated JSON object, tool message content must be a JSON object, not an escaped JSON string. + + Available tool functions: + - lookup_order(order_id: string) + - check_refund_eligibility(order_id: string, reason: string) + - update_shipping_address(order_id: string, new_address: string) + - verify_warranty(order_id: string, product: string) + - get_subscription_status(order_id: string) + + Example assistant tool-call message shape: + { + "role": "assistant", + "content": "", + "tool_calls": [ + { + "id": "call_lookup_001", + "type": "function", + "function": { + "name": "lookup_order", + "arguments": {"order_id": "ORD-10492"} + } + } + ] + } + + Example tool message shape: + { + "role": "tool", + "tool_call_id": "call_lookup_001", + "name": "lookup_order", + "content": {"status": "delayed", "eta": "tomorrow"} + } + Schema: + { + "tools": [ + { + "type": "function", + "function": { + "name": "lookup_order", + "description": "Look up an order by ID.", + "parameters": { + "type": "object", + "properties": {"order_id": {"type": "string"}}, + "required": ["order_id"] + } + } + } + ], + "messages": [ + {"role": "system", "content": "You are a helpful support agent."}, + {"role": "user", "content": "User message"}, + { + "role": "assistant", + "content": "", + "tool_calls": [ + { + "id": "call_lookup_001", + "type": "function", + "function": { + "name": "lookup_order", + "arguments": {"order_id": "ORD-10492"} + } + } + ] + }, + { + "role": "tool", + "tool_call_id": "call_lookup_001", + "name": "lookup_order", + "content": {"status": "delayed", "eta": "tomorrow"} + }, + {"role": "assistant", "content": "Final grounded answer"} + ] + } + +output_projection: + type: structured_messages + source_field: conversation + messages_field: messages + tools_field: tools + metadata_fields: [customer_name, issue, order_id, product, urgency, channel] +``` + +Each seed row supplies five anchor fields the prompt interpolates: `customer_name`, `issue`, `order_id`, `product`, and `policy_hint`. Two extra category columns (`urgency`, `channel`) add variety without multiplying seed rows for every combination. + +## Prerequisites + +- Nemotron CLI available and working; if this is your first SDG run, complete [Generate Your First Synthetic Dataset](/../getting-started). + +- `NVIDIA_API_KEY` set in the environment. + +- The bundled seed file `data/customer_support_tool_seeds.jsonl` (shipped with the step). Add rows, or point the config at your own JSONL. + +## Procedure + +1. Preview two records so structured output matches the schema: + + ```console + $ nemotron steps run sdg/data_designer -c customer_support_tools preview=true num_records=2 + ``` + + In the preview, confirm: + + - Exactly one assistant message with `tool_calls`. + + - Exactly one `tool` message whose `tool_call_id` matches the call. + + - `function.arguments` and tool-message `content` are JSON strings after projection. + + - The assistantтАЩs closing turn references the tool result (not a generic reply). + + - No markdown in message `content` if your trainer expects plain text. + +2. Generate the dataset: + + ```console + $ nemotron steps run sdg/data_designer -c customer_support_tools num_records=200 + ``` + + Output path: `./output/sdg/customer_support_tool_sft.jsonl`. +Spot-check a few lines. Each record exposes top-level `messages` and `tools` plus metadata, like the following example: + + ```text + { + "messages": [ + {"role": "system", "content": "You are a helpful ecommerce support agent..."}, + {"role": "user", "content": "Hi, I haven't received my headphones yet..."}, + {"role": "assistant", "content": "I'd be happy to help. Could you share your order number?"}, + {"role": "user", "content": "It's ORD-10492."}, + {"role": "assistant", "content": "", "tool_calls": [{"id": "call_001", "type": "function", "function": {"name": "lookup_order", "arguments": "{\"order_id\":\"ORD-10492\"}"}}]}, + {"role": "tool", "tool_call_id": "call_001", "name": "lookup_order", "content": "{\"status\":\"delayed\",\"eta\":\"tomorrow\"}"}, + {"role": "assistant", "content": "Your order is delayed and should arrive tomorrow. Per our policy, I can arrange an expedited replacement if you prefer."} + ], + "tools": [{"type": "function", "function": {"name": "lookup_order", "description": "...", "parameters": {...}}}], + "customer_name": "Priya", "issue": "late delivery", "urgency": "frustrated", "channel": "web_chat" + } + ``` + +## Adapt to Your Domain + +1. Replace or extend the seed file so rows cover your entities. You may rename the five anchor fields as long as the prompt and YAML refer to the same names. + +2. Update `seed_dataset.fields` in the YAML to match those names. + +3. Rewrite the `prompt` for your scenario and tool surface. + +4. Adjust the JSON schema described in the prompt if the message layout changes, for example multiple tool calls per conversation. + +Keep `output_projection` as `structured_messages` so the step extracts `messages` and `tools` from the structured column and merges category metadata onto each record. + +## Validation Checklist + +Before training, sample at least 50 records and verify: + +- Every `tool_calls` block has a matching `tool` message with the same `tool_call_id`. + +- `function.arguments` and tool-message `content` values are JSON strings in the projected JSONL. + +- The assistantтАЩs final reply uses the tool result (not a canned answer that ignores it). + +- No unexpected markdown in `content` if the trainer assumes plain text. + +- `tools` is present and non-empty on every record. + +## Downstream Use + +```text +customer_support_tool_sft.jsonl тЖТ data_prep/sft_packing тЖТ SFT training +``` + +The `structured_messages` projection writes `messages` and `tools` at the top level, matching formats common to AutoModel-style SFT and Megatron-Bridge-style workflows. Run `data_prep/sft_packing` in dry-run mode before a large training job to confirm the packer accepts your file. + +## Next Steps + +- Output projection reference: [Output Projections](/../reference/output-projections) to learn the `structured_messages` schema. + +- Config schema: [Config Schema](/../reference/config-schema) for column types and output projections. diff --git a/docs/fern/pages-vnightly/sdg/index.mdx b/docs/fern/pages-vnightly/sdg/index.mdx new file mode 100644 index 000000000..5717c6528 --- /dev/null +++ b/docs/fern/pages-vnightly/sdg/index.mdx @@ -0,0 +1,156 @@ +--- +title: "About Synthetic Data Generation" +slug: "sdg/index.html" +description: "Generate synthetic training data with NeMo Data Designer using a declarative YAML pipeline. Seed a generation run with your domain-specific topics, scenarios, or personas; define the column structure " +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +SPDX-License-Identifier: Apache-2.0 + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */} + + + +Generate synthetic training data with [NeMo Data Designer](https://nvidia-nemo.github.io/DataDesigner/) using a declarative YAML pipeline. Seed a generation run with your domain-specific topics, scenarios, or personas; define the column structure and prompts in YAML; and produce training-ready JSONL without writing Python. + +Three output shapes ship out of the box: SFT chat data, tool-calling SFT data, and DPO preference pairs. + + +New to SDG or new to model training? Read [Use the SDG Skill With Confidence](/using-skills) for a short guide to productive agent sessions, then start the [Generate Your First Synthetic Dataset](/getting-started) tutorial to run the bundled pipeline and produce your first dataset in 5 to 10 minutes. + + + +## When to Use + +Use SDG when you need training data that does not already exist in sufficient quantity or quality for your target domain or task. + +- **SFT chat data** тАФ Generate user/assistant conversation pairs grounded in domain-specific topics, scenarios, or personas. Use `default.yaml` as a starting point and adapt it to your domain. + +- **Tool-calling SFT data** тАФ Generate multi-turn conversations that include assistant tool calls and tool responses in OpenAI format. Use `customer_support_tools.yaml` as a starting point. + +- **DPO preference data** тАФ Generate prompt / chosen / rejected triples for preference learning. Use `rl_pref.yaml`. + +- **Custom domains** тАФ Swap the seed file, category columns, and prompts to target any domain. The pipeline is fully declarative; customisation does not require editing Python. + +- **Cluster-scale generation** тАФ Dispatch generation to Lepton or Slurm via env.toml profiles when local throughput is insufficient. + +## Pipeline at a Glance + +```mermaid +%%{init: {'theme': 'base', 'themeVariables': { 'primaryBorderColor': '#333333', 'lineColor': '#333333', 'primaryTextColor': '#333333', 'clusterBkg': '#ffffff', 'clusterBorder': '#333333'}}}%% +flowchart TB + seed["Seed file (optional)"] --> dsg + cat["Category samplers"] --> dsg + per["Person sampler (optional)"] --> dsg + dsg["Data Designer column graph
    Jinja2 prompts ┬╖ LLM calls"] + dsg --> proj["output_projection"] + proj --> om["openai_messages"] + proj --> dpo["dpo_preference"] + proj --> sm["structured_messages"] + om --> jsonl["JSONL"] + dpo --> jsonl + sm --> jsonl + jsonl --> train["data_prep/sft_packing or AutoModel SFT"] +``` + +Each run is reproducible: the seed file, column specs, model alias, inference parameters, and projection rules are all version-controlled in a single YAML file. + +## Documentation + + + +Run the bundled pipeline end-to-end: preview two records, generate five, inspect the output JSONL. + +--- + +5тАУ10 min tutorial + + + + +Prepare for a focused chat with a coding agent: opening brief, seed ideas, and how `SKILL.md` supports the session without memorization. + +--- + +10 min read newcomer + + + + +Task-focused guides: adapt the pipeline to a domain, generate preference pairs, dispatch to a cluster. + +--- + +5 guides task-focused + + + + +YAML config schema, CLI flags, output projection shapes, and troubleshooting. + +--- + +4 references lookup + + + + + +## All Documentation + + + + +| Guide | What YouтАЩll Do | Time | +| --- | --- | --- | +| [Generate Your First Synthetic Dataset](/getting-started) | Preview and generate your first synthetic SFT dataset | 5тАУ10 min | +| [Use the SDG Skill With Confidence](/using-skills) | Run a productive agent session: brief, seeds, plain terms, and light use of SKILL.md | 10 min read | + + + + +| Guide | What YouтАЩll Do | +| --- | --- | +| [Tips for the Data Generation Pipeline](/how-to/run) | Preview, generate, and customize output path and projection | +| [Create a Domain Dataset for Airlines Customer Service](/how-to/create-domain-dataset) | Adapt the pipeline to a custom domain with a seed file and multiple category dimensions | +| [Generate Tool-Calling Data for SFT](/how-to/tool-call-data) | Generate multi-turn tool-calling SFT data | +| [Generate Preference Data for DPO](/how-to/preference-data) | Generate DPO preference pairs from rl_pref.yaml | +| [Dispatch SDG to a Cluster](/how-to/dispatch-to-cluster) | Dispatch generation to Lepton or Slurm via env.toml | + + + + +| Reference | What YouтАЩll Find | +| --- | --- | +| [Config Schema](/reference/config-schema) | Full YAML column types, sampler parameters, and projection fields | +| [CLI Reference](/reference/cli-reference) | nemotron steps run sdg/data_designer flags and hydra overrides | +| [Output Projections](/reference/output-projections) | The three projection shapes with annotated JSONL examples | +| [Troubleshooting](/reference/troubleshooting) | Dispatch failures, image pull errors, API key issues, schema drift | + + + + + +## Before You Start + +- The `NVIDIA_API_KEY` environment variable is required for the default model, `nvidia/nemotron-3-nano-30b-a3b`, hosted on integrate.nvidia.com. + +## Limitations and Considerations + +- **Cost**: Generation calls a hosted LLM endpoint; each record incurs API cost. + +- **Quality**: After generating records, review them before training. + +- **Scale**: API rate limits apply. For large generation runs, dispatch to a cluster and consider batching across multiple nodes. + +- **Reproducibility**: Seed files, column specs, model aliases, and inference parameters should all be version-controlled together. Changing any one of them changes the output distribution. diff --git a/docs/fern/pages-vnightly/sdg/planning.mdx b/docs/fern/pages-vnightly/sdg/planning.mdx new file mode 100644 index 000000000..77f7c0e26 --- /dev/null +++ b/docs/fern/pages-vnightly/sdg/planning.mdx @@ -0,0 +1,53 @@ +--- +title: "Planning a Synthetic Data Generation Run" +slug: "sdg/planning.html" +description: "Synthetic data generation involves a sequence of decisions that determine whether the resulting data is useful for training." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +SPDX-License-Identifier: Apache-2.0 + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */} + + + +Synthetic data generation involves a sequence of decisions that determine whether the resulting data is useful for training. + +## What Does Good Source Data Look Like for Your Domain? + +The seed file and prompts are where your domain knowledge enters the pipeline. +The scenarios, constraints, and vocabulary you bring to the seed scenarios shape everything the generation produces. +A pipeline run without domain knowledge produces generic output from the modelтАЩs own training data regardless of how well the column specs are written. + +The quality of your seed material is the strongest lever you have on the quality of what the pipeline produces. + +## What Makes a Generated Record Good Enough to Train on? + +Before scaling, be able to evaluate the quality of a generated record for your domain. + +If you were building a hand-curated training dataset, would you include this record? +If yes, it belongs. + +If you would hesitate because the response sounds evasive, the scenario is implausible, or the assistant fabricated a detail, that is a signal to revise the prompt or seed before generating at scale. + +Preview records before you commit to generating thousands of records. + +## Next Steps + +- First run: [Generate Your First Synthetic Dataset](/getting-started) + +- Adapt the pipeline to your domain: [Create a Domain Dataset for Airlines Customer Service](/how-to/create-domain-dataset) + +- Preview and iterate on a config: [Tips for the Data Generation Pipeline](/how-to/run) + +- Config field reference: [Config Schema](/reference/config-schema) diff --git a/docs/fern/pages-vnightly/sdg/reference/cli-reference.mdx b/docs/fern/pages-vnightly/sdg/reference/cli-reference.mdx new file mode 100644 index 000000000..c1d3e01c0 --- /dev/null +++ b/docs/fern/pages-vnightly/sdg/reference/cli-reference.mdx @@ -0,0 +1,118 @@ +--- +title: "CLI Reference" +slug: "sdg/reference/cli-reference.html" +description: "Command-line reference for nemotron steps run sdg/data_designer. For pipeline overview, see About Synthetic Data Generation." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +SPDX-License-Identifier: Apache-2.0 + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */} + + + +Command-line reference for `nemotron steps run sdg/data_designer`. For pipeline overview, see [About Synthetic Data Generation](/../index). + +## Syntax + +```console +$ nemotron steps run sdg/data_designer \ + [-c CONFIG] \ + [--run PROFILE | --batch PROFILE] \ + [--dry-run] \ + [KEY=VALUE ...] +``` + +## Flags + +### `-c, --config CONFIG` + +Config name (resolved from the stepтАЩs `config/` directory) or an absolute/relative path to a YAML file. + +Bundled names: `default`, `customer_support_tools`, `rl_pref`, `tiny`. + +**Default**: `default` + +--- + +### `-r, --run PROFILE` + +Run attached using the env.toml profile named `PROFILE`. Job output streams to the terminal. Use for short interactive runs. + +--- + +### `-b, --batch PROFILE` + +Run detached using the env.toml profile named `PROFILE`. Job is submitted and the command returns immediately. Use for long cluster jobs. + +--- + +### `-d, --dry-run` + +Compile the config and print the resolved job spec without executing. Useful for verifying hydra overrides before submission. + +## Hydra Overrides + +Any `KEY=VALUE` argument after the flags is passed as a hydra dotlist override and merged into the resolved config. Overrides take precedence over YAML values. + +| Override | Example | Effect | +| --- | --- | --- | +| num_records=N | num_records=50 | Generate N records | +| preview=true | preview=true | Run in preview mode | +| output_path=PATH | output_path=/data/out.jsonl | Write output to PATH | +| seed_dataset.path=PATH | seed_dataset.path=/data/seeds.jsonl | Override seed file | +| models.0.inference_parameters.temperature=T | models.0.inference_parameters.temperature=0.5 | Override first modelтАЩs temperature | + +Dotlist path follows the YAML structure. Nested keys use `.` as separator; list items use `.N` (zero-indexed). + +## Examples + +Preview the default config with two records: + +```console +$ nemotron steps run sdg/data_designer -c default preview=true num_records=2 +``` + +Generate 100 SFT records with a custom output path: + +```console +$ nemotron steps run sdg/data_designer -c default \ + num_records=100 \ + output_path=/data/my-project/sft.jsonl +``` + +Dry-run a cluster submission to check the resolved config: + +```console +$ nemotron steps run sdg/data_designer -c default --run my-profile --dry-run +``` + +Run attached on a Lepton profile with 500 records: + +```console +$ nemotron steps run sdg/data_designer -c default --run lepton_sdg_data_designer num_records=500 +``` + +Use a config at an arbitrary path: + +```console +$ nemotron steps run sdg/data_designer -c /path/to/my-config.yaml preview=true num_records=2 +``` + +## Related + +- [Tips for the Data Generation Pipeline](/../how-to/run) тАФ Preview, generate, and customize output. + +- [Dispatch SDG to a Cluster](/../how-to/dispatch-to-cluster) тАФ env.toml profile setup. + +- [Config Schema](/config-schema) тАФ YAML config field reference. diff --git a/docs/fern/pages-vnightly/sdg/reference/config-schema.mdx b/docs/fern/pages-vnightly/sdg/reference/config-schema.mdx new file mode 100644 index 000000000..fc9529931 --- /dev/null +++ b/docs/fern/pages-vnightly/sdg/reference/config-schema.mdx @@ -0,0 +1,240 @@ +--- +title: "Config Schema" +slug: "sdg/reference/config-schema.html" +description: "This page provides the reference information for the YAML config file consumed by sdg/data_designer." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +SPDX-License-Identifier: Apache-2.0 + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */} + + + +This page provides the reference information for the YAML config file consumed by `sdg/data_designer`. + +## Simple Fields + +| Field | Type | Required | Description | +| --- | --- | --- | --- | +| output_dir | string | no | Base output directory. Supports OmegaConf env-var interpolation. Default resolves $SDG_OUTPUT_DIR, then $NEMO_RUN_DIR/sdg, then ./output/sdg. | +| output_path | string | yes | Full path for the output JSONL file. Typically ${output_dir}/my-dataset.jsonl. | +| num_records | int | yes | Number of records to generate (client.create) or preview (client.preview). | +| preview | bool | no | When true, calls client.preview() instead of client.create(). Default: false. Prefer setting this as a CLI override (preview=true) rather than in the YAML. | + +## seed_dataset + +Optional top-level field. +When present, Data Designer samples one row per generated record from the seed file and makes the fields available to column prompts by using Jinja2. + +| Field | Type | Required | Description | +| --- | --- | --- | --- | +| path | string | yes | Path to a JSONL file. Each line is a JSON object. | +| strategy | string | no | shuffle (default) or ordered. | +| fields | list[string] | yes | Column names to expose. Must match keys in the seed JSONL objects. These become available as {{ field_name }} in prompts without being declared in columns. | + +## models + +A required top-level field. +The field specifies a list of model configurations. +Each entry defines one alias that column specs reference by name. + +| Field | Type | Required | Description | +| --- | --- | --- | --- | +| alias | string | yes | Short name referenced by model_alias in column specs. | +| model | string | yes | Model identifier such as nvidia/nemotron-3-nano-30b-a3b and openai/gpt-oss-20b. | +| provider | string | no | Provider name, such as nvidia or anthropic. | +| skip_health_check | bool | no | Skip the startup probe against the model provider. Useful for local or offline endpoints. Default: false. | +| inference_parameters.temperature | float | no | Sampling temperature. | +| inference_parameters.top_p | float | no | Top-p nucleus sampling. | +| inference_parameters.max_tokens | int | no | Maximum output tokens per call. | + +## columns + +A required top-level field. +This field is an ordered list of column specs. +Each column has a `name`, a `type`, and type-specific fields. +Columns can reference earlier columns and seed fields in prompts by using Jinja2 syntax like `\{\{ column_name \}\}`. + +### Categorical Columns + +Samples uniformly from a fixed list of string or numeric values like the following example. + +```yaml +- name: persona + type: category + values: [teacher, engineer, student, researcher] +``` + +| Field | Required | Description | +| --- | --- | --- | +| name | yes | Column name. | +| values | yes | List of values to sample from. | + +### Seed Columns + +Provides a named field from the seed dataset as a column. +Use this column type when a seed field needs to appear in `metadata_fields` or must be referenced in a way that requires it to be an explicit column. + +```yaml +- name: topic + type: seed +``` + +| Field | Required | Description | +| --- | --- | --- | +| name | yes | Must match a field name in seed_dataset.fields. | + +Seed fields declared in `seed_dataset.fields` are available directly in prompts without this column type. +Use `seed` only when you need the field as a named column in the output schema. + +### LLM Text Columns + +Generates free-form text using an LLM call. +These columns can references earlier specified columns and seed fields in `prompt` by using Jinja2 syntax. + +```yaml +- name: user_query + type: llm_text + model_alias: nvidia-text + prompt: | + Write a message from a {{ persona }} asking about: {{ topic }}. +``` + +| Field | Required | Description | +| --- | --- | --- | +| name | yes | Column name. | +| model_alias | no | Alias from models. Default: nvidia-text. | +| prompt | yes | Jinja2 template. Reference any earlier column or seed field with {{ name }}. | + +### LLM Structured Columns + +This column type generates structured JSON by making an LLM call. +The column definition instructs the model to return JSON matching `output_format`. +Use this column type for multi-turn conversations, preference judges, and any output that must conform to a schema. + +```yaml +- name: conversation + type: llm_structured + model_alias: nvidia-text + prompt: | + Generate a support conversation for customer {{ customer_name }}... + output_format: + type: object + properties: + messages: + type: array + ... + required: [messages] +``` + +| Field | Required | Description | +| --- | --- | --- | +| name | yes | Column name. | +| model_alias | no | Alias from models. Default: nvidia-text. | +| prompt | yes | Jinja2 template. | +| output_format | yes | JSON Schema dict describing the expected output structure. | + +### LLM Judge Columns + +This type is an alias for `llm_structured`. +This type is typically used for columns that compare or evaluate other columns. + +```yaml +- name: judge + type: llm_judge + model_alias: nvidia-text + prompt: | + Compare response A and B for: {{ prompt }} + A: {{ response_a }} + B: {{ response_b }} + output_format: + type: object + properties: + winner: + type: string + enum: [A, B] + required: [winner] +``` + +## output_projection + +This top-level field maps raw Data Designer records into the schema expected by downstream steps. +Refer to [Output Projections](/output-projections) for full field tables and annotated JSONL examples for each type. + +| type | Use for | Downstream | +| --- | --- | --- | +| openai_messages | Single-turn SFT chat | data_prep/sft_packing, AutoModel SFT | +| dpo_preference | Preference pairs | data_prep/rl_prep, rl/nemo_rl/dpo | +| structured_messages | Multi-turn with tool calls | data_prep/sft_packing, AutoModel SFT | + +## Extending the Schema: `person` and `datetime` Samplers + +The current `step.py` supports the column types above. To use Data DesignerтАЩs locale-aware person sampler or datetime sampler, `step.py`тАЩs `build_columns()` function must be extended with `person` and `datetime` branches. A reference implementation showing both additions is in: + +```python startLine={1} + elif kind == "person": + builder.add_column( + dd.SamplerColumnConfig( + name=name, + sampler_type=dd.SamplerType.PERSON, + params=dd.PersonSamplerParams( + locale=spec.get("locale", "en_US"), + age_range=spec.get("age_range"), + with_synthetic_personas=spec.get("with_synthetic_personas", True), + ), + ) + ) + + elif kind == "datetime": + builder.add_column( + dd.SamplerColumnConfig( + name=name, + sampler_type=dd.SamplerType.DATETIME, + params=dd.DatetimeSamplerParams( + start=spec["start"], + end=spec["end"], + ), + ) + ) + +``` + +Once merged, configs can declare: + +```yaml +- name: traveler + type: person + locale: en_US + age_range: [22, 75] + with_synthetic_personas: true + +- name: booking_date + type: datetime + start: "2024-01-01" + end: "2025-12-31" +``` + +Download personas for the locale before running: + +```console +$ data-designer download personas --locale en_US +``` + +## Related Information + +- [Output Projections](/output-projections) тАФ projection field reference and JSONL examples. + +- [CLI Reference](/cli-reference) тАФ flags and hydra override syntax. + +- [Tips for the Data Generation Pipeline](/../how-to/run) тАФ preview and generate workflow. diff --git a/docs/fern/pages-vnightly/sdg/reference/index.mdx b/docs/fern/pages-vnightly/sdg/reference/index.mdx new file mode 100644 index 000000000..403b0b525 --- /dev/null +++ b/docs/fern/pages-vnightly/sdg/reference/index.mdx @@ -0,0 +1,63 @@ +--- +title: "SDG Reference" +slug: "sdg/reference/index.html" +description: "Complete specifications for the SDG pipeline. For pipeline overview and when to use it, refer to About Synthetic Data Generation." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +SPDX-License-Identifier: Apache-2.0 + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */} + + + +Complete specifications for the SDG pipeline. For pipeline overview and when to use it, refer to [About Synthetic Data Generation](/../index). + + + +All YAML fields: top-level settings, seed dataset, model aliases, column types, and output projections. + +--- + +lookup + + + + +`nemotron steps run sdg/data_designer` flags and hydra override syntax. + +--- + +lookup + + + + +The three projection shapes with annotated JSONL examples. + +--- + +lookup + + + + +Failure modes for local runs and cluster dispatch. + +--- + +lookup + + + + diff --git a/docs/fern/pages-vnightly/sdg/reference/output-projections.mdx b/docs/fern/pages-vnightly/sdg/reference/output-projections.mdx new file mode 100644 index 000000000..32c33e0b4 --- /dev/null +++ b/docs/fern/pages-vnightly/sdg/reference/output-projections.mdx @@ -0,0 +1,155 @@ +--- +title: "Output Projections" +slug: "sdg/reference/output-projections.html" +description: "The output_projection block in a config maps raw Data Designer records into the schema expected by downstream training steps. Each projection type extracts specific columns and writes one JSON object " +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +SPDX-License-Identifier: Apache-2.0 + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */} + + + +The `output_projection` block in a config maps raw Data Designer records into the schema expected by downstream training steps. Each projection type extracts specific columns and writes one JSON object per line. + +## OpenAI Messages + +Produces single-turn OpenAI chat-format records. Use for SFT chat data that feeds `data_prep/sft_packing` or AutoModel SFT. + +**YAML**: + +```yaml +output_projection: + type: openai_messages + user_field: user_query # column containing the user turn + assistant_field: assistant_response # column containing the assistant turn + metadata_fields: [persona, topic] # additional columns to include at top level +``` + +**Output** (one JSON object per line): + +```json +{ + "messages": [ + {"role": "user", "content": "How do I calibrate the sensor threshold?"}, + {"role": "assistant", "content": "Set the threshold in the device settings under Calibration тЖТ Sensor Range. A value of 0.85 works well for most environments."} + ], + "persona": "engineer", + "topic": "industrial sensor calibration" +} +``` + +Fields: + +| Field | Required | Description | +| --- | --- | --- | +| type | yes | "openai_messages" | +| user_field | yes | Column name for the user message content | +| assistant_field | yes | Column name for the assistant message content | +| metadata_fields | no | List of additional column names to include at the top level | + +## DPO Preference + +Produces preference triples for DPO training. Use with `rl_pref.yaml` and the `llm_judge` column pattern. Output feeds `data_prep/rl_prep`. + +**YAML**: + +```yaml +output_projection: + type: dpo_preference + prompt_field: prompt # column containing the input prompt + response_a_field: response_a # column containing the first candidate response + response_b_field: response_b # column containing the second candidate response + judge_field: judge # column containing the judge's structured output + winner_field: winner # key inside the judge output that holds "A" or "B" +``` + +**Output** (one JSON object per line): + +```json +{ + "prompt": "Explain why retrieval-augmented generation can reduce hallucinations in enterprise assistants.", + "chosen": "RAG grounds the model in retrieved passages, so factual claims are tied to source documents rather than purely to learned weights.", + "rejected": "RAG is better because it uses the internet and knows more things than a regular model." +} +``` + +Fields: + +| Field | Required | Description | +| --- | --- | --- | +| type | yes | "dpo_preference" | +| prompt_field | yes | Column name for the input prompt | +| response_a_field | yes | Column name for candidate A | +| response_b_field | yes | Column name for candidate B | +| judge_field | yes | Column name for the judgeтАЩs structured output | +| winner_field | yes | Key within the judge output JSON that holds "A" or "B" | + +The projection raises `ValueError` if `winner` is not `"A"` or `"B"`. The `llm_judge` column must be configured to return exactly this structure. + +## Structured Messages + +Produces multi-turn records with `messages` and an optional `tools` array. +The shipped `customer_support_tools.yaml` config generates this shape with an `llm_text` column that returns a JSON object; `llm_structured` columns can also feed this projection when their output is a mapping with the same fields. +Output feeds `data_prep/sft_packing` or AutoModel SFT. + +**YAML**: + +```yaml +output_projection: + type: structured_messages + source_field: conversation # column containing the structured JSON object + messages_field: messages # key inside the structured object for the messages array + tools_field: tools # key inside the structured object for the tools array + metadata_fields: [customer_name, issue, urgency, channel] +``` + +**Output** (one JSON object per line): + +```json +{ + "messages": [ + {"role": "system", "content": "You are a helpful ecommerce support agent."}, + {"role": "user", "content": "I haven't received my order yet."}, + {"role": "assistant", "content": "", "tool_calls": [{"id": "call_001", "type": "function", "function": {"name": "lookup_order", "arguments": "{\"order_id\":\"ORD-10492\"}"}}]}, + {"role": "tool", "tool_call_id": "call_001", "name": "lookup_order", "content": "{\"status\":\"delayed\",\"eta\":\"tomorrow\"}"}, + {"role": "assistant", "content": "Your order is delayed and will arrive tomorrow. I can arrange an expedited replacement if needed."} + ], + "tools": [{"type": "function", "function": {"name": "lookup_order", "description": "Look up order status by ID.", "parameters": {"type": "object", "properties": {"order_id": {"type": "string"}}, "required": ["order_id"]}}}], + "customer_name": "Priya", + "issue": "late delivery", + "urgency": "frustrated", + "channel": "web_chat" +} +``` + +Fields: + +| Field | Required | Description | +| --- | --- | --- | +| type | yes | "structured_messages" | +| source_field | yes | Column containing the structured JSON conversation object | +| messages_field | no | Key in source_field for the messages array. Default: "messages" | +| tools_field | no | Key in source_field for the tools array. Omitted from output if not present in the record | +| metadata_fields | no | List of additional column names to include at the top level | + +The `source_field` column value may be a JSON string or a dict; both are handled. + +## Related Information + +- [Config Schema](/config-schema) тАФ Full YAML config field reference. + +- [Generate Tool-Calling Data for SFT](/../how-to/tool-call-data) тАФ Using `structured_messages` with `customer_support_tools.yaml`. + +- [Generate Preference Data for DPO](/../how-to/preference-data) тАФ Using `dpo_preference` with `rl_pref.yaml`. diff --git a/docs/fern/pages-vnightly/sdg/reference/troubleshooting.mdx b/docs/fern/pages-vnightly/sdg/reference/troubleshooting.mdx new file mode 100644 index 000000000..8858009e3 --- /dev/null +++ b/docs/fern/pages-vnightly/sdg/reference/troubleshooting.mdx @@ -0,0 +1,113 @@ +--- +title: "Troubleshooting" +slug: "sdg/reference/troubleshooting.html" +description: "Failure modes for local runs and cluster dispatch. For cluster-specific setup, see Dispatch SDG to a Cluster." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +SPDX-License-Identifier: Apache-2.0 + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */} + + + +Failure modes for local runs and cluster dispatch. For cluster-specific setup, see [Dispatch SDG to a Cluster](/../how-to/dispatch-to-cluster). + +## Local Run Failures + +**`Unknown column type: 'person'` or similar ValueError** + +**Cause**: The YAML declares a column `type` that `step.py`тАЩs `build_columns()` does not recognise. Currently supported types: `category`, `seed`, `llm_text`, `llm_structured`, `llm_judge`. + +**Solution**: Check the spelling. For `person` and `datetime` sampler support, `step.py` must be extended тАФ see the extension reference in [Config Schema](/config-schema). + +**`config must declare a non-empty columns: list`** + +**Cause**: The YAML has an empty or missing `columns:` block. + +**Solution**: Add at least one column spec. A minimal config must include at least one `llm_text` or `llm_structured` column that produces output content. + +**`Jinja2` template references an undefined variable** + +**Cause**: A prompt uses `\{\{ column_name \}\}` but `column_name` is neither a declared column, a seed field in `seed_dataset.fields`, nor an earlier column in the list. + +**Solution**: Add the column or seed field, or fix the typo. Run `preview=true num_records=2` to catch this cheaply before a full generation job. + +**Model health check fails at startup** + +**Cause**: Data Designer probes the model endpoint at startup. If the model is not available from the configured provider, or if `NVIDIA_API_KEY` is not set, the probe fails and the step exits before generating any records. + +**Solution**: + +- Confirm `export NVIDIA_API_KEY="..."` is set. + +- Add `skip_health_check: true` to the model spec to bypass the probe (useful for local or vLLM endpoints that arenтАЩt in the provider catalog). + +**Output JSONL is empty or has fewer records than `num_records`** + +**Cause**: Data Designer skips or drops records where the structured output doesnтАЩt validate against `output_format`, or where the LLM returns a refusal. + +**Solution**: + +- Run `preview=true` and inspect a sample for refusals or schema mismatches. + +- Simplify the `output_format` if the model consistently fails to match a complex schema. + +- Raise `max_tokens` if responses are being cut off mid-JSON. + +## Cluster Dispatch Failures + +**Job exits immediately with `No such file or directory` (launch script)** + +**Cause**: `nemo_run_dir` is not on shared storage. The data-mover sidecar writes the launch script to `nemo_run_dir`, but the main container cannot see it if the path is local to a different node or not mounted. + +**Solution**: Set `nemo_run_dir` to a path on the shared NFS mount and add the corresponding `mounts` entry to the env.toml profile. See [Dispatch SDG to a Cluster](/../how-to/dispatch-to-cluster). + +**`data-designer` import error inside the container** + +**Cause**: The NeMo container image does not pre-install `data-designer`. + +**Solution**: Add to `startup_commands`: + +```toml +startup_commands = [ + "python -m pip install --quiet --break-system-packages 'data-designer==0.5.5'" +] +``` + +**Job rejected or OOM-killed immediately on a CPU node** + +**Cause**: The default `shared_memory_size` (65536 MB) exceeds the available RAM on the CPU node type. + +**Solution**: Set `shared_memory_size = 1024` in the env.toml profile. The SDG step makes no use of shared memory. + +**`NVIDIA_API_KEY` not available inside the container** + +**Cause**: `NVIDIA_API_KEY` is not automatically forwarded to the job environment the way `HF_TOKEN` and `WANDB_API_KEY` are. + +**Solution**: Declare it explicitly in the env.toml profile: + +```toml +[lepton_sdg_data_designer.env_vars] +NVIDIA_API_KEY = "${oc.env:NVIDIA_API_KEY}" +``` + +And set it in your shell before submitting: `export NVIDIA_API_KEY="..."`. + +## Related + +- [Dispatch SDG to a Cluster](/../how-to/dispatch-to-cluster) тАФ Full cluster setup walkthrough. + +- [CLI Reference](/cli-reference) тАФ Flags and hydra overrides. + +- [Config Schema](/config-schema) тАФ YAML field reference. diff --git a/docs/fern/pages-vnightly/sdg/using-skills.mdx b/docs/fern/pages-vnightly/sdg/using-skills.mdx new file mode 100644 index 000000000..3f866e0c4 --- /dev/null +++ b/docs/fern/pages-vnightly/sdg/using-skills.mdx @@ -0,0 +1,94 @@ +--- +title: "Use the SDG Skill With Confidence" +slug: "sdg/using-skills.html" +description: "This page is for newcomers to model training and new to synthetic data generation (SDG). The main goal is to help you run a productive, efficient session with a coding agent: less back-and-forth, fewe" +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +SPDX-License-Identifier: Apache-2.0 + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */} + + + +This page is for newcomers to model training and new to *synthetic data generation (SDG)*. +The main goal is to help you run a productive, efficient session with a coding agent: less back-and-forth, fewer clarifying questions, and clearer handoffs between what you decide and what the agent edits in the repository. + +This page aligns with the `nemotron steps run sdg/data_designer` command. +Use an agent to translate your intent into the right YAML, seed files, and `nemotron` commands. + +## Keeping an Agent Session Productive + +Provide a short brief you write yourself, not something the agent drafts for you: + +- тАЬWe need data for a model that can answer short questions about our companyтАЩs travel and expense policy.тАЭ + +- тАЬI need multi-turn conversations for a retail support bot that can call tools such as order lookup and return eligibility. The tone must be friendly and concise.тАЭ + +Ask the agent to start from shipped configs and the [Generate Your First Synthetic Dataset](/getting-started) flow unless there is a strong reason to invent a new layout. + +If you want a reusable shape, you can copy the following block into the chat and fill in the bracketed lines. + +```text +Context: [product or domain in one sentence] +Goal for this session: [one outcome, for example ten seed ideas or a preview command that works] +тАЬGoodтАЭ means: [two bullets] +Hard limits: [language, tone, privacy, or тАЬdo not touch cluster dispatch yetтАЭ] +Please: [one request]. Use Nemotron SDG defaults from the repo unless something blocks that. +``` + +## What Success Looks Like on Day One + +A reasonable first success is a small preview run that writes plausible rows to `output_path`, plus a short list of seed ideas you believe are on-brand for your domain. +If you have that, you are already operating SDG: iterate small, then scale record counts. + +The hands-on path is [Generate Your First Synthetic Dataset](/getting-started). +When you are ready to attach your own domain, follow [Create a Domain Dataset for Airlines Customer Service](/how-to/create-domain-dataset). + +## Where Domain-Specific Ideas Come From + +Seed data can be short anchors that tell the generator which slice of the world each row should reflect. +A newcomer can build a first seed list the same way a product owner scopes a feature. + +Runbooks, internal FAQs, and training decks can inspire situations when policy allows. +If you cannot paste source text, a neutral rewrite still carries domain truth, for example тАЬpartial refund after a split shipmentтАЭ instead of a ticket ID. + +Standards, regulator explainers, textbooks, and course outlines supply topics and jargon. +Your operator value is the twist that matches your product, not the generic paragraph anyone could find online. + +## Ask the Agent to Propose, Then You Curate + +Paste a product brief or policy summary and then ask for candidate seed lines. +The opening brief in the section above keeps this step short: one propose-and-curate round per session is usually enough before you run a preview again. + +## Staying Grounded on Policy and Quality + +Check licensing and confidentiality before you drop internal documents into an agent or into a seed file. +Keep evaluation benchmarks separate from training seeds so synthetic items do not leak into the set you use to claim quality. +Skim `src/nemotron/steps/sdg/SKILL.md` for the short list of pattern links on blending, versioning, and benchmarks when you move past experiments. + +## How SKILL.md Fits Your Session + +`src/nemotron/steps/sdg/SKILL.md` is written for assistants that route work into the right shipped YAML profile and guardrails. +You do not need to memorize it. + +Skim the decision table once so you know which bundled config matches which need, then let the agent open that file when you change output format or scale record counts. +You can also say in the chat, тАЬfollow `src/nemotron/steps/sdg/SKILL.md` for SDG,тАЭ so guardrails land in the thread without a long lecture. + +## Next Steps + +- Run the tutorial: [Generate Your First Synthetic Dataset](/getting-started). + +- Adapt seeds and YAML to your domain: [Create a Domain Dataset for Airlines Customer Service](/how-to/create-domain-dataset). + +- Look up flags and fields when the agent names them: [CLI Reference](/reference/cli-reference) and [Config Schema](/reference/config-schema). diff --git a/docs/fern/pages-vnightly/steps/airgap.mdx b/docs/fern/pages-vnightly/steps/airgap.mdx new file mode 100644 index 000000000..d271975bc --- /dev/null +++ b/docs/fern/pages-vnightly/steps/airgap.mdx @@ -0,0 +1,168 @@ +--- +title: "Run Nemotron Steps in an Airgap Environment" +slug: "steps/airgap.html" +description: "This page describes how to run Nemotron steps in an airgap environment: a cluster or account boundary where training jobs cannot rely on the public internet for downloads, package indexes, or external" +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + + + +This page describes how to run Nemotron steps in an *airgap environment*: a cluster or account boundary where training jobs cannot rely on the public internet for downloads, package indexes, or external APIs unless you explicitly provide replacements. + +A build process under `deploy/nemotron-customizer/airgap/` runs on a *networked host* and produces container images and a manifest for the steps in `src/nemotron/steps/`. +You transfer those artifacts into the airgap environment, then submit jobs as usual with `nemotron steps`. +A short checklist at the end of this page covers the storage, secrets, and providers you must manage for the environment. + +For definitions of *step*, *configuration*, *environment profile*, and *artifact*, see [Nemotron Steps Basics](/basics). + +## Before You Start + +Confirm two things before you start the build process. + +- Docker is installed and can pull `nvcr.io` and Docker Hub images on the networked host. + +- The networked host has disk space under `deploy/nemotron-customizer/airgap/out/` for the image TAR files you plan to produce. +Each image TAR file is several gigabytes. + +- You [explored the Nemotron CLI](/getting-started). + +## Procedure: Build and Run the Airgap Bundle + +Follow these phases in order and on the specified host. + +### Networked Host: Choose the Steps to Cover + +You decide which steps the build process covers by editing the `workflow.stages` field in `airgap.yaml`. +The default value targets a small supervised fine-tuning workflow. + +1. Edit `deploy/nemotron-customizer/airgap/airgap.yaml`. + +2. In `workflow.stages`, add the `` steps to run, such as `translate/nemo_curator:default`, and remove the rest. + + Prerequisites steps are automatically added from the `dependencies` map. +For example, an `sft/megatron_bridge:tiny` step also produces an image that covers `data_prep/sft_packing`. + +If you would rather not edit the file, leave `workflow.stages` as is and specify `--target :` one or more times in the next phase to override the file. + +### Networked Host: Plan the Bundle + +1. From the repository root, run a plan-only pass. + + ```console + $ uv run python deploy/nemotron-customizer/airgap/runner.py \ + --config deploy/nemotron-customizer/airgap/airgap.yaml + ``` + + Review the `[airgap]` section at the end of the output. +Confirm the images and steps match the steps you specified. +The following example is for the `translate/nemo_curator` and `sft/megatron_bridge` steps. +The `data_prep/sft_packing` step is a dependency. + + ```text + ... + [airgap] wrote /home/user/nemotron/deploy/nemotron-customizer/airgap/out/airgap-manifest.yaml + [airgap] selected execution images: + - translate/nemo_curator: nemotron-customizer-nemo-curator-airgap-4dd4fef4:latest + - data_prep/sft_packing: nemotron-customizer-nemo-megatron-airgap-55d08ccf:latest + - sft/megatron_bridge: nemotron-customizer-nemo-megatron-airgap-2fea0796:latest + ``` + +### Networked Host: Build and Export Images + +Some steps clone or expect a repository checkout at runtime by default. +The `sft/megatron_bridge`, `peft/megatron_bridge`, `byob/mcq`, and `translate/nemo_curator` configs use `auto_mount` entries that the build process embeds in the relevant execution image so airgapped jobs do not clone from GitHub. +The `optimize/modelopt/prune` and `optimize/modelopt/distill` steps expect ModelOpt examples under `/opt/Model-Optimizer` and will try to clone `https://github.com/NVIDIA/Model-Optimizer.git` if the checkout is absent; in an airgap, use an execution image or mount that already contains that checkout. + +1. Confirm the target CPU architecture matches what you build on the networked host, or set `platform` on the relevant entry in `airgap.yaml` when they differ. + + ```yaml + launcher_image: + platform: linux/amd64 + + execution_images: + nemo-megatron: + platform: linux/amd64 + ``` + +2. Run the execute pass. + + ```console + $ uv run python deploy/nemotron-customizer/airgap/runner.py \ + --config deploy/nemotron-customizer/airgap/airgap.yaml \ + --execute + ``` + +3. If a run stops halfway, rerun the command. + + If you change the workflow or image plan, delete `airgap-build-state.yaml` before rerunning. +Otherwise, the build process reuses the stale state. + +4. Collect `airgap-manifest.yaml`, launcher and execution image TAR files, and any generated requirements or repository-overlay metadata from the `deploy/nemotron-customizer/airgap/out/` directory. + +### Transfer and Load Inside the Airgap Environment + +1. Transfer the image TAR files and the manifest into the airgap environment by using a tool, such as `scp` or `rsync`. + +2. Load images into the cluster container runtime or private registry your executor uses. + +3. Stage large artifacts on executor-visible persistent storage. +They were not embedded in the images at build time. +These artifacts include model weights, datasets, checkpoints, tokenizer files, and customer data. + +4. Reference those paths through configuration overrides and `run.env.mounts` in your environment profile. + +### Inside the Airgap Environment: Submit Jobs + +1. Open `airgap-manifest.yaml` and read the image tag or digest under `step_execution_images` for each step you run. + +2. For the steps that embed a repository at build time, override `run.env.mounts` to an empty list at submit time. + + ```yaml + run: + env: + mounts: [] + ``` + + The shipped overlay configs under `deploy/nemotron-customizer/airgap/configs/` do this for `sft/megatron_bridge`. + +3. Submit with `nemotron steps` and specify `run.env.container_image` to the manifest value. + + ```console + $ nemotron steps run \ \ + -c \ \ + -b \ \ + run.env.container_image=\ + ``` + +4. If you operate an internal Hugging Face mirror or need the Hugging Face Hub reachable from inside the airgap environment, override the Dockerfile defaults using your profile `env_vars`. + + +The execution Dockerfiles set `HF_HUB_OFFLINE=1`, `TRANSFORMERS_OFFLINE=1`, `HF_DATASETS_OFFLINE=1`, and `WANDB_MODE=offline` so airgap runs do not reach out to public services by default. +Those are upstream environment variable names from Hugging Face and Weights & Biases. + + + +## Cluster Checklist + +Use this short list after you load the bundle and before you submit production jobs. +It covers what stays your responsibility at the cluster, regardless of how the images were built. + +- Mount read-only storage for corpora, benchmarks, and pretrained checkpoints, and read-write storage for outputs. + +- Replace any Hugging Face Hub identifier in your configuration with a filesystem path on a shared mount when the Hugging Face Hub is not reachable from the airgap environment. + +- Update model provider configurations, such as `sdg/data_designer`, to an endpoint reachable from inside the airgap environment, such as a vLLM instance on the local network. + +- Provide secrets through environment variables your executor injects, not through files committed to the repository. + +- Run `nemotron steps show --json` and confirm every `consumes` entry maps to a local path or a mounted artifact before you submit. + +## Related Material + +- `deploy/nemotron-customizer/airgap/README.md` for full airgap mechanics, pip cache volumes, and architecture notes. + +- [Nemotron Steps Basics](/basics) for environment profiles and mounts. + +- Domain references for steps you run, for example [Model Training](/../train-models/index), [Synthetic Data Generation](/../sdg/index), and [Model Evaluation](/../model-eval/index). diff --git a/docs/fern/pages-vnightly/steps/basics.mdx b/docs/fern/pages-vnightly/steps/basics.mdx new file mode 100644 index 000000000..e929f51ab --- /dev/null +++ b/docs/fern/pages-vnightly/steps/basics.mdx @@ -0,0 +1,158 @@ +--- +title: "Nemotron Steps Basics" +slug: "steps/basics.html" +description: "This page defines the building blocks of the nemotron steps CLI. You do not need to read it to invoke a single command, but every domain section in the documentation assumes that you already understan" +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + + + +This page defines the building blocks of the `nemotron steps` CLI. +You do not need to read it to invoke a single command, but every domain section in the documentation assumes that you already understand these definitions. + +## What a Step Is + +A *step* is a named unit of work with a stable identifier, such as `sft/automodel`, `byob/mcq`, or `optimize/modelopt/quantize`. +Each step packages four things: + +- A description of the work the step performs. + +- The artifacts the step *consumes*, such as a chat-formatted JSON Lines (JSONL) dataset or a Megatron checkpoint. + +- The artifacts the step *produces*, such as a Hugging Face checkpoint or a Parquet benchmark. + +- One or more named configurations that supply parameter values. + +The step identifier is the only piece of information you need to invoke a job. +Steps live under `src/nemotron/steps/` in the source tree, and the CLI discovers them at startup. +Use `nemotron steps list` to see every available step, and use `nemotron steps show ` to inspect a single step. + +## Configurations + +A *configuration* is a named set of parameter values for a step, such as `tiny` or `default`. +A configuration sets values like the dataset path, the base model identifier, the batch size, the number of training steps, and the parallelism strategy. + +Every step that runs at production scale ships at least two configurations: + +- `tiny` runs a short job that exercises the plumbing without consuming meaningful compute. +Use `tiny` to confirm that the step starts, that the data path is wired, and that the cluster accepts the submission. + +- `default` runs a production-shape job. +Use `default` as the starting point for real work, and override individual values from the command line when needed. + +You select the configuration with the `-c` option. +You can supply ad hoc overrides as trailing `key=value` dotlist arguments on the same command line. + +## Environment Profiles + +An *environment profile* is a named description of an execution target. +A profile sets the container image, the node count, the resource shape, the mount points, and any cluster-specific startup commands. + +You select the profile in one of three ways: + +- Omit the `-r` and `-b` flags to run on the local machine. + +- Pass `-r ` to run attached, where the CLI streams logs back to your terminal until the job ends. + +- Pass `-b ` to run detached, where the CLI submits the job and returns immediately. + +The CLI reads profiles from a TOML file named `env.toml` at the repository root by default. +Set the `NEMOTRON_ENV_FILE` environment variable to point at a different profile file, such as `env.lepton.toml` or `env.slurm.toml`. +See [Execution Through NeMo Run](/../nemo_runspec/nemo-run) for the full profile model, attached and detached execution, and cluster setup. + +### Generating Profile Files With the env Step + +The `env/env_toml` step generates and validates profile files from compact YAML templates. +Treat it as common infrastructure that other steps rely on, not as a workload step. +Use `env/env_toml` when you need to bootstrap an `env.lepton.toml` or `env.slurm.toml` from the bundled templates, add a new profile that inherits from an existing one, or validate that a profile satisfies the resource guardrails for Curator, Data Designer, Ray, or reinforcement learning (RL) steps. + +The following procedure generates a starter profile file, reviews it, and points the CLI at it. + +1. Choose the bundled configuration that matches your target. +Use `lepton` for Lepton AI, `slurm` for a Slurm cluster, or `dgxcloud` for NVIDIA DGX Cloud. +List the available configurations with the following command. + + ```console + $ nemotron steps show env/env_toml + ``` + +2. Run the step from the repository root so the output lands beside `pyproject.toml`. +The following command generates an `env.lepton.toml` from the `lepton` configuration. + + ```console + $ nemotron steps run env/env_toml -c lepton + ``` + + Substitute `-c slurm` or `-c dgxcloud` for the other targets. +The step writes to `env.lepton.toml`, `env.slurm.toml`, or `env.dgxcloud.toml` by default, and it refuses to overwrite an existing file. +If you intentionally want to regenerate, pass `force=true` on the command line. + +3. Open the generated TOML file and replace the site-specific values. +At minimum, set the node group, the resource shape, the workspace path, and the mount points. +For Slurm, also set the host, the user account, the partition, and the remote job directory. +Keep secrets out of the file and reference them through `$\{oc.env:VAR_NAME\}` placeholders. + +4. Point the CLI at the generated file by exporting `NEMOTRON_ENV_FILE`. + + ```console + $ export NEMOTRON_ENV_FILE=env.lepton.toml + ``` + + Add the export to your shell profile if you always work against the same target. +Without the variable, the CLI looks for a plain `env.toml` at the repository root. + +5. Confirm a profile resolves before you launch real work. +Pick a step that already has a generated profile and run it with the `tiny` configuration. + + ```console + $ nemotron steps run sft/automodel -c tiny -r lepton_sft_automodel + ``` + + A successful submission proves that the CLI loaded the profile file, matched the named profile, and accepted the resource shape. + +After the file passes step (5), you can add new profiles by editing the YAML template under `src/nemotron/steps/env/env_toml/config/` and rerunning `nemotron steps run env/env_toml` with `force=true`. +Child profiles can use `extends` to inherit from an existing profile and override only the image, the mounts, the environment variables, or the resource shape that differ. + +## Artifacts Between Steps + +Steps chain together through *artifacts*. +An artifact is a typed payload, such as `training_jsonl`, `packed_parquet`, `binidx`, `checkpoint_hf`, `checkpoint_megatron`, or `eval_results`. +One step writes an artifact to a path you control, and a later step reads that same artifact as its input. + +The chain holds as long as the consumer accepts the producerтАЩs artifact type. +When two steps speak different layouts of the same idea, a `convert/*` step bridges the gap. +For example, `convert/megatron_to_hf` turns a `checkpoint_megatron` artifact into a `checkpoint_hf` artifact for deployment. + +You can list the producers and consumers of a given artifact type from the CLI: + +```console +$ nemotron steps list --produces training_jsonl +$ nemotron steps list --consumes training_jsonl +``` + +See [Getting Started With Steps](/getting-started) for a guided tour of these commands. + +## Composing a Run + +The following command composes all three concepts into one invocation. + +```console +$ nemotron steps run sft/automodel -c tiny -r lepton_sft_automodel +``` + +The CLI reads the `sft/automodel` step, applies the `tiny` configuration, and submits the job to the cluster the `lepton_sft_automodel` profile describes. +Change the step identifier to choose a different unit of work. +Change the configuration to change parameter values without editing files. +Change the profile to move the same job to a different cluster. + +## Where To Go Next + +- [Getting Started With Steps](/getting-started) walks through listing steps, inspecting inputs and outputs, and exploring the step graph from the CLI. + +- [Model Training](/../train-models/index) covers supervised fine-tuning, parameter-efficient fine-tuning, RL alignment, and post-training optimization. + +- [Synthetic Data Generation](/../sdg/index), [Translation](/../translation/index), [Build MCQ Benchmarks](/../build-benchmarks/index), and [Model Evaluation](/../model-eval/index) each cover one family of steps end to end. + +- [Execution Through NeMo Run](/../nemo_runspec/nemo-run) describes profiles, attached and detached runs, and cluster setup. diff --git a/docs/fern/pages-vnightly/steps/getting-started.mdx b/docs/fern/pages-vnightly/steps/getting-started.mdx new file mode 100644 index 000000000..9c155d6fe --- /dev/null +++ b/docs/fern/pages-vnightly/steps/getting-started.mdx @@ -0,0 +1,143 @@ +--- +title: "Getting Started With Steps" +slug: "steps/getting-started.html" +description: "This guide walks through the basic CLI operations that you use to discover steps, inspect their inputs and outputs, and chain them into pipelines. You do not need a cluster or a GPU to follow along. E" +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + + + +This guide walks through the basic CLI operations that you use to discover steps, inspect their inputs and outputs, and chain them into pipelines. +You do not need a cluster or a GPU to follow along. +Every command in this guide reads metadata only. + +If you have not read [Nemotron Steps Basics](/basics), start there for the definitions of *step*, *configuration*, *environment profile*, and *artifact*. + +## Prerequisites + +- Python 3.10 or later. + +- [uv](https://docs.astral.sh/uv/) installed and on your path. + +These prerequisites cover the basics for an introduction to using the steps. +For each activity, such as model training or data generation, refer to the getting started page of each activity for additional prerequisites. + +## Getting Access to the Nemotron CLI + +1. Clone the repository, if you havenтАЩt already: + + ```console + $ git clone https://github.com/NVIDIA-NeMo/Nemotron && cd Nemotron + ``` + + Run all commands from the repository root. + +1. Synchronize the common dependencies: + + ```console + $ uv sync + ``` + +1. Confirm you can run the CLI: + + ```console + $ uv run nemotron steps --help + ``` + +The output lists the step-catalog subcommands that this guide uses: `list`, `show`, and `run`. + +## List the Available Steps + +Use `nemotron steps list` to see every step that the CLI discovers. +The output is a table with the step identifier, the category, the consumed artifact types, the produced artifact types, and a short description. + +```console +$ uv run nemotron steps list +``` + +Each row in the table is one building block that you can run, inspect, or chain into a pipeline. + +### Filter by Category + +Pass `--category` to narrow the list to one family of steps. +For example, the following command shows only the supervised fine-tuning steps. + +```console +$ uv run nemotron steps list --category sft +``` + +The category matches the top-level folder under `src/nemotron/steps/`. +Common categories include `sft`, `peft`, `rl`, `pretrain`, `optimize`, `convert`, `data_prep`, `sdg`, `translate`, `curate`, `byob`, `eval`, and `env`. + +### Emit Machine-Readable JSON + +Pass `--json` to emit a JSON array instead of a table. +The JSON output is the same data the table renders, with no formatting noise, so it works well with `jq` and with agent tooling. + +```console +$ uv run nemotron steps list --json +$ uv run nemotron steps list --category sft --json | jq '.[].id' +``` + +The `--json` flag is available on both `nemotron steps list` and `nemotron steps show`. + +## Inspect a Single Step + +Use `nemotron steps show ` to print the manifest for one step. +The output includes the description, the consumed and produced artifacts with their types and descriptions, the parameters with their defaults and choices, and the run specification, which covers the launcher, the container image, the resource shape, and the default configuration. + +```console +$ uv run nemotron steps show sft/automodel +``` + +The same command in JSON form is the easiest way to read the full manifest programmatically. + +```console +$ uv run nemotron steps show sft/automodel --json +``` + +The JSON document includes a `consumes` array and a `produces` array. +Each entry has a `type`, a `required` flag, and a `description`. +These two arrays are the contract that connects one step to the next. + +## Chain Steps Through Artifacts + +Steps fit together because their consumed and produced artifact types match. +Use the `--produces` and `--consumes` filters on `nemotron steps list` to walk the building-block graph from either direction. + +To find every step that writes a `training_jsonl` artifact, run the following command. + +```console +$ uv run nemotron steps list --produces training_jsonl +``` + +The output lists the synthetic data generation and data preparation steps that emit training JSONL. + +To find every step that reads a `training_jsonl` artifact, run the following command. + +```console +$ uv run nemotron steps list --consumes training_jsonl +``` + +The output lists the fine-tuning and reinforcement-learning (RL) steps that take training JSONL as input. + +Together, the two queries show you which steps you can chain. +For example, the `sdg/data_designer` step produces `training_jsonl`, and the `sft/automodel` step consumes `training_jsonl`, so you can pipe the synthetic dataset directly into supervised fine-tuning without an intermediate conversion. + +The same pattern works for other artifact types, such as `packed_parquet`, `binidx`, `checkpoint_hf`, `checkpoint_megatron`, `checkpoint_lora`, `synthetic_jsonl`, `eval_results`, and `mcq_benchmark_parquet`. + +## Where To Go Next + +Pick the domain section that matches the work you have in mind. + +- [Synthetic Data Generation](/../sdg/index) to generate chat data, tool-calling data, or preference pairs. + +- [Translation](/../translation/index) to translate corpora with optional faithfulness, accuracy, integrity, and translation-quality holistic (FAITH) scoring. + +- [Build MCQ Benchmarks](/../build-benchmarks/index) to generate a multiple-choice question benchmark from your own documents. + +- [Model Training](/../train-models/index) to fine-tune, align, or optimize a model. + +- [Model Evaluation](/../model-eval/index) to score a deployed checkpoint with standard benchmarks. diff --git a/docs/fern/pages-vnightly/steps/index.mdx b/docs/fern/pages-vnightly/steps/index.mdx new file mode 100644 index 000000000..31a3866ea --- /dev/null +++ b/docs/fern/pages-vnightly/steps/index.mdx @@ -0,0 +1,107 @@ +--- +title: "About Nemotron Steps" +slug: "steps/index.html" +description: "A Nemotron step is a named, reusable unit of work that you invoke with the nemotron steps CLI. Each step declares the artifacts it consumes, the artifacts it produces, and a set of named configuration" +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + + + +A Nemotron *step* is a named, reusable unit of work that you invoke with the `nemotron steps` CLI. +Each step declares the artifacts it consumes, the artifacts it produces, and a set of named configurations that you can run on your laptop, on a single node, or on a cluster. +Steps are the building blocks of every Nemotron pipeline. + +This section is the entry point for the step model itself. +Use it to learn what a step is, to explore the available steps from the CLI, and to find the right domain section for the work you have in mind. + +## The Basics + + + +Definitions of *step*, *configuration*, *environment profile*, and *artifact*. +Start here if you have not run a step before. + +--- + +`Concepts` + + + + +List the available steps, inspect their inputs and outputs, and chain steps together. + +--- + +`Beginner` + + + + + +## Building Block Steps + +Pipelines are modular. +You can run a single step in isolation, and you can compose steps into longer flows. +The cards below group the available steps by the outcome they support. +Follow the link in each card for tutorials, how-to guides, concepts, and reference material in that domain. + + + +Generate supervised fine-tuning (SFT) chat data, tool-calling data, or preference pairs with NeMo Data Designer. +Backed by the `sdg/data_designer` step. + + + + +Translate JSON Lines or Apache Parquet corpora with NeMo Curator, with optional faithfulness, accuracy, integrity, and translation-quality holistic (FAITH) scoring. +Backed by the `translate/nemo_curator` step. + + + + +Filter raw text with `curate/nemo_curator`, then tokenize and shard it with the `data_prep/pretrain_prep`, `data_prep/sft_packing`, and `data_prep/rl_prep` steps. +Use the curation docs for JSONL filtering and the training docs for data preparation. + + + + +Generate a custom multiple-choice question (MCQ) benchmark from your own documents, with optional translation. +Backed by the `byob` step. + + + + +Pretrain, fine-tune, align, and optimize models with the `pretrain/`, `sft/`, `peft/`, `rl/`, `optimize/`, and `convert/` step families. + + + + +Score a trained checkpoint on standard benchmarks with NeMo Evaluator. +Backed by the `eval/model_eval` step. + + + + + +## Shared Infrastructure + +Every remote run depends on an *environment profile* that describes the cluster, the container image, the resource shape, and the mount points. +The `env/env_toml` step generates these profile files from compact YAML templates for Lepton or Slurm. +The Basics page covers profiles and the `env/env_toml` step in detail. + +## I Want To + +| Goal | Go To | +| --- | --- | +| Learn what a step, configuration, and profile are | [Nemotron Steps Basics](/basics) | +| List the available steps from the CLI | [Getting Started With Steps](/getting-started) | +| Run steps in an airgap environment | [Airgap](/airgap) | +| Curate JSONL text | [Data Curation](/../curate/index) | +| Generate synthetic training data | [Synthetic Data Generation](/../sdg/index) | +| Translate a corpus | [Translation](/../translation/index) | +| Build an MCQ benchmark | [Build MCQ Benchmarks](/../build-benchmarks/index) | +| Fine-tune or align a model | [Model Training](/../train-models/index) | +| Evaluate a model | [Model Evaluation](/../model-eval/index) | +| Set up a Lepton or Slurm environment profile | [Nemotron Steps Basics](/basics) | diff --git a/docs/fern/pages-vnightly/train-models/explanation/artifact-graph.mdx b/docs/fern/pages-vnightly/train-models/explanation/artifact-graph.mdx new file mode 100644 index 000000000..89ed9b5ee --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/explanation/artifact-graph.mdx @@ -0,0 +1,37 @@ +--- +title: "Artifact Graph" +slug: "train-models/explanation/artifact-graph.html" +description: "For definitions of artifact, step, and how the CLIтАЩs --produces and --consumes filters let you walk the artifact graph, see Nemotron Steps Basics. This page focuses on the artifact types and common ch" +--- + +For definitions of *artifact*, *step*, and how the CLIтАЩs `--produces` and `--consumes` filters let you walk the artifact graph, see [Nemotron Steps Basics](/../../steps/basics). +This page focuses on the artifact types and common chains specific to model training. + +## Common Training Paths + +The supervised fine-tuning paths in the Nemotron pipeline follow one of the following two chains. + +- The Hugging Face line used by `sft/automodel`: `training_jsonl` тЖТ `sft/automodel` тЖТ `checkpoint_hf`. + +- The packed Megatron line used by `sft/megatron_bridge`: `training_jsonl` тЖТ packing prep тЖТ `packed_parquet` тЖТ `sft/megatron_bridge` тЖТ `checkpoint_megatron`. + +A typical alignment path starts from a `checkpoint_megatron` policy, adds preference or reward-side data, runs one of the `rl/nemo_rl/...` steps, and produces a new `checkpoint_megatron`. + +A typical compression path starts from `checkpoint_hf`, runs `optimize/modelopt/quantize`, and produces `checkpoint_megatron`. +Add a conversion step after quantization when the next consumer needs a Hugging Face layout again. + +## Tokenizer and Chat Template Consistency + +Matching artifact types is not enough for correctness. +The tokenizer, the chat template, and the maximum sequence length must stay consistent across every step that tokenizes text or loads weights for the same model line. +A mismatch often appears as a plausible training loss curve with poor downstream quality. + +## Related Reading + +- [Nemotron Steps Basics](/../../steps/basics) defines the concepts of *step*, *configuration*, *environment profile*, and *artifact*. + +- [Training Basics](/basics) defines the training-specific terms, including tokenizers and chat templates. + +- [Data and Checkpoint Formats](/../how-to/data-and-checkpoint-formats) describes the on-disk layouts of each artifact type. + +- [Training Libraries](/training-libraries) describes the ecosystem of libraries that back the steps. diff --git a/docs/fern/pages-vnightly/train-models/explanation/basics.mdx b/docs/fern/pages-vnightly/train-models/explanation/basics.mdx new file mode 100644 index 000000000..c5bce325b --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/explanation/basics.mdx @@ -0,0 +1,111 @@ +--- +title: "Training Basics" +slug: "train-models/explanation/basics.html" +description: "This page defines the training-specific terms that the rest of the training documentation uses. You do not need to read it to run a command, but every other page in this section assumes that you alrea" +--- + +This page defines the training-specific terms that the rest of the training documentation uses. +You do not need to read it to run a command, but every other page in this section assumes that you already understand these basics. +For the step, configuration, and environment profile model that every Nemotron command shares, see [Nemotron Steps Basics](/../../steps/basics). + +## Training Approaches + +The Nemotron training pipeline packages four common training approaches. +This section defines each one in plain language. + +### Supervised Fine-Tuning + +*Supervised fine-tuning* (SFT) trains a base model on a dataset of instruction-and-response examples. +The training loop reads each example, asks the model to predict the desired response, and updates every weight in the model to lower the prediction error. +You start an SFT run from a base model checkpoint and a dataset of chat-formatted examples. +You finish with a fine-tuned checkpoint that prefers the response style your dataset modeled. +SFT is the usual first step after base pretraining when you adapt a model to a new task or domain. + +### Parameter-Efficient Fine-Tuning + +*Parameter-efficient fine-tuning* (PEFT) is fine-tuning that updates only a small number of new weights, called *adapter weights*, while keeping the base model weights frozen. +The most common form in the Nemotron pipeline is *low-rank adaptation* (LoRA), which inserts small matrices alongside the existing weight matrices and trains only those small matrices. +PEFT runs cost a fraction of full SFT in GPU memory and produce a small adapter artifact instead of a full model. +You can serve a PEFT adapter on top of the base model at inference time, or you can merge the adapter with the base model after training to produce a single deployable checkpoint. + +### Reinforcement Learning Alignment + +*Reinforcement learning* (RL) alignment is a follow-on training stage that takes a supervised fine-tuned model and improves it against a reward signal instead of fixed responses. +The model proposes its own responses, a scoring mechanism rates each one, and the training loop nudges the model toward higher-rated responses. +Different RL methods use different scoring mechanisms, but they all depend on a working SFT checkpoint to start from and a quality-controlled prompt or preference dataset. + +### Quantization + +*Quantization* lowers the numerical precision used to store model weights, for example, from sixteen-bit floating point to eight-bit floating point. +The quantized model uses less memory and runs faster on the hardware that supports the lower-precision math. +Quality drops a small amount in exchange. +You apply quantization after the model is fully trained and you have committed to a deployment target. +The choice of quantization recipe, such as `fp8` or `nvfp4`, depends on the target hardware. + +## Tokenizers and Chat Templates + +A *tokenizer* converts text strings into the integer identifiers the model consumes, and converts the modelтАЩs output identifiers back into text. +Each model family ships with its own tokenizer. +A run that uses one tokenizer to prepare data and a different tokenizer to train will fail outright, or, worse, will train against meaningless input. +Keep the tokenizer aligned across every stage that touches the same model. + +A *chat template* is a small text-substitution recipe that the tokenizer applies to a multi-turn conversation before tokenization. +It inserts role markers such as `user` and `assistant`, any special start-of-turn and end-of-turn tokens, and any fixed system instructions. +The template ships with the tokenizer. +You do not write a chat template by hand for ordinary fine-tuning. +You do need to confirm that the conversation format of your dataset matches what the chosen tokenizerтАЩs template expects. + +## The Messages JSON Lines Format + +Most SFT and PEFT steps in this documentation consume chat-formatted *JSON Lines* (JSONL) datasets. +JSONL is one independent JSON object per line, with no enclosing array. +Each object has a single field named `messages` that holds an ordered list of conversation turns. +Each turn has a `role` of `system`, `user`, or `assistant`, and a `content` field with the turnтАЩs text. + +The following is one JSONL record covering a system instruction, a user question, and the assistant response. + +```json startLine={1} +{ + "messages": [ + { + "role": "system", + "content": "You answer arithmetic questions in one sentence." + }, + { + "role": "user", + "content": "What is twelve times seven?" + }, + { + "role": "assistant", + "content": "Twelve times seven is eighty-four." + } + ] +} +``` + +A real dataset has one such line for every training example. +The training loop reads the file line by line, applies the modelтАЩs chat template to each `messages` list, and treats the assistant turns as the prediction targets. + +## Checkpoints + +A *checkpoint* is a saved snapshot of a modelтАЩs weights. +A checkpoint contains every numeric parameter the model uses to make predictions, in a serialization format the training and inference code can read back. +Most training steps in the Nemotron pipeline produce one of the following three checkpoint layouts. + +| Layout | When You Encounter It | What It Contains | +| --- | --- | --- | +| Hugging Face checkpoint | Output of SFT runs that use the NeMo AutoModel library. | A directory of safetensors files plus tokenizer files. The checkpoint is deployable as is to any Hugging Face inference runtime. | +| Megatron checkpoint | Output of Megatron-Bridge SFT runs, of RL runs, and of quantization runs. | A directory of distributed shards that match the parallelism settings of the training job. The checkpoint requires conversion to Hugging Face format before deployment to common inference runtimes. | +| LoRA adapter checkpoint | Output of every PEFT run. | A directory containing only the adapter weights. The adapter requires either the base model alongside it at inference time, or a merge step that combines the two into a deployable single-model checkpoint. | + +Two ground rules help avoid trouble. +Always keep the original base checkpoint together with any adapter you train against it. +Always record the tokenizer version that produced the data so the inference runtime picks up the same tokenizer at serving time. + +## Where To Go Next + +- [Nemotron Steps Basics](/../../steps/basics) defines the *step*, *configuration*, and *environment profile* model that every training command uses. + +- [Getting Started With Training Steps](/../getting-started) walks through a first run. + +- [Reference](/../reference/index) lists every step, configuration, and command-line option. diff --git a/docs/fern/pages-vnightly/train-models/explanation/index.mdx b/docs/fern/pages-vnightly/train-models/explanation/index.mdx new file mode 100644 index 000000000..327535975 --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/explanation/index.mdx @@ -0,0 +1,45 @@ +--- +title: "Training Concepts" +slug: "train-models/explanation/index.html" +description: "This section provides conceptual material for training with Nemotron steps. Training Basics introduces fine-tuning approaches, tokenizers, the chat dataset format, and checkpoint layouts. For the step" +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + + + +This section provides conceptual material for training with Nemotron steps. +[Training Basics](/basics) introduces fine-tuning approaches, tokenizers, the chat dataset format, and checkpoint layouts. +For the step, configuration, and environment profile model that every Nemotron command shares, see [Nemotron Steps Basics](/../../steps/basics). +The remaining pages explain how artifacts relate to one another and how the training libraries differ. + + + +Defines supervised fine-tuning, parameter-efficient fine-tuning, reinforcement learning alignment, quantization, tokenizers, the chat dataset format, and checkpoints. + +--- + +concepts + + + + +Explains how steps declare typed inputs and outputs and what common training and alignment paths look like. + +--- + +concepts + + + + +Explains which library backs each step and how that choice determines data format, checkpoint layout, and parallelism. + +--- + +concepts + + + + diff --git a/docs/fern/pages-vnightly/train-models/explanation/training-libraries.mdx b/docs/fern/pages-vnightly/train-models/explanation/training-libraries.mdx new file mode 100644 index 000000000..a087eb82d --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/explanation/training-libraries.mdx @@ -0,0 +1,50 @@ +--- +title: "Training Libraries" +slug: "train-models/explanation/training-libraries.html" +description: "Each Nemotron training step delegates to a specific training library. The library determines how the step loads models, how it reads data, and the native checkpoint layout it writes. Different librari" +--- + +Each Nemotron training step delegates to a specific *training library*. +The library determines how the step loads models, how it reads data, and the native checkpoint layout it writes. +Different libraries impose different data formats, checkpoint formats, and parallelism conventions, so the choice of library shapes every step downstream of it. +The Nemotron training pipeline draws on an ecosystem of four libraries, described in the sections that follow. + +## NeMo AutoModel + +The steps `sft/automodel` and `peft/automodel` use the NeMo AutoModel library for training centered on Hugging Face conventions. +The expected input is JSON Lines (JSONL) files in OpenAI chat format, read directly without an intermediate packing step. +The output is a Hugging Face checkpoint directory that any Hugging Face inference runtime can load as is. + +## Megatron-Bridge + +The steps `sft/megatron_bridge` and `peft/megatron_bridge` use the Megatron-Bridge library for large distributed training runs. +The expected input is packed Apache Parquet produced by a separate packing step. +The output is a Megatron-format checkpoint, sharded to match the parallelism settings the run used. +A separate conversion step turns the Megatron output into a Hugging Face checkpoint when the next consumer expects that layout. + +## NeMo RL + +The steps under `rl/nemo_rl/` delegate to the NeMo RL library for reinforcement learning alignment algorithms. +Every NeMo RL step requires a supervised fine-tuned policy checkpoint in Megatron format as the warm start. +Different alignment algorithms have different reward sources and different dataset shapes, so the consumed artifact types vary per step. + +## NVIDIA Model Optimizer + +The steps under `optimize/modelopt/` call the NVIDIA Model Optimizer library, which runs alongside Megatron-Bridge for export. +*Quantization* lowers the numerical precision of model weights so the model uses less memory and runs faster on the target hardware. +*Pruning* removes weights or whole structural units to shrink the model. +*Distillation* transfers quality from a larger teacher checkpoint to a smaller student checkpoint. + +## Choosing a Library + +Use the relevant how-to guide to map your supervised fine-tuning (SFT), parameter-efficient fine-tuning (PEFT), or reinforcement learning (RL) requirements to a library. +Treat your library choice as long-term. +Switching from one library to another requires conversion steps and a new round of performance tuning, not a single configuration flag change. + +## Related Reading + +- [Training Basics](/basics) defines the training approaches and the artifact types each library consumes and produces. + +- [Choose an SFT Backend](/../how-to/choose-sft-backend) compares the two SFT libraries side by side. + +- [Execution through NeMo Run](/../../nemo_runspec/nemo-run) describes how each library is launched at runtime. diff --git a/docs/fern/pages-vnightly/train-models/getting-started.mdx b/docs/fern/pages-vnightly/train-models/getting-started.mdx new file mode 100644 index 000000000..81cf0f5d6 --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/getting-started.mdx @@ -0,0 +1,183 @@ +--- +title: "Getting Started with Training Steps" +slug: "train-models/getting-started.html" +description: "This page walks through one supervised fine tuning (SFT) run on DGX Cloud Lepton using the tiny configuration. The tiny configuration lives in src/nemotron/steps/sft/automodel/config/tiny.yaml and is " +--- + +This page walks through one supervised fine tuning (SFT) run on DGX Cloud Lepton using the *tiny* configuration. +The tiny configuration lives in `src/nemotron/steps/sft/automodel/config/tiny.yaml` and is meant for short validation before you scale work. +The goal is to validate end-to-end execution, NeMo Run, and your environment profile on real multi-node hardware. + +## Prerequisites + +- You need access to DGX Cloud Lepton with GPU nodes. +This path assumes two nodes with eight A100 80 GB GPUs per node, matching the `run.env` block in `src/nemotron/steps/sft/automodel/config/tiny.yaml`. + +- You set the following environment variables: + + - `HF_TOKEN` + + - `WANDB_API_KEY` + + - `NVIDIA_API_KEY` + +- You ran `lep login` after syncronizing dependencies and are logged into Lepton. + +The preceding list applies to the steps on this page. +Refer to [Limitations and Restrictions](/index#limitations-and-restrictions) for information about supported environments. + +## Procedure + +1. Clone the repository, if you havenтАЩt already: + + ```console + $ git clone https://github.com/NVIDIA-NeMo/Nemotron && cd Nemotron + ``` + +1. Set the dependencies: + + ```console + $ uv sync + ``` + +1. Create an `env.toml` at the root of the repository like the following example: + + ```text startLine={1} + [lepton_base] + executor = "lepton" + container_image = "nvcr.io/nvidia/nemo:25.11.nemotron_3_nano" + node_group = "\" + nemo_run_dir = "/mnt/lustre-shared/\/experiments" + remote_job_dir = "/mnt/lustre-shared/\/output/functional" + workspace = "/mnt/lustre-shared" + ray_version = "2.48.0" + shared_memory_size = 65536 + pip_extras = ["typer", "rich", "pydantic-settings"] + mounts = [ + { from = "node-nfs:\", path = "\", mount_path = "/mnt/lustre-shared" } + ] + env_vars = { + HF_TOKEN = "${oc.env:HF_TOKEN,''}", + HF_HOME = "/mnt/lustre-shared/hf", + WANDB_API_KEY = "${oc.env:WANDB_API_KEY,''}", + WANDB_PROJECT = "\", + NVIDIA_API_KEY = "${oc.env:NVIDIA_API_KEY,''}", + RAY_DEDUP_LOGS = "0", + RAY_GRAFANA_IFRAME_HOST = "" + } + + [lepton_sft_automodel] + extends = "lepton_base" + container_image = "nvcr.io/nvidia/nemo-automodel:26.04" + resource_shape = "gpu.8xa100-80gb" + nodes = 2 + pip_extras = ["typer", "rich", "pydantic-settings", "omegaconf"] + ``` + +**Summary of the Config File** + + The `[lepton_base]` table defines cluster fundamentals that every profile inherits: the executor, the base container image, the node group, shared-storage paths, the Ray runtime version, the shared-memory size, the Python package extras the Nemotron CLI needs, the cluster mount, and an `env_vars` block whose `$\{oc.env:VAR,''\}` entries pull credentials from your shell at submit time. +The `[lepton_sft_automodel]` table extends the base and adds the AutoModel container image, the resource shape needed for full-parameter SFT, the node count, and the additional Python package extras the AutoModel runtime expects. + + Contact your cluster administrator for the values that replace the placeholders. + + - ``: The Lepton node group identifier for the cluster you have access to. + + - ``: A directory you own on the shared mount where NeMo Run records each experiment. + + - ``: The alias of the Lepton storage fileset that each container mounts. + + - ``: The host path the fileset exposes. + + - ``: The Weights & Biases project name the run reports to. + + Export `HF_TOKEN`, `WANDB_API_KEY`, and `NVIDIA_API_KEY` in your shell before submitting; the env file pulls them in without writing the values to disk. + + If you would rather generate a complete env file with every Nemotron training profile pre-wired, run the bundled environment profile generator instead of writing the file by hand. + + ```console + $ uv run nemotron steps run env/env_toml -c lepton output_path=env.toml force=true + ``` + + The generator emits every canonical profile the training steps expect, including data-prep, SFT, PEFT, RL, and pretrain variants. + +1. View the step manifest and run specification: + + ```console + $ uv run nemotron steps show sft/automodel + ``` + +**Example Output** + + ```default startLine={1} + тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА sft/automodel тАФ SFT Training (AutoModel) тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА + ~/nemotron/src/nemotron/steps/sft/automodel + + Supervised fine-tuning with the AutoModel stack for HF-format models and JSONL + datasets that already use OpenAI chat-format messages. Supports full SFT and + LoRA-style adapter tuning from the same step. + + Consumes + тАв training_jsonl тАФ Instruction data in JSONL with a messages field + + Produces + тАв checkpoint_hf тАФ HuggingFace checkpoint directory (full model or adapter-style PEFT output) + + Parameters + тАв peft (default=null) тАФ Use 'lora' for adapter tuning, or 'null' for full fine-tuning. + + Runspec + launcher: torchrun + image: - + resources: nodes=1 gpus_per_node=4 + config dir: ~/nemotron/src/nemotron/steps/sft/automodel/config + default config: default + ``` + +1. Compile the job against your Lepton profile without submitting it. +The profile name `lepton_sft_automodel` must match a table in your root `env.toml`. + + ```console + $ uv run nemotron steps run sft/automodel --config tiny --run lepton_sft_automodel --dry-run + ``` + +**Partial Output** + + ```text + Compiled Configuration + + тХнтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА run тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтХо + тФВ env: тФВ + тФВ nodes: 2 тФВ + тФВ gpus_per_node: 8 тФВ + тФВ nprocs_per_node: 8 тФВ + тФВ executor: lepton тФВ + тФВ container_image: nvcr.io/nvidia/nemo-automodel:26.04 тФВ + тФВ node_group: az-sat-lepton-001 тФВ + тФВ resource_shape: gpu.8xa100-80gb тФВ + тФВ remote_job_dir: /mnt/lustre-shared/user/nemotron/.nemotron-jobs + ... + ``` + +1. Submit the sample SFT job: + + ```console + $ uv run nemotron steps run sft/automodel -c tiny -r lepton_sft_automodel + ``` + +The sample `tiny` config sets small training and validation splits. +To specify the output path for checkpoints, set `SFT_OUTPUT_DIR` before running or specify the `checkpoint.checkpoint_dir` CLI override. + +## Success Checks + +- The command `nemotron steps show ` lists `consumes` and `produces` artifact types. Those types must line up with your pipeline when you chain steps. + +- A finished sample run leaves logs and job metadata where NeMo Run is configured to write them. See [Execution through NeMo Run](/../nemo_runspec/nemo-run) for experiment layout. + +- If you change tokenizer, template, or sequence length, keep them consistent across every step that touches the same model line. The [Artifact Graph](/explanation/artifact-graph) page explains why consistency matters. + +## Next Steps + +- Follow [Run SFT with AutoModel on Custom Data](/how-to/run-sft-automodel) when you need to point `tiny.yaml` at your own data or change the base model. + +- Read [Choose an SFT Backend](/how-to/choose-sft-backend) when you need Megatron Bridge instead of AutoModel. diff --git a/docs/fern/pages-vnightly/train-models/how-to/choose-peft-backend.mdx b/docs/fern/pages-vnightly/train-models/how-to/choose-peft-backend.mdx new file mode 100644 index 000000000..4bff17af8 --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/how-to/choose-peft-backend.mdx @@ -0,0 +1,43 @@ +--- +title: "Choose a PEFT Backend" +slug: "train-models/how-to/choose-peft-backend.html" +description: "Parameter-efficient fine tuning (PEFT) in Nemotron is implemented as dedicated steps that emit adapter checkpoints. Pick the backend that matches your base checkpoint format and your data path." +--- + +Parameter-efficient fine tuning (PEFT) in Nemotron is implemented as dedicated steps that emit adapter checkpoints. Pick the backend that matches your base checkpoint format and your data path. + +## Options + +| Step id | Best when | Primary inputs | Primary output artifact | +| --- | --- | --- | --- | +| peft/automodel | You have a Hugging Face base, chat-formatted JSON Lines (JSONL), and a small GPU count | training_jsonl | checkpoint_lora | +| peft/megatron_bridge | You have a Megatron base checkpoint and packed Apache Parquet at scale | packed_parquet, checkpoint_megatron | checkpoint_lora | + +## Decision Flow + +1. If you have one to four graphics processing units (GPUs) and JSON Lines (JSONL) chat data, use `peft/automodel`. + +2. If you have eight or more GPUs, you already run Megatron packing, and you train adapters on a Megatron base, use `peft/megatron_bridge`. + +3. If deployment requires a merged Hugging Face model, plan `convert/merge_lora` after training. Add any Megatron to Hugging Face conversion step that your pipeline needs before merge. Adapter evaluation scores are not identical to merged model scores. + +## Sample Commands + +```console +$ uv run nemotron steps run peft/automodel -c tiny +$ uv run nemotron steps run peft/megatron_bridge -c tiny +``` + +The Megatron Bridge path needs compatible packed Parquet and a base `checkpoint_megatron` path that you set in training configuration. + +## Success Criteria + +- You version adapter artifacts with base model id, data blend, rank, alpha, and target module set so you can reproduce runs. + +- You re-evaluate after merge when production uses merged weights. + +## Related Reading + +- [Choose an SFT Backend](/choose-sft-backend) + +- [Data and Checkpoint Formats](/data-and-checkpoint-formats) diff --git a/docs/fern/pages-vnightly/train-models/how-to/choose-rl-step.mdx b/docs/fern/pages-vnightly/train-models/how-to/choose-rl-step.mdx new file mode 100644 index 000000000..0cd8d5d82 --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/how-to/choose-rl-step.mdx @@ -0,0 +1,51 @@ +--- +title: "Choose an RL Alignment Step" +slug: "train-models/how-to/choose-rl-step.html" +description: "Post-training alignment with NeMo RL is split into three steps under rl/nemo_rl/. The table uses short names: direct preference optimization (DPO), reinforcement learning with verifiable rewards (RLVR" +--- + +Post-training alignment with NeMo RL is split into three steps under `rl/nemo_rl/`. The table uses short names: direct preference optimization (DPO), reinforcement learning with verifiable rewards (RLVR) paired with group relative policy optimization (GRPO), and reinforcement learning from human feedback (RLHF). Choose a step based on how the reward signal enters training, not based on model family alone. + +## Options + +| Step id | Reward source | Typical data shape | Output | +| --- | --- | --- | --- | +| rl/nemo_rl/dpo | Static preference pairs | Prompt with chosen and rejected completions | checkpoint_megatron | +| rl/nemo_rl/rlvr | Verifiable or programmatic checks | Prompt with answers, tests, or environment metadata | checkpoint_megatron | +| rl/nemo_rl/rlhf | Learned reward or judge model | Prompts plus a reward model checkpoint | checkpoint_megatron | + +All three steps consume a warm-start policy in `checkpoint_megatron` format produced by Megatron-style supervised fine tuning (SFT). They do not train a policy from scratch. + +## Decision Flow + +1. If you only have pairwise preferences and no online reward, use `rl/nemo_rl/dpo`. + +2. If reward is deterministic, for example unit tests, answer match, or tool success, use `rl/nemo_rl/rlvr`. + +3. If a separate reward model or judge produces scores, use `rl/nemo_rl/rlhf`. + +4. For resource-server rewards or NeMo Gym style rewards, use the RLVR or RLHF configuration paths documented in each step `SKILL.md` file and YAML file. Some flows use `config/nemo_gym.yaml`. + +## Data Preparation + +When preference JSONL still contains Hugging Face placeholders or needs sharding resolution, run the RL prep step upstream. Inspect `data_prep/rl_prep` in the step tree. Read the manifest for your chosen `rl/nemo_rl/...` step for required `consumes` types. + +## Sample Commands + +```console +$ uv run nemotron steps run rl/nemo_rl/dpo -c tiny +$ uv run nemotron steps run rl/nemo_rl/rlvr -c tiny +$ uv run nemotron steps run rl/nemo_rl/rlhf -c tiny +``` + +## Success Criteria + +- You validate reward design on a small batch before you scale rollout count. + +- You track KullbackтАУLeibler (KL) drift, reward variance, response length, and held-out task metrics. Average reward alone is not sufficient. + +## Related Reading + +- [Execution through NeMo Run](/../../nemo_runspec/nemo-run) describes Ray-backed RL workloads on supported executors. + +- [Training Libraries](/../explanation/training-libraries) places NeMo RL in the wider library ecosystem. diff --git a/docs/fern/pages-vnightly/train-models/how-to/choose-sft-backend.mdx b/docs/fern/pages-vnightly/train-models/how-to/choose-sft-backend.mdx new file mode 100644 index 000000000..93d7d3c91 --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/how-to/choose-sft-backend.mdx @@ -0,0 +1,47 @@ +--- +title: "Choose an SFT Backend" +slug: "train-models/how-to/choose-sft-backend.html" +description: "Supervised fine tuning (SFT) is implemented by two interchangeable steps. Pick one step based on data format, checkpoint format, and scale." +--- + +Supervised fine tuning (SFT) is implemented by two interchangeable steps. Pick one step based on data format, checkpoint format, and scale. + +## Options + +| Step id | Best when | Primary input artifact | Primary output artifact | +| --- | --- | --- | --- | +| sft/automodel | You have OpenAI chat-formatted JSON Lines (JSONL), you want Hugging Face style checkpoints, or you want the smallest cluster footprint for iteration | training_jsonl | checkpoint_hf | +| sft/megatron_bridge | You need distributed Megatron Bridge training with packed sequences and an Apache Parquet pipeline | packed_parquet | checkpoint_megatron | + +## Decision Flow + +1. If your data is already chat-formatted JSON Lines (JSONL) and downstream tools expect Hugging Face safetensors, start with `sft/automodel`. + +2. If your data is packed Parquet produced by the packing prep step, or you require Megatron distributed checkpoints without an export round trip, use `sft/megatron_bridge`. + +3. If you start on one backend and later need the other output format, plan an explicit conversion step in your pipeline. Do not switch backends silently without conversion. + +## Prerequisites for Megatron Bridge + +Megatron Bridge SFT expects packed Parquet that is compatible with the tokenizer and sequence length you will use in training. The pack size in prep must match the training sequence length. If they diverge, you risk shape errors mid-run. + +## Sample Commands + +```console +$ uv run nemotron steps run sft/automodel -c tiny +$ uv run nemotron steps run sft/megatron_bridge -c tiny +``` + +## Success Criteria + +- The commands `nemotron steps show sft/automodel` and `nemotron steps show sft/megatron_bridge` list the `consumes` types your workspace must provide. + +- Loss decreases on a small slice before you scale data or learning rate. + +- Tokenizer, chat template, and sequence length stay aligned with evaluation and with any later reinforcement learning (RL) step that reuses the policy. + +## Related Reading + +- [Data and Checkpoint Formats](/data-and-checkpoint-formats) + +- [Artifact Graph](/../explanation/artifact-graph) diff --git a/docs/fern/pages-vnightly/train-models/how-to/convert-checkpoints.mdx b/docs/fern/pages-vnightly/train-models/how-to/convert-checkpoints.mdx new file mode 100644 index 000000000..0bab3b7c5 --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/how-to/convert-checkpoints.mdx @@ -0,0 +1,124 @@ +--- +title: "Convert Checkpoints Between Training Steps" +slug: "train-models/how-to/convert-checkpoints.html" +description: "Use a conversion step when one step produces a checkpoint layout that the next step cannot consume directly. The converter is an explicit pipeline step, not an implicit side effect of training." +--- + +Use a conversion step when one step produces a checkpoint layout that the next step cannot consume directly. +The converter is an explicit pipeline step, not an implicit side effect of training. + +## Choose the Converter + +| Source artifact | Target artifact | Step | +| --- | --- | --- | +| checkpoint_hf | checkpoint_megatron | convert/hf_to_megatron | +| checkpoint_megatron | checkpoint_hf | convert/megatron_to_hf | +| checkpoint_lora plus original base checkpoint | merged checkpoint_hf | convert/merge_lora | + +Common cases: + +- AutoModel SFT or PEFT produces Hugging Face layout checkpoints. Use `convert/hf_to_megatron` before Megatron-Bridge consumers that require Megatron layout. + +- Megatron-Bridge SFT, RL, and some optimization steps produce Megatron distributed checkpoints. Use `convert/megatron_to_hf` before Hugging Face-native evaluation, deployment, or pruning flows. + +- PEFT steps produce adapter checkpoints. Use `convert/merge_lora` when deployment or evaluation needs a single merged Hugging Face checkpoint. + +## Preflight Checks + +Before conversion: + +- Pick one validated checkpoint iteration. For Megatron exports, point `megatron_path` at the concrete `iter_*` checkpoint directory, not the parent run directory. + +- Keep output paths separate from input paths. A failed conversion should never overwrite the source checkpoint. + +- Keep tokenizer and chat-template provenance with the checkpoint. If the converter needs `hf_model_id`, use the original model or config source used by training. + +- For LoRA merge, use the exact base checkpoint the adapter was trained against. + +## Convert Hugging Face to Megatron + +Use this path when a Megatron-Bridge consumer needs a Megatron distributed checkpoint. + +```console +$ nemotron steps run convert/hf_to_megatron -c default \ + hf_model_id=/path/to/hf_checkpoint_or_model_id \ + megatron_path=/path/to/output_megatron_checkpoint +``` + +For NVIDIA Nemotron checkpoints, keep `dtype=bfloat16` unless the source checkpoint requires another dtype. + +## Convert Megatron to Hugging Face + +Use this path when the next consumer is Hugging Face-native evaluation, deployment, pruning, or a tool that expects safetensors. + +```console +$ nemotron steps run convert/megatron_to_hf -c default \ + megatron_path=/path/to/megatron/iter_0000100 \ + hf_model_id=nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16 \ + hf_path=/path/to/output_hf_checkpoint +``` + +The `hf_model_id` value supplies the model configuration and tokenizer expectations used to reconstruct the Hugging Face layout. + +## Merge LoRA Into a Hugging Face Base + +Use this path for adapters produced by Hugging Face-native PEFT flows. + +```console +$ nemotron steps run convert/merge_lora -c default \ + backend=hf_peft \ + lora_checkpoint=/path/to/adapter_checkpoint \ + base_hf_path=/path/to/original_hf_base \ + output_hf_path=/path/to/merged_hf_checkpoint +``` + +Do not merge into a different base model, even if the architecture name matches. + +## Merge Megatron-Bridge LoRA + +Use this path for adapters produced by Megatron-Bridge PEFT flows. +The step can write a merged Megatron checkpoint and export a Hugging Face checkpoint when `export_hf=true`. + +```console +$ nemotron steps run convert/merge_lora -c default \ + backend=megatron_bridge \ + lora_checkpoint=/path/to/lora_megatron_checkpoint \ + base_megatron_path=/path/to/original_dense_megatron_checkpoint \ + hf_model_id=nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16 \ + output_megatron_path=/path/to/merged_megatron_checkpoint \ + output_hf_path=/path/to/merged_hf_checkpoint +``` + +Use `tp`, `pp`, and `ep` overrides when the merge must match a specific tensor, pipeline, or expert parallel layout. + +## Run on a Cluster Profile + +Generated environment files include one shared conversion profile per executor family. +Use the profile that matches your site: + +```console +$ nemotron steps run convert/megatron_to_hf -c default --batch lepton_convert_model \ + megatron_path=/mnt/lustre-shared/output/sft/megatron_bridge/iter_0000100 \ + hf_model_id=nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16 \ + hf_path=/mnt/lustre-shared/output/convert/sft-hf +``` + +Equivalent profile names are `slurm_convert_model` for Slurm and `dgxcloud_convert_model` for DGX Cloud. + +## Validate the Output + +After conversion: + +- Confirm the output directory exists and contains model weights plus tokenizer/config files for Hugging Face outputs. + +- Run a small generation or evaluation smoke test before using the checkpoint for a larger training or evaluation job. + +- Preserve the source checkpoint until the converted checkpoint has passed validation. + +## Related Documentation + +- [Data and Checkpoint Formats](/data-and-checkpoint-formats) + +- [Artifact Graph](/../explanation/artifact-graph) + +- [Conversion Step References](/../reference/convert/index) diff --git a/docs/fern/pages-vnightly/train-models/how-to/data-and-checkpoint-formats.mdx b/docs/fern/pages-vnightly/train-models/how-to/data-and-checkpoint-formats.mdx new file mode 100644 index 000000000..8aab9854b --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/how-to/data-and-checkpoint-formats.mdx @@ -0,0 +1,49 @@ +--- +title: "Data and Checkpoint Formats" +slug: "train-models/how-to/data-and-checkpoint-formats.html" +description: "Training steps declare compatible artifacts in each step.toml file. This page summarizes the types that most training steps use so you can chain steps without format surprises." +--- + +Training steps declare compatible artifacts in each `step.toml` file. This page summarizes the types that most training steps use so you can chain steps without format surprises. + +## Canonical Definitions + +Artifact names and compatibility rules live in `src/nemotron/steps/types.toml` at the repository root of the step library. Treat that file as the source of truth for names such as `training_jsonl`, `packed_parquet`, and `checkpoint_megatron`. + +## Frequently Used Types + +- The `training_jsonl` type means JSON Lines (JSONL) with a `messages` field in OpenAI chat shape. AutoModel supervised fine tuning (SFT) and parameter-efficient fine tuning (PEFT) consume it, and several reinforcement learning (RL) data paths consume it. + +- The `packed_parquet` type means packed shards with token columns and masks for Megatron Bridge style trainers. You get this type only after you run a packing prep step when you use the Parquet path. + +- The `checkpoint_hf` type means Hugging Face layout checkpoints or full weights on disk. + +- The `checkpoint_megatron` type means Megatron distributed checkpoints sharded across parallel ranks. + +- The `checkpoint_lora` type means low-rank adaptation (LoRA) adapter weights. Many downstream tools still need merge or export before deployment. + +## Chaining Guidance + +1. AutoModel SFT never consumes `packed_parquet`. Megatron Bridge SFT does not consume raw JSON Lines (JSONL) for the packed pipeline. + +2. RL steps in this repository expect a Megatron policy checkpoint for warm start. If your SFT used AutoModel, insert the appropriate conversion step before RL. + +3. Optimization steps that start from `checkpoint_hf` require a merged base when the trainable artifact was LoRA. + +## Where to Look in the Tree + +Each step directory contains the following files: + +- `step.toml` holds the identifier, human title, tags, `[[consumes]]`, `[[produces]]`, `[[parameters]]`, optional `[[strategies]]`, `[[errors]]`, and `[[models]]` blocks. + +- `config/default.yaml` holds primary configuration tuned for real workloads. + +- `config/tiny.yaml` holds reduced settings for short sample runs and end-to-end execution validation. + +- Extra files such as `config/nemo_gym.yaml` appear only on steps that need alternate method profiles. + +## Related Reading + +- [Artifact Graph](/../explanation/artifact-graph) + +- [Step Catalog (Training)](/../reference/step-catalog) diff --git a/docs/fern/pages-vnightly/train-models/how-to/env-and-executors.mdx b/docs/fern/pages-vnightly/train-models/how-to/env-and-executors.mdx new file mode 100644 index 000000000..fde4e08f0 --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/how-to/env-and-executors.mdx @@ -0,0 +1,35 @@ +--- +title: "Environment Profiles and Executors" +slug: "train-models/how-to/env-and-executors.html" +description: "Training steps use the same NeMo Run integration as the rest of Nemotron. Configuration is compiled into a job. Then a backend submits that job locally, to Slurm, to Lepton, or to other supported targ" +--- + +Training steps use the same NeMo Run integration as the rest of Nemotron. Configuration is compiled into a job. Then a *backend* submits that job locally, to Slurm, to Lepton, or to other supported targets that your environment profile defines. + +## What to Read First + +[Execution through NeMo Run](/../../nemo_runspec/nemo-run) is the canonical guide for the following topics: + +- Environment profile files and how they attach clusters, images, and mounts. + +- Attached runs with `--run` compared with detached runs with `--batch`. + +- How dotlist overrides merge into YAML training configuration. + +## How This Maps to Steps + +The command `nemotron steps run` resolves a step identifier to `step.py`, loads the step `config/` directory, and parses the same `env.toml` file that other Nemotron jobs use. Your workflow can select a different environment file if you configure that consistently. The command then hands the built job to the selected backend. You do not need a separate executor YAML file per step beyond what NeMo Run already consumes through the profile. + +## Practical Checklist + +1. Confirm `uv run nemotron steps show ` prints the run specification you expect. + +2. Run with `--dry-run` once per new profile to catch mount and image issues early. + +3. For reinforcement learning (RL) steps that require Ray, align node count, GPU count, and Ray settings with what NeMo RL expects for your cluster. Long-form details stay in NeMo Run and NeMo RL documentation linked from each step `step.toml` reference block. + +## Related Reading + +- [Getting Started](/../getting-started) + +- [Nemotron CLI Overview](/../../nemotron/cli) diff --git a/docs/fern/pages-vnightly/train-models/how-to/index.mdx b/docs/fern/pages-vnightly/train-models/how-to/index.mdx new file mode 100644 index 000000000..9664b3d60 --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/how-to/index.mdx @@ -0,0 +1,90 @@ +--- +title: "Model Training How-To Guides" +slug: "train-models/how-to/index.html" +description: "This section provides task-focused guides for common training workflows. For your first run, start with Getting Started with Training Steps." +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + SPDX-License-Identifier: Apache-2.0 */} + + + +This section provides task-focused guides for common training workflows. +For your first run, start with [Getting Started with Training Steps](/../getting-started). + +If you are new to fine-tuning concepts, read [Training Concepts](/../explanation/index) for definitions of fine-tuning approaches, data formats, and checkpoints before working through these tasks. + + + +Configure `tiny.yaml` for your own JSONL data, run the step, verify the checkpoint output, and resolve common issues. + +--- + +30 min beginner + + + + +Pick between `sft/automodel` and `sft/megatron_bridge` based on checkpoint format and scale. + +--- + +intermediate + + + + +Pick between `peft/automodel` and `peft/megatron_bridge` based on base checkpoint format and data path. + +--- + +intermediate + + + + +Pick between DPO, RLVR, and RLHF based on how the reward signal enters training. + +--- + +intermediate + + + + +Apply quantization, pruning, or distillation with Model Optimizer after a trained model passes your quality bar. + +--- + +intermediate + + + + +Configure NeMo Run environment profiles for local, Slurm, and Lepton execution. + +--- + +intermediate + + + + +Understand the JSONL, Parquet, and checkpoint types that training steps declare in `step.toml`. + +--- + +intermediate + + + + +Run a conversion step when one step produces a checkpoint layout that the next step cannot consume directly. + +--- + +intermediate + + + + diff --git a/docs/fern/pages-vnightly/train-models/how-to/run-optimization.mdx b/docs/fern/pages-vnightly/train-models/how-to/run-optimization.mdx new file mode 100644 index 000000000..86c3b353d --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/how-to/run-optimization.mdx @@ -0,0 +1,51 @@ +--- +title: "Run Post-Training Optimization" +slug: "train-models/how-to/run-optimization.html" +description: "Optimization steps apply NVIDIA Model Optimizer flows after you have a trained model that is worth compressing. Run them only on checkpoints that already passed your quality bar." +--- + +Optimization steps apply NVIDIA Model Optimizer flows after you have a trained model that is worth compressing. Run them only on checkpoints that already passed your quality bar. + +## Steps + +| Step id | Purpose | Typical input | Output | +| --- | --- | --- | --- | +| optimize/modelopt/quantize | Post-training quantization | checkpoint_hf | checkpoint_megatron | +| optimize/modelopt/prune | Structured pruning | checkpoint_hf | checkpoint_hf | +| optimize/modelopt/distill | Teacher-student recovery | Teacher and student checkpoint_hf, optional binidx | checkpoint_megatron | + +## Decision Flow + +1. If you only need a smaller numeric type for inference, start with `optimize/modelopt/quantize`. Pick a quantization recipe that matches your hardware. FP8 suits Hopper. NVFP4 suits Blackwell. Read `step.toml` for parameter names and allowed values. + +2. If you need a smaller architecture, use `optimize/modelopt/prune`. + +3. If quality drops after compression, use `optimize/modelopt/distill` with a full-precision teacher while the student matches the compressed artifact. + +4. Do not run optimization on unmerged adapters. When the source was parameter-efficient fine tuning (PEFT) with low-rank adaptation (LoRA), merge LoRA into a base checkpoint first. + +## Order of Operations + +Distillation after pruning is the usual recovery order when both apply. Quantization is largely independent. Quantization still needs a benchmark before and after you run it. + +## Sample Commands + +```console +$ uv run nemotron steps run optimize/modelopt/quantize -c tiny +$ uv run nemotron steps run optimize/modelopt/prune -c tiny +$ uv run nemotron steps run optimize/modelopt/distill -c tiny +``` + +Tiny runs and mock-data runs validate end-to-end execution only. Judge final quality on full calibration or distillation data. + +## Success Criteria + +- You keep the original high-precision checkpoint and its evaluation baseline. + +- Post-optimization evaluation uses the same benchmark suite as pre-optimization evaluation. + +## Related Reading + +- [Optimization Steps Reference](/../reference/optimize/index) + +- [Artifact Graph](/../explanation/artifact-graph) diff --git a/docs/fern/pages-vnightly/train-models/how-to/run-sft-automodel.mdx b/docs/fern/pages-vnightly/train-models/how-to/run-sft-automodel.mdx new file mode 100644 index 000000000..50ca1acae --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/how-to/run-sft-automodel.mdx @@ -0,0 +1,90 @@ +--- +title: "Run SFT with AutoModel on Custom Data" +slug: "train-models/how-to/run-sft-automodel.html" +description: "This guide walks through configuring and running the sft/automodel step with your own instruction data. The step trains models in a Hugging Face checkpoint layout from OpenAI chat-formatted JSON Lines" +--- + +{/* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +SPDX-License-Identifier: Apache-2.0 + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */} + +This guide walks through configuring and running the `sft/automodel` step with your own instruction data. +The step trains models in a Hugging Face checkpoint layout from OpenAI chat-formatted JSON Lines (JSONL). + +Before following this guide, complete [Getting Started with Training Steps](/../getting-started) to verify your environment profile and confirm that the sample job runs to completion. + +## Prerequisites + +- A completed `env.toml` at the repository root with a training profile such as `lepton_sft_automodel`. +See [Getting Started with Training Steps](/../getting-started) for the environment snippet and how to generate the full profile file. + +- `HF_TOKEN`, `WANDB_API_KEY`, and `NVIDIA_API_KEY` exported in your shell. + +- Instruction data in JSONL form where each record includes a `messages` field in OpenAI chat format. + +- A Hugging Face access token if the base model is gated or must be downloaded from the Hugging Face Hub. + +- Enough GPU memory for the model you select. +Verify memory requirements before scaling beyond a tiny configuration. + +## Configure the Step + +1. Open `src/nemotron/steps/sft/automodel/config/tiny.yaml`. +The checked-in defaults pull small public data slices from the Hugging Face Hub. +Replace the `dataset` and `model` fields with your paths and model identifier. + +2. Align the tokenizer and chat template with how your JSONL was built. +The step applies the tokenizer at training time, so a mismatch between the template used during data preparation and the template applied here causes silent quality degradation or a hard failure at startup. +See [Data and Checkpoint Formats](/data-and-checkpoint-formats) for the canonical field names the step expects. + +## Run the Step + +Submit the step against your environment profile: + +```console +$ uv run nemotron steps run sft/automodel -c tiny -r lepton_sft_automodel +``` + +Replace `lepton_sft_automodel` with the profile name from your `env.toml` when your team uses a different table key. +See [Execution through NeMo Run](/../../nemo_runspec/nemo-run) for profile setup and scheduler behavior. + +## Verify Output + +The step manifest declares a `checkpoint_hf` artifact on success. +Confirm the output directory you set in the training configuration contains checkpoints, and that logs show stable loss for the duration of the run. + +To inspect what the step produces, run: + +```console +$ uv run nemotron steps show sft/automodel +``` + +The `produces` block lists `checkpoint_hf` and the path it writes to. + +## Common Issues + +- When you encounter CUDA out-of-memory errors, reduce batch sizes in YAML or switch to a smaller base model. + +- When the trainer reports a missing chat template, pick a tokenizer that defines a template or convert your data to a format the trainer accepts. +The `step.toml` file lists `[[errors]]` entries such as `chat_template_missing` with recovery hints. + +- When you need to checkpoint to a specific directory, set `SFT_OUTPUT_DIR` in your shell before running or pass the `checkpoint.checkpoint_dir` override on the command line. + +## Next Steps + +- Read [Choose an SFT Backend](/choose-sft-backend) when you need Megatron Bridge and packed Parquet instead of AutoModel and JSONL. + +- Read [Data and Checkpoint Formats](/data-and-checkpoint-formats) to understand how JSONL and checkpoints chain with other steps. + +- Read [Convert Checkpoints Between Training Steps](/convert-checkpoints) when the next step in your pipeline requires a different checkpoint layout. diff --git a/docs/fern/pages-vnightly/train-models/index.mdx b/docs/fern/pages-vnightly/train-models/index.mdx new file mode 100644 index 000000000..7a609f91f --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/index.mdx @@ -0,0 +1,103 @@ +--- +title: "Model Training with Nemotron Steps" +slug: "train-models/index.html" +description: "This section documents how to run supervised fine-tuning (SFT), parameter-efficient fine-tuning (PEFT), reinforcement learning (RL) alignment, and post-training optimization with Nemotron steps. Each " +--- + +This section documents how to run supervised fine-tuning (SFT), parameter-efficient fine-tuning (PEFT), reinforcement learning (RL) alignment, and post-training optimization with Nemotron *steps*. +Each step packages a training approach, configuration files, and entry logic that you invoke through the `nemotron steps` CLI. +For the definitions of *step*, *configuration*, and *environment profile* that apply across every domain, see [Nemotron Steps Basics](/../steps/basics). +If you are new to fine-tuning, start with [Training Basics](/explanation/basics), which defines the training-specific terms the rest of this section uses. + +## Capabilities at a Glance + +| Area | Step Names | Role | +| --- | --- | --- | +| SFT | sft/automodel, sft/megatron_bridge | Supervised fine tuning from chat-formatted JSON Lines (JSONL) or packed Apache Parquet | +| PEFT | peft/automodel, peft/megatron_bridge | Adapter training with a smaller trainable surface | +| RL | rl/nemo_rl/dpo, rl/nemo_rl/rlvr, rl/nemo_rl/rlhf | Alignment after a supervised fine tuning (SFT) policy exists | +| Optimize | optimize/modelopt/quantize, optimize/modelopt/prune, optimize/modelopt/distill | Compression and quality recovery | + +## Limitations and Restrictions + +The Nemotron steps for data preparation and model training do not support local training, such as on a developer workstation. + +These steps require access to at least two nodes, each equipped with 8 x NVIDIA A100 80 GB or better GPUs. +These steps support the following environments: + +- Slurm + +- NVIDIA DGX Cloud Lepton + +- NVIDIA Run:ai + +For assistance with configuring access to one of the supported computing environments, refer to [Env Profile Generator](/reference/env-profile-generator) or run the `nemotron-env-toml` skill with your agent. + +## Learning Path + + + +This page defines supervised fine-tuning, parameter-efficient fine-tuning, reinforcement learning alignment, quantization, tokenizers, the chat dataset format, and checkpoints. + +--- + +`Beginner Level` + + + + +This guide covers installation expectations, the environment profile, and how to run your first sample job with the `tiny` configuration. + +--- + +`Beginner` + + + + +These guides are task-focused. They explain how to pick a backend, wire data, and run optimization steps. + +--- + +`Intermediate` + + + + +This material explains the basics, the artifact graph, and how the training libraries differ. + +--- + +`Concepts` + + + + +This material is for lookup. It lists the step catalog, parameters, and configuration conventions. + +--- + +`Lookup` + + + + +Use the customize skill with a YAML-first plan: repo steps, then configs, then code only for gaps. + +--- + +`Workflow` + + + + + +## Quick Links + +- [Model Training with Agents](/using-skill) describes how to work with the `nemotron-customize` skill for multi-stage training plans and YAML-first deliverables. + +- [Getting Started](/getting-started) describes how to verify the CLI and run a tiny configuration. + +- [Execution through NeMo Run](/../nemo_runspec/nemo-run) describes profiles, attached and detached runs, and clusters. + +- [Nemotron CLI Overview](/../nemotron/cli) describes how the wider CLI relates to configuration and overrides. diff --git a/docs/fern/pages-vnightly/train-models/reference/cli-reference.mdx b/docs/fern/pages-vnightly/train-models/reference/cli-reference.mdx new file mode 100644 index 000000000..9b48e15fa --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/reference/cli-reference.mdx @@ -0,0 +1,293 @@ +--- +title: "Nemotron Steps CLI Reference" +slug: "train-models/reference/cli-reference.html" +description: "This page documents the nemotron steps command group, the entry point for discovering, inspecting, and running every supervised fine-tuning (SFT), parameter-efficient fine-tuning (PEFT), reinforcement" +--- + +This page documents the `nemotron steps` command group, the entry point for discovering, inspecting, and running every supervised fine-tuning (SFT), parameter-efficient fine-tuning (PEFT), reinforcement learning (RL), and optimization step packaged under `src/nemotron/steps/`. + +The command group is registered by the Nemotron CLI and exposes three subcommands: + +- `nemotron steps list` enumerates discovered steps with optional filters. + +- `nemotron steps show ` prints the manifest, runspec, and parameters for one step. + +- `nemotron steps run ` compiles a configuration, selects an executor, and submits a job. + +Each subcommand resolves a step by its identifier, such as `sft/automodel` or `rl/nemo_rl/dpo`. +The [Step Catalog](/step-catalog) lists every identifier. + +## Syntax + +The `run` subcommand accepts a step identifier, a configuration name or path, an execution mode, and any number of trailing overrides: + +```bash +nemotron steps run \ \ + [-c \] \ + [-r \ | -b \] \ + [-d] \ + [--force-squash] \ + [\...] \ + [\...] +``` + +The `list` and `show` subcommands take only options and an optional step identifier: + +```bash +nemotron steps list [--category \] [--consumes \] [--produces \] [--json] + +nemotron steps show \ [--json] +``` + +## Required Arguments + +### `` + +The step identifier under `src/nemotron/steps/`, such as `sft/automodel`, `peft/megatron_bridge`, `rl/nemo_rl/dpo`, or `optimize/modelopt/quantize`. + +This argument is positional and required for `nemotron steps run` and `nemotron steps show`. + +Example: `nemotron steps run sft/automodel` + +## Optional Arguments + +The following options apply to `nemotron steps run`. +Pass them between the subcommand and any trailing overrides. + +--- + +### `-c, --config ` + +The configuration to compile for the run. +Bare names resolve to `config/.yaml` inside the step directory. +A relative or absolute path resolves directly to that file. + +Default: the configuration declared as `[config] default` in the stepтАЩs runspec, typically `default`. + +Example: `-c tiny` resolves to `src/nemotron/steps/sft/automodel/config/tiny.yaml`. + +--- + +### `-r, --run ` + +The environment profile to attach to for synchronous execution. +The profile name must match a top-level `[]` table in the active `env.toml` file. +The CLI streams logs to your terminal until the job finishes. + +This option is mutually exclusive with `--batch`. + +Example: `-r lepton_sft_automodel` + +--- + +### `-b, --batch ` + +The environment profile to submit to for detached execution. +The profile name must match a top-level `[]` table in the active `env.toml` file. +The CLI returns once the job is submitted. + +This option is mutually exclusive with `--run`. + +Example: `-b slurm_prod` + +--- + +### `-d, --dry-run` + +Compile and print the merged configuration as a rich table, then exit without submitting the job. +Use this option to validate overrides before you commit GPU time. + +Default: disabled. + +--- + +### `--force-squash` + +Force re-creation of the squashed container image used by remote executors even when a cached image already exists. +Use this option after you change the container image referenced in your environment profile. + +Default: disabled. + +The `list` subcommand has its own option set. + +--- + +### `--category ` + +Restrict the output to one step category, such as `sft`, `peft`, `rl`, or `optimize`. + +Example: `--category sft` + +--- + +### `--consumes ` + +Restrict the output to steps that declare a `[[consumes]]` entry of the given artifact type, such as `training_jsonl`, `packed_parquet`, `checkpoint_hf`, or `checkpoint_megatron`. + +Example: `--consumes training_jsonl` + +--- + +### `--produces ` + +Restrict the output to steps that declare a `[[produces]]` entry of the given artifact type. + +Example: `--produces checkpoint_megatron` + +--- + +### `--json` + +Emit machine-readable JSON instead of the human-formatted table. +Use this option from agents or shell pipelines. + +Default: disabled. + +## Configuration Overrides + +Any token after the options that contains an equals sign and does not start with a hyphen is treated as a *dotlist override* and merged into the compiled configuration. +Any other token is preserved as a *passthrough argument* for the stepтАЩs underlying script. +The split is performed by `nemo_runspec.cli_context.split_unknown_args`. + +--- + +### `=` + +```python +.= +``` + +A dotlist override that sets a nested key in the compiled YAML configuration. +Use dotted paths to reach nested structures, the same way OmegaConf interprets them. + +Examples: + +- `step_scheduler.max_steps=10` + +- `model.pretrained_model_name_or_path=mistralai/Mistral-7B-Instruct-v0.3` + +- `args.export_quant_cfg=fp8` + +--- + +### `` + +Any token that does not match a known option and does not contain an equals sign is forwarded verbatim to the stepтАЩs underlying script. +The script applies the token only when its stripped name, with dashes converted to underscores, matches a top-level field in the compiled configuration. +Tokens that do not map to a top-level field are silently ignored, so most parameters are set through dotlist overrides instead. + +## Configuration Resolution + +The CLI resolves `--config` in the following order: + +1. If the value is an absolute or relative file path that exists, the CLI loads that file. + +2. Otherwise the CLI treats the value as a bare name and looks for `config/.yaml` inside the step directory. + +3. If `--config` is omitted, the CLI uses the runspec default declared in the stepтАЩs `step.py`. + +Each step ships at minimum a `config/default.yaml` file for production-shape runs and a `config/tiny.yaml` file for short validation. +Some steps ship additional variants, such as `config/fp8.yaml` for `optimize/modelopt/quantize` and `config/nemo_gym.yaml` for `rl/nemo_rl/rlvr`. +The per-step pages list every config file. + +## Environment Profile and Executor Selection + +The `--run` and `--batch` options select a profile from an `env.toml` file. +The file is found by the following rules: + +1. If the `NEMOTRON_ENV_FILE` environment variable is set, the CLI uses that path. + +2. Otherwise the CLI walks upward from the current directory until it finds a file named `env.toml`, stopping at the project root that contains `pyproject.toml`. + +Each profile is a top-level TOML table. +The tableтАЩs `executor` field selects `local`, `slurm`, or `lepton` execution. +The remaining fields configure the container image, mounts, resources, and environment variables for that executor. +Refer to [Environment and Executors](/../how-to/env-and-executors) for the full schema. + +If you omit both `--run` and `--batch`, the CLI submits the step on the local backend. +Remote execution requires `-r` or `-b` together with a profile that exists in the active `env.toml` file. + +## Command Examples + +Compile and validate the configuration without submitting the job: + +```console +$ nemotron steps run sft/automodel -c tiny --dry-run +``` + +Submit an attached run on a Lepton profile, override the step count, and override the base model: + +```console +$ nemotron steps run sft/automodel -c default -r lepton_sft_automodel \ + step_scheduler.max_steps=100 \ + model.pretrained_model_name_or_path=mistralai/Mistral-7B-Instruct-v0.3 +``` + +Submit a detached run on a Slurm profile and enable the mock-data path through a dotlist override: + +```console +$ nemotron steps run optimize/modelopt/distill -c tiny -b slurm_optimize_modelopt_distill args.use_mock_data=true +``` + +Filter the catalog for steps that consume preference data: + +```console +$ nemotron steps list --consumes training_jsonl --category rl +``` + +Print the manifest for one step as JSON for agent consumption: + +```console +$ nemotron steps show sft/automodel --json +``` + +## Per-Category References + + + +The `sft/automodel` and `sft/megatron_bridge` references. + +--- + +reference + + + + +The `peft/automodel` and `peft/megatron_bridge` references. + +--- + +reference + + + + +The `rl/nemo_rl/dpo`, `rl/nemo_rl/rlvr`, and `rl/nemo_rl/rlhf` references. + +--- + +reference + + + + +The `optimize/modelopt/quantize`, `optimize/modelopt/prune`, and `optimize/modelopt/distill` references. + +--- + +reference + + + + + +## Related Documentation + +- [Step Catalog](/step-catalog) lists every step identifier and its manifest path. + +- [Configuration Conventions](/config-conventions) explains the per-step `config/` layout, dotlist override rules, and the relationship to environment profiles. + +- [Environment and Executors](/../how-to/env-and-executors) explains the `env.toml` schema and profile selection. + +- [Execution Through NeMo Run](/../../nemo_runspec/nemo-run) explains attached and detached execution, image squashing, and remote job directories. diff --git a/docs/fern/pages-vnightly/train-models/reference/config-conventions.mdx b/docs/fern/pages-vnightly/train-models/reference/config-conventions.mdx new file mode 100644 index 000000000..7b25d7915 --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/reference/config-conventions.mdx @@ -0,0 +1,97 @@ +--- +title: "Configuration Conventions" +slug: "train-models/reference/config-conventions.html" +description: "This page describes the per-step configuration layout, the rules the CLI uses to resolve a configuration name, and the rules it uses to merge command-line overrides. The conventions apply to every ste" +--- + +This page describes the per-step configuration layout, the rules the CLI uses to resolve a configuration name, and the rules it uses to merge command-line overrides. +The conventions apply to every step registered under `src/nemotron/steps/`. + +Each step ships its manifest, configuration files, and entry script next to each other on disk. +The manifest, `step.toml`, remains authoritative for parameters, consumed and produced artifacts, supported models, and operator strategies. + +## Per-Step Directory Layout + +For a step directory `src/nemotron/steps///`, expect the following files. + +| File | Purpose | +| --- | --- | +| step.toml | Manifest with the identifier, human-readable title, tags, [[consumes]] blocks, [[produces]] blocks, [[parameters]] blocks, optional [[strategies]], optional [[errors]], and optional [[models]] blocks. | +| step.py | Entry script that the CLI invokes after configuration compilation. The script also declares the NeMo Run specification. | +| config/default.yaml | Primary configuration tuned for production-shape runs. | +| config/tiny.yaml | Reduced configuration for short validation runs. | +| config/<variant>.yaml | Optional configuration variants. Examples include config/fp8.yaml and config/nvfp4.yaml for optimize/modelopt/quantize, and config/nemo_gym.yaml for rl/nemo_rl/rlvr. | + +The per-step reference pages list every configuration file that the step ships. + +## Configuration Resolution + +The CLI resolves the `-c` and `--config` value in the following order. + +1. When the value is an absolute or relative file path that exists on disk, the CLI loads that file directly. + +2. Otherwise the CLI treats the value as a bare name and looks for `config/.yaml` inside the step directory. + +3. When the value is omitted, the CLI uses the runspec default declared in the stepтАЩs `step.py`, typically `default`. + +The following command resolves the bare name `tiny` to `src/nemotron/steps/sft/automodel/config/tiny.yaml`: + +```console +$ nemotron steps run sft/automodel -c tiny +``` + +The following command loads an explicit path: + +```console +$ nemotron steps run sft/automodel -c /lustre/configs/qwen-sft.yaml +``` + +## Dotlist Overrides + +Any trailing argument that contains an equals sign and does not start with a hyphen is treated as a *dotlist override*. +The CLI merges dotlist overrides into the compiled YAML configuration by using OmegaConf semantics, so dotted paths reach nested structures. + +```console +$ nemotron steps run sft/automodel -c default \ + step_scheduler.max_steps=200 \ + model.pretrained_model_name_or_path=meta-llama/Llama-3.1-8B-Instruct +``` + +The override syntax follows the rules in `nemo_runspec.cli_context.split_unknown_args`. +Refer to the [Nemotron Steps CLI Reference](/cli-reference) for the full syntax and additional examples. + +## Passthrough Arguments + +Any trailing token that does not match a known option and does not contain an equals sign is preserved as a *passthrough argument* and forwarded to the stepтАЩs entry script. +The script applies the token only when its stripped name, with dashes converted to underscores, matches a top-level field in the compiled configuration. +Tokens that do not map to a top-level field are silently ignored, so most parameters are better set through dotlist overrides. + +## Environment Variables in Configurations + +Configuration files use the OmegaConf `$\{oc.env:NAME,default\}` resolver to read environment variables at compile time. +The default configurations rely on the following environment variables. + +| Variable | Used By | Purpose | +| --- | --- | --- | +| SFT_OUTPUT_DIR | sft/automodel | Destination directory for SFT checkpoints. Defaults to ./output/automodel-tiny. | +| SFT_PACKED_DIR | sft/megatron_bridge, peft/megatron_bridge | Source directory for packed Parquet shards produced by data_prep/sft_packing. | +| RL_POLICY_MODEL | rl/nemo_rl/dpo, rl/nemo_rl/rlhf, rl/nemo_rl/rlvr | Hugging Face identifier or local path for the policy. Defaults to meta-llama/Llama-3.2-1B-Instruct. | +| WANDB_NAME | All training steps | Weights and Biases run name. | +| NEMO_RUN_DIR | optimize/modelopt/* | Output root used to derive default destination paths. | + +Set these variables in your shell, in the environment profile, or in an executor `env` block, depending on whether the run is local or remote. + +## Environment Profiles + +Per-cluster environment variables, container images, and startup commands live in `env.toml` at the repository root, not in per-step YAML files. +The active profile is selected with `--run` or `--batch`, and the file is found by the rules described in the [Nemotron Steps CLI Reference](/cli-reference). + +## Related Documentation + +- [Getting Started With Training Steps](/../getting-started) walks through a first run. + +- [Nemotron Steps CLI Reference](/cli-reference) covers `list`, `show`, and `run` syntax. + +- [Step Catalog](/step-catalog) lists every step identifier and its manifest path. + +- [Execution Through NeMo Run](/../../nemo_runspec/nemo-run) explains profiles, attached and detached execution, and clusters. diff --git a/docs/fern/pages-vnightly/train-models/reference/convert/hf-to-megatron.mdx b/docs/fern/pages-vnightly/train-models/reference/convert/hf-to-megatron.mdx new file mode 100644 index 000000000..08ab89bad --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/reference/convert/hf-to-megatron.mdx @@ -0,0 +1,109 @@ +--- +title: "convert/hf_to_megatron" +slug: "train-models/reference/convert/hf-to-megatron.html" +description: "This step converts a Hugging Face checkpoint or model id into Megatron distributed checkpoint layout. Use it when a downstream Megatron-Bridge step expects checkpoint_megatron but the upstream artifac" +--- + +This step converts a Hugging Face checkpoint or model id into Megatron distributed checkpoint layout. +Use it when a downstream Megatron-Bridge step expects `checkpoint_megatron` but the upstream artifact is `checkpoint_hf`. + +## Syntax + +```bash +nemotron steps run convert/hf_to_megatron \ + [-c \] \ + [-r \ | -b \] \ + [-d] \ + [\...] +``` + +Refer to the [Nemotron Steps CLI Reference](/../cli-reference) for the shared flag set. + +## Configuration Files + +The step ships `config/default.yaml` under `src/nemotron/steps/convert/hf_to_megatron/config/`. +The default source model is `nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16`, and the default output path is derived from `CONVERT_OUTPUT_DIR`, `NEMO_RUN_DIR`, or `./output/convert`. + +## Inputs and Outputs + +| Direction | Artifact Type | Required | Description | +| --- | --- | --- | --- | +| Consumes | checkpoint_hf | Yes | A clean Hugging Face checkpoint directory or model id. | +| Produces | checkpoint_megatron | - | A Megatron distributed checkpoint directory. | + +## Parameters + +### `hf_model_id=` + +Hugging Face model id or local checkpoint path to import. +Use a clean model directory, not trainer logs, optimizer state, or adapter-only output. + +Example: `hf_model_id=nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16` + +--- + +### `megatron_path=` + +Output directory for the Megatron distributed checkpoint. +Keep this path separate from the Hugging Face source path. + +Example: `megatron_path=/lustre/output/convert/nano3-megatron` + +--- + +### `dtype=` + +Torch dtype used during import. +Typical NVIDIA Nemotron checkpoints use `bfloat16`. + +Choices: `bfloat16`, `float16`, `float32`. +Default: `bfloat16`. + +--- + +### `device_map=` + +Optional Transformers `device_map` forwarded during Hugging Face model loading, such as `auto` or `cuda:0`. +Leave unset unless the conversion host requires explicit placement. + +--- + +### `trust_remote_code=` + +Whether to trust Hugging Face custom model code when AutoBridge loads the source model configuration. + +Default: `true`. + +## Command Examples + +Convert the default NVIDIA Nemotron base model into a local Megatron output directory: + +```console +$ nemotron steps run convert/hf_to_megatron -c default \ + hf_model_id=nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16 \ + megatron_path=./output/convert/nano3-megatron +``` + +Submit the conversion through a generated Lepton profile: + +```console +$ nemotron steps run convert/hf_to_megatron -c default --batch lepton_convert_model \ + hf_model_id=nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16 \ + megatron_path=/mnt/lustre-shared/output/convert/nano3-megatron +``` + +## Recovery Notes + +- If the source came from LoRA training, merge the adapter into the original base first with `convert/merge_lora`. + +- If tokenizer or model config files are missing, use the original Hugging Face model id as `hf_model_id`. + +- If conversion fails, retry into a fresh `megatron_path` instead of reusing a partially written directory. + +## Related Documentation + +- [Convert Checkpoints Between Training Steps](/../../how-to/convert-checkpoints) + +- [convert/merge_lora](/merge-lora) + +- [Megatron-Bridge Documentation](https://docs.nvidia.com/nemo/megatron-bridge/latest/) diff --git a/docs/fern/pages-vnightly/train-models/reference/convert/index.mdx b/docs/fern/pages-vnightly/train-models/reference/convert/index.mdx new file mode 100644 index 000000000..0603c191b --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/reference/convert/index.mdx @@ -0,0 +1,48 @@ +--- +title: "Checkpoint Conversion Steps" +slug: "train-models/reference/convert/index.html" +description: "This section documents the conversion steps registered under src/nemotron/steps/convert/. Use these steps to bridge checkpoint layouts between Hugging Face, Megatron distributed checkpoints, and LoRA " +--- + +This section documents the conversion steps registered under `src/nemotron/steps/convert/`. +Use these steps to bridge checkpoint layouts between Hugging Face, Megatron distributed checkpoints, and LoRA adapter outputs. + +## Steps + + + +Import a Hugging Face checkpoint or model id into Megatron distributed checkpoint layout. + +--- + +reference + + + + +Export a Megatron distributed checkpoint iteration into Hugging Face safetensors layout. + +--- + +reference + + + + +Merge a LoRA adapter with its original base checkpoint to produce a standalone checkpoint. + +--- + +reference + + + + + +## Related Documentation + +- [Convert Checkpoints Between Training Steps](/../../how-to/convert-checkpoints) + +- [Data and Checkpoint Formats](/../../how-to/data-and-checkpoint-formats) + +- [Step Catalog](/../step-catalog) diff --git a/docs/fern/pages-vnightly/train-models/reference/convert/megatron-to-hf.mdx b/docs/fern/pages-vnightly/train-models/reference/convert/megatron-to-hf.mdx new file mode 100644 index 000000000..806d79cbe --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/reference/convert/megatron-to-hf.mdx @@ -0,0 +1,117 @@ +--- +title: "convert/megatron_to_hf" +slug: "train-models/reference/convert/megatron-to-hf.html" +description: "This step converts a Megatron distributed checkpoint into Hugging Face safetensors layout. Use it when a downstream Hugging Face-native consumer expects checkpoint_hf but the upstream artifact is chec" +--- + +This step converts a Megatron distributed checkpoint into Hugging Face safetensors layout. +Use it when a downstream Hugging Face-native consumer expects `checkpoint_hf` but the upstream artifact is `checkpoint_megatron`. + +## Syntax + +```bash +nemotron steps run convert/megatron_to_hf \ + [-c \] \ + [-r \ | -b \] \ + [-d] \ + [\...] +``` + +Refer to the [Nemotron Steps CLI Reference](/../cli-reference) for the shared flag set. + +## Configuration Files + +The step ships `config/default.yaml` under `src/nemotron/steps/convert/megatron_to_hf/config/`. +The default `hf_model_id` is `nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16`, and `megatron_path` must be supplied for real runs. + +## Inputs and Outputs + +| Direction | Artifact Type | Required | Description | +| --- | --- | --- | --- | +| Consumes | checkpoint_megatron | Yes | A specific Megatron checkpoint directory, normally an iter_* directory. | +| Produces | checkpoint_hf | - | A Hugging Face safetensors checkpoint directory. | + +## Parameters + +### `megatron_path=` + +Specific Megatron checkpoint directory to export. +Point this at the concrete checkpoint iteration, not the parent training run folder. + +Example: `megatron_path=/lustre/runs/sft/checkpoints/iter_0000100` + +--- + +### `hf_model_id=` + +Hugging Face model id or config source used by AutoBridge to reconstruct the Hugging Face architecture and tokenizer expectations. + +Example: `hf_model_id=nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16` + +--- + +### `hf_path=` + +Output directory for the exported Hugging Face safetensors checkpoint. + +Example: `hf_path=/lustre/output/convert/sft-hf` + +--- + +### `trust_remote_code=` + +Whether to trust custom Hugging Face model code while reconstructing the export target. + +Default: `true`. + +--- + +### `show_progress=` + +Whether to show Megatron-Bridge export progress output. + +Default: `true`. + +--- + +### `strict=` + +Whether Megatron-Bridge should require source and target checkpoint keys to match strictly. + +Default: `true`. + +## Command Examples + +Export a validated Megatron checkpoint iteration to Hugging Face layout: + +```console +$ nemotron steps run convert/megatron_to_hf -c default \ + megatron_path=/path/to/megatron/iter_0000100 \ + hf_model_id=nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16 \ + hf_path=./output/convert/sft-hf +``` + +Submit the export through a generated Lepton profile: + +```console +$ nemotron steps run convert/megatron_to_hf -c default --batch lepton_convert_model \ + megatron_path=/mnt/lustre-shared/output/sft/megatron_bridge/iter_0000100 \ + hf_model_id=nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16 \ + hf_path=/mnt/lustre-shared/output/convert/sft-hf +``` + +## Recovery Notes + +- If export fails because the checkpoint is incomplete, wait for async checkpoint save to finish and retry from a complete `iter_*` directory. + +- If tokenizer or config reconstruction fails, set `hf_model_id` to the original base model or config source. + +- Validate the exported Hugging Face checkpoint with a small generation or evaluation job before deployment. + +## Related Documentation + +- [Convert Checkpoints Between Training Steps](/../../how-to/convert-checkpoints) + +- [Data and Checkpoint Formats](/../../how-to/data-and-checkpoint-formats) + +- [Megatron-Bridge Documentation](https://docs.nvidia.com/nemo/megatron-bridge/latest/) diff --git a/docs/fern/pages-vnightly/train-models/reference/convert/merge-lora.mdx b/docs/fern/pages-vnightly/train-models/reference/convert/merge-lora.mdx new file mode 100644 index 000000000..8c9f9ddf5 --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/reference/convert/merge-lora.mdx @@ -0,0 +1,158 @@ +--- +title: "convert/merge_lora" +slug: "train-models/reference/convert/merge-lora.html" +description: "This step merges a LoRA adapter with its original base checkpoint. Use it when a downstream consumer needs a standalone checkpoint instead of an adapter plus base model pair." +--- + +This step merges a LoRA adapter with its original base checkpoint. +Use it when a downstream consumer needs a standalone checkpoint instead of an adapter plus base model pair. + +## Syntax + +```bash +nemotron steps run convert/merge_lora \ + [-c \] \ + [-r \ | -b \] \ + [-d] \ + [\...] +``` + +Refer to the [Nemotron Steps CLI Reference](/../cli-reference) for the shared flag set. + +## Configuration Files + +The step ships `config/default.yaml` under `src/nemotron/steps/convert/merge_lora/config/`. +The default `backend` is `auto`. +When `base_megatron_path` is set, `auto` selects the Megatron-Bridge merge path. +Otherwise, `auto` selects the Hugging Face PEFT merge path. + +## Inputs and Outputs + +| Direction | Artifact Type | Required | Description | +| --- | --- | --- | --- | +| Consumes | checkpoint_lora | Yes | LoRA adapter weights from a PEFT step. | +| Consumes | checkpoint_hf | Yes for hf_peft | Original Hugging Face base checkpoint or model/config source. | +| Consumes | checkpoint_megatron | Required for megatron_bridge | Original dense Megatron checkpoint for Megatron-Bridge adapter merge. | +| Produces | checkpoint_hf | - | Merged standalone Hugging Face checkpoint. | +| Produces | checkpoint_megatron | Optional | Merged Megatron checkpoint when backend=megatron_bridge. | + +## Parameters + +### `backend=` + +Adapter merge backend. +`auto` selects `megatron_bridge` when `base_megatron_path` is set, otherwise `hf_peft`. + +Default: `auto`. + +--- + +### `lora_checkpoint=` + +Adapter checkpoint path produced by a PEFT step. + +--- + +### `base_hf_path=` + +Original Hugging Face base checkpoint for `backend=hf_peft`, or Hugging Face config/model source for `backend=megatron_bridge`. +Do not substitute a different base. + +--- + +### `base_megatron_path=` + +Original dense Megatron checkpoint for `backend=megatron_bridge`. +Use the base checkpoint that the adapter was trained against. + +--- + +### `hf_model_id=` + +Hugging Face model id or path used to reconstruct architecture when exporting a Megatron-Bridge merge to Hugging Face layout. + +Example: `hf_model_id=nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16` + +--- + +### `output_hf_path=` + +Directory for the merged standalone Hugging Face checkpoint. + +--- + +### `output_megatron_path=` + +Directory for the merged Megatron checkpoint when `backend=megatron_bridge`. + +--- + +### `cpu=` + +Merge on CPU when GPU memory is tight or when running outside a training container. + +Default: `true`. + +--- + +### `tp=` + +Tensor parallel size for Megatron-Bridge merge. + +Default: `1`. + +--- + +### `pp=` + +Pipeline parallel size for Megatron-Bridge merge. + +Default: `1`. + +--- + +### `ep=` + +Expert parallel size for Megatron-Bridge merge. + +Default: `1`. + +## Command Examples + +Merge an AutoModel PEFT adapter into its original Hugging Face base: + +```console +$ nemotron steps run convert/merge_lora -c default \ + backend=hf_peft \ + lora_checkpoint=/path/to/adapter_checkpoint \ + base_hf_path=/path/to/original_hf_base \ + output_hf_path=./output/convert/merged-hf +``` + +Merge a Megatron-Bridge PEFT adapter and export the merged result to Hugging Face layout: + +```console +$ nemotron steps run convert/merge_lora -c default --batch lepton_convert_model \ + backend=megatron_bridge \ + lora_checkpoint=/mnt/lustre-shared/output/peft/megatron_bridge/adapter \ + base_megatron_path=/mnt/lustre-shared/output/base/megatron \ + hf_model_id=nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16 \ + output_megatron_path=/mnt/lustre-shared/output/convert/merged-megatron \ + output_hf_path=/mnt/lustre-shared/output/convert/merged-hf +``` + +## Recovery Notes + +- If scores differ after merge, evaluate the adapter-loaded model and the merged checkpoint separately; do not assume they are identical. + +- If merge fails with missing keys or shape mismatch, verify the adapter was trained against the same base checkpoint. + +- Write outputs to a fresh directory so a failed merge cannot overwrite the base or adapter. + +## Related Documentation + +- [Choose a PEFT Backend](/../../how-to/choose-peft-backend) + +- [convert/hf_to_megatron](/hf-to-megatron) + +- [PEFT documentation](https://github.com/huggingface/peft) diff --git a/docs/fern/pages-vnightly/train-models/reference/env-profile-generator.mdx b/docs/fern/pages-vnightly/train-models/reference/env-profile-generator.mdx new file mode 100644 index 000000000..9e63ebb10 --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/reference/env-profile-generator.mdx @@ -0,0 +1,138 @@ +--- +title: "Env Profile Generator" +slug: "train-models/reference/env-profile-generator.html" +description: "The env/env_toml step generates the environment profile file that every other Nemotron training step reads when it submits a job to a cluster. The generator emits a single TomтАЩs Obvious Minimal Langua" +--- + +The `env/env_toml` step generates the *environment profile* file that every other Nemotron training step reads when it submits a job to a cluster. +The generator emits a single TomтАЩs Obvious Minimal Language (TOML) file with one named profile per step, including data preparation, supervised fine-tuning (SFT), parameter-efficient fine-tuning (PEFT), reinforcement learning (RL), pretraining, optimization, evaluation, synthetic data generation, translation, and curation profiles. +You typically run this step once, before you submit your first training job to a cluster, and you re-run it only when site values such as the node group, container image, or shared mount path change. + +## Syntax + +```bash +nemotron steps run env/env_toml -c \ [\=\ ...] +``` + +The CLI accepts the same dotlist override syntax used by every other step. +Refer to the [Nemotron Steps CLI Reference](/cli-reference) for the shared flag set. + +## Configuration Files + +The step ships three configuration files under `src/nemotron/steps/env/env_toml/config/`. + +| File | Cluster Shape | +| --- | --- | +| lepton.yaml | Targets a DGX Cloud Lepton workspace with node-group, fileset mount, and resource-shape placeholders that you override at the command line. | +| slurm.yaml | Targets a Slurm cluster reached over SSH, with host, account, partition, and Lustre mount placeholders. | +| dgxcloud.yaml | Targets a DGX Cloud Run:AI installation with project, department, and image-pull credential placeholders. | + +The default configuration is `lepton`. + +## Inputs and Outputs + +The step has no input artifact. +It produces one `env_toml` artifact, the generated environment profile file. + +The default `output_path` differs by configuration. + +| Configuration | Default output_path | +| --- | --- | +| lepton | env.lepton.toml | +| slurm | env.slurm.toml | +| dgxcloud | env.dgxcloud.toml | + +Override `output_path` to write the file somewhere other than the repository root, for example a per-cluster directory under your quality assurance workspace. + +## Parameters + +The step exposes three top-level parameters. +Pass each one as a dotlist override after the configuration name. + +### `output_path=` + +Where to write the generated environment profile file. +A relative path is resolved against the current working directory. +Keep this value at the repository root for normal use so the CLI can discover the file by walking upward from any subdirectory. + +Default: `env.lepton.toml`, `env.slurm.toml`, or `env.dgxcloud.toml`, taken from the selected configuration. + +Example: `output_path=env.toml` + +--- + +### `force=` + +Whether to overwrite `output_path` when a file already exists at that location. +Set this value to `true` when you re-run the generator with new site overrides and you want the existing file replaced. +Leave the value at the default when you want the existing file preserved so a stale invocation cannot clobber a hand-edited profile. + +Default: `false`. + +Example: `force=true` + +--- + +### `=` + +```python +sections..= +``` + +A dotlist override that reaches into one of the named profiles emitted by the generator and replaces a specific key. +Use this pattern to set site-specific values such as the node group, container image, mount path, or per-profile environment variables without editing the shipped configuration file. + +The dot path always begins with `sections`, then the profile name, then the key path inside that profile. +Nested keys, such as a single environment variable, append additional dot segments. + +Examples: + +- `sections.lepton_base.node_group=` replaces the node group on the base Lepton profile. + +- `sections.lepton_base.env_vars.WANDB_PROJECT=` sets the Weights and Biases project name for every profile that inherits from `lepton_base`. + +- `sections.slurm_base.account=` sets the Slurm account on the base Slurm profile. + +The shipped configurations declare additional document-level keys such as `preamble` and `checks` that drive the generator itself. +These keys behave identically to any other dotlist override, but most users only need the three parameters described above. + +## Examples + +Generate a default Lepton environment profile at the repository root and overwrite any existing file at that path. + +```console +$ nemotron steps run env/env_toml -c lepton output_path=env.toml force=true +``` + +The command writes a single `env.toml` file at the repository root with every canonical profile the Nemotron training steps expect, including data-prep, SFT, PEFT, RL, pretrain, optimize, evaluate, synthetic data generation, translation, and curation profiles. + +Generate a Lepton environment profile with site-specific node-group and Weights and Biases overrides. + +```console +$ nemotron steps run env/env_toml -c lepton \ + output_path=env.lepton.toml \ + force=true \ + sections.lepton_base.node_group=\ \ + sections.lepton_base.env_vars.WANDB_PROJECT=\ \ + sections.lepton_base.env_vars.WANDB_ENTITY=\ \ + sections.lepton_base.env_vars.WANDB_NAME=\ +``` + +Each `sections.lepton_base.*` override replaces the matching key on the `[lepton_base]` profile in the generated file. +Every child profile that extends `lepton_base`, for example `lepton_sft_automodel` and `lepton_prep_sft_packing`, inherits the new value through the profile inheritance chain. + +## Editing the Generated File + +The generated file is a normal TOML document. +You can hand-edit any profile after generation, for example to add a one-off mount path or to change a container image for a single profile. +When you need only a small slice of profiles or you want to start from a minimal hand-written file rather than the full set of canonical profiles, follow the manual template walkthrough in the [Quickstart](/../getting-started). + +## Related Documentation + +- [Quickstart](/../getting-started) + +- [Nemotron Steps CLI Reference](/cli-reference) + +- [Step Catalog](/step-catalog) + +- [Configuration Conventions](/config-conventions) diff --git a/docs/fern/pages-vnightly/train-models/reference/index.mdx b/docs/fern/pages-vnightly/train-models/reference/index.mdx new file mode 100644 index 000000000..f25c06469 --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/reference/index.mdx @@ -0,0 +1,107 @@ +--- +title: "Training Reference" +slug: "train-models/reference/index.html" +description: "This section provides lookup material for every supervised fine-tuning (SFT), parameter-efficient fine-tuning (PEFT), reinforcement learning (RL), and optimization step packaged under src/nemotron/ste" +--- + +This section provides lookup material for every supervised fine-tuning (SFT), parameter-efficient fine-tuning (PEFT), reinforcement learning (RL), and optimization step packaged under `src/nemotron/steps/`. +Use these pages to find the exact CLI syntax, configuration file layout, parameters, and configuration overrides for each step. + +## Reference Sections + + + +Shared command-line syntax, options, dotlist overrides, and passthrough arguments for the `nemotron steps` command group. + +--- + +lookup + + + + +The packaged `env/env_toml` step that generates the environment profile file every other training step consumes. + +--- + +setup + + + + +Every step identifier, manifest path, and per-step reference link. + +--- + +lookup + + + + +Per-step `config/` layout, CLI configuration resolution, dotlist override rules, and environment-variable expansion. + +--- + +lookup + + + + + +## Per-Category Step References + + + +The `sft/automodel` and `sft/megatron_bridge` references. + +--- + +reference + + + + +The `peft/automodel` and `peft/megatron_bridge` references. + +--- + +reference + + + + +The `rl/nemo_rl/dpo`, `rl/nemo_rl/rlvr`, and `rl/nemo_rl/rlhf` references. + +--- + +reference + + + + +The `optimize/modelopt/quantize`, `optimize/modelopt/prune`, and `optimize/modelopt/distill` references. + +--- + +reference + + + + +The `convert/hf_to_megatron`, `convert/megatron_to_hf`, and `convert/merge_lora` references. + +--- + +reference + + + + + +## Related Documentation + +- [Getting Started With Training Steps](/../getting-started) walks through a first run with the tiny configuration. + +- [Execution Through NeMo Run](/../../nemo_runspec/nemo-run) explains attached and detached execution, environment profiles, and remote job directories. + +- [How-To Guides](/../how-to/index) cover backend choice, data and checkpoint formats, and environment-and-executor setup. diff --git a/docs/fern/pages-vnightly/train-models/reference/optimize/distill.mdx b/docs/fern/pages-vnightly/train-models/reference/optimize/distill.mdx new file mode 100644 index 000000000..7faede923 --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/reference/optimize/distill.mdx @@ -0,0 +1,215 @@ +--- +title: "optimize/modelopt/distill" +slug: "train-models/reference/optimize/distill.html" +description: "This step runs teacher-student distillation by using NVIDIA Model Optimizer through NVIDIA Megatron-Bridge. The step can run as a standalone training job, or as a quality-recovery pass after pruning o" +--- + +This step runs teacher-student distillation by using NVIDIA Model Optimizer through NVIDIA Megatron-Bridge. +The step can run as a standalone training job, or as a quality-recovery pass after pruning or quantization. +Real-data runs consume Megatron `bin/idx` data produced by `data_prep/pretrain_prep`. +The step produces a distilled Megatron distributed checkpoint. + +## Syntax + +```bash +nemotron steps run optimize/modelopt/distill \ + [-c \] \ + [-r \ | -b \] \ + [-d] \ + [--force-squash] \ + [\...] \ + [\...] +``` + +Refer to the [Nemotron Steps CLI Reference](/../cli-reference) for the shared flag set. + +## Configuration Files + +The step ships two configuration files under `src/nemotron/steps/optimize/modelopt/distill/config/`. + +| File | Purpose | +| --- | --- | +| default.yaml | Generic teacher-student distillation configuration with Qwen/Qwen3-8B as the teacher and Qwen/Qwen3-4B as the student. | +| tiny.yaml | Short validation run that exercises the distillation pipeline with mock data. | + +Pass the configuration name with `-c`: + +```console +$ nemotron steps run optimize/modelopt/distill -c tiny +$ nemotron steps run optimize/modelopt/distill -c default +``` + +## Inputs and Outputs + +| Direction | Artifact Type | Required | Description | +| --- | --- | --- | --- | +| Consumes | checkpoint_hf | Yes | The teacher and student Hugging Face (HF) checkpoints. | +| Consumes | binidx | No | Optional real distillation data from data_prep/pretrain_prep. This input is unnecessary when args.use_mock_data=true. | +| Produces | checkpoint_megatron | тАФ | The distilled Megatron distributed checkpoint. | + +## Step Parameters + +The manifest declares five distillation parameters. +Pass them as dotlist overrides. + +### `teacher_hf_path=` + +```python +args.teacher_hf_path= +``` + +The Hugging Face identifier or local path for the teacher checkpoint. + +Example: `args.teacher_hf_path=nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16` + +--- + +### `student_hf_path=` + +```python +args.student_hf_path= +``` + +The Hugging Face identifier or local path for the student checkpoint. + +Example: `args.student_hf_path=Qwen/Qwen3-4B` + +--- + +### `data_paths=` + +```python +args.data_paths= +``` + +The Megatron data blend, expressed as the upstream command-line sequence in the form `[weight, prefix, weight, prefix, ...]`. + +Example: `args.data_paths='[0.5, /lustre/data/wiki, 0.5, /lustre/data/c4]'` + +--- + +### `use_mock_data=` + +```python +args.use_mock_data= +``` + +When set to `true`, the step runs a validation pass with mock data instead of real Megatron `bin/idx` data. + +Default: `false`. + +Example: `args.use_mock_data=true` + +--- + +### `extra_args=` + +Literal upstream arguments that the step forwards to the distillation script. +Use this parameter to pass newly added Model Optimizer flags that do not yet have a dedicated `args.*` entry. + +Default: `[]`. + +Example: `extra_args=["--hf_export_path", "/lustre/distilled/hf"]` + +Frequently used dotlist overrides drawn from the default configuration include the following. + +--- + +### `tp_size=` + +```python +args.tp_size= +``` + +The tensor-parallel degree applied during distillation. + +Example: `args.tp_size=4` + +--- + +### `train_iters=` + +```python +args.train_iters= +``` + +The number of training iterations. + +Example: `args.train_iters=2000` + +--- + +### `seq_length=` + +```python +args.seq_length= +``` + +The training sequence length. + +Example: `args.seq_length=4096` + +## Strategies + +The manifest records three operator strategies for `optimize/modelopt/distill`. + +- When you recover quality after pruning or quantization, set the original BF16 checkpoint as the teacher and the optimized checkpoint as the student. + +- When you validate the pipeline, set `args.use_mock_data=true`, `args.seq_length=512`, `args.train_iters=100`, and a small `args.eval_iters` value. + +- When you need a Hugging Face checkpoint, set `args.hf_export_path` and `args.student_hf_model`, or convert a saved Megatron iteration after the run completes. + +## Command Examples + +Run the tiny validation configuration locally with mock data: + +```console +$ nemotron steps run optimize/modelopt/distill -c tiny +``` + +Compile the default configuration without submitting the job: + +```console +$ nemotron steps run optimize/modelopt/distill -c default --dry-run +``` + +Submit an attached distillation run on a Lepton profile with real data: + +```console +$ nemotron steps run optimize/modelopt/distill -c default -r lepton_optimize_modelopt_distill \ + args.teacher_hf_path=nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16 \ + args.student_hf_path=Qwen/Qwen3-4B \ + args.data_paths='[0.5, /lustre/data/wiki, 0.5, /lustre/data/c4]' \ + args.train_iters=2000 +``` + +Submit a detached pipeline-validation run on a Slurm profile with mock data: + +```console +$ nemotron steps run optimize/modelopt/distill -c default -b slurm_optimize_modelopt_distill \ + args.use_mock_data=true \ + args.seq_length=512 \ + args.train_iters=100 +``` + +## Related Skill + +Run the `nemotron-optimizer-distillation` skill with your agent. + +## Related Documentation + +- [Nemotron Steps CLI Reference](/../cli-reference) covers the shared option set, dotlist overrides, and passthrough arguments. + +- [Run Post-Training Optimization](/../../how-to/run-optimization) explains the ordering of prune and distill, hardware targets, and quality recovery. + +- [optimize/modelopt/prune](/prune) feeds pruned checkpoints into this step. + +### Upstream + +- [NVIDIA Model Optimizer Repository](https://github.com/NVIDIA/Model-Optimizer) + +- [NVIDIA Model Optimizer Documentation](https://nvidia.github.io/Model-Optimizer/) + +- [Megatron-Bridge Documentation](https://docs.nvidia.com/nemo/megatron-bridge/0.4.0/) + +- [Megatron-Bridge Distillation Guide](https://docs.nvidia.com/nemo/megatron-bridge/0.4.0/training/distillation.html) diff --git a/docs/fern/pages-vnightly/train-models/reference/optimize/index.mdx b/docs/fern/pages-vnightly/train-models/reference/optimize/index.mdx new file mode 100644 index 000000000..91d2fa255 --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/reference/optimize/index.mdx @@ -0,0 +1,48 @@ +--- +title: "Model Optimization Steps" +slug: "train-models/reference/optimize/index.html" +description: "This section documents the model optimization steps registered under src/nemotron/steps/optimize/modelopt/. The three steps wrap NVIDIA Model Optimizer through NVIDIA Megatron-Bridge to quantize, prun" +--- + +This section documents the model optimization steps registered under `src/nemotron/steps/optimize/modelopt/`. +The three steps wrap NVIDIA Model Optimizer through NVIDIA Megatron-Bridge to quantize, prune, and distill trained checkpoints. + +## Steps + + + +Post-training quantization with floating-point recipes such as fp8 and nvfp4, and integer recipes such as int8_sq and int4_awq. + +--- + +reference + + + + +Structured pruning by target parameter budget or explicit architecture. + +--- + +reference + + + + +Teacher-student distillation that recovers quality after pruning or quantization. + +--- + +reference + + + + + +## Related Documentation + +- [Nemotron Steps CLI Reference](/../cli-reference) covers the shared option set, dotlist overrides, and passthrough arguments. + +- [Run Post-Training Optimization](/../../how-to/run-optimization) explains the ordering of prune and distill, hardware targets, and quality recovery. + +- [Configuration Conventions](/../config-conventions) describes the per-step `config/` layout. diff --git a/docs/fern/pages-vnightly/train-models/reference/optimize/prune.mdx b/docs/fern/pages-vnightly/train-models/reference/optimize/prune.mdx new file mode 100644 index 000000000..b8c22d772 --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/reference/optimize/prune.mdx @@ -0,0 +1,202 @@ +--- +title: "optimize/modelopt/prune" +slug: "train-models/reference/optimize/prune.html" +description: "This step runs structured pruning on a Hugging Face (HF) format checkpoint by using NVIDIA Model Optimizer through NVIDIA Megatron-Bridge. The step supports pruning by a target parameter budget that M" +--- + +This step runs structured pruning on a Hugging Face (HF) format checkpoint by using NVIDIA Model Optimizer through NVIDIA Megatron-Bridge. +The step supports pruning by a target parameter budget that Model Optimizer searches against, or pruning to an explicit architecture that you supply. +The step produces a pruned Hugging Face checkpoint that you can pass to `optimize/modelopt/distill` for quality recovery. + +## Syntax + +```bash +nemotron steps run optimize/modelopt/prune \ + [-c \] \ + [-r \ | -b \] \ + [-d] \ + [--force-squash] \ + [\...] \ + [\...] +``` + +Refer to the [Nemotron Steps CLI Reference](/../cli-reference) for the shared flag set. + +## Configuration Files + +The step ships two configuration files under `src/nemotron/steps/optimize/modelopt/prune/config/`. + +| File | Purpose | +| --- | --- | +| default.yaml | Generic structured-pruning configuration for Qwen/Qwen3-8B with two-way pipeline parallelism. | +| tiny.yaml | Short validation run that exercises the pruning pipeline. | + +Pass the configuration name with `-c`: + +```console +$ nemotron steps run optimize/modelopt/prune -c tiny +$ nemotron steps run optimize/modelopt/prune -c default +``` + +## Inputs and Outputs + +| Direction | Artifact Type | Required | Description | +| --- | --- | --- | --- | +| Consumes | checkpoint_hf | Yes | A Hugging Face model identifier or checkpoint to prune. | +| Produces | checkpoint_hf | тАФ | The pruned Hugging Face checkpoint. | + +## Step Parameters + +The manifest declares four pruning parameters. +Pass them as dotlist overrides. + +### `prune_target_params=` + +```python +args.prune_target_params= +``` + +The target parameter count for the Model Optimizer search. +Use scientific notation for billions of parameters. + +Default: `6e9`. + +Example: `args.prune_target_params=4e9` + +--- + +### `prune_export_config=` + +```python +args.prune_export_config= +``` + +The explicit target architecture for manual pruning, expressed as a dictionary that maps hyperparameter names such as `hidden_size`, `ffn_hidden_size`, or `num_layers` to integer values. +Set this parameter when you want a specific architecture and you set `args.prune_target_params=null`. + +Example: `args.prune_export_config='\{"hidden_size":4096,"ffn_hidden_size":11008,"num_layers":24\}'` + +--- + +### `hparams_to_skip=` + +```python +args.hparams_to_skip= +``` + +The architecture hyperparameters that the search must leave unchanged. + +Example: `args.hparams_to_skip=["num_attention_heads"]` + +--- + +### `extra_args=` + +Literal upstream arguments that the step forwards to the pruning script. +Use this parameter to pass newly added Model Optimizer flags that do not yet have a dedicated `args.*` entry. + +Default: `[]`. + +Example: `extra_args=["--num_layers_in_first_pipeline_stage", "4"]` + +Frequently used dotlist overrides drawn from the default configuration include the following. + +--- + +### `hf_model_name_or_path=` + +```python +args.hf_model_name_or_path= +``` + +The Hugging Face identifier or local path for the checkpoint to prune. + +Example: `args.hf_model_name_or_path=meta-llama/Llama-3.1-8B-Instruct` + +--- + +### `output_hf_path=` + +```python +args.output_hf_path= +``` + +The destination directory for the pruned Hugging Face checkpoint. + +Example: `args.output_hf_path=/lustre/runs/pruned/llama-6b` + +--- + +### `pp_size=` + +```python +args.pp_size= +``` + +The pipeline-parallel degree applied during pruning. + +Example: `args.pp_size=4` + +## Strategies + +The manifest records three operator strategies for `optimize/modelopt/prune`. + +- When you know the target model budget, set `args.prune_target_params` and leave `args.prune_export_config` unset so Model Optimizer searches candidate architectures. + +- When you need a specific architecture, set `args.prune_export_config` to the target dictionary and set `args.prune_target_params=null`. + +- When the layer count does not divide the pipeline-parallel size, set `args.num_layers_in_first_pipeline_stage` and `args.num_layers_in_last_pipeline_stage` to balance the partition. + +## Command Examples + +Run the tiny validation configuration locally: + +```console +$ nemotron steps run optimize/modelopt/prune -c tiny +``` + +Compile the default configuration without submitting the job: + +```console +$ nemotron steps run optimize/modelopt/prune -c default --dry-run +``` + +Submit an attached run on a Lepton profile that searches for a four-billion-parameter target: + +```console +$ nemotron steps run optimize/modelopt/prune -c default -r lepton_optimize_modelopt_prune \ + args.hf_model_name_or_path=meta-llama/Llama-3.1-8B-Instruct \ + args.prune_target_params=4e9 \ + args.output_hf_path=/lustre/pruned/llama-4b +``` + +Submit a detached run on a Slurm profile that prunes to a manually specified architecture: + +```console +$ nemotron steps run optimize/modelopt/prune -c default -b slurm_optimize_modelopt_prune \ + args.prune_target_params=null \ + args.prune_export_config='{"hidden_size":4096,"ffn_hidden_size":11008,"num_layers":24}' \ + args.pp_size=4 +``` + +## Related Skill + +Run the `nemotron-optimizer-pruning` skill with your agent. + +## Related Documentation + +- [Nemotron Steps CLI Reference](/../cli-reference) covers the shared option set, dotlist overrides, and passthrough arguments. + +- [Run Post-Training Optimization](/../../how-to/run-optimization) explains the ordering of prune and distill, hardware targets, and quality recovery. + +- [optimize/modelopt/distill](/distill) recovers quality after pruning. + +### Upstream + +- [NVIDIA Model Optimizer Repository](https://github.com/NVIDIA/Model-Optimizer) + +- [NVIDIA Model Optimizer Documentation](https://nvidia.github.io/Model-Optimizer/) + +- [Megatron-Bridge Documentation](https://docs.nvidia.com/nemo/megatron-bridge/0.4.0/) + +- [Megatron-Bridge Pruning Guide](https://docs.nvidia.com/nemo/megatron-bridge/0.4.0/training/pruning.html) diff --git a/docs/fern/pages-vnightly/train-models/reference/optimize/quantize.mdx b/docs/fern/pages-vnightly/train-models/reference/optimize/quantize.mdx new file mode 100644 index 000000000..dc48db1fe --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/reference/optimize/quantize.mdx @@ -0,0 +1,181 @@ +--- +title: "optimize/modelopt/quantize" +slug: "train-models/reference/optimize/quantize.html" +description: "This step runs post-training quantization (PTQ) on a Hugging Face (HF) format checkpoint by using NVIDIA Model Optimizer through NVIDIA Megatron-Bridge. The step supports every quantization recipe tha" +--- + +This step runs post-training quantization (PTQ) on a Hugging Face (HF) format checkpoint by using NVIDIA Model Optimizer through NVIDIA Megatron-Bridge. +The step supports every quantization recipe that the installed Megatron-Bridge quantization script accepts. +The step produces a quantized Megatron distributed checkpoint that you can export back to Hugging Face format with the upstream `export.py` script. + +## Syntax + +```bash +nemotron steps run optimize/modelopt/quantize \ + [-c \] \ + [-r \ | -b \] \ + [-d] \ + [--force-squash] \ + [\...] \ + [\...] +``` + +Refer to the [Nemotron Steps CLI Reference](/../cli-reference) for the shared flag set. + +## Configuration Files + +The step ships four configuration files under `src/nemotron/steps/optimize/modelopt/quantize/config/`. + +| File | Purpose | +| --- | --- | +| default.yaml | Generic post-training quantization configuration with fp8 selected and nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16 as the input checkpoint. | +| fp8.yaml | FP8 quantization configuration tuned for Hopper-class hardware. | +| nvfp4.yaml | NVFP4 quantization configuration tuned for Blackwell-class hardware. | +| tiny.yaml | Short validation run that exercises the quantization pipeline. | + +Pass the configuration name with `-c`: + +```console +$ nemotron steps run optimize/modelopt/quantize -c tiny +$ nemotron steps run optimize/modelopt/quantize -c default +$ nemotron steps run optimize/modelopt/quantize -c fp8 +$ nemotron steps run optimize/modelopt/quantize -c nvfp4 +``` + +## Inputs and Outputs + +| Direction | Artifact Type | Required | Description | +| --- | --- | --- | --- | +| Consumes | checkpoint_hf | Yes | A Hugging Face base or aligned checkpoint to quantize. | +| Produces | checkpoint_megatron | тАФ | A quantized Megatron distributed checkpoint. Export the artifact to Hugging Face format with /opt/Megatron-Bridge/examples/quantization/export.py when you need a deployable Hugging Face checkpoint. | + +## Step Parameters + +The manifest declares three quantization parameters. +Pass them as dotlist overrides. + +### `export_quant_cfg=` + +```python +args.export_quant_cfg= +``` + +The quantization recipe to apply. +The supported recipes match the choices that the installed upstream `quantize.py` accepts. + +Choices: `int8_sq`, `fp8`, `fp8_blockwise`, `int4_awq`, `w4a8_awq`, `nvfp4`. + +Default: `fp8`. + +Example: `args.export_quant_cfg=nvfp4` + +--- + +### `calib_size=` + +```python +args.calib_size= +``` + +The number of calibration samples used to determine quantization scales. + +Default: `512`. + +Example: `args.calib_size=1024` + +--- + +### `extra_args=` + +Literal upstream arguments that the step forwards to the underlying quantization script. +Use this parameter to pass newly added Model Optimizer flags that do not yet have a dedicated `args.*` entry. + +Default: `[]`. + +Example: `extra_args=["--my_new_flag", "value"]` + +Frequently used dotlist overrides drawn from the default configuration include the following. + +--- + +### `hf_model_id=` + +```python +args.hf_model_id= +``` + +The Hugging Face identifier or local path for the checkpoint to quantize. + +Example: `args.hf_model_id=nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16` + +--- + +### `megatron_save_path=` + +```python +args.megatron_save_path= +``` + +The destination directory for the quantized Megatron distributed checkpoint. + +Example: `args.megatron_save_path=/lustre/runs/quantized/nano3-fp8` + +## Strategies + +The manifest records three operator strategies for `optimize/modelopt/quantize`. + +- When the target hardware is Hopper or H100, start from `config/fp8.yaml` and set `args.export_quant_cfg=fp8`. + +- When the target hardware is Blackwell or B200, start from `config/nvfp4.yaml` and set `args.export_quant_cfg=nvfp4`. + +- When you need a Hugging Face checkpoint, export the produced Megatron checkpoint by using `/opt/Megatron-Bridge/examples/quantization/export.py` after the quantization run completes. + +## Command Examples + +Run the tiny validation configuration locally: + +```console +$ nemotron steps run optimize/modelopt/quantize -c tiny +``` + +Compile the FP8 configuration without submitting the job: + +```console +$ nemotron steps run optimize/modelopt/quantize -c fp8 --dry-run +``` + +Submit an attached FP8 run on a Lepton profile for the Nano3 base model: + +```console +$ nemotron steps run optimize/modelopt/quantize -c fp8 -r lepton_optimize_modelopt_quantize \ + args.hf_model_id=nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16 \ + args.calib_size=1024 +``` + +Submit a detached NVFP4 run on a Slurm profile for the Super3 base model: + +```console +$ nemotron steps run optimize/modelopt/quantize -c nvfp4 -b slurm_optimize_modelopt_quantize \ + args.hf_model_id=nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16 \ + args.megatron_save_path=/lustre/quantized/super3-nvfp4 +``` + +## Related Skill + +Run the `nemotron-optimizer-quantization` skill with your agent. + +## Related Documentation + +- [Nemotron Steps CLI Reference](/../cli-reference) covers the shared option set, dotlist overrides, and passthrough arguments. + +- [Run Post-Training Optimization](/../../how-to/run-optimization) explains the ordering of prune and distill, hardware targets, and quality recovery. + +### Upstream + +- [NVIDIA Model Optimizer Repository](https://github.com/NVIDIA/Model-Optimizer) + +- [NVIDIA Model Optimizer Documentation](https://nvidia.github.io/Model-Optimizer/) + +- [Megatron-Bridge Documentation](https://docs.nvidia.com/nemo/megatron-bridge/latest/) + +- [Megatron-Bridge Quantization Guide](https://docs.nvidia.com/nemo/megatron-bridge/latest/modelopt/quantization.html) diff --git a/docs/fern/pages-vnightly/train-models/reference/peft/automodel.mdx b/docs/fern/pages-vnightly/train-models/reference/peft/automodel.mdx new file mode 100644 index 000000000..1af49f081 --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/reference/peft/automodel.mdx @@ -0,0 +1,220 @@ +--- +title: "peft/automodel" +slug: "train-models/reference/peft/automodel.html" +description: "This step trains a low-rank adaptation (LoRA) adapter on top of a Hugging Face (HF) format base model by using the NeMo AutoModel library. The training loop matches sft/automodel, with a LoRA adapter " +--- + +This step trains a low-rank adaptation (LoRA) adapter on top of a Hugging Face (HF) format base model by using the NeMo AutoModel library. +The training loop matches `sft/automodel`, with a LoRA adapter wired in by default to keep large base models practical for adapter tuning. +The step produces a `checkpoint_lora` artifact that you can merge with the base model by using the `convert/merge_lora` step. + +## Syntax + +```bash +nemotron steps run peft/automodel \ + [-c \] \ + [-r \ | -b \] \ + [-d] \ + [--force-squash] \ + [\...] \ + [\...] +``` + +Refer to the [Nemotron Steps CLI Reference](/../cli-reference) for the shared flag set. + +## Configuration Files + +The step ships two configuration files under `src/nemotron/steps/peft/automodel/config/`. + +| File | Purpose | +| --- | --- | +| default.yaml | Full-shape LoRA tuning on Qwen/Qwen3-30B-A3B with the AutoModel TrainFinetuneRecipeForNextTokenPrediction recipe. | +| tiny.yaml | Short validation run with a small dataset slice and a short training schedule. | + +Pass the configuration name with `-c`: + +```console +$ nemotron steps run peft/automodel -c tiny +$ nemotron steps run peft/automodel -c default +``` + +## Inputs and Outputs + +| Direction | Artifact Type | Required | Description | +| --- | --- | --- | --- | +| Consumes | training_jsonl | Yes | Chat-format JSON Lines with a messages field. | +| Produces | checkpoint_lora | тАФ | LoRA adapter weights. Merge the adapter with the base model by using convert/merge_lora to obtain a deployable Hugging Face checkpoint. | + +## Supported Models + +The manifest declares three reference base models. +Other Hugging Face causal language models that load through `AutoModelForCausalLM.from_pretrained` also work. + +| Model | Minimum GPUs | Default | Notes | +| --- | --- | --- | --- | +| Qwen/Qwen3-30B-A3B | 8 | Yes | Mixture-of-experts (MoE) base model used by config/default.yaml. | +| meta-llama/Llama-3.1-8B-Instruct | 2 | No | Common dense baseline for single-node LoRA tuning. | +| mistralai/Mistral-7B-Instruct-v0.3 | 1 | No | Strong default for single-GPU LoRA tuning. | + +Override the base model from the command line: + +```console +$ nemotron steps run peft/automodel -c default \ + model.pretrained_model_name_or_path=mistralai/Mistral-7B-Instruct-v0.3 +``` + +## Step Parameters + +The manifest declares two LoRA-specific parameters. +Pass them as dotlist overrides. + +### `dim=` + +```python +peft.dim= +``` + +The LoRA rank. +Values in the eight-to-thirty-two range work well for most tasks. +Raise the rank when the downstream task is harder than the base task. + +Default: `16`. + +Example: `peft.dim=32` + +--- + +### `alpha=` + +```python +peft.alpha= +``` + +The LoRA alpha scaling factor. +A value equal to twice the rank works well in practice. + +Default: `32`. + +Example: `peft.alpha=64` + +Frequently used dotlist overrides drawn from the AutoModel recipe include the following. + +--- + +### `max_steps=` + +```python +step_scheduler.max_steps= +``` + +The maximum number of optimizer steps for the run. + +Example: `step_scheduler.max_steps=200` + +--- + +### `global_batch_size=` + +```python +step_scheduler.global_batch_size= +``` + +The global batch size across all data-parallel workers. + +Example: `step_scheduler.global_batch_size=64` + +--- + +### `path_or_dataset_id=` + +```python +dataset.path_or_dataset_id= +``` + +The Hugging Face dataset identifier or a local path that resolves to a JSON Lines chat dataset. + +Example: `dataset.path_or_dataset_id=/data/my-instructions.jsonl` + +--- + +### `dropout=` + +```python +peft.dropout= +``` + +The LoRA dropout rate applied during training. + +Example: `peft.dropout=0.05` + +## Strategies + +The manifest records two operator strategies for `peft/automodel`. + +- When the run targets a single GPU or memory is tight, keep `peft.dim` low, in the eight-to-sixteen range, and prefer a Mistral-class base model. + +- When the adapter is intended for deployment, run `convert/merge_lora` after training to merge the adapter with the base model and produce a standalone Hugging Face checkpoint. + +## Common Errors + +--- + +### `oom` + +Cause: GPU memory is exhausted during forward or backward passes. + +Recovery: reduce `peft.dim`, lower `step_scheduler.local_batch_size`, lower the maximum sequence length, or move to a smaller base model. + +## Command Examples + +Run the tiny validation configuration locally: + +```console +$ nemotron steps run peft/automodel -c tiny +``` + +Compile the default configuration on a Lepton profile without submitting the job: + +```console +$ nemotron steps run peft/automodel -c default -r lepton_peft_automodel --dry-run +``` + +Submit an attached LoRA run with a higher adapter rank: + +```console +$ nemotron steps run peft/automodel -c default -r lepton_peft_automodel \ + peft.dim=32 \ + peft.alpha=64 \ + step_scheduler.max_steps=500 +``` + +Submit a detached single-GPU LoRA run on a Slurm profile against a smaller base model: + +```console +$ nemotron steps run peft/automodel -c default -b slurm_peft_automodel \ + model.pretrained_model_name_or_path=mistralai/Mistral-7B-Instruct-v0.3 \ + peft.dim=8 \ + peft.alpha=16 +``` + +## Related Skill + +Run the `nemotron-peft-automodel` skill with your agent. + +## Related Documentation + +- [Nemotron Steps CLI Reference](/../cli-reference) covers the shared option set, dotlist overrides, and passthrough arguments. + +- [Choose a PEFT Backend](/../../how-to/choose-peft-backend) compares `peft/automodel` and `peft/megatron_bridge`. + +- [peft/megatron_bridge](/megatron-bridge) documents the Megatron-Bridge LoRA step. + +### Upstream + +- [NeMo AutoModel Repository](https://github.com/NVIDIA-NeMo/Automodel) + +- [NeMo AutoModel Documentation](https://docs.nvidia.com/nemo/automodel/latest/index.html) + +- [NeMo AutoModel PEFT Guide](https://docs.nvidia.com/nemo/automodel/latest/guides/llm/finetune.html) + +- [AutoModel Training Script](https://github.com/NVIDIA-NeMo/Automodel/blob/main/nemo_automodel/recipes/llm/train_ft.py) diff --git a/docs/fern/pages-vnightly/train-models/reference/peft/index.mdx b/docs/fern/pages-vnightly/train-models/reference/peft/index.mdx new file mode 100644 index 000000000..70a4ea95f --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/reference/peft/index.mdx @@ -0,0 +1,40 @@ +--- +title: "Parameter-Efficient Fine-Tuning Steps" +slug: "train-models/reference/peft/index.html" +description: "This section documents the parameter-efficient fine-tuning (PEFT) steps registered under src/nemotron/steps/peft/. Each step trains a low-rank adaptation (LoRA) adapter on top of a base model and prod" +--- + +This section documents the parameter-efficient fine-tuning (PEFT) steps registered under `src/nemotron/steps/peft/`. +Each step trains a low-rank adaptation (LoRA) adapter on top of a base model and produces a `checkpoint_lora` artifact. +Merge that artifact with the base model by using the `convert/merge_lora` step when you need a standalone Hugging Face (HF) checkpoint for deployment. + +## Steps + + + +LoRA tuning with the NeMo AutoModel library against Hugging Face base models and JSON Lines chat datasets. + +--- + +reference + + + + +LoRA tuning on top of NVIDIA Megatron-Bridge for distributed training of the Nemotron model family. + +--- + +reference + + + + + +## Related Documentation + +- [Nemotron Steps CLI Reference](/../cli-reference) covers the shared option set, dotlist overrides, and passthrough arguments. + +- [Choose a PEFT Backend](/../../how-to/choose-peft-backend) compares `peft/automodel` and `peft/megatron_bridge`. + +- [Configuration Conventions](/../config-conventions) describes the per-step `config/` layout. diff --git a/docs/fern/pages-vnightly/train-models/reference/peft/megatron-bridge.mdx b/docs/fern/pages-vnightly/train-models/reference/peft/megatron-bridge.mdx new file mode 100644 index 000000000..948ca8f61 --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/reference/peft/megatron-bridge.mdx @@ -0,0 +1,227 @@ +--- +title: "peft/megatron_bridge" +slug: "train-models/reference/peft/megatron-bridge.html" +description: "This step trains a low-rank adaptation (LoRA) adapter on top of a Megatron checkpoint by using NVIDIA Megatron-Bridge. Use this step when a full supervised fine-tune does not fit in memory at the targ" +--- + +This step trains a low-rank adaptation (LoRA) adapter on top of a Megatron checkpoint by using NVIDIA Megatron-Bridge. +Use this step when a full supervised fine-tune does not fit in memory at the target model size, but you still need tensor and pipeline parallelism. +The step consumes packed Apache Parquet shards produced by `data_prep/sft_packing` together with a base Megatron checkpoint, and produces a `checkpoint_lora` artifact. + +## Syntax + +```bash +nemotron steps run peft/megatron_bridge \ + [-c \] \ + [-r \ | -b \] \ + [-d] \ + [--force-squash] \ + [\...] \ + [\...] +``` + +Refer to the [Nemotron Steps CLI Reference](/../cli-reference) for the shared flag set. + +## Configuration Files + +The step ships two configuration files under `src/nemotron/steps/peft/megatron_bridge/config/`. + +| File | Purpose | +| --- | --- | +| default.yaml | Full-shape LoRA tuning on top of the Nano3 Megatron-Bridge finetune recipe with rank thirty-two adapters on linear_qkv and linear_proj. | +| tiny.yaml | Short validation run against packed Parquet shards. | + +Pass the configuration name with `-c`: + +```console +$ nemotron steps run peft/megatron_bridge -c tiny +$ nemotron steps run peft/megatron_bridge -c default +``` + +## Inputs and Outputs + +| Direction | Artifact Type | Required | Description | +| --- | --- | --- | --- | +| Consumes | packed_parquet | Yes | Packed Parquet shards with input_ids and loss_mask columns. Produce these shards with data_prep/sft_packing first. | +| Consumes | checkpoint_megatron | Yes | A pretrained Megatron checkpoint to adapt. | +| Produces | checkpoint_lora | тАФ | LoRA adapter weights. Merge the adapter with the base checkpoint by using convert/merge_lora to obtain a deployable Hugging Face (HF) checkpoint. | + +## Step Parameters + +The manifest declares two LoRA-specific parameters. +Pass them as dotlist overrides. + +### `type=` + +```python +peft.type= +``` + +The parameter-efficient training scheme. +Only `lora` is supported today. + +Choices: `lora`. + +Default: `lora`. + +Example: `peft.type=lora` + +--- + +### `dim=` + +```python +peft.dim= +``` + +The LoRA rank. + +Default: `32`. + +Example: `peft.dim=16` + +Frequently used dotlist overrides drawn from the Nano3 finetune recipe include the following. + +--- + +### `seq_length=` + +```python +recipe.seq_length= +``` + +The training sequence length applied by the recipe. +This value must match the `pack_size` you used in `data_prep/sft_packing`. + +Example: `recipe.seq_length=8192` + +--- + +### `tensor_model_parallel_size=` + +```python +recipe.tensor_model_parallel_size= +``` + +The tensor-model-parallel degree applied by the Nano3 finetune recipe. + +Example: `recipe.tensor_model_parallel_size=8` + +--- + +### `pipeline_model_parallel_size=` + +```python +recipe.pipeline_model_parallel_size= +``` + +The pipeline-model-parallel degree applied by the Nano3 finetune recipe. + +Example: `recipe.pipeline_model_parallel_size=4` + +--- + +### `train_iters=` + +```python +train.train_iters= +``` + +The number of training iterations. + +Example: `train.train_iters=2000` + +--- + +### `global_batch_size=` + +```python +train.global_batch_size= +``` + +The global batch size for the training loop. + +Example: `train.global_batch_size=32` + +--- + +### `nano3_packed_sft_dir=` + +```python +dataset.nano3_packed_sft_dir= +``` + +The directory that contains packed Parquet shards from `data_prep/sft_packing`. +The default configuration reads this value from the `SFT_PACKED_DIR` environment variable. + +Example: `dataset.nano3_packed_sft_dir=/lustre/packed/super3-sft` + +## Strategies + +The manifest records one operator strategy for `peft/megatron_bridge`. + +- When a full supervised fine-tune does not fit in memory at the desired model size, switch to `peft/megatron_bridge` to keep tensor and pipeline parallelism while reducing the trainable parameter count. + +## Common Errors + +--- + +### `missing_packed_data` + +Cause: the training loop cannot find packed Parquet shards at the configured `dataset.nano3_packed_sft_dir`. + +Recovery: run `data_prep/sft_packing` first, or override `dataset.nano3_packed_sft_dir` to point at the directory that holds the packed splits. + +## Command Examples + +Run the tiny validation configuration locally: + +```console +$ nemotron steps run peft/megatron_bridge -c tiny +``` + +Compile the default configuration without submitting the job: + +```console +$ nemotron steps run peft/megatron_bridge -c default --dry-run +``` + +Submit an attached LoRA run on a Lepton profile with a longer sequence length: + +```console +$ nemotron steps run peft/megatron_bridge -c default -r lepton_peft_megatron_bridge \ + peft.dim=16 \ + recipe.seq_length=8192 \ + train.train_iters=2000 +``` + +Submit a detached LoRA run on a Slurm profile with eight-way tensor parallelism: + +```console +$ nemotron steps run peft/megatron_bridge -c default -b slurm_peft_megatron_bridge \ + peft.dim=32 \ + recipe.tensor_model_parallel_size=8 \ + train.global_batch_size=64 +``` + +## Related Skill + +Run the `nemotron-peft-megatron-bridge` skill with your agent. + +## Related Documentation + +- [Nemotron Steps CLI Reference](/../cli-reference) covers the shared option set, dotlist overrides, and passthrough arguments. + +- [Choose a PEFT Backend](/../../how-to/choose-peft-backend) compares `peft/megatron_bridge` and `peft/automodel`. + +- [peft/automodel](/automodel) documents the NeMo AutoModel LoRA step. + +### Upstream + +- [Megatron-Bridge Repository](https://github.com/NVIDIA-NeMo/Megatron-Bridge) + +- [Megatron-Bridge Documentation](https://docs.nvidia.com/nemo/megatron-bridge/latest/) + +- [Megatron-Bridge PEFT Guide](https://docs.nvidia.com/nemo/megatron-bridge/latest/training/peft.html) + +- [Megatron-Bridge Packed Sequences](https://docs.nvidia.com/nemo/megatron-bridge/latest/training/packed-sequences.html) diff --git a/docs/fern/pages-vnightly/train-models/reference/rl/dpo.mdx b/docs/fern/pages-vnightly/train-models/reference/rl/dpo.mdx new file mode 100644 index 000000000..edec9c048 --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/reference/rl/dpo.mdx @@ -0,0 +1,170 @@ +--- +title: "rl/nemo_rl/dpo" +slug: "train-models/reference/rl/dpo.html" +description: "This step runs direct preference optimization (DPO) alignment on NeMo-RL. The step consumes a preference dataset of chosen-and-rejected response pairs, together with a supervised fine-tuning (SFT) Meg" +--- + +This step runs direct preference optimization (DPO) alignment on NeMo-RL. +The step consumes a preference dataset of chosen-and-rejected response pairs, together with a supervised fine-tuning (SFT) Megatron checkpoint that serves as the warm-start policy. +The step produces an aligned `checkpoint_megatron` artifact. + +## Syntax + +```bash +nemotron steps run rl/nemo_rl/dpo \ + [-c \] \ + [-r \ | -b \] \ + [-d] \ + [--force-squash] \ + [\...] \ + [\...] +``` + +Refer to the [Nemotron Steps CLI Reference](/../cli-reference) for the shared flag set. + +## Configuration Files + +The step ships two configuration files under `src/nemotron/steps/rl/nemo_rl/dpo/config/`. + +| File | Purpose | +| --- | --- | +| default.yaml | Full-shape DPO with a five-hundred-step training schedule and meta-llama/Llama-3.2-1B-Instruct as the policy. | +| tiny.yaml | Short validation run with a small dataset slice. | + +Pass the configuration name with `-c`: + +```console +$ nemotron steps run rl/nemo_rl/dpo -c tiny +$ nemotron steps run rl/nemo_rl/dpo -c default +``` + +## Inputs and Outputs + +| Direction | Artifact Type | Required | Description | +| --- | --- | --- | --- | +| Consumes | training_jsonl | Yes | Preference JSON Lines with prompt, chosen, and rejected fields. | +| Consumes | checkpoint_megatron | Yes | The supervised fine-tuned policy to align. | +| Produces | checkpoint_megatron | тАФ | The DPO-aligned policy checkpoint. | + +## Step Parameters + +The manifest declares one DPO-specific parameter. +Pass it as a dotlist override. + +### `reference_policy_kl_penalty=` + +```python +dpo.reference_policy_kl_penalty= +``` + +The Kullback-Leibler (KL) penalty between the trained policy and the reference policy. +This value corresponds to ╬▓ in the DPO objective. +Lower values let the policy drift further from the reference; higher values keep the policy close to the reference. + +Default: `0.05`. + +Example: `dpo.reference_policy_kl_penalty=0.1` + +Frequently used dotlist overrides drawn from the NeMo-RL DPO recipe include the following. + +--- + +### `model_name=` + +```python +policy.model_name= +``` + +The Hugging Face identifier or local path for the policy. +The default configuration reads this value from the `RL_POLICY_MODEL` environment variable. + +Example: `policy.model_name=meta-llama/Llama-3.2-3B-Instruct` + +--- + +### `max_num_steps=` + +```python +dpo.max_num_steps= +``` + +The maximum number of training steps. + +Example: `dpo.max_num_steps=1000` + +--- + +### `train_global_batch_size=` + +```python +policy.train_global_batch_size= +``` + +The global batch size across all data-parallel workers. + +Example: `policy.train_global_batch_size=64` + +--- + +### `lr=` + +```python +policy.optimizer.lr= +``` + +The optimizer learning rate. + +Example: `policy.optimizer.lr=1.0e-6` + +## Strategies + +The manifest records one operator strategy for `rl/nemo_rl/dpo`. + +- When the loss diverges or the Kullback-Leibler divergence collapses, raise `dpo.reference_policy_kl_penalty` to a value in the 0.1-0.3 range, or lower the learning rate. + +## Command Examples + +Run the tiny validation configuration locally: + +```console +$ nemotron steps run rl/nemo_rl/dpo -c tiny +``` + +Compile the default configuration without submitting the job: + +```console +$ nemotron steps run rl/nemo_rl/dpo -c default --dry-run +``` + +Submit an attached run on a Lepton profile with a tighter Kullback-Leibler penalty: + +```console +$ nemotron steps run rl/nemo_rl/dpo -c default -r lepton_rl_nemo_rl_dpo \ + dpo.reference_policy_kl_penalty=0.2 \ + dpo.max_num_steps=1000 +``` + +Submit a detached run on a Slurm profile with a larger policy: + +```console +$ nemotron steps run rl/nemo_rl/dpo -c default -b slurm_rl_nemo_rl_dpo \ + policy.model_name=meta-llama/Llama-3.2-3B-Instruct \ + policy.train_global_batch_size=64 \ + policy.optimizer.lr=1.0e-6 +``` + +## Related Skill + +Run the `nemotron-rl-nemo-rl-dpo` skill with your agent. + +## Related Documentation + +- [Nemotron Steps CLI Reference](/../cli-reference) covers the shared option set, dotlist overrides, and passthrough arguments. + +- [Choose an RL Alignment Step](/../../how-to/choose-rl-step) compares the three RL steps. + +### Upstream + +- [NeMo-RL DPO Example](https://github.com/NVIDIA-NeMo/RL/blob/main/examples/run_dpo.py) + +- [NeMo-RL Repository](https://github.com/NVIDIA-NeMo/RL) diff --git a/docs/fern/pages-vnightly/train-models/reference/rl/index.mdx b/docs/fern/pages-vnightly/train-models/reference/rl/index.mdx new file mode 100644 index 000000000..7cf53cc1a --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/reference/rl/index.mdx @@ -0,0 +1,48 @@ +--- +title: "Reinforcement Learning Steps" +slug: "train-models/reference/rl/index.html" +description: "This section documents the reinforcement learning (RL) alignment steps registered under src/nemotron/steps/rl/nemo_rl/. All three steps run on NeMo-RL, consume a supervised fine-tuning (SFT) Megatron " +--- + +This section documents the reinforcement learning (RL) alignment steps registered under `src/nemotron/steps/rl/nemo_rl/`. +All three steps run on NeMo-RL, consume a supervised fine-tuning (SFT) Megatron checkpoint as the warm-start policy, and produce an aligned `checkpoint_megatron` artifact. + +## Steps + + + +Direct preference optimization with preference pairs. + +--- + +reference + + + + +Reinforcement learning with verifiable rewards via group relative policy optimization. + +--- + +reference + + + + +Reinforcement learning from human feedback with a generative reward model judge. + +--- + +reference + + + + + +## Related Documentation + +- [Nemotron Steps CLI Reference](/../cli-reference) covers the shared option set, dotlist overrides, and passthrough arguments. + +- [Choose an RL Alignment Step](/../../how-to/choose-rl-step) compares the three RL steps. + +- [Configuration Conventions](/../config-conventions) describes the per-step `config/` layout. diff --git a/docs/fern/pages-vnightly/train-models/reference/rl/rlhf.mdx b/docs/fern/pages-vnightly/train-models/reference/rl/rlhf.mdx new file mode 100644 index 000000000..8b825994b --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/reference/rl/rlhf.mdx @@ -0,0 +1,185 @@ +--- +title: "rl/nemo_rl/rlhf" +slug: "train-models/reference/rl/rlhf.html" +description: "This step runs reinforcement learning from human feedback (RLHF) on top of the NeMo-RL group relative policy optimization (GRPO) training loop, with a generative reward model judge. The step consumes " +--- + +This step runs reinforcement learning from human feedback (RLHF) on top of the NeMo-RL group relative policy optimization (GRPO) training loop, with a generative reward model judge. +The step consumes a prompt dataset for rollouts, a supervised fine-tuning (SFT) Megatron checkpoint as the warm-start policy, and a Hugging Face (HF) reward model checkpoint that NeMo-Gym serves as the judge. +The step produces an aligned `checkpoint_megatron` artifact. + +## Syntax + +```bash +nemotron steps run rl/nemo_rl/rlhf \ + [-c \] \ + [-r \ | -b \] \ + [-d] \ + [--force-squash] \ + [\...] \ + [\...] +``` + +Refer to the [Nemotron Steps CLI Reference](/../cli-reference) for the shared flag set. + +## Configuration Files + +The step ships two configuration files under `src/nemotron/steps/rl/nemo_rl/rlhf/config/`. + +| File | Purpose | +| --- | --- | +| default.yaml | NeMo-Gym RLHF path with GRPO sampling and a generative reward model judge that NeMo-Gym hosts. | +| tiny.yaml | Short validation run with a small dataset slice. | + +Pass the configuration name with `-c`: + +```console +$ nemotron steps run rl/nemo_rl/rlhf -c tiny +$ nemotron steps run rl/nemo_rl/rlhf -c default +``` + +## Inputs and Outputs + +| Direction | Artifact Type | Required | Description | +| --- | --- | --- | --- | +| Consumes | training_jsonl | Yes | Prompt JSON Lines used for rollouts. | +| Consumes | checkpoint_megatron | Yes | The supervised fine-tuned policy to align. | +| Consumes | checkpoint_hf | Yes | The reward model checkpoint, in Hugging Face format, served as the generative reward model judge. | +| Produces | checkpoint_megatron | тАФ | The RLHF-aligned policy checkpoint. | + +## Step Parameters + +The manifest declares two NeMo-Gym RLHF parameters. +Pass them as dotlist overrides. + +### `num_generations_per_prompt=` + +```python +grpo.num_generations_per_prompt= +``` + +The number of rollouts produced per prompt. +This value sets the GRPO group size. + +Default: `8`. + +Example: `grpo.num_generations_per_prompt=16` + +--- + +### `model=` + +```python +env.nemo_gym.genrm_model.responses_api_models.vllm_model.model= +``` + +The Hugging Face identifier or local path for the generative reward model that NeMo-Gym serves through its responses API. + +Default: `meta-llama/Llama-3.2-1B-Instruct` (or the value of `RL_REWARD_MODEL` when that variable is set). + +Example: `env.nemo_gym.genrm_model.responses_api_models.vllm_model.model=nvidia/Nemotron-Reward-Model` + +Frequently used dotlist overrides drawn from the NeMo-RL GRPO recipe include the following. + +--- + +### `max_num_steps=` + +```python +grpo.max_num_steps= +``` + +The maximum number of training steps. + +Example: `grpo.max_num_steps=1000` + +--- + +### `num_prompts_per_step=` + +```python +grpo.num_prompts_per_step= +``` + +The number of prompts sampled per training step. + +Example: `grpo.num_prompts_per_step=32` + +--- + +### `data_path=` + +```python +data.train.data_path= +``` + +The path to the training JSON Lines dataset. + +Example: `data.train.data_path=/lustre/rlhf/train.jsonl` + +--- + +### `data_path=` + +```python +data.validation.data_path= +``` + +The path to the validation JSON Lines dataset. + +Example: `data.validation.data_path=/lustre/rlhf/val.jsonl` + +## Strategies + +The manifest records two operator strategies for `rl/nemo_rl/rlhf`. + +- When the reward model saturates or reward hacking appears in rollouts, raise the Kullback-Leibler penalty, lower the learning rate, or add reward clipping. + +- When the data follows the Super3 RLHF layout, keep `env.should_use_nemo_gym=true` and point `data.train.data_path` and `data.validation.data_path` at the prepared NeMo-Gym JSON Lines files. + +## Command Examples + +Run the tiny validation configuration locally: + +```console +$ nemotron steps run rl/nemo_rl/rlhf -c tiny +``` + +Compile the default configuration without submitting the job: + +```console +$ nemotron steps run rl/nemo_rl/rlhf -c default --dry-run +``` + +Submit an attached run on a Lepton profile with an explicit reward model identifier: + +```console +$ nemotron steps run rl/nemo_rl/rlhf -c default -r lepton_rl_nemo_rl_rlhf \ + env.nemo_gym.genrm_model.responses_api_models.vllm_model.model=nvidia/Nemotron-Reward-Model \ + grpo.num_generations_per_prompt=16 +``` + +Submit a detached run on a Slurm profile with a longer training schedule: + +```console +$ nemotron steps run rl/nemo_rl/rlhf -c default -b slurm_rl_nemo_rl_rlhf \ + grpo.max_num_steps=1000 \ + data.train.data_path=/lustre/rlhf/train.jsonl \ + data.validation.data_path=/lustre/rlhf/val.jsonl +``` + +## Related Skill + +Run the `nemotron-rl-nemo-rl-rlhf` skill with your agent. + +## Related Documentation + +- [Nemotron Steps CLI Reference](/../cli-reference) covers the shared option set, dotlist overrides, and passthrough arguments. + +- [Choose an RL Alignment Step](/../../how-to/choose-rl-step) compares the three RL steps. + +### Upstream + +- [Super3 RLHF Recipe](https://github.com/NVIDIA-NeMo/Nemotron/tree/main/src/nemotron/recipes/super3/stage2_rl/stage3_rlhf) + +- [NeMo-RL Repository](https://github.com/NVIDIA-NeMo/RL) diff --git a/docs/fern/pages-vnightly/train-models/reference/rl/rlvr.mdx b/docs/fern/pages-vnightly/train-models/reference/rl/rlvr.mdx new file mode 100644 index 000000000..bfb842711 --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/reference/rl/rlvr.mdx @@ -0,0 +1,212 @@ +--- +title: "rl/nemo_rl/rlvr" +slug: "train-models/reference/rl/rlvr.html" +description: "This step runs reinforcement learning with verifiable rewards (RLVR) by using group relative policy optimization (GRPO) on NeMo-RL. Use this step when the downstream task has a programmatic reward sig" +--- + +This step runs reinforcement learning with verifiable rewards (RLVR) by using group relative policy optimization (GRPO) on NeMo-RL. +Use this step when the downstream task has a programmatic reward signal, such as a unit-tested code generation task or a mathematics problem with a ground-truth solution. +The step produces an aligned `checkpoint_megatron` artifact. + +## Syntax + +```bash +nemotron steps run rl/nemo_rl/rlvr \ + [-c \] \ + [-r \ | -b \] \ + [-d] \ + [--force-squash] \ + [\...] \ + [\...] +``` + +Refer to the [Nemotron Steps CLI Reference](/../cli-reference) for the shared flag set. + +## Configuration Files + +The step ships three configuration files under `src/nemotron/steps/rl/nemo_rl/rlvr/config/`. + +| File | Purpose | +| --- | --- | +| default.yaml | Lightweight upstream group relative policy optimization (GRPO) example path. The step delegates to /opt/nemo-rl/examples/run_grpo.py. | +| nemo_gym.yaml | NeMo-Gym path that mirrors the Super3 RLVR style, using NeMo-Gym JSON Lines and resource-server reward configurations. | +| tiny.yaml | Short validation run with a small dataset slice. | + +Pass the configuration name with `-c`: + +```console +$ nemotron steps run rl/nemo_rl/rlvr -c tiny +$ nemotron steps run rl/nemo_rl/rlvr -c default +$ nemotron steps run rl/nemo_rl/rlvr -c nemo_gym +``` + +## Inputs and Outputs + +| Direction | Artifact Type | Required | Description | +| --- | --- | --- | --- | +| Consumes | training_jsonl | Yes | Prompt JSON Lines with verifiable answers, such as ground-truth solutions for a mathematics task. | +| Consumes | checkpoint_megatron | Yes | The supervised fine-tuned policy to optimize. | +| Produces | checkpoint_megatron | тАФ | The RLVR-aligned policy checkpoint. | + +## Step Parameters + +The manifest declares three group relative policy optimization (GRPO) parameters. +Pass them as dotlist overrides. + +### `num_generations_per_prompt=` + +```python +grpo.num_generations_per_prompt= +``` + +The number of rollouts produced per prompt. +This value sets the GRPO group size. + +Default: `8`. + +Example: `grpo.num_generations_per_prompt=16` + +--- + +### `normalize_rewards=` + +```python +grpo.normalize_rewards= +``` + +When set to `true`, the trainer normalizes rewards within each group before computing advantages. + +Default: `true`. + +Example: `grpo.normalize_rewards=false` + +--- + +### `should_use_nemo_gym=` + +```python +env.should_use_nemo_gym= +``` + +When set to `true`, the step switches from the upstream generic GRPO example to the NeMo-Gym GRPO runner. + +Default: `false`. + +Example: `env.should_use_nemo_gym=true` + +Frequently used dotlist overrides drawn from the NeMo-RL GRPO recipe include the following. + +--- + +### `max_num_steps=` + +```python +grpo.max_num_steps= +``` + +The maximum number of training steps. + +Example: `grpo.max_num_steps=1000` + +--- + +### `num_prompts_per_step=` + +```python +grpo.num_prompts_per_step= +``` + +The number of prompts sampled per training step. + +Example: `grpo.num_prompts_per_step=24` + +--- + +### `use_leave_one_out_baseline=` + +```python +grpo.use_leave_one_out_baseline= +``` + +When set to `true`, the trainer uses a leave-one-out baseline within each group when computing advantages. + +Example: `grpo.use_leave_one_out_baseline=false` + +--- + +### `data_path=` + +```python +data.train.data_path= +``` + +The path to the training JSON Lines dataset. + +Example: `data.train.data_path=/lustre/rlvr/train.jsonl` + +--- + +### `data_path=` + +```python +data.validation.data_path= +``` + +The path to the validation JSON Lines dataset. + +Example: `data.validation.data_path=/lustre/rlvr/val.jsonl` + +## Strategies + +The manifest records two operator strategies for `rl/nemo_rl/rlvr`. + +- When reward variance is low, raise `grpo.num_generations_per_prompt` and keep the leave-one-out baseline enabled. + +- When the data follows the Super3 JSON Lines layout or relies on resource-server rewards, start from `config/nemo_gym.yaml` and set `data.train.data_path`, `data.validation.data_path`, and the NeMo-Gym `env.nemo_gym.config_paths` field. + +## Command Examples + +Run the tiny validation configuration locally: + +```console +$ nemotron steps run rl/nemo_rl/rlvr -c tiny +``` + +Compile the default configuration without submitting the job: + +```console +$ nemotron steps run rl/nemo_rl/rlvr -c default --dry-run +``` + +Submit an attached run on a Lepton profile with a larger group size and more training steps: + +```console +$ nemotron steps run rl/nemo_rl/rlvr -c default -r lepton_rl_nemo_rl_rlvr \ + grpo.num_generations_per_prompt=16 \ + grpo.max_num_steps=1000 +``` + +Submit a detached run on a Slurm profile with the NeMo-Gym path and explicit data paths: + +```console +$ nemotron steps run rl/nemo_rl/rlvr -c nemo_gym -b slurm_rl_nemo_rl_rlvr \ + env.should_use_nemo_gym=true \ + data.train.data_path=/lustre/rlvr/train.jsonl \ + data.validation.data_path=/lustre/rlvr/val.jsonl +``` + +## Related Skill + +Run the `nemotron-rl-nemo-rl-rlvr` skill with your agent. + +## Related Documentation + +- [Nemotron Steps CLI Reference](/../cli-reference) covers the shared option set, dotlist overrides, and passthrough arguments. + +- [Choose an RL Alignment Step](/../../how-to/choose-rl-step) compares the three RL steps. + +### Upstream + +- [NeMo-RL GRPO Example](https://github.com/NVIDIA-NeMo/RL/blob/main/examples/run_grpo.py) + +- [NeMo-RL Repository](https://github.com/NVIDIA-NeMo/RL) diff --git a/docs/fern/pages-vnightly/train-models/reference/sft/automodel.mdx b/docs/fern/pages-vnightly/train-models/reference/sft/automodel.mdx new file mode 100644 index 000000000..a13102dee --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/reference/sft/automodel.mdx @@ -0,0 +1,214 @@ +--- +title: "sft/automodel" +slug: "train-models/reference/sft/automodel.html" +description: "This step runs supervised fine-tuning (SFT) on a Hugging Face (HF) format model from a JSON Lines (JSONL) chat dataset, using the NeMo AutoModel library. The same step supports full fine-tuning and lo" +--- + +This step runs supervised fine-tuning (SFT) on a Hugging Face (HF) format model from a JSON Lines (JSONL) chat dataset, using the NeMo AutoModel library. +The same step supports full fine-tuning and low-rank adaptation (LoRA) tuning, controlled by the `peft` parameter. + +## Syntax + +```bash +nemotron steps run sft/automodel \ + [-c \] \ + [-r \ | -b \] \ + [-d] \ + [--force-squash] \ + [\...] \ + [\...] +``` + +Refer to the [Nemotron Steps CLI Reference](/../cli-reference) for the shared flag set. + +## Configuration Files + +The step ships two configuration files under `src/nemotron/steps/sft/automodel/config/`. + +| File | Purpose | +| --- | --- | +| default.yaml | Full-shape training on Qwen/Qwen3-30B-A3B with the AutoModel TrainFinetuneRecipeForNextTokenPrediction recipe. | +| tiny.yaml | Short validation run with five training steps and a 64-record dataset slice from HuggingFaceH4/ultrachat_200k. | + +Pass either name with `-c`: + +```console +$ nemotron steps run sft/automodel -c tiny +$ nemotron steps run sft/automodel -c default +``` + +## Inputs and Outputs + +| Direction | Artifact Type | Required | Description | +| --- | --- | --- | --- | +| Consumes | training_jsonl | Yes | Instruction data in JSONL with a messages field in OpenAI chat format. | +| Produces | checkpoint_hf | тАФ | Hugging Face checkpoint directory. The output is a full model checkpoint when peft=null, and a LoRA adapter directory when peft=lora. | + +## Supported Models + +The manifest declares three reference base models. +Other Hugging Face causal language models that load through `AutoModelForCausalLM.from_pretrained` also work. + +| Model | Minimum GPUs | Default | Notes | +| --- | --- | --- | --- | +| Qwen/Qwen3-30B-A3B | 8 | Yes | Mixture-of-experts (MoE) base model used by config/default.yaml. | +| meta-llama/Llama-3.1-8B-Instruct | 4 | No | Common dense baseline for single-node SFT and LoRA. | +| mistralai/Mistral-7B-Instruct-v0.3 | 2 | No | Use this model when GPU count is small or iteration speed matters. | + +Override the base model from the command line: + +```console +$ nemotron steps run sft/automodel -c default \ + model.pretrained_model_name_or_path=meta-llama/Llama-3.1-8B-Instruct +``` + +## Step Parameters + +The manifest declares one Nemotron-specific parameter. +Pass it as a dotlist override after the options. + +### `peft=VALUE` + +Selects adapter-style training instead of full fine-tuning. +Set this value to `lora` to train a LoRA adapter, or to `null` for full SFT. + +Choices: `lora`, `null`. + +Default: `null`. + +Example: `peft=lora` + +You can also override any key from the compiled YAML configuration. +The frequently used keys include the following. + +--- + +### `max_steps=N` + +```python +step_scheduler.max_steps=N +``` + +The maximum number of optimizer steps for the run. + +Example: `step_scheduler.max_steps=200` + +--- + +### `global_batch_size=N` + +```python +step_scheduler.global_batch_size=N +``` + +The global batch size across all data-parallel workers. + +Example: `step_scheduler.global_batch_size=64` + +--- + +### `path_or_dataset_id=` + +```python +dataset.path_or_dataset_id= +``` + +The Hugging Face dataset identifier or a local path that resolves to a JSONL chat dataset. + +Example: `dataset.path_or_dataset_id=/data/my-instructions.jsonl` + +--- + +### `checkpoint_dir=PATH` + +```python +checkpoint.checkpoint_dir=PATH +``` + +The directory where the AutoModel recipe writes checkpoints. + +Example: `checkpoint.checkpoint_dir=/output/qwen-sft` + +## Strategies + +The manifest records four operator strategies for `sft/automodel`. + +- When the run has one or two GPUs, or memory is tight, set `peft=lora` and start from a Mistral-class model. + +- When the run has three or four GPUs and the chosen model fits comfortably, consider full fine-tuning only when the resulting checkpoint size and iteration speed remain acceptable. + +- When the dataset already uses OpenAI chat-format JSONL, skip `data_prep/sft_packing` and train directly from `training_jsonl`. + +- When you need an immediately deployable HF checkpoint, keep the safetensors save format and the consolidated HF output layout that `config/default.yaml` sets. + +## Common Errors + +--- + +### `chat_template_missing` + +Cause: the tokenizer for the chosen model does not include a chat template, so the AutoModel recipe cannot render the `messages` field into prompt-and-completion form. + +Recovery: choose a tokenizer with chat-template support, or convert the data to prompt-and-completion format before training. + +--- + +### `oom` + +Cause: GPU memory is exhausted during forward or backward passes. + +Recovery: set `peft=lora`, reduce `step_scheduler.global_batch_size`, or move to a smaller model. + +## Command Examples + +Run the tiny validation configuration locally: + +```console +$ nemotron steps run sft/automodel -c tiny +``` + +Compile the default configuration on a Lepton profile without submitting the job: + +```console +$ nemotron steps run sft/automodel -c default -r lepton_sft_automodel --dry-run +``` + +Submit an attached LoRA run on a Lepton profile with a smaller base model: + +```console +$ nemotron steps run sft/automodel -c default -r lepton_sft_automodel \ + peft=lora \ + model.pretrained_model_name_or_path=mistralai/Mistral-7B-Instruct-v0.3 \ + step_scheduler.max_steps=500 +``` + +Submit a detached full SFT on Slurm and write checkpoints to a shared scratch directory: + +```console +$ nemotron steps run sft/automodel -c default -b slurm_sft_automodel \ + peft=null \ + step_scheduler.global_batch_size=64 \ + checkpoint.checkpoint_dir=/lustre/runs/qwen-sft +``` + +## Related Skill + +Run the `nemotron-sft-automodel` skill with your agent. + +## Related Documentation + +- [Nemotron Steps CLI Reference](/../cli-reference) covers the shared option set, dotlist overrides, and passthrough arguments. + +- [Choose an SFT Backend](/../../how-to/choose-sft-backend) compares `sft/automodel` to `sft/megatron_bridge`. + +- [Configuration Conventions](/../config-conventions) describes the per-step `config/` layout. + +### Upstream + +- [NeMo AutoModel Repository](https://github.com/NVIDIA-NeMo/Automodel) + +- [NeMo AutoModel Documentation](https://docs.nvidia.com/nemo/automodel/latest/index.html) + +- [NeMo AutoModel Fine-Tuning Guide](https://docs.nvidia.com/nemo/automodel/latest/guides/llm/finetune.html) + +- [AutoModel Training Script](https://github.com/NVIDIA-NeMo/Automodel/blob/main/nemo_automodel/recipes/llm/train_ft.py) diff --git a/docs/fern/pages-vnightly/train-models/reference/sft/index.mdx b/docs/fern/pages-vnightly/train-models/reference/sft/index.mdx new file mode 100644 index 000000000..0c753cad8 --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/reference/sft/index.mdx @@ -0,0 +1,40 @@ +--- +title: "Supervised Fine-Tuning Steps" +slug: "train-models/reference/sft/index.html" +description: "This section documents the supervised fine-tuning (SFT) steps registered under src/nemotron/steps/sft/. The two steps target different training libraries and consume different data formats. Both produ" +--- + +This section documents the supervised fine-tuning (SFT) steps registered under `src/nemotron/steps/sft/`. +The two steps target different training libraries and consume different data formats. +Both produce checkpoints you can use as warm-start policies for reinforcement learning alignment. + +## Steps + + + +Supervised fine-tuning with the NeMo AutoModel library against Hugging Face base models and JSON Lines chat datasets. + +--- + +reference + + + + +Supervised fine-tuning on top of NVIDIA Megatron-Bridge for distributed training of the Nemotron model family. + +--- + +reference + + + + + +## Related Documentation + +- [Nemotron Steps CLI Reference](/../cli-reference) covers the shared option set, dotlist overrides, and passthrough arguments. + +- [Choose an SFT Backend](/../../how-to/choose-sft-backend) compares `sft/automodel` and `sft/megatron_bridge`. + +- [Configuration Conventions](/../config-conventions) describes the per-step `config/` layout. diff --git a/docs/fern/pages-vnightly/train-models/reference/sft/megatron-bridge.mdx b/docs/fern/pages-vnightly/train-models/reference/sft/megatron-bridge.mdx new file mode 100644 index 000000000..affc5ea65 --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/reference/sft/megatron-bridge.mdx @@ -0,0 +1,238 @@ +--- +title: "sft/megatron_bridge" +slug: "train-models/reference/sft/megatron-bridge.html" +description: "This step runs supervised fine-tuning (SFT) on a Megatron checkpoint by using NVIDIA Megatron-Bridge. It supports tensor, pipeline, and context parallelism for large-scale distributed training of the " +--- + +This step runs supervised fine-tuning (SFT) on a Megatron checkpoint by using NVIDIA Megatron-Bridge. +It supports tensor, pipeline, and context parallelism for large-scale distributed training of the Nemotron model family. +The step consumes packed Apache Parquet shards produced by `data_prep/sft_packing`. + +## Syntax + +```bash +nemotron steps run sft/megatron_bridge \ + [-c \] \ + [-r \ | -b \] \ + [-d] \ + [--force-squash] \ + [\...] \ + [\...] +``` + +See the [Nemotron Steps CLI Reference](/../cli-reference) for the shared flag set. + +## Configuration Files + +The step ships three configuration files under `src/nemotron/steps/sft/megatron_bridge/config/`. + +| File | Purpose | +| --- | --- | +| default.yaml | Two-node Slurm functional-test configuration. Loads base weights from Hugging Face via AutoBridge with LoRA enabled (peft: lora). Not the programmatic default. | +| nano3.yaml | Production full-SFT configuration for the Nano3 model (peft: null, 1700 training iterations). This is the programmatic default loaded when no -c flag is specified. | +| tiny.yaml | Short validation run against packed Parquet shards on a two-node Lepton profile. | + +Pass the configuration name with `-c`: + +```console +$ nemotron steps run sft/megatron_bridge -c tiny +$ nemotron steps run sft/megatron_bridge -c default +``` + +## Inputs and Outputs + +| Direction | Artifact Type | Required | Description | +| --- | --- | --- | --- | +| Consumes | packed_parquet | Yes | Packed SFT Parquet shards with input_ids and loss_mask columns. Produce these shards with data_prep/sft_packing first. | +| Consumes | checkpoint_megatron | No | A pretrained Megatron checkpoint or a prior Megatron SFT checkpoint. When this input is absent, the step loads weights from the Hugging Face model declared by hf_model_path. | +| Produces | checkpoint_megatron | тАФ | A fine-tuned Megatron distributed checkpoint. | + +## Supported Models + +| Model | Minimum GPUs | Default | Notes | +| --- | --- | --- | --- | +| nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16 | 8 | Yes | Nemotron 3 Nano with 31.6 billion total and 3.2 billion active parameters. This model is the default Nano3 path. | +| nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16 | 32 | No | Nemotron 3 Super with 120.6 billion total and 12.7 billion active parameters. Typical runs start at 32 GPUs. | + +## Step Parameters + +The manifest declares two Nemotron-specific parameters. +Pass them as dotlist overrides. + +### `seq_length=N` + +The training sequence length. +This value must match the `pack_size` you used in `data_prep/sft_packing`. + +Choices: `2048`, `4096`, `8192`, `16384`, `32768`. + +Default: `4096`. + +Example: `seq_length=8192` + +--- + +### `peft=VALUE` + +Selects low-rank adaptation (LoRA) tuning instead of full SFT. +Set this value to `lora` for adapter tuning, or to `null` for full fine-tuning when the model and optimizer states fit in memory. + +Choices: `lora`, `null`. + +Default: `null` (as set in `nano3.yaml`, the programmatic default config). The `default.yaml` functional-test config sets this to `lora`. + +Example: `peft=null` + +Frequently used dotlist overrides drawn from the underlying recipe include the following. + +--- + +### `hf_model_path=` + +The Hugging Face identifier or local path used to load base weights through `AutoBridge` when no Megatron checkpoint is supplied. + +Example: `hf_model_path=nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16` + +--- + +### `tensor_model_parallel_size=N` + +```python +recipe.tensor_model_parallel_size=N +``` + +The tensor-model-parallel degree applied by the Nano3 finetune recipe. + +Example: `recipe.tensor_model_parallel_size=8` + +--- + +### `pipeline_model_parallel_size=N` + +```python +recipe.pipeline_model_parallel_size=N +``` + +The pipeline-model-parallel degree applied by the Nano3 finetune recipe. + +Example: `recipe.pipeline_model_parallel_size=4` + +--- + +### `global_batch_size=N` + +```python +train.global_batch_size=N +``` + +The global batch size for the training loop. + +Example: `train.global_batch_size=128` + +--- + +### `save=PATH` + +```python +checkpoint.save=PATH +``` + +The directory where the Megatron-Bridge recipe writes checkpoints. + +Example: `checkpoint.save=/lustre/runs/nano3-sft/checkpoints` + +## Strategies + +The manifest records the following operator strategies for `sft/megatron_bridge`. + +- When the dataset has fewer than ten thousand records, lower `train.global_batch_size` and raise the number of training iterations to keep optimizer steps useful. + +- When the operator wants LoRA tuning, set `peft=lora` to lower the GPU requirement and shrink the checkpoint footprint. + +- When the operator selects the Super3 model, start from a 32-GPU plan with `tp=8`, `pp=4`, `cp=1`, and verify cluster topology before scaling further. + +- When `seq_length > 32768`, enable hybrid context parallelism. + +- When GPU memory is tight, such as on A100 40 GB hardware, enable activation checkpointing and consider central-processing-unit (CPU) offloading. + +- When you want maximum throughput on H100 hardware, keep packed sequences enabled and tune overlap and sequence-packing settings before scaling up. + +## Common Errors + +--- + +### `tokenizer_mismatch` + +Cause: the tokenizer used during `data_prep/sft_packing` differs from the tokenizer used for training, so token identifiers do not align. + +Recovery: set the `data_prep/sft_packing` tokenizer to match the training model and regenerate the packed Parquet shards. + +--- + +### `oom` + +Cause: GPU memory is exhausted during forward, backward, or optimizer steps. + +Recovery: reduce `train.global_batch_size`, increase parallelism, or reduce `seq_length`. + +--- + +### `missing_packed_data` + +Cause: the training loop cannot find packed Parquet shards at the configured `dataset.nano3_packed_sft_dir`. + +Recovery: run `data_prep/sft_packing` first, or override `dataset.nano3_packed_sft_dir` to point at the directory that holds the packed splits. + +## Command Examples + +Run the tiny validation configuration on the two-node Lepton SFT profile: + +```console +$ nemotron steps run sft/megatron_bridge -c tiny -r lepton_sft_megatron_bridge +``` + +Compile the default configuration without submitting the job: + +```console +$ nemotron steps run sft/megatron_bridge -c default --dry-run +``` + +Submit a detached LoRA run on Slurm with a longer sequence length: + +```console +$ nemotron steps run sft/megatron_bridge -c default -b slurm_sft_megatron_bridge \ + peft=lora \ + seq_length=8192 \ + train.global_batch_size=256 +``` + +Submit an attached run on the Super3 base model with eight-way tensor parallelism and four-way pipeline parallelism: + +```console +$ nemotron steps run sft/megatron_bridge -c default -r lepton_sft_megatron_bridge \ + hf_model_path=nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16 \ + recipe.tensor_model_parallel_size=8 \ + recipe.pipeline_model_parallel_size=4 +``` + +## Related Skill + +Run the `nemotron-sft-megatron-bridge` skill with your agent. + +## Related Documentation + +- [Nemotron Steps CLI Reference](/../cli-reference) covers the shared option set, dotlist overrides, and passthrough arguments. + +- [Choose an SFT Backend](/../../how-to/choose-sft-backend) compares `sft/megatron_bridge` to `sft/automodel`. + +- [Configuration Conventions](/../config-conventions) describes the per-step `config/` layout. + +### Upstream + +- [Megatron-Bridge Repository](https://github.com/NVIDIA-NeMo/Megatron-Bridge) + +- [Megatron-Bridge Documentation](https://docs.nvidia.com/nemo/megatron-bridge/latest/) + +- [Megatron-Bridge Training Entry Points](https://docs.nvidia.com/nemo/megatron-bridge/latest/training/entry-points.html) + +- [Megatron-Bridge Packed Sequences](https://docs.nvidia.com/nemo/megatron-bridge/latest/training/packed-sequences.html) diff --git a/docs/fern/pages-vnightly/train-models/reference/step-catalog.mdx b/docs/fern/pages-vnightly/train-models/reference/step-catalog.mdx new file mode 100644 index 000000000..ac33619bc --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/reference/step-catalog.mdx @@ -0,0 +1,59 @@ +--- +title: "Step Catalog" +slug: "train-models/reference/step-catalog.html" +description: "This page catalogs every training step identifier registered under src/nemotron/steps/ in the sft, peft, rl, and optimize directories. Each row gives the step identifier, the on-disk manifest path, an" +--- + +This page catalogs every training step identifier registered under `src/nemotron/steps/` in the `sft`, `peft`, `rl`, and `optimize` directories. +Each row gives the step identifier, the on-disk manifest path, and the per-step reference page. + +Adjacent preparation and conversion steps do not appear in this catalog. +Those step identifiers include `data_prep/sft_packing`, `data_prep/rl_prep`, and `convert/megatron_to_hf`, and they live under different directories with their own manifests. + +## Supervised Fine-Tuning Steps + +| Step Identifier | Manifest Path | Reference | +| --- | --- | --- | +| sft/automodel | src/nemotron/steps/sft/automodel/step.toml | [sft/automodel](/sft/automodel) | +| sft/megatron_bridge | src/nemotron/steps/sft/megatron_bridge/step.toml | [sft/megatron_bridge](/sft/megatron-bridge) | + +## Parameter-Efficient Fine-Tuning Steps + +| Step Identifier | Manifest Path | Reference | +| --- | --- | --- | +| peft/automodel | src/nemotron/steps/peft/automodel/step.toml | [peft/automodel](/peft/automodel) | +| peft/megatron_bridge | src/nemotron/steps/peft/megatron_bridge/step.toml | [peft/megatron_bridge](/peft/megatron-bridge) | + +## Reinforcement Learning Steps + +| Step Identifier | Manifest Path | Reference | +| --- | --- | --- | +| rl/nemo_rl/dpo | src/nemotron/steps/rl/nemo_rl/dpo/step.toml | [rl/nemo_rl/dpo](/rl/dpo) | +| rl/nemo_rl/rlvr | src/nemotron/steps/rl/nemo_rl/rlvr/step.toml | [rl/nemo_rl/rlvr](/rl/rlvr) | +| rl/nemo_rl/rlhf | src/nemotron/steps/rl/nemo_rl/rlhf/step.toml | [rl/nemo_rl/rlhf](/rl/rlhf) | + +## Optimization Steps + +| Step Identifier | Manifest Path | Reference | +| --- | --- | --- | +| optimize/modelopt/quantize | src/nemotron/steps/optimize/modelopt/quantize/step.toml | [optimize/modelopt/quantize](/optimize/quantize) | +| optimize/modelopt/prune | src/nemotron/steps/optimize/modelopt/prune/step.toml | [optimize/modelopt/prune](/optimize/prune) | +| optimize/modelopt/distill | src/nemotron/steps/optimize/modelopt/distill/step.toml | [optimize/modelopt/distill](/optimize/distill) | + +## List Steps from the Command Line + +This catalog covers the `sft`, `peft`, `rl`, and `optimize` step categories. +Running `nemotron steps list` with no filter returns all registered steps, including data preparation, evaluation, conversion, environment, and other categories not listed here. +Use the `--category`, `--consumes`, and `--produces` filters to narrow the results. + +```console +$ nemotron steps list --category sft +$ nemotron steps list --consumes training_jsonl +$ nemotron steps list --produces checkpoint_megatron --json +``` + +## Related Documentation + +- [Nemotron Steps CLI Reference](/cli-reference) covers the `list`, `show`, and `run` subcommands. + +- [Configuration Conventions](/config-conventions) describes the per-step `config/` layout. diff --git a/docs/fern/pages-vnightly/train-models/using-skill.mdx b/docs/fern/pages-vnightly/train-models/using-skill.mdx new file mode 100644 index 000000000..e9693b6ce --- /dev/null +++ b/docs/fern/pages-vnightly/train-models/using-skill.mdx @@ -0,0 +1,79 @@ +--- +title: "Tips for Model Training with Agents" +slug: "train-models/using-skill.html" +description: "You might want to add instruction following, specialize a model on your domain or product voice, align behavior with preferences after supervised fine tuning, or land on a smaller or faster model thro" +--- + +## Have a Goal in Mind + +You might want to add instruction following, specialize a model on your domain or product voice, align behavior with preferences after supervised fine tuning, or land on a smaller or faster model through distillation, pruning, or quantization. +Those are concrete outcomes to name before you reach for an agent. + +This page helps you get that plan and work efficiently with your agent. +You steer an agent through the *nemotron-customize* skill (`/nemotron-customize`). +The agent can use the skill to produce an explicit series of steps and commands before anything executes. +The full skill contract lives in `skills/nemotron-customize/SKILL.md` at the repository root. + +Use the skill when you have a general direction, but you are unsure how to proceed inside this repository: which steps apply, how artifacts connect, or what YAML shape the runners expect. + +## What to Tell the Agent + +The agent maps your goal to a plan: an ordered set of steps, configs, and commands. +The more grounded the context you give it, the less it has to guessтАФand the less rework you do later. +The lists below use progressive disclosure: start with the short block, then add detail as the session develops. + +### Have Ready Early + +These items keep the first prompts grounded and cut down rework. +The nested lines are example sentences you can paste or adapt; they are not the only valid wording. + +- Desired outcome in plain language, so the agent can narrow the stage chain and success checks. + + - тАЬWe want the model to follow our runbook-style instructions on support tickets without drifting into free-form guesses when the ticket is incomplete.тАЭ + + - тАЬAfter training, reviewers should see fewer policy violations on a fixed red-team prompt set we already use in evaluation.тАЭ + +- Rough stage story when you already know it (for example SFT then alignment), or an explicit note that you want a recommendation, so the agent does not guess your pipeline shape. + + - тАЬWe already ran SFT in another teamтАЩs repo; from here we only need alignment on preference data against that checkpoint.тАЭ + + - тАЬWe do not know the right order; recommend a minimal path from the catalog given our data and hardware.тАЭ + +- Where inputs live, paths or Hugging Face Hub datasets, and what you call the starting weights, so manifests and `consumes` edges can line up without invented paths. + + - тАЬTraining chat lives at `/data/support/train.jsonl` on the shared file system. The evaluation JSONL is next to it under `eval.jsonl`.тАЭ + + - тАЬBase weights are `organization/model-name` on the Hugging Face Hub. We have a local cache under `/scratch/hf-cache`.тАЭ + +- Hardware you schedule against at least at nodes, GPUs per node, and GPU family, so scale and parallelism assumptions stay realistic. + + - тАЬWe can schedule up to four nodes with eight H100 GPUs per node in Lepton for training; prefer fewer nodes if the step supports it cleanly.тАЭ + + - тАЬSlurm jobs must write checkpoints under `/project/checkpoints/$USER/run-id` so retention policies pick them up.тАЭ + +You do not need step identifiers or perfect file formats before you start if you are willing to discover those with the agent in the next block. + +### Fine to Clarify During the Session + +The skill uses an *orient phase* so that you and the agent can tighten these together. + +- How your data layout lines up with what a chosen step expects, using [Data and Checkpoint Formats](/how-to/data-and-checkpoint-formats) and the stepтАЩs `step.toml` as you go. + +- Backend choice inside a family, using [Choose an SFT Backend](/how-to/choose-sft-backend), [Choose a PEFT Backend](/how-to/choose-peft-backend), or [Choose an RL Alignment Step](/how-to/choose-rl-step) when you want a human-readable decision before configs land. + +- Whether the first execution should validate end-to-end execution with a short sample run or target production-scale training, so defaults match intent. + +- Tokenizer, template, and sequence-length consistency across prep and train when the pipeline touches more than one stage. + +### Where to Look When You Are Unsure + +Use the [How-To Guides](/how-to/index) for task-level procedures. +Use [Reference](/reference/index) for naming and configuration conventions. +Use [Explanation](/explanation/index) for how artifacts and libraries fit together. +You can also ask the agent to walk a specific step with `nemotron steps show` once you know its name. + +## Your Role in the Loop + +The skill follows *orient*, *plan*, *act*, and then *verify*. +You answer missing constraints, approve the plan before files change, and check that stage outputs line up with the next stageтАЩs inputs. +`SKILL.md` spells out each phase, file naming, and verification expectations for the whole catalog, not only training. diff --git a/docs/fern/pages-vnightly/translation/explanation/faith-evaluation.mdx b/docs/fern/pages-vnightly/translation/explanation/faith-evaluation.mdx new file mode 100644 index 000000000..f52ee8b85 --- /dev/null +++ b/docs/fern/pages-vnightly/translation/explanation/faith-evaluation.mdx @@ -0,0 +1,74 @@ +--- +title: "FAITH Evaluation Inside Translation" +slug: "translation/explanation/faith-evaluation.html" +description: "This page explains how optional FAITH scoring behaves when faith_eval.enabled is true inside nemotron steps run translate/nemo_curator. FAITH stands for the five quality dimensions the judge scores ag" +--- + +This page explains how optional FAITH scoring behaves when `faith_eval.enabled` is `true` inside `nemotron steps run translate/nemo_curator`. +FAITH stands for the five quality dimensions the judge scores against each translated segment: *Fluency*, *Accuracy*, *Idiomaticity*, *Terminology*, and *Handling of Format*. + +FAITH runs in the same `TranslationStage` invocation as translation. There is no separate CLI only for FAITH scoring. + +## What FAITH Adds + +FAITH scores translation quality segment-by-segment using a large language model (LLM) judge configured alongside your translation backend: + +- `faith_eval.threshold` defines the minimum acceptable average score. The starter default is `2.5`, which you should tune per model. See the next section for what the scale means. + +- FAITH scoring follows the translated segment pairs produced by CuratorтАЩs translation stage for long inputs. + +- `faith_eval.filter_enabled` drops failing rows when `true`, which lets you keep high-confidence shards only. + +## Score Scale + +The FAITH judge scores each of the five dimensions on a one-to-five scale, where one is poor and five is excellent. +The full per-dimension rubric lives in the upstream NeMo Curator prompt at `nemo_curator/stages/text/experimental/translation/prompts/faith_eval.yaml`. +The Fluency band quoted below is representative; the other four dimensions use the same one-to-five shape with dimension-specific wording. + +```text +1. **Fluency (1-5)**: Does the translation read naturally in the target language, free from grammar or syntax errors? + - 1: Very poor fluency, difficult to understand. + - 2: Somewhat fluent but with major grammatical issues. + - 3: Generally fluent with a few errors. + - 4: Mostly fluent but may have minor grammatical issues. + - 5: Perfect grammar, native-like fluency. +``` + +The judge also emits two sentinel values that sit outside the one-to-five scale, quoted here from the same prompt: + +```text +In case there is no translation provided, give -1 to all the categories! +If case of non-applicable score, make the score=0 +``` + +A score of `0` means the dimension does not apply to the row, for example Terminology on a translation that contains no specialized terms. +A score of `-1` means the judge received no translation to evaluate. + +The `faith_avg` column is the mean of the dimensions that scored above zero. +Dimensions marked `0` for тАЬnot applicableтАЭ are excluded from the average, so a translation with no specialized terminology can still earn a perfect `faith_avg` of `5.0`. +If every dimension is `0` or `-1`, `faith_avg` is `0.0`. + +Filtering keeps a row when `faith_avg >= faith_eval.threshold`, with parse failures preserved so reviewers can audit them. +The starter default `2.5` sits between band two, тАЬmajor grammatical issues,тАЭ and band three, тАЬgenerally fluent with a few errors.тАЭ +Treat `2.5` as a noisy-data floor rather than a quality bar. +Raise the threshold when you want a tighter quality gate, for example to `3.5` when you are building a high-confidence parallel corpus. + +## Why an LLM Client Is Always Required + +Whenever `faith_eval.enabled` is `true`, the stage instantiates an OpenAI-compatible client using `server.url`, `server.api_key` or `server.api_key_env`, and `faith_eval.model_name`. If you omit `faith_eval.model_name`, the stage falls back to `server.model`. + +Even if `backend` is `nmt`, `google`, or `aws`, FAITH still issues LLM calls. Plan keys and quotas accordingly. + +## Merge Semantics + +`merge_scores: true` is the default. It attaches FAITH outputs alongside translated columns so reviewers can audit scores without losing structured chat payloads. + +## Related YAML Surface + +See `faith_eval` in [Translation YAML Reference](/../reference/translate-config) and operational recipes in [Run FAITH Evaluation](/../how-to/run-faith-evaluation). + +## Related Pages + +- Where FAITH sits in the pipeline: [Pipeline Overview](/pipeline-overview) + +- Input and output shapes when scores merge or filter: [Input and Output Format](/../reference/io-format) diff --git a/docs/fern/pages-vnightly/translation/explanation/index.mdx b/docs/fern/pages-vnightly/translation/explanation/index.mdx new file mode 100644 index 000000000..8017ad4f5 --- /dev/null +++ b/docs/fern/pages-vnightly/translation/explanation/index.mdx @@ -0,0 +1,46 @@ +--- +title: "Concepts" +slug: "translation/explanation/index.html" +description: "Background on how the translation pipeline fits together, how segmentation behaves, and what FAITH measures. Use these pages when how-to steps refer to behavior you want to understand before changing " +--- + +Background on how the translation pipeline fits together, how segmentation behaves, and what FAITH measures. Use these pages when how-to steps refer to behavior you want to understand before changing defaults. + +Concept-focused explanations for `nemotron steps run translate/nemo_curator` and the `translate/nemo_curator` Curator pipeline. + +## Pipeline Processing + + + +Reader to `TranslationStage` to writer, with an optional FAITH branch. + +--- + +architecture + + + + +Coarse versus fine `segmentation_mode` trade-offs. + +--- + +segmentation + + + + + +## Evaluation Inside Translation + + + +What FAITH captures when `faith_eval.enabled` is true. + +--- + +faith + + + + diff --git a/docs/fern/pages-vnightly/translation/explanation/pipeline-overview.mdx b/docs/fern/pages-vnightly/translation/explanation/pipeline-overview.mdx new file mode 100644 index 000000000..efedb6bc0 --- /dev/null +++ b/docs/fern/pages-vnightly/translation/explanation/pipeline-overview.mdx @@ -0,0 +1,61 @@ +--- +title: "Pipeline Overview" +slug: "translation/explanation/pipeline-overview.html" +description: "This page describes how nemotron steps run translate/nemo_curator moves records from input_path into output_dir by using NVIDIA NeMo Curator staging primitives." +--- + +This page describes how `nemotron steps run translate/nemo_curator` moves records from `input_path` into `output_dir` by using NVIDIA NeMo Curator staging primitives. + +## Architecture + +```mermaid +flowchart LR + A[input_path] --> B[Reader] + B --> C[TranslationStage] + C --> D[Writer] + D --> E[output_dir shards] + C --> F{faith_eval.enabled?} + F -->|yes| G[FAITH scoring LLM] + G --> C + F -->|no| D +``` + +## Reader Stage + +1. Format detection follows `input_format`, which may be `auto`, `jsonl`, or `parquet`. + +2. Paths may be a single file, a glob, or a homogeneous directory of shards. Never mix JSON Lines (JSONL) and Parquet in one directory when `auto` is active. + +## Translation Stage + +`TranslationStage` performs backend-specific translation for every location matched by `text_field`, for example `messages.*.content` wildcards inside chat arrays. + +- `backend` selects `llm`, `nmt`, `google`, or `aws`. + +- `segmentation_mode` chooses coarse versus fine segmentation before translation units leave the stage. + +- `output_mode` controls whether replaced fields, raw metadata, or both appear on each record. + +## Writer Stage + +The writer emits `output_format` shards, either `jsonl` or `parquet`, under `output_dir`. Expect partitioned filenames rather than a single merged file. Downstream packing steps usually consume the directory directly. + +## FAITH Coupling + +When `faith_eval.enabled` is true the stage keeps an OpenAI-compatible client even if `backend` is `nmt`, `google`, or `aws`, because FAITH scoring uses the LLM configured under `server`. You can override that model string with `faith_eval.model_name`. + +## Operational Reminders + +- Translation failures surface as runtime errors from Curator. Rerun with smaller concurrency if providers throttle you. + +- Extremely large single files may require an offline splitting stage. Mirror the guardrails codified in `step.toml`. + +## Related Pages + +- Hands-on first run: [Getting Started With Translation](/../getting-started) + +- Segmentation behavior: [Segmentation](/segmentation) + +- FAITH semantics: [FAITH Evaluation Inside Translation](/faith-evaluation) + +- YAML keyed to this flow: [Translation YAML Reference](/../reference/translate-config) diff --git a/docs/fern/pages-vnightly/translation/explanation/segmentation.mdx b/docs/fern/pages-vnightly/translation/explanation/segmentation.mdx new file mode 100644 index 000000000..f5a04e0e0 --- /dev/null +++ b/docs/fern/pages-vnightly/translation/explanation/segmentation.mdx @@ -0,0 +1,44 @@ +--- +title: "Segmentation" +slug: "translation/explanation/segmentation.html" +description: "This page helps you pick segmentation_mode values that keep translations faithful without chopping structured payloads." +--- + +This page helps you pick `segmentation_mode` values that keep translations faithful without chopping structured payloads. + +## Controls + +| YAML key | Meaning | +| --- | --- | +| segmentation_mode | coarse is the default. It balances throughput while respecting code fences and markup boundaries. fine emits smaller linguistic segments when coarse spans truncate meaning. | +| min_segment_chars | Skips extremely short fragments that harm throughput or confuse backends. The default is 0, which disables filtering. | + +## When Coarse Is Enough + +Start with `segmentation_mode: coarse` when records contain JSON-like strings, tool arguments, or fenced code blocks. Coarse mode tracks reconstruction metadata so `TranslationStage` can rebuild the original nesting after translating natural-language spans. + +## When to Switch to Fine + +Move to `segmentation_mode: fine` when you observe clipped sentences, missing trailing punctuation, or uneven translations inside long paragraphs, and you have confirmed the issue disappears after finer segmentation. + +Fine mode increases API calls or neural machine translation (NMT) batches. Budget concurrency by using `max_concurrent_requests` or backend-specific knobs. + +## Interaction With FAITH + +FAITH scoring is part of CuratorтАЩs translation stage and follows the translated segment pairs produced by the stage, which keeps thresholds interpretable on long documents. + +## Practical Workflow + +1. Run with `coarse` first. + +2. Inspect a handful of difficult rows such as legal text, mixed Markdown, or multilingual snippets. + +3. If boundaries look wrong, toggle `fine` on a slice before scaling up. + +## Related Pages + +- Step-by-step fine mode: [Use Fine Segmentation](/../how-to/use-fine-segmentation) + +- Pipeline context: [Pipeline Overview](/pipeline-overview) + +- FAITH alignment with segments: [FAITH Evaluation Inside Translation](/faith-evaluation) diff --git a/docs/fern/pages-vnightly/translation/getting-started.mdx b/docs/fern/pages-vnightly/translation/getting-started.mdx new file mode 100644 index 000000000..b195c041d --- /dev/null +++ b/docs/fern/pages-vnightly/translation/getting-started.mdx @@ -0,0 +1,604 @@ +--- +title: "Getting Started With Translation" +slug: "translation/getting-started.html" +description: "You will produce translated JSON Lines (JSONL) shards under an output_dir you choose, with FAITH quality scoring applied in the same run. FAITH is the translation-quality scorer name used in NVIDIA Ne" +--- + + + +You will produce translated JSON Lines (JSONL) shards under an `output_dir` you choose, with FAITH quality scoring applied in the same run. FAITH is the translation-quality scorer name used in NVIDIA NeMo Curator documentation. + +This tutorial runs `nemotron steps run translate/nemo_curator` end to end on a small sample file. You use `src/nemotron/steps/translate/nemo_curator/config/default.yaml` and CLI dotlist overrides. + + +Overview + +1. Export `NVIDIA_API_KEY`. + +2. Download the sample `train_sample.jsonl` chat file. + +3. Run `nemotron steps run translate/nemo_curator -c default` with CLI overrides for paths, languages, and `server.model`. + +4. Inspect `output_dir` for translated records. + + Budget roughly five to fifteen minutes depending on network latency and response time from your provider and on corpus size. +The sample contains about one hundred lines. + + + +## Prerequisites + +- Network access to `https://integrate.api.nvidia.com/v1`. + +- `NVIDIA_API_KEY` exported in your shell. + +- For local `uv run` execution with Curator/Ray, export `RAY_ENABLE_UV_RUN_RUNTIME_ENV=0` +so Ray workers reuse the synchronized project environment. + +## Sample Input File + +This translation tutorial uses `train_sample.jsonl` as a compact multi-turn chat dataset. + +```json startLine={1} +{"messages": [{"role": "system", "content": "You are a helpful assistant with access to weather information."}, {"role": "user", "content": "What's the weather in Tokyo?"}, {"role": "assistant", "tool_calls": [{"id": "weather_5854", "type": "function", "function": {"name": "get_weather", "arguments": "{\"location\": \"Tokyo\", \"units\": \"fahrenheit\"}"}}], "content": ""}, {"role": "tool", "tool_call_id": "weather_5854", "content": "{\"temp\": 72, \"condition\": \"sunny\", \"humidity\": 45}"}, {"role": "assistant", "content": "The weather in Tokyo is sunny with a temperature of 72\u00b0F and 45% humidity."}], "tools": [{"type": "function", "function": {"name": "get_weather", "description": "Get current weather for a location", "parameters": {"type": "object", "properties": {"location": {"type": "string"}, "units": {"type": "string"}}, "required": ["location"]}}}]} +{"messages": [{"role": "system", "content": "You are a database assistant."}, {"role": "user", "content": "Find all users from California"}, {"role": "assistant", "tool_calls": [{"id": "db_2329", "type": "function", "function": {"name": "query_database", "arguments": "{\"query\": \"Find all users from California\"}"}}], "content": ""}, {"role": "tool", "tool_call_id": "db_2329", "content": "[{\"id\": 1, \"name\": \"John Doe\", \"state\": \"CA\"}, {\"id\": 5, \"name\": \"Jane Smith\", \"state\": \"CA\"}]"}, {"role": "assistant", "content": "Here's what I found: [{\"id\": 1, \"name\": \"John Doe\", \"state\": \"CA\"}, {\"id\": 5, \"name\": \"Jane Smith\", \"state\": \"CA\"}]"}], "tools": [{"type": "function", "function": {"name": "query_database", "description": "Query the database", "parameters": {"type": "object", "properties": {"query": {"type": "string"}}, "required": ["query"]}}}]} +{"messages": [{"role": "system", "content": "You are a calculator assistant."}, {"role": "user", "content": "What is 156 * 24?"}, {"role": "assistant", "tool_calls": [{"id": "calc_8712", "type": "function", "function": {"name": "calculate", "arguments": "{\"expression\": \"156 * 24\"}"}}], "content": ""}, {"role": "tool", "tool_call_id": "calc_8712", "content": "3744"}, {"role": "assistant", "content": "The result of 156 * 24 is 3744."}], "tools": [{"type": "function", "function": {"name": "calculate", "description": "Perform mathematical calculation", "parameters": {"type": "object", "properties": {"expression": {"type": "string"}}, "required": ["expression"]}}}]} +{"messages": [{"role": "system", "content": "You are a database assistant."}, {"role": "user", "content": "Get product by ID 12345"}, {"role": "assistant", "tool_calls": [{"id": "db_7995", "type": "function", "function": {"name": "query_database", "arguments": "{\"query\": \"Get product by ID 12345\"}"}}], "content": ""}, {"role": "tool", "tool_call_id": "db_7995", "content": "{\"id\": 12345, \"name\": \"Laptop\", \"price\": 999.99}"}, {"role": "assistant", "content": "Here's what I found: {\"id\": 12345, \"name\": \"Laptop\", \"price\": 999.99}"}], "tools": [{"type": "function", "function": {"name": "query_database", "description": "Query the database", "parameters": {"type": "object", "properties": {"query": {"type": "string"}}, "required": ["query"]}}}]} +{"messages": [{"role": "system", "content": "You are a helpful assistant with access to weather information."}, {"role": "user", "content": "What's the weather in Dubai?"}, {"role": "assistant", "tool_calls": [{"id": "weather_8882", "type": "function", "function": {"name": "get_weather", "arguments": "{\"location\": \"Dubai\", \"units\": \"fahrenheit\"}"}}], "content": ""}, {"role": "tool", "tool_call_id": "weather_8882", "content": "{\"temp\": 55, \"condition\": \"rainy\", \"humidity\": 80}"}, {"role": "assistant", "content": "The weather in Dubai is rainy with a temperature of 55\u00b0F and 80% humidity."}], "tools": [{"type": "function", "function": {"name": "get_weather", "description": "Get current weather for a location", "parameters": {"type": "object", "properties": {"location": {"type": "string"}, "units": {"type": "string"}}, "required": ["location"]}}}]} +``` + +## Procedure + +1. Clone the repository, if you havenтАЩt already: + + ```console + $ git clone https://github.com/NVIDIA-NeMo/Nemotron && cd Nemotron + ``` + +1. Synchronize the dependencies: + + ```console + $ uv sync --extra translate + ``` + +1. Download `train_sample.jsonl` from the sample file. + + Save the file in the repository root if you want to match the `input_path` below exactly. If you save it elsewhere, change `input_path` in the commands that follow. + +1. Run the translation stage. + + From the repository root, specify the `default.yaml` config and overrides by using CLI arguments. +Set `server.model` to a model your endpoint serves. +Replace `` with your NVIDIA API key value, or set `NVIDIA_API_KEY` in your environment before running the command. + + ```console + $ export NVIDIA_API_KEY="\" + $ export RAY_ENABLE_UV_RUN_RUNTIME_ENV=0 + + $ uv run --no-sync nemotron steps run translate/nemo_curator -c default \ + input_path="$\{PWD\}/train_sample.jsonl" \ + output_dir=./output/translation-getting-started \ + source_language=en \ + target_language=hi \ + server.model=nvidia/nemotron-3-nano-omni-30b-a3b-reasoning \ + faith_eval.enabled=false \ + faith_eval.filter_enabled=false \ + max_concurrent_requests=4 + ``` + + - `input_path` and `output_dir` replace the placeholders in `default.yaml`. + + - `source_language` and `target_language` must be explicit two-letter language codes from the ISO 639-1 standard, which the International Organization for Standardization publishes. + + The starter file leaves them empty on purpose so you choose the pair at run time. + + - `server.model` is required when `backend` is `llm`. + + The default `server.url` in `default.yaml` is `https://integrate.api.nvidia.com/v1`. + +1. Inspect the output. + + The `output_dir` path holds the Curator writer output when `output_format` is `jsonl`, usually several shard files instead of one consolidated JSONL file. +Spot-check one line. + + ```console + $ find ./output/translation-getting-started -name '*.jsonl' | head -n 1 | xargs head -n 1 | python3 -m json.tool --no-ensure-ascii + ``` + + Translated chat payloads match `text_field` set to `messages.*.content`, `output_mode` set to `both`, and `reconstruct_messages` set to `true` in `default.yaml`. + + ```json startLine={1} + { + "messages": [ + { + "role": "system", + "content": "[рдЖрдк рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕рд╣рд╛рдпрдХ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдореМрд╕рдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдБрдЪ рд╣реИред]" + }, + { + "role": "user", + "content": "[рдЯреЛрдХреНрдпреЛ рдореЗрдВ рдореМрд╕рдо рдХреИрд╕рд╛ рд╣реИ?]" + }, + { + "role": "assistant", + "tool_calls": [ + { + "id": "weather_5854", + "type": "function", + "function": { + "name": "get_weather", + "arguments": "{\"location\": \"Tokyo\", \"units\": \"fahrenheit\"}" + } + } + ], + "content": "" + }, + { + "role": "tool", + "tool_call_id": "weather_5854", + "content": "{\"temp\": 72, \"condition\": \"sunny\", \"humidity\": 45}" + }, + { + "role": "assistant", + "content": "рдЯреЛрдХреНрдпреЛ рдореЗрдВ рдореМрд╕рдо рдзреВрдкрднрд░рд╛ рд╣реИ, 72┬░F рдХрд╛ рддрд╛рдкрдорд╛рди рдФрд░ 45% рдЖрд░реНрджреНрд░рддрд╛ рдХреЗ рд╕рд╛рдеред" + } + ], + "tools": [ + { + "type": "function", + "function": { + "name": "get_weather", + "description": "Get current weather for a location", + "parameters": { + "type": "object", + "properties": { + "location": { + "type": "string" + }, + "units": { + "type": "string" + } + }, + "required": [ + "location" + ] + } + } + } + ], + "translation_time": 8.9217984676, + "translation_errors": "", + "translated_text": [ + { + "role": "system", + "content": "[рдЖрдк рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕рд╣рд╛рдпрдХ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдореМрд╕рдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдБрдЪ рд╣реИред]" + }, + { + "role": "user", + "content": "[рдЯреЛрдХреНрдпреЛ рдореЗрдВ рдореМрд╕рдо рдХреИрд╕рд╛ рд╣реИ?]" + }, + { + "role": "assistant", + "tool_calls": [ + { + "id": "weather_5854", + "type": "function", + "function": { + "name": "get_weather", + "arguments": "{\"location\": \"Tokyo\", \"units\": \"fahrenheit\"}" + } + } + ], + "content": "" + }, + { + "role": "tool", + "tool_call_id": "weather_5854", + "content": "{\"temp\": 72, \"condition\": \"sunny\", \"humidity\": 45}" + }, + { + "role": "assistant", + "content": "рдЯреЛрдХреНрдпреЛ рдореЗрдВ рдореМрд╕рдо рдзреВрдкрднрд░рд╛ рд╣реИ, 72┬░F рдХрд╛ рддрд╛рдкрдорд╛рди рдФрд░ 45% рдЖрд░реНрджреНрд░рддрд╛ рдХреЗ рд╕рд╛рдеред" + } + ], + "translation_metadata": "{\"target_lang\": \"hi\", \"translation\": {\"content\": [\"[рдЖрдк рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕рд╣рд╛рдпрдХ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдореМрд╕рдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдБрдЪ рд╣реИред]\", \"[рдЯреЛрдХреНрдпреЛ рдореЗрдВ рдореМрд╕рдо рдХреИрд╕рд╛ рд╣реИ?]\", \"\", \"{\\\"temp\\\": 72, \\\"condition\\\": \\\"sunny\\\", \\\"humidity\\\": 45}\", \"рдЯреЛрдХреНрдпреЛ рдореЗрдВ рдореМрд╕рдо рдзреВрдкрднрд░рд╛ рд╣реИ, 72┬░F рдХрд╛ рддрд╛рдкрдорд╛рди рдФрд░ 45% рдЖрд░реНрджреНрд░рддрд╛ рдХреЗ рд╕рд╛рдеред\"]}, \"segmented_translation\": {\"content\": [{\"src\": \"You are a helpful assistant with access to weather information.\", \"tgt\": \"[рдЖрдк рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕рд╣рд╛рдпрдХ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдореМрд╕рдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдБрдЪ рд╣реИред]\"}, {\"src\": \"What's the weather in Tokyo?\", \"tgt\": \"[рдЯреЛрдХреНрдпреЛ рдореЗрдВ рдореМрд╕рдо рдХреИрд╕рд╛ рд╣реИ?]\"}, {\"src\": \"The weather in Tokyo is sunny with a temperature of 72┬░F and 45% humidity.\", \"tgt\": \"рдЯреЛрдХреНрдпреЛ рдореЗрдВ рдореМрд╕рдо рдзреВрдкрднрд░рд╛ рд╣реИ, 72┬░F рдХрд╛ рддрд╛рдкрдорд╛рди рдФрд░ 45% рдЖрд░реНрджреНрд░рддрд╛ рдХреЗ рд╕рд╛рдеред\"}]}}", + "translated_messages": "[{\"role\": \"system\", \"content\": \"[рдЖрдк рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕рд╣рд╛рдпрдХ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдореМрд╕рдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдБрдЪ рд╣реИред]\"}, {\"role\": \"user\", \"content\": \"[рдЯреЛрдХреНрдпреЛ рдореЗрдВ рдореМрд╕рдо рдХреИрд╕рд╛ рд╣реИ?]\"}, {\"role\": \"assistant\", \"tool_calls\": [{\"id\": \"weather_5854\", \"type\": \"function\", \"function\": {\"name\": \"get_weather\", \"arguments\": \"{\\\"location\\\": \\\"Tokyo\\\", \\\"units\\\": \\\"fahrenheit\\\"}\"}}], \"content\": \"\"}, {\"role\": \"tool\", \"tool_call_id\": \"weather_5854\", \"content\": \"{\\\"temp\\\": 72, \\\"condition\\\": \\\"sunny\\\", \\\"humidity\\\": 45}\"}, {\"role\": \"assistant\", \"content\": \"рдЯреЛрдХреНрдпреЛ рдореЗрдВ рдореМрд╕рдо рдзреВрдкрднрд░рд╛ рд╣реИ, 72┬░F рдХрд╛ рддрд╛рдкрдорд╛рди рдФрд░ 45% рдЖрд░реНрджреНрд░рддрд╛ рдХреЗ рд╕рд╛рдеред\"}]" + } + { + "messages": [ + { + "role": "system", + "content": "рдЖрдк рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред" + }, + { + "role": "user", + "content": "рд╕рднреА рдХреИрд▓рд┐рдлреЛрд░реНрдирд┐рдпрд╛ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЦреЛрдЬреЗрдВ" + }, + { + "role": "assistant", + "tool_calls": [ + { + "id": "db_2329", + "type": "function", + "function": { + "name": "query_database", + "arguments": "{\"query\": \"Find all users from California\"}" + } + } + ], + "content": "" + }, + { + "role": "tool", + "tool_call_id": "db_2329", + "content": "[{\"id\": 1, \"name\": \"John Doe\", \"state\": \"CA\"}, {\"id\": 5, \"name\": \"Jane Smith\", \"state\": \"CA\"}]" + }, + { + "role": "assistant", + "content": "рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдорд┐рд▓рд╛: [{\"id\": 1, \"name\": \"John Doe\", \"state\": \"CA\"}, {\"id\": 5, \"name\": \"Jane Smith\", \"state\": \"CA\"}]" + } + ], + "tools": [ + { + "type": "function", + "function": { + "name": "query_database", + "description": "Query the database", + "parameters": { + "type": "object", + "properties": { + "query": { + "type": "string" + } + }, + "required": [ + "query" + ] + } + } + } + ], + "translation_time": 18.4458503723, + "translation_errors": "", + "translated_text": [ + { + "role": "system", + "content": "рдЖрдк рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред" + }, + { + "role": "user", + "content": "рд╕рднреА рдХреИрд▓рд┐рдлреЛрд░реНрдирд┐рдпрд╛ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЦреЛрдЬреЗрдВ" + }, + { + "role": "assistant", + "tool_calls": [ + { + "id": "db_2329", + "type": "function", + "function": { + "name": "query_database", + "arguments": "{\"query\": \"Find all users from California\"}" + } + } + ], + "content": "" + }, + { + "role": "tool", + "tool_call_id": "db_2329", + "content": "[{\"id\": 1, \"name\": \"John Doe\", \"state\": \"CA\"}, {\"id\": 5, \"name\": \"Jane Smith\", \"state\": \"CA\"}]" + }, + { + "role": "assistant", + "content": "рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдорд┐рд▓рд╛: [{\"id\": 1, \"name\": \"John Doe\", \"state\": \"CA\"}, {\"id\": 5, \"name\": \"Jane Smith\", \"state\": \"CA\"}]" + } + ], + "translation_metadata": "{\"target_lang\": \"hi\", \"translation\": {\"content\": [\"рдЖрдк рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред\", \"рд╕рднреА рдХреИрд▓рд┐рдлреЛрд░реНрдирд┐рдпрд╛ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЦреЛрдЬреЗрдВ\", \"\", \"[{\\\"id\\\": 1, \\\"name\\\": \\\"John Doe\\\", \\\"state\\\": \\\"CA\\\"}, {\\\"id\\\": 5, \\\"name\\\": \\\"Jane Smith\\\", \\\"state\\\": \\\"CA\\\"}]\", \"рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдорд┐рд▓рд╛: [{\\\"id\\\": 1, \\\"name\\\": \\\"John Doe\\\", \\\"state\\\": \\\"CA\\\"}, {\\\"id\\\": 5, \\\"name\\\": \\\"Jane Smith\\\", \\\"state\\\": \\\"CA\\\"}]\"]}, \"segmented_translation\": {\"content\": [{\"src\": \"You are a database assistant.\", \"tgt\": \"рдЖрдк рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред\"}, {\"src\": \"Find all users from California\", \"tgt\": \"рд╕рднреА рдХреИрд▓рд┐рдлреЛрд░реНрдирд┐рдпрд╛ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЦреЛрдЬреЗрдВ\"}, {\"src\": \"Here's what I found: [{\\\"id\\\": 1, \\\"name\\\": \\\"John Doe\\\", \\\"state\\\": \\\"CA\\\"}, {\\\"id\\\": 5, \\\"name\\\": \\\"Jane Smith\\\", \\\"state\\\": \\\"CA\\\"}]\", \"tgt\": \"рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдорд┐рд▓рд╛: [{\\\"id\\\": 1, \\\"name\\\": \\\"John Doe\\\", \\\"state\\\": \\\"CA\\\"}, {\\\"id\\\": 5, \\\"name\\\": \\\"Jane Smith\\\", \\\"state\\\": \\\"CA\\\"}]\"}]}}", + "translated_messages": "[{\"role\": \"system\", \"content\": \"рдЖрдк рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред\"}, {\"role\": \"user\", \"content\": \"рд╕рднреА рдХреИрд▓рд┐рдлреЛрд░реНрдирд┐рдпрд╛ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЦреЛрдЬреЗрдВ\"}, {\"role\": \"assistant\", \"tool_calls\": [{\"id\": \"db_2329\", \"type\": \"function\", \"function\": {\"name\": \"query_database\", \"arguments\": \"{\\\"query\\\": \\\"Find all users from California\\\"}\"}}], \"content\": \"\"}, {\"role\": \"tool\", \"tool_call_id\": \"db_2329\", \"content\": \"[{\\\"id\\\": 1, \\\"name\\\": \\\"John Doe\\\", \\\"state\\\": \\\"CA\\\"}, {\\\"id\\\": 5, \\\"name\\\": \\\"Jane Smith\\\", \\\"state\\\": \\\"CA\\\"}]\"}, {\"role\": \"assistant\", \"content\": \"рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдорд┐рд▓рд╛: [{\\\"id\\\": 1, \\\"name\\\": \\\"John Doe\\\", \\\"state\\\": \\\"CA\\\"}, {\\\"id\\\": 5, \\\"name\\\": \\\"Jane Smith\\\", \\\"state\\\": \\\"CA\\\"}]\"}]" + } + { + "messages": [ + { + "role": "system", + "content": "[рдЖрдк рдПрдХ рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред]" + }, + { + "role": "user", + "content": "[рдХреНрдпрд╛ 156 * 24 рд╣реИ?]" + }, + { + "role": "assistant", + "tool_calls": [ + { + "id": "calc_8712", + "type": "function", + "function": { + "name": "calculate", + "arguments": "{\"expression\": \"156 * 24\"}" + } + } + ], + "content": "" + }, + { + "role": "tool", + "tool_call_id": "calc_8712", + "content": "3744" + }, + { + "role": "assistant", + "content": "156 * 24 рдХрд╛ рдкрд░рд┐рдгрд╛рдо 3744 рд╣реИред" + } + ], + "tools": [ + { + "type": "function", + "function": { + "name": "calculate", + "description": "Perform mathematical calculation", + "parameters": { + "type": "object", + "properties": { + "expression": { + "type": "string" + } + }, + "required": [ + "expression" + ] + } + } + } + ], + "translation_time": 34.5283660889, + "translation_errors": "", + "translated_text": [ + { + "role": "system", + "content": "[рдЖрдк рдПрдХ рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред]" + }, + { + "role": "user", + "content": "[рдХреНрдпрд╛ 156 * 24 рд╣реИ?]" + }, + { + "role": "assistant", + "tool_calls": [ + { + "id": "calc_8712", + "type": "function", + "function": { + "name": "calculate", + "arguments": "{\"expression\": \"156 * 24\"}" + } + } + ], + "content": "" + }, + { + "role": "tool", + "tool_call_id": "calc_8712", + "content": "3744" + }, + { + "role": "assistant", + "content": "156 * 24 рдХрд╛ рдкрд░рд┐рдгрд╛рдо 3744 рд╣реИред" + } + ], + "translation_metadata": "{\"target_lang\": \"hi\", \"translation\": {\"content\": [\"[рдЖрдк рдПрдХ рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред]\", \"[рдХреНрдпрд╛ 156 * 24 рд╣реИ?]\", \"\", \"3744\", \"156 * 24 рдХрд╛ рдкрд░рд┐рдгрд╛рдо 3744 рд╣реИред\"]}, \"segmented_translation\": {\"content\": [{\"src\": \"You are a calculator assistant.\", \"tgt\": \"[рдЖрдк рдПрдХ рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред]\"}, {\"src\": \"What is 156 * 24?\", \"tgt\": \"[рдХреНрдпрд╛ 156 * 24 рд╣реИ?]\"}, {\"src\": \"The result of 156 * 24 is 3744.\", \"tgt\": \"156 * 24 рдХрд╛ рдкрд░рд┐рдгрд╛рдо 3744 рд╣реИред\"}]}}", + "translated_messages": "[{\"role\": \"system\", \"content\": \"[рдЖрдк рдПрдХ рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред]\"}, {\"role\": \"user\", \"content\": \"[рдХреНрдпрд╛ 156 * 24 рд╣реИ?]\"}, {\"role\": \"assistant\", \"tool_calls\": [{\"id\": \"calc_8712\", \"type\": \"function\", \"function\": {\"name\": \"calculate\", \"arguments\": \"{\\\"expression\\\": \\\"156 * 24\\\"}\"}}], \"content\": \"\"}, {\"role\": \"tool\", \"tool_call_id\": \"calc_8712\", \"content\": \"3744\"}, {\"role\": \"assistant\", \"content\": \"156 * 24 рдХрд╛ рдкрд░рд┐рдгрд╛рдо 3744 рд╣реИред\"}]" + } + { + "messages": [ + { + "role": "system", + "content": "[рдЖрдк рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред]" + }, + { + "role": "user", + "content": "3. Copy the content as-is.\n```python\ndef calculate_sum(a, b):\n return a + b\n```" + }, + { + "role": "assistant", + "tool_calls": [ + { + "id": "db_7995", + "type": "function", + "function": { + "name": "query_database", + "arguments": "{\"query\": \"Get product by ID 12345\"}" + } + } + ], + "content": "" + }, + { + "role": "tool", + "tool_call_id": "db_7995", + "content": "{\"id\": 12345, \"name\": \"Laptop\", \"price\": 999.99}" + }, + { + "role": "assistant", + "content": "рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдорд┐рд▓рд╛: {\"id\": 12345, \"name\": \"Laptop\", \"price\": 999.99}" + } + ], + "tools": [ + { + "type": "function", + "function": { + "name": "query_database", + "description": "Query the database", + "parameters": { + "type": "object", + "properties": { + "query": { + "type": "string" + } + }, + "required": [ + "query" + ] + } + } + } + ], + "translation_time": 39.8996043205, + "translation_errors": "", + "translated_text": [ + { + "role": "system", + "content": "[рдЖрдк рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред]" + }, + { + "role": "user", + "content": "3. Copy the content as-is.\n```python\ndef calculate_sum(a, b):\n return a + b\n```" + }, + { + "role": "assistant", + "tool_calls": [ + { + "id": "db_7995", + "type": "function", + "function": { + "name": "query_database", + "arguments": "{\"query\": \"Get product by ID 12345\"}" + } + } + ], + "content": "" + }, + { + "role": "tool", + "tool_call_id": "db_7995", + "content": "{\"id\": 12345, \"name\": \"Laptop\", \"price\": 999.99}" + }, + { + "role": "assistant", + "content": "рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдорд┐рд▓рд╛: {\"id\": 12345, \"name\": \"Laptop\", \"price\": 999.99}" + } + ], + "translation_metadata": "{\"target_lang\": \"hi\", \"translation\": {\"content\": [\"[рдЖрдк рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред]\", \"3. Copy the content as-is.\\n```python\\ndef calculate_sum(a, b):\\n return a + b\\n```\", \"\", \"{\\\"id\\\": 12345, \\\"name\\\": \\\"Laptop\\\", \\\"price\\\": 999.99}\", \"рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдорд┐рд▓рд╛: {\\\"id\\\": 12345, \\\"name\\\": \\\"Laptop\\\", \\\"price\\\": 999.99}\"]}, \"segmented_translation\": {\"content\": [{\"src\": \"You are a database assistant.\", \"tgt\": \"[рдЖрдк рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред]\"}, {\"src\": \"Get product by ID 12345\", \"tgt\": \"3. Copy the content as-is.\\n```python\\ndef calculate_sum(a, b):\\n return a + b\\n```\"}, {\"src\": \"Here's what I found: {\\\"id\\\": 12345, \\\"name\\\": \\\"Laptop\\\", \\\"price\\\": 999.99}\", \"tgt\": \"рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдорд┐рд▓рд╛: {\\\"id\\\": 12345, \\\"name\\\": \\\"Laptop\\\", \\\"price\\\": 999.99}\"}]}}", + "translated_messages": "[{\"role\": \"system\", \"content\": \"[рдЖрдк рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред]\"}, {\"role\": \"user\", \"content\": \"3. Copy the content as-is.\\n```python\\ndef calculate_sum(a, b):\\n return a + b\\n```\"}, {\"role\": \"assistant\", \"tool_calls\": [{\"id\": \"db_7995\", \"type\": \"function\", \"function\": {\"name\": \"query_database\", \"arguments\": \"{\\\"query\\\": \\\"Get product by ID 12345\\\"}\"}}], \"content\": \"\"}, {\"role\": \"tool\", \"tool_call_id\": \"db_7995\", \"content\": \"{\\\"id\\\": 12345, \\\"name\\\": \\\"Laptop\\\", \\\"price\\\": 999.99}\"}, {\"role\": \"assistant\", \"content\": \"рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдорд┐рд▓рд╛: {\\\"id\\\": 12345, \\\"name\\\": \\\"Laptop\\\", \\\"price\\\": 999.99}\"}]" + } + { + "messages": [ + { + "role": "system", + "content": "рдЖрдк рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕рд╣рд╛рдпрдХ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдореМрд╕рдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдБрдЪ рд╣реИред" + }, + { + "role": "user", + "content": "[рджреБрдмрдИ рдореЗрдВ рдореМрд╕рдо рдХреИрд╕рд╛ рд╣реИ?]" + }, + { + "role": "assistant", + "tool_calls": [ + { + "id": "weather_8882", + "type": "function", + "function": { + "name": "get_weather", + "arguments": "{\"location\": \"Dubai\", \"units\": \"fahrenheit\"}" + } + } + ], + "content": "" + }, + { + "role": "tool", + "tool_call_id": "weather_8882", + "content": "{\"temp\": 55, \"condition\": \"rainy\", \"humidity\": 80}" + }, + { + "role": "assistant", + "content": "рджреБрдмрдИ рдореЗрдВ рдореМрд╕рдо рдмрд╛рд░рд┐рд╢ рдХреЗ рд╕рд╛рде рд╣реИ, рддрд╛рдкрдорд╛рди 55┬░F рдФрд░ 80% рдЖрд░реНрджреНрд░рддрд╛ рдХреЗ рд╕рд╛рдеред" + } + ], + "tools": [ + { + "type": "function", + "function": { + "name": "get_weather", + "description": "Get current weather for a location", + "parameters": { + "type": "object", + "properties": { + "location": { + "type": "string" + }, + "units": { + "type": "string" + } + }, + "required": [ + "location" + ] + } + } + } + ], + "translation_time": 50.0045132637, + "translation_errors": "", + "translated_text": [ + { + "role": "system", + "content": "рдЖрдк рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕рд╣рд╛рдпрдХ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдореМрд╕рдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдБрдЪ рд╣реИред" + }, + { + "role": "user", + "content": "[рджреБрдмрдИ рдореЗрдВ рдореМрд╕рдо рдХреИрд╕рд╛ рд╣реИ?]" + }, + { + "role": "assistant", + "tool_calls": [ + { + "id": "weather_8882", + "type": "function", + "function": { + "name": "get_weather", + "arguments": "{\"location\": \"Dubai\", \"units\": \"fahrenheit\"}" + } + } + ], + "content": "" + }, + { + "role": "tool", + "tool_call_id": "weather_8882", + "content": "{\"temp\": 55, \"condition\": \"rainy\", \"humidity\": 80}" + }, + { + "role": "assistant", + "content": "рджреБрдмрдИ рдореЗрдВ рдореМрд╕рдо рдмрд╛рд░рд┐рд╢ рдХреЗ рд╕рд╛рде рд╣реИ, рддрд╛рдкрдорд╛рди 55┬░F рдФрд░ 80% рдЖрд░реНрджреНрд░рддрд╛ рдХреЗ рд╕рд╛рдеред" + } + ], + "translation_metadata": "{\"target_lang\": \"hi\", \"translation\": {\"content\": [\"рдЖрдк рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕рд╣рд╛рдпрдХ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдореМрд╕рдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдБрдЪ рд╣реИред\", \"[рджреБрдмрдИ рдореЗрдВ рдореМрд╕рдо рдХреИрд╕рд╛ рд╣реИ?]\", \"\", \"{\\\"temp\\\": 55, \\\"condition\\\": \\\"rainy\\\", \\\"humidity\\\": 80}\", \"рджреБрдмрдИ рдореЗрдВ рдореМрд╕рдо рдмрд╛рд░рд┐рд╢ рдХреЗ рд╕рд╛рде рд╣реИ, рддрд╛рдкрдорд╛рди 55┬░F рдФрд░ 80% рдЖрд░реНрджреНрд░рддрд╛ рдХреЗ рд╕рд╛рдеред\"]}, \"segmented_translation\": {\"content\": [{\"src\": \"You are a helpful assistant with access to weather information.\", \"tgt\": \"рдЖрдк рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕рд╣рд╛рдпрдХ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдореМрд╕рдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдБрдЪ рд╣реИред\"}, {\"src\": \"What's the weather in Dubai?\", \"tgt\": \"[рджреБрдмрдИ рдореЗрдВ рдореМрд╕рдо рдХреИрд╕рд╛ рд╣реИ?]\"}, {\"src\": \"The weather in Dubai is rainy with a temperature of 55┬░F and 80% humidity.\", \"tgt\": \"рджреБрдмрдИ рдореЗрдВ рдореМрд╕рдо рдмрд╛рд░рд┐рд╢ рдХреЗ рд╕рд╛рде рд╣реИ, рддрд╛рдкрдорд╛рди 55┬░F рдФрд░ 80% рдЖрд░реНрджреНрд░рддрд╛ рдХреЗ рд╕рд╛рдеред\"}]}}", + "translated_messages": "[{\"role\": \"system\", \"content\": \"рдЖрдк рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕рд╣рд╛рдпрдХ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдореМрд╕рдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдБрдЪ рд╣реИред\"}, {\"role\": \"user\", \"content\": \"[рджреБрдмрдИ рдореЗрдВ рдореМрд╕рдо рдХреИрд╕рд╛ рд╣реИ?]\"}, {\"role\": \"assistant\", \"tool_calls\": [{\"id\": \"weather_8882\", \"type\": \"function\", \"function\": {\"name\": \"get_weather\", \"arguments\": \"{\\\"location\\\": \\\"Dubai\\\", \\\"units\\\": \\\"fahrenheit\\\"}\"}}], \"content\": \"\"}, {\"role\": \"tool\", \"tool_call_id\": \"weather_8882\", \"content\": \"{\\\"temp\\\": 55, \\\"condition\\\": \\\"rainy\\\", \\\"humidity\\\": 80}\"}, {\"role\": \"assistant\", \"content\": \"рджреБрдмрдИ рдореЗрдВ рдореМрд╕рдо рдмрд╛рд░рд┐рд╢ рдХреЗ рд╕рд╛рде рд╣реИ, рддрд╛рдкрдорд╛рди 55┬░F рдФрд░ 80% рдЖрд░реНрджреНрд░рддрд╛ рдХреЗ рд╕рд╛рдеред\"}]" + } + ``` + +1. Optional: Print the merged configuration without running the stage. + + Pass `--dry-run` or `-d` so Curator does not execute the pipeline. + + ```console + $ export RAY_ENABLE_UV_RUN_RUNTIME_ENV=0 + + $ uv run --no-sync nemotron steps run translate/nemo_curator -d -c default \ + input_path=./train_sample.jsonl \ + output_dir=./output/translation-getting-started \ + source_language=en \ + target_language=hi \ + server.model=nvidia/nemotron-3-nano-omni-30b-a3b-reasoning + ``` + +## Next Steps + +- Deeper behavior of FAITH in this pipeline: [FAITH Evaluation Inside Translation](/explanation/faith-evaluation) + +- Backend tuning: [Run LLM Translation](/how-to/run-llm-translation) + +- Field wiring and `output_mode`: [Configure Fields and Output](/how-to/configure-fields-and-output) + +- FAITH thresholds and filtering: [Run FAITH Evaluation](/how-to/run-faith-evaluation) + +- CLI flags and overrides: [CLI Reference for Translation](/reference/cli-translation) diff --git a/docs/fern/pages-vnightly/translation/how-to/configure-fields-and-output.mdx b/docs/fern/pages-vnightly/translation/how-to/configure-fields-and-output.mdx new file mode 100644 index 000000000..b2c34ea43 --- /dev/null +++ b/docs/fern/pages-vnightly/translation/how-to/configure-fields-and-output.mdx @@ -0,0 +1,49 @@ +--- +title: "Configure Fields and Output" +slug: "translation/how-to/configure-fields-and-output.html" +description: "Use this guide when you need to align text_field, output_mode, reconstruction flags, and formats with your dataset schema before or after a first run." +--- + +Use this guide when you need to align `text_field`, `output_mode`, reconstruction flags, and formats with your dataset schema before or after a first run. + +For a guided first invocation, see [Getting Started With Translation](/../getting-started). + +## Choosing `text_field` + +- Chat corpora in OpenAI layout typically use `messages.*.content` so every message `content` entry is translated consistently. + +- Plain documents might use a single column such as `article_body`. Omit wildcards when the schema is flat. + +## Outputs + +| YAML key | Behavior | +| --- | --- | +| output_field / translation_column | Control column names used when emitting translated strings. The default is translated_text. | +| output_mode | replaced overwrites source strings, raw preserves originals plus metadata, and both keeps audit trails. The starter default is both. | +| merge_scores | Keeps FAITH outputs adjacent to translations when scoring runs. | +| reconstruct_messages, messages_field, messages_content_field | Enable faithful reconstructions of chat arrays. These default to true for standard messages and content layouts. | + +## Formats + +Set `input_format` when automatic probing cannot distinguish ambiguous globs. Align `output_format` with downstream packing expectations; values are `jsonl` or `parquet`. + +## CLI Overrides + +You can override any YAML key with dotlists: + +```bash +uv run nemotron steps run translate/nemo_curator -c default \ + text_field=messages.*.content \ + output_mode=both \ + reconstruct_messages=true \ + input_path=/path/to/chat.jsonl \ + output_dir=/path/to/out \ + source_language=en \ + target_language=fr +``` + +## Related Pages + +- Schema patterns: [Input and Output Format](/../reference/io-format) + +- Segmentation interactions: [Use Fine Segmentation](/use-fine-segmentation) diff --git a/docs/fern/pages-vnightly/translation/how-to/index.mdx b/docs/fern/pages-vnightly/translation/how-to/index.mdx new file mode 100644 index 000000000..9ec7136a6 --- /dev/null +++ b/docs/fern/pages-vnightly/translation/how-to/index.mdx @@ -0,0 +1,91 @@ +--- +title: "How-To Guides" +slug: "translation/how-to/index.html" +description: "This section has task-focused procedures for changing backends, wiring fields, tuning segmentation, and adjusting FAITH." +--- + +This section has task-focused procedures for changing backends, wiring fields, tuning segmentation, and adjusting FAITH. + +For copy-paste prompts and habits when you work with a coding agent, read [Tips for Translation With Agents](/../using-skills) first. +Start with [Getting Started With Translation](/../getting-started) if you have not run the step yet. + +Focused procedures for `nemotron steps run translate/nemo_curator`. + +## Run Translation + + + +OpenAI-compatible servers, hosted or on-prem. + +--- + +backend=llm + + + + +Self-hosted `POST /translate` microservices. + +--- + +backend=nmt + + + + +Managed cloud translation APIs. + +--- + +backend=google|aws + + + + + +## Configure and Tune + + + +Wildcards, `output_mode`, chat reconstruction. + +--- + +schema + + + + +Switch `segmentation_mode` deliberately. + +--- + +segmentation + + + + + +## FAITH Quality Gates + + + +Thresholds, filtering, model overrides. + +--- + +faith + + + + + +```mermaid +graph LR + A[Prepare YAML + env] --> B[nemotron steps run translate/nemo_curator] + B --> C{Need FAITH?} + C -->|yes| D[Tune faith_eval] + C -->|no| E[Disable faith_eval] + D --> B + E --> B +``` diff --git a/docs/fern/pages-vnightly/translation/how-to/run-faith-evaluation.mdx b/docs/fern/pages-vnightly/translation/how-to/run-faith-evaluation.mdx new file mode 100644 index 000000000..af1e8915b --- /dev/null +++ b/docs/fern/pages-vnightly/translation/how-to/run-faith-evaluation.mdx @@ -0,0 +1,59 @@ +--- +title: "Run FAITH Evaluation" +slug: "translation/how-to/run-faith-evaluation.html" +description: "Use this guide when you need to tune thresholds, filtering, or scorer models for FAITH inside nemotron steps run translate/nemo_curator without a separate evaluation command." +--- + +Use this guide when you need to tune thresholds, filtering, or scorer models for FAITH inside `nemotron steps run translate/nemo_curator` without a separate evaluation command. + +FAITH runs inside `TranslationStage` whenever `faith_eval.enabled` is `true`. The `default.yaml` starter profile ships with FAITH enabled. For how FAITH couples to non-LLM backends, see [FAITH Evaluation Inside Translation](/../explanation/faith-evaluation). + +## Essential Knobs + +| YAML path | Purpose | +| --- | --- | +| faith_eval.enabled | Master toggle. Set false when you only need raw translation. | +| faith_eval.threshold | Average score floor. Rows failing the threshold are dropped when filter_enabled is true. | +| faith_eval.filter_enabled | Enables or disables removing low-scoring rows. | +| faith_eval.model_name | Overrides server.model for scoring-only workloads. | +| faith_eval.generation_config | Optional OpenAI-compatible generation settings for the FAITH scorer. | +| faith_eval.max_concurrent_requests | Optional scorer-side concurrency limit. | + +## LLM Credentials + +FAITH always requires the OpenAI-compatible `server` configuration. Set `NVIDIA_API_KEY` first, for example by replacing `` below. + +```bash +export NVIDIA_API_KEY="\" +uv run nemotron steps run translate/nemo_curator -c default \ + faith_eval.enabled=true \ + faith_eval.threshold=3.0 \ + faith_eval.filter_enabled=true \ + server.model=YOUR_LLM_MODEL_ID \ + input_path=/path/to/chat.jsonl \ + output_dir=/path/to/out \ + source_language=en \ + target_language=hi +``` + +FAITH scoring is part of CuratorтАЩs translation stage and is aligned to the translated segments produced by the stage. There is no separate `faith_eval.segment_level` switch in this Nemotron config. + +## Disable FAITH Temporarily + +```bash +uv run nemotron steps run translate/nemo_curator -c default \ + faith_eval.enabled=false \ + input_path=/path/to/chat.jsonl \ + output_dir=/path/to/out \ + source_language=en \ + target_language=hi \ + server.model=YOUR_LLM_MODEL_ID +``` + +Even with FAITH off, `backend=llm` still needs `server.model` for translation itself. + +## Related Pages + +- Concept primer: [FAITH Evaluation Inside Translation](/../explanation/faith-evaluation) + +- Full YAML reference: [Translation YAML Reference](/../reference/translate-config) diff --git a/docs/fern/pages-vnightly/translation/how-to/run-google-aws-translation.mdx b/docs/fern/pages-vnightly/translation/how-to/run-google-aws-translation.mdx new file mode 100644 index 000000000..19cf00821 --- /dev/null +++ b/docs/fern/pages-vnightly/translation/how-to/run-google-aws-translation.mdx @@ -0,0 +1,51 @@ +--- +title: "Run Google or AWS Translation" +slug: "translation/how-to/run-google-aws-translation.html" +description: "Use this guide when backend is google or aws and you want managed cloud translation with credentials supplied outside YAML files." +--- + +Use this guide when `backend` is `google` or `aws` and you want managed cloud translation with credentials supplied outside YAML files. + +## Shared Practices + +- Inject credentials through provider-standard environment variables or instance roles. Do not paste secrets into `default.yaml`. + +- Keep `google.project_id`, `google.location`, and `google.api_version` aligned with your Google Cloud Platform (GCP) setup. API version `v3` requires project metadata. + +- Pin `aws.region` near your data residency requirements on Amazon Web Services (AWS). + +## Google Example Skeleton + +```bash +uv run nemotron steps run translate/nemo_curator -c default \ + backend=google \ + google.project_id=YOUR_PROJECT \ + google.api_version=v3 \ + google.location=global \ + input_path=/path/to/chat.jsonl \ + output_dir=/path/to/out \ + source_language=en \ + target_language=ja +``` + +## AWS Example Skeleton + +```bash +uv run nemotron steps run translate/nemo_curator -c default \ + backend=aws \ + aws.region=us-west-2 \ + input_path=/path/to/chat.jsonl \ + output_dir=/path/to/out \ + source_language=en \ + target_language=es +``` + +## FAITH Reminder + +Cloud backends still pair with the FAITH LLM client. Keep `server` populated whenever `faith_eval.enabled` is `true`. + +## Related Pages + +- YAML keys: [Translation YAML Reference](/../reference/translate-config) + +- FAITH tuning: [Run FAITH Evaluation](/run-faith-evaluation) diff --git a/docs/fern/pages-vnightly/translation/how-to/run-llm-translation.mdx b/docs/fern/pages-vnightly/translation/how-to/run-llm-translation.mdx new file mode 100644 index 000000000..24f7b4f73 --- /dev/null +++ b/docs/fern/pages-vnightly/translation/how-to/run-llm-translation.mdx @@ -0,0 +1,41 @@ +--- +title: "Run LLM Translation" +slug: "translation/how-to/run-llm-translation.html" +description: "Use this guide when backend must stay llm and you need to point nemotron steps run translate/nemo_curator at an OpenAI-compatible chat-completions endpoint and model." +--- + +Use this guide when `backend` must stay `llm` and you need to point `nemotron steps run translate/nemo_curator` at an OpenAI-compatible chat-completions endpoint and model. + +## Prerequisites + +- Set `NVIDIA_API_KEY` in your shell when relying on the default `server.api_key_env`, for example `export NVIDIA_API_KEY=""`. + +- Confirm `server.url` matches your deployment. The `default.yaml` file targets the NVIDIA integrate API. + +## Procedure + +1. Start from `default.yaml` with `-c default`. + +2. Override model and languages: + +```bash +uv run nemotron steps run translate/nemo_curator -c default \ + backend=llm \ + input_path=/path/to/chat.jsonl \ + output_dir=/path/to/out \ + source_language=en \ + target_language=de \ + server.model=YOUR_LLM_MODEL_ID +``` + +3. Adjust `max_concurrent_requests` upward only after verifying the endpoint tolerates parallel completions. + +## Hosted Model Hygiene + +Hosted catalogs retire models frequently. Pin to identifiers your tenant currently exposes before large batch jobs. + +## Related Pages + +- FAITH requirements when enabled: [Run FAITH Evaluation](/run-faith-evaluation) + +- Full YAML reference: [Translation YAML Reference](/../reference/translate-config) diff --git a/docs/fern/pages-vnightly/translation/how-to/run-nmt-translation.mdx b/docs/fern/pages-vnightly/translation/how-to/run-nmt-translation.mdx new file mode 100644 index 000000000..2c4a1513f --- /dev/null +++ b/docs/fern/pages-vnightly/translation/how-to/run-nmt-translation.mdx @@ -0,0 +1,67 @@ +--- +title: "Run NMT Translation" +slug: "translation/how-to/run-nmt-translation.html" +description: "Use this guide when translation should run against backend: nmt and your own HTTP microservice that performs neural machine translation (NMT)." +--- + +Use this guide when translation should run against `backend: nmt` and your own HTTP microservice that performs *neural machine translation (NMT)*. + +## Prerequisites + +- A running NMT service reachable at the URL you pass as `nmt.server_url`, implementing the contract in the next section. + +- If `faith_eval.enabled` is `true`, LLM credentials for FAITH remain required; see [Run FAITH Evaluation](/run-faith-evaluation). + +## Service Contract + +Your service must implement one endpoint. + +`POST /translate` тАФ request body: + +```json +{ + "texts": ["Hello, world.", "How are you?"], + "src_lang": "en", + "tgt_lang": "hi" +} +``` + +`texts` is a list of strings (one per segment). `src_lang` and `tgt_lang` are BCP 47 / ISO 639-1 codes; Nemotron lowercases them before the call. + +Success response body: + +```json +{ + "translations": ["рдирдорд╕реНрддреЗ, рджреБрдирд┐рдпрд╛ред", "рдЖрдк рдХреИрд╕реЗ рд╣реИрдВ?"] +} +``` + +`translations` must contain exactly as many strings as `texts`. Curator raises a `RuntimeError` on a count mismatch. + +On error, return a non-2xx HTTP status with a JSON body containing an `"error"` field. Curator retries with exponential backoff and surfaces unrecoverable failures as an `aiohttp.ClientResponseError`. Streaming is not supported тАФ return the full batch in a single response. + +Curator also sends `GET /health` at startup as an optional liveness check. Return any 2xx to pass; if the endpoint is absent, Curator logs a warning and continues. + +Tune `nmt.batch_size`, `nmt.timeout`, and `nmt.max_concurrent_requests` once you understand your serverтАЩs throughput. + +## Procedure + +```bash +uv run nemotron steps run translate/nemo_curator -c default \ + backend=nmt \ + nmt.server_url=http://localhost:5000 \ + input_path=/path/to/chat.jsonl \ + output_dir=/path/to/out \ + source_language=en \ + target_language=hi +``` + +## FAITH Considerations + +If `faith_eval.enabled` stays `true` as in the default `default.yaml`, you must still supply large language model (LLM) credentials through `server` because FAITH scoring uses that client even though translation runs on NMT. + +## Related Pages + +- Field wiring: [Configure Fields and Output](/configure-fields-and-output) + +- YAML reference for the `nmt` block: [Translation YAML Reference](/../reference/translate-config) diff --git a/docs/fern/pages-vnightly/translation/how-to/use-fine-segmentation.mdx b/docs/fern/pages-vnightly/translation/how-to/use-fine-segmentation.mdx new file mode 100644 index 000000000..cee2a78a2 --- /dev/null +++ b/docs/fern/pages-vnightly/translation/how-to/use-fine-segmentation.mdx @@ -0,0 +1,37 @@ +--- +title: "Use Fine Segmentation" +slug: "translation/how-to/use-fine-segmentation.html" +description: "Use this guide when segmentation_mode=coarse mishandles long prose and you want to try fine on a sample before scaling." +--- + +Use this guide when `segmentation_mode=coarse` mishandles long prose and you want to try `fine` on a sample before scaling. + +Conceptual background lives in [Segmentation](/../explanation/segmentation). + +## Procedure + +1. Reproduce an issue with `segmentation_mode=coarse`, which is the default in `default.yaml`. + +2. Retry on a slice with `segmentation_mode=fine`: + +```bash +uv run nemotron steps run translate/nemo_curator -c default \ + segmentation_mode=fine \ + input_path=/path/to/sample.jsonl \ + output_dir=/path/to/out-fine \ + source_language=en \ + target_language=de \ + server.model=YOUR_LLM_MODEL_ID +``` + +3. Compare reconstruction fidelity against throughput cost. Fine mode increases segment counts. + +## Pair With `min_segment_chars` + +Raise `min_segment_chars` modestly to skip trivial whitespace-only fragments if fine mode becomes noisy. + +## Related Pages + +- Conceptual background: [Segmentation](/../explanation/segmentation) + +- YAML keys: [Translation YAML Reference](/../reference/translate-config) diff --git a/docs/fern/pages-vnightly/translation/index.mdx b/docs/fern/pages-vnightly/translation/index.mdx new file mode 100644 index 000000000..e54008b6d --- /dev/null +++ b/docs/fern/pages-vnightly/translation/index.mdx @@ -0,0 +1,155 @@ +--- +title: "Translation With Nemotron" +slug: "translation/index.html" +description: "The nemotron steps run translate/nemo_curator command translates selected fields in JSONL or Apache Parquet files. You can use a large language model (LLM) with an OpenAI-compatible endpoint, a neural" +--- + + + +The `nemotron steps run translate/nemo_curator` command translates selected fields in JSONL or Apache Parquet files. +You can use a large language model (LLM) with an OpenAI-compatible endpoint, a neural machine translation (NMT) HTTP server, Google Cloud Translation, or Amazon Translate. +Optionally, you can also run *FAITH* evaluation with an LLM after translation to score translation quality. + + +New here? Read [Tips for Translation With Agents](/using-skills) if you plan to drive the work from a coding agent, then start [Getting Started With Translation](/getting-started) and use this page as the map to deeper topics. + + + +## When to Use + +Use `nemotron steps run translate/nemo_curator` when you need: + +- Localized training or synthetic corpora from translating natural-language fields while preserving structured payloads such as chat turns, tool payloads, and fenced code blocks. +Field paths, `output_mode`, and segmentation interact with that behavior; see [Configure Fields and Output](/how-to/configure-fields-and-output) and [Segmentation](/explanation/segmentation). + +- Optional FAITH evaluation with configurable thresholds and filtering, without a separate evaluation CLI. + +- Repeatable configuration by using the checked-in `default.yaml` plus CLI overrides. + +## Pipeline Summary + +```mermaid +flowchart LR + A[Input JSONL or Parquet] --> B[Curator reader] + B --> C[TranslationStage] + C --> D[Curator writer] + D --> E[Output shards under output_dir] + C --> F{FAITH enabled?} + F -->|yes| G[LLM scores segments] + F -->|no| E + G --> E +``` + +## Documentation Series + + + +Run `nemotron steps run translate/nemo_curator` end-to-end using `default.yaml` and a sample chat JSONL file. + +--- + +hands-on + + + + +Copy-paste session prompts for supervised fine-tuning (SFT) data or exploratory FAITH scoring, plus habits for a short chat. + +--- + +newcomer + + + + +Backends, fields and outputs, segmentation, FAITH tuning. + +--- + +task-based + + + + +Pipeline architecture, segmentation, FAITH behavior. + +--- + +learn + + + + +YAML parameters and `nemotron steps run translate/nemo_curator` CLI. + +--- + +lookup + + + + + +## All Documentation + + + + +| Guide | What you do | +| --- | --- | +| [Tips for Translation With Agents](/using-skills) | Paste starter prompts for an agent and keep a translation session on the rails | +| [Getting Started With Translation](/getting-started) | Run translation and FAITH using default.yaml and sample JSONL | + + + + +| Guide | Focus | +| --- | --- | +| [Run LLM Translation](/how-to/run-llm-translation) | backend: llm | +| [Run NMT Translation](/how-to/run-nmt-translation) | backend: nmt | +| [Run Google or AWS Translation](/how-to/run-google-aws-translation) | backend: google / aws | +| [Configure Fields and Output](/how-to/configure-fields-and-output) | Field paths and output_mode | +| [Use Fine Segmentation](/how-to/use-fine-segmentation) | segmentation_mode | +| [Run FAITH Evaluation](/how-to/run-faith-evaluation) | faith_eval block | + + + + +| Guide | Topic | +| --- | --- | +| [Pipeline Overview](/explanation/pipeline-overview) | End-to-end flow | +| [Segmentation](/explanation/segmentation) | Coarse versus fine | +| [FAITH Evaluation Inside Translation](/explanation/faith-evaluation) | FAITH semantics | + + + + +| Guide | Content | +| --- | --- | +| [Translation YAML Reference](/reference/translate-config) | default.yaml field reference | +| [CLI Reference for Translation](/reference/cli-translation) | nemotron steps run translate/nemo_curator syntax | +| [Input and Output Format](/reference/io-format) | Input and output shapes | + + + + + +## Limitations and Considerations + +- Cost and rate limits: Hosted and cloud LLM backends incur usage; throttle with `max_concurrent_requests` and your providerтАЩs guidance. + +- Remote execution: use `--run ` or `--batch ` with an environment profile such as `lepton_translate`. + +- Overrides: Use `key=value` dotlist syntax after global flags, not passthrough script arguments. + +- Mixed folders: Do not point `input_path` at one directory that contains both `.jsonl` and `.parquet` shards unless you split formats first. + +## Quick Paths + +1. Agent-first prompts: [Tips for Translation With Agents](/using-skills) + +2. First run: [Getting Started With Translation](/getting-started) + +3. Swap backend: [How-To Guides](/how-to/index) + +4. Lookup flags: [CLI Reference for Translation](/reference/cli-translation) diff --git a/docs/fern/pages-vnightly/translation/reference/cli-translation.mdx b/docs/fern/pages-vnightly/translation/reference/cli-translation.mdx new file mode 100644 index 000000000..6462c06d4 --- /dev/null +++ b/docs/fern/pages-vnightly/translation/reference/cli-translation.mdx @@ -0,0 +1,72 @@ +--- +title: "CLI Reference for Translation" +slug: "translation/reference/cli-translation.html" +description: "Syntax, global flags, and merge rules for nemotron steps run translate/nemo_curator. Pair this page with Translation YAML Reference for YAML field meanings." +--- + +Syntax, global flags, and merge rules for `nemotron steps run translate/nemo_curator`. Pair this page with [Translation YAML Reference](/translate-config) for YAML field meanings. + +## Synopsis + +```bash +uv run nemotron steps run translate/nemo_curator [GLOBAL OPTIONS] [-c CONFIG] [DOTLIST_OVERRIDES...] +``` + +## Global Options + +These flags mirror other Nemotron commands: + +| Flag | Purpose | +| --- | --- | +| -c NAME, --config NAME | Select NAME.yaml inside src/nemotron/steps/translate/nemo_curator/config/ or pass an explicit *.yaml path. | +| -d, --dry-run | Print the merged OmegaConf YAML without executing TranslationStage. | +| -r, --run PROFILE | Run attached through an environment profile such as lepton_translate or a Slurm profile. | +| -b, --batch PROFILE | Submit detached through an environment profile such as lepton_translate or a Slurm profile. | + +Invocation without `-c` loads `default` automatically through `parse_config`. + +For local Curator execution through `uv run`, set: + +```bash +export RAY_ENABLE_UV_RUN_RUNTIME_ENV=0 +``` + +This keeps Ray workers on the synchronized project environment instead of +letting Ray ask uv to create a separate worker environment. + +## Dotlist Overrides + +Anything after the global flags that matches `key=value` merges into the YAML dictionary loaded from `default.yaml`. Nested keys use dotted paths: + +```bash +uv run nemotron steps run translate/nemo_curator -c default \ + faith_eval.threshold=3.1 \ + server.model=YOUR_MODEL \ + input_path=/data/text.jsonl \ + output_dir=/data/translated \ + source_language=en \ + target_language=ar +``` + +## Restrictions Specific to Translation + +- Passthrough arguments are not supported. + +- For remote execution, use a normal Nemotron env profile with `-r` or `-b`, such as `lepton_translate`. + +## Artifact Overrides + +The current translation step reads `input_path` directly from YAML and dotlist overrides. + +## Exit Codes + +| Code | Meaning | +| --- | --- | +| 0 | Dry-run printed or translation finished successfully. | +| 1 | Validation failures such as missing languages, illegal backend configuration, unsupported CLI mode, or missing API keys. | + +## Related Pages + +- YAML keys: [Translation YAML Reference](/translate-config) + +- Tutorial invocation: [Getting Started With Translation](/../getting-started) diff --git a/docs/fern/pages-vnightly/translation/reference/index.mdx b/docs/fern/pages-vnightly/translation/reference/index.mdx new file mode 100644 index 000000000..e6e0d905b --- /dev/null +++ b/docs/fern/pages-vnightly/translation/reference/index.mdx @@ -0,0 +1,39 @@ +--- +title: "Reference for Translation" +slug: "translation/reference/index.html" +description: "Lookup pages for YAML keys, CLI flags, and file shapes. Prefer the tutorial and how-to guides for procedures; use this section when you need exact parameters or syntax." +--- + +Lookup pages for YAML keys, CLI flags, and file shapes. Prefer the tutorial and how-to guides for procedures; use this section when you need exact parameters or syntax. + +Specifications for `nemotron steps run translate/nemo_curator`. + + + +Anchored on `config/default.yaml` plus FAITH semantics. + +--- + +yaml + + + + +Global recipe flags and translation-specific constraints. + +--- + +cli + + + + +How `input_path` layouts map to `output_dir` shards. + +--- + +jsonl + + + + diff --git a/docs/fern/pages-vnightly/translation/reference/io-format.mdx b/docs/fern/pages-vnightly/translation/reference/io-format.mdx new file mode 100644 index 000000000..a88d72490 --- /dev/null +++ b/docs/fern/pages-vnightly/translation/reference/io-format.mdx @@ -0,0 +1,51 @@ +--- +title: "Input and Output Format" +slug: "translation/reference/io-format.html" +description: "Expectations for input_path layouts, shard layout under output_dir, output_mode, chat reconstruction, and FAITH columns." +--- + +Expectations for `input_path` layouts, shard layout under `output_dir`, `output_mode`, chat reconstruction, and FAITH columns. + +## Inputs + +Supported layouts include JSON Lines (JSONL), with one JSON object per line, or Apache Parquet columnar files. + +- JSONL records contain arbitrary JSON objects per line. The `text_field` setting selects which strings `TranslationStage` visits. Wildcards expand across arrays such as `messages` items. + +- Parquet inputs share the same logical schema. The Curator `ParquetReader` partitions row groups according to `files_per_partition` and `blocksize` overrides. + +Avoid pointing `input_path` at directories that mix `.jsonl` and `.parquet` shards when `input_format=auto`. The reader raises an error instead of guessing. + +## Outputs + +The `JsonlWriter` and `ParquetWriter` emit multiple shards under `output_dir` because Curator pipelines partition work for parallelism. Downstream steps should treat `output_dir` as the artifact, not individual filenames. + +### `output_mode` + +| Mode | Producer behavior | +| --- | --- | +| replaced | Source strings at text_field are overwritten with translations suitable for immediate training. | +| raw | Original strings remain. Translations and metadata appear in auxiliary columns defined by TranslationStage. | +| both | Emits replaced views and retains intermediate structures. This is the starter default for auditing. | + +### Chat Reconstruction + +When `reconstruct_messages=true`, expect parallel arrays such as `translated_messages` mirroring the `messages` layout but with translated `content` entries. This simplifies quality assurance review without sacrificing structured tool-call payloads. + +### FAITH Annotations + +When `faith_eval.enabled=true` and `merge_scores=true`, each record carries score blobs aligned with segment boundaries. When `filter_enabled=true`, low-trust rows disappear entirely from `output_dir` shards. + +## Sampling Outputs + +Use `find`, `head`, and `python3 -m json.tool` on any emitted shard to inspect one translated row: + +```bash +find ./output_dir -name '*.jsonl' | head -n 1 | xargs head -n 1 | python3 -m json.tool --no-ensure-ascii +``` + +## Related Pages + +- Field tuning guide: [Configure Fields and Output](/../how-to/configure-fields-and-output) + +- YAML defaults: [Translation YAML Reference](/translate-config) diff --git a/docs/fern/pages-vnightly/translation/reference/translate-config.mdx b/docs/fern/pages-vnightly/translation/reference/translate-config.mdx new file mode 100644 index 000000000..4731beacf --- /dev/null +++ b/docs/fern/pages-vnightly/translation/reference/translate-config.mdx @@ -0,0 +1,159 @@ +--- +title: "Translation YAML Reference" +slug: "translation/reference/translate-config.html" +description: "The translate/nemo_curator step ships src/nemotron/steps/translate/nemo_curator/config/default.yaml as the canonical starter profile. This page lists top-level keys you can override with nemotron step" +--- + +The `translate/nemo_curator` step ships `src/nemotron/steps/translate/nemo_curator/config/default.yaml` as the canonical starter profile. This page lists top-level keys you can override with `nemotron steps run translate/nemo_curator key=value` dotlists, grouped by concern, with the full baseline file inlined below. + +## Default Configuration File + +```yaml startLine={1} +# Starter config for NeMo Curator corpus translation. + +run: + env: + mounts: + - ${auto_mount:git+https://github.com/NVIDIA-NeMo/Curator.git@d10cd6ffe9f5ac4cbb176d7b3ada698f22633aea,/opt/Curator} + +input_path: /path/to/filtered_data.jsonl +output_dir: ./output/translated + +# Required. Ask the user; do not infer silently. +source_language: ??? +target_language: ??? + +input_format: auto # auto | jsonl | parquet +output_format: jsonl # jsonl | parquet +backend: llm # llm | nmt | google | aws + +text_field: messages.*.content +output_field: translated_text +translation_column: translated_text +output_mode: both # replaced | raw | both +merge_scores: true +reconstruct_messages: true +messages_field: messages +messages_content_field: content + +segmentation_mode: coarse # coarse | fine +min_segment_chars: 0 +max_concurrent_requests: 64 +generation_config: null # Optional OpenAI-compatible translation generation settings. +skip_translated: false +files_per_partition: null +blocksize: null + +server: + url: https://integrate.api.nvidia.com/v1 + model: "" # Required for backend=llm and used by FAITH unless faith_eval.model_name is set. + api_key_env: NVIDIA_API_KEY + api_key: "" + +faith_eval: + enabled: true + threshold: 2.5 + model_name: "" + filter_enabled: true + max_concurrent_requests: 64 + generation_config: + max_tokens: 2048 + temperature: 0.0 + +nmt: + server_url: http://localhost:5000 + batch_size: 32 + timeout: 120 + max_concurrent_requests: 32 + +google: + project_id: "" + location: global + api_version: v2 + max_concurrent_requests: 32 + +aws: + region: us-east-2 + max_concurrent_requests: 32 +``` + +## Keys Grouped by Concern + +### Paths and Formats + +| Key | Description | +| --- | --- | +| input_path | File, glob, or homogeneous directory consumed by JsonlReader or ParquetReader. | +| output_dir | Directory passed to JsonlWriter or ParquetWriter in overwrite mode. | +| input_format | auto, jsonl, or parquet. | +| output_format | jsonl or parquet. | + +### Languages and Backend + +| Key | Description | +| --- | --- | +| source_language / target_language | Required ISO 639-1 codes. Empty placeholders remind operators to set values explicitly. | +| backend | llm, nmt, google, or aws. | + +### Translation Semantics + +| Key | Description | +| --- | --- | +| text_field | Dot or wildcard path describing strings to translate. The default is messages.*.content. | +| output_field, translation_column | Destination columns for translated text and downstream merges. | +| output_mode | replaced, raw, or both. | +| merge_scores | Attach FAITH outputs adjacent to translations when enabled. | +| reconstruct_messages, messages_field, messages_content_field | Chat reconstruction switches. | +| segmentation_mode, min_segment_chars | Segmenter behavior. Values include coarse and fine. | +| max_concurrent_requests, skip_translated, files_per_partition, blocksize | Throughput and partitioning controls surfaced to Curator readers and clients. | + +### LLM Fields + +Used whenever `backend=llm` or FAITH needs an OpenAI-compatible judge. + +| Key | Description | +| --- | --- | +| server.url | Chat-completions compatible base URL. | +| server.model | Model identifier. Required for llm translation and for FAITH unless you override the scorer model. | +| server.api_key_env | Environment variable housing the API secret. The default is NVIDIA_API_KEY. | +| server.api_key | Inline secret. Discouraged for shared repositories. | + +### FAITH Evaluation + +| Key | Description | +| --- | --- | +| enabled | Turns FAITH scoring on. The starter YAML sets this to true. | +| threshold | Minimum acceptable faith_avg on a one-to-five scale. The starter default 2.5 is a permissive noisy-data floor. See [FAITH Evaluation Inside Translation](/../explanation/faith-evaluation) for the full rubric. | +| model_name | Optional scorer-only model. Defaults to server.model. | +| filter_enabled | Drop failing rows when true. | +| max_concurrent_requests | Optional scorer-side concurrency limit. | +| generation_config | Optional OpenAI-compatible generation settings for the scorer. | + +### Backend-Specific Blocks + +| Block | When needed | +| --- | --- | +| nmt | HTTP microservice URL, batching, timeouts. | +| google | Project metadata and API version. Version v3 requires project_id. | +| aws | Region plus concurrency limits. | + +## Overrides + +OmegaConf dotlists merge last: + +```bash +uv run nemotron steps run translate/nemo_curator -c default \ + backend=nmt \ + nmt.server_url=http://localhost:5000 \ + faith_eval.enabled=false \ + input_path=/data/chat.jsonl \ + output_dir=/data/out \ + source_language=en \ + target_language=hi +``` + +## Related Pages + +- CLI merge rules and flags: [CLI Reference for Translation](/cli-translation) + +- Record shapes and writers: [Input and Output Format](/io-format) diff --git a/docs/fern/pages-vnightly/translation/reference/troubleshooting.mdx b/docs/fern/pages-vnightly/translation/reference/troubleshooting.mdx new file mode 100644 index 000000000..3792d9ebd --- /dev/null +++ b/docs/fern/pages-vnightly/translation/reference/troubleshooting.mdx @@ -0,0 +1,58 @@ +--- +title: "Troubleshooting" +slug: "translation/reference/troubleshooting.html" +description: "This page lists common symptoms when you run nemotron steps run translate/nemo_curator and shows the field, flag, or environment variable to inspect first. Each table pairs a symptom with a concrete r" +--- + +{/* Reference: symptom-to-remedy tables for nemotron steps run translate/nemo_curator runs across all four backends and FAITH evaluation. */} + +This page lists common symptoms when you run `nemotron steps run translate/nemo_curator` and shows the field, flag, or environment variable to inspect first. +Each table pairs a symptom with a concrete remedy. +For stage flow and design rationale, see the explanation pages linked from [Concepts](/../explanation/index). + +## Authentication and Credentials + +| Symptom | What to do | +| --- | --- | +| HTTP 401 or 403 from the chat-completions endpoint, or a Curator log line about a missing API key | Confirm the variable named in server.api_key_env is exported in the shell that launches the run. The starter default.yaml expects NVIDIA_API_KEY; export it with export NVIDIA_API_KEY="<api-key>" and rerun. See [Run LLM Translation](/../how-to/run-llm-translation). | +| FAITH scoring fails with a credentials error even though backend is nmt, google, or aws | FAITH always uses the large language model (LLM) client under server. Keep server.api_key_env populated whenever faith_eval.enabled is true, or set faith_eval.enabled=false for a diagnostic run. See [Run FAITH Evaluation](/../how-to/run-faith-evaluation). | +| Google backend rejects the request with a permission or project error | Confirm application default credentials are present in the environment that runs the step. Do not paste secrets into default.yaml. See [Run Google or AWS Translation](/../how-to/run-google-aws-translation). | + +## Model and Endpoint Configuration + +| Symptom | What to do | +| --- | --- | +| HTTP 404 or a тАЬmodel not foundтАЭ message from the LLM endpoint | Hosted catalogs retire identifiers frequently. List the models your tenant currently exposes and pin server.model to one of them before large batch jobs. See [Run LLM Translation](/../how-to/run-llm-translation). | +| Google translation rejects the request because project_id is missing | API version v3 requires project metadata. Set both google.project_id and google.api_version=v3, or downgrade google.api_version to a release that does not require the project. See [Run Google or AWS Translation](/../how-to/run-google-aws-translation). | +| NMT requests time out before the service responds | Raise nmt.timeout to match observed server latency, lower nmt.batch_size so each request returns sooner, and confirm nmt.server_url resolves from the host that runs the step. See [Run NMT Translation](/../how-to/run-nmt-translation). | + +## Throttling and Concurrency + +| Symptom | What to do | +| --- | --- | +| HTTP 429 responses, bursty failures, or sustained slowdowns from a hosted LLM endpoint | Lower max_concurrent_requests in your YAML and rerun on a smaller slice of data. Confirm your tenant quota covers the planned batch size. See [Translation YAML Reference](/translate-config). | +| A self-hosted NMT service returns errors under load | Reduce nmt.max_concurrent_requests and nmt.batch_size together, then raise them only after the service reports healthy throughput. See [Run NMT Translation](/../how-to/run-nmt-translation). | + +## Inputs and Output Layout + +| Symptom | What to do | +| --- | --- | +| Reader errors about mixed file types when input_path points at a directory containing both JSONL and Parquet files | Curator readers expect one record format per directory. Split the inputs into separate directories for JSON Lines (JSONL) and Parquet, or set input_path to a single file. See [Input and Output Format](/io-format). | +| Ray worker logs show Creating virtual environment at: .venv followed by ModuleNotFoundError: No module named 'ray' | Export RAY_ENABLE_UV_RUN_RUNTIME_ENV=0 before running local uv run --no-sync nemotron steps run translate/nemo_curator .... This keeps Ray workers in the synchronized Nemotron environment. | +| Empty JSONL input fails with No data read from files in task file_group_0 | The reader found no records. Treat the run as an empty-input validation failure, confirm the input path is correct, and rerun with a non-empty file or directory. | +| Output shards do not appear under output_dir after the run reports success | The writer emits partitioned files, not a single merged file. Inspect the shard pattern under output_dir and confirm output_format matches what downstream consumers expect. See [Input and Output Format](/io-format). | + +## FAITH Evaluation + +| Symptom | What to do | +| --- | --- | +| Every translated row is dropped after FAITH runs | The faith_eval.threshold value may be too strict for the chosen scorer model. Lower the threshold, set faith_eval.filter_enabled=false while you tune, or override the scorer with faith_eval.model_name. See [Run FAITH Evaluation](/../how-to/run-faith-evaluation). | +| FAITH scores look inconsistent across runs of the same data | Pin both server.model and faith_eval.model_name to specific identifiers so scorer drift does not move the threshold under you. See [FAITH Evaluation Inside Translation](/../explanation/faith-evaluation). | + +## Related Reference + +- Translation YAML fields: [Translation YAML Reference](/translate-config) + +- CLI syntax: [CLI Reference for Translation](/cli-translation) + +- Input and output shapes: [Input and Output Format](/io-format) diff --git a/docs/fern/pages-vnightly/translation/using-skills.mdx b/docs/fern/pages-vnightly/translation/using-skills.mdx new file mode 100644 index 000000000..2534aab36 --- /dev/null +++ b/docs/fern/pages-vnightly/translation/using-skills.mdx @@ -0,0 +1,46 @@ +--- +title: "Tips for Translation With Agents" +slug: "translation/using-skills.html" +description: "This page is for you if you want a productive session with a coding agent without a long back-and-forth. The mechanics of the nemotron steps run translate/nemo_curator are shown in Getting Started Wit" +--- + + + +This page is for you if you want a productive session with a coding agent without a long back-and-forth. +The mechanics of the `nemotron steps run translate/nemo_curator` are shown in [Getting Started With Translation](/getting-started) and the how-to guides. + +## Sample Prompts You Can Paste + +Paste one block as the first message in a new session. +Fill in bracketed parts or paths before you send. + +### Example: Small Bilingual for SFT and FAITH Filtering + +```text +I need help running nemotron steps run translate/nemo_curator for a multilingual supervised fine-tuning experiment. + +Context: +- Repo: Nemotron at the machine root where I run commands. +- Input: [SOURCE-JSONL] +- Target language: ISO 639-1 code [TARGET], for example hi or de. +- I want translated shards I can inspect before scaling up. + +Constraints: +- Use the checked-in config at src/nemotron/steps/translate/nemo_curator/config/default.yaml with -c default and CLI dotlist overrides only. +- Keep FAITH enabled with sensible training defaults from that tutorial unless you see a conflict; I want low-quality rows filtered, not every row kept. +- output_dir: [MY_OUTPUT_DIR] under the repo, for example ./output/translation-agent-1. + +Please: +- Give me the exact uv run nemotron steps run translate/nemo_curator command with input_path, output_dir, source_language=en, target_language=[TARGET], and server.model filled in. +- Point me to the next doc page if I need to change text_field, output_mode, or segmentation. +``` + +## Next Steps + +- First hands-on run: [Getting Started With Translation](/getting-started) + +- Field paths and `output_mode`: [Configure Fields and Output](/how-to/configure-fields-and-output) + +- FAITH tuning after exploration: [Run FAITH Evaluation](/how-to/run-faith-evaluation) + +- Full CLI: [CLI Reference for Translation](/reference/cli-translation) diff --git a/docs/fern/versions/vnightly.yml b/docs/fern/versions/vnightly.yml new file mode 100644 index 000000000..9c1a33b0b --- /dev/null +++ b/docs/fern/versions/vnightly.yml @@ -0,0 +1,392 @@ +navigation: + - section: Contents + contents: + - page: "Nemotron Training Recipes" + path: ../pages-vnightly/index.mdx + - section: "Nemotron" + contents: + - page: "Application Examples" + path: ../pages-vnightly/application-examples.mdx + - page: "Deployment Guides" + path: ../pages-vnightly/deployment-guides.mdx + - section: "Nemotron Step Basics" + contents: + - page: "About" + path: ../pages-vnightly/steps/index.mdx + - page: "Basics" + path: ../pages-vnightly/steps/basics.mdx + - page: "Getting Started" + path: ../pages-vnightly/steps/getting-started.mdx + - page: "Airgap Environment" + path: ../pages-vnightly/steps/airgap.mdx + - section: "Data Curation" + contents: + - page: "About" + path: ../pages-vnightly/curate/index.mdx + - page: "Getting Started" + path: ../pages-vnightly/curate/getting-started.mdx + - section: "Tasks" + path: ../pages-vnightly/curate/how-to/index.mdx + contents: + - page: "Run Curation on Local JSONL" + path: ../pages-vnightly/curate/how-to/run-local-jsonl.mdx + - page: "Use a Hugging Face Snapshot" + path: ../pages-vnightly/curate/how-to/use-huggingface-snapshot.mdx + - page: "Enable Curation Filters" + path: ../pages-vnightly/curate/how-to/enable-filters.mdx + - section: "Reference" + path: ../pages-vnightly/curate/reference/index.mdx + contents: + - page: "curate/nemo_curator CLI" + path: ../pages-vnightly/curate/reference/cli-curate.mdx + - page: "curate/nemo_curator Configuration" + path: ../pages-vnightly/curate/reference/curate-config.mdx + - page: "Curation Input and Output Format" + path: ../pages-vnightly/curate/reference/io-format.mdx + - page: "Curation Troubleshooting" + path: ../pages-vnightly/curate/reference/troubleshooting.mdx + - section: "Synthetic Data Generation" + contents: + - page: "About" + path: ../pages-vnightly/sdg/index.mdx + - page: "Getting Started" + path: ../pages-vnightly/sdg/getting-started.mdx + - page: "Tips for Using Agents" + path: ../pages-vnightly/sdg/using-skills.mdx + - page: "Planning" + path: ../pages-vnightly/sdg/planning.mdx + - section: "Tasks" + path: ../pages-vnightly/sdg/how-to/index.mdx + contents: + - page: "Create a Domain Dataset" + path: ../pages-vnightly/sdg/how-to/create-domain-dataset.mdx + - page: "Create Tool-Calling Dataset" + path: ../pages-vnightly/sdg/how-to/tool-call-data.mdx + - page: "Generate Preference Data for DPO" + path: ../pages-vnightly/sdg/how-to/preference-data.mdx + - page: "Dispatch SDG to a Cluster" + path: ../pages-vnightly/sdg/how-to/dispatch-to-cluster.mdx + - page: "Tips for the Data Generation Pipeline" + path: ../pages-vnightly/sdg/how-to/run.mdx + - section: "Reference" + path: ../pages-vnightly/sdg/reference/index.mdx + contents: + - page: "Config Schema" + path: ../pages-vnightly/sdg/reference/config-schema.mdx + - page: "CLI Reference" + path: ../pages-vnightly/sdg/reference/cli-reference.mdx + - page: "Output Projections" + path: ../pages-vnightly/sdg/reference/output-projections.mdx + - page: "Troubleshooting" + path: ../pages-vnightly/sdg/reference/troubleshooting.mdx + - section: "Translation" + contents: + - page: "About" + path: ../pages-vnightly/translation/index.mdx + - page: "Getting Started" + path: ../pages-vnightly/translation/getting-started.mdx + - page: "Tips for Using Agents" + path: ../pages-vnightly/translation/using-skills.mdx + - section: "Concepts" + path: ../pages-vnightly/translation/explanation/index.mdx + contents: + - page: "Pipeline Overview" + path: ../pages-vnightly/translation/explanation/pipeline-overview.mdx + - page: "Segmentation" + path: ../pages-vnightly/translation/explanation/segmentation.mdx + - page: "FAITH Evaluation Inside Translation" + path: ../pages-vnightly/translation/explanation/faith-evaluation.mdx + - section: "Tasks" + path: ../pages-vnightly/translation/how-to/index.mdx + contents: + - page: "Run LLM Translation" + path: ../pages-vnightly/translation/how-to/run-llm-translation.mdx + - page: "Run NMT Translation" + path: ../pages-vnightly/translation/how-to/run-nmt-translation.mdx + - page: "Run Google or AWS Translation" + path: ../pages-vnightly/translation/how-to/run-google-aws-translation.mdx + - page: "Configure Fields and Output" + path: ../pages-vnightly/translation/how-to/configure-fields-and-output.mdx + - page: "Use Fine Segmentation" + path: ../pages-vnightly/translation/how-to/use-fine-segmentation.mdx + - page: "Run FAITH Evaluation" + path: ../pages-vnightly/translation/how-to/run-faith-evaluation.mdx + - section: "Reference" + path: ../pages-vnightly/translation/reference/index.mdx + contents: + - page: "Translation YAML Reference" + path: ../pages-vnightly/translation/reference/translate-config.mdx + - page: "CLI Reference for Translation" + path: ../pages-vnightly/translation/reference/cli-translation.mdx + - page: "Input and Output Format" + path: ../pages-vnightly/translation/reference/io-format.mdx + - page: "Troubleshooting" + path: ../pages-vnightly/translation/reference/troubleshooting.mdx + - section: "Build MCQ Benchmarks" + contents: + - page: "About" + path: ../pages-vnightly/build-benchmarks/index.mdx + - page: "Getting Started" + path: ../pages-vnightly/build-benchmarks/getting-started.mdx + - section: "Concepts" + path: ../pages-vnightly/build-benchmarks/explanation/index.mdx + contents: + - page: "Pipeline Overview" + path: ../pages-vnightly/build-benchmarks/explanation/pipeline-overview.mdx + - page: "Data Preparation" + path: ../pages-vnightly/build-benchmarks/explanation/data-preparation.mdx + - page: "Get the Right Questions" + path: ../pages-vnightly/build-benchmarks/explanation/get-right-questions.mdx + - page: "Question Generation" + path: ../pages-vnightly/build-benchmarks/explanation/question-generation.mdx + - page: "Quality Validation" + path: ../pages-vnightly/build-benchmarks/explanation/quality-validation.mdx + - page: "Easiness and Hallucination Filtering" + path: ../pages-vnightly/build-benchmarks/explanation/filtering.mdx + - page: "Translation" + path: ../pages-vnightly/build-benchmarks/explanation/translation.mdx + - section: "Tasks" + path: ../pages-vnightly/build-benchmarks/how-to/index.mdx + contents: + - page: "Prepare Data" + path: ../pages-vnightly/build-benchmarks/how-to/prepare-data.mdx + - page: "Use Your Domain Data" + path: ../pages-vnightly/build-benchmarks/how-to/domain-data.mdx + - page: "Model Endpoints" + path: ../pages-vnightly/build-benchmarks/how-to/custom-model-endpoints.mdx + - page: "Tune Prompts" + path: ../pages-vnightly/build-benchmarks/how-to/prompt-tuning.mdx + - page: "Skip Stages" + path: ../pages-vnightly/build-benchmarks/how-to/skip-stages.mdx + - section: "Reference" + path: ../pages-vnightly/build-benchmarks/reference/index.mdx + contents: + - page: "Supported Hugging Face Benchmarks" + path: ../pages-vnightly/build-benchmarks/reference/benchmarks.mdx + - page: "Output Files" + path: ../pages-vnightly/build-benchmarks/reference/output-files.mdx + - page: "Generation Configuration Reference" + path: ../pages-vnightly/build-benchmarks/reference/generate-config.mdx + - page: "Translation Configuration Reference" + path: ../pages-vnightly/build-benchmarks/reference/translation-config.mdx + - page: "Troubleshooting" + path: ../pages-vnightly/build-benchmarks/reference/troubleshooting.mdx + - section: "Model Training" + contents: + - page: "About" + path: ../pages-vnightly/train-models/index.mdx + - page: "Getting Started" + path: ../pages-vnightly/train-models/getting-started.mdx + - page: "Tips for Using Agents" + path: ../pages-vnightly/train-models/using-skill.mdx + - section: "Concepts" + path: ../pages-vnightly/train-models/explanation/index.mdx + contents: + - page: "Training Basics" + path: ../pages-vnightly/train-models/explanation/basics.mdx + - page: "Artifact Graph" + path: ../pages-vnightly/train-models/explanation/artifact-graph.mdx + - page: "Training Libraries" + path: ../pages-vnightly/train-models/explanation/training-libraries.mdx + - section: "Tasks" + path: ../pages-vnightly/train-models/how-to/index.mdx + contents: + - page: "Run SFT with AutoModel on Custom Data" + path: ../pages-vnightly/train-models/how-to/run-sft-automodel.mdx + - page: "Choose an SFT Backend" + path: ../pages-vnightly/train-models/how-to/choose-sft-backend.mdx + - page: "Choose a PEFT Backend" + path: ../pages-vnightly/train-models/how-to/choose-peft-backend.mdx + - page: "Choose an RL Alignment Step" + path: ../pages-vnightly/train-models/how-to/choose-rl-step.mdx + - page: "Run Post-Training Optimization" + path: ../pages-vnightly/train-models/how-to/run-optimization.mdx + - page: "Environment Profiles and Executors" + path: ../pages-vnightly/train-models/how-to/env-and-executors.mdx + - page: "Data and Checkpoint Formats" + path: ../pages-vnightly/train-models/how-to/data-and-checkpoint-formats.mdx + - page: "Convert Checkpoints" + path: ../pages-vnightly/train-models/how-to/convert-checkpoints.mdx + - section: "Reference" + path: ../pages-vnightly/train-models/reference/index.mdx + contents: + - page: "Nemotron Steps CLI Reference" + path: ../pages-vnightly/train-models/reference/cli-reference.mdx + - page: "Env Profile Generator" + path: ../pages-vnightly/train-models/reference/env-profile-generator.mdx + - page: "Step Catalog" + path: ../pages-vnightly/train-models/reference/step-catalog.mdx + - page: "Configuration Conventions" + path: ../pages-vnightly/train-models/reference/config-conventions.mdx + - section: "SFT Steps" + path: ../pages-vnightly/train-models/reference/sft/index.mdx + contents: + - page: "sft/automodel" + path: ../pages-vnightly/train-models/reference/sft/automodel.mdx + - page: "sft/megatron_bridge" + path: ../pages-vnightly/train-models/reference/sft/megatron-bridge.mdx + - section: "PEFT Steps" + path: ../pages-vnightly/train-models/reference/peft/index.mdx + contents: + - page: "peft/automodel" + path: ../pages-vnightly/train-models/reference/peft/automodel.mdx + - page: "peft/megatron_bridge" + path: ../pages-vnightly/train-models/reference/peft/megatron-bridge.mdx + - section: "RL Steps" + path: ../pages-vnightly/train-models/reference/rl/index.mdx + contents: + - page: "rl/nemo_rl/dpo" + path: ../pages-vnightly/train-models/reference/rl/dpo.mdx + - page: "rl/nemo_rl/rlvr" + path: ../pages-vnightly/train-models/reference/rl/rlvr.mdx + - page: "rl/nemo_rl/rlhf" + path: ../pages-vnightly/train-models/reference/rl/rlhf.mdx + - section: "Optimization Steps" + path: ../pages-vnightly/train-models/reference/optimize/index.mdx + contents: + - page: "optimize/modelopt/quantize" + path: ../pages-vnightly/train-models/reference/optimize/quantize.mdx + - page: "optimize/modelopt/prune" + path: ../pages-vnightly/train-models/reference/optimize/prune.mdx + - page: "optimize/modelopt/distill" + path: ../pages-vnightly/train-models/reference/optimize/distill.mdx + - section: "Checkpoint Conversion Steps" + path: ../pages-vnightly/train-models/reference/convert/index.mdx + contents: + - page: "convert/hf_to_megatron" + path: ../pages-vnightly/train-models/reference/convert/hf-to-megatron.mdx + - page: "convert/megatron_to_hf" + path: ../pages-vnightly/train-models/reference/convert/megatron-to-hf.mdx + - page: "convert/merge_lora" + path: ../pages-vnightly/train-models/reference/convert/merge-lora.mdx + - section: "Model Evaluation" + contents: + - page: "About" + path: ../pages-vnightly/model-eval/index.mdx + - page: "Getting Started" + path: ../pages-vnightly/model-eval/getting-started.mdx + - page: "Tips for Using Agents" + path: ../pages-vnightly/model-eval/using-skills.mdx + - section: "Concepts" + path: ../pages-vnightly/model-eval/explanation/index.mdx + contents: + - page: "Pipeline Overview" + path: ../pages-vnightly/model-eval/explanation/pipeline-overview.mdx + - page: "Endpoint Types And Task Families" + path: ../pages-vnightly/model-eval/explanation/endpoint-types-and-benchmarks.mdx + - page: "Tokenizer Alignment" + path: ../pages-vnightly/model-eval/explanation/tokenizer-alignment.mdx + - section: "Tasks" + path: ../pages-vnightly/model-eval/how-to/index.mdx + contents: + - page: "Discover The Model Evaluation Step" + path: ../pages-vnightly/model-eval/how-to/discover-the-step.mdx + - page: "Run A Hosted Evaluation" + path: ../pages-vnightly/model-eval/how-to/run-hosted-evaluation.mdx + - page: "Evaluate A Deployed Checkpoint" + path: ../pages-vnightly/model-eval/how-to/evaluate-deployed-checkpoint.mdx + - section: "Reference" + path: ../pages-vnightly/model-eval/reference/index.mdx + contents: + - page: "Configuration Reference" + path: ../pages-vnightly/model-eval/reference/config-schema.mdx + - page: "CLI Reference" + path: ../pages-vnightly/model-eval/reference/cli-reference.mdx + - page: "Output Artifacts" + path: ../pages-vnightly/model-eval/reference/output-artifacts.mdx + - page: "Tasks Catalog" + path: ../pages-vnightly/model-eval/reference/benchmarks-catalog.mdx + - page: "Troubleshooting" + path: ../pages-vnightly/model-eval/reference/troubleshooting.mdx + - section: "Training Recipes" + contents: + - section: "Nemotron 3 Nano" + path: ../pages-vnightly/nemotron/nano3/README.mdx + contents: + - page: "Stage 0: Pretraining" + path: ../pages-vnightly/nemotron/nano3/pretrain.mdx + - page: "Stage 1: Supervised Fine-Tuning (SFT)" + path: ../pages-vnightly/nemotron/nano3/sft.mdx + - page: "Stage 2: Reinforcement Learning (RL)" + path: ../pages-vnightly/nemotron/nano3/rl.mdx + - page: "Stage 3: Evaluation" + path: ../pages-vnightly/nemotron/nano3/evaluate.mdx + - page: "Importing Models and Data" + path: ../pages-vnightly/nemotron/nano3/import.mdx + - section: "Nemotron 3 Omni" + path: ../pages-vnightly/nemotron/omni3/README.mdx + contents: + - page: "Stage 0: Supervised Fine-Tuning (SFT)" + path: ../pages-vnightly/nemotron/omni3/sft.mdx + - page: "Stage 1: Reinforcement Learning (RL)" + path: ../pages-vnightly/nemotron/omni3/rl.mdx + - page: "RL Data Preparation" + path: ../pages-vnightly/nemotron/omni3/rl/data-prep.mdx + - page: "Nemotron 3 Nano Omni тАФ Architecture" + path: ../pages-vnightly/nemotron/omni3/architecture.mdx + - page: "Nemotron 3 Nano Omni тАФ Inference & Deployment" + path: ../pages-vnightly/nemotron/omni3/inference.mdx + - section: "Nemotron 3 Super" + path: ../pages-vnightly/nemotron/super3/README.mdx + contents: + - page: "Stage 0: Pretraining" + path: ../pages-vnightly/nemotron/super3/pretrain.mdx + - page: "Stage 1: Supervised Fine-Tuning (SFT)" + path: ../pages-vnightly/nemotron/super3/sft.mdx + - section: "Stage 2: Reinforcement Learning (RL)" + path: ../pages-vnightly/nemotron/super3/rl/index.mdx + contents: + - page: "Multi-Environment RLVR (Stages 1.1тАУ1.3)" + path: ../pages-vnightly/nemotron/super3/rl/rlvr.mdx + - page: "SWE-RL (Stages 2.1тАУ2.2)" + path: ../pages-vnightly/nemotron/super3/rl/swe.mdx + - page: "RLHF (Stage 3)" + path: ../pages-vnightly/nemotron/super3/rl/rlhf.mdx + - page: "RL Data Preparation" + path: ../pages-vnightly/nemotron/super3/rl/data-prep.mdx + - page: "Stage 4: Evaluation" + path: ../pages-vnightly/nemotron/super3/evaluate.mdx + - page: "Stage 3: Quantization" + path: ../pages-vnightly/nemotron/super3/quantization.mdx + - page: "Llama Nemotron Embed" + path: ../pages-vnightly/nemotron/embed/README.mdx + - page: "Artifact Types & Lineage" + path: ../pages-vnightly/nemotron/artifacts.mdx + - section: "Nemotron Kit" + contents: + - page: "Nemotron Kit" + path: ../pages-vnightly/nemotron/kit.mdx + - page: "NVIDIA AI Stack" + path: ../pages-vnightly/nemotron/nvidia-stack.mdx + - page: "nemo_runspec Package" + path: ../pages-vnightly/nemo_runspec/package-readme.mdx + - page: "Execution through NeMo-Run" + path: ../pages-vnightly/nemo_runspec/nemo-run.mdx + - page: "OmegaConf Configuration System" + path: ../pages-vnightly/nemo_runspec/omegaconf.mdx + - page: "Artifact Tracking" + path: ../pages-vnightly/nemo_runspec/artifacts.mdx + - page: "Weights & Biases Integration" + path: ../pages-vnightly/nemotron/wandb.mdx + - page: "CLI Framework" + path: ../pages-vnightly/nemotron/cli.mdx + - page: "Data Preparation Module" + path: ../pages-vnightly/nemotron/data-prep.mdx + - page: "Xenna Pipeline Observability" + path: ../pages-vnightly/nemotron/xenna-observability.mdx + - section: "Data Recipes" + contents: + - page: "Nemotron-CC Data Curation" + path: ../pages-vnightly/nemotron/data/curation/nemotron-cc.mdx + - page: "Long-Document SDG" + path: ../pages-vnightly/nemotron/data/sdg/long-document.mdx + - section: "Architecture" + contents: + - page: "Nemotron Architecture" + path: ../pages-vnightly/architecture/README.mdx + - page: "Design Philosophy" + path: ../pages-vnightly/architecture/design-philosophy.mdx + - page: "CLI Architecture" + path: ../pages-vnightly/architecture/cli-architecture.mdx + - page: "Runspec: [tool.runspec] Specification" + path: ../pages-vnightly/runspec/v1/spec.mdx diff --git a/docs/model-eval/reference/cli-reference.md b/docs/model-eval/reference/cli-reference.md index c57f77681..9eb55f75e 100644 --- a/docs/model-eval/reference/cli-reference.md +++ b/docs/model-eval/reference/cli-reference.md @@ -41,7 +41,7 @@ Invoking the command without `-c` resolves the runspec default, `default.yaml`. | `target.api_endpoint.url=` | OpenAI-compatible endpoint URL for hosted evaluation when `deployment.type=none`. | | `target.api_endpoint.model_id=` | Exact model id advertised by the hosted endpoint. | | `target.api_endpoint.api_key_name=` | Name of the environment variable holding the bearer token. This is the variable name, not the secret. | -| `target.api_endpoint.type=` | Endpoint type expected by the selected task. | +| `target.api_endpoint.type=` | Endpoint type expected by the selected task. | | `evaluation.nemo_evaluator_config.config.params.limit_samples=` | Per-task sample cap for smoke tests. | | `evaluation.nemo_evaluator_config.config.params.parallelism=` | Concurrent requests issued by the evaluator where supported. | | `evaluation.nemo_evaluator_config.config.params.request_timeout=` | Per-request timeout in seconds. | diff --git a/docs/nemotron/data/curation/nemotron-cc.md b/docs/nemotron/data/curation/nemotron-cc.md deleted file mode 100644 index ac9bba4cd..000000000 --- a/docs/nemotron/data/curation/nemotron-cc.md +++ /dev/null @@ -1,51 +0,0 @@ -# Nemotron-CC Data Curation - -The Nemotron-CC recipe curates high-quality pretraining data from [Common Crawl](https://commoncrawl.org/), producing datasets similar to [nvidia/Nemotron-CC-v2](https://huggingface.co/datasets/nvidia/Nemotron-CC-v2). It serves as a reference for running these curation steps on your own data. - -Built on [NeMo Curator](https://github.com/NVIDIA/NeMo-Curator) and [Ray](https://ray.io/), the pipeline scales from a single machine to large GPU clusters. - -## Pipeline - -The recipe is a four-step pipeline that progressively refines raw web data into curated text and synthetic training data: - -``` -Common Crawl тЖТ Extract & Clean тЖТ Deduplicate тЖТ Quality Classify тЖТ Synthetic Data Generation -``` - -| Step | Script | Description | Resources | -|------|--------|-------------|-----------| -| 1 | `step_1-download_extract.py` | Download, extract, language ID, Unicode cleanup | CPU-only | -| 2a | `step_2a-exact_dedup.py` | GPU-accelerated exact deduplication | GPU (identify), CPU (remove) | -| 2b | `step_2b-fuzzy_dedup.py` | MinHash + LSH fuzzy deduplication | GPU (identify), CPU (remove) | -| 2c | `step_2c-substring_dedup/` | Exact substring deduplication using suffix arrays | CPU-only | -| 3 | `step_3-quality_classification.py` | Ensemble quality scoring into 20 buckets | GPU (classify), CPU (ensemble) | -| 4 | `step_4-sdg.py` | LLM-based synthetic data generation on top-quality data | GPU (local inference server, default) or CPU + external LLM endpoint (with `--no-serve-model`) | - -Steps 1тАУ3 progressively filter and annotate the data. Step 4 generates synthetic training data (diverse QA, distillation, knowledge extraction, knowledge lists) from the highest-quality documents (buckets 18тАУ19). - -## Getting Started - -The recipe scripts live in: - -``` -src/nemotron/recipes/data/curation/nemotron-cc/ -``` - -See the recipe README at `src/nemotron/recipes/data/curation/nemotron-cc/README.md` for detailed per-step documentation, resource recommendations, and usage examples. - -## Prerequisites - -- [NeMo Curator](https://github.com/NVIDIA/NeMo-Curator) 1.2.0 (26.04 release) or newer, installed with Ray support -- GPU(s) for steps 2a, 2b, and 3 (deduplication and classification) -- For step 4, one of: GPU(s) to host a local inference server (default), an OpenAI-compatible endpoint (self-hosted vLLM/NIM or cloud, via `--no-serve-model`), or an [NVIDIA Build](https://build.nvidia.com/) API key - -## After Curation - -Once curated, the output can be tokenized and used for downstream model training. - -## Further Reading - -- [Nemotron-CC paper](https://arxiv.org/abs/2412.02595) тАФ methodology and evaluation -- [nvidia/Nemotron-CC-v2](https://huggingface.co/datasets/nvidia/Nemotron-CC-v2) тАФ released dataset on Hugging Face -- [NeMo Curator](https://github.com/NVIDIA/NeMo-Curator) тАФ the underlying data curation library -- [Data Preparation](../../data-prep.md) тАФ last-mile processing for training diff --git a/docs/nemotron/data/sdg/long-document.md b/docs/nemotron/data/sdg/long-document.md deleted file mode 100644 index 9dd9e73ee..000000000 --- a/docs/nemotron/data/sdg/long-document.md +++ /dev/null @@ -1,129 +0,0 @@ -# Long-Document SDG - -The long-document SDG recipe generates synthetic VLM training data from PDF documents тАФ improving long-document understanding capabilities measured against [MMLongBench-Doc](https://arxiv.org/abs/2407.01523). Output is a corpus of question/answer pairs grounded in real document images, optionally judged for quality by a frontier model. - -Built as nine PEP-723 `uv run`-able scripts that double as Nemotron CLI commands (`nemotron data sdg long-document `), and dispatchable to Slurm via [NeMo-Run](../../../nemo_runspec/nemo-run.md). Each producer stage can also auto-deploy its required vLLM endpoint via `--serve` тАФ see below. - -## Pipeline - -``` -01 seed тФАтФАтФмтФА 02 ocr тФАтФАтФАтФА 03 text-qa тФАтФАтФАтФАтФАтФР - тФЬтФА 04 classify тФАтФА 05 visual-qa тФд - тФЬтФА 06 single-page-qa тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФдтФАтФА 09 judge - тФЬтФА 07 windowed-qa тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФд - тФФтФА 08 whole-doc-qa тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФШ -``` - -| Stage | Description | Model | -|---|---|---| -| `seed` | Download PDFs from FinePDFs, render pages to PNG, produce per-page / windowed / whole-document seed parquets | CPU-only | -| `ocr` | OCR with text + bbox metadata via Nemotron-Parse | `nvidia/NVIDIA-Nemotron-Parse-v1.1` | -| `text-qa` | QA pairs from OCR-transcribed text | `openai/gpt-oss-120b` | -| `page-classification` | Page-type and reasoning-complexity classification | `Qwen/Qwen3-VL-30B-A3B-Instruct` | -| `visual-qa` | Visual QA grounded in page images | `Qwen/Qwen3-VL-235B-A22B-Thinking-FP8` | -| `single-page-qa` | Anchored single-page QA across Text/Table/Chart/Image/Layout | same | -| `windowed-qa` | Multi-page sliding-window QA | same | -| `whole-document-qa` | Whole-document cross-page QA | same | -| `judge` | LLM-as-a-judge scoring of any QA output | any OpenAI-compatible frontier endpoint | - -Stages 02тАУ08 are CPU clients to a vLLM endpoint; stage 01 is CPU-only; stage 09 hits a third-party frontier API. Output of every stage is a parquet file consumable by downstream training recipes. - -## Two ways to run a stage - -Each stage works in two modes: - -1. **Standalone via `uv`** тАФ drop into any environment with `uv` and a vLLM endpoint: - - ```bash - uv run --no-project 02-nemotron-parse-ocr-sdg.py \ - --config config/02-ocr.yaml \ - vllm_endpoint=http://localhost:8000/v1 \ - seed_path=./seed_data/seed_per_page.parquet \ - num_records=100 - ``` - -2. **Through the Nemotron CLI** тАФ same recipes, dispatched on Slurm: - - ```bash - nemotron data sdg long-document ocr --batch -c 02-ocr \ - vllm_endpoint=http://compute-node:8000/v1 \ - seed_path=/lustre/.../seed.parquet \ - num_records=100 - ``` - -Configuration is YAML + Hydra-style `key=value` overrides validated by a Pydantic `Config` class тАФ `nemotron data sdg long-document --help` renders the full field table. - -## Auto-deploy with `--serve` - -Producer stages (`ocr`, `text-qa`, `page-classification`, `visual-qa`, `single-page-qa`, `windowed-qa`, `whole-document-qa`) accept `--serve`. When passed, the CLI composes a multi-task NeMo-Run experiment: - -- A **serve task** on a GPU partition brings vLLM up, picks a free TCP port at runtime, polls both `/health` and `/v1/models` to confirm the served model is registered, then publishes its endpoint to a sentinel file on shared storage. -- A **client task** (the recipe) waits on the sentinel, injects `vllm_endpoint=` into its config, runs the recipe, and on exit signals the serve task to clean up. - -```bash -# OCR тАФ auto-deploys nvidia/NVIDIA-Nemotron-Parse-v1.1 on a GPU node, -# runs the recipe against it, tears the deployment down on exit. -nemotron data sdg long-document ocr --batch prep --serve \ - -c 02-ocr \ - seed_path=/lustre/.../seed_per_page.parquet \ - num_records=100 -``` - -Override the default deployment with `--serve-config ` (configs live in `recipes/data/sdg/long-document/deployment/`). - -`--serve` is not offered for `seed` (CPU-only, no model) or `judge` (frontier endpoint, third-party hosted). - -## Cluster operational guidance - -The `seed` stage and the `--serve` *client* tasks are CPU-only. On clusters whose default partitions require GPUs (e.g. NVIDIA's dlw cluster, where `interactive` and `batch` reject CPU-only jobs), use a profile that extends the cluster profile with CPU partitions. dlw ships `[prep]`: - -```toml -[prep] -extends = "dlw" -run_partition = "cpu" -batch_partition = "cpu" -``` - -Use `--batch prep` / `--run prep` for these recipes: - -```bash -nemotron data sdg long-document seed --batch prep -c 01-seed ... -nemotron data sdg long-document ocr --batch prep --serve -c 02-ocr ... -``` - -The serve task always lands on a GPU partition (the cluster's `sdg_serve_partition` from `env.toml`, defaulting to `interactive`); the client task uses the env profile's regular `run_partition` / `batch_partition`. - -## Getting Started - -The recipe scripts live in: - -``` -src/nemotron/recipes/data/sdg/long-document/ -``` - -Refer to the [recipe README](https://github.com/NVIDIA-NeMo/Nemotron/tree/main/src/nemotron/recipes/data/sdg/long-document) for full per-stage documentation, deployment-config schema, troubleshooting, and full-pipeline examples (both manual-vLLM and `--serve` styles). - -## Prerequisites - -- `uv` installed (recipes resolve PEP 723 inline deps at run time). -- For producers (02тАУ08): an OpenAI-compatible vLLM endpoint serving the recipe's required model тАФ either operator-launched, or auto-deployed by `--serve`. -- For the judge (09): an OpenAI-compatible frontier endpoint with a valid API key in an env var. -- For Slurm dispatch: the [`nemotron-evaluator-launcher`-style env.toml profile](../../../nemo_runspec/nemo-run.md) for your cluster. - -## After SDG - -Once the pipeline runs, the resulting parquet files can be: - -- Published to Hugging Face Hub as a public dataset. -- Stored in internal Lustre and registered as a Nemotron / W&B artifact. -- Consumed directly by training recipes via `dataset.path` or HF-dataset-id config. - -The recipe README has copy-pasteable templates for both publish paths. - -## Further Reading - -- [Recipe README](https://github.com/NVIDIA-NeMo/Nemotron/tree/main/src/nemotron/recipes/data/sdg/long-document) тАФ comprehensive per-stage docs, config schemas, troubleshooting. -- [Deployment config schema](https://github.com/NVIDIA-NeMo/Nemotron/tree/main/src/nemotron/recipes/data/sdg/long-document/deployment) тАФ `--serve` deployment YAML reference. -- [MMLongBench-Doc paper](https://arxiv.org/abs/2407.01523) тАФ the benchmark this dataset targets. -- [Nemotron-CC](../curation/nemotron-cc.md) тАФ the sibling pretraining-data curation recipe. -- [Execution through NeMo-Run](../../../nemo_runspec/nemo-run.md) тАФ how the `--run` / `--batch` dispatch works. From 8fad5f24c2c2e25642fae01abd0335a4b24d4a62 Mon Sep 17 00:00:00 2001 From: Mike McKiernan Date: Tue, 2 Jun 2026 13:07:03 -0400 Subject: [PATCH 3/4] chore: Add CI for Fern Signed-off-by: Mike McKiernan --- .github/workflows/fern-docs-preview-build.yml | 31 ++++++++++++++++ .../workflows/fern-docs-preview-cleanup.yml | 33 +++++++++++++++++ .github/workflows/fern-docs-preview-close.yml | 30 +++++++++++++++ .../workflows/fern-docs-preview-comment.yml | 34 +++++++++++++++++ .github/workflows/fern-docs-publish.yml | 37 +++++++++++++++++++ 5 files changed, 165 insertions(+) create mode 100644 .github/workflows/fern-docs-preview-build.yml create mode 100644 .github/workflows/fern-docs-preview-cleanup.yml create mode 100644 .github/workflows/fern-docs-preview-close.yml create mode 100644 .github/workflows/fern-docs-preview-comment.yml create mode 100644 .github/workflows/fern-docs-publish.yml diff --git a/.github/workflows/fern-docs-preview-build.yml b/.github/workflows/fern-docs-preview-build.yml new file mode 100644 index 000000000..1bd0f0b03 --- /dev/null +++ b/.github/workflows/fern-docs-preview-build.yml @@ -0,0 +1,31 @@ +# Copyright (c) 2026, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Build half (collector) of the Fern docs preview pair. +# +# Fork-PR safe: collects fern/ sources and PR metadata into an artifact +# without using any secrets. The companion comment workflow runs in the +# base-repo context via workflow_run and consumes the artifact. +# +name: "Preview Fern Docs: Build" + +on: + pull_request: + paths: + - 'fern/**' + - '.github/workflows/fern-docs-preview-build.yml' + +jobs: + collect: + uses: NVIDIA-NeMo/FW-CI-templates/.github/workflows/_fern_docs_preview_build.yml@mmck-docs-fern diff --git a/.github/workflows/fern-docs-preview-cleanup.yml b/.github/workflows/fern-docs-preview-cleanup.yml new file mode 100644 index 000000000..6fb7b3b61 --- /dev/null +++ b/.github/workflows/fern-docs-preview-cleanup.yml @@ -0,0 +1,33 @@ +# Copyright (c) 2026, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Cleanup half of the Fern docs preview cleanup pair. +# +# Triggered by workflow_run after "Preview Fern Docs: Close" completes. +# Reads the preview URL artifact and calls fern docs preview delete --url. +# +# Required repo or org secret: DOCS_FERN_TOKEN + +name: "Preview Fern Docs: Cleanup" + +on: + workflow_run: + workflows: ["Preview Fern Docs: Close"] + types: [completed] + +jobs: + cleanup: + uses: NVIDIA-NeMo/FW-CI-templates/.github/workflows/_fern_docs_preview_cleanup.yml@mmck-docs-fern + secrets: + DOCS_FERN_TOKEN: ${{ secrets.DOCS_FERN_TOKEN }} diff --git a/.github/workflows/fern-docs-preview-close.yml b/.github/workflows/fern-docs-preview-close.yml new file mode 100644 index 000000000..ae6a5870a --- /dev/null +++ b/.github/workflows/fern-docs-preview-close.yml @@ -0,0 +1,30 @@ +# Copyright (c) 2026, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Close half (collector) of the Fern docs preview cleanup pair. +# +# Fork-PR safe: reads the preview URL marker from the PR comment using +# read-only GITHUB_TOKEN access and uploads it as an artifact for the +# cleanup workflow to consume. +# + +name: "Preview Fern Docs: Close" + +on: + pull_request: + types: [closed] + +jobs: + close: + uses: NVIDIA-NeMo/FW-CI-templates/.github/workflows/_fern_docs_preview_close_collect.yml@mmck-docs-fern diff --git a/.github/workflows/fern-docs-preview-comment.yml b/.github/workflows/fern-docs-preview-comment.yml new file mode 100644 index 000000000..81018971f --- /dev/null +++ b/.github/workflows/fern-docs-preview-comment.yml @@ -0,0 +1,34 @@ +# Copyright (c) 2026, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Comment half of the Fern docs preview pair. +# +# Triggered by workflow_run after "Preview Fern Docs: Build" completes. +# Runs in the base-repo context, so DOCS_FERN_TOKEN is available even when +# the originating PR is from a fork. +# +# Required repo or org secret: DOCS_FERN_TOKEN + +name: "Preview Fern Docs: Comment" + +on: + workflow_run: + workflows: ["Preview Fern Docs: Build"] + types: [completed] + +jobs: + preview: + uses: NVIDIA-NeMo/FW-CI-templates/.github/workflows/_fern_docs_preview_comment.yml@mmck-docs-fern + secrets: + DOCS_FERN_TOKEN: ${{ secrets.DOCS_FERN_TOKEN }} diff --git a/.github/workflows/fern-docs-publish.yml b/.github/workflows/fern-docs-publish.yml new file mode 100644 index 000000000..6d5a491af --- /dev/null +++ b/.github/workflows/fern-docs-publish.yml @@ -0,0 +1,37 @@ +# Copyright (c) 2026, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Publishes the Fern documentation site on push to main and on manual dispatch. +# +# Required repo or org secret: DOCS_FERN_TOKEN + +name: Publish Fern Docs + +on: + push: + branches: [main] + paths: + - 'fern/**' + - '.github/workflows/fern-docs-publish.yml' + workflow_dispatch: + +concurrency: + group: fern-docs-publish + cancel-in-progress: false + +jobs: + publish: + uses: NVIDIA-NeMo/FW-CI-templates/.github/workflows/_fern_docs_publish.yml@mmck-docs-fern + secrets: + DOCS_FERN_TOKEN: ${{ secrets.DOCS_FERN_TOKEN }} From 67d0118fd579218dc378ae5031eba53f03033172 Mon Sep 17 00:00:00 2001 From: Mike McKiernan Date: Tue, 2 Jun 2026 16:17:11 -0400 Subject: [PATCH 4/4] chore: Remove Sphinx docs files Signed-off-by: Mike McKiernan --- docs/_ext/nemotron_customize.py | 483 ------------ docs/_static/css/termynal.css | 144 ---- docs/_static/customize.css | 4 - docs/_static/js/termynal-init.js | 139 ---- docs/_static/js/termynal.js | 265 ------- docs/application-examples.md | 92 --- docs/architecture/README.md | 58 -- docs/architecture/cli-architecture.md | 310 -------- docs/architecture/design-philosophy.md | 196 ----- docs/assets/expert-parallelism.png | Bin 37765 -> 0 bytes docs/assets/nemo-framework-overview.png | Bin 49883 -> 0 bytes docs/assets/nemo-rl-actors.png | Bin 622414 -> 0 bytes docs/assets/omni-3.png | Bin 214801 -> 0 bytes docs/assets/omni3/omni_loss_curve.png | Bin 87847 -> 0 bytes docs/assets/sequence-parallelism.png | Bin 86433 -> 0 bytes docs/assets/super3/avg_benchmark.png | Bin 43092 -> 0 bytes docs/assets/super3/latent_moe.png | Bin 91169 -> 0 bytes docs/assets/super3/super-pattern.png | Bin 61294 -> 0 bytes docs/assets/super3/super-phase1.png | Bin 59891 -> 0 bytes docs/assets/super3/super-phase2.png | Bin 52524 -> 0 bytes docs/assets/super3/super_sft_blend.png | Bin 76746 -> 0 bytes docs/assets/tensor-parallelism.png | Bin 199650 -> 0 bytes docs/broken_links_false_positives.json | 3 - docs/build-benchmarks/_images/funnel.png | Bin 55949 -> 0 bytes .../explanation/data-preparation.md | 161 ---- .../build-benchmarks/explanation/filtering.md | 133 ---- .../explanation/get-right-questions.md | 75 -- docs/build-benchmarks/explanation/index.md | 110 --- .../explanation/pipeline-overview.md | 44 -- .../explanation/quality-validation.md | 32 - .../explanation/question-generation.md | 114 --- .../explanation/translation.md | 114 --- docs/build-benchmarks/getting-started.md | 104 --- .../how-to/custom-model-endpoints.md | 37 - docs/build-benchmarks/how-to/domain-data.md | 105 --- docs/build-benchmarks/how-to/index.md | 94 --- docs/build-benchmarks/how-to/prepare-data.md | 87 --- docs/build-benchmarks/how-to/prompt-tuning.md | 230 ------ docs/build-benchmarks/how-to/skip-stages.md | 40 - docs/build-benchmarks/index.md | 147 ---- docs/build-benchmarks/reference/benchmarks.md | 24 - .../reference/generate-config.md | 75 -- docs/build-benchmarks/reference/index.md | 85 --- .../reference/output-files.md | 88 --- .../reference/translation-config.md | 51 -- .../reference/troubleshooting.md | 57 -- docs/conf.py | 150 ---- docs/curate/getting-started.md | 125 --- docs/curate/how-to/enable-filters.md | 73 -- docs/curate/how-to/index.md | 23 - docs/curate/how-to/run-local-jsonl.md | 70 -- .../curate/how-to/use-huggingface-snapshot.md | 70 -- docs/curate/index.md | 134 ---- docs/curate/reference/cli-curate.md | 75 -- docs/curate/reference/curate-config.md | 116 --- docs/curate/reference/index.md | 24 - docs/curate/reference/io-format.md | 50 -- docs/curate/reference/troubleshooting.md | 31 - docs/deployment-guides.md | 104 --- docs/index.md | 324 -------- .../endpoint-types-and-benchmarks.md | 54 -- docs/model-eval/explanation/index.md | 63 -- .../explanation/pipeline-overview.md | 68 -- .../explanation/tokenizer-alignment.md | 50 -- docs/model-eval/getting-started.md | 123 --- docs/model-eval/how-to/discover-the-step.md | 75 -- .../how-to/evaluate-deployed-checkpoint.md | 79 -- docs/model-eval/how-to/index.md | 51 -- .../how-to/run-hosted-evaluation.md | 84 -- docs/model-eval/index.md | 170 ----- .../reference/benchmarks-catalog.md | 70 -- docs/model-eval/reference/cli-reference.md | 111 --- docs/model-eval/reference/config-schema.md | 122 --- docs/model-eval/reference/index.md | 67 -- docs/model-eval/reference/output-artifacts.md | 78 -- docs/model-eval/reference/troubleshooting.md | 94 --- docs/model-eval/using-skills.md | 74 -- docs/nemo_runspec/artifacts.md | 286 ------- docs/nemo_runspec/nemo-run.md | 719 ------------------ docs/nemo_runspec/omegaconf.md | 330 -------- docs/nemo_runspec/package-readme.md | 6 - docs/project.json | 4 - docs/runspec/v1/spec.md | 155 ---- docs/sdg/_snippets/input/greenteme.yaml | 75 -- .../input/greenteme_inquiry_seeds.jsonl | 12 - .../input/step-with-person-datetime.py | 327 -------- .../_snippets/output/greenteme_preview.jsonl | 32 - docs/sdg/_snippets/output/preview.txt | 87 --- .../_snippets/output/sft_first_record.jsonl | 14 - docs/sdg/getting-started.md | 146 ---- docs/sdg/how-to/create-domain-dataset.md | 130 ---- docs/sdg/how-to/dispatch-to-cluster.md | 162 ---- docs/sdg/how-to/index.md | 80 -- docs/sdg/how-to/preference-data.md | 93 --- docs/sdg/how-to/run.md | 61 -- docs/sdg/how-to/tool-call-data.md | 122 --- docs/sdg/index.md | 146 ---- docs/sdg/planning.md | 47 -- docs/sdg/reference/cli-reference.md | 111 --- docs/sdg/reference/config-schema.md | 213 ------ docs/sdg/reference/index.md | 68 -- docs/sdg/reference/output-projections.md | 150 ---- docs/sdg/reference/troubleshooting.md | 112 --- docs/sdg/using-skills.md | 90 --- docs/steps/airgap.md | 150 ---- docs/steps/basics.md | 146 ---- docs/steps/getting-started.md | 135 ---- docs/steps/index.md | 156 ---- docs/train-models/_snippets/input/env.tmpl | 29 - .../_snippets/input/sample-messages.jsonl | 16 - .../train-models/_snippets/output/gs-show.txt | 22 - .../explanation/artifact-graph.md | 41 - docs/train-models/explanation/basics.md | 102 --- docs/train-models/explanation/index.md | 50 -- .../explanation/training-libraries.md | 56 -- docs/train-models/getting-started.md | 120 --- .../how-to/choose-peft-backend.md | 35 - docs/train-models/how-to/choose-rl-step.md | 42 - .../train-models/how-to/choose-sft-backend.md | 38 - .../how-to/convert-checkpoints.md | 123 --- .../how-to/data-and-checkpoint-formats.md | 35 - docs/train-models/how-to/env-and-executors.md | 26 - docs/train-models/how-to/index.md | 95 --- docs/train-models/how-to/run-optimization.md | 42 - docs/train-models/how-to/run-sft-automodel.md | 80 -- docs/train-models/index.md | 90 --- docs/train-models/reference/cli-reference.md | 274 ------- .../reference/config-conventions.md | 100 --- .../reference/convert/hf-to-megatron.md | 110 --- docs/train-models/reference/convert/index.md | 62 -- .../reference/convert/megatron-to-hf.md | 117 --- .../reference/convert/merge-lora.md | 153 ---- .../reference/env-profile-generator.md | 136 ---- docs/train-models/reference/index.md | 123 --- .../reference/optimize/distill.md | 182 ----- docs/train-models/reference/optimize/index.md | 62 -- docs/train-models/reference/optimize/prune.md | 174 ----- .../reference/optimize/quantize.md | 164 ---- docs/train-models/reference/peft/automodel.md | 193 ----- docs/train-models/reference/peft/index.md | 54 -- .../reference/peft/megatron-bridge.md | 191 ----- docs/train-models/reference/rl/dpo.md | 153 ---- docs/train-models/reference/rl/index.md | 62 -- docs/train-models/reference/rl/rlhf.md | 162 ---- docs/train-models/reference/rl/rlvr.md | 179 ----- docs/train-models/reference/sft/automodel.md | 193 ----- docs/train-models/reference/sft/index.md | 54 -- .../reference/sft/megatron-bridge.md | 212 ------ docs/train-models/reference/step-catalog.md | 66 -- docs/train-models/using-skill.md | 76 -- .../_snippets/input/train_sample.jsonl | 5 - .../_snippets/output/translated.jsonl | 466 ------------ .../explanation/faith-evaluation.md | 79 -- docs/translation/explanation/index.md | 64 -- .../explanation/pipeline-overview.md | 62 -- docs/translation/explanation/segmentation.md | 48 -- docs/translation/getting-started.md | 138 ---- .../how-to/configure-fields-and-output.md | 55 -- docs/translation/how-to/index.md | 111 --- .../how-to/run-faith-evaluation.md | 66 -- .../how-to/run-google-aws-translation.md | 56 -- .../translation/how-to/run-llm-translation.md | 46 -- .../translation/how-to/run-nmt-translation.md | 73 -- .../how-to/use-fine-segmentation.md | 43 -- docs/translation/index.md | 154 ---- docs/translation/reference/cli-translation.md | 78 -- docs/translation/reference/index.md | 56 -- docs/translation/reference/io-format.md | 57 -- .../translation/reference/translate-config.md | 102 --- docs/translation/reference/troubleshooting.md | 64 -- docs/translation/using-skills.md | 50 -- docs/versions1.json | 12 - 172 files changed, 17047 deletions(-) delete mode 100644 docs/_ext/nemotron_customize.py delete mode 100644 docs/_static/css/termynal.css delete mode 100644 docs/_static/customize.css delete mode 100644 docs/_static/js/termynal-init.js delete mode 100644 docs/_static/js/termynal.js delete mode 100644 docs/application-examples.md delete mode 100644 docs/architecture/README.md delete mode 100644 docs/architecture/cli-architecture.md delete mode 100644 docs/architecture/design-philosophy.md delete mode 100644 docs/assets/expert-parallelism.png delete mode 100644 docs/assets/nemo-framework-overview.png delete mode 100644 docs/assets/nemo-rl-actors.png delete mode 100644 docs/assets/omni-3.png delete mode 100644 docs/assets/omni3/omni_loss_curve.png delete mode 100644 docs/assets/sequence-parallelism.png delete mode 100644 docs/assets/super3/avg_benchmark.png delete mode 100644 docs/assets/super3/latent_moe.png delete mode 100644 docs/assets/super3/super-pattern.png delete mode 100644 docs/assets/super3/super-phase1.png delete mode 100644 docs/assets/super3/super-phase2.png delete mode 100644 docs/assets/super3/super_sft_blend.png delete mode 100644 docs/assets/tensor-parallelism.png delete mode 100644 docs/broken_links_false_positives.json delete mode 100644 docs/build-benchmarks/_images/funnel.png delete mode 100644 docs/build-benchmarks/explanation/data-preparation.md delete mode 100644 docs/build-benchmarks/explanation/filtering.md delete mode 100644 docs/build-benchmarks/explanation/get-right-questions.md delete mode 100644 docs/build-benchmarks/explanation/index.md delete mode 100644 docs/build-benchmarks/explanation/pipeline-overview.md delete mode 100644 docs/build-benchmarks/explanation/quality-validation.md delete mode 100644 docs/build-benchmarks/explanation/question-generation.md delete mode 100644 docs/build-benchmarks/explanation/translation.md delete mode 100644 docs/build-benchmarks/getting-started.md delete mode 100644 docs/build-benchmarks/how-to/custom-model-endpoints.md delete mode 100644 docs/build-benchmarks/how-to/domain-data.md delete mode 100644 docs/build-benchmarks/how-to/index.md delete mode 100644 docs/build-benchmarks/how-to/prepare-data.md delete mode 100644 docs/build-benchmarks/how-to/prompt-tuning.md delete mode 100644 docs/build-benchmarks/how-to/skip-stages.md delete mode 100644 docs/build-benchmarks/index.md delete mode 100644 docs/build-benchmarks/reference/benchmarks.md delete mode 100644 docs/build-benchmarks/reference/generate-config.md delete mode 100644 docs/build-benchmarks/reference/index.md delete mode 100644 docs/build-benchmarks/reference/output-files.md delete mode 100644 docs/build-benchmarks/reference/translation-config.md delete mode 100644 docs/build-benchmarks/reference/troubleshooting.md delete mode 100644 docs/conf.py delete mode 100644 docs/curate/getting-started.md delete mode 100644 docs/curate/how-to/enable-filters.md delete mode 100644 docs/curate/how-to/index.md delete mode 100644 docs/curate/how-to/run-local-jsonl.md delete mode 100644 docs/curate/how-to/use-huggingface-snapshot.md delete mode 100644 docs/curate/index.md delete mode 100644 docs/curate/reference/cli-curate.md delete mode 100644 docs/curate/reference/curate-config.md delete mode 100644 docs/curate/reference/index.md delete mode 100644 docs/curate/reference/io-format.md delete mode 100644 docs/curate/reference/troubleshooting.md delete mode 100644 docs/deployment-guides.md delete mode 100644 docs/index.md delete mode 100644 docs/model-eval/explanation/endpoint-types-and-benchmarks.md delete mode 100644 docs/model-eval/explanation/index.md delete mode 100644 docs/model-eval/explanation/pipeline-overview.md delete mode 100644 docs/model-eval/explanation/tokenizer-alignment.md delete mode 100644 docs/model-eval/getting-started.md delete mode 100644 docs/model-eval/how-to/discover-the-step.md delete mode 100644 docs/model-eval/how-to/evaluate-deployed-checkpoint.md delete mode 100644 docs/model-eval/how-to/index.md delete mode 100644 docs/model-eval/how-to/run-hosted-evaluation.md delete mode 100644 docs/model-eval/index.md delete mode 100644 docs/model-eval/reference/benchmarks-catalog.md delete mode 100644 docs/model-eval/reference/cli-reference.md delete mode 100644 docs/model-eval/reference/config-schema.md delete mode 100644 docs/model-eval/reference/index.md delete mode 100644 docs/model-eval/reference/output-artifacts.md delete mode 100644 docs/model-eval/reference/troubleshooting.md delete mode 100644 docs/model-eval/using-skills.md delete mode 100644 docs/nemo_runspec/artifacts.md delete mode 100644 docs/nemo_runspec/nemo-run.md delete mode 100644 docs/nemo_runspec/omegaconf.md delete mode 100644 docs/nemo_runspec/package-readme.md delete mode 100644 docs/project.json delete mode 100644 docs/runspec/v1/spec.md delete mode 100644 docs/sdg/_snippets/input/greenteme.yaml delete mode 100644 docs/sdg/_snippets/input/greenteme_inquiry_seeds.jsonl delete mode 100644 docs/sdg/_snippets/input/step-with-person-datetime.py delete mode 100644 docs/sdg/_snippets/output/greenteme_preview.jsonl delete mode 100644 docs/sdg/_snippets/output/preview.txt delete mode 100644 docs/sdg/_snippets/output/sft_first_record.jsonl delete mode 100644 docs/sdg/getting-started.md delete mode 100644 docs/sdg/how-to/create-domain-dataset.md delete mode 100644 docs/sdg/how-to/dispatch-to-cluster.md delete mode 100644 docs/sdg/how-to/index.md delete mode 100644 docs/sdg/how-to/preference-data.md delete mode 100644 docs/sdg/how-to/run.md delete mode 100644 docs/sdg/how-to/tool-call-data.md delete mode 100644 docs/sdg/index.md delete mode 100644 docs/sdg/planning.md delete mode 100644 docs/sdg/reference/cli-reference.md delete mode 100644 docs/sdg/reference/config-schema.md delete mode 100644 docs/sdg/reference/index.md delete mode 100644 docs/sdg/reference/output-projections.md delete mode 100644 docs/sdg/reference/troubleshooting.md delete mode 100644 docs/sdg/using-skills.md delete mode 100644 docs/steps/airgap.md delete mode 100644 docs/steps/basics.md delete mode 100644 docs/steps/getting-started.md delete mode 100644 docs/steps/index.md delete mode 100644 docs/train-models/_snippets/input/env.tmpl delete mode 100644 docs/train-models/_snippets/input/sample-messages.jsonl delete mode 100644 docs/train-models/_snippets/output/gs-show.txt delete mode 100644 docs/train-models/explanation/artifact-graph.md delete mode 100644 docs/train-models/explanation/basics.md delete mode 100644 docs/train-models/explanation/index.md delete mode 100644 docs/train-models/explanation/training-libraries.md delete mode 100644 docs/train-models/getting-started.md delete mode 100644 docs/train-models/how-to/choose-peft-backend.md delete mode 100644 docs/train-models/how-to/choose-rl-step.md delete mode 100644 docs/train-models/how-to/choose-sft-backend.md delete mode 100644 docs/train-models/how-to/convert-checkpoints.md delete mode 100644 docs/train-models/how-to/data-and-checkpoint-formats.md delete mode 100644 docs/train-models/how-to/env-and-executors.md delete mode 100644 docs/train-models/how-to/index.md delete mode 100644 docs/train-models/how-to/run-optimization.md delete mode 100644 docs/train-models/how-to/run-sft-automodel.md delete mode 100644 docs/train-models/index.md delete mode 100644 docs/train-models/reference/cli-reference.md delete mode 100644 docs/train-models/reference/config-conventions.md delete mode 100644 docs/train-models/reference/convert/hf-to-megatron.md delete mode 100644 docs/train-models/reference/convert/index.md delete mode 100644 docs/train-models/reference/convert/megatron-to-hf.md delete mode 100644 docs/train-models/reference/convert/merge-lora.md delete mode 100644 docs/train-models/reference/env-profile-generator.md delete mode 100644 docs/train-models/reference/index.md delete mode 100644 docs/train-models/reference/optimize/distill.md delete mode 100644 docs/train-models/reference/optimize/index.md delete mode 100644 docs/train-models/reference/optimize/prune.md delete mode 100644 docs/train-models/reference/optimize/quantize.md delete mode 100644 docs/train-models/reference/peft/automodel.md delete mode 100644 docs/train-models/reference/peft/index.md delete mode 100644 docs/train-models/reference/peft/megatron-bridge.md delete mode 100644 docs/train-models/reference/rl/dpo.md delete mode 100644 docs/train-models/reference/rl/index.md delete mode 100644 docs/train-models/reference/rl/rlhf.md delete mode 100644 docs/train-models/reference/rl/rlvr.md delete mode 100644 docs/train-models/reference/sft/automodel.md delete mode 100644 docs/train-models/reference/sft/index.md delete mode 100644 docs/train-models/reference/sft/megatron-bridge.md delete mode 100644 docs/train-models/reference/step-catalog.md delete mode 100644 docs/train-models/using-skill.md delete mode 100644 docs/translation/_snippets/input/train_sample.jsonl delete mode 100644 docs/translation/_snippets/output/translated.jsonl delete mode 100644 docs/translation/explanation/faith-evaluation.md delete mode 100644 docs/translation/explanation/index.md delete mode 100644 docs/translation/explanation/pipeline-overview.md delete mode 100644 docs/translation/explanation/segmentation.md delete mode 100644 docs/translation/getting-started.md delete mode 100644 docs/translation/how-to/configure-fields-and-output.md delete mode 100644 docs/translation/how-to/index.md delete mode 100644 docs/translation/how-to/run-faith-evaluation.md delete mode 100644 docs/translation/how-to/run-google-aws-translation.md delete mode 100644 docs/translation/how-to/run-llm-translation.md delete mode 100644 docs/translation/how-to/run-nmt-translation.md delete mode 100644 docs/translation/how-to/use-fine-segmentation.md delete mode 100644 docs/translation/index.md delete mode 100644 docs/translation/reference/cli-translation.md delete mode 100644 docs/translation/reference/index.md delete mode 100644 docs/translation/reference/io-format.md delete mode 100644 docs/translation/reference/translate-config.md delete mode 100644 docs/translation/reference/troubleshooting.md delete mode 100644 docs/translation/using-skills.md delete mode 100644 docs/versions1.json diff --git a/docs/_ext/nemotron_customize.py b/docs/_ext/nemotron_customize.py deleted file mode 100644 index 8dc746733..000000000 --- a/docs/_ext/nemotron_customize.py +++ /dev/null @@ -1,483 +0,0 @@ -from __future__ import annotations - -from pathlib import Path -import re -import tomllib - -from docutils import nodes -from docutils.parsers.rst import Directive -from docutils.statemachine import ViewList -from sphinx.application import Sphinx - - -REPO_ROOT = Path(__file__).resolve().parents[2] -GITHUB_BLOB_BASE = "https://github.com/NVIDIA-NeMo/Nemotron/blob/main" -GITHUB_TREE_BASE = "https://github.com/NVIDIA-NeMo/Nemotron/tree/main" - - -class StepTomlDirective(Directive): - required_arguments = 1 - has_content = False - - def run(self) -> list[nodes.Node]: - path = _resolve_repo_path(self.arguments[0]) - if not path.exists(): - return [_error(self, f"step-toml could not find file: {path}")] - - try: - data = _load_toml(path) - except Exception as exc: # pragma: no cover - surfaced in docs build - return [_error(self, f"step-toml failed to parse {path}: {exc}")] - - step = data.get("step", {}) - container = nodes.container(classes=["nemotron-step-toml"]) - - title = str(step.get("name") or path.parent.name) - container += nodes.rubric(text=title) - - description = step.get("description") or step.get("summary") - if description: - container += nodes.paragraph(text=str(description).strip()) - - metadata = nodes.field_list() - _append_field(metadata, "Category", [str(step.get("category", ""))]) - _append_field(metadata, "Tags", _normalize_sequence(step.get("tags"))) - if metadata.children: - container += metadata - - container.extend(_table_section("Consumes", [ - [ - str(entry.get("type", "")), - str(entry.get("description", "")), - _yes_no(entry.get("required", True)), - ] - for entry in _table_list(data.get("consumes")) - ], ["Type", "Description", "Required"])) - - container.extend(_table_section("Produces", [ - [ - str(entry.get("type", "")), - str(entry.get("description", "")), - ] - for entry in _table_list(data.get("produces")) - ], ["Type", "Description"])) - - container.extend(_table_section("Parameters", [ - [ - str(entry.get("name", "")), - str(entry.get("description", "")), - _format_scalar(entry.get("default")), - _format_sequence(entry.get("choices") or entry.get("values")), - ] - for entry in _table_list(data.get("parameters")) - ], ["Name", "Description", "Default", "Choices"])) - - container.extend(_table_section("Models", [ - [ - str(entry.get("name", "")), - str(entry.get("description") or entry.get("notes") or ""), - _format_scalar(entry.get("default")), - _format_scalar(entry.get("min_gpus")), - ] - for entry in _table_list(data.get("models")) - ], ["Name", "Description", "Default", "Min GPUs"])) - - strategies = _table_list(data.get("strategies")) - if strategies: - container += _list_admonition( - "Strategies", - "step-strategies", - [ - _join_parts( - [ - ("When", entry.get("when")), - ("Then", entry.get("then") or entry.get("recommendation")), - ("Skill", entry.get("skill")), - ] - ) - for entry in strategies - ], - ) - - errors = _table_list(data.get("errors")) - if errors: - container += _list_admonition( - "Errors", - "step-errors", - [ - _join_parts( - [ - ("Name", entry.get("name") or entry.get("symptom")), - ("Cause", entry.get("cause")), - ("Recovery", entry.get("recovery") or entry.get("fix")), - ("Skill", entry.get("skill")), - ] - ) - for entry in errors - ], - ) - - reference = data.get("reference", {}) - if isinstance(reference, dict) and reference: - container += nodes.rubric(text="Reference") - refs = nodes.bullet_list() - for key, value in reference.items(): - values = _normalize_sequence(value) - if not values: - continue - item = nodes.list_item() - item += nodes.paragraph(text=f"{key}:") - nested = nodes.bullet_list() - for raw in values: - nested_item = nodes.list_item() - nested_item += _link_paragraph(raw) - nested += nested_item - item += nested - refs += item - if refs.children: - container += refs - - return [container] - - -class TypesTomlDirective(Directive): - required_arguments = 1 - has_content = False - - def run(self) -> list[nodes.Node]: - path = _resolve_repo_path(self.arguments[0]) - if not path.exists(): - return [_error(self, f"types-toml could not find file: {path}")] - - try: - data = _load_toml(path) - except Exception as exc: # pragma: no cover - surfaced in docs build - return [_error(self, f"types-toml failed to parse {path}: {exc}")] - - type_entries = _extract_types(data) - rows = [] - for name in sorted(type_entries): - entry = type_entries[name] - converts = [] - for target, step in _normalize_mapping(entry.get("convert_to")).items(): - converts.append(f"{target} ({step})" if step else str(target)) - rows.append([ - name, - str(entry.get("description", "")), - _format_sequence(entry.get("is_a")), - ", ".join(converts), - ]) - - container = nodes.container(classes=["nemotron-types-toml"]) - container += _make_table( - ["Type", "Description", "Compatible With (is_a)", "Converts To"], - rows, - ) - - if _mermaid_enabled(self): - mermaid = _build_type_graph(type_entries) - if mermaid: - container += nodes.rubric(text="Type Graph") - mermaid_container = nodes.container(classes=["nemotron-type-graph"]) - view = ViewList() - view.append(".. mermaid::", "nemotron_customize") - view.append("", "nemotron_customize") - for line in mermaid.splitlines(): - view.append(f" {line}", "nemotron_customize") - self.state.nested_parse(view, self.content_offset, mermaid_container) - container += mermaid_container - - return [container] - - -def _resolve_repo_path(argument: str) -> Path: - path = Path(argument.strip()) - return path if path.is_absolute() else (REPO_ROOT / path).resolve() - - -def _load_toml(path: Path) -> dict: - with path.open("rb") as handle: - return tomllib.load(handle) - - -def _extract_types(data: dict) -> dict[str, dict]: - if isinstance(data.get("types"), dict): - types = {str(name): value for name, value in data["types"].items() if isinstance(value, dict)} - global_convert = _normalize_mapping(data.get("convert_to")) - for mapping in global_convert.values(): - if isinstance(mapping, dict): - source = str(mapping.get("from", "")) - target = str(mapping.get("to", "")) - step = str(mapping.get("step", "")) - if source and target and source in types: - convert_map = dict(_normalize_mapping(types[source].get("convert_to"))) - convert_map[target] = step - types[source]["convert_to"] = convert_map - return types - return {str(name): value for name, value in data.items() if isinstance(value, dict)} - - -def _make_table(headers: list[str], rows: list[list[str]]) -> nodes.table: - table = nodes.table() - tgroup = nodes.tgroup(cols=len(headers)) - table += tgroup - - for _ in headers: - tgroup += nodes.colspec(colwidth=1) - - thead = nodes.thead() - tgroup += thead - header_row = nodes.row() - thead += header_row - for header in headers: - entry = nodes.entry() - entry += nodes.paragraph(text=header) - header_row += entry - - tbody = nodes.tbody() - tgroup += tbody - for row_values in rows: - row = nodes.row() - tbody += row - for value in row_values: - entry = nodes.entry() - entry += nodes.paragraph(text=value) - row += entry - - return table - - -def _table_section(title: str, rows: list[list[str]], headers: list[str]) -> list[nodes.Node]: - if not rows: - return [] - return [nodes.rubric(text=title), _make_table(headers, rows)] - - -def _list_admonition(title: str, css_class: str, items: list[str]) -> nodes.admonition: - admonition = nodes.admonition(classes=["admonition", css_class]) - admonition += nodes.title(text=title) - bullet_list = nodes.bullet_list() - for item_text in items: - if not item_text: - continue - item = nodes.list_item() - item += _paragraph_with_links(item_text) - bullet_list += item - admonition += bullet_list - return admonition - - -def _append_field(field_list: nodes.field_list, name: str, values: list[str]) -> None: - cleaned = [value for value in values if value] - if not cleaned: - return - - field = nodes.field() - field += nodes.field_name(text=name) - body = nodes.field_body() - if len(cleaned) == 1: - body += nodes.paragraph(text=cleaned[0]) - else: - bullet_list = nodes.bullet_list() - for value in cleaned: - item = nodes.list_item() - item += nodes.paragraph(text=value) - bullet_list += item - body += bullet_list - field += body - field_list += field - - -def _normalize_sequence(value: object) -> list[str]: - if value is None: - return [] - if isinstance(value, str): - stripped = value.strip() - return [stripped] if stripped else [] - if isinstance(value, (list, tuple, set)): - return [str(item).strip() for item in value if str(item).strip()] - return [str(value).strip()] - - -def _normalize_mapping(value: object) -> dict[str, object]: - if isinstance(value, dict): - return {str(key): item for key, item in value.items()} - return {} - - -def _table_list(value: object) -> list[dict]: - if isinstance(value, list): - return [entry for entry in value if isinstance(entry, dict)] - return [] - - -def _format_scalar(value: object) -> str: - if value is None: - return "" - if isinstance(value, bool): - return "yes" if value else "no" - return str(value) - - -def _format_sequence(value: object) -> str: - return ", ".join(_normalize_sequence(value)) - - -def _yes_no(value: object) -> str: - return "yes" if bool(value) else "no" - - -def _join_parts(parts: list[tuple[str, object]]) -> str: - rendered = [] - for label, value in parts: - if value is None: - continue - text = _format_sequence(value) if isinstance(value, (list, tuple, set)) else str(value).strip() - if text: - rendered.append(f"{label}: {text}") - return "; ".join(rendered) - - -def _paragraph_with_links(text: str) -> nodes.paragraph: - paragraph = nodes.paragraph() - parts = re.split(r"(https?://\S+|(?:[A-Za-z0-9_.-]+/)+[A-Za-z0-9_.-]+/?(?:[A-Za-z0-9_.-]+)?)", text) - for part in parts: - if not part: - continue - if part.startswith("http://") or part.startswith("https://"): - paragraph += nodes.reference(text=part, refuri=part) - elif "/" in part and not part.startswith(" ") and not part.endswith(" "): - paragraph += nodes.reference(text=part, refuri=_repo_link(part)) - else: - paragraph += nodes.Text(part) - return paragraph - - -def _link_paragraph(value: str) -> nodes.paragraph: - paragraph = nodes.paragraph() - paragraph += nodes.reference(text=value, refuri=_repo_link(value)) - return paragraph - - -def _repo_link(value: str) -> str: - if value.startswith("http://") or value.startswith("https://"): - return value - candidate = value.strip() - if not candidate: - return value - if candidate.endswith("/") or Path(candidate).suffix == "": - return f"{GITHUB_TREE_BASE}/{candidate.rstrip('/')}" - return f"{GITHUB_BLOB_BASE}/{candidate}" - - -def _build_type_graph(type_entries: dict[str, dict]) -> str: - lines = ["flowchart LR"] - seen_edges: set[str] = set() - - for name in sorted(type_entries): - entry = type_entries[name] - for parent in _normalize_sequence(entry.get("is_a")): - edge = f' { _node_id(name) }["{name}"] -->|is_a| { _node_id(parent) }["{parent}"]' - if edge not in seen_edges: - lines.append(edge) - seen_edges.add(edge) - - for target, step in _normalize_mapping(entry.get("convert_to")).items(): - label = str(step) if step else "convert" - edge = ( - f' { _node_id(name) }["{name}"] -. "{label}" .-> ' - f'{ _node_id(str(target)) }["{target}"]' - ) - if edge not in seen_edges: - lines.append(edge) - seen_edges.add(edge) - - return "\n".join(lines) if len(lines) > 1 else "" - - -def _node_id(name: str) -> str: - sanitized = re.sub(r"[^A-Za-z0-9_]", "_", name) - return f"type_{sanitized}" - - -def _error(directive: Directive, message: str) -> nodes.error: - error = nodes.error() - error += nodes.paragraph(text=message) - return error - - -def _insert_after_title(doctree: nodes.document, node: nodes.Node) -> None: - if doctree.children and isinstance(doctree.children[0], nodes.section): - section = doctree.children[0] - if section.children and isinstance(section.children[0], nodes.title): - section.insert(1, node) - return - section.insert(0, node) - return - - if doctree.children and isinstance(doctree.children[0], nodes.title): - doctree.insert(1, node) - else: - doctree.insert(0, node) - - -def _frontmatter_admonition(title: str, css_class: str) -> nodes.admonition: - admonition = nodes.admonition(classes=["admonition", css_class]) - admonition += nodes.title(text=title) - return admonition - - -def _inject_frontmatter_admonitions(app: Sphinx, doctree: nodes.document, docname: str) -> None: - metadata = app.env.metadata.get(docname, {}) or {} - - triggers = _normalize_sequence(metadata.get("triggers")) - if triggers: - admonition = _frontmatter_admonition("Pattern Metadata", "pattern-metadata") - fields = nodes.field_list() - _append_field(fields, "Triggers", triggers) - _append_field(fields, "Steps", _normalize_sequence(metadata.get("steps"))) - _append_field(fields, "Confidence", _normalize_sequence(metadata.get("confidence"))) - _append_field(fields, "Tags", _normalize_sequence(metadata.get("tags"))) - admonition += fields - _insert_after_title(doctree, admonition) - - paper = metadata.get("paper") - if paper: - admonition = _frontmatter_admonition("Paper Reference", "paper-reference") - fields = nodes.field_list() - paper_value = str(paper) - if paper_value.startswith("arxiv:"): - paper_id = paper_value.split(":", 1)[1] - field = nodes.field() - field += nodes.field_name(text="Paper") - body = nodes.field_body() - paragraph = nodes.paragraph() - paragraph += nodes.reference(text=paper_value, refuri=f"https://arxiv.org/abs/{paper_id}") - body += paragraph - field += body - fields += field - else: - _append_field(fields, "Paper", [paper_value]) - _append_field(fields, "Section", _normalize_sequence(metadata.get("section"))) - _append_field(fields, "Summary", _normalize_sequence(metadata.get("summary"))) - admonition += fields - _insert_after_title(doctree, admonition) - - -def _mermaid_enabled(directive: Directive) -> bool: - env = getattr(directive.state.document.settings, "env", None) - app = getattr(env, "app", None) - if app is None: - return False - return "sphinxcontrib.mermaid" in app.extensions - - -def setup(app: Sphinx) -> dict[str, bool]: - app.add_directive("step-toml", StepTomlDirective) - app.add_directive("types-toml", TypesTomlDirective) - app.connect("doctree-resolved", _inject_frontmatter_admonitions) - return { - "version": "0.1", - "parallel_read_safe": True, - "parallel_write_safe": True, - } diff --git a/docs/_static/css/termynal.css b/docs/_static/css/termynal.css deleted file mode 100644 index de6ed28ba..000000000 --- a/docs/_static/css/termynal.css +++ /dev/null @@ -1,144 +0,0 @@ -/** - * termynal.css - * Styling for Termynal terminal animations. - * - * @author Ines Montani - * @license MIT - * - * Adapted for NVIDIA Sphinx theme - */ - -:root { - --termynal-bg: #252a33; - --termynal-text: #eee; - --termynal-text-subtle: #a2a2a2; - --termynal-comment: #76b900; /* NVIDIA green */ -} - -[data-termynal] { - width: 100%; - max-width: 100%; - background: var(--termynal-bg); - color: var(--termynal-text); - font-size: 15px; - font-family: 'Roboto Mono', 'Fira Mono', Consolas, Menlo, Monaco, 'Courier New', Courier, monospace; - border-radius: 4px; - padding: 75px 45px 35px; - position: relative; - box-sizing: border-box; - line-height: 1.4; - margin: 1em 0; -} - -/* macOS-style window chrome */ -[data-termynal]:before { - content: ''; - position: absolute; - top: 15px; - left: 15px; - display: inline-block; - width: 15px; - height: 15px; - border-radius: 50%; - background: #d9515d; - box-shadow: 25px 0 0 #f4c025, 50px 0 0 #3ec930; -} - -/* "bash" label at top */ -[data-termynal]:after { - content: 'bash'; - position: absolute; - color: var(--termynal-text-subtle); - top: 5px; - left: 0; - width: 100%; - text-align: center; -} - -/* Control links (fast/restart) */ -a[data-terminal-control] { - text-align: right; - display: block; - color: #aebbff; - font-size: 0.85em; - margin-top: 0.5em; -} - -a[data-terminal-control]:hover { - color: #d4dbff; - text-decoration: none; -} - -/* Line styling */ -[data-ty] { - display: block; - line-height: 2; -} - -[data-ty]:before { - content: ''; - display: inline-block; - vertical-align: middle; -} - -/* Input prompt ($) */ -[data-ty="input"]:before, -[data-ty-prompt]:before { - margin-right: 0.75em; - color: var(--termynal-text-subtle); -} - -[data-ty="input"]:before { - content: '$'; -} - -/* Custom prompt */ -[data-ty][data-ty-prompt]:before { - content: attr(data-ty-prompt); -} - -/* Cursor animation */ -[data-ty-cursor]:after { - content: attr(data-ty-cursor); - font-family: monospace; - margin-left: 0.5em; - animation: blink 1s infinite; -} - -@keyframes blink { - 50% { - opacity: 0; - } -} - -/* Comment styling */ -.termynal-comment { - color: var(--termynal-comment); - font-style: italic; -} - -/* Container wrapper for .termy divs */ -.termy { - margin: 1.5em 0; -} - -/* Hide the original code block when inside .termy */ -.termy .highlight { - display: none; -} - -/* Responsive adjustments */ -@media (max-width: 768px) { - [data-termynal] { - padding: 55px 20px 25px; - font-size: 13px; - } - - [data-termynal]:before { - width: 12px; - height: 12px; - top: 12px; - left: 12px; - box-shadow: 20px 0 0 #f4c025, 40px 0 0 #3ec930; - } -} diff --git a/docs/_static/customize.css b/docs/_static/customize.css deleted file mode 100644 index 0359a65db..000000000 --- a/docs/_static/customize.css +++ /dev/null @@ -1,4 +0,0 @@ -.admonition.pattern-metadata { border-left-color: #f0ad4e; } -.admonition.paper-reference { border-left-color: #5bc0de; } - -.scrollable pre { max-height: 400px; overflow-y: auto; } diff --git a/docs/_static/js/termynal-init.js b/docs/_static/js/termynal-init.js deleted file mode 100644 index d84595329..000000000 --- a/docs/_static/js/termynal-init.js +++ /dev/null @@ -1,139 +0,0 @@ -/** - * termynal-init.js - * Sphinx/MyST integration for Termynal terminal animations. - * - * Parses code blocks inside .termy containers and converts them - * to animated terminal widgets. - */ - -'use strict'; - -function setupTermynal() { - const progressLiteralStart = "---> 100%"; - const promptLiteralStart = "$ "; - const customPromptLiteralStart = "# "; - const termynalActivateClass = "termy"; - let termynals = []; - - function createTermynals() { - // Find all .termy containers with code blocks inside - // Sphinx/MyST generates: .termy > .highlight > pre - document - .querySelectorAll(`.${termynalActivateClass}`) - .forEach(container => { - // Find the code content - try different selectors for Sphinx HTML structure - const codeNode = container.querySelector('.highlight pre') || - container.querySelector('pre') || - container.querySelector('code'); - - if (!codeNode) { - console.warn('Termynal: No code block found in .termy container'); - return; - } - - const text = codeNode.textContent; - const lines = text.split("\n"); - const useLines = []; - let buffer = []; - - function saveBuffer() { - if (buffer.length) { - let isBlankSpace = true; - buffer.forEach(line => { - if (line) { - isBlankSpace = false; - } - }); - let dataValue = {}; - if (isBlankSpace) { - dataValue["delay"] = 0; - } - if (buffer[buffer.length - 1] === "") { - // A last single
    won't have effect - // so put an additional one - buffer.push(""); - } - const bufferValue = buffer.join("
    "); - dataValue["value"] = bufferValue; - useLines.push(dataValue); - buffer = []; - } - } - - for (let line of lines) { - if (line === progressLiteralStart) { - saveBuffer(); - useLines.push({ - type: "progress" - }); - } else if (line.startsWith(promptLiteralStart)) { - saveBuffer(); - const value = line.replace(promptLiteralStart, "").trimEnd(); - useLines.push({ - type: "input", - value: value - }); - } else if (line.startsWith("// ")) { - saveBuffer(); - const value = "ЁЯТм " + line.replace("// ", "").trimEnd(); - useLines.push({ - value: value, - class: "termynal-comment", - delay: 0 - }); - } else if (line.startsWith(customPromptLiteralStart)) { - saveBuffer(); - const promptStart = line.indexOf(promptLiteralStart); - if (promptStart === -1) { - console.error("Custom prompt found but no end delimiter", line) - buffer.push(line); - continue; - } - const prompt = line.slice(0, promptStart).replace(customPromptLiteralStart, "") - let value = line.slice(promptStart + promptLiteralStart.length); - useLines.push({ - type: "input", - value: value, - prompt: prompt - }); - } else { - buffer.push(line); - } - } - saveBuffer(); - - // Create new container for termynal - const div = document.createElement("div"); - container.innerHTML = ''; - container.appendChild(div); - - const termynal = new Termynal(div, { - lineData: useLines, - noInit: true, - lineDelay: 500 - }); - termynals.push(termynal); - }); - } - - function loadVisibleTermynals() { - termynals = termynals.filter(termynal => { - if (termynal.container.getBoundingClientRect().top - innerHeight <= 0) { - termynal.init(); - return false; - } - return true; - }); - } - - window.addEventListener("scroll", loadVisibleTermynals); - createTermynals(); - loadVisibleTermynals(); -} - -// Initialize when DOM is ready -if (document.readyState === 'loading') { - document.addEventListener('DOMContentLoaded', setupTermynal); -} else { - setupTermynal(); -} diff --git a/docs/_static/js/termynal.js b/docs/_static/js/termynal.js deleted file mode 100644 index df6de688d..000000000 --- a/docs/_static/js/termynal.js +++ /dev/null @@ -1,265 +0,0 @@ -/** - * termynal.js - * A lightweight, modern and extensible animated terminal window, using - * async/await. - * - * @author Ines Montani - * @version 0.0.1 - * @license MIT - * - * Adapted for Sphinx/MyST documentation - */ - -'use strict'; - -/** Generate a terminal widget. */ -class Termynal { - /** - * Construct the widget's settings. - * @param {(string|Node)=} container - Query selector or container element. - * @param {Object=} options - Custom settings. - * @param {string} options.prefix - Prefix to use for data attributes. - * @param {number} options.startDelay - Delay before animation, in ms. - * @param {number} options.typeDelay - Delay between each typed character, in ms. - * @param {number} options.lineDelay - Delay between each line, in ms. - * @param {number} options.progressLength - Number of characters displayed as progress bar. - * @param {string} options.progressChar тАУ Character to use for progress bar, defaults to тЦИ. - * @param {number} options.progressPercent - Max percent of progress. - * @param {string} options.cursor тАУ Character to use for cursor, defaults to тЦЛ. - * @param {Object[]} lineData - Dynamically loaded line data objects. - * @param {boolean} options.noInit - Don't initialise the animation. - */ - constructor(container = '#termynal', options = {}) { - this.container = (typeof container === 'string') ? document.querySelector(container) : container; - this.pfx = `data-${options.prefix || 'ty'}`; - this.originalStartDelay = this.startDelay = options.startDelay - || parseFloat(this.container.getAttribute(`${this.pfx}-startDelay`)) || 600; - this.originalTypeDelay = this.typeDelay = options.typeDelay - || parseFloat(this.container.getAttribute(`${this.pfx}-typeDelay`)) || 90; - this.originalLineDelay = this.lineDelay = options.lineDelay - || parseFloat(this.container.getAttribute(`${this.pfx}-lineDelay`)) || 1500; - this.progressLength = options.progressLength - || parseFloat(this.container.getAttribute(`${this.pfx}-progressLength`)) || 40; - this.progressChar = options.progressChar - || this.container.getAttribute(`${this.pfx}-progressChar`) || 'тЦИ'; - this.progressPercent = options.progressPercent - || parseFloat(this.container.getAttribute(`${this.pfx}-progressPercent`)) || 100; - this.cursor = options.cursor - || this.container.getAttribute(`${this.pfx}-cursor`) || 'тЦЛ'; - this.lineData = this.lineDataToElements(options.lineData || []); - this.loadLines() - if (!options.noInit) this.init() - } - - loadLines() { - // Load all the lines and create the container so that the size is fixed - // Otherwise it would be changing and the user viewport would be constantly - // moving as she/he scrolls - const finish = this.generateFinish() - finish.style.visibility = 'hidden' - this.container.appendChild(finish) - // Appends dynamically loaded lines to existing line elements. - this.lines = [...this.container.querySelectorAll(`[${this.pfx}]`)].concat(this.lineData); - for (let line of this.lines) { - line.style.visibility = 'hidden' - this.container.appendChild(line) - } - const restart = this.generateRestart() - restart.style.visibility = 'hidden' - this.container.appendChild(restart) - this.container.setAttribute('data-termynal', ''); - } - - /** - * Initialise the widget, get lines, clear container and start animation. - */ - init() { - /** - * Calculates width and height of Termynal container. - * If container is empty and lines are dynamically loaded, defaults to browser `auto` or CSS. - */ - const containerStyle = getComputedStyle(this.container); - this.container.style.width = containerStyle.width !== '0px' ? - containerStyle.width : undefined; - this.container.style.minHeight = containerStyle.height !== '0px' ? - containerStyle.height : undefined; - - this.container.setAttribute('data-termynal', ''); - this.container.innerHTML = ''; - for (let line of this.lines) { - line.style.visibility = 'visible' - } - this.start(); - } - - /** - * Start the animation and rener the lines depending on their data attributes. - */ - async start() { - this.addFinish() - await this._wait(this.startDelay); - - for (let line of this.lines) { - const type = line.getAttribute(this.pfx); - const delay = line.getAttribute(`${this.pfx}-delay`) || this.lineDelay; - - if (type == 'input') { - line.setAttribute(`${this.pfx}-cursor`, this.cursor); - await this.type(line); - await this._wait(delay); - } - - else if (type == 'progress') { - await this.progress(line); - await this._wait(delay); - } - - else { - this.container.appendChild(line); - await this._wait(delay); - } - - line.removeAttribute(`${this.pfx}-cursor`); - } - this.addRestart() - this.finishElement.style.visibility = 'hidden' - this.lineDelay = this.originalLineDelay - this.typeDelay = this.originalTypeDelay - this.startDelay = this.originalStartDelay - } - - generateRestart() { - const restart = document.createElement('a') - restart.onclick = (e) => { - e.preventDefault() - this.container.innerHTML = '' - this.init() - } - restart.href = '#' - restart.setAttribute('data-terminal-control', '') - restart.innerHTML = "restart тЖ╗" - return restart - } - - generateFinish() { - const finish = document.createElement('a') - finish.onclick = (e) => { - e.preventDefault() - this.lineDelay = 0 - this.typeDelay = 0 - this.startDelay = 0 - } - finish.href = '#' - finish.setAttribute('data-terminal-control', '') - finish.innerHTML = "fast тЖТ" - this.finishElement = finish - return finish - } - - addRestart() { - const restart = this.generateRestart() - this.container.appendChild(restart) - } - - addFinish() { - const finish = this.generateFinish() - this.container.appendChild(finish) - } - - /** - * Animate a typed line. - * @param {Node} line - The line element to render. - */ - async type(line) { - const chars = [...line.textContent]; - line.textContent = ''; - this.container.appendChild(line); - - for (let char of chars) { - const delay = line.getAttribute(`${this.pfx}-typeDelay`) || this.typeDelay; - await this._wait(delay); - line.textContent += char; - } - } - - /** - * Animate a progress bar. - * @param {Node} line - The line element to render. - */ - async progress(line) { - const progressLength = line.getAttribute(`${this.pfx}-progressLength`) - || this.progressLength; - const progressChar = line.getAttribute(`${this.pfx}-progressChar`) - || this.progressChar; - const chars = progressChar.repeat(progressLength); - const progressPercent = line.getAttribute(`${this.pfx}-progressPercent`) - || this.progressPercent; - line.textContent = ''; - this.container.appendChild(line); - - for (let i = 1; i < chars.length + 1; i++) { - await this._wait(this.typeDelay); - const percent = Math.round(i / chars.length * 100); - line.textContent = `${chars.slice(0, i)} ${percent}%`; - if (percent>progressPercent) { - break; - } - } - } - - /** - * Helper function for animation delays, called with `await`. - * @param {number} time - Timeout, in ms. - */ - _wait(time) { - return new Promise(resolve => setTimeout(resolve, time)); - } - - /** - * Converts line data objects into line elements. - * - * @param {Object[]} lineData - Dynamically loaded lines. - * @param {Object} line - Line data object. - * @returns {Element[]} - Array of line elements. - */ - lineDataToElements(lineData) { - return lineData.map(line => { - let div = document.createElement('div'); - div.innerHTML = `${line.value || ''}`; - - return div.firstElementChild; - }); - } - - /** - * Helper function for generating attributes string. - * - * @param {Object} line - Line data object. - * @returns {string} - String of attributes. - */ - _attributes(line) { - let attrs = ''; - for (let prop in line) { - // Custom add class - if (prop === 'class') { - attrs += ` class=${line[prop]} ` - continue - } - if (prop === 'type') { - attrs += `${this.pfx}="${line[prop]}" ` - } else if (prop !== 'value') { - attrs += `${this.pfx}-${prop}="${line[prop]}" ` - } - } - return attrs; - } -} - -/** -* HTML API: If current script has container(s) specified, initialise Termynal. -*/ -if (document.currentScript && document.currentScript.hasAttribute('data-termynal-container')) { - const containers = document.currentScript.getAttribute('data-termynal-container'); - containers.split('|') - .forEach(container => new Termynal(container)) -} diff --git a/docs/application-examples.md b/docs/application-examples.md deleted file mode 100644 index 73c9f5a89..000000000 --- a/docs/application-examples.md +++ /dev/null @@ -1,92 +0,0 @@ - - - -(application-examples)= -# Application Examples - -End-to-end applications built on Nemotron models, including agentic workflows, RAG systems, and fine-tuning pipelines. Each card links to its directory in the [Nemotron GitHub repository](https://github.com/NVIDIA-NeMo/nemotron). - -::::{grid} 1 2 2 2 -:gutter: 3 - -:::{grid-item-card} {octicon}`mark-github;1.5em;sd-mr-1` Nemotron 3 Super Getting Started Guide -:link: https://github.com/NVIDIA-NeMo/nemotron/tree/main/use-case-examples/Nemotron-3-Super-Getting-Started-Guide -:link-type: url - -Introductory notebook covering Nemotron 3 Super's reasoning features: thinking, reasoning budget, low effort mode, streaming responses, tool-call streaming, and Perplexity Search integration using the OpenAI-compatible API. -+++ -{bdg-success}`Notebook` {bdg-muted-line}`Mar 11, 2026` -::: - -:::{grid-item-card} {octicon}`mark-github;1.5em;sd-mr-1` SQL LoRA Fine-tuning and Deployment -:link: https://github.com/NVIDIA-NeMo/nemotron/tree/main/use-case-examples/sql-lora-finetuning-and-deployment -:link-type: url - -End-to-end LoRA fine-tuning of Nemotron 3 Nano on Text2SQL (BIRD SQL) with deployment via NVIDIA NIM or vLLM using NeMo AutoModel or Megatron Bridge. -+++ -{bdg-secondary}`Local GPU` {bdg-info}`Fine-tuning` {bdg-muted-line}`Mar 11, 2026` -::: - -:::{grid-item-card} {octicon}`mark-github;1.5em;sd-mr-1` Intelligent Document Processing -:link: https://github.com/NVIDIA-NeMo/nemotron/tree/main/use-case-examples/Intelligent%20Document%20Processing%20with%20Nemotron%20RAG -:link-type: url - -IDP pipeline that extracts and queries complex enterprise documents тАФ financial reports, charts, and tables тАФ using NeMo Retriever and multimodal Nemotron models. -+++ -{bdg-secondary}`Local GPU` {bdg-muted-line}`Feb 09, 2026` -::: - -:::{grid-item-card} {octicon}`mark-github;1.5em;sd-mr-1` Voice RAG Agent -:link: https://github.com/NVIDIA-NeMo/nemotron/tree/main/use-case-examples/nemotron-voice-rag-agent-example -:link-type: url - -End-to-end voice-driven RAG agent combining speech-to-text, multimodal retrieval, 1M-token reasoning, and safety guardrails using open Nemotron models. -+++ -{bdg-secondary}`Local GPU` {bdg-muted-line}`Jan 07, 2026` -::: - -:::{grid-item-card} {octicon}`mark-github;1.5em;sd-mr-1` Simple Nemotron 3 Nano Usage -:link: https://github.com/NVIDIA-NeMo/nemotron/tree/main/use-case-examples/Simple%20Nemotron-3-Nano%20Usage%20Example -:link-type: url - -Introductory notebook covering basic inference, reasoning mode toggling, and multi-agent systems using the OpenAI-compatible API via OpenRouter and LangChain. -+++ -{bdg-success}`Notebook` {bdg-muted-line}`Dec 15, 2025` -::: - -:::{grid-item-card} {octicon}`mark-github;1.5em;sd-mr-1` Data Science ML Agent -:link: https://github.com/NVIDIA-NeMo/nemotron/tree/main/use-case-examples/Data%20Science%20ML%20Agent -:link-type: url - -Natural language-driven ML agent built on Nemotron Nano 9B with GPU-accelerated data exploration and model training using RAPIDS cuDF and cuML. -+++ -{bdg-secondary}`Local GPU` {bdg-muted-line}`Nov 06, 2025` -::: - -:::{grid-item-card} {octicon}`mark-github;1.5em;sd-mr-1` RAG Agent -:link: https://github.com/NVIDIA-NeMo/nemotron/tree/main/use-case-examples/RAG%20Agent%20with%20Nemotron%20RAG%20Models -:link-type: url - -Production-ready RAG agent using local Hugging Face embedding and reranking models with NVIDIA AI Endpoints for LLM inference, built on LangGraph. -+++ -{bdg-secondary}`Local GPU` {bdg-muted-line}`Oct 28, 2025` -::: - -:::: diff --git a/docs/architecture/README.md b/docs/architecture/README.md deleted file mode 100644 index 07696e891..000000000 --- a/docs/architecture/README.md +++ /dev/null @@ -1,58 +0,0 @@ -# Nemotron Architecture - -This directory contains documentation about Nemotron's architecture and design principles. - -## Overview - -Nemotron is a **cookbook** - a reference implementation showing best practices for training LLMs at scale. It's not a framework you install; it's a codebase you fork and customize. - -## Documents - -- [Runspec Specification](../runspec/v1/spec.md) - The `[tool.runspec]` metadata format for recipe scripts -- [CLI Architecture](cli-architecture.md) - How the CLI layer works and how to fork it -- [Design Philosophy](design-philosophy.md) - What we optimize for and why - -## Quick Start - -```bash -# Run pretraining locally -nemotron nano3 pretrain -c tiny - -# Submit to cluster -nemotron nano3 pretrain -c tiny --run dgx - -# See what's happening (execution logic is visible in the code) -# Open: src/nemotron/cli/commands/nano3/pretrain.py -``` - -## Two-Layer Architecture - -| Layer | What | Where | Fork When | -|-------|------|-------|-----------| -| **Execution** | How to run and track experiments | `cli/commands/` + `nemo_runspec/` | nemo-run/wandb -> SkyPilot/mlflow | -| **Runtime** | Training/data processing | `recipes/` | Algorithm changes | - -``` -Execution Layer Runtime Layer (recipes/) -тФМтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФР тФМтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФР -тФВ cli/commands/nano3/ тФВ тФВ recipes/nano3/ тФВ -тФВ pretrain.py тФВ тФВ pretrain/train.py тФВ -тФВ тФВ тФВ тФВ -тФВ nemo_runspec (toolkit) тФВтФАтФАтФАтФАтФАтЦ║тФВ Megatron-Bridge тФВ -тФВ config, execution, env тФВ тФВ тФВ -тФВ artifact registry тФВ тФВ тФВ -тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФШ тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФШ -``` - -The runtime layer is typically a **thin script** that delegates to NVIDIA AI stack libraries. The execution layer contains all the job submission logic, which is what you'd change to swap nemo-run for SkyPilot or another backend. - -## Package Responsibilities - -| Package | Scope | -|---------|-------| -| **`nemo_runspec`** | Generic CLI toolkit: PEP 723 runspec parsing, config loading, env.toml profiles, execution helpers, packaging, pipeline orchestration, artifact registry (`art://` resolution, fsspec/wandb backends) | -| **`nemotron.kit`** | Domain-specific: artifact type definitions (pretrain data, SFT data, checkpoints), lineage trackers (W&B, file-based), W&B integration | -| **`nemotron.cli`** | CLI commands: visible execution logic per command, typer-based command tree | -| **`nemotron.recipes`** | Runtime scripts: training, data prep, RL (thin scripts delegating to NVIDIA AI stack) | - -Dependency direction: `nemotron.cli` -> `nemo_runspec` + `nemotron.kit` -> NVIDIA stack. Never the reverse. diff --git a/docs/architecture/cli-architecture.md b/docs/architecture/cli-architecture.md deleted file mode 100644 index 4c049bcd5..000000000 --- a/docs/architecture/cli-architecture.md +++ /dev/null @@ -1,310 +0,0 @@ -# CLI Architecture - -This document explains how Nemotron's CLI layer works and how to modify it for your needs. - -## Overview - -The CLI layer (`src/nemotron/cli/`) handles **execution** -- how jobs are submitted and tracked. Each command file contains visible execution logic, making it easy to understand and modify. - -The shared toolkit lives in the `nemo_runspec` package: config loading, env.toml profiles, execution helpers, packaging, and display utilities. CLI commands import from `nemo_runspec` and wire things together explicitly. - -## Design Principle: Visible Execution - -Nemotron makes execution **explicit** -- all nemo-run setup lives directly in each command function: - -```python -# src/nemotron/cli/commands/nano3/pretrain.py - -from nemo_runspec import parse as parse_runspec -from nemo_runspec.config import parse_config, build_job_config, save_configs -from nemo_runspec.execution import create_executor, execute_local, build_env_vars - -# Metadata comes from PEP 723 [tool.runspec] in the script itself -SCRIPT_PATH = "src/nemotron/recipes/nano3/stage0_pretrain/train.py" -SPEC = parse_runspec(SCRIPT_PATH) - -# Execution logic is VISIBLE in the function -def _execute_pretrain(cfg: RecipeConfig, *, experiment=None): - # 1. Parse configuration - train_config = parse_config(cfg.ctx, SPEC.config_dir, SPEC.config.default) - job_config = build_job_config(train_config, cfg.ctx, SPEC.name, ...) - - # 2. Build executor - THIS IS WHAT YOU'D CHANGE FOR SKYPILOT - executor = create_executor(env=env, env_vars=env_vars, packager=packager, ...) - - # 3. Run experiment - with run.Experiment(recipe_name) as exp: - exp.add(script_task, executor=executor) - exp.run(detach=not attached) -``` - -## Components - -### Runspec (PEP 723 metadata) - -Recipe scripts are self-describing. Each script declares its identity, container image, launch method, and config location via a `[tool.runspec]` TOML block: - -```python -# /// script -# [tool.runspec] -# name = "nano3/pretrain" -# image = "nvcr.io/nvidia/nemo:25.11.nemotron_3_nano" -# -# [tool.runspec.run] -# launch = "torchrun" -# -# [tool.runspec.config] -# dir = "./config" -# default = "default" -# /// -``` - -The CLI reads this via `nemo_runspec.parse()`, returning a frozen `Runspec` dataclass. See [nemo_runspec package](../nemo_runspec/package-readme) for the full schema. - -### RecipeConfig - -Parsed CLI options. Handles late globals (`--run` after subcommand) and dotlist overrides: - -```python -from nemo_runspec.recipe_config import RecipeConfig, parse_recipe_config - -cfg = parse_recipe_config(ctx) -# Now you have: -# cfg.mode - "run", "batch", or "local" -# cfg.attached - True if --run, False if --batch -# cfg.profile - The env profile name -# cfg.passthrough - Args to pass through to script -# cfg.dry_run - True if --dry-run -``` - -### RecipeTyper - -Standardizes command registration with proper context settings and rich help panels: - -```python -from nemo_runspec.recipe_typer import RecipeTyper, RecipeMeta - -app = RecipeTyper(name="nano3", help="Nano3 training recipes") - -app.add_recipe_command( - pretrain, - meta=PRETRAIN_META, # RecipeMeta with config_dir, artifacts, etc. - rich_help_panel="Training Stages", -) -``` - -### Config Pipeline - -Config loading uses `nemo_runspec.config`: - -```python -from nemo_runspec.config import parse_config, build_job_config, extract_train_config, save_configs - -# 1. Load YAML config with dotlist overrides -train_config = parse_config(ctx, config_dir, default_config) - -# 2. Build full job config with provenance (env profile, CLI args, etc.) -job_config = build_job_config(train_config, ctx, recipe_name, script_path, argv, env_profile=env) - -# 3. Extract clean train config for the script -train_config_for_script = extract_train_config(job_config, for_remote=True) - -# 4. Save both configs to job directory -job_path, train_path = save_configs(job_config, train_config_for_script, job_dir) -``` - -## Directory Structure - -``` -src/nemotron/ -тФЬтФАтФА cli/ # EXECUTION LAYER -тФВ тФЬтФАтФА bin/ -тФВ тФВ тФФтФАтФА nemotron.py # Main entry point (typer app) -тФВ тФЬтФАтФА commands/ -тФВ тФВ тФЬтФАтФА evaluate.py # Top-level evaluate command -тФВ тФВ тФЬтФАтФА nano3/ -тФВ тФВ тФЬтФАтФА _typer_group.py # Command registration (RecipeTyper) -тФВ тФВ тФЬтФАтФА pretrain.py # Pretrain execution logic -тФВ тФВ тФЬтФАтФА sft.py # SFT execution logic -тФВ тФВ тФЬтФАтФА rl.py # RL execution logic (Ray) -тФВ тФВ тФЬтФАтФА eval.py # Evaluation command -тФВ тФВ тФЬтФАтФА pipe.py # Pipeline: pretrain тЖТ sft composition -тФВ тФВ тФЬтФАтФА data/ -тФВ тФВ тФВ тФЬтФАтФА prep/ # Data prep commands -тФВ тФВ тФВ тФВ тФЬтФАтФА pretrain.py -тФВ тФВ тФВ тФВ тФЬтФАтФА sft.py -тФВ тФВ тФВ тФВ тФФтФАтФА rl.py -тФВ тФВ тФВ тФФтФАтФА import_/ # Data import commands -тФВ тФВ тФВ тФЬтФАтФА pretrain.py -тФВ тФВ тФВ тФЬтФАтФА sft.py -тФВ тФВ тФВ тФФтФАтФА rl.py -тФВ тФВ тФФтФАтФА model/ # Model import/eval commands -тФВ тФВ тФЬтФАтФА eval.py -тФВ тФВ тФФтФАтФА import_/ -тФВ тФВ тФЬтФАтФА pretrain.py -тФВ тФВ тФЬтФАтФА sft.py -тФВ тФВ тФФтФАтФА rl.py -тФВ тФВ тФФтФАтФА omni3/ -тФВ тФВ тФЬтФАтФА _typer_group.py # Registers build, sft, eval, and RL sub-groups -тФВ тФВ тФЬтФАтФА build.py # Stage-local container build dispatcher -тФВ тФВ тФЬтФАтФА sft.py # Omni SFT execution logic -тФВ тФВ тФЬтФАтФА eval.py # Omni evaluation command -тФВ тФВ тФЬтФАтФА data/ # Data prep commands -тФВ тФВ тФЬтФАтФА model/ # Model import/export/eval commands -тФВ тФВ тФФтФАтФА rl/ # RL MPO / text / vision sub-stages -тФВ тФФтФАтФА kit/ # Kit CLI commands (squash, etc.) -тФВ -тФЬтФАтФА recipes/ # RUNTIME LAYER -тФВ тФЬтФАтФА data/ -тФВ тФВ тФЬтФАтФА curation/ # Data curation pipelines (for example nemotron-cc) -тФВ тФВ тФФтФАтФА sdg/ # Synthetic data generation pipelines -тФВ тФЬтФАтФА omni3/ -тФВ тФВ тФЬтФАтФА stage0_sft/ -тФВ тФВ тФВ тФЬтФАтФА Dockerfile # Stage-owned container recipe -тФВ тФВ тФВ тФЬтФАтФА build.py # Exports the OCI archive used downstream -тФВ тФВ тФВ тФЬтФАтФА train.py # -> Megatron-Bridge -тФВ тФВ тФВ тФФтФАтФА data_prep.py # -> Valor32k staging / validation -тФВ тФВ тФЬтФАтФА stage1_rl/ -тФВ тФВ тФВ тФЬтФАтФА Dockerfile # Shared RL container recipe -тФВ тФВ тФВ тФЬтФАтФА build.py # Exports the RL OCI archive -тФВ тФВ тФВ тФЬтФАтФА data_prep.py # -> RL data prep dispatcher -тФВ тФВ тФВ тФЬтФАтФА stage1_mpo/ -тФВ тФВ тФВ тФЬтФАтФА stage2_text_rl/ -тФВ тФВ тФВ тФФтФАтФА stage3_vision_rl/ -тФВ тФВ # NOTE: omni3 eval stage is on the roadmap; not yet present -тФВ тФФтФАтФА nano3/ -тФВ тФЬтФАтФА stage0_pretrain/ -тФВ тФВ тФЬтФАтФА train.py # -> Megatron-Bridge -тФВ тФВ тФФтФАтФА data_prep.py # -> Data preparation -тФВ тФЬтФАтФА stage1_sft/ -тФВ тФВ тФЬтФАтФА train.py # -> Megatron-Bridge -тФВ тФВ тФФтФАтФА data_prep.py # -> Data preparation -тФВ тФФтФАтФА stage2_rl/ -тФВ тФЬтФАтФА train.py # -> NeMo-RL -тФВ тФФтФАтФА data_prep.py # -> Data preparation - -src/nemo_runspec/ # SHARED TOOLKIT -тФЬтФАтФА _parser.py # PEP 723 [tool.runspec] parsing -тФЬтФАтФА _models.py # Runspec, RunspecRun, RunspecConfig, RunspecResources -тФЬтФАтФА config/ # Config loading and OmegaConf resolvers -тФВ тФЬтФАтФА loader.py # parse_config, build_job_config, save_configs -тФВ тФФтФАтФА resolvers.py # ${art:...}, ${auto_mount:...} -тФЬтФАтФА env.py # env.toml profile loading with inheritance -тФЬтФАтФА cli_context.py # GlobalContext (shared CLI state) -тФЬтФАтФА recipe_config.py # RecipeConfig + parse_recipe_config -тФЬтФАтФА recipe_typer.py # RecipeTyper + RecipeMeta -тФЬтФАтФА help.py # Rich help panels -тФЬтФАтФА display.py # Dry-run and job submission display -тФЬтФАтФА execution.py # Startup commands, env vars, executor creation -тФЬтФАтФА run.py # RunConfig, nemo-run patches -тФЬтФАтФА packaging/ # SelfContainedPackager, CodePackager -тФЬтФАтФА squash.py # Container squash utilities -тФЬтФАтФА pipeline.py # Pipeline orchestration -тФЬтФАтФА step.py # Step definition for pipelines -тФЬтФАтФА evaluator.py # NeMo Evaluator integration -тФЬтФАтФА artifact_registry.py # ArtifactRegistry (fsspec/wandb) -тФФтФАтФА exceptions.py # ArtifactNotFoundError, etc. -``` - -## Execution Patterns - -### Training (Slurm + torchrun) -Pretrain and SFT use Slurm with torchrun launcher: - -```python -# cli/commands/nano3/pretrain.py, cli/commands/nano3/sft.py -executor = create_executor(env=env, env_vars=env_vars, packager=packager, ...) -script_task = run.Script(path="main.py", args=[...], entrypoint="python") - -with run.Experiment(recipe_name) as exp: - exp.add(script_task, executor=executor) - exp.run() -``` - -### RL (Ray) -RL uses Ray for distributed execution: - -```python -# cli/commands/nano3/rl.py -from nemo_run.run.ray.job import RayJob - -executor = create_executor(env=env, ...) # Still Slurm for infrastructure -ray_job = RayJob(name=job_name, executor=executor) - -ray_job.start( - command=cmd, - workdir=str(Path.cwd()) + "/", - pre_ray_start_commands=setup_commands, -) -``` - -### Data Prep (Ray + Code Packager) -Data prep uses Ray with full codebase rsync. The `[tool.runspec]` in the data prep script declares `launch = "ray"`: - -```python -# cli/commands/nano3/data/prep/pretrain.py -SPEC = parse_runspec(SCRIPT_PATH) # launch=ray, cmd template from [tool.runspec] -``` - -## How to Fork for Different Backends - -### Example: Replace nemo-run with SkyPilot - -1. **Read the current execution logic** in `cli/commands/nano3/pretrain.py` -2. **Replace `_execute_remote()`** with SkyPilot equivalents: - -```python -# cli/commands/nano3/pretrain.py (forked for SkyPilot) - -def _execute_skypilot(cfg: RecipeConfig): - import sky - - # Config loading stays the same - train_config = parse_config(cfg.ctx, SPEC.config_dir, SPEC.config.default) - job_config = build_job_config(train_config, ...) - job_dir = generate_job_dir(SPEC.name) - _, train_path = save_configs(job_config, ..., job_dir) - - task = sky.Task( - run="python main.py --config config.yaml", - workdir=str(job_dir), - num_nodes=env_config.get("nodes", 1), - ) - task.set_resources(sky.Resources( - cloud=sky.AWS(), - accelerators=f"A100:{env_config.get('gpus_per_node', 8)}", - )) - - sky.launch(task, cluster_name="nano3-pretrain") -``` - -3. **Keep config loading** -- `nemo_runspec.config` works with any backend -4. **Keep the `[tool.runspec]` block** -- metadata stays with the script - -## Shared Utilities - -Low-level helpers in `nemo_runspec.execution` are shared across commands but keep orchestration visible: - -| Function | Module | Description | -|----------|--------|-------------| -| `create_executor()` | `nemo_runspec.execution` | Build nemo-run executor from env config | -| `build_env_vars()` | `nemo_runspec.execution` | Build environment variables (HF, W&B tokens) | -| `execute_local()` | `nemo_runspec.execution` | Local subprocess execution via torchrun | -| `get_startup_commands()` | `nemo_runspec.execution` | Extract startup commands from env config | -| `ensure_squashed_image()` | `nemo_runspec.squash` | Container squashing for cluster | -| `clone_git_repos_via_tunnel()` | `nemo_runspec.execution` | Git repo cloning via SSH tunnel | - -These are utilities, not abstractions. The calling code shows exactly how they're used. - -## CLI Behavior Reference - -| Feature | How It Works | -|---------|--------------| -| Late globals | `split_unknown_args()` in `parse_recipe_config()` | -| Dotlist overrides | Applied during `parse_config()` via OmegaConf | -| Packager selection | `SelfContainedPackager` or `CodePackager` from `nemo_runspec.packaging` | -| Ray execution | Visible in `_execute_remote()` functions in RL/data prep commands | -| Build verb | Family-specific `build.py` dispatchers submit stage-local container builds explicitly | -| Omni3 family layout | Top-level `omni3/` mixes build/eval commands with nested `data/`, `model/`, and `rl/` groups | -| Rich help panels | `RecipeTyper` + `RecipeMeta` from `nemo_runspec.recipe_typer` | -| env.toml profiles | Loaded via `nemo_runspec.env.parse_env()` with inheritance | diff --git a/docs/architecture/design-philosophy.md b/docs/architecture/design-philosophy.md deleted file mode 100644 index 75e4186c4..000000000 --- a/docs/architecture/design-philosophy.md +++ /dev/null @@ -1,196 +0,0 @@ -# Design Philosophy - -Nemotron is a **cookbook**, not a framework. Each recipe is a working example of a real training workflow, from data preparation through pretraining, fine-tuning, and reinforcement learning. Everything in this document follows from that choice. - -A framework gives you building blocks and asks you to assemble them. A cookbook shows you the finished dish: here's how we actually trained this model, start to finish. The code is fully runnable, but it's not meant to be your team's production codebase. It's a reference implementation. You read it, understand the approach, and adapt the parts you need into your own setup. - -This is a subtle but important distinction. A team's codebase evolves around their specific infrastructure, scale, and constraints. A cookbook is optimized for something different: **teaching by showing working examples**. Because it's a cookbook, we expect every team to customize it тАФ different clusters, different data pipelines, different tracking tools. Customization isn't an edge case, it's the whole point. - -That expectation shapes everything about how we write code. We favor clarity over abstraction, self-contained examples over reusable components, and making every step visible over hiding complexity behind convenience wrappers. When the code is explicit, a human can read a recipe and understand what to change. And just as importantly, an LLM or AI agent can too тАФ which means customization can be assisted or fully driven by AI. - -## What We Optimize For - -**LLM-Native Development**: Structure the project so that AI agents and LLMs can easily understand, modify, and extend it. - -We expect users to show up with prompts like: - -> "Fork nemotron's CLI and replace nemo-run with SkyPilot" -> "Add a new data preprocessing stage to nano3" -> "Customize the SFT recipe to use my dataset format" - -For an LLM to do this well, the codebase must be: -1. **Readable**: An LLM (or a human new to the project) can understand what the code does by reading it -2. **Self-contained**: Related logic lives together, not scattered across files -3. **Forkable**: Easy to copy a module and modify it for your needs - -This is why we optimize for explicitness. When a user says "swap nemo-run for SkyPilot", an LLM should be able to read the relevant recipe and make the changes without getting lost in abstractions. This works because recipes are complete, end-to-end examples тАФ not thin wrappers around hidden framework machinery. - -## Design Principles - -### 1. Explicit Over Implicit - -Execution logic lives directly in each command function, not behind decorators or base classes: - -```python -# Recipe metadata comes from PEP 723 [tool.runspec] block in the script itself -SPEC = parse_runspec(SCRIPT_PATH) - -def _execute_pretrain(cfg: RecipeConfig): - # ALL execution logic visible here - train_config = parse_config(cfg.ctx, SPEC.config_dir, SPEC.config.default) - job_config = build_job_config(train_config, ...) - executor = create_executor(env=env, ...) # <- Can see exactly what's happening - with run.Experiment(name) as exp: - exp.add(script_task, executor=executor) - exp.run() -``` - -An LLM reads one file and sees the full picture: what config is loaded, how the executor is built, how the job is submitted. - -### 2. Self-Describing Recipes - -Recipe scripts declare their own identity and requirements via PEP 723 inline metadata: - -```python -# /// script -# [tool.runspec] -# name = "nano3/pretrain" -# image = "nvcr.io/nvidia/nemo:25.11.nemotron_3_nano" -# -# [tool.runspec.run] -# launch = "torchrun" -# -# [tool.runspec.config] -# dir = "./config" -# default = "default" -# /// -``` - -The CLI layer reads this metadata via `nemo_runspec.parse()` instead of duplicating it. This keeps recipes portable -- any tool can read the same metadata. - -### 3. Locality Over DRY - -Keep related code together, even if it means some duplication. - -**Why duplication is sometimes better:** -- Each command file is self-contained and readable -- Changes to one command don't accidentally affect others -- LLMs can understand one file without tracing through abstractions -- Forking is easy: copy the file, modify what you need - -**What we don't share:** -- High-level orchestration (executor building, experiment running) -- Command-specific logic - -**What we do share (via `nemo_runspec`):** -- Low-level utilities (env var building, packager construction) -- Config loading and merging -- Help formatting and display - -### 4. Fork Over Extend - -This is the cookbook principle in action: design for copying and modifying, not subclassing. - -**Instead of inheritance hierarchies:** -```python -# cli/commands/nano3/pretrain.py - just copy and modify this file - -def _execute_skypilot(cfg: RecipeConfig): - import sky - - task = sky.Task( - run="python main.py --config config.yaml", - workdir=str(job_dir), - num_nodes=env_config.get("nodes", 1), - ) - sky.launch(task, cluster_name="nano3-pretrain") -``` - -This is simpler because: -- No inheritance hierarchy to understand -- No hook points to find -- No registration system to configure -- Just code you can read and change - -## Two-Layer Architecture - -We separate execution (how to run) from runtime (what to run): - -| Layer | Purpose | Change Frequency | -|-------|---------|-----------------| -| **Execution** (`cli/commands/` + `nemo_runspec/`) | Job submission, tracking, orchestration | When changing backends | -| **Runtime** (`recipes/`) | Training algorithms, data processing | When changing algorithms | - -The runtime layer is typically a **thin script** that delegates to NVIDIA AI stack libraries: - -| Stage | Script | Library | -|-------|--------|---------| -| Pretrain | `train.py` | Megatron-Bridge | -| SFT | `train.py` | Megatron-Bridge | -| RL | `train.py` | NeMo-RL | -| Data prep | `data_prep.py` | Nemotron data_prep + Ray | - -The execution layer is one forkable unit. Want SkyPilot + MLflow? Fork the CLI and rewrite it. Runtime scripts stay unchanged because they're just thin wrappers around library calls. - -This separation means: -- Swapping nemo-run for SkyPilot only touches `cli/commands/` -- Changing training algorithms only touches `recipes/` -- Each layer can be forked independently - -## Package Boundaries - -| Package | Owns | Does NOT own | -|---------|------|-------------| -| **`nemo_runspec`** | Runspec parsing, config loading, env.toml, execution helpers, packaging, pipeline, artifact registry | Domain-specific artifact types, W&B integration | -| **`nemotron.kit`** | Artifact types, lineage trackers, W&B config, training script utilities | CLI, config loading, execution, packaging | -| **`nemotron.cli`** | Command implementations, typer app tree | Reusable infrastructure | - -Dependency flows one way: `nemotron.cli` -> `nemo_runspec` + `nemotron.kit`. Never the reverse. - -## What This Enables - -### For LLMs - -- **Clear boundaries**: "Read `cli/commands/nano3/pretrain.py`, replace the execution logic" -- **No dispatch tables**: No need to understand registration systems -- **No inheritance**: No base classes to trace -- **Self-describing scripts**: Metadata lives with the script, not in a separate config - -### For Humans - -- **Visible execution**: Read one file to understand how jobs run -- **Simple forking**: Copy file, modify, done -- **Testable runtime**: Training logic is pure and separate - -### For Maintenance - -- **Execution backends don't couple to algorithms**: Clean separation -- **Easy to add new models**: Just create new recipe directory -- **Easy to add new backends**: Just modify CLI layer - -## Trade-offs We Accept - -### More Duplication - -Each command has similar executor setup code. We accept this because: -- Differences are visible (Slurm vs Ray, torchrun vs not) -- Changes are local to the file -- Forking is straightforward - -### Bigger Diffs for Backend Changes - -Changing from nemo-run to SkyPilot requires updating multiple command files. We accept this because: -- Each update is simple (no abstractions to navigate) -- The changes are mechanical (same pattern repeated) - -### No Centralized Abstraction - -There's no `run_recipe()` function that handles all execution. We accept this because: -- Each command shows its own execution path -- Differences between commands are visible -- LLMs can understand without tracing through layers - -## References - -- [The Grug Brained Developer](https://grugbrain.dev/) - Complexity bad, simple good -- [Locality of Behavior](https://htmx.org/essays/locality-of-behaviour/) - Keep related code together diff --git a/docs/assets/expert-parallelism.png b/docs/assets/expert-parallelism.png deleted file mode 100644 index 66e868906ecfead5c6743682afa419e698eaf8c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37765 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 R~J5gx){*AhbS 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 diff --git a/docs/assets/nemo-rl-actors.png b/docs/assets/nemo-rl-actors.png deleted file mode 100644 index fe360c99396af5cc45015a7d2aab91e013290d5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 622414 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 B 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%0DM5Zpe*Q+c36ZWRg;DehX_%Gy%HyCB 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�yalu-g}bOOUr*X-v~8cS(^ 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Ûn^FUS43W)|GLEO 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 diff --git a/docs/assets/omni-3.png b/docs/assets/omni-3.png deleted file mode 100644 index 2d55131111e3dde3c905f8abbfa6ed97354e2ec5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 214801 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

    F7rFntUf6I*WCwDmF~itFe8F|pk6 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 diff --git a/docs/assets/omni3/omni_loss_curve.png b/docs/assets/omni3/omni_loss_curve.png deleted file mode 100644 index 4cfa8305d01ecfd1d553a1e315e35f699e87a4fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87847 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 z 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
    vlUC?M2F%DGbd0x$p{x4%1V8W2=Xl_CTUv`T_ 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 JCE`Y({|klEhXnut diff --git a/docs/assets/sequence-parallelism.png b/docs/assets/sequence-parallelism.png deleted file mode 100644 index aba01deffd3535212e7f062596e04387e4d86cca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86433 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
  • A=kls{xPpiG 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 BDNz6b diff --git a/docs/assets/super3/avg_benchmark.png b/docs/assets/super3/avg_benchmark.png deleted file mode 100644 index 94d9a367f42b5bbcf33c9b509b9caa8b1d639bcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43092 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 Z(%#L{)@Oc*WHj(|PeDVzQWhEfe*j?+V*mgE diff --git a/docs/assets/super3/latent_moe.png b/docs/assets/super3/latent_moe.png deleted file mode 100644 index 5f178d8fd058f6267d3953165158bf943f623451..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91169 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 diff --git a/docs/assets/super3/super-pattern.png b/docs/assets/super3/super-pattern.png deleted file mode 100644 index 62420c2072aef8b36f4f7924d657fb4ae816b7dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61294 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

    XJc?m6uvLU=x7k$(6&)W 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

    sV4w;YL4else@AK-vh2< zrfqyt>D@>I0cJ$}S(b%p|C$$3B-8-q;veR}Q(9 zo|=b^<>QP%dS@qw77h_SZEW(0d^R}fzkW`iD}$sWDja2Ys*Ar?_ZAnE@xH3NeLJFw z9V7LvejB#ycIQ6s@H}7sKV5t89|tS53dO2zj+d>NEbntS*N;Z+6ufRxdEzmvRtBTB zRW=eoAMD=ayB>Y_K|H|mElkB81GL>UFpQH_Mev9z>{%ni4d~!8tjBoOb*T9oOxuY+ za8q)-m`#>^{j_5WFO8XK!Z%avi0kh8D*zc+{&(iKxlD0zem zGubCb%qfQ@CMA~R_U+W-fv`CW(Z38gRVUr&dbM~suk2o}y%;RXRc|Ga04^QvRpVFF zI~dl zr?Jn1T+$^+i?+I-1nf0fS7y^gL)EnL$ zb)EFyEx0X|8=4DNmIGG8)K^RfKjaRxSxqe@cdk5C9xv2SeShqefD|J|pRET>%h~RT zd(A^)&MN%Nxor@9h*c0G|69sg(~%<5L~`@y1JzrLbLe&Q-x+0+mgnMKbT1rx-3_dga~ zZoGMjB{sGy2HMy>aOO0fXRnR(qs1Uc>`#E>i&aO0q9{}`dl6GI+7(lq`ZaSI;~kEO zGeh~C9g2Qb9Q|{R+EH!CUoen?((H}NI zM%c4pn~(&d`yWv{$^$?O%oWenL^+NiGlKE@@`>grWe1~5PSbZqN{T3wSs3H2qnkVA z5o3^jK-_d$MM%z+lbKKQax0yQ7^0(ra~Gki=vucZH!nAJPv_U2k@vdwg75CwnTkMX zluz&l+j6jA`1jx#7BX<&2in0h5wE9MB~LV2DfaoJbm%t#Xh1$x227?yb{v41NeAmt zVNxELjFDOBL{sb>X>>T2n^2B!&9;X@aD5#|PMw(oZTW#8-Zc_tu$5yQvJW)c+x-9R zS0IkX#TF`)i$P%~4*0@pzx5UF-b<7`t2o2#SkuLZ4!A?+r3R?oA^c#p*mRo0eUPyY zJ(G5c(#WK)|IfX`3B$B#n8x|-ahE=g$UI&>8W>%u$@H{7%5kCEcr#wJEMJ+3$A-|k z2KZSB5Im#EI9~~QN~<1O6}S+^&C%ItQ@ir8zL?*?Xa;~K6;58JH(DT@uNJx-TKq9L zEG#?aWW}#W_r_{DVo2t|{-+wOloUutAHVnoS z#xO`3KC=`i;|E`GkqEV^tD9Q^HSnc=pBVU*sf!ab1B&kv7Mj6kq;HDk^8^ZJeSIJ(D_P+U`@lun0RTUcMMb*@X9$*wpSSnn31EB%kdrxb z{X`@%xI|oRuWnOrg)!atmjb@ULm`)DnJSl7ba(T-_?4kSYr6)k~(e(#fmcZphaL5 zgY)g>QCM86iAfQ|dmN9^q*NIacVUnYshD%);z)bg&GX(*^Hz1nt}Q|Gf-+(v2fI0T zspf}P62%j=lSpcnFF}Bh-vU9;48e%_&}sFoZxTbF_8a@) z7~tzdVHh|U)%CqbOqMIhXlYTuN?gVCY9mS1klDSMrY)#wJvdR?K$RbdJ`u zK`3BS*>I|rWAD!)V*1#XYz_!F^Y!rY8r;dv3=JC%R|_0LOaJ-@wQcD27LUl2<~4(J zLB8=u;|iN`)}_jjtOb2sY-*Yt7OY5y^k=)`zw*hKNJ5S^u{&ciUSU(OZUmI{-Tz6- zRBYq~SwZk7SMrT6` z7wrI)qN`D3<288DYkaX3mO|He@G$o*_RAoDnbpz9tZd=e@0`%X79ANt zHrOaKmoe@|PTVt)xec<E1@%)F=d4g!n^g1!O4NB|A2xC8VWs_Wu4ks9)q`^omIQ zJQbsHFZcee`Df1=>>p;3g3M6zQv4EhvhSqzHByoE{q7m|EGC@PJ5eRv^NF7mL5Qbm zyG~dA_5_UD*}9BRpo1O{Uc~A(A*F`7ze)|konmv!GR| za!e)TuV_=NPZX}9b<4DOSqGY7-2)HN$|pT-aM^lKjcP|jW_?vPICXdN#X@4$>%2LH zfJUD9`44e(AiWCEX8jZZ7Z*bl;V~JK?diOnZ19ambG;!6u9W2iD8#QQjQicF;zhI^ z^%7b?R~cLCd))VVW22yy0XxrbsQ208yuuZ|eHR%Qw8jB9iXX9b-L?k)?iP4q&ZHwA zc46zp5!N8QY$kpqnWWL@!1%?O;vVN(5Rs()+ uXmE!pps?UZd<2J0oEPKyRZTln{#C$Ox*_Xo(mE_9v(}CXmTQKJ69vR zm?J=~?=-o)q%3|&GLhs9=SM)`M*!@U9Yz=r4;P>y>Ce$Y(N4jk2V+DLiD%rtulHrg zJ{J+UorB#YWGQdAj_w$3Rxv&KeKb@T5!}&rc6E)+d$r*Ho50&-#+7?rcCBM=^s=oR+RXC?Tq&W5_)Aj4kn@S$ zgaltfkdehJiomlEVVU&8KW=&11C{E^7roN9UaMJd+^bU5D^@pG7x|gCRx@-ySl6DW zxgWDp)osHqW&svZY!Eo$G5!)lqI5QQXVSn-Erj;6e-kwZYI#e(r%+c|zDymXDnQxY`w zW&lvI;5wt*?{6=MA(;B{(a~^i_e(m(dL6F7kGIDcZ#%)a6NSS#zt=)Id>&PSk5{Lr zpFR((H%D3a&z<(00iQkL4wa~kYHB|r9}&TyH?qYXbVXiF&elyFwoqDGUWzYm=2DE7 zd{kcbu;b^ZEzy+P{1wJ#xxVn(X1zX07-^k~wZU5JO%K$XD}n&Ow=;veW?P-7)oI@& zA5wy)jb_`dJ$#4QIDzL8O$w9?%!~cqt5Z62+9xki17n)l(Qo#m7-h7zGsPs<*1UhB z?(D2JSr_N!36)n=pu+?^y#J9D1nTJLeooHUFd-$!{J(Gedl` zP?lt1o|2J4oyB3R?2~_YgZXGVc3|@o67WPI;H~NTctJlqJImtz?`q9)GJ{oeD2|ZP zdZ{uYF%hNhDAQV%8}{lgjLXBE`!516Aq6{ z@n=P4W%B*m@^}CwwCT;k=qc96L=L}>jI3<2Xc$7|wWts#gD%zY-@nU0zA<*zHdk(a zt}os}Lc&VjHtQWq9GBX(ybty$jhqMUbmViFm-YgQ-UxurX1kjER2&Yw3`6@L67lrzk9RL@7SnK>jaH@V&KsGN z?VcVwgKpheJnn*jy)Mgols?aQ3HCj2>ijPquIDt;($e)Fx8`QHra7P@3YUlv1SR)n z=dI~txf%*OI{C7JUl$n#1x+ll?+a$Bley1Oz0vygD&erKM6$ zMyV}8!Xrq@la00pp0`c6?NPHdy%N0X+GN+uExn~G9ZFJ(==d^~Ut@c}qsY0rwH%A| zyF4?#KOf9<++gD3R!HHT%1aTULaG8b8>R(l!8q(TxQdZqhXvpB888T3IJevj=hhrA znwIsGw%;FGZgzqY$L>z%L%y*Y_JW(yH> zO?!BJ~l3y4E&u zpz#u?6VTwoA_v2-I+_q&?{jyX}p2cxbY_;Aj%KQ1` zSKtG}*4528W5s1WGuJ3Ip?6;RpPr95`=`GR(`byN)6;2L_T5_d0sYnkq41G-K(GsA zVD7IRPZ{&cOf}i}9Pbc zdrpD~87s9(W6&%Adkk6?N`-b>v2>vrxS}&#Am&S^+XWdAdS*g4$D)l$o6 zoUqa5)v|})I8ZkP5JTLHs)5LcDMnvYtRw@ChsyqAanl^f&GJlS7~c(WI!{~ODxzn&nEw8` zMOd&wP_n9+9hQjK8}Ey(cH65+WdU#NZx2@j+(VRn?egpRidEb1PstLL60D;3<~8T> z&|@C$Tng)KWI`g#fzs0o%2`E`b?UVh&i2ca?btfwrRv`;wU-wG|M0*^P@#r(>wg0o z@YuiiX@@sjEy^U2gyTgPq^D!K;N|$UKr4SG9vu63HGoKaOMP}uWUHP;Jw8d41z3`h z8yZ=uGg+j}p=r^x1+(C@YG8DXZ@(q9PZ*gF ziRH!18C2oml>hGY{&bx3fYih=;raghR4sn*2D0IL;UR*xwVI6rDpzV1AFvQ`UBBfk zXt&tVdW5XHa&8tqjLE)Y+D*R<@))F0?%Kl829F7PwjC6dP#d( z7%nU)Dv{{fj*(bW9f{*fpvE^ryR}Ji?=E*N$KTi6X^lf-cL#7Zk-sJaN7#stEGg3E z$oqs#02H4=G?jeQhXF^a?6YlbSh9mf4FfgX+Ua!c56WC`WmyUCi`ddx%z(p57WHc5 z^W59?$TwdIGZCHVX!8FAbZ#4+&Y6Z*tla zEs3oQSQ#yj?X&5AO%@jt+ihNwCo^q756ll`qts`Cy9sK!vO7zF98i>qe+x0qErH4knrb3uVB=)v?^jT$GpLaNwo5$8^ci; z^ohqgUQ=t)K%%~gqB;o6U>glp$nUvf1wrUjvejd8%c1Xs)oAP>lCn z68|N?X2`AG4~OjIi8?*r%`4F23U0sLpZ&sc7I}yVSqZS#UuO5}{@r|lHku0GMxyXI z!S`10f4gC06<8@%tC;sIKX#8%75MV;_)53iU91oB`aS4DdrH)Kg&*ve(O-+NQpoNv+m}25e=Y)ZwrdV zvX7e?m))D~12|v%D3O@I%TpZxLpq6AJY6=OyM#^~gnS;~hZ5W_6D)ENlraa#^0f(r zd9G&?#dqZ+ql%WQCVpDErF{y*x*X0&zuT;Bs$r#U4$bNz9^s*&T88T!uM4GA$;P;) zmyHcc;gBViJV1ejtHKZ}zzYHcv^v)cv%-zZkJ18#x zC1vg!YBf*h+{A4QpZGOHC4(LgQUBf&in+Rc6Ye~f=K?r|^=N5EWnZR1bl~(gmy#5E zsj_2t<5>2C`bnJIw*#-pt>dKqxeJ0HTP`1YhP#VsHK_ocQ8fNUAOEY=Wo(euGBj{o z2x4;bd9&R?PRDUHy%e+egRk&Th@zLtbH!`sk^GwsdKQyDn;W3}Cb z+JYTida*?pslhi`5gZd)UNNoSzY^FnMUJV>W2n>WD5b|LWQtTe?CKd^D-0qGOomn! zwG<%vI2U3mk7>usi#C|BTP(t0TFuWJDeos(pwfp-xES{1cZue7o?Qsa@g!O$XKen7 zoRWr8C^e=U;d73GCGlmNZTK8_bHL=&mYM1=IW75|ai4WtV}EDxanxAQ{DVW{duMZx zc{M48W4E};wTo$UA3<}3BG*b06xP9pEko>Q%m}(P=X^G3vvNw;3 z^*8*~`v)NdO}w?^vR+(%4ks&Zd)(sXx-7Qb+WUJqcI*S%mQ3an zt3(oCzR9185^V$0XV`H|NG!iXPq?Y%q&-Mbpit#JzAQ4%9=|*-9x6Kr^Gj_X}a)ncE z+4Y7Z`e9M-KHw&~z&D${T6PW;uw$50pZ+9$Qz_^G7? zh!a)p6jcf^DKrmPKX6TIyK0r!S+pe~>&$CiKR`qkQFgsd8&rR9p)$Lnr>#t0(kn0( z8a5hwv>IjY^lVVRB|8a6zH;4kw4CM9P7o6R>ea+4vd9(-SO1XI2#i=AF47ndV5uDk zSfZb2-TUVd;fw>d9hj6 zABmV{fDAEz^u0eM+;_wE)Qc`0+{IFc%1^-n4Sb!=5Bz7yg)Zq#G;(iehs~u;@yY(~ zWtEuAU3Ybh&sQ&gkp(X48M3C!H3?hD>67AmVl-1sT9kB*T=FoEVOdk>LBGkt^MxN3 z&G$8z1B2PAZX&Lf)vSOW0C&qr@f^?E71~_EXI=CV$bM{t)wBD>Z6K#%wcDpdW>_LT z_1X9~zB|O*-Q1UVs1D>YrmRA``OS4+o2V-)5^ei^bkPiJvwUuM{!)%w`E=VaRTCTk zV#&PUyj!;OA$T2{M1W27#T71=9`3Y1S=QkrkaZm!AH z2v;)Fn&{LUq|oyue(Y z@KLyNm(426p}c`chdXqQZkzINCzfeQz`gW-=&^%@L?};_*P|V_h1i1~RZi?`?E3;B zm<58%zLLLHNI&Z_xl(|uM)*hUkRh{8vVO}tRwoXy$Wl({oo2mR#rj0BJ}f$mN3LXx zU4N?QneJqz@TV!o;aKVyXw$`spY=cPmAD=M6`>uaVo7W>NsmQT;S&tnKStcMSg-dS z2;HcocXm7!fm8)HQK-{B)@ml9s}Xq!L6X=*kVmGPAaqTzuD^aI!tMMgUZyT^ANuKn z$lBsumsE$48z^S^7@i&zI*leo)P(zVC3XJw$%NS^J3-~Lc|DULV*9V8pA}Rfdcfv2 zuGwxicB0NfR;#xb`RH7m3g+n8!}piI$c_%jG>z1DUUatMb!Q85n>UFCQ*EjVTIQv1 zN7yBM-rU{1(v~nf&M20f?EMaG5vt%N8F-m{--pvi-Vf+me0x=~H>xbP7xKX65LHPH zg?sUH>(G=suCK3Y@aa#Ecf@XwCRMH}Ab)$=kopCCFhia*fFzAFHpy7LvXN|B08+=N zuUofGuOt5(;|!!tus~9hkx7}Gm&m+#S}!xC{90CxYi};@v4+Zogs^OjU~yaj0en3G z&y`PWv{qrrrP=nqjZt`kNg0x*eMQ|_&2?|G+*V$BM!2kQ^sSR-PIRl+jAWrDJF_TD zkX#`O)UygVtf)>HYVWtva{0$QfYVJCl0tV)`pliTTN1Z1X{L1=0RFwNKJKR3dH z(@Fb!@AQIyiZKhuhl7J+PuFpNm5u%@6O%6fOP-zvq)6p}iJseZe%v2ZR`&L-W=ql7rnJUhd zq@}zShH}}3r|_Ay0610Rq)4ZL)_vCM+l#fPiowA_tZUVlvXxk>;rP#aG(u?o8vl)< zRVWk=yP(mZ)qDa;^{09mf?8>g9}{K+u?3Q33=a8lEWV00xY0->r{mtBr}oS*Hi-Oy z-s;x-n}KRZ@}7TpX=Db|3@uzL6!Ph0xE$4wE*iqy0y(w$G`mK-E}?Z1R_F})&)B9j zEAf#iL2x+QeFf1nqY<>p|6F8EEnC=uQ(7jbucc8%3b_JS@b0C1MaRX+765PvXM2$F zHO2p^i_Pm=S@i4Ic;J_BP}Y?1Z~;5~%?X06_JtY2*fqLxO$SPM5@3|{^xr8Iaw_p8 zhoZ4bE0J~Eoy+9XnS?#Sz2>W{3y~doAfPOBx(-FTbB=US?R~i5u(=hJdY-{prb1Y* zO-{L7RaM!um5A!iS{pA>ZEe{7)sjWN(jE%^WmxTUic7{+8_g3AN>=v2--#Fg`TN&b z+Bf@KAtFvr4J{U>;N5`jE-yE;o8L9yH$Nf;Kc@uZI(rlr%sqtBfNx9#^aMuVc!Byw>IOaSuj3&oB%~pe=qO-gyMROWepSy$w0Y*>q6^gyCGoIonp{x z^HV$wsVcc{KRNMnsm6SijZu8xmJNG`csXr<@efVO(aF)2)rKDx_ZyI3;S{m+Yf%y^ zRFi~j@|IHYV*N+Gn4VD9LKGP-J~XGk5+4+g(7Ydf_8)}!g==;uicd zqFnb8kB}2E$9E4P(raNIj@20Mj=HZ^2%6+HfZ9CYuHA_`)9K~rp|b|a+y{Ez@k)j6 zmO^UD=GlciJ8?4)AdBE=f|K=Fp5_^5uE&Z4Q@ue0HZ}n{CPKT&)TxX9Ig+f53>gPU zb1Kpek{IrYtRSwo2%V5NXuA7@J@USPtHzM?yCukt?@??O@}1i&Xqo<3HQ!BVfhq;ocXky+k6^YwW zOBG>S7UMxclVczh1O+x31k_ov=l!W#1$HppDOc?;;nE%pC>${%>vx=BDa;wbN|=zA zc-h4Idz%e!_gJ@t&x&%Z@K;wlUMfpU6`vJZ!%VyKBSz}u^xbq7jP$;j(q&i^0VGzx zu^qePk)r%%4?Ike^d*{KhHaYLbXby+E`A3!v-oLZv`Pvk2|lj;VZ{O0L6(||O{!Vy zp+9+|Zf-t18(P!2Pu61Xd2r$MweO)mi2J>9trhkvU~b@wg^WR6hy4PH(q97N1T5#3 z>z!i={n`$|3KT>P5dijJ#~fLZH;R--6o`;Gz=GR8@P~wK%>(|y1;8`Q9)$gzx4q4~ zTNOI9Xl-|i(9VY2omCDJq8j=~TSf&3xQ0|(QkdF&tD6HuI2UMFYQfIwvv`@P#SVrV zV1q;6XtYe4$mUi#j0%IQw~Ge`Z_ex)K)r+HQ|b-BhlbpzPLp~IZ;({=iD||p34MyP z6)t-|eAi#d8#j3`J4r!>cWhg)IeVY`X^WX7$jsMOxKcZLQbX~)&H}ma&F6&pDpJi) zA)3O#Gow zg)$nTn6h%>9Go2pADCnBMy<8j8-PX@DRUI2^F(3!8ZH0?E~rs1v`$J=#wI3I2Xob1 zo4aB0lT%WP``Z@SwH2PLYJBx<*E}XVdKh>m^Va78!Bi0Lx4v}`@Y18Ph|ky$xJx=@ zY(IUw+Bp^l06}|;LN?{9y6Q+wRk>$q#&fRH62g%zkS+F$qxa5*J*dFw8D<-m5;-MP zBt&DjAP|g5{G=3?MRNAWY{5B$g|>G>c>3VRa`8sW<@(OE;*m@~AiN}_BV$!hThpoh z+hp+MXe5DjZ2!6atXc(Ir#JopA$^^AEsN7WRmZ+dZ4xVbc4&!m(2I=Ws$8u?RWtXj zrbpk>ez{VsP|(cBL43=F`Bk?P}NFzQ!!PS&&?;T)Q(uE&p0eUhO2(?!@Q>zXe0d;9aW zC)SHDug9_9ma@yIvcbXUA+2kru=%5*s9MJc#!vGc$WAIy1Vg0O~=n6`8M3RS0H%e9uF; z_JF}JDhI8O`v>PO+v-?CMI%%9Q3kIfhlS*_U!bgB9?qM@K-QpL5@=?s5V-GvKdo=S zm#hVn<+v4PSuB7yA#p_m$2w4B^rMkL|jS|KP6^NGga4Jq86APO;d5O?(WsfwD-B8Y-$(W=#=AK3*&O+Q8jt^Km!Lz_;x5?PdD|gQFtP?ET+<+#(Qig#JvC zctE|Zrn@Qo=Sy>9Ph%sSR;xpPyL2lR*q6~=M9Z~C%cgyadsslJFm;#}=8jTT|JoUf zYFn}iF=M$G1Je1N0F4?7nbZCp0%%Ss-Z~{YBo$C}?}p;4&UeCJF^M+CTn$g+hVmNe z=adJZe1Pbx;#<;yJ&3F}O%m{XsuuT{=&FNLvZR5;{ZdC3^Wdz|tc(_BJHCF*LF_(- zYa2)fUw;fb%{)1@(gT-DT3Qgst0}FFU)2!+oZkD~=c}(4NcEHU7nj$UcN6Q-u zGttxY)(Ml=QloteNd@+ayFlzKf6$J*W5h)d*0gw!G)K0^vX!MRzZM z!?%6H4@K)Qx+ZMbLypUOZq(?ke$h4E&*e9@!e3ryL=mZplqP}Kes_h0FqmM0A;+5_Q}z*01(Slxl}?>GA%;_vsuDd5ntlD zhD_1r8UfROYeHD8`yU5M3Ra_3!^BoDFh0nXDEV;HHY$~GP802RGju^L!>WoI`<5eC z(3F9M*AT*bOB6SioW=Ri=G+~EAeL&e*2=BP>3^Ed3C=+D(utn0_j01(N3-pH8`F+W zWIgg7M50#MCVW9y^)v>;HcxG)NI2NNa0lWVI$RJeiYi< zg?IHda1aAo68jL33)UZz8t;nZ=~S2-s@mTvjBEl+k3Zr2I}-iom*AUpLQfCK{y2>b zRd^-(-LgPX zOxT)?pzEKRYMF6aJRX+mu#hE2`stDFW2iDFfKY3`QuQvlODq*PrTWq3yIeKjF@ohX zOD*@7qm3bJ6L&fuabUWT2lBCzJ$VonzV4{p&m_2B;iG`PV0H^C+FFY1jlf>5FE{-S z(BdOPqP!#RE=84;3SJE?mQNV>_0T}JY4XHIn%49~_u{besK{$$< zS#3!r3s;1uBC63IDLL7Owo!mrVbd6m&{!F5t#SQ8Uw$W!zOyYi-z*EB?Pd18{T|i= zJ3?f#w*gwGE82Hs`n`i1AJ%6Cv?Z^|45{t4N~E!;$+wKtaWfUR29emZDZ1gCs;0fd zdLt%GZk{rGq=ls?pRq2rVRE#w#ii$36a=N^fB;JXnDeWTntJXW7L*~N**U}BVh)e^ zz96Kf*sM(9999cY zBJdIt2$m81HkIHXzfI!!O904ZXNPG9>eJX~Sas(4l|~WB=5j}{Fk&Z0G~OTwUx7a- zi!Y2=phR<>HSXGyA3?g=w@g&RA`-G3%F<(^}DjY0MYrvCSD0ChGxZJ$jQX>F*Q;^u?QcHtA z0|>UjG?^lXF8$t*{gN|)ATRy2gn1c*iF&?zsv9P-!U`SbhuMnv@Wfa?YZdLF-?5l&5lgK-f@2k-}NIg+CoAA?pIc{wt>|QQLp>Y2+;uiPh$ApI5 zNrUN(Z_N3FsnwfmJffd&G0b3Hs`hxkYPc}p6Z@6qQ7`QALLrdZrPXkB;sdF>Per5I zHIo>!$XI(`K|2kxZ}rh3O*$nuG66Z|Z4!jw7twv_YtjDl{$ienpTh4fXZRY@;t6zX zoO&UF*G-fTU65tRWId0STCB@eMyo7c5n5N%<2=*fl8{7NH;{8Y+w0EJrupd9`3jlr zv-)u)D>^|i(&{gtwJxOD{^%HxLPZnT0zH+c4b>Pd6N0+ISMr-B>^_-4tF{yx?-7pR zl<40a_dS^6pN*lX0qz<7H_UQVe162f>H#Y0fe<4!bl4TLM8G9ay0d{yz3WGP9O}-64Y4{UlW2E(m z`kp2Iar?BpgNfw)@H)UA)BP#^$hO+HhsmVm$N+L;p`U_OS+R%CVjiiLRB^Bo&njM1f>CF6uVCOU^Qt?mlzB> z!9vwB8JXh!UWF#H<#udZT$M zE3IGphftAtXs?}?8`X^VtD|e;I&dj*q??}ylUVK-?f-HotHxU_y$*<~SA!%-{}S@L zy7N`FEl^M4uxWAz!_pI#jQYLb<~Hq%y-4a32z+-W57_Xo9;O-(;ZSRT70$C8Izrqn zilrVLH~NWx29Go`6HhmSVdVuwhef zn%sQP@PYrTB^y%g0Sbs>(`xp%jE~vK*;QAA<~)gEYxKqbf}oXa6)$*_LcgeWE=EF2 zUT)oeKvp^@CNAOO?i%nTD z^&^g3ogOs(%`K=yWMjBV741t+{Hn`zf1Tk+{%B8WY|nDsP-vu~!esKlU!AewX6@%k zS4gk({St(X>Me(KGP}0JKdaU`6S&Fsn+E*-ZDD-5_0@xcfzcthFc=dH6wxSUE?kbu z{-#mfSt?T>n<8@&!D6}0E7J~VOFU~!x`D707?3vpr<*;e)$ZGuSr`)Cbklf+N`rV| zI<<>rG+{P=epN=~9W#GSaNa?V$y{zM)pGT{Vcg06IKk?rrCpD8G+~uxr0c@Bb}0>& zXImS+@Sh#bLNd503S(>wp#t`T5b**dxfrAi;!5?`OgLoM*L9N!v5{k$ipYIjj*Y(Z zl)gJSi#)oX(RSo|l8y0|`(`LT)r#6K5sGBBYQIJ*fP2-vxOgb0J1x{j~u4x_&(6JJxX&4&zA{`NQK z;dqKUw>tAy6qERH!EpG@@duWwILmfDEvY(OdwfCI{PusX%W5<1$b#g*6Dq^bPQ%671s<)#Ry zQ>uJCOjhQO`jWW?J?Nj9rD?U8IL26N~Sy z#e$qYT@bRo_%ufi)bksbpB7L&)GB)QeXtn$@I$^XWNZ@yk;-)iPB2(IE<|L4W4OoPo_ zJZGucxb{G1hh~hOv;HyHUVdtV1HO*b+m{Sys%})4#lA!oTP{Z6h@Q>qut(fQN4)nH z0k5vT+M25v+iem*bJKw{1?V&@N$tgqh*tfvHAomm$Jk)r>CCtjM`dL4 zZH)C)VgGZgDt)E5T^deBOs`$~E#J^H#@d!E9LvZ!HcjU5DTK5jo5D>A+E@{DTG;d5 z{VPN;SpNCQj7Ybkn}{+j>pdZ(iN#$we{>TXqn#A7lE4TU#1m<~w61RUhU>cRMW)S- zW3I(}Vp5Wt$Z@+w*nAlK&j{;`Pye{XwMu5|6EdMQWwHcE6SHt&iy2Oo#D6shMbI8; zyp4-V zU6YP-MP~6^Lh(4;^rNbhNy1%*w}8?`A|m31ivMdwmLY_ynTyBgu9!lJj)x;GMI?Yq z=A1__a@gl1B@vL;QZwj!Be}&Rg(DnWC6c2PPS|{1P(X54w&nvNmSm6lA97P*1PLK> zW5E&@|7D=@r-rI3Rs5&Sw8n84E77Y1g+O_kc-i9n*Y@6Ar>3=2vE;igL1xNW`Ob|^ zENIK{Apdm?uxH?;IoWN;A~qrlI6QAK8=7D|tZLa(=H3pP_1@O4)?u1NMG(m`m&(l0 zif(Ma;6ixB*Af`HGCPu>z$18y=0@nrhf7egK%^&nO7wB;S+jZ|_uFiDIaBR7TOJ(< z*TRZ;p8v_Dq}=vBn@dTYS@N3{02_*Blv|Ve8!?Qhv>%z9YufR&p5SwyM=_x8+qcv)S%Uw?MuMlK<6jtdxIDxfr z&95G&LE-?nL<3;^7Yfaxizr8Rbqy)+MftXme6PiZ@I%R(&YMVWj$jtyD2co}K;A(= z^FXKH4!P++;IA?hAHp#jH?2;^`24&6OqgBLN7kY^A2(YL*9mhEol!#S$&F$IQp%sd z^l8C@Bd}O&U{DU~te2~0P~At#)2Jk(G2(COq9?}3S&xeZ*&zr>6;-u~2y33B(31bW z44cespmiGdKiN$MPwmbb!d%&i6>?|%YVxgiBk;%oxsKFtU+)q=ZvEcl)-($dV8n34 z)g_`NdR3s99#IO+K#Z`zo?Wg*lL8tP;F&2D@!L}XWYucs7ALwAc_T?BiPf7jkdPE` z#J8=gs|ebX`+dic*2+cWaNBfAlQ9cog?4obC*5KLX<2Q+UtbTLruj9vQ)_z+`yh7X zH2Yvv1q`x$}egTD?GDa)zcLpHugfs|ScB%XIMz*-I zzakCG?^WMsrB>MTW@5Ims2`}6Ry!C|%UB|f6@o2*2udm_V~1H*n_f3*u70|8MKb5d z;D8`$1`3^n!t>{@`m(Ezj3>IFB!gWFNe<&M(FMw9x4OKtCQlS%gt`FUEr;7ExyUN^ z*gkVkP%>jtrl*bLX1o1gax`EI5`|GWR%f1zk0_v!>)#2jfb!Xug3m#^Jg*Xq+!#eV zc5UMHyxKj!U7fd6yb`ZteG*@@%1*WRKafueg1&&a0&pn|xnMTF7{TxOJZ`$JvH5~j z)$E7O=a6;{J(rYpYsI#Y8I*!opd?n+J#Gh~!%bKwehhvTzLHbH!=Q6?1ZE5Yj-Yjs z4VXmA*qX?e9XL*?ZMg*QH-Cn0K4hZQ?WtCmNv9iuY?ohKwmvJK{#n)4uvcJwX96UA zB9UW_PxZu&#>x-U!txQiUc2W_;*L@W;C!I>5nXNXc3Mzlnxy*-PQ8ig)uR2#8m4}H4JhYH_a|4-uUlI?m|~_;j@uB&6MzF=gA8D8 zG>?^4jVOdB=qVM}`!df&VR+V-M5#b?p7#rZyxR8kauOPx&ud%%wI|fPDDO#bZJPBQ zXHlcX@4YzJ%hucNapO6D!};ei@*T7FFP?18kgyP08;L*2mqP}6kL)tH6{gqiZOYpE z`@8GaF3=ul8V0g)^7o9`EU2)x79aKF3`wB$5=E_wjmM&C3#jZU|7~`^9H9W}Wtodg zmx&q1C6jxPY0dGIx1$)ad|d&9mv#zYfo}Ml3f5w^adl-~<-hwmuj}68Y8igKcLgoU zx>fg1(72wll?&clb@yTOkq4NEW3st|)HQ++A!3qET<6*M-@aY10)!<u}`Br5wY|6w1TDyGbdA9 zgz!JPNd4L~?NHE&b1iMK^5uy9ckySttlb?IeiFjC2o^U#Aj8{Xj!A1zMp#ypYDb?S z;S-Qu|IE^enFFnGrVtPc_{4|lcB$+Yn%j3oC&6$a{>_S?fvC4L=0J%us%G$i#!Ggd%)qM?V|lmm80&H ztbN8k@O54@u5@}dY_mDiCQw`6x8FTL#OYwox<)NQcqj&!67(?5B)-9k zq~HHC`d)uKY>V;0C>U;Hi6Ef100qy;d+Y>2AK3f7WLbSn9MPV}weM6a{z8U_??`Om zef^tth~4|2gE&$IpNJGsy-%fHhdNQwXB_iqx{x?0am1IcgF%WC`{!aow|kwY`t8Jm z$?hMz0zO2^Na-DKtlwWDoP}@8=ZamNhd|3UFqHzU^&{_!c8Be9BF|^;;o-gJX&ueYf9GMAx z`sv~UQeFI1*ECq~&p_!a1psbsfxTlN5Kg;E>vev5}Wsu43{UBHc=MxX|@Z^+)*893sU? z0_ZOaByvsTY_dM1TYdhSEohvm%Tux&=3`5qhF_o_4ayj@O@C6a(k73>WK5N1>{87D z+Z1nfu$1t-M*?TF4UQ1a3Iiq2U9k7C}4FG#G3RYq<={Evbw8#4Jx3^rSE}y31g57lm;Gj<)XZgHF6=!sD`94JPuPdl3kHVEGXzKfRvM+ z;7eK}{WEj<-%ZNC2E#S*8fVInQaylRi{?e^K7t2`@vFHq-&`vb1VS5$dW{GinXm;T zJy}<`Ni>`1x@e>VG1=WVu3K+#~N1#$#MSbSm6<85ily+-Xm*uYgT~~#2@fjxW zCA{X$+FCAQg4WHbEMUXteBgtQF0vFYtppN0ePe~-p)?!jur(%D&H`{osZTY;`~#O2 zcFcKo8M0627-dMG!AppGAEnGyje4EMn*`-2T4w$|Eo^HRmC>9y&-Ho8FogK3v2>VG zG(8wnghWnG{+VG%Lr-^zl+8dCXYm2D$(*t!h+IGk6Ffn$!h17BnOV~B6TTZhA|yYi zvdglS9mI_I4T;2(dW7<-U+$*0n=Ybus?L?f#?f0^>rm^2rj!)gX+0tp8Z7xJ+*{AvP$&ZSkypDgmB}dGaBiDD$ zo6is#xk>%z1Rh8oR$ha`jd0Imb(XCT{lO^Xv+UZXJ>Envhzua%QJKw6pl-r;;=%Jt z<2k9#9EX^GnSwq2RlK+45Oiad zQDGFm-C}Lmwha`vYan}YD*F=GV3n9X8$+U4;%qrOB6oMC&g+qYJMqs8-_T*`(qoJk z#<~N7T3R;x%bw~|9&nY1WzUTj|FI3 zM-(Ei_2AmI3WF3Ua!|b7mv4`pp_#8wxQ?5-(?}~0?sbF3%cU1SOA&S}v{2eE@LRb! zTT?&9-unkg$cSG`HI|9dXw*_d#!q9$$w@gU?dQ3%?2+o>4aO$ZUKf7(?7c;_P~kfM zxkAzhv1TC%#@3xc?b|#B=zQEqY6#O1Y-ZzNSmFVf?!Wcpd?XdFh%#9V#c}Qb{a*k+ z=Mt(dm`EU(;@xT2KDt$ZQUezSX$N=Ka%h)iwcA98)aqYz=`VAGk=!H*zQTLnS-DXI zOWzbaeNGLT@i)Smc5zi&kB^MYBFSTc?k;9MZ3QVQMS^~d2qM_(vwq#kvl`-PFzYX% z)Se&Xa6ykQ8>uH}5+Yv$xYq?{2d8&2oeoxzV@dpS`oBCmMdsb}CO8dJ4_vQvwSHZ- z{8H~d4$*UevZiF|QTOWf5Os4CMA({hbK<6)unGF-0xNu6@GuyXs$vfkMSZ(mpy;;v zLOieXRZFwL!la)MXa6oapp{**)+LAJR z&Q0Zhsll{AOjgB`ZoJn0jTlX67N$|BH*PtIAy@_3&3ifFMmfh6lAQwwZ@Jl}{cyQi zZO^qE1~!f-(M~kdx@EDkvZ_kp{D)Mx-I0)$Re7Ro_ZQp#?a59pxUJtK5b4GLX}W9S z&CfqMS5(jCO@eTi>8MI`+_!#IxzM46F+M2^4~y+<<(1D*bUJ4A?YQ_@yq9ab^77uj zEx*3He@_ahcZBWTk58N$^&W9@L>^HFgTLVpv_Mx~{9x}lq$F;#eqS(6UGPGc!{J1U zQ+84kB@hT#y8cp04S%!N<>f)TuL}(3*w5rgF8`-~E#x;{Sd8aX+MW!&`9T!tQnq(L zNd9O;B_{c<-(Q-+Y88&E+0-q~uH?u0`Z)zVuw$XRjZbdD<`)h-@Uxi}$o$7eLqo^e zeKKhr3_-I)OG^vFXz_fuPohqpv#RPx{mIJ41_Q+nSX(q|{|m}R5MxF^JUIAtO+YhS z{)1_`(IN%-+?;5-VN^a{BI?bjY#>fT4O)#LYOjSZ>!n9{F(-I0%woc?`S-HJQS}8h zgH1|06m_=yeA2^w+e<8M__!Jp#?>El>t+Mf7UPNiNc9*9E_zE4COkV zpoxW&8CuW%Ryvsj(&<4jm0Hco5lme_Q3$wmS=+CAhhKz8^r;kNWR!V)E6jckul84x8A=J3=!N8^M&mb)_WJ(`gYQb4w7Tqyn3oqe147;=>R` z2_tVtmFr|u{j6$_=+y7$s}l&}WNoZPdQTMn1w3wlk@oa_Gb8`cY7@|($SY3!_~hCI zp7e0)Bq=$W7L#coNDMo!gmR;9 z2jHgf)zsA~laZ0BKBdfl;<}dYCq_2=55IA~)(P{_7>Ed)ZyUrA@h9@K!RU3+JN|05 zFVZA2qoOvh^2(x z9E2PpA^+=l-#8RX2QuKZ|7t0H7L^N|4ZMsqf&5o#T!v`Z;Il6}iw+ z{5G^C9#J+N6l>c51!ERhxk%Na^30;)W8(YIrbf55)IKwob5_Lm-?g~gp*AH1djE0c z-_9)k!|BMsK}9wNSkCva5ksUE6q4$6PQf8_zHUpQB8&$e4mdOB_Y6S+-2 z4MCrSD?qdOFFk?f`6hCZK9W2%3&R*`ic@>%YP&BfgDpYQY1nXTNch0I<67cxC{MHL zG}-gHjSn5zAH;VHq!DblMe-PtxHvi0NupwN1K?0c0H+)o*sO%DQjGkQC4zc7P#>03 zV#3Dz7T<4=|GFQO_A40({eU0vw>ec*xr0a9lLXvvRl8R6W%FjZI5;??;H1Q7oqT`F zD>CDsjLO=BfIe#;bE25eE^Xbi4I4DtdYDZoo5HA;`gY;ct+E&0#MF7GEDoh{_YBya zhA(~odAOZ7F75@O3dDk~quT(4L08;R@sz#4s|Ml$7@Jc*pkIf35P4zpDh;7E}`rFVRawX=P6(d z`F71=vXlp~48PjH-!F~=X_(S3Q374Bd$ngk#oX&d6-)&CP~%8L@yb+BM85glm+Q7x zN{Tu~;Ye6xuNcacYD$EXX7emvwlX^rx={LDoM29&`^#y?erJyZ=a%`ddZ2F>yFb*x zGtGUN1lmkQ?!4#!`41CLtJ)PxWAT_yjL0HF%H)6v^IgB6Fb1b7k33jv^V+JYCW*5V zbjvYGH_W=w@QVzev%+DIeS}u#U7$+Jpi=iYdUwSfpGMa{T(`mTB+B%MSJ#u(^E!X^ zYrWQbiYTD_En?dJsABXFp`8EmAMZ2Ucsz(9@JN4CB4ChugC1V)Gi#^@CJ&$#U}?c( zjdfvC&ACGM`r5@vFynP!58#{U_%L?A*@Iyp=G|H@Q%}NgvB4+v96CdE#YUifIQ+qc z!8!O1K>s`;cwcl{n|)E_zfb&xVkU8w4Ip03aenojZFpR&ZPvcCp@43gz9_$V15@A} z%jXmkX3?a#y!-w=>!gB^nBnO@GIB}e6rx>CDSbr3m%rhP%;%^?JUz90F`jK7$!k0G zJ}$@gA2oD@F<~i$A?J_kcgwjMQ&(-BvXmP`;(WP-u~ZHD<>nyI7~k`~$vb!bBPvKy z%n++rK>bo@^Y1`At8uy9IBAzIo5R^9{*|i@0~@(8iZwQ}1Q;MbYri%|y1uK`gxB-6p@>;@3;+A-v&dYJ8tj{=L0n_DQd^=Zo&@CAoc?E&Y3VSK9p3Q z6qesro>hNdkW&=*Om0|z15tP{lxB^!)WZcgiN!yM?<0@SDarc})iI{OeY`e2KqNm? z{h8l^5>~e1o!jx$!vq$?vcBuJ76>mb|HF-#n2)k=Wac;d`a9VcDbKk;D5X7E7Lwe zU^Hz#3TWNl>RC&@oXQim(CYuQkJJ4WMAnzOKofE+`E>+1#ukiSWRD@sk5@5xP$ zWOCU>HV|ljEke&Dq*%oK<)0_#l)*ZPT>lM1vwN&}OSexmQ;RWTVLT~(#C}j)#Rutk zS(!2bkO|}aDA;^1;9U=q=mE0H_YYR4Aa2I3=^5aN6dc~hujn<_TNOcN*Chmf#JCsM z?rzOnwkxKgk!F8W^;6SkXtlYbPAuNxKL!p@ zAn{jmKg!w>5uoP!ETcFQH_!VS?i9-s-$m81!SiF4a;DY_XLV%`*$i|h*2841>(GOi zT8t*RqR)^?cfHFE8Ya9huO>R=!o`tqZ_<#3njj1fnF4U;|`HvQ4J%$ z?R&-h@2qm`XM@{4%CZ2tbpFn(jG>yWO~%aqn{SWr_Jn4$=J6oJWW_zA@eZ{bS;zzN zbpK_y5A{B_(am}~)7#aLg7ztR*AQRb;T#vyxyE#IsESQP?Gi!}E&ODw6m2#|nTURG z3>~Lp(Ky2QBhK_-A!EDvy9>2l&_YA0wQ}h@TpW0`jqBdzu8`Pol1B_xY7EK747L*%dm;G zS&U&RN_kB^;<`E}8i~RRWdc)DbyOt3LTud#8{v>A3uA-#vhc}~K7~*m<>>+5GK0B@ z{WDaKo>l$thVRK%IdohK9c({Kat8@}|L3gGssqgGXu&dyl>#8!pMDj!=*?3U{;|R? zuc__pVcMGAZ7bBydn+(n$O-O}cn-(RG#BZnu|j>;MU-3cs!fdQ3ObxrL^tjVM%Z1G zVt@DoI2vSyjZ5h_xEF1QZfv*-s+mk7Xyb2xBy>YSRJU8AK>`uP$UT3;P2m31K{?eTM$Q?CQ%{62unZ{Zj#p@r>1!bjgvCQV*B3W*2R*uygaaT*Q!-y z(OkuP67Q$HbR4+tzLEObQKKFG>(^nH87c*qUgFAz_G5`gIGS6y=ZNsoPg1~s*>78U z$yXwNN7-n1Lygho?#B-hh5}KFwj|eROCC;Z_RJ;+6r^|$0J56WIGP{~g4i}$3KjjC z6U&C@ZyGP0Kp&5qekH`+R+Fa|2&#+QT9FHI0DxLjo}L}wbaVxgvqq&RW7Rf|q$YLv zjrIz=;x`5IIQzegI^Dayq91WJq=f#<^j=r!S+x5|bg}fd{TonTg~SH6cA1olDPicu zKt#$sIrU+7bBM0m7E26p?4$DZQ?rqMg)5qhei&xe_@4zR=QH%NK)ef59x z3G`hCD02zGD+$t>j8sW|e2p}%TuXYD?9er5fn(u2U$BJb%w8B|mL_(stmjvm)0C8> zKB6F~NBI$k{h{b03fh6< zA631g8J?A{ewsmWyeJSLPGfDHJyZr%t4KVy0ZrA*5E7_89tA}g9qZZD07;|yJAUPs z%7g~STLE5qcpcUp`O+G8#bUYagZc-2^Om}ikkVnKkg$f1p0o!1^maF*!RTFurGX)B@*uw^BM7Cc6Do{{^rJPgW|B$a4M! z2RWo8BI0joY+NS(51iNn6U&OMc`Iu^Fzn%57$I#}K&WQ|6y@DZ)JE;?GUYcD3ivuh zQ6-OC7myh$Zbgr2Mqj?L>s-WYQOi0RwODR8X*UtC9PR1D&MyJa8XVQ#`2b`q@aIrZ zg}<*gpQmk%?Y7xuQ{jx;sjOl*E3|3{Qb+qee$e(CZil5DK4D>D;S~8WaxyYy+Hj`l zikEPLP!)$--2&VjkuEl?OcveT6iKfhQlsI~e^9$bO=6W2Dc)aEk%o>uKW{Bh6@%C4 zh6>rvnrawSqv}k_OIVwXESU|33#a_d(>|R-5L12+8vL{e&~8N&ZYdx%Ojmp2Plh~0R53R8Qsxjp}DL9 z`~IqK$R* zTT=`~^GDke+jAuCpAIfsRSiyXU?QZ!?o=sarFR`$R_Jd&^kwuWOs=L!q-nMD&I+N< zQu`4&JWz?xPI?WZ&lu5r={yY&u`-wEDnP$N@nhZ%nc%8!-H4K$9~mB2^7E=xAms*a z@mm%@n2X%DmGz;KbmD8S2Lrnc=VxH~?1V2^m&f_$l|3cCOBEA4V?C^lUA61!7U45C zKoJ(jdti0{?Q|WWm)g%dHD}pXb=0ZG+ehcvb4K7z%BT~y@UExZvhaC8 z8dkOF{nh8+S_5h`B&5py6CN!}Z{ebb;bZDx^73Q}lJ5j@bV}3HQNOpnra!Gh z^M&vPKj|Mzhs!1eop#OkPrhmu4s$GCYA@_@IzoT(D<%QRxGGb#P8pHD&3lt)xRU7p zzPlthK-6IbOq+av!P^_jvu8aotVr*akN+GZo6#Y#;;`O#3S?GEW{c%+YaD08myeI} zsr2JB@mCulm(|)?=4sUSITb?+b zZw@m#G;$5-HZHAZyP&Big$%FAm+u)mhr1vjX*QAhF50N;v^iQ=&x)^ns<0k201*^D zuL3C6H()n>=X!;Vz1Hp14R$ZuFB_$lcJ%$J6R5~@3mSPYHh(|q^Xr%fA%f#f-~eF) z@%xdaKTho|g}_B%#hZDFVWkUzze^`8mk-#Q>CL!3Bq@dSY*8B~yO!4UDYC&H=BmyxErh3a9ay z-&c=qu}xUWYEJ(RHMP}UkiHnzy+)0xV(lc4hN_q)wLIO z8(fqxKFIP%5SWlU)?k^sDQ7hbtXHuh`%bTcgm6MKgH{=5IDWLI~bD!Hq}g#Vf<_ZCU07L_|k2X6hK`{0;Hpvm8cC=2q-b! zo1%m2DjIYGfY{-8GpC|RgUpt`tx<10{3l=n;g6lEPb9$#6RY`})G;fSTzI}?I>Tur zJ<=#AD_kSWh}9}}Q6?dVG00J2?3=ly%0{C;cj6$Ce5_Rnr|S>h#TycO3_i?L(Ly( zs{rFs%=V-ZC7t0^NNhlE!E@tTygz_2A(doI_OpS^_jT}sFKPD;z_wPh^VQbYj`YR* zPQ#%Pd^g($AfbkvU0%jGFKoW>PqL?n*5QWXqyb2eyFko=_<6qCn{vIKS8}(>W>Hw< z{TY&Gb5>q6`PHN{14tk_W-`;ye&D~YjGm7YCAoM^aapTLu-I)MfE>_hohaH-3<_u9s*!~`+#tVCRby+ z_6ZSjUK9tDKm;CXhz!+$ot1t@^5bQ(oA%}rkiE(-6$RfL#sIKyHV{9$Uw?zMPsz-r zx9PYJ{`G&@(bA?VERnAO&6gqeJ8Og|kS8xgt*`n(B7pLv@>xhL2qfEMf zzgSKs2batA8U76}iqFc?=P7f^3h#MHMP@Y)wMk*+cDiu?nHH4#D93%9WxT zWZsQC-%i%Dj^n*(5d}yMl(7Q5SrSK*5%2KaVQ(5HgR)R7rcH^7SVc+)lw`5JoAVFI z?UeSig@82BAcj1VPzQgwA9{}?ffqE)`rnfj4}n2;-1=2 zzLNv8%71$7(NToej7)WXBtDPYuXM;k5o z2KYym-+ShGzm&3`Pvi*xYhZnea6qf!?T@H79vJO^f81mOt3sOgzMQd*1%4Rtx5*s5 zl3Bf%lV%H&;7C$ke&-(cMqK00>9%z!M^BL@cI;=@L@O5nIl~6jkG~gt7*nTkZ4^1zX2F7#Y7$Jgzlcl^-9m>ua|cRkc8x9 z++^hKmPt4Qlmeys-b1f%l>z=Ia%S^&2Szg!wH!%raX3qiHu{PHEd-m21un)6d{3b; z)Zd1Bp)(SE6X&OgBh$+`h-rNX?vLa_A`iK)ryay&ATQkUb~8GnI{Hm$;TGKixt?hm zSMHYi^!lRpkf?~z(2EFFGw{jN_2s_@aRXQ2kUdQN?@7{W;ste?5F9XT1+?G9WxVk% zARwk_f!>IUU}Uw`ABNdDJBWAm^eE)Dhq^NnAp}JE0)KibV0J8Ce>E|9KRFoBND4q_ z`uy>k{qPjWMrGyRfjTC!E*m)5EI8H|bsuia`|J&8nR9!;)%55f`=~&%(pBnC(8vaJ z-I~i~f!%ryP6ZUjgB-=_jHk??2ck_Xl>zP38l~gyz;96c!NWb-OR)dM!w&#k#pG4y z9`^(>U@gZ~w%34(SqA{$`-%Ge69UD0@T3R3FM*u4M8dL13SaxaiNfb6_mKKNV9!>U z+j{PgB%KgE4$YOS6nS}UGF-TvchhXPKEi7RKC}tguO+MmlI>h$>+ZU{>YvpYI4y@>tsKL4P#?UxTN%g8|;@7>vUHg$- z`6_%9(MZ{s!u?usF3cY?+MO+6bblk6(}o%a%o&QJW$3?AA&F{S=g3Sarc#A7mwq*x z6i7rVA1u7AIPCE3s7z#VDFO#^^w@2u^A&Lk?QcKBzhyB?<+_Mbkw8D@&-SmU)&28D z$DKwjjd=TOLU@x;Np756yTHVVN!`e%Yu;gAlPv?IQB-Hx*Wt^ZG{;8oH6jc8ZawC1 z7tmm)(e2+idf>zXrrZN`naX-NuNn<e~Bsqna?P zT`zNSZ_+7ueuv+Vj!o6Bi^_XmZ9YCemhtovbWqfb&Gf!b1ac)6$gGi^z!#X#hIOL* z0*Q)N6ZNKF=PMLuY2#;!4ZO-HkRVtISZ`XRsfyR>vS^Oo@J4p?ogV^>L2>kz`H3 zYihuqfX&&uO3T#fjIIyt-5pwn-xn7lq6uFgh+;*rKRm*I+wi?)cES^ct`-gFbjF@6 zd=Ua3>@H_ZEE>($+R*FAvw4vapcpG)wx{)BG(?3XF5j9`+Dzv@sR>GNFr5}*?0WjI zu{Ij`1{+y{6Qa?}!~HKzMGAz~TvBMmt)MKRm87n^{Z8wZ+f**Yxpgc@uzA?a9Y3SG zFn{XQ$v+#Zt&RTIg0&7MpiMih^QE~s&^id2yqGGatfD(KM!lgo$H)V=ctWUDF54Ef z3x6E8=gMW~08IEStY9aeKTBb1XSJ^S_|6Mx$824dSWR+`_0PVI^Hq}a*;mCV5Ft?m zpESFl2rd^8+-H7h=r_`9a7l*CW>hWT6$)xoF~jRU>|buq!TB;vA>G|EIId{_aUhKDewRzd^}L z41ndxSpO2CxB^ z>W%D4Q8L$`rdJ1#)PDUqnl50S8bSuse9CcsDlo~rX`j_Kc#9~x!8%<1sf2n45FIIt z5}E*9IBI@{*YOWQXUld%z0SeIEr^n`tM!qo8F4&aM*}5R2kP0X!hb4h$naP7HH@SS z%CM3SILbPxgUac8jRvdE?fI6QQ7Ez_#Z#`CpaxY?M)ztLpPE(Hwd%!t)Wd*KpciL-o?UpdsjpNnWbCRvh#_@`>o}MXn*8vqf;wRSpLobRbYOv`g$?ujMK2s z4S0?20~ShUs{eG~2=$^jTis$R{`C&YdbFf8{C3oFPI{RluUwfcojsvbzT`RB#I0x2 z?4IigbYHbR8!oG3)~Iz3qw?g$>KP9aejI6brWjPgNQmzcVDB5UU>$V$?KWh(0^6}5LH2w}M;_w^cx9ZHZr*unV zwOMYCPs*A8uH+>kh91hn?gQlSK19G8Eg>NT*lh9XUN{)K!6}w|QPuoD3Cs;7^8me! z1GuBo73cF6%Du}>IMrQ{?)q>*(zflZ~81zN`HfHaq;2#6)DOkXUS{1MILY3Zf;6$wQXSb#+mR%gx=M`x8C?y0*6VeMa_$ zt{}^r-SamA6W!znOSj}|DxF6d%uv<2qWjU6eVNR2U)v4B440A1T{zhqfe@6;4M%iI z__L)n%JxT|S7mg`SvJuyHV^^1kGqcPOR+*$S%b4$nd)`=N}mdEC|T>&$H%M9KGRTC zTwseS`ZSdF%3hhq$%-+>HJa}mo*faSvS=*#YiUWgvbP_-bmDnpY^M9k5l@}olrv3j zX>lPTqGbEQ-0zOZ*#;x>OJ1)to^+r7L7hkKc9gv~8+f~@p6H}eR-?5uLD9261j&~0 zskt$RuM)d10_f%E?SMA?3`jKE-rR?DKKwRlPv%^Jna2)oz!gS|4fVx#M8Y~GWlsNP`Y@~mNB6NkWRT2^ULPv;K- zx|D{~EX@SY`X~gbXtR&0y>XzI0Wbs+v4kMtm^hiYXi`o&i*Xto8AU3ci;+Xr znL(3+_j{>ZL&oEiy3Z4oS1rQ# zc%2dLK)K|SsKd|NZJ_nVI0#I>%QfOI#q4sVnn;3wA*9~IKC;6;JqLuR2|n@0!FGPW z1}@f~H&^o+KoJ4jT&?4=a?x?=kLv97qnrKFB*C0+=P%eVq(jh^#6D;OP_R+~!V2u< zVL`qK525Ri;=`Rlz=)1P4;bu<04JC}Dis&?4=SWA28$5FJhj{X(I{A#N6jVOvQwDg%9KW5r@Z zzJZ%)F6C&Q<2lrR5P)B}G@L*LiGyda?aF!F^<>Zz5eagL^O@(Foa+!s>8OVByg39U z-Jf!P@^MnECU2Zzr1p@tLT*BoTsb6K*>P8@`0D0%AuyQz?Qp*z=Xy6a(<{$R@)osZ zxDXGMf{wb$aA~$p-m*ne@##Nf+ zX;szL!n?CYD{0ij8}WH@)Q>vQy1e#hp>$UT^=~huOx~#WN`g67p;zPU_-{|Bm*XjM z2_Zut0UlltHqKu_74T?x`a?O`=(ju=@VGZP2&(cq*6<+Nk2RF0$}L)aCiqh_q;t?mdT_}JU`dehwnL|pVS^CPk^lZVY!@m1F9F!wDhR)dwecBMP3(#cR9HVL z61^c^itij=ZKPWi&kmO9e^i|r%PbriHfSpp3fJbaX)GXMm1;Ft z@jWaVjCgjtUjO$D2mkQm)R;hk?+=i@e3)SMQYzsDsoqeI!_V~W z4iYqmo5TG(b2c~FFtWo*##sE&Tuw?0(O5KJI<)3(6g@ z4zovX;kbMP+bU;L!U=I~fcQJL0SeqJTl&JS;zxAbYr)CwHe!oG%w?$lx;jJ5=Qy|9 zLtuZ%m~YWff<^{a+~pA3lh)@iLQ*wMOjUB2_fKR6h9y52Rq()$sm z`6F9V7YaRx%_^^OQZA)_g)3p_-gz|dZr9A$lMrX5D>Fc=Q2DP+9ro&ev^@l1Xa+rXqS6o`OnI221d z)9vFkJTw$rrQQCi6&m^30ZMz*3++5(Xon6W$bD`lGxC604f^|4IhbxYPt4I0f=XQF zFYf7eN%4`*Vb+C}p(Cg1WJ+b$=&*0Ad4)b8FuDEd?P#f}{_SQ~Q73~?z`bTlKnK3* z5`|vmajU9;)qccAq_7x0K&S=$yJqx1coIUhO?(rsk~)iog*f!chrRAj2TYjYO^`Wp zz^8_+Y>3vusipg~WfiLxAn!&0vqs4M?kFzJ=Xx z_XZ)Vy$XIj{jb6Z8|nL$-}4qXlwNj)$Tut-$gimp=ly6_`gL%*s?|E$FL%e};G&=k zfQs#HkIv-Xy%D&1c310=^tn-Ou-Lxhg_9>4=nK4ax( z6?E4-25BgdmdogpM&CQ~pEE9aP^2%Z52UEkmta5N0_ki3iC2wrryPKzOOg*ms)HsN zx&W;F_5pP$MQC-tR7El^ju~Iz{ccu9W$>4@;5EQJ8>!F;O3)VoJc!^-gIcdSU}RJ- zS7$K#R?HuLlA`ULHiG?lT#`e}0Ap-KG$lb6(gV&H-VBOgAcZZm0rVe6(Mp!NuHZc$ zLmyUzVm+NDDGK=_B3%8ee%je$c{>Zm_(NHbUzDfz zYhHI)rK{~~4+MAHF-M=yezx+d98_l>FO+Dozz0SMr6r6EZ>6kN&)dGT58{K);JM45 z3vO4f+vT6<-hu17>48Qa0=zv%fNln^d80eW-(yO3F0(`X2Ttx_H-wz!kp_Mh;jC`I z_;$Qlozns2lfz?0K1>Zlb-IN4Ol*XBb?OvEitJswX7q}OO}{*oc|S{r4*|y` zBj9-SFq`TWAhZO3w%k4H^| zTC+tMU~Dx`uQV4V??wpe7@j4gT)~D zhNJD{<#gU;eSp3o!guhLP}+@z4jJFHk`YFJJ{&XObEVsg&!xZW18G4Sy!sG8x-#3lX_hyHOX5CVK_E3PyY(p+9B41KTSVaoCzjcTC+u4_>Ow z^XPsNxTFtXiZprsFVT&4 zUsy2kKuFIKNL3r|_t?H7$hze@c@Hd+ArM$Pd*+K(mA}Ljur_Fw9zXU+sdRARGDr;*_pjJUC>wDi(s!6ce~)*;DLI^zBxc9fT%`qPzD^{? zD>t~_?($>06OHQ)b{fMq9&oj5z%xGqH%U_Kbu{nAcL5*ZM@Nf`daTXN3yxFV05|do zU;#cYrK=x@1TnvU2}1=9IUQF*ed40Z+WWQu`PFnYoztr91D7q`6GPf&)p^aZ-E7x* z`EJ*^RJ$a3&dekHjDhecnQ^|$ByV$pTsCX%79x-PnV1m5W06;grCHdoungc%N_*=x z_Wr|i5Fku41E?SJ>UqZ8csx=VihM$VLHt*DZMPbfcOsXjEexrvBOv6L5q^furUqM@ zx6}`$U7w2xA6qA~c*_a?JgLtDMH($>zr3IK%ZOQhYZOgjz+DO>GPVGS;dd2+=KkMm ztJNm+tS^U8^skr`;^sVcM6q#!W7PeGruqb92nzN9BDLk0QWKp({-eh?ol6J%W7CG} z1nAp2oE5>LoO#2uQo_|Cj$n1vtxkmK!zW_AFajvqWcs+rO&>vfYG!^(0!W>yDGYP_ z-yFg8($43nTnBqwS9k{l0;W?W_ghn5IXc}{bEewr580|M?h)1nDJ9veDqYVzT8%Od zHYK;b0JHYo+-tQ8x$fUpSja_fpSa=4m~6uRDRuc6)9vVpueyD9@qzz)01Ht`ErXa*`C(jLJUzb zQt-W!M(ut1i!>U+AVZQUka+V3L|_x!aRZTd9)WPQbO;Jz;!G&zvk$Pdq3uVqy$l$d zrlyFs6IPcto@}WQ32z5SfX9QpDsFlT;86dE zHGSvYanGmV<*a&pI0wYh1Keo8`#HU0ioU&(Vtss&OVS%RUbVCF_d`JXKz>CNqGOrc zi#>n9cjWFn92nOEN_-%uh+;*|=fmX|bENu;?~7zccj~J9?N|?we=WmtN;j6x8;&k8 zm_O!`58fgaV@o@bd)xMOQ=ujqF7&we4q8T_g07xrCAM8;KSzTL0^@|Bx~J|$;q9b_ z+aG`yG0|4%yzO1CnArSta5tE6LDUxx<#fJ=V0FKtJxtwi$^tJ(e|{ ztv+D3I-kh*62+VfOro-uKM!drWJ?>AM9n5Q0SH!%+}wu1{Kx=4yFiH~ugz zd&Q;Fc~$-x3QmL@W7m)Gz|MmvEiFyNoMw!D^m7C|Z+&g%nyR7Cb#Ku!{1tb#3LGBa zktD}LfaF7avbf>sL?evBW}{bkWco+@Qh@NMFR8%!8J@i6-*@|X!8doiX0o1gU}hW< z%t^Fu`Sr_Toa4l0On}|L(0En^PZ|WsgV4xihG;i|LU&*B!v^HLZ8vQDkj;tvqh8Va zQSy)<%fKw-I4RG6tz4wBBJ9qo#?x=Y>Lqe%`K%Z z_f}o)6%PfrVX#9fpP{H4j$TCoKh`JDe5Je2NZ^oe0-#27goxbW(( zfb~P%=iSj6+7&%G{S|5fsNW;fg9V$Wcaf0?isbsq&LAiRp;}DQhTsj_+^toIgEW&e zL4xjS&(=~!y&tns{*AB&d&@Lxd&Y2y` z*c7u^fe*?Lg4iR+GXfZ<;d<|Y0OYGsLz&f>4vgR30T^J(}g5p!e7ea9X}3wZPUKRJ0m z!iPS*;EZ}3YU>P4lHXO0*GbSYLGknZxxm~DMvEhW;ep+=K<>R7!l1zigJo=ZJdV=hU}&c!%wBW&MY-@!A5Y-=2aoGg zAw~GYqrt>3vEOTzr#hqc;;K&{$jWaar^ET_T?0mb3E#HyltyYNDw zQFk@FOYxcfLHy@}{Av%3jM}$uRn$)((2Yw`Ij6(5%*ktVk-Nn?ff%zJ4iH+b(w>j` zyeatZT$nP?t0}&;GAsT)x>~ibEm&%BE~u zMucJdmN1PlVs9G?m%--fp;cRue3syjR-x~}wl@rMJ&W(s2 z3S67&&QlhB6w7|kIIMTqgT!?87V&bUyX-ZwagWt9NwgwLpB4;Aqb)wZ8|>Jc`5a+> zllK?PzaE<1mG5ZO>hf&8LGLLH^&-;Z^A@HEYT(szKV7wq;e#^$H`KiVfJM6n(Bg=r zcmjmCKv1U8Ll=sBTm9z=Mz0@)%9oiEtQQ&b%KLmNlTo;{mk14GB~m2cFZVvftQ#lV zkhy8aNT%UfzICJC4lpFlvu!rosDH-x+>ck=f_p0p2l489f-0@mwzu}aK8t4YxZN1; z>l##-L<1- zawd{&9*ra@fU|P%Y&a=x)r1ZnWs#3Ijc!p!XJU9}Z)T*fJJds`O0{ozjH?d*jITy? ze-;~pBj#JBC9p$rZ&K@*9*~K3C22~V(o~MYm7a1#C5$gyrzXA&WZhqVg+|^aR|r8HTcMT-a$Jd z;(mfU0)sXg6mZc5i#Jvq_2L&E$KGz&8#soG6WTM^1I2Z8<6`gb60?@bIDX4ok_d&U zIo7C@7ea|;%Zc5UF*P8EK{UMDM!%Ltb<20eiN2j(PyWUkjswj5q^;B znT+z+6ck2f{X&vZa$AnX4m6|`F{3-kPTJ38oT5fHxIe`bb6(A*b|OIyWqCiQLyr#NyvsS57T)7M^e& zxe(-ofY-}cL`Wu5c&4zqqcJ&Mt=#)r?zgN?)ohPjw?-Mg<8b%S3L`lTb>tqv?~Bw?wzE^^I`d7pXQ5rmSUlin?wuh~i+$#6^?CwlXr$c`j%Eyr41P&ROijs4I{X^}GSbZcd zl*BELTFd+U-xloup9PQ|i3?koh(s*#YaVl>)iI*==bi_ z0onxVvEj{&^>%T|n-?g#%U#)Aeoes!nN(~$Ul^$ZqnWRNy@wy6XqtAbd94ZfMH7YEaoGe=UHlYzc&{Lb>5G&7>fGwoxCO< z2!2aI7(9`q0#dyX3u;TN1qvT6O1C9J@LNE0_U9VC&h-rin-H%>u;}64I<2A}$>g8G zyBgJx3T3KCavGdCIO!5^NuH;00M6AY3u-iajV0iqHF$$^tya3E4=(QrG^AGpBvGY< zK2zh|$P)3|`y0wjCG04N8%rPoXY^b#CE!lL&V}Yi0M3z4EeY(VQ$1=p9Rc6Me?p&t z5?a!@K@WL}|KS%-CFGLMeG%;3RG~@$;7<~K31J1(UGA(PtE)rlGoI&;#>VDZFa3+Z z9R*;i=EvU@1V0ptTrpykL4Q>|-9B=#D?sf6> zY`1$L(bl};&69fm99$8T(c~0-=ha-j<}umno}f9A#-Vs)e<~9}S2o&3)@uDa7A{PJ z0iXD-)RLl&!z&o*-$@5tZFyT#BQtqv2E3kuJFuF}kOgN#EJi6~V{*$tMTzxL=XRu+#gh}YG*-JUWg4G`GHdH(Siexx?_H`vq4!qb zPzWL4ZhwE3aEkuIVcy~-HU_C7^;^|{r;m1zO5!wx6*Oa-^wWsdjyTUr?4Vw_2NLvk zHQ>`)tOHz++%==CC{=DiM)`WbMG!0<#A~aPK{}x4<&0LGYMqwEm{APB$OwxmoYQxJturm6A=ZFN=g_iq^B*~A&H_`EqQas|bn$0w~s?Bnp zc#_{*#`fmo#|TJSbGCb!K4m|M7H|VNtf>)`nq#0hACG z>7h$XT9EFR5NVMby1PrdLGqPu5v7stmIei+JEV~q@VjS!``CZ@%>z$d_qx_P7pHh> z{-iBfN=6MxoWt$X{jcdN@n$ihKXMytLI z00gBJEAR*!X$biOA%Y~eh9g~6d4U+V^L~2%@0jtU5n{PawXz6t&>c^m zLcR>%6VmPlL4FrrtBo$Jxi9}^-Yzz|q!QCNIlY^d4nHjky9d@XCP5z*+H2^u6m^R0 zy04%~0b@}Buj>JZv~TEVcdy?$ZVGOM&QM8NM_Pxe;@AcpqAxyxRRzEZEd2>fYrN#ixdF@#o%Y@5yJ60}p~0s61S#s;9WH9Y2~xBLO_+VZV)Abk$;%^A?4pkOJ7 z$SAfi%v?2-_aKk+Mw`|MguTtN*5F#7r~mk#PsnY8(6?4-yl(&y@e33$ktj_Z_-1#A zd3bTt44flrQSyj}moG{Yb`$aPRB`;CdEbC&*7WJ?mrH=KK&l)h!aV%O?MH+d2 zYu+obn6Ar8}p;5m!b9w01-Dm58kKPZ?Q~dtmnqL5eW2dduIi9}@Y+?K$Z?jwB(e@xp z-y;&dT*s5$z~gt!hT}xbnqGn4Ab9}mPkl;I{lQ&zd66bX`bPqtB^YyAA=@Z5L$3&> zW*lFfF(e50AyMw%gGCYp#~?E7Ol;ni>0-Z~yzmt23E(AW1e}+zRewfAsbOyish0~T z?yu3VUBff)D!#tZ)b%2^r}040E96r1+ERY zwl;dT>lLd6E{|s3jNP1$hvG7+3#R}c_XUnTl5=BOc z!hv-qM3Q`OH%~zto^f@OXHJh>g3>+~&%u_U^lnSc5)gEZe^<=jlP-(J%I~pz(ZJ0i ze<)f8yp(1S9+JvaPk89k;hbICz$eXFZ(CD-GN><&dQ?YN7D3) z3{Qmk9#`cgz67yZ+I(F+lZH%IiQVer%3yh{R0E&VCAhds*cxiRQtOtE;4_)No5Z$Y z0OmK9m)OW_6p>oFS$gl8)6*cu)J4Cy@PGslc|kIAy0S2|*XMf__E*rg5{l0Dm|rk|p< zg;Jbdhag{@wK^=fRXcAg3TWcAxlPweO<@yJ02|;U$o*qF9DcGu*Oe-eL)6XUudqdY znBYJV0a(ula8$n@ruM(eOJGE2ry=6MiT{>cM8C71^AA}vsi+a$%dt@$GBBUaJ-?9Q zb_C14u94h9hMqJ7#xnRM=hu9m?V=*F5J8lgY0 zAKwI62&uE*tfq>ixcF^>i(=fdC7R^!=$2S(IQlL?2eld5HPACqxDuaEcI%TDzEA$^%NPU@t$Uoytc>hf9f z=JQ;Lt}2z7%Iuw+x}u`VzAV>WdVN_Cu%5`r9tlxd==KzaIrT7hKBUa~etXnz{5$ug zneO*6*r#rsPpRp+^on$kW{L=O!laWL{2)@kI960#*uegAYdt2aJd>VFQ@Rw&k6`h1 zB*l4%4)KuxW%{JHTwc(uV?O7aA^?^!8%e@Ef<(r35%~uo>o3@&m+6a=JQKw)%?>oL zue*f8OH8K>>)!mEI&^E=zHBxJOWaSHSHIuXSUj{^xOM%dX%@a*Uo5dlJN~`X>vZUl zx`YGGV(Yb32X~Gb)keC{#5hr^QlcquAUK!N)dqGx5{s*`iT$~yAi0|be`4Gdf0jN? z|7jfGKC9%2@I_!dlhU0y!55vWmqtV@3^6e8Hje?_#-4Z|Y%=MJGEZRl#O&cbq__0D z``k$N%3X``b57}V^1P(>hvfW2U(`I5;uq!>j3#1d|DX`uyH>YTjTf`04g3rvHuopg(l z><51|)HWb$!@s%N^}ldl%*1gXDl1`@tZ2Y&F8q2scGo8#)=Jt*Wj$X4gVa?}jJ->w zo#LB{p@GC@_?7)wWqC&T!G)(J?h!=ri1@!)ud%G3A%U*KR0ru$uXOUm99ahLG^qCK zUQqOhSDwa`vTv3w1j-m9i@YsFGjM8Ec_o@0h;O0?WUWL(dG`D zZYFEJ) zMNB_n7_2HeOShYl3taX`@q8jlazvOSsrh^=d*XlXO743D+!4N|+{Y^?4v3i1&Q**e zt{Ux)dHQ0UKFzI||}G5hn7jF(WJY`H+SX{{%N`(i#>tl*HY zF8XP$|Jm8oy_pCOfj^7P!_{dONlAqjI6AWUlyuwKbF!>;!mM)iE$`AD``^dKzk;L= z=_F1v4EOlMEubu51uh!E5|o}%CgPR=gddbTcOH1BARdRzR9U3 zovON8-pId$#>{dCwYNYizS9KYTov{1CuH$jh`qZa|fOx1OL_B(yzh-l=KfEq}pTh>EAMg7)2pq)KeCv_u5)j^B3EXoyUDr zoE3&gg6rlD_6|ns$;td1!Q>*IUst4xG0Q~FdMtjSTgVEx5WGcxX&K4F<;eiDk4nMMms^9nG zKDk!V3n8MDeeCUnjSgD||BTQbar?c1`|FYyPu2+P%?2Osg7eks{zTY32`H>X4#enk z{rQq3i4pu5wXTTzyf7HVc^W>J^K`_IF|S^h?oz1@Z|}Y4=7#}&^%`L_I{g<|xa}%3%+RSs%JmQTDAJ6?r z6TouJ*FXB0k}hDLI^4TS@XpwCHLTj>$Ov`lT`>E5w9J|AFkf$1vGhsUbtm^S`RkKY zxgM?{^p-oRdwAl3%~DH~zL*7rKasc;fTGcnzH}{JfYab7NU2GtKDl$;4(rI8{WaQfTy&2CW4Cc==F~5(*7dxwxF(%Oy}fwiruPBz@vCp98){4jbvM>0zwB>n)*hHp zi21iTQ}i$6ojuCLN|MO|m6%b=NmF<#v=09eM0M^1^YN&U((!NNhc|!?^MrogJZ087 z;PQ3BlP&WOVw|rH;N2k+_zo{v=%w3U;pyc!d$oqO^9+{XeL03#l~sCm<>MEGN|iZO zra$ftGSc{rf0xjvu34WSpH!PVzh+_Vw|Tekl4X8MGoEWvvyqjO@!EiH<=Hh|6We<~ z$AXEot&(t3%b#3nUfo3}-Tm>*l2A)$Ye>N%$~a2vk4Pwe5~H>XJhWQEXU0f6am5Ga z{z$ND!3?>OxyL2TAmEljW2e5)yt3G9@k^wND4Ddo$!>w!F4U`3m7D9a=saA0c74FHy%;A!qTe?o8{Nl)h$n%1T7FLW7PQDzWnoIu^LEDnp1!T-lQdz^trFU z%8_x7PZ06jK=f4AJ8uqIS6?C)#p9r{B8J#6Q*;e42&)eKdTniq8`QC;8w3xjyxQewAn0b1 zJK;F~!dGri1=OHS{KW|jD5W#*jcYR07NiJqkgWYVu&Ed4ayTz-#5JE8roX)Z}6Q;0}!i%Z5F}gf&e#fKI zWvwiTi2cau#8AufAb(jDBV*q+kITbr9KVw}Ei zmzH=}g4q!*@rim#x>qTIFc>MlGX8bA96}QuxwE5H7!;u%x^wBt6IajFF& zu=`-tg~2i)&h^itt~txsLwDCFN<%2k*IAf{;&9IOsXkOMdx^gugUeD)0UFg9q1%?s zQzBgJnI0rHGcNJKi!hILJa{$&`|&P3hMo%I>j8E`ZMgI+-yN$ZCD-zZnu*r4qFFxe zc;)ZYyu)9HAXVdB*7sI-TMU@!Jsadm3NEtLZKEh6iIc0`l1M%|1)W=a77gim1B9EN zhs?p*=A1D-cDV!Wnu`2eP)1yc?8>$NQnI_scc@>sPzRh49};JM{|rXpKFJ@dh}^*l zwq)?P?e-Wa6ibj-4suO+xd9vyI)!xE`*hqy5qG6d1v@hpX^Q>OlkSbZ$UqtA!bUrU zO<>7c!q%WF5)nSjNfk+Ln$_r@L?P%be$6RY!MmDpBsY*3RwAFNfZ45+@U;u%qkhlg z2>bIK_sDcOou)Oarzgshp({23cAeMIqS`}ax(SKEG{$^Sg|=7%4*&Ee-$UA0w0*(u zW6AGkLy^BW8>^OSZ?_tCmjgW8l^1xWFkko~Px@bz&o#C)4t+e4DQxsq&8DggN+%AB z5pSI$QvjB-Fy9uTaX29>32aDbj=j`lNqJ=bjA{{yi%$KNduMsP-=cnw+;~2k&DqEwer@YI^ilR^?C?7{$34`AKknTVHslk_VYgh-Xv?!}v7J zBQ>giGB%4iMtOzuv7mI4-}~R;^tlBgj1XOJa5;fSDn;lB0Lear!>j~@&sLwR9zm_Qp8xHkfOfZb zmF9i4hN_ne=jo1!?O`)>>NMTI@n~Di0PmqgZtyE6uqRD-ZBowvACm`dM&v2mfJAa+=%Eukv&1DxXj+Vn~xW}GJ zlqB(h+dfN!AuJHT)_3C|1nD&tPf~$%6?I^)j41VVI{RozXxuJ6b;HfsCt`AU;xh)s z${)q)gFW1uX5Bk<8eLEDZ0Xww5pOG+w3tn4YuESn6)GnLRqyp`5qX569Vg;l1UM3S z;;C`+IP-KP9kA_Liz)`CkFX0RBH#F9zB48il9y*pMAM3xTcr&sKcbYgcNdnIK5}TE z%U~f6>D>Rk`xTB>1;U>G7dmQicGcQPyla}B;2mK92r*arh05FidFm`DI<0S|X}v#H znvfAb^{dZ+0v3hev*2xWCS8X#C}tov-wQo(u_uSvk$cqJaaUjk?a;0WUe{zE!}UM0 z3LPiRZRG+tqOjy=!7BIX4WDX^TD^w|UUw_nnXrTVVr*@gv;8?Z&nE+urF2Ggs}-}W zu>~m^B*FG;*k{d0;}IUv(s=2=@3d&*|^gx76i;B4gweFqR% zs%**6yzY>BBGwm(nNSik-#k4wN0JvT{J=hWjkJv=KSGJU?A`W zGL$HS82_YzV5A@M57h?#gfenA=mApCHx|Psi^iXKkGd+O&G$d8>#5#3cVBuYhy_qG zG+TUhFAC;X_)u`|$6My|k;Z=lx|lu82H~a)Fp}Fi#*bJ+5h*pI4E!!;PC?A0+!ukL z)8|UU2!YNaI+4*>>e$CShl6cBy{kz|9IvN78?}B<;V^v3;dlFaIi!8k?mN4Xuz=ls zp$;BZ#Mm9?CCuUND8$V=4-CH!l!{LBb?-F-HLnPvX`qZHO9u2 zIh+U`M-G$*`B-hADX2iXR*566V=wWsa7MBO`)nRQBGb8{B@_7-=E{C`u^Nn~5U6fN zvF7#X%JP)*dP*_BiGF-YCqdDuk0T?k75=G&eDY^h2}#;NS05Ec63$B2r{;~2!8H|N z59c`iQo-3AZ5!W^$1vkLITbbJF&3NbT*O8{(=uZAh#0*;`xjSElH;trHEm$VNBV{I zpWGN&Y!vbFLCNZWg(wdG8nJo6Y=H zPp$6G4b((;&Acjy*)(|B4b2}2uE+44e`(ZPvvzXJ!DFa8pKm17seZ6kq<@={WIuRn z&e$oEw6x8M(^e3g0hv)pkxOy{?wiU7DGoZwc@gT&FxbC##}NNuN;&!kDT~fh|GOL3 z;Iu$|-oQb5Bp0@($3j}}g?>s_ww~Clqs6*WGb%iTYrXZX3dU={_!g9-2b6`*e{ZXv>#L{Sh^pCk>p35m zV$m{|Twr99_~z&G<$Ln+>P?2@*U=y?OX)9#m;#k>7P&`D$0NV-=|FKIZbMD+_@#{=dI z&0k>?oCCdUC|k(I4733akznOWn1O!W7rsWHZf*w?8;xm z$NlG56BMMpXmicyfpn=6Hwe2luo4+?zWmx@>?i@>j&LWh_1Q?H7Y`PLh`?*P6~B?5 zo?qibR2=ckHU<7DO%4?gk6_d=EMIW`VmK22#9Oxbmi4=G2T~NIgIR$?AbP>7%IKRc z>yt8ebL-+kZiTp(=x-3=O8HC?_un=ej>n=f}4FwMG9#68Yqp zL9yR34aeIp7spcg3Jaok|JC4-LmL>BB!7GI?d|qFlN%mRAB|LkD6eH?@gaur zR@V_HVHa6MQ<`Xv+Mo(fCAEu;Y!#^wGGzZBibcNS(&C>kYF_-AqFx_po+mGRLZ9hm z$^KWUam|Xu{f1{?TB76iX`Gi;HYXC!u2-wx<|jC@ zUL#M>Nj4%qZ6Mi5QyGNyJNNM7uOSG1riXgn`5I=q@QB zZ7S&u)H=LTYBK%M5_%JMF0w8CI!OJNtDh8_4c_vnav2=36_5~0-NjeQHH3R32ueQ% z?L6k*aOoz^4DY+S*w(OSOLykjv74e98AVys#=rSo8LEdw9wp8u^ z)LY2sE)Y|jH?wJe>%UbL*0VO9+$Vq!5O8#1O8K~7$b)XKxyOKlar>XOdoKkzAC5RQ zn^|}GIV{fOU}{E{I6Gj5oF1F(f2@4r+wq{xv9vh6)gqY_TK=DgrrwO$oDOl#7|Q7i zQs)RhxMKn@ulE3;o2MRqa^Wt(f!Xgj}=h$W*}$?pYIeO zQT=XQ6GILCA@M? zw$%g{eeGx3dhPV_#}}@L)pl$13eGD7=yh2U4!)+u635L{i$|O+?ZR|KAIJqvTgunj z(QgO)Msr8SH6W-(=X^S^!vdwakM4<7l|u+e^8vRCt*ld%OH z!;CUyX~Yri+<&pk*=xqQjb=|4dZ(#MbFa4)dV^uJU#ZHeyjPxHoT^~I&_*wx>tfi9;3_BC+D@?Xf~G_6n08OXtvf9dD>4M;CaW<j|sq>4?ZxSi|`QJdSADz|UZz`+yqx{qh2e@K)#DJA2DIRZi8oKzSyUp{0-%iHu z8$b5@Mf?U4I`brUr+tc#suXfsM^_t;?o+y>*_s}83SM3vyO)P9`77M+7fOHYIex8* z$Q@mglI-|q%(=A$a&9>DFR6Y^U-xPSzJYcUzyd^h`8NdVitwNb3|&%Ftmhc3AyCAl z!7L_G;}gVbP26wa%UHA-8r14?bK&}8&e&&$1F%zOMqhQzvvHCexP1Hm6s*Y^0O~;- z9Y5^*<|E4!Z!qRZ5F!3Aie1w|~-s0Pd3)x4s|@{sNRkSb_L|5KBzU8^kGL z{vtr8Z2-@PMkrD2r8_EOqgB9G*!FGe@PjtNWM?|YGS7sw9l&&>#LvjU#VKnZu3&XzI1SwhBCFrSV2s4O7-`}*m(~xiRlrt+2mY@wdtTUFBJQYX?EA9T zThZlR(lXsIA2M0nMt~PXLQ*wr*>*cCbNCDIKTb3pp-wpV=-EMX{|CibO`c$pNnQb% zGy%#UGD~yz?py|m7$yj%2y|cT7lnOFz4{g#-a_LKPxS4QiWk!`ekWRstH;bcv?Se* z@cbUvLP>n!t}#Y9-pLnXmCS4;%0zy${`ZM(0c*}^e1A@S(! z2uY)U6Kb_oTx?=BA5xqaVgB}U!ghHyn;X~1K@q_ACWm;bgabX!qtinIN#QjI#;gMI z-C^uv9*yi-KVJA$Fk2VEf0X&E(RkBWFgj4{^_k(lgtWi&MRt(o7;121(h9R$Fi~0r zjV$P7k&;^u{RnB+BL0G6(oO4}H7@ll{fxhpm2YZ^X{53&#Fk@e2yks@nk?bIBZqd$ zb|kca1?}#FVdAac7aQOfM-g{H3YDE6T4Eg|Fp8x^N@tMtq}!8j8)Yo56A z3bXRvf(p5wC(Ms|NE~bC506XGZH#wCeUavpA@*aHh!taJH?%)+_fYRo@52guOOxQZ zLD2pcw0p3=@ys}rMMp>Og8oVlbEDqJ9~2_b#X-ieRXK_OpI$*<2q`Op(a11LQIn28 zmn?LUV0#+-F6mw0o|!&GB=|q-<$kcDgOFkAwac*RjnWYYx>L{7@d%7@Afk@gUjK>Y zSijGt*YDd>a&lUtq%-=q>pffKtjDna_gU3)JZYLR1V`>3AS2%}GsAg!G-n|0IrArc z#*iJwPHFSl9tXAcEXZ%Rsq%AS7%$#6J*33(k8E&s`=^1 zk3-0;z4cx<Sz6X)gFwhfD9$BO7C2o zWbEjNM#;dVl$#PlQD-@4_Jp6msEBMSdCTM)Mc>|>nMifZx0=)%*OnYv&y<&qbz+IV z?N5N^OmKv~=x5ijhXn+|^x8?WEifl}ixv(<8})w(Zn_H9X)%OhG$}8G;SQ1(E{(;+ zDWFzg`I9a-OCTY{s+rh}RkVMpz>ZVm%(4fbz>La6`+(f@CaUHWdI+GFDJTJN^%%G* zQ69Jgsuit2@TMbx=FDXkQQxiuGi5a>VZZ3ZlaN0C+w~Vuh58hfq73HCFlvWF=z8zz zSOm-7w1K|nC!VWp)g)cveLr-_SGq$NYb?hg5a=#lxN)`3ZMsisTjD#@su`7lB{QF1 zN`IWj22)MDTV|z6%kpP=hpJBpmlD~fL^GM6;7_Z5WN8{L(2AUNp2B48ntS-T=Fwl& zXV~%HAJvS~{_n18XijzrA4VAf6E#@xkJlkE;N`%;#!o>(jS@xXb4QzikflvNua?dw zVf7w$5>xg^-2bc!GmRM7aOjI6E$0-~6qub8^=r{(dfT%d24C@arT86|o`ZL;hF%8vfa}3MV23oG=}Y5Or%eD8`oizVl@wUU zyd5h({QFBy;G*n-JP|Lz#mE763EH+x-CM34a5cVCM_?#P_3uryO54Xt>UWcf6E}J= zVBU|1JNK+79*t-oWN7ritE@v*TNW`{tz`E}n6>N=i$CYE`WQ^K>!IqD+|*|F2dk0m zCGBQM+0IFyj$V1Pz25S^?Il1d`^4sr7TH)q5Y$jDEw`3+0d6+6&40mHtzbe{oYHaR zpTkx}&$H@0sshBaD0p=a_JfVYa9&1}OFp}KEzB6gXTh_5S%k=-O2|dV*>Y&TEJjkt+Y>tUcTX!@2TC$$xq+d!VHo)!g-kkEQaV_P;V_vqE2T}z>o!ZOJ5 zEfnlQ#;=_6%fHWe-yRxsA@4*YtNcFAXW2ytq0M!mtg|EagyOJI+NB=@XUA9(4>bpS zDz@XurN1gx|j7GFxBGv0CEx$xW2(j#bni&(gG8|`V?^QC3AVaSz*{*|Kjk4X?ZaG>i$|0zmkk$HGt4? zXo_h1QB-a$0dEQQT}hf+8h1aVeA|9b;yBTOppeujp`*cI{Kme!R%H@i)p3Hx_Xciq z9)rSGhKpk>W;$j^Oz{M%FPKuJZ@*=tqs*==rN8DD6hIn4ypRx{u!Cv^sQB_-QLn+i z@==iHOc)wHa{5Y1W(|8OFU5Xpc?uZ%Luma0+}WfVXpbFSA8lObhRPRbFkd;wik(P1 zXFWUVyvtjr*6{W@4EE~Z4;SY286s@=ymKCDgvfSqk5YTx06f`IpqeciBMBrOi@Tvu zQHmP{N?c<&j-W`qf`T`X(ae?#M?L|$s{-&|BoL@Pa0^d}Y z=P-EuH&c?k2^L3-8ir2}A<?~vbuLo-?{Q6xA-!Dix zOXK&B7AihwW4WWg(=LDWnMlC&1qPsoL9V{##!FtJW!Ychu`ry zURbJJe!V!h&_5p6S=_z9H^t%bB*DPP|5VnvA9KKh@U;~D_Y;}R_tQTtR8yv53HD*N zuhR9MH2#6@j#iwY?^wP>TZDB{Z4SQ&3OS{?FW|PP_2eqyAaQeLj3Q)k(6SXSWZxN# ziFu{__xh%#(z@Pup?wr60-R7N|Iz&O|9D<1d^>-?hlqHkaC#l5AyMzJK+`<8t<+jv zx1pZs$Nk^w?hN@b-CTs60mn#!WDr-yvKMm#9bl(u7f(tyX%9RD9=soitfS*pW3>!4Y_N84O}WYG73b8lhH3!Aj3S`3NwE$ zc)4MeP{P=8&?2FAT?&fNS*AGkBnGH6B_e3_#1!3U%Afoe5LH{}U&xj~bMC`B$>B(qu><1*d_P`{~qOZTLxIHe+$qklu1(#)sX zagMs>M#f67LA&vH`uanNQzY1)6R<-?SrEs*iDJlTd0Z81e5xOo*-jr&M5m(C4lx^4 z>Rx)1+FuW0gOF=SJV_okX5*-eVSX4Du~=`nP`)vq%&4NlfmX;Gl=6$uqZ2>UCh?rd zz`;GpO!8Byp^~K8mpbW3UpqZsP@M5`+FUJpclA?0)zx+%xV&4q)UP1CV;npc= z5W2z04sa4o+3x_CpjEvCvJb+a;nV{}(0=_oTqE&g^d1Vk_WLzb6MyWbt;ai!*M}#~ zxNjy6^xC=Q`mue|t*EgeyE2oTqkpQtTm6IkOMfk?)~eK#dAayg+Py?5&AQaPX#Vsb zBcxDku*aK5d2_#Gt*l9W7B`MguSbKB~9C>(T5=LZ_LO%&@PmAA^>1 zTU^yun? z#${s-dmY)I7%kgT0ZPBEA9nrecLfL`4`{yRz30z&dQ!>QPEsM^7XRaG0RaJ=PO8}! z2WjfHw3zN|WN`fs! z3J#ttve@vPsN+>2FZ)$F(aBHnjtvaqYb@q+yTNq~G$1lj?a%=DeB7IQ|E8ZtzO7q0;&;?%N@^F!@0?HAwC)zyJO>U3&1x+w3bZjGhOW z(-_VgvLG(q#;zy_00W^HjRGEUg^qA12nR?KM)21p2_&o(yp7Q8iBIyln*2b!%T&@_ z>%T4~G)=M21yQNsO~hVU+@57yX3MmuVma$}j zWNzX|M;H7(|6s#>JJ+s%gesQI42$QU0%?3iZDi4JIY}(p6WM+08-aK%bD1mDfW^{S zZM|uo!RwfjBK&4_|KO|_=^;3gx=Z(i5MDVPMqR%hE4NJrY0@c}o|Vx(CD@_R=bRqS`cu*q&#^9{{&KpFW#dGL*YaEQX#F zQfQB|%p-x_<4qC9L=+M<^(KQL{8MEzI|VS@t$nHIWVERDmu3oQOZVyaissd8cWe(D zpa{6yG0A9gifT$sD@Q|Pno^LK(9++Qz1_wNU%+iI>dbkV{C>Y&sZP^+s79cbO=e21 z(XEk>pA9PrPKXlAY=3^0DEe{>m}-wB*FOn^xPkz+&7a2=jQEmc~C~x^1v50{i#tC7-yfB9S3!I z3t^2uDCUck*biDsQIlp`2>5sBp?!1#^6#3rz{DkUz}{(e2%5itNb;-%BJvD-&K=$fJWAQxHsRdY-WW`M3v4ORIjcPG z0yKCl5uNfd^|i1MBIUBUbmECYRy@T+yKX9NKf89)+4JD)U>xfe8!&!Q1(%WrdWm}G zV@UzW74cpv`{qOb3tALw;YqIiOYTYgyT9%Kw53mm*s4-cI8W5MJvBDi@^LTs*G2VB zT>rH~Fz&Ue;P-p&Az$dCk%3Y8eLKC!2U~P1D8U=$rFzgd{1)y((fyKuGp<()@7f1Q zX(<7C+N5alycAy@s1CG31Cf9rBF%uoh|YQq9ZbaHHUKl9qM#q}N|ibrr3a$wpq~sz zTE*X$8d^EfUlRtdprDDZz~HlTvu-j-5W~y-^1Hwr9*?9elRs;JiOSPq%j${IOHO`z zzZvaRg%=J(7v-8tNS)-+>|PFq0t#945tj{C5Eo%!J1Q-B3Rp%J@4B(6JjFlYQ6qPCef%fY%egso2JvF4zcJ*ex^17M}r{R5pHjyc^vT<~Qe7hjm$=5SxKu9E!3qtqh#-9}% zDH7cu(CA~Z)UUicCR&VlG?AJJ^sM3ET?b*~a{uAPV|3RT*jN! zQWvph`7J|!u!RsMwB2f0bdJ7>*;2Rsip@JRT-9NF<>M6EYSw*J_`_D!K(}w<<2%a8nlSEC*N!wDk`ck~w0QSB%Y=2gvl8%FLRRno* zp`Y3Oe4Z=)3^TH0zQwKjg=K2?>yz_fx~934M}F(E0#9v~HVIZvfRU70CtjRJDjO)~LqJLniz%#-1wjbi>Jw)E$E{({|^?y1uO%eIa4)fYghG%sjLICfS{qZ zlkdNn&S(02fEuGCC&MSNO5?+8YDA1`M93Xb$%zYUvZlzO(!HebQV&4Y3uvfeZV+&! z31`ccgc>~_71!#|_ru8_PwrNWmu`k7?@ttjYq+3%gmn@&{ZbznP0@lr#4{wmNcT)c z`FSrS3h}mtC|HPK)G?%Tidy;E#45Cz-Rhxe#I+x;9!tKPko=%`E}C+dWs2h1P=!*r zKZHa$>RbV;yLn|rPZsg(h9!$ZuL*f!8Kh_OgE@~0#9fP@{z;SHpRMa^)8$B#x3Ysu zD((JvYc3tHDP~Z1N|0aGc|3+tO|^y{>rZvvEq?#fP+-t_P(2(f7zSRStUA1c1f07) zWbgRfQ01MUL+(5s{PxH{u~pT9zl+5 zk16DUq&Te;upfgNJykZr?Th6t0gpk7ql>uac1kYhHYdd|gV|KQj;ot63=^&R(KKJu z2K!)xsexAmA-Mz*@&0*nd%0^XW~lToE@4baUOEjuH{{K-wP&c?e`(-gR=wtqML;9k z#p*~HjQ`92)hGVOVi`$_*h}-kCB}Zy+Cb$5aqtdW>gAqHuF|%*{{rbrzJB_Ul0c0q zX?0CK@A+lt_##w{=uPfmOPBSory%((hnSBGAx>EuEM3|pRz>*I}j|Ksp zQD}M%X}$!U843?!`g=u8c^?0I(-{E7ff%8 z_-uj_Y8TscqQ)=3>L&TteH)0+Bpvt4N*qpntBUcliM(2LlB4oX3x!J405z~gaeN7_T8PNFm`gy1P9;`pC*;ubEfrGyd04@jf#1~ABjQqi2DWm=6}C$AZ}nTWdXCC^Vt z={vd=TsZw!*`oDj1gm?CF7&~SvMT=U%=Ad;R#m9RS_#Z-no*Zy`g%AGeK;+_)Ix1* zC(MXgsI_9OH;xhGcpURQ4lvp3Vqb@`4cB$h}5a68R`JVGKd_*$n)|BR-VvUmSTQ zdlYi5J*)(~NPBeYM7TdR?`OsA&;BO^-vPQLSmS-ISN-~wMl|CgGRVbG)A%qq);}ugT9u(H0kcYMO;TBUXe5R_#P zU0o&Z69^_2N9Gzml166lzc(8i+=|M5u?>;<>G3z8YV|fnUiU*Or(jiR}z6T}fr8~GLfEG0d zeceB8W*#b(XXM(XJ^Xi)Xah7XB$zvS0G1scPWH2ZTQXUMzTa-T>2|amu;i4Y(8( zv~*-+KP4(2Vq!+08HSqEN1xqegvnNn60XZs{Zr@spz0Ye(~NvDqK34}F1T)<%X1e4 zov3Q^s4G>1mC3*9I#KdI7;4;WWq^l7^oppF&Lc2~3E>vb;I4Evg!gJ4Wa@57v+bkD z_O8AF{_)clc_4rN?leO5t|gB6IBO!?>@>Ex!iVqODP0(IIDrnUuLW0mW)@P!^Fp9a zL{E$xfJ8_=xyI#}MDy{C;}`53w=Yj3W78Rhl#o}WvRMD7 zB7g70ZUIg-Ke^4^X9s)pI^gCt{!Jfk(t&2GdSY)+Y~Crk>4(^#&L#_zvs+OZgJX!J ziBifb>mn3UFXUmFXyM7MH^loiH|(yH`P(D0Y($KGFwDBA>!XtrMBMW$fDKgjK9Yc5 zLhsE##iatVxlAqgM49|wPs!%*XSR}kDmb)#dhEsFFBH^623ekbl*-`6|C&@OuJvx* zJ>MGk5Ml|_u)1BL2n|?|*3DikD(~pEy>}fKi*mg7$Q@Aey-hP>oOo9}OfBjip~Iq- z#3~8>l7VH_!+6i})sZyO4w7t-=bd&zm^za(3O1ut!l8@iJPW_l%9S)K|9#f!PddNo zOUx{}tL<3G{72=L9}gwmm$q!0G6a?{$1?njVO`6Ml7Z45he^q*FFrXZ=bjQqWpNS} zL6uAymKhTa&TbxjXe^*30sU3{3o?X=4|;Qmuz(cOyC$#cNx$A8gzL8}5N zLXlJ)!A}8qY%dgppO=#jj+FG##@5E@c)vKd%({vftTY~x0oAm>XX@0Yan z34xwXu*|<*U$P`XFnc3E{tc5>5ztT(3CXZ0>Ccl{LgIjuY0^We2S#M_bV5{wXed5R z?@0_f?7Hv8F$V+Wa(9>ICt6xwQo^W&~_0wO_sMo((QJ67CtHlT@n-8rtUF_c_*e&@Hc-4HQs00__)4 zp>y7fZdhb|GlU^suD?OKR&(II=ek<(!YVP;fOeNzA>pa%YCGTvl|V;(5_I^?+Dwc} zK|@I?jQPZU%+sP1d6SPdnT5C?b6O{lUCxSSp;#WeGOGq4jab403?1(tRZ2g<$B0iH zM$_n!Jq628UQSfy=9P>AFzUNZ$ba=8#7x0R0vB&lx_{Jy<0ihsYr7 zwd_o`C}5nj?=-fJnh*y9D}keT>s8*hmIf6&hfKvqTv`a zFRnRDE3rsRahWtO-xyjlqm1SI;dy>m;TVOO1RS#AbQtBBmkuOH)K|Qdd38F!^VeD{n{*v3M1ME`MLZtc&|Ut$|W{ZPZrKMV8(^vx{{Fv z+og=gO}Abxj*zqJXH?W7lj9a-MdNp^Mi4JO?9)3yKn5c=iUJ4r_mwAaIF!cm0?t9? zs8E7>`LlTYRxk9!@g)1zPv2p`yO8owuxKgY<;@oFqlZ8flE~CA_Lem4*}~6-*`dR| zmlk}svD^{IG(Xs}UH|;4AQLl|;ifG=IWwztdDBov!AGIwm1Wp8wg^GGE`Vm$H~wZ( znKg3ozT0)#GJi*ov=?B~#)ZI*Wm@x@dge3+G4`Ly6CRNkMyExXlR9%nDV{TjDsR}S zJUBu*>c3+f@$#Kn?s@35T|v4XFh_%Y^^}MIZs&EUmU4tYj*}JeZe$B%)R@09mRej0o*Owi zMCw}@8bjm5FUjd?AbfeIq(Y1Sd%vZ$T~Q&_B*bUVEt*!;81dMK>WedxPnDa}^{vY* zk>svylZOzvxun>buzQMxybMSpMkQMlo+01Wt4Yf<@ z$A8h}+yH0Y^>Bah;=pO1VMPF`kq^zr$RfTU2#tU;XZZafv}BIL@F#mSIWntND^)_A z(dgIaw9weSoO5xqv*Q-fL>Fsa#O`en{v=wvRaOqRivC+qC?o9-YHw98zsSWXq@g2T;x@xWpnkN92NHJDTC4rvZR%I9E`! zE(JJsd^`LUtNEZC|Etl(tv~c+-wo4wx75j;6=<388G!7*x&ms>%k6$t^2>Ih*Biez zz<350@>0NO<`^V+TFFX+$BNaW1OkB%U_5_BON)fqXA!GD0xKD+!GJ&uScd8(pb$pJ z$;;Rbl3N*My@XjyVDhlRI)E%rj1VhtOJr!>r{TBINzjmY>QwTw*EYnBYB8X`qGDJo z^B}HvJZ;v*TfzlzZ_?M0obpogIy5HZ|vujen*35W_PMCDtxL$;R_&F zFd1{v<15#J?TUM>4EJrY9ucF7dgGc8fwu<2cB~J3h8PLn1;=!4u-)Dl-+mJ&vbE;d z23|=LRMO$zlX9Cd*fd=;73MhtZp_ad9Lg_{fNh$31Z*d3oE^nZYy9^IINt7zffT6m zg?Bv_GM-7>&~TM~t-vph@AShTyC3?Vo+l_WxA<0zIKQjATrh zoSc^Xf0lSEm?89$7;T|}-XKrAE=^a7durm=sa0F5V=aLv@%*m?jAy1{s+6E*;EdtS zwkJ0b0P?p0YtWNuHGRj^}S z77k1F@$)<4 zT>MT%JxJ+jG1W|e@Q(l1j_7&7R=udtw#ieagon1`?_*?DSVQ?20WM-KYE||4+utQm ztPcyQEax)E!XWyLj%yZ~ne`yYx2_J(&Xp{3{Y-OriMDp8Zs(S>hoTTZ2*z1283toz6ubWEf{@$@|ILt zSUDhrV84g#ag)x7-d5qeIPf!ikrX>X^yB@W!YmOG8mG0tu(H|qpMXwbpm#{4G5A7d z7Wl&muiUKJy+p95cazfWw4mF){|V-C(h0hbjpduVWtHB$r+b3lhKn-wK=ci6f@!)l;B(tduE3C%l^jtOz}tz;!TKUzs*uxlrjD!ja> z;N!u@?}ivdp4S#SQ#lByDpQt6I`cY56i*?^Wj@OqMJ+8Yf{224#CqnXj<&YBG-LU~ z-z#-pEFo)7>YqcSVJ~4ZvQHp^${G4m_*i+hZ|``|He>SR;MopO(Jlklq zRhjRGF7zNlT0@fK+JE0!tq13tCGPlm+)igO-Oe?STiC2*JL;O9GO6<&7g?cYbevco zQp-T~TSQ!1{$*-dOgX5ObeQ@sVWr2Gs&x~5=k}amoP0kXd$ci(Ky3J(Phe+m%5`>C}X6A z_8LLQBvoGN@_brC&>w|yL?3ugLT@vq6mt?D>T;Im7)ujF{Z;j)dvg+?Xsl!+65BROyqFC!uu z7rY7Z`We!;@>tYuF`^Hr(Q}xO+=hf0c}g7f=(6|kYftvASXn~?(Z*jnz66a#jTW;z zEb9J-s{S>;r7e0Fey;980q4n*-slY8f6Q#nT+SQy>1W1suQffZ99Tzp3N@ToVq|8f zkVSL~n#FsFbz`U^92?4dZHXZB#9L!oRLZA{UYcBTZeRG=ebF@=EaSLNl3otA`K0Qk znO)ugD80#~y>WsPn$~f%b&dK)thGR|J>tgNar5)&N_mF&>GizwAq~UVCllhap|Ij) za1&{l-fs+ZAS5hSBP}&%dw2HHfBHC- zK7(Yz5xR-;+U4GSGd|?f5?H9&7Wn#Toz^+NjWEF=eL)Uapfx-H0#swYnbu;|<^UXm z{eFg2JID@oD+(pY-Z>kLMBt*zHy#>E;PnYlxzL;gjcAm^<7LT3@k~D$sc-e0y=lpG&u1u z>$jQ0cA}X)k=wv}BJLLD$+sf7!*oP96BTb?Y+zDtj?~N)>g`o91$Gb~!n9KUp7%Mj zCN!+qeg(F_dGn^hb8RfOD}j;m*sW&RUY(C~wKtBcl?To$rK~Aj8ymL(aBvzp(Yp#z z=4<y^+gpsZHl#+~tE%y8)u?oOoVis#?PwIMg<6|uFqKK0HZ|3rZ`JrG4AEBr-l;rSbM|S!v~=oNf}P%NtgPqPCX9zI|u|rw-&i^ za1j56;6~`1w~asEs^BmDa>>3s&_2j+;;pbaB-ZCX@-!yNJAlOtUBebClIU4aomV}R zT-7pE61<$s7MM*ynbj!7&R7Z(9ZW)*4q zslv~+)YK*ups9S!R~+*2*L|-DmYwe5Sf#KjWth}(J_hqwew1ve;MUvaWYZXb@Onq0 z$ac{}m)|i(J6__&ndl!aT{T#KRe#pJOgF1jD?GP3Jd0f2FZ}T_MX87^K@BZrL&w4O z1t!HNd&edd)?*z`7RG_~=OYyT4|00BivcB*F(JE_zUqjx;aKtB!&b|;x$Y~RmR+053nuX9Kmjpz+^`KflwLleLSw1RFRWU@c;8YMQ<UgW|Vq4hVCXxOjs<~D0)4)5 z0~3}6O=X1)+sw{#1)PgE5ZsPhXP_Se@swgsF>V{DB zNzZS-(<#bHE4bU;OG)fQ0uGj8vTxq=&!^^h(qOfXU? zekg)a-OH=KcGJ&y0+U~ohX9U8H3E5nXPKnN^gtC*)zho08X8dSnpwZeKYbWw1f#Bw zWR(P#Fc9wQJ`{US)==PIRQap+J8Fl!o*u`ikE;<;_@t}tVTh)A6afMnRwG3jyI zjx~hf=ApLyYm;|b;E*_3=m8#ErqG`WUGLbs8&5HW$cLTg5qr|J!IT0m(Z_XnsXTuG zT$B@N^))ataRNbIy@&HNAe;aTX+GTzv+Nj|2%7H3VQWmnNPLCQ7BvT0NlP{E4LZXN z)vjL={NGbM?o4b>*Z$hHoDf{mxqVt1SVqNLYikuPUKQSx@b6bYajyOpWYgeqWBZ|E znu17hN-M%_aoYaQKK6rTu|qVIXvK*@>pP9{Q4(jLXfIZ91U;yLJxDRmM!t~Cai0G? zEpl)`obm4Eknzd(ueT^BJiIQ#8);?5pm$UYCt&pag)&A7P)3Cc#w6o%qq^I!A+IMv z+5AO?Wkt5bx7+H%!Ir`z2`zRCM_7WxIEJO@4v>19FtqL}3EwBsW{<>xx=~|K_`;pR zWSc_<`2{JEZ-7w_CR?dE9bEG^)cB`3U%0itVdQM={+g`?d&t2-7asol*~z|X`s`wE zCr`&Ex3g;J8QMage zC!n_6F0^k26wz#9yM!k#1b<11aPTdHgWK?z(VC@)M?j?TfNi*k1W#a3(3;a1gd8rM z(_8-JkNvm#A3)3b(0sRT3G47_b8?>N}DGdZIt_(AJA1)V2I-uV)fc_f{how)0oR@ ztA$P|$W6f)j>6r6NSal%7gnUa<+%#3RFZ|FABQfX2WOrefF;{(Hz`apZ9VTpWm|#t zH5Fo=0QY@PUW#i_>rssc-}**cTW3qi$u(`8vzU(#2Nxt$6P||VuT9=qSCoYsE5Lsw zAq+aNh1y^)AopDjXB9t-Zc(7>{om)!W2~iczEb!oKo6V{fb8_Olp) zSDCg^c=95=1`FK`e2>_{I1^=t?@cP_dr^b$horKsXfxl_DT@nnLzs+5-Ss>A4>Go2 zwV)bTZW>TZ#Tm9R3tH5ps(!-Ds9FgdoDFka)N=`+8vL+G5smMDRM<2^?!135@0BQP z?C|RCFvB6vin8dBuVgm_!1w=b#5j;ligjs1MK8ktv(pMf8Y0*xE+GO!$^UFISzv`U zq4+Zo2FB#Sx1J2JE8aChOA`wIhJSB`?C?D*5uGD2d;j+wg15Vtvx}aP{r6bJ$alD^ zmr9y?S77P&pTo(yk07D4_C@Box0@5WzcPk)BOLvFV&|MPJ-2&3mAxcRINOyO4zRUmK z``P>bz_Dh{94qcVuitgvgsUpc;9!zsA|WB+$jM5oBO!tOkdTm_A!xuiDj)4%0w*Sx z5)!J`5;79@Hug>$4n`)Xl9tX6Hb$PRTu4Za@jh|Y3O`iwesyRT=D6a$Bqx6zE|Hjk z+00+}T+$Kpu4^~3y{I(qmrMdRD&G?#;0b{_Z1*BmP>>&z_j!AByMVSUQ>Ih1g`_He1l?P zccpp3@Xs@+ySg2lul)jv1lm2%gdL_iMuR{vXGHI75gq<|PJAos*}c-du;Y!4Qfy36ko-&+ zsCBT3oP;Vi4id5*%Gwcd&TpzMXQrft#0-3fAR&iZB7uQV$iN>d@CP(l4(NZr0r};i z{Lg1(=YK!eEC-YzA;FR4B*or(An*I2dlS0eKDJoG#gQy?gBBwh+nA)FtPo~uOt+^? zrv{b5IFFIia_9tfNe7q|H7Y2+-LfIfX;h(48#>#p59IWzNS z(%h|fr2Vfd9Y!?=C<=+D6Y}4O?_iMKt7?Ts+W-9u_{AUY-%r^AB}SI^hZ=(ab8w&n zf4OfO9onpT{eN$;9=n9{|GOU^Nb&K*w%M5`$^W_7@U-{n|DJ+BK#=MEUb)nImjB<2 zId0aj{?EH{fL;Y5eHJBZo@ssezb|44yvNC>|My=1UXMuJzdsvm!Df;9|CU1W@ml2n zmGfVru&6rMM}qBm?UVkeQ2#Eb_q(U~?=t@9&>4(pc)BIdm)au0D(U;{JD? z{pYYO4&k_Q&P^ZEHT|y&`mc)vss3|><3iqQYO3ptJ=<6})$lcbJ7-BC_$$oah| zQxaMmUR@l& zSrPg7Q0NoSnmaO3Mt&a9yLayrlT#JLnNqf$B0;o zcwf6uK5!S!FqXFv_raiI?BS3AY~Fk`3bv9ab1W-*k+e@9PZ#q6t-@&vl4FJ!-{<50 zQ!}4vfQniSJM#t_#}FU!H3Pf(i$j(%fpI~vXS2f&xt@GPVL_cFGdnxiOm7xLc}c_o zvwTk=NGPFM1fj#~MqR(#dD#otwCxlh{_p|)of#K@5l z@2ds(i5gP{uj4Lswg!#0)oPR8?I{Dl!eA_-u@TWHMLRpY^X>fDGESEYPUQ@Ku_fO- zwukGr*!tnMV4gFbT?2D?k_yL-28k*~3{YMxnz;0AC8%1i%jv#jL{u`xRyR`ztkI2z z$n%|!zGA8eVZr47w8CquJ9%2XAiR&?lp-&?N4^yyQ*wX=;mf~Mxm^Cf)0#15AR!@f zxjr`HOsT43_w<+!+5Ko{Hr5r0u5{R+=E-)!Cr}c>U>g_~fwi6s3@NxSq|=*>)bmTX z^2_)v+&@jzT(h(OnOeHcsR>-CpMOeZ%{F?HH4n4|deohmy=GkN9%+z((b5KWcXwNC zkLGf_?Q4sDnXEEU@wq+El?Z+IM~QDia-k5ZROHj;Xp{3+-{4@RUE77`?rc3vgi3qbxO~;dSzvWx^rM`fX`+cP9q(aN$Zj1(`bnk@2B0zU?n*8G_k zW(7LdcO;OhX(1tnYt*xsxN#I>-9hESwvqm^;gjgz{7x!=KYpXBx1R~u`P4}8r$6Qc z?nnhY*pT93HIg0DgId&QUDcM{ezQp?b`Sprugmg#^qj3R#gdYe!T>!dCDoBQ-~62_ zakcn~UF34wn-u!SmhcP9_ntSsJ=!|>*=y_m#KBI21pw~I$&CLz8 z&K>6a#d&9}Fd)k3cBi<`;t#c$q!`D;!vjVSCp)_eo*4Fgp#o8E^p7;o$?~dp=Duke zN*~EKuZz6D_H)pJ#-#yh^l6~=^`>Z1F_?8yr z4IEk8XAr{Y&!Mu<`xf_SYMFR>lNWvOY{kO9H5F%hMd*89=afDaYx4$rlSr zGA`|?$xQ22e4LQ{+-nSWiGqteksr)<1cPF1iu-C;R<+7w8u#jSS*lp`6X(Gvoz!!6 z7BUCkLZ7p%ItWeo*Xs5*g9R8sFcla-N2s{hghCZ`bKcL8O}MFX-G-=RQYzxu2(S^4!^faE39~^9-h8$WH8X_N z1&{tVdhfRs+79a~)_ zrT4K|G&|MrMgj(9LNQh+Q40=dCnrhK8&N~liXuhw+@bT6rc(hayr{y*Q+_K^t{V+9 zHHuj1C=?Xle^R&CX%>ENTU7Gpv*2v1Pouhys#q|I>H5x^@|%MRrK<$JL@|$^0%>_< z8rxEha=VG@q>jYUZ%saY{k4|($X}Gjx(&@x{{%4M2iXiHG8v1)r0^`h9k$=urSaKQ zw4MAS6DLE{V3-YDM!t&NM$t3L_n zhYRUBg^Ef_&wW=qAc}WGIE>by52UK-^5nzsgUQfX3(Bl;pu>38p#`%*H3K-SW-6lOL0h&b+YiOhlGRRGiNI55c+kxO4gsly6# zL1T~_3`+QyLZhrKQNQ+4etq`^SLy}K0A|Cy;GOA2|M>wiT8|rqD!jZe{X+mXdYf4(d;|@9_1f`=RdP$sEuSh-4+oLb4Z^kZlZ>csOgR% zT@8h@Q>f$?6wo?3rwsHpDFm+a2utVl$IC_Bhe?$se4H1{~qt>!nd%JXh@+S)spFZgj#A_NqEwc_TsVkjI(s z!O&oAguyBbt}v|5b5xRE*VzIF-N^i$l>2?rI1yUK2^#i?TS?oDo7Si3#8^Z)s=9{YSrl2+UQh#Z4_E>eSEILR zxZjpd@ADjStZifZZ-V#HNWUA8XC!*c=@3nXL8$FkG58i#bM@9*YikTuD4Xvr7>ojV z87xq0%QFsteh{i3HW4{?l&o_}=e6A)D^v*ZpyrUiywI?&42jAw+r)ieX(S=T=q@iW zpZRS&g!Lb}#;+17^MLE_=7%uvm$O7nOx>v)$C!gMH| z-6@C;)TBx!!5PfEzundqms+-Jz29qXFK8;SZvNR-3{~(v^&hE^yer( zV}r^nOszkjdKAqLY^|F+>(E`OPHoD`lf5Q>-MA^40f4ou%(uK zc{ccm*TR|==68(TNkla<6{ZYQ2({9F@fFqPDqV8F-nljEj8Z|*r-l`lYUm&;L+$k6%Y=*XX?*W#2kXkSy$=K4YP81 zi#0-EA~?(l|Ju%Mb>0U-rypghK1P90>z`G?oXuNVpCrHYy}^d`qd~!QAtOi-k}wK< z?$s1Dd}?v)P-};0!9SSD<&DzOEhQy!@;u{Q$@+;yameTu2Roh~g_Pp+;&Uz}i1{<% zPuFX>D|Ld-n~KncXFMz!Y#Wks5NO9y``zwx^aVmyIh|JtPx~wS8g(!3JuL1Bo$r~? z$_O425rg<(d^vi9xAQ}Ee(0{^Zw6vyA((#z84DfT5~Z#mU80UjsdT5lnSsn|CS6ke zAlq=A6$YEIkA>_MC-=8;h&YaM8|LHW;Kxz&Chm5-d(sEe@y1*o6*{V)S4{0P@10Ah z+|3^DK-oK!6}k^N6&AU(Bdvhm#l)c?XInu*M^`WGR3j8{f=?{#qN7F0czd^wo_2XU zA1$^8JP*7V!%GcRob#v^eK;RKpE1wIm=nk|)vWx$ROc)E$Ve0s(oY0c_(G;55mZED z-LxOYyoID*sqn`4uxU#&5kHKnE@efv%i^2jcsD~s>AeL-6;pvH_UiM#neF}$lb z106yMjuT7u=qg}&8bC%!Jfk8E{e`Z@yFzWk>-&-fi#x=9-Z8XK4ovW>&a02q?p0TT zO}msF@t5dmA0+5+5D2sDUf!8&`0o^@tu`_8Cm3Fe2f|nX;<+uB4*NXuJ}1M-iZ>)N zk*{)B{=F2F6g@@JcuK5#c8u2eU%g)FE>WFvX%oZ|#qJIj30+;NLdvV> zn{!p|w*wyo`fu^sx_fce1Z#4(T}C>*@f<7LADu*f&A>LnNU}>R> zoUR6>^vBoeqM{b_@Md27Mb_Vq93(%;@6Sd=u~tKWFBX9d4Rc-w#jgCo6=ki9Jl;SF z4}7oV+m|M#VZt~fCKTTN8zT9>!?*1i{jL6%$-j1|Eu=k~qLZ_Zm|?lFxPbZG0pyDX#@)w$J5zAfU*W{DvxCy3sU>+Y1P5 z+Upf6S(JzPZ}>W*8pd`$@=KV6Uqez!3vJ`T1hnd!3+a3IRG?0lb0X+7Dg}tgavy_1{&suEXpM>4y=EEFiYi_yRg#e8fGjT$ z=VPQv14HmRl;3eRC``)#Lj46{D%>WJRhAiNBc2uFEj5W(&~SEkMld7a$>er8&onlR zn1W@#Bvf?r4xHDjFi*F7{HjOGYZ22URvsG4#5pB1^8#E`+Jn1hgfsfs_15QPRmw)1tSTUDQ#YAc#?6j z&a_z+xJ@WD4oJou$MZ=n887?bcdY}i0jAVfSL9dQaF6#=I_Bj$h~V`vMl z45L{yFc)-nld$}KB`qkR8?F&2s*xV(`B!b_x@Zz5FO&?GH>OWtl0AL!wOyHLwh1^b z0RHy3-0jCdbA(XWuVO#GH#LpVGpVTRE?HIF9)5EreD2;VX5wICOXWZBdzpBjKt4-w zQT&#(fG>KFD>IHe4H(DI!LMJx2EU*C?wHT`3h^DRfXQHiBu1HB2S3LADA=WK z(i>BFeC%Lk$z6P{j-vawk1_#9BUd{cAUQHj--l{pv*zBwGy6%zgJ6vaC$brWG(J{? zzoRB^TLPevseCa4Zu`Z&kn3EN>{o%Q_dF0WTOR4)nEgDLP*y?CJ5U9dE-hUIg~F6u zON{WsOSL~eRJvPodW6W};=IXfa&#oymmn>*ZIC0{uYiuNKKrOKJ15(ZbrN)(8KK4) zwsA`9hb>1hbl~4BsZcQ6P5u)8^?pPG4P;gWlPM7LbsPy@+UHUF-m&M3%b1|HYhx9O z$Se+(M}DIWo0l`%y5w`?*Si?cA2Bd}hpIOqymfrHez2in;b|l<8p7RioYmw9nMx4YtEF^U*F~(=8&mA%dbTx zMK_B^e;DI%c`Qef58wFmo0F)D^~Jn?wjgBV7iW+L5RG5 zIjH0i@$-4|rW*X*D?<5M@!sviuN&md)yiY)327wH5H$}_k$$2xDhAk+%N$jr6>0wG zZ>T7^np)&#gzWxen{HyQl&{G;v$R84+N@~k=8eXk^sz^je=@X_y>DaBx8PG&dJ*Qy z=juMT-+46Vw7uT+zOQMUy+e{43tIb1FOw4qSQNWtp(ck|e@b8cjx++3`XhOts>WmA z_!(sd@4R5rS?^og-nLMGQSM)rU8s#5#bqU5EVpm(S^~$H)_c2Th%@sF0?fE;XqbH zKlockTD|cb2=1zkp67EK(%;~*;Q;8_KO*+|PphhDo*+6rfPhY$14%lIoK{Zq4V+&p z&y5|-tQ93-IzV`m_GALC3qtaid~7s=`n23@tV#}DwmEy9-f+bsR=M&q!oOs`7oHck zbg3e!!e2L3mwbrzF{UB z&jAV+X8CIf4-cP^kd|6oF%>C?H#n1QSLyAjKjw3)5xf!=WbCl)3?{OiWkG!A8V-<- z1dLN4i^9+Ol~2<;3casRi>Gpf{))}vdJk?~zfPxZ{8N6b@kMzY|BUU*#&llzsnt=sR)(SvN&Y$%_){+?zm6 zT##mzbze3L?}rZ`SYMm{AQ?-*S@3w~I|SiJ0i|C(%3ZZO5WE!CYg~`z`Wicx!v?Ow z94BvCe(j$3QBEj+EUo10V^z|6hKG*(JwtPx+d%c+<_rlkkyOs3iY1CavV_#jX5h(_ zJFY9;sPc-6b;Om}HSXg|eBp_lqvupRRKsF`(rmJab8zAk^Ew@f5%hIKEKm^v-QKrb z=Io>YR$8f_!8-4GtH#5j#~iXv59CUZuNvtjviL}x3KKN@i!`)}CA9U`n5hG&6|H8w#4Do?IYFsf&%#4Uh<*J= z!N%n49f%irQ}No+UG+p+BO`FebA-lL_fE7*Hcf#Oa6TcP^K}g4v|Rk`D&_5Zi^hJI zu+`*PbgOrvjDq{l3VoX!gL_qTxYbBekcO2$^#aH7E335yeTonuXprs?n^$@?#ghuzeT8IXh~+MEb*756wqKfu+KjVmBfbd=LKKHJrUbmEeu7@3uC|i zqOV*U|C6wmC1uz)1#|Xjq`2T%e1P9T{D#T&EdYHOGPwu%Z5`Nd0{UBJ2>mEI|HQq~MzejJV9yt&&4CM43 zT&F@ExIr8T?N3A2bs`pR`6=CJdw9r+sw}Ts#9PT5eqMUM{fjApR^GS#PHdXa>vdXNYw6s)Q0ey&~EFk9< z1-DzDNnk+;$5nSwq!az6w_^^ZC$DY$)hb8wo5)sH#@jEoR7`{4{va(-r4E?6v8=l~ zb~|OfD2h5)RHJ$RO6vNwN8-(|tAN>X`y}fP6I*Kkw@%B@FcD%Qx39}2ds9_JB$CU% zA>Toa$*R&goM3%@ed-JHRjkQMJ(ev|uwd9ShsjMv9%%w+gZ8f)DifTrSq zczkYMRC zxP5|e?N?^lT1(h44`^J~P}2 zkBXutr&$YB1SgH~hfpJaUf^keccAh)`AOt5$kqq}xgFF`jR6!+qN?>Y!b1h-K&aVs zwd7~;#avCAjhj31&C|WJ*m?WYVH(Y-yUpZS1KG!TWDM3Y}Sc-ksh7q`YSTxHP zV0rn-orPdO^QSj5OAw+|(el2oriXoh=cIKB4@R>VLc9d}_|Bbmv+wx%VMh=~lw(!Q z8p)iHGDS=^4o1;ELgs9v%|J3}q#HC2OAMZlzB5y6UeSpS4inFj3It(FKC3h> zVMG%{V*XtxdVd@U3+iJ$1t}rC}_5pY?A$WOjN|RX?c=oi)KghjtXy z;*;+heCY)eYa+*Xej%JoQj1Lqh!fFa&K|^AW5G=I!N<5itUu=Z6LcitiI@7LGxL4p z7X>{&J_ZDte*75rDO?)~uZBsZDD3B8kwy>kywBA_kaiH?qK8BeSq=sJKm7gefARN8 z*6UYVSW=1mxM3KhXdp^)1rVj^JuDveCQ|IJX=zo*d}Zl~;$vC_?8@B}yvlA+u(jk9 z_loXkv+xUSe;>ROhpvLYegVfiPGe3bN+d9Hv@xUqxXd}wU!FOgfo%LQg6AgOxe0F|T`cXD5?N-0c8s0pUa8+DYbiP? z>2X7{va_>2h+~t|({&{<#hyW_FhK~#=P>fuoNsSm)I2qDMqGM6?3P!Jag7Mm1c>CM z1{!2K4(VNA4W;oYNItB-K?EVZyKJIh*Z_+@`N0{s)Dun+?5VxuY!!1(mW`g;BVd}y zagULomlw1NwFV;+Q4#?VjOvB9gDaQBhPKH`g4{-f=kSrC?XjQht&V2iRmHB8pR@Ub ziV1zp*!&`(_n7Dp3N|MzHUmTo?nB1W7L@d6&()o$(V~Or>uZWeuStS_d?8%rQTOdj zeMQPm!q-5GtV%i`duxmgUvy;GX|S=pn6}~uS4*BBf8jISNBS0FsOf zncW~5rNe0oMs7wHS{2li`Lnn%ORVWZtORdx3shSe^)a0_^-JSg3ZfIYydQiYbSCae`rs)w!)j8d4;V>$8)z!q&RjVA z!s-NbJjyC4XPmORj$WjxgaJML5d{_?Rh(D&qR-;0w3Vs2JWoHC_m$1+nw}Q(<_Tw2 zLaz_~vd2dJSSKzh^h}*~X#EcD4qd1Y63geQ%dZ4l?`TOEAH2%vgmfhYM54d4C1#5~ zTVbcaBcS$yq(^5S9M0H_^hMfa%$8Kw*3L9m_c@BDNGwPGe3BWQdfIln+r$yV1qlR` z4A&Af=*Ug~d?0k?P1sZ^AI{#CRH(ILayU;JAIBzrI~Nt5Py|ENB*!hBR|LFGiC#7@ zO9os3SaK9HjgaNo1BS@OqIbHw3!)S z<@B1jTOB>0c6kGiJx|P2J2Ctx1Oa=4j_fIav($3_(NckEMQ<(sL^)Skx0_y)OHawf+=xf6z z_`um~(bSf0_E&jD87(H3sIp`Kmi17bG_`++%}wj1fNvLIP^pI+4jI@AUq7c&4eZ>C zTq<7TV=wg_LI;Eh-f`mT?DND;K`XD~bfTUkNlDtDv{{@@4WcM1VS=5p^S62Zd)^69 zRV-xiUWTw|f@%?t017%bF&y%n^9A@MCsX}jQg)#KrKoSlaJDGB;+?EubWYa&z4vUh zE6Y%pNV-itcLtB&fKXR&RHp&NyY^o6yyGI07+1QJ36Jp=i$jDf{|{>TJ+(?!QEdt} z+pDcue*=pdx0v6J5PSoh*Pz_oT$kMmrro*5s*=s>Pgi#0rTivx^78mhK5@-5zBx76 zyYl%@fV6;^qQ+mM;{z*XUk+Os!lZ2_dWoS2S$;57DdGl&?WClAUm-CN0b^ zAt$<+EZrL4@tKk{7y84XcM3N?M=I-k3n7PT=Q-~VnxHhJcwjuAPn*9<)IiTHwQn!> z80uU`XX}A*ZBjKgH8se|E?*|L(v?CkOSj%is^obzCI`$95Ltv|WD3rkzf1pW4iSC5 z(I8NwP&k9w%s-&}RIfjAci=Ai`{FsIjQJ;Om8GnTmG^ZXancJWEBBCFkG}Aoy=OWQ zYA+P?`OZmWhy!ATYU%4M!w{b?_jBXo@YI@zzFZr9jf%nsAXgj* z{8{4UGv)$(r&4)RR4#pEi{CY8szXc598 zn^1ldpNxNzX;N~Mg)e(6@*du(crdPe;M+em4~ed1W0ov<9X->8f-bLfJqp53gjn|2o9mb1;#|hnkQ^TYVSV7_UI5v!kjLbLs5rQ!mYO>Za;2SMqb~;5o z@jccKkCE|raYx$~hpCyCjP{P1Nh?$j7MEpkKvWPp#BEGaiji6;>a9ZKm3Ek*`$g&L z{zh(K*j%I8GU(by0?)sc=+TEkIRg*cE;|)qh%4|{!NsNScngK9r~cbF4rV4MD7}8& z9^etF*l~CngxjM^A393h+|p96Kc3oez_xu8%tGal``0>KSc&uGPi39$V!1TlvBOyb z0Q;i9YCf1284Txke#gG#YB zYV4)@JWhxw^!_0Sl`MA2W$?Jqz196zdv~9tm8@<&iTd}lybw{Nfn_nZqQt9r8uiD0 zEYf+Yc86T}`yLEw{1vx1%qzL)L(BfY%?egY6k&)PkcpQ?&TnwY60L`BoNyyLDRomg zPsV#Poff2uHtD~wZ=Su5uvNZC+K-8IoygY^Z9cn2|A244Sl0}JSxu30P7M=wN&Ljq z4L6OjDu3_!LAnzGA;-po0r^d0WOJ#`g`vO!=3Pw;hslew`pST>>a)IvZ8|^x3Js5> zKPmL)T}{o!ka2*#B!Fpt@sRPTmm0L=*e4os1-8X&C76_ zZSc#~W2j2B`ss5%x3r^PW}P;5fXS<}`Szb_uxzd?vYHMwT5#X+#4=!?ERIEyp#o%x z8!}>g&A_C={^?!OW2XdUf3?apU0FQ`j$hdJ#0wm%zGm*cT6!{MkL(h4SJO|ueL$}l8&b;l$|0nIiDyna9VDm zu&fjCVpuI9&Mp2$rRS8|_*rX|{{qzT)ZD$#Q(Ojy=f?RZMh{ZLin_gvgh;6RCx`$ltgNJIE~Qzu~e1U2iHZJ((nvE zTc5i#TI(frzKIgC7Z~{o;RgdHe1^zms3!u^nf^@3UP^gE!@yF2ud~rEP`8|my1uhv zT2*)=90h*~mLG`R%@|(`A23F-#hQmDeJFqBzQOv5m4&?!H@QO*HGvX_MU!I=I7oMH z4o?>?^!nHnlg;(QzXB1F%Lt0Q`j&DgiGXw`6{KKO->I+lGNZ1h2R;|btEN`!jHXR% z`XR6C@xD=nYNd%7x#gcr@-Xf!=u&*yV;?ypOlUf1XBnOUaWj4&eHu3Ly_yu_0kA1~ z7WoO{0n6SJR<6i4hkJPD01#+7}B#F^}I$NHWlqeGx`-xhVajgI97>Oe`lAI z6L`nS#i!&vC*-+8T!HoY?%%@01-by5z3NTSb#oCO{HCFzSF5CX6C1b#u^5d^l)CE& ziYRCtw69Mk9@q8a!@Ct}^cb*)RfDUT*6{b6!Z{-K5Aso5ucD`VAl#%tn@5Ml2nmvb zO7Onj9^dQO;Pdl`%!ud6{JyarMLapA$6}JwXBg559ST(-nRl+Y-w&7zW%1|Gj+>G!|2o8 zv`vlph%u+F0oURWy7{qmfM7dkq$~Kz>jg32CH_n-RgRL(Kc3*h76tzdIE1HYufNyU z!s3#$rCU@gs|TIN6v`fuT3il|Q*J!)U(&#U)Z{MfC<>j|kM3BF4>j$Ig)CS1vMGh+ z{s4ob0Pav6+S2zaCpveKRr5rZjQScmCjCtYAh;?nM}@PnsFqg_#k|UPkyqWRsS}Lx zFSMv}Hka%t+mFPLlo!jgfZ9E(N1Kxoy)ly+|k43y^r1Z z__phpca$vkz}GtP5w25Elu3JxUvHr z*>d!gNRe!K?+C@@y*_CT!dB+7fa`>TbS!x8HAp$wKQygePEIZt5PxcFYVqq3(S%=7 zBsAPQ{r&weKXCXa6zhE-ywW&~KtM86whjvuGY>Fg{>Q?qKr{|b1bnbTZWtIC+(6<0 z(6a1CAL2?PA~5AuREhzn5$SljKSNXLx;Gj9FZ&>`ppXxk*AxV1%_4ZnMZDhL{~-mK zo=2PKnHj0bZ0p*aOV@vzc)FVAV5uV;pgM5Ccl%F~jcyF4{A?CmhE4YZ)`y?>KSFVf zPu6-P&#rNGe)`;9LMICemnVvp$N=XL{$5WS6|oRCb%0&d#tTd=to#>jI;u7{ta{BZ za?3N7dP4uauJv{cX?D#!^j3?lO-|Yil=l1$L2+{iMCdzJnCK#6w9It7~=mJ-&&?w)O-f#C=jMmXgm`+(7tB^yPj~<8lOqxB&MXGfyz^ z8ruMX%wKH#^tq!$)OPwCViE8){xc+ZWsp)(yn;NFoz4(&?%7kzmsYDa8`_?=uA;+Z zjccNjiGd{Kx01j<|FhrH(bHp&L7Y%)OG87^MNWDM*4Ne~Ds<}e063j=*m|bCyVTJE z(*`<40l@RJ9v`ndBDY3IRd**!36#>f!?Dp&P|?sLIK@EKuj0M|>PaCjeKv_41OjbW z_fin7+xNv$)mcxysy4$D`Hf}lvD$+Hc-vDlp6rW(SjQ2l*@N@Vbo;TjSkYHuuP*&B z{K3ZT+IPD4ZBl^zDKPN83C6_4+>Yj3gncCdIo$x| z`qF$sUm>)K@6FlQwxZg8VL3<3I#J_TrC*Z+IaMQ1iS!1aYBiGw_dbHH@Klw~&{xrv z{t_8@Q-$>bs=a?I~GO4wG9-Wo{x`Dr{*IDz_#22;#LK@ zL;pEWXMfbxycXlnrR(9>&Zp}V9!y~;BJGu-@C>4+q50{Zl$114WgwcH8W|H)bbamN zh%Mgiex&bp)OH2FxdV8f#bT>xkoj*BAZe&Dp4y70-sX0oQ*Dm-3-I)ebv!-Ti{Tr5 zI^g;2bM8@-SCio;`PJ#Rq6_!<5dAR6zXE;RDWRd9oL^*GM+ZnF6dznkSQ#e|5{R~L zys*Cu_=VesXceBel~JG+(`SjdTCb9crEuwe=?)1%A=m~2%k5wyeLPxhT2lZat&(yF zEP0Sag_mFc zgOd0dXN-#ZcyZzu$2mNKo46k@IuR&!Kt$`P#C^Lbx^^Q*%*m%Xg!iS$$H(U5KuFb?@7?imj_4IU@<6=RCRYn#e(aeQ0@Px~Yf`AKXq?54G??Po@fToW)g8T;hQV%L0cPq@GrjHi0$|xe(f1W>U1 z2G>y}dpqN1uQh}_esmf^+$D^23Ye8a*MKWCjQ7;<*V$UD6GbZ;f-70S%}ed-aKZ9q z_2(*npSGD<(KMF#?eZr^EXCGe0S_t3$&(q<28F~`UHr1(2eHSGh$2<{0QMn~cx#^e zitaIQtEHv%2P7WXDVxS=5YE=+pfX!d8aB3L^;wNfR#flLi0iQVTig1Y|RFcTk`~ zBa7oIqHNs$qZHzIOz5t#?H=u%uEBu;{GJzSl3)7BsHd}|$g+%fC)2?hv$8M^ozL=2 zl!oCd$$jYC8-Eq82e&TDg8UKK>UJIABO{dEUG55$5_|!M=ZH|$uxfvUf6)V+`OJ!)+63y2@WD_=C=_eyO@@pMJGXgF_zROS zX=Gc`TU`Q$eb)X>cN-}NMS$a9-Vmwg3a}+d=EMQ1N-bfDatPOV8}VQKPESx8=`fyv zeQL;NS$UBZAheqk!+jna!tn8_LHqdJOnf1?2-zl3EL1<2;i1ZL+k)mFD^)^YM$4o-cz@w`}} zWZE~5dj&hbw2})i=GwM^+#w6@h6qy6@-;FB)?ikB_v5!Z!bxppEY4^ESCpR6*~uDc zSqa&$+jyBSJ~fRcdsdN3!+D0Xqmb1b8N(^P=M2%L!H2aYZ&>)OC%Cv>FQB5>*kc=v ztD!ey`-)J}4=7CalK1PpzaD+~j|LLrQ^b2s0$ov%6{ikv<$V2Xk4A^GJZO@ERJMmj z%yrWGyRpffdc}LzB^^gs`)PW4#mL$`IzA&Xd945L`iO@@m|}3p0+91!S4{gg1?05> zl7w8$m-YZUEwNG7O1gq&M_f)~Z*bcNQRcYQ1Em{!S$!Zrz+44(o^hjhm1ZBT%40)V z^H>&Xq9a10LC%j63!>a#2^!77VBFY+-y&HlD84r>|N6LiX4`6iqlV%+LwQJT^K9}5gtF`g; zs9uCgf1^+N>Um|dSyEpAv6*cQ8DJS8ZzEJ1Ix=&}r!;u4^7!(TrPV^K_LKyir;y?Od9eZKiB%KzctDrw$9ccxew1Xnhq z_i5gt6Mu)RVO-)=tWP(3|E^d??lh`E`0AsE5|88X(6X{VYDFQpWHfHnSdVn3Vf^L9 zeNr-!hPv`sg8kW3eC9};Iyys<=PB~oafND-<wuuC`BhIZ3=JO#VTJy*SNoyMyq0HEYiEC6h z8cpVZ=QLSx;&6|L@66SvUS;5_vRwV17hFL%8!-6$;gd{8)qe$|Z&kmxfp=p%%i9Iq zL+x_*?`NNH{ox^-1(J3P-8Fc)Bg^f+vpQL1q)}N)8WeaTX$_ugg^72xu z1vKpV?%#4ITG|47e;|^71PsIRolQkll-m@DA6stCbxUfS2EP6#y;0*2ZIfqcwUL$g zKF+^UWQ^XWw{3O3I8z&L>lLrr;xDtPM zVf}C(gLaDCa4?r)w&Yl7R=arhwfLc_#Z%QxEMnZQv}`{5l4AO&4l~(&t`fSIy4?F} z9O+Fe5=0SA4(W}=yGSnc;ZZ;cS#^0eZ1<3%`#`;GN=yhX|*ZOVenobTuaoiNO{D$6)V5j0(iX_+4z z0IR+r$U4w(l3l%+Now&Yq3RMn`u~IPLpf?xh@=z1nAm$K-}k& zLbyYVRkDkK=^v8a5flU_1$>{QAbNWG$!p{^vd<&dl!))=&WT?<)$YiuyPg50#A^00 zx7%+IvZ!H+vT*<67NRbjBNu9D#}64?HFY!w!p4iXrVI)dqpfGNUZfP+Pz#R#yvel~ zuqRO|UphK(XS_Ia%F(gN`ek>A{n_S__!>H;=(=>k`QB8lUHgq$?g17S7C{d?J$=aK z!JN!7ld#KnoJH@`4iO^o&)h|ez;icE+Iyt*KQH&uOF(H2WO*gO1;Us9jOHiCy|8YH zKI^N;oA&Z>t(dwGfI6Uo-_rQKdGp3tw7tE3b>_#9K*O?Nw-N2Ju`$U4`xdtY3m|A* z-`Fsn4;rPXqYFmErBH;$9p9vL7zOY*yd$X=j9eyglYupIL{hT{Py6UsC_zL!sV`An zX6H7enjXrSaR^`dW~?TdWW3-Ld9^S57G}C$u3@jx@xb zX=E1^)VV(EVsHSw?cF_C;^;WAuq+$iagHD8Al1Q1eOU;@HX8izz=3*ZE5tQ@}D;hBpo%HoSVuyyONe@V5%_4Xb zv{9PUm^6R5@&e*PAyV0po`Q_L>?_}rk)atQtx;Ycmgb1bDigLq9*4QIhN|?gz*j{= z=zkJ?Rn*RRoLyeiPms!fkH&#|T*cd4{?3u(%|L{jfxpVY-wkC8v*o#wDcp0QL9!CA zS3V3Tv!z}mLtbK8Kcu-i2U8k4|6@ml>5DBjWvx4bB^)5`ovnQK*C!gt3OpgxZtE&M zAuF83$nWsJVcck#nhJ+0P^s$Zv!Z&DyOxT~S=H{NTd;iGqa+Gq5jk>tz_Fbtayk?L zpZ^5_+6xoPhOd~%PJ7T(Eb4&8hr!MmBGz52ZoD!8up6S<#P}+P1Z^+epqu30;MIh| z?vd?oJPI!+gW5nF#S+;T5(g{LCxoV*2J z3X-VW3)va^fkEAkvwrGX@lXx~uqYAa95dZf1JFg9NL^*lU7aWu$Jal2XiQ3P`Nfd# z_rA)P^-3s(>-tU;>&A-{L9DZs)xEja%l$(%4yWCm@`K8}Oa4_HAh&<{)J*?P%ilB( z)Q8`0BE6-agO|}gdIM4?+H`T>{aO>-rCvVVR0eFbuI&FGS#KFt)f=__(riFlx!Y~hf?-<|EGcYJ4KNyt3ehRu&%E`k%(-DK>P(Vj)oyzL_iQ#3XMayLWL_%g>oZy&|Lyumabd7yq2cUPnv(T&R$g8rPPgv z>uhac7bg09($`Y$XPNu*w~dLhbRnWEJGVSM)ATXUDl(tJ8T_{{zkukDL2`$zB;$n1 zoyX{1odj)h{ot7|ExXaXW4@%3UAs+ALkt7X2h^VKU!UFk3d?@|4kC=~QE^{B|Eh+( zRPYO^cqQ7^dX&CC7h>h=?!A4*^j}@Me^Z-3evOubJ{y^@Do*?lmep_{vJ(WQrKKGQ zzVLcK);E<;|057;>DcAhN5-EX9B;q5eqk(wI6ATOC`%CMf#ztbn?g4epKjT?=r=&s z&hNyWtA`NTfXz4J=fBVqNNn8BGO&!s+9oC&v(p;72@V1VIvG*b>SqjbHzQcXy@ux2 z%!8)tOA7H5{jTY)we(l3E2w^{_jT6YTwJur>gtxbIbI=8R^g|cGwMA1!2Qy;pC6kM z4r^2i(q0`Lh?f==`u-DSfn#v2g@t%><=D3?{pXRFjVSbuoT zpvEx(qgf~>1c)26z`%Fe7)^#OoQFLM1_81QHDcH1Te?4 zEa2ngPsET3(hCY^IJBM0?4p$kK3nG1)YNuvPS;(*aGH^xo>Ey^8JOq^FAx8IefIDd z-Mtr6*vG?VeC#2d)0U8cQ%d8Ij*1@M`VC%lk}ijz@1Ay4Q9%jyY;UJiOjVh@gx;Rl zIWCLrfuD1f|8@mTct4DRFUoti`KNQ+(iu;wluLXl>lP<_*5uC%St2!S) z!J+gnDhr(=v|rBXUjPrzM4ogc0y|R2GXpj-lRh0v?oZebNW3kn4)-;mlWCD6 zZtU}d)}S&~$$|o};arM^ge%di&_l^Xc7{VI&w7s(D&~UB0g1*p1M2U_ z)|Sk_fB$|?F=c!P4p0S3*tlpC-ic==HRhCJq~o~r$#2wl6PC*lpk;S=X?m;!`>Q?E zmlom|j7&_{QzfcFH}6M4F}^N0;<(pV|6u%Smp151nP>jz20AQD*FkO=IZoC4zCHm; z%dspxVzq;Z{8$m3ZIeBu?kUvU;laUN0Axkf>z`A+9RSSAM1ISqrhQdjhvX-fVHO9C zolKczhr*c`J@&*AFi;pvpc;g^hp8DX{*sBw>vSNx9pqWk&`cu%6T)|1Ay-N?rjtsi zEA?1>*@V)F(q0>rKO6rW;LZ`lP7hLyxYZ0Gyh!J}*=7c@2nIo3yqui1eH4G@M)o#0 zX)#sL7eTyA?qz~<*Z0M0Q`uYd3d>E;%S+CBqd4VxZR{CF3HLF|N52NOYWtkSUc%Q^sCa)t3&xlW8dJv|f8 z63xvmRNp$)S0%T$3SN@^$q=}-mQ1#HDVYoIq_;oCA4q`0RAmYUv}7HF1|O#j4Et(x zJB>A)13~8|J%9Usv*FkMyl$UV8Pm-}GzrJFZc6XI6E?yD&LLVSPaLULomt|+|44B& zYcG}?f$)zOO$CLUtukh<`?wPufOSJ4(Q5T3<&LN^*;o?(dVnT2969E_T4c42CyoqH&v`u*E6V)7$JU+@Zk65c&YtkYq8>Ve#)JFkT`h(` z&{YF~1MU8=AlD{yvA3P=|Bek^(hNPfrpm{t1BpTmOD0uLSV#!6weT#{xds-Y)2ZkR z78!&U`VG0C`Sfi&k*7C-+dQ7!a|Jf22xVjcuyL8k+vtt_X?FADiJQ;a;Ok#abFZCl z!TMe$R+3W%wqGzgc|k+ ztg%#Ks$i8}u&K+T6FDpgAXRyfsPod^w}dWdS9d8!)$vgl=wV}B2p%=%%ULY<9o6f5 z`0vdu$F@O-q$Er^oZRC3K1BFwdwERNQJ9$K`@TPmmaFZ?Ohtt!6Z#a6Gx;IIS-+_Y z3HxR}^8tWldcjQFw6=J#lZt~ft+0XCsHZ(OD`=MTVsURGn*CDl2#w))xqw<_dgLQ{ zmqG2fgUR`WpMCq>s< z;_xk=reKmQ+Lw(%3UMdmI{Q*Py<9E@jR}25nnY^S3EA%^{i*!;D= ztbYA31eeBSa03l)84O(_KWkT1;Njt`-i#-{{INwyX7DL+0$xw0_OruOp3X#vRw;Mn zV}Bq;jw2>-`Z~2=02uJ4d@b3Ft|;SD**RtVqA;V3NTCVq9N3+=ercFBh3JsG)libY zg$aut9$@}a31Ouck|m3_&*N-*P#bKX$%#-U&wP_MxTh-~2B+o`d9 z2ay~QJ|RY47ot8l{y-IkfseGMhB-rCmfmps?D*Q}{v;~Q2cw_fC9Dg-PSzrA(w20Y`ip6mA9b2t*`jKRJN3PGE^TFV6&mjM6%^3 zfB~zZDXcPx$ekVEk3}ph#UYqa$?s+1K`9WRcRONxmSUOMeqd(EbLqIpNt56D?N;< zP4UE#oW~!u;sWGS@PbUIoJN8p^Qy1&pXAxdls;yZO9feH|NPC8Z9?q#@s^x{nj)vM zF_ztR!JFB7PwgBhy$#R?P3I`CP&>EV0Xob9_#Grzo~QjSEt?NCWj2p1VU{Fp? zi;9Drq3|Bg)dWc@F5KXpU|VGr&h+A7Uj3DNs3W2CO|JVPFcjPFt>iIBHehx6PS+L` z72uF#P1zm^{vdGM+1#H%DJp+}aV(5;!?WwEe47daf^tQz=-)F9lTcry7@}HU$vBa{fB| zgD8gv5iwtSLxv?@(fAKJ-`$pdI%{{DTUwx-Xiw%(8!kzp6YWwlp zFOTyO3ogBo;I3sos~gQ0?X=LHgZSh*{nHUUF!>o0J3F2)Ys*5ja1KVKFDWQk z!{NfsJU#i)N%>Tg9LlW+kkci*lI#2~mq?prKZm{bYJX(hoiA5b-dkuCZuWRnBr(QS zI_Ks~V|6Y7g*g{e+YOW@_(L4M3IAQfC`CqIMvVnA^w7%8@n}mP(p%j3r|alW%at+_ z{(F!LVKgcKGut5vq)Pmud=iJI+%5Mi*9B+pV-x21^b%-{!>` zO)jiQs(**+jRN%Z?#Sn4v$yYOI{ly0S#*%ET+cS-hzk0&os-q@6!M(8a>kY?-^IYt0E!>0s1NSp2Gy_9a4Bwv0L>~To z1=*ZKy&JCLb)MFvk;WoN^w825d*13`nRm=BQng2uF%%|R;_EbHwSc;G9MD3h8lAL3 z5A+;7Rvz2HTwbNrZuh>%Ut9qbto&yy6;>fgBh#Sw&LM?E@dlAizxKfx{`hCu-G6vS zKWis6A%>J+O|}|=!)w|1S``4nl+hpsiQV`9urcqZ3s+f49O$G!YakpR+nF9XAcJHX zv>R^)-47^7;A`!ztV-SrUV$k#Y9%an7<=}oJ%(x)g<}T#c5=U)_t;e@pi4kAp8?Gm z#T_U+5Ku@(eE8bWe+$;xOf#knxH0-(PHP8+v*`WDTq?o zveG)Mk{5br<$b6B?LDO-XTnzFts8N z-m1kS_J!1Aw;GGz1%5@{{#$6KepbrQi&spxFN0k?&T|g(Y?jwU^D@2~DYjxb+F0>A z9RGyu2=Bn_@gaQj0|vDO%o8^*;H``Qi`TD$D&Fe;^l&{19%u$GA1CA`o=*)vU?$SDl^$EcbKY=~rVv;Qa||@40rYPl7`eLi&gUICWJXD)1WNwp&Bf z9Hf{kf*~aCWJnmo^ZG-~M2ME7oX#b8gZy*5%COb_nSdb{_45gqGdG>>ewY%65y@$C z#L|H44kNrKFe7I$Q8_1g%zUGbB^I>nV)>yL-tsa9oC5(Ok0}LBurwdIPtjGkZ|%xqZnfDG8r2B*4)4*;L7-bEKXvU6_A3d zC4-P11RfXE_w}Ex@fYFE@G7msRlB$g3CA#hhI^UVgo@Q#K{G>db9#eHN#Hm+u4w)z z8BB;bE0bsxBeV^WD5{NkQs~5D5FR8KmX4LxN$u>(d?7m>9m4md&F|jW9XC;xz>KTd z=Lyk?3Sz+eu$iBpo#8M9#35OM#_{Je+^kdVDH?j&F-Y6O=8rM{Sc3fGNmZL*C9e@- z5_GBzKQWyS%h1(yyL`5rN25m$wUgA}{k^Jk$?`ps=L#09(b$w63px%29dYD8&vo?N z0o@kY(wkMx=w%>gNIo~{nmJ-|VjX6xNMS?EPbzf(ZvunbDudV2ND}hV9ymKM{=X1L ztk7Bb4NDLY&IV>LCIZ%$9=I^Ewl@y7uh=|-o2b7s&tPOB@bc^K?Xxzjuj_Jy!b*rw zf2|s@E$Q`v<~^>F^n`4twgVI}$n?O=y}RjKZ6$wnkINGFMvW%)ff4UANvMA{w1QO!pL;jk`A9p`@aOw`Qu^!-7!0pB z2uU9*!^l6qr6>7=Jj4W1Y)$o8?~A@@?0is)LJ^fX!8pMJSElM!){y&I=w2PZc0+vg47-0OB3$A?7!6U6A)NV62YV zOTp+bbRweu$e1)baC6cV^+GAPJS|>5K^+AX;>UeWu^6^+d6Ij^Gq16h^;hHOa6+_| zK05T>0Zn)(=M5}=(iXSXviYrM9jz0YCJz-ylQ^!k=@ONSnwBEKBBzSX>xtAHNu;)7 zK+e-U1Pd`Lm~zS>ag+$u;rhv_~&j^)t^q-SD4Ni-gE7^#8#gvyb=7PZK~x zr0Yu>o&Vt!6fk6;^kC;^7uS)R@i=N%K7HEMA_k+!xN%$CxKe@6$x%1pR3{A>gcADI z?Nxb;4Tq(NQhk5XvoogRpB4-n=1xbkZ5OYTe3%3#_C&S*UNCb$$J1J@(I>i?pr58$ z(o$=`KWjOaqlfSw>q~CpO%o%m??cnEf8YnQW*f`Fw`k(x+TL4LkSS(6neHw&yHpfP z;x_y*0+IxK(-9b3M=Nds>x?=qPp4o%-4c47uPpkI^qlM&KTN3g=7xznPv;6x!?yCS zPgUt$ds)h7$qoBQ--a!k>j@L8g_+QbaiDQfO)3WsjoJ$enRXN$#dX+j*2721PwE*C zqov>7kdj*f_GFD|w}PCy&oYhZX9rtxzr^krfHZhv%6uw0-3YYgw43?$(N#E?0t?!` zENHht?khj1U9YQo%MeF0YR3%fKU34PP__>4_*Ny|u+oknHhBZTfM&;}I8x$_RFT&n zK{3+@VuL)w$4bAz_#Lj~;&rq3x3#tDjSoM3V>T(X6a0cTA z#ikqM_|LW-PIAz8<1c?}>VC*M49qCWnR{eGzhsFa;Uj}?5}hWC|Vq9K)5 zLreGicx~k4`A+G4mEh8ymw1dU%*-1XkuY?_O!fFqkV7*LgjvR)?IbPO>WA@k2pHKV z7(r1Bp3JgX88&0vcEK`0c|O}^&Qsc4Xk~_F{Hi`BKR*5($J*xGd{mToks{ktrJ??waFgJz z>&N{68p=7|AGr&dY-vYd_u#5(-;0R(R2OaP{;t>3+>-GQYUDh%op{}MDe!vJ_&b%q zwE68zt(uUb(#kDIo$T?8)5J(aOv-=NhS(~Z&|Ftk94?wDV(yELx5RuCG})M>?5a{k zF|k-uAE@DZ6@&ZS9WTU#q#;lkm9Vj-9JS9MbFHkfPifI){ZmO*t1vfk@FcK?Mn8xm z7(9Gs{5Ly58H?r}&u zK=O0!hY?D{f#P77w+PX!P0u8DazH^h3XYdMC8Z<%SP**-|1CfP5xY5KzOZZ46C0~Q zXv1z%jf)1JkPgulKPo;V^t#`VO%G=C=Om90g!`z^lxd{L#}5!=fB5}Drf-{v@$CCW z$-gw?*P?seKbW|W4dg6diQ>w1Tx;k;_D3@BCip+vITIs z>|-L7I%4`Pabv$_Zj{IvYi zKq{f;iFk?efOJ`OC9J=|)$JTap)E{h)qgi+&NjjrIpR1Df5-tW87nkOH>W_D8#1oNexK8*w zZ{NfITK00HrvGIEOU(Y^^V>Jk9rRiO4eCXT?7SL@zro>a@*yNU&cG|TSVIJ{n*>na zFReLMUSkG1GnGVyUHx(B;(7r?xf4nJ2}?>Ph-<+36C36|fUPA4-X=f-w-Ee%icqB^ zk)YW<*d}YmkIX;%qP|DTG!zpNrQZyk(C3}(`QCdR%P-w~)W`){uOjcz-NMS>!tg?? zRiT;Is0%-EQil$;X|X#cpRp7f3H8wJj;H|5=YV$=KUJ1`yYZp2tHpsU2qix3Zl}s6 z{O1=A7SClaDdLe`3Bp9NGDWw3oX|qkMMj%MQw|~`BFfL#{=7qrD7~1kuuQvKaLCCW z+)2IKiiE%~3w?M%BnmbrtFbUOrLpu2APT*k%d+p$ zFE}|Csq7d~P9r`e_iCXOO}^q>sBm%2`_q-^Dzase-S_9`q5o1%I|gbT)?@2RNgNl7Ecq9lgPR!4zIi z3XBr;?Md6+(JJW}m7**B0}*Jv6gT1PZ52|W&cvgy^8_qK{(o`07tix5>MpoT&-Ygk z{i2WJ-QC?mWHg9qTp@gzVlX>kL}_!yZ#(lQmtRWB1P10wlo_XWA`tVV|H0UTBZMcu5b`l<2aB0Z9? zWV_?`rWtV+x4jFwN-JrhFv!X~(uRc;xq*TAd%^j?-9Yx%n-U(wVS;i1=C}(*0WfDn z9VDF0AqM`$ITx38*M(753x-M3TA`@v(nLpP{uY)-uqch68gSY;!{>=N8&AN)&K^(q z?i;-g+OV$}{V5IU2DSmp7(F8!$meK|P|DJz@z+@b0pRk_A-j;PorU^x$V5OXzF)ve zy?%{Z1lv6rKt6qE#~cnxg{6a@cNI{9o(?;{<0b)a;LnFP&=aqvpLO1$N)Ov(^T925 zq2SU%`n_(2L^m!CzRTA`Lh{p;(CAdV=+A`>i$)L3SeJ~mByy?JDNlgFUjh+iTQ zvGUKnJdqt(0W;*+cot^nTs6cNW>DV}Iku&D@@$9GCkT^dZLQP$$n>wh`j(3>pu?|Z z?}BbJW1{jVtFiA|tlLONDNk0{Bdt6;Pt$d)nBKfhk?ds)h@|wyf<53_gid5+1S(NXT>|9S$eI5lPOlv4>?XlEoA)F~7P)ihv3 zy!JI(Ucjm;t^u4us&iC}ZvU%;%kW-yIDHsYEED53YuQ>m9u&m;f{H*R4 z+ied(5eyaYfiL)%L_|b~annUv)+xeS!_m#vcO;lY;1-9Ys6Czd-1WovUl&vwJ}^)^ zRq38=7X1DL(e##m7()h=-RTJIA`^W5pfjzm8Ht?})>%53BdiRJOIYR3cAr2cs zB^eqHgB~XZdAt(eh1KS~L7?W)!PgOs-@fU%KPs1|9w&dCd7F&fDNZka!iyq>T{Vpl zf(G;4yH#`zaA8xo#P>|}`fH&o9gk0knaJN>ZazG9YVWjr@L^$QYyAT9D2`_XulyOJ@?AK_zq&dJBCf>XTrR|FYl1VnUH*298J2li;ZU{|| znr(qF4$N4bkCgUW0Aw{anAho3jumCnHuxCw(Z9!4zsjiHuF~Nu(^B+M}jK zsY=7Y1xej675{x``~~z?j8%u5`zB#AVIxny**fFk7nMp$IM~7TIU%cd7p{^fj%b4Zmwa#Cz=!pNJYZLcNKV47dq;WamMO| zi&>i<_}xCZMng9n;aiM9&;)FarMtsNCrt^KG`gVepwv}WDmWngnPF$@qgo(}e!<== zOQ#ZKT}(l_Q6-mwRAVyE%3=Cguz{p5d(41vM0)b$#mzqC?_Hxycop*vPLeT5AM< zhf6Fm17MCIj9%`Zuq*^o&ni`yZ`&FXu>~ z^B&m_f%x&G%q(SWNVJ%|{FSR!uKvE3H03d*N&e9(yq6*jLU1tk%7Tu%&zKES?G=%w zgWckdw{Gn+a9Y_lfLtI5M)JrJ3KF64r@Dxsh|hR+=?+2=CcxaUmKB>*D0Q$D9`+Rqbz#v>W$ze;+%fCE zIB^|XccpU&zwpV7#P<3?dK<+N$t z@og{Rq6Te*MJY;d>FIHYwbK5fhydG-*eP-zY^u-bc|0Jr;T+3DYpP4!`{C|#qSjJb zouCSAVxUW-!uWd-i%Dp%RPwRWv>yYP|4S$vR>TNDsbN022u9KYmI$|`R3EVf6}G++ z3zQeqq|)F7ajzcKj-^<)TBi0?3H^|NJlR+}TQfF_b3gq1HabRnLuDxI?Ki#HQpg4@ zEUmv6j6%j1JnZZM#jfzD>m&ObZONlQGvaICdSf54ZwG^y(t`)@L;W$Zy{DRhJLXtX z0C`A871bP=&gg6#IHCL$>r)_GRGJbFl2f?Oo0*Xkv&>7kpo8kx1%^XRVKJl$A!(M* z&Y67MNnDQO27Wh>vJCAdbedIb9I z#{2#3%mtfE`Y;J}A!qo!(|lp6cpL^mvGY6z#Yy43Nnpcfrewvm{9xk!?%{$3&gSa! zs2*jSbEMR2_j~AXKfO`XY%GB~cPz0g1z>k90M@lF-P)@Y0e;T|#ldc+d){IDu_c!4 zi`Kt4s2EhO=cXEHhy{2`b<-6ORGtL9d%_K&PV^ zYIEigAI!wb$w_is+aW|?;1u|=vTs9S+*E&}*9h5WLmZ;rh!| zYuOSRAHu{FV?wgsS{x83Gia~q>C9Ukq{;{i>jv_ix_J5d69DkPJiM`OsAOU znn7xKZ%+ulv)UERDSm0QgT`{Y3#<7u(27#!``h1dh{pMWEg zJp=a;*3Som7)kXxPAJcp(`URj)wk3VS==N;{m%=D8#^+cxB1*uOu0_fn}^4rD$e|U zAu&UvUoq5>Pt^w_U>OtQk14dd%ow1g}9snIFt-juBnY%(=;D{ zA=gv*gSqN_U5DAq%#keNzgDR8{{VbwXKlcScDztOEQK(sj!N?c`rd?;l%h-HT9!<| z2w8;GF0q-L;3i#T0g_Xj(MmhX{Ne;rgjCl>*GZ*$D0Vk=*0emB{3PjH0%9@#AW-tD zj@z$|8r(s4OcGU*GV)g8f(?07bI!wl!f@QsfVh6s6ul2{`>$p!8fRGc@B;SbVI4*b4v5h>n zs5(1K-wpjhs<}ULnAfz8EfwH$-WUkD&l!JQ6U{HMKBt=~@t~cr+FXTOD_}Yg3qbPO zz~o(G@M>_d|2dTtrSz6_&?B)^#L=GvWem_=Yz?CF? zgT#IK(kUj+p@BB^rej#!h~CF8CR>PQokuB2S>#r#vi)iyPLLyw@M`s~wYQON>2zT# zY0?ta-+dWr%9n7P@|uu(-9`quO3Iv#F+9Rc%3Q1y-UkVU@d@49a$1+GNgM$#w*o;` zRRjqtu)+g=7wnJ{>r^Xu4G083#W66b) z3WL(K9?46zGkgs@+R~Ih2tz3vX9Oa83mlyg`rBbv=N98R2o$UalL)~dAVr8(o}LIn z&*pg%C{}MXU7(yT5=3E1xoRY+IbVG7_bYOJ_PSV4iVsUL5@tduIiWnq`Rg?XXjbSmQ>5Eudx$I;x0~{>rRM^)t)dKVuN;oDJ5XmAzbLnw4yK$&acCs9#{bq)vaK6`ii%G~tsf z2$TQ#rf>B7>2ktxV`#rB0U)8<=DhRGro}J(Oq0GD=;@-$jSC%?M<)`1^K{VrFrVL< z)_+_|P;RVngH?{z=X0pid;>7ni$T{;nY3j_{8CcB2rvG)07e!~7oiOFo`YNHz32F}b*Rn9d z=|VK7hsbqxcD@c!f#2SFZZG~REWqaRLdyv)5FAAEt3N|rgcrfdMq96#Za3FRHQTVt zLs;h&E_6P^StR1sbbr%G!f*HO&8>4|l8El8eYkyghKh` z1c?xhzquX~-B?W^Bc`Y9Q0X!nSg{8KosrSpB|6*vm+JMl>@t~*eJ_)jQ`(pxTWsom z9{0=`8VVZLd>&$1 z8~%)VIW{tqq~75_jPad*fC2vK{&tPEP%e^=!=x)9;BSv1iul7>;&_ewfhvPrnOak; zbt{4_Ok$P4(G&tj4F;;`|Q+fX{~xz{&DTJ?AQD3WazI|>Bx^? zfxVDvsnvsEK$S0OCRS>VVV9xCRr%j=bBGJZ!Z$uQiO@IXbOc78xjD(M3R{mSwNd`t zmJA*_S^8m9>%By9;PVcGetq-+pLhBzvbb`+sxS}oIZ|x8Ota9q(+?=kF$!c>;cJ78 z9mgGuKJiH*`UHclfAPU2SJFTj{jw6dU0C93jA2s&&2VVibicbTRxFe8vVB?Z@Vx|h zL$Ok^>vMQm46X3W z4o3V+_Sszh((LOgoYjv-`AcCJ$6R=Z>F{0N^J_x2>N|3O;esfp(MwFXh@E-c%4Rxa z)heKS@Y3+B-Rg8)jj_JSPl--hlD!%T$EG>+4mY^YV6*uGz1c-#@K#KG+CtSLE zIN&>KcNhML1s)Vf?Kd&^<>C|{eNOZKxB=mDS`gYQ;d;C^TCCJw9$R_3Ogg?v^Ezf| zTcINf5Wvk~gABEM3Zhm@VsJ8VPNd<2s-Rqz)i?S6B-^iS3ym*6RkO(NL5Pvsh= z)Eeyr<#QJ-2aSy*9c@QPdiUaJVe&S5Hh~JAA(KGyo*nq1{aUVCNspX`v~8_W$&mZL zZ@5rC+>h~AA$*vSBA9Xo{xIeXwF&mlOhpDt3Z)5+sPjq}tR%4#f8)c^R~NKK<$d?6 z#N(NFl=~{&(G{sPM4-@-0xyd> zAb8wH6M`z;&+0gsS9o?w!dbBKJ4y$`aLiB);dkY7#5U$^RyvKsOl@SR=97=36JV_${}c55yv8>0@8iX~5YhE-Wi<<9 znZVdW^n+;U%X3rvT}| zwgUEnj_YZ%bzIn?`}ko@W?6B>!}N;v3_T%Dt;5IqoG@44r`*U;68jC{ka=U7>6WtJ zkGUPt%HffA<|ON1N*Pk<$=7O?K}ebN=*JFYsLUY$ctIB~0A7cA7+#9Xkk!_`vU0^s zjBtH%a}a`|JD7v1Ex=gdb((%4l*+KKt;}V{n^3s?ljwTmUm+VD+>?qN5P;}yQ{Gux&-oSc`+kOqk`F{Mg z?sEH;`9)22&H0~qrG~8yP_Tb3%KEy&?jLoqF$qm+d70co=}-2<$Sfg2xNV+r2NRX6 z+I_Ve>Kw-vv-UG~QjhUGXfkYg5w8A{8wCDLtI3J-~8L(=)XxTV=ExM^-!y|P-3t$t0IH{ugn211NBdiGaglb zw;$IHbQ@fn3knP6zK?d|=X00O4xMPfmLHF<_bH29;Wk6YpfKq!)kmS zI7gY|=U?3|tY>*RQ5b3RkJXAr)Y5U$v}%iisOIZt@&HigaLTl0mWB`L|*YFcH`7|=18F9aATMG~r6bbe6o^%&M!#h2F3 zgFSKcHRh3u>0AtZzJG9$WO6{d3LOmPiIySB7(}H3J#U@v6du#BM@y}&VCWys6HSnN zp{ywH(bB8Q*)g_u@BNC#JgqxsQoa-xBRb;_5kvWd5?pZE)~Vs7QSlP{h?ot9^2p_} zAryfnah)J6TH9hQi_EXez~=U!_c4)iK1e6m1FEtk-^6Z@q_JJGgm(dVvG%M7VvtKUQKy zO1RDQU4I{z7U-kR=dT|10McmUfc+?Klf!%{mBr`ba#k%*3T2(7)@%@`RJ}L`dbeLy z#5|r0sspsSX|e4G5Pco;;$GurfSF;&5ak$>s6{isvA$Nu6Z$lF=!Yao-c1pvOq#N#nVz;i_6*-J+wjl%jT>~D zpKIv~I<|7zPN~JboF^Mqf4$kvvg_LZ&9K~BEyfU;%p1XA5=zGJEcKj5YuXnTpUk8^ z1YRag!AR&FQjWmn-KR=2fy}T!Ut4S)2Jae6F0AOC zhLSkM0XNcc;a4L@Fi9N@)cJ8Q_8l6yd{_wan=sEGyoai!gP_rd#XJ=&%U=zU(bv5@MN8unD4M zI4;`bYqsxk)HLM1t0Pe+i({0$=|*&1DNnmL!Q6%wej~Z= z0bogziZ0;aG#Q}KYX(5+#CO?s%gyKE{YZVR@Kx$5?(>@GO+bI9JU-kbU(BPq8-<&K z8f%pQ*^8yFRpzkNat6|D=G1pBqp-z>|AO_7gx3In*eix z&#pW_?+&pvr97lb=8_ zJKRrHrzLbYwR@sWe4OR-2cckJ-47Q~x(S|`4-1_m^?IoJJ391+@#_#*_BO+Q$hgK*3OJfO)O|G$`|{ zy_Qve?^xbyrgD%MB`)JX*#I$S5D`&&3XkX$p4l5Kk)&|_OP0UUscH>6+BuL%7OCVi zLH?dQg5Z7L)n!g~&0a>2+Md~_=dSz6yseNpTbDqSL zHHE{Q<+Gj1IDhxv4lx*anAW}eX9q9lE0!{)$`K#A(sgtKmJ%Pfa zL3Akn*H&1O&+Z$|u*y(15Vis*Vkt9OqG5WTA(8|4{MK1>l4&ETr5N{7&7ahN z$TJDQB3F({{~;4^-Z?0h_pQZn;m+@E{8SE^a2wQ0iO9ii+yJw>9 zE+Fu$*vs>ONh(NTG&v#qs{}dw-K>T=d5pWOO29}c=e+bY8b29+#Wo@bRYNTvs9B0I zKXWr`!B&tR@|ylDze`=H1P28+%yj3Z-#n)$zK_bC1820qHrDpNhyHQcuH_D^9-7|M zEhXPb<9!s?rGGw)LIffl6fh7dkqV$`+_ot>D4`?RyN47|+!yFv{X7yvIwXb^h6ryr zB_!Oa&oe*2QEOiz*8}vjip9v#pkA@r!V!@>JC&&5%n>DTebc|FXvlUt_qrh7z%AKd zxq6I{jks@>{ompUm}7%KZKX68+UNiFT2#njf{Pay^L?ZawpAm?8^sDFd1jA=ZdQWn zO2S^^CspSaxi~}wursS&$^RmOV8yusmK@dmCQlqn$Zg^O`qb30EyX4Ocy-8Q-(qNQ z$yV_k6adft5bjZBmL2bYD}~wFJzC*N_Y37K)`d()?V6xEn>nh5;^}h+IB{&1QDYS= z*I@9;^$~Q)_A5Xzi#DdTSRG1+mxZY9jp^>sM~m#RpT)q?dGDDfe$IF)H=Y1=kqiyh zE1%NB39|&n`bd-q-A02@p^4Km-K|ToA!i8eVqfzcG4ysz;9!pZ5BMkZ8_Nwq|UDv^@d zpKVVmfiPX~C!{wh32UjvjdS=e+XI_2$OUAL_ElA>70Sb*y!tei24@AzhBKh{%PLK7 z7}kB5<>YFb+6m2(6)22!NwOl?9?jS`pq1StO-xIxt*KDh2+7d@XObYwDRV}ehpvpU zYP2Wr)kM9I^PbO(Skgwm%m+HaSE|uqlXW%O_dHB>S~_S2;izdG=3l6+f5)7ggxvtn zm@-VazX9B*sX&il9TV{?5I$>pIxWfVwc&|tL(pYzLKc+mvb zb}D8G&0AfZP@vK!@dn+Tp7nct2WNK>5k!2w{~&$^wk#wkUI*|urOd=5p9v3yT0|Nk zp!6q-UIrBj3&1@+Lo7?NtN4=lKEfX0dfvTiHOxf+EQ9;fo9IhMMg~ z|4&nA9TrvCt$i2=7(iiY>F#cjF6l;*MhQ_uLXeV1O1eWzP)d*v>F$!&$iNXAW@1fV)-sXV<&D?+b%Trq$V*pS|u_hfK^3?xtn|XkBXo0LiP>Kt!&!A6i z(X--y(6fUE^m!EAL|DVsvsDmut+$S23M73N(GpCTB10*>a_Eo9EKS{0sGsGAw4#w1 zo9C*1-CldG7*f9^6**X{(?`ns2B!U&} zY46UM@`_iTs9>$6Lidn$`7zf%56`lvNg=G044iW_8H~VhxId#&Z`kvJxGuCaql*Q!%pKEPY)@OY-d`y zP(E&ZmGSsR7!2IGzi81e{f{w@0-;Z;{ZqO|VIjwi>XsQ;PinxKRRStuP^hPGrL9af z<3C`!FhjIxS2*P=_35@P2CUj2 z-p=7B<;rO2Pw>Dwo zfbM7%uJ3t-%86E9__Z17E+sk5@1%apF_orf{0{1a`-ZW#3>wkUFJ*A%yIFNw(ycO; z22Vuv=6@j=&^us~^ema7hr1q!oOi!zpl|8`4~j<~a)BKK6yNVhByZGMTsjB(Sl4k& zjA~2AP;!100LcL$YrCN#KTR2(;L_>S^)AECN_zf&JdV^kc;%}Z3^T6Rq>oX50wPL! zsM<|!;TCKVj ze4IDovikT;LXQx&j1C^lFoH(OktQzSYx4mS-1*(cJ!8I?Hu%%1G8Az!v2iKyM=0fc zyJPl%>EqLh2=p2Bpk@AWaz7Ot=;)~l5R|%&srC}MhBI^Q5df+ArFihd%(f)4+G~2_ zMOF#>aPjPOpXuYIk`;nSnrV6RBmy@irqc>;$u9`><O2i#zDGO2~I zA4hv{j}>L%OGO)F?>%*diYwm*e9*6Dpof4w;qWHgawiJp!4h4)TRpH(h zm5Y7pKewlG8htS^eJgXSa~ir+n(tAIIMmF8w_tPPYQF zO!_F<#i+v9toC)&;0q~!Y;-ot*vAqE&?U$IjxUCWvlAODPXu>31=))aJSrBFkHj@V zSHk-&uHXQ`{-$mAA;w6Y?TifqmK0VkeeKNPdhW{hL#JU^JdbR_e0pnu(QLr~D@KKo z)aj_)w{@$jaE431{q#P*cca9bNg=B0>ha{B_q3R$0XV#Pa3%NS3t*NVKoVud!Gyk$ zY{qTi_AF%Kdo!LVzE>8xsEDG=m}sI0%8IbDvCM9^FA=`cW8&y+w8;jmYI?=@k_{Xc z_kVq^th)+0Sd?7OfEH-U$vlt@+Hw6c`rXPo)q)Jazhj(+pE|gNy}fO8=3OnJ2Jy@< zeO9Wq?*I)iev@ll4(x|wp zpzm}eJ!j4GO8*A5A&R=aXV%Yd_Rv0bHB!&{gZX%?#QG+#iB7>e7jT&hV|hd4FG6@9 zuWm1vu!%%^M?$jDe?J&~!ZS||>{4TSv6&rD9q#~;MyKQjuLXKQo_2er6gx%qdpOv8 zBGWthvpDk4#||0Mp)$E7qLO4!YL39-vmM)o5lcQKjvl^+Tz;tnET5YC%Qz+dGE)T8wj!u2Q=QU1a(^|#3{HjiD-6Y_@F4^ER4iVB@= z%Fw+o*H&9T_jw=Y<{U3yUA(sU1esVX0Hxr?UG4j)Mc7heT(0uGrQzwd*}NjovwR&j zySPNNg(I@U7vEF}6-&P#V?h9^yc(oeRlaF_dCSJwrVEqJko?%N!e=M9%*bHW0%N2h2YIc zuRe{8fveOel-AWt3WQ7flYkXOue9-4#RC+@569^4Qv@r=?|>e}vn`(KwO`L+&NJ`_ zjORRF4#e#T1am7Gb?Si!O5DyP#lK+j%gyjS~)Az?c1)^7sO2dLifXq^eaUxF3( zo6CodRsgf@yq%xi53<*4iYpwzOOU7i9t{7H2U$F;I<#;OC}Z+ayCYDE(${W5R8451 zuT=Pv$@Pff5H;hh>AUEd1O!r%kG@ik#ZsY2zjKw(44BB9pzSst6Da?3Ls6@S1K z;WR?@n5WY67MI=R?|Q++Q(M2_lAJGc>><)DJ<-(f1jvzwYo#`+yCYoP{YR~bXV{D} zV%G?eu6S(5HzRnv9FU!pXFLNg;&-N*dC%NI>`sncz{C z_tNOfkZyJ@C&QBrLF^+K^KFVamYUjqtGPm?&HuKqj90xPV2$&cdz1@Sk(;w!E&>Kt zE8G#58^^iMN3PAuZ)bnYOvu$ojwCKRB7FLlqF2j+o{3>veO zt}(suPkptD6b(F6Nw`E1SyN-s_4%G{60eL5Iw`z8Fan_j+k8I9W!AhU5|ZNcT|M1epz6j7tt`SoB|iv9adttZz5y>VHjuyTgZT z)qnY$V0{&x#L6|fRcKJ@j`e*78ABV%zDIvYwM1F<uswKUk__$r z2bZJutHAPa(F$r$^YoyKFQJ$gf`}r^_73f3VI`gq6u+eQ9qPms+A&52kHI5CLT-*{ z2L%P!vzJVE$mH!|E~&iMgoR-~rB0C^>&Z5vOykQFYdm`@T!A3@WH)!)B zP`oqtxhHB>Nj!5x6l)a&T$K@z#B%B9{|`pW7tv;$hdRBU}zYgM+_ z@MYmP=m0jDGIaXyRJh7Vtsl~twr2a_$CPV54UhGe$hOvrccIqq`$qz ze$?-#UZ!siX0of2Bp)Y+?67&Ml!ndtz1z8nA>{PlG$AY}*!Gu*^ox%+m#OOKn1569 z8QD6`whM3psIXR+9|7uMv$a@f(-K~p!w+ICMw^c5189JK- zV86;PNv5Q=wK;VR2)gC_+Mz!>*HekJe-l8=OHbb+-*g0;g63`I3#>MnFaMn5{-8Hh z36MlilQ@5toh;@r z=@)Ldb)K!Aawz$aDbQP5K=7aZgy$;5SW5$(9S&nLz)6)`rgZN7j!;aqzs4qmCcGu<~r>f`G*^)7ha#&y*oG1abrM zbQL$<(T^Pey>T?`nA(^hj( zQJ%T7b2%2iuSfX7Wj?m}Jk7aN>2J7R6l0c0aeF3XB0kAsA zTEzKAbg3RymW9*7m7z-P@}60i1i6_w*@2oys|xJyJakgax8-q8M*AX*ZPv`FX->67Tp|xC=WqENq;hT7JVJ7 zT5s<7!y(fpge?Pv1zXiTB%Go;pfo7bDrH1WV;JP}aA zNzj?2T|dgdO)gDzMajifuC$tPu(BWJHh>*w{F55hrz(A7y}W$Iq`ZB+A84kW==@zb z!HSY5!0hKY?N_HE)Br&wZbU2?@O@Iw>oIC5_4fV(e7ZM_{L7d{r!b^(m$gap<=cRF z?pm{hn`4h>^~~%Qa%%_-M$hra944qeJWBGE=(==iW?$GwJU@d$)ljE@mpLXO>Td&Q zD`UdTX>F6a(1>}kkCm9S88OR;sNa&b z{BA=JtCXkf{iJ7et=4DvHI>Isa}5;fBcXS7rjf9be+7!oRSwfS|K4+Mv*XsPVtprx zt);#+eyiuqt(i^9G==Znl(QkHsbZ_qjvJ(Tln(Gq%8J9wl0GV4 zczk^9G~d$E6Ro83HatW3NDYlb2Q_x^4mc8{=A9HO*V2U@V$WJERVtru^$R91Fl-6$ zZ~ohM3d{Z@{=2{(H}^m8htFjK1QNi9ivl@Vmk=+L+t`ugo6qMZeXTcd$7oZt~tx z6lI`*=Ob zhLDiINlz*vyOc)IO*X)@N28>Yk`A9|mQ^4&ojDSU(h3W{NS4qV9VosD@oxp1iRItb zk;>}M@Z9{R3K@K7{|k7$?!B`S?FX!%vF#XOoRh#lOTq!2`3|xuLVbXq()t7C*WV%$ z8NV>Dea_3*ae9>4`hZ#$sNthL{UB?l)`szUV-LWMN8@f%neM_2pM+9ql-xne*SbR( zo}h)e^-`h4HU!4mPGWt-DVyJv+44B^vV$*Et@Ip^%Hj4YkeFCnYmP`pzO`siaI@dQlQr{(2`ggoNhJ z{?3Hie`ra9SktZgm9dqEu)G@e}^ga-8>$fKEcgs6?ia=*{hT_bm=oDz0{4B_IhYfk_CH_jMC2%7lJn|S8CuMK5>u{>cE74 z`E?DwHOL3(teZZxA`HafiW|y0Q?0NzMGs*W(VJ8)7>L{st)fK0QRCq5O4LiwZb-1| zJ7>`Q=Sb`Dm!TdT=C%=|%HF6E?88Up(Y&+!gUUh|cldvRAIR3n~ zsLu>B__<`Q;u+2{Tgj2Ms52|aPo@>}L1lb=5#y^sxsWm=^jkmF9C3NnO{YSo z_s3QvjOoBh{iG*4c)fDa@8=tWvxsGjfL8Bv`}tApO1@5Cn~yZ!Hh5QS`2o*klj|l7 z_&RCd>ju!Yeh!zS>u^f(0Yl-{!^qVdL}oYLq?T)4HWKyILK>23fl?I~me9jM(reN_ z@Nw%x8S2X;YVd6RFV(^KLd>aqcT>&Vb?#&zM&asSs_N?z-#c9ZYp$f=E^?=`mASbC zbI}I!j4<6OO#jJ$h)a(4qT-~!>%V&D3>AwmjmCv8^S>w#UG47FY=q32)#1GIzzu(R zSHknAm9wvq($Yx4BO1icqE6&mL9hAJksv4Z8;(wIwB_btYInU9#j#=)jaogB^(m$Z ze=6pKP7~A1N|}3AHfV}E|F7od0BkiHI1zU5eW>!|NP~jx?ES@G*!*XJrR;&vKTe;s z!PLw8CzRT6{B?Q*4ZM|HSD;Ci#yGcn|Cj5MYVwmW`KGfC2H!1pB7MnHN%iD?02a9) ztffOJv<~lN>AzD)ZM7)3I@B1J496Q_nwf^n__+H+nHPZN zxovP5VjuncN!416E+l7lXcF7{d?R#LI3|zyBGEtX)V|jz4-(WYknM~u9Da7H3HvxwjbSQ-@+T0|evP_WZ8o+k zQ5xUUi1T8e9pXUaSH{ZpQot)ls>V!?GP)_6Y+WYU*UCu3i~|n3AA% zw7GN1xs#b_?E$hoq%FVvElF6ZCvC6t3!W|$*=r?lKCF1I@d_=S$R(Pqx8(xb`REmj z`*R@H&qOcqWD|;X#6!#$EGg24a-)S}QpFfzLTVo=K?tb!0jt_@(9BJ~EM5ch{iSal zndWp9p;`{U7_HC?Hg9pziOGh=&HwCv?YcK7xL!S2BM0GFmeW8-W%JOApu+H0%6g=u=12PvPUxQv{Jhv$kq%0PP#)Wr z67^9$pFEofsoTE0s&qqkQpB=&A1L-Q{o0cSP0{$D_zSdI`gY5tR=PO+9BPn6hb^C6 z=+*Y*8TP%M9o9(0yoXlJk}>o`(we}0#}pNEOYBxYX?V!cvvit{$(Jk;TD;!%#b(c3*$k)e{b@NM->1{^EN-XVLqs5#PZJpelChJ>bRGz8>+oWBH<^sVfcTDL(%@ z*0H`!$A`Tnjkr@nU88<$)~Xv^E#?|IhFIAm8R^8e*Dg5aT4gt@w`)mq!QS~6`sypP zMHi#c;gW&3R0|+ll0Db*FWTg>_oVQe)EYR7;und`$>6E@?a9=gbTs%r4eZKoWNfw$Qn_XC71s+?7h^2h@=dE4v*@OI3_P# zXcUUu8p884g8rw?{HxU3GZN8Sl@mJ*Wa-BJ4h-k)RpFdyfA=rU8Hp$zK_D_)OIa|;@b?@E)2LEyI(gDC{*;&yg&y+coB zb7`Od{g94)1w3s%bp}n7l#;VpPH81dJFt>nn+@X~HVrRWC{!#48 zADCY9SR|F>2!Xo}n2A$2xUtnqqyHnT?5KuLOddz%V*J2V*8Feo%kjKbQ5}}OLF^Dr z{QM=u8oTZM(#=BdMy;^ZT2ylR+^^c@+Czw`yIBVv@OtGc zIyV9nhQqDR29 zHjs6Xcs=n@in}TVv25mjq#%bi#zxn6-4;xHFbAd=sMp;iTiihV&6-ubSLJ}hYG|AU z_R($1Q>u6-Ru$8i#1sAD?Wq|R_IaN}dl-iAEM#pxz*O`5-v$G$!8(?OpoP)i5n)zC zJwr?IT(f^n(3lns5*?=4X=)BwBF4h_gVt#NT`iT4+WXM|=py*?=obJORuuvYa=Fd@ zDm7~F5(pbup+iFIfoQJ2X!hLvHv)`-ggBEEYC1CSKPyRRi2f8&$5|RD^(2HExMZ7{ z;Y_=;Ap20d%sk!V>-$w1`!$NZ{r+A6t z3HY4j&^+Nw$S81DiTWZ!TomSTf&%%P6dh|4@?qmIreyiTy(vL|fwpM)5_

    r9IZ! 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 z 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 V(uO@rJ_G(!QBuECs$d%Qe*gxt?$7`L diff --git a/docs/assets/tensor-parallelism.png b/docs/assets/tensor-parallelism.png deleted file mode 100644 index 33f25b117f9d9697867abf5bdd67512139209645..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 199650 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 z zcNfa{km?CptG`4MJ&tV!c@Bk;d?k#xwyH#E9 z`hJ;>5?!EeD18>W+i6cRj(lojL95*J?Y4F+`X=@K7a#hi-@#B++2N(p$#Wo;wJpuD z=ZFk+i=m-TY2P@lfIyyr=QA;ld{U>c`M2q z_}k(3--u#^h3e!W1fCMQoj75dVCO9K{;{dp=jzhk?B1h@e5 z;I!nWr%TttnUt0g)g9E&*r)`=+yFlBjb^;xF+PiWR~-F5KA!da%|Hw*-+2i^1`%wt zFplKN{uq)wMN+=6aKQI~CfhzAx`YtM3T!zZA0J%UO3a<$o?nyUlLUz8sPg-6C_9b2l->dS9dx0GfwxyGI(ue(RRPtObIZx%Ie zJZu?%R{RNASGqDh*~Yp|k-GAl+E*9_(?(w(#H(neiobO*ot9ftlv)j~EscT5*63U5 zURptIuyU0h{rT>vO8PL3eTNxgJjkf^2WM_@P5X==ey8R0EwC6bFhUW-LTn8wbu4Q( zP_)D^9jSH(HPIjd95+sLi0>v0ci>S8puO&Z7sqbxc&fbdCVj*u^|~RS^*n8FE*0F9 z5`mRp)b(1l-ADz+@cp-tl+^&G-{UcF>`X#=sHXA5J5Hp<3R1#E-$=@haoOewtsYVo zGR>x)(N1ywa1a)@;slvC^7n&6C4&5Nk?h~vk{s?`1TQ+ht%NJLQ;wVl72A0j>(L}_ za>}!WRq+`JWl>Z#c}Ws37-O7n9ZZ&5k@+Z>MQ2A!qwS~IZ_d2~E=oxPSe`#%uwM=`crG3|V z1_N%0L0RJ)7WiFUHrJAi=mg3hBmb#bJvHwj%EVWJf8IZNpxZ7`a~=f76m~ySpy+3(VI- z+3gywR;wKx3?kmBPR{x+Zjk{T|8#gcDg&0>sneE06uM%t_WK!9{cFS1&2XQFF^Sv4 z9otiv3O@noJhyNGA#|ry1VDP+@*645+me89l)O$&5Fcp8ywtDU^nU$%+3kP{SgO9% z9=Zas&}=Lt0-(NUYQ=^>c(AaECsw)q)tf6r{%p>EL192K@hEL-`AUKOb^Hkm&U4@gNgNwR zuAKfjdb+DZe&v!TeH=b2g7mqJy&uI{v(lKTZe3ket1S%|zn~5k+dtgWx^Cpe!K)5? zb2r`A*3r(U?M@tl6&rR|GH-~A`K3VmD`=oG)~Yso1%y*QN}1Tetpy~4P;tE15Qe#| zH6XZRoYh#MW*@Z-f}jVLm*X4fpYrZoPq*`O$2#T4%~z=#YqD5cb>k}CKV_gyqz8T$ zYR(4y+hxB|H5tcTX*=F03b#)g5u}24j1?ra=(zn18oy?->O!RJ5gbZ9Edu3Lq%&#N zltnOicF*84j$ni*2Yx6z()on+ISpK zQ<=7EDjV64+>5 zWYtCo->$vo{NOdARZI?3!jJ14Ax_sXIyC_ki*N*Ci%(F(Sz&{y?z5?hQ~Ul;Q0XM z&F$eEXt&wfU8Y`_NW&2%Q`j?hGer1hDI%}io<<9uZdC+gP&ZS_twDCd)tS>D_u>S& zi4{?Qr6GlayK3&FG5NJYb%Aa(dotj4P`;BE(-!fR#R+Z5hM0uDrA%G;%l7sK7Jts` z_j;@$(#pV$sOSCYXft1hNeKz>jPl||YYA)EC~ugvWakK$=SrNN%Lw&+H$Y169n=@> zQga(wYK8eZDtm!FQd~jo zX(z*TcQ%*wZfDDIT~~xNlK*ToL^`F|6ZUN^-5PZ2Z})I*kt+CKpLFI{&}$X_8J{w} zH}hAcz-ZV1I+%-k`u^}LMA~0|k@E?(=nR{7@zTAac;P*NN>DSL+@yDz#E5dYUSsXH zJ}#nE)SvkpKnB^-%Z8RroJQF1EL18?pAae3VhX5|*C}NMEo&HD7d&K1Q}HZB3&^(o zJke6u*U%P_IK;`+jp_PjB3WCMtBgGu@Z<`#`kP7x1WY-H2gJ71ZJiJbg}$|_bpc$H zXU;XyvVP7=y=*)*izw9dc7jw3gi2$44-4UfEgOY!yctn{WT@;w& z6R8|C4+q1kP90X#mW(B@$&vHIvyz??R~RTIWTH|H@{)I$4RD zDjYji!$+0ZL{h-%HJ3q8LWRwc_dTHOfv|-4eR|`w@N$|sfaeP#OxAIaTXPOPuxj>q z`hF)v^dm&Fcuk|wjNS0}>#+8{&D9_@84?wyh5Z%J#j?5ZAhT@ zTYBeb)DGQhM9GiB3FtXvk@X)ubXNFgAs2@WrIL~4U7G`<6u)dZCuykV{0zn^LlxF) z1uiY`>)62LT;L?%kcewhIzu84-nHX#@FuswNlk%k%i=UMu z3I-AwG5a$`kH;A{oFnEgXwP38Tf@Fhv5F3?=mR(@?NpQ!Q*x-v8b%9C&+rm zzyDLAuE;!ByuO-^a1z!L{?Wz%TE3uwqQG&|fKtO7XgV}j!mrC{pBk4%$#N`={97Po2-CDAkAka%Bq{7s!a~CMmD&-f19Zg%Fdu4vF*<#p zv6(8m!t{Wbe1^b<2`#@^*sVfAVS+&5eh-M5r61k({JC>D>e z3L_2oe*c-pw2XD9fuV-n}kK`Ov@;b^GloMd%X-thU3 zvX^thh23bh$ZG#vXL*Sg;ilcCQiQMHw!A+)JURaL>W`YZt{JZSk{N4cBvFv`#J1yy zO&i(3P+vJ%Mm)Uyv016LjL-YoFl)E}4(7pi$l7~kB9GlrptHPa6JkW}_}VyEHb>Wg z&}@=#2j|gXPU!0c{he5)HdeyHaT1|%NzA(1_=0qc61%bc#7>FD&=^TlXtGFhxcx?- zAux5bBABXz3RdCrsEYSoszxRP4Q zZZb_@rtL*B(_Btt3Rkbp)=Ek%poZC;o6_$-)ExAi;>9%(K*YPxMuP4+UZ)2FXlo3p zt^PM<`|JNZqW8wzKG5u!5RRXuEE5{RnZ1uYWVepv_|`@!Mh9-uXEKCfHyyOhe@9=t zz|_2WTbr#QQKFl5_(|uj-ffpbOY(bd!MB#@y!1DXn=D8aV#e&I8k6sTT`mR<>Rx7o4|4K;CvA+d zSc}(6z90=2I3eQDIw27^4k{EM*j0*m5^|qWUdZo_=(^-TN~zHcM)q4x3loO&AHb+;jkXi^a}$MK9@c+~!@9 z2&wK=as(1RkLhz#@Z@tGMx^2ZJ0fAkVBU?rtXR$vN((SMZQtnXHEz!-+=Z9$N`K+ZazLRVG; z`b+q8y3TJyuZg9Ro5t^?>*Fpw4QJ!8WRHx2Kp5(NR!HRmO+qUC9o0-wTO$;U6G?+g z_(I50PEC*AWggJ4cyfh&Dn@iUVFz-7?Pl3@251}mKN?%lsJO|@*rWC9C(Mu^G3ub^) z_4W#!T`L64pUx>&tyN}bRVhDdH+`jkI*3Ug7>P$!11D%JcZGYVx=D%Wr_BV)5?*Yl z(zKe*pLxLOQ%=cY>4(7OYqgXk1s4)!7W=YG#98=zFs^`k!@T2(cY91SqZHS?patFa z_-Ch1Dk=l4x~ADH&e{rlmZTzFcczx90&=yo?)8y)gW8XF1$7Xq-=nXX*#GWeo=Ly{ zttoZ_R~v&2do+4J!6#lB9)$YT&#TV`mz8;*2+=ut5a&G0D`^o(KG8T*jpQz@kr4JS6kNW;{LPK!%XA-$Eg20 z1^S7EK}7Mdn6C??gqXC8Rfk2=IKI@72O3fVbhEf555gyc8dJzG+#`Dyf4qXOlyca^ z3Y!f_pEI84^MwzHufDrHj(PV0iiy>5UC8CwI{_p@gv>YE=XylPr-sXGZ_^q~4ud*~*_36GPU=2l z6dYvQev*5)5AYUp|8WS#o*_x3G^KFZThp}?LDXsz;ab#W>@{^8KUjH#oc8AflKXC7 z{V6%j@uk#H4=07oEttc&YEJn|{e-FjBLe1q%KXM2f7!-wf%Vq!%a|<|BiTbM z{`+?Xgzwqly4kqWE9=FvnYV~@rQ=j^hG>)5es(MS`wid-%q1(yQQ=L7C`jkP0cH=s zH_!Z6u)%k7u?U6N{0Ok0MA)ueS1Y%$Iif#b6UG*gQY>`^Zl(ZbjD*FFG#Kf>FO~6{ z&=l(MP=`!v2T<;p#0qFT6~6u~=}$p8-W~+fSr(`j3Ss6orDY?O+@}kjsMMSEDcQF) z;b<*9xAyf7aJP0}<)4D#3vfL2tV6_5kt=ZP0x@{M5?2`X9E9e6gWO$_nXgrrJSJZn z{p=_pTwM+hx7(>(nJ3}>-#JLc6h_`WxUG2`FF%-HaEDb!RAt;dDY`YY z(R2ANFp!aGT6GL~)pU?H-pln@U1!oN2`0lY*l7FbwcSgHL~`DAJ6a9#^X+)JX%l?i zCzbm-y1f~O*7O0h&5ZJs=>1<7*boIDa;104?4j(pRJAr8@``!xlbA(MnnHnx?=oM+ zrhlIJR47EL>NgUQ(n){$ZA9^)!g8X^YxK~Jl@WPe?anc#gKAMy!_M#8wFLG@GvUVU zx(yNfSrMtiw0qp_3!MWSotd_$$NS;#ybGk;H}?E+yl)5HJFjz9DK%{T<$Uj!j{pP( zRiT0QVfprNU&E}@Qo5nsfkNtNMX(jVjn!rdEd=}rz(Av`fRpL?3sR}7+kcGtN1|YH zldwVRyJ~@177d?n1~M#kYt$ESBETXpwa>MGO7=NN zZTkK73!c-mIYvOv4#*Aw_tYE?#KtM6$``);<+YMFhyK(O3|^7?F;M1F|(dAM!IuA$e~XDo3@aYFZN!iRAZ*ePbGGy z$G0eppBhHB19w&&+#_g*NUu_UPmSrY^2d*1KNwRJ)kPSI`J##Ok|>6*r?#gG*2fPd z5cTN8Uv+#62h1DDz&Ysxk31Vlq5Pfs%-MVm4byU>?29C!$m}k>te(>_sFty?u}NLB zn&QBtiDdb4_1{<9<=i4_yY@MexGY;C{<$ViuX+6zy+@$ z@@!OK|E<`wORf+Wwk@~vlgCw3sN<7_r_>tdZp@A)kV zxe&S)Z0C;UemDO*4Xv+WBoicN!2&CRl(zPtmFs2q6Cn6r#6lstc(}E;;!>fBQ&Xl? zF|f)BmT$tvM5ch?v>E+y0~gqs;@QOm?k3*sE9oQS8E2PC6FeV_yxStoh^F`pVSy>@ zP)Y?FwUjg1FL<$Sxk>gdxv6W+=2G2^L-Zl>&5~IIFFtns8Wk&cE=C@RL?BXGHQXe7 zuWb`Pc}rJ<84iaT3Xd5Qgc)}5gd|et|u@ik|c5q z`H6nhc%t#=SFwQ&ecgiE>YK<;DPrc|yb57Y#@bw32rThwP9ltxVf<$7y~cR`I_7PQ zf=cZy1p#WY0vC(KyzbJb0!xPcOolZ75QB=UmHv!{q-m_+*#rZH8ZlCBo?V%otSnff z_Q2bokjdT?Ln(C%DuV&Zs<&FW2~;}iY?|fo^v;T1 z=>4dD0KUaQ3$kx65vwq7da|;Oc=e$Qja=J_9_8Sm$NpN4bO$IJQkR zb#*0^g>*y7Qz{>1Ym>m*MT8kycd z9q`N}5SgXYD>tp!Z-pQ0FbWwMs@AV7jr)E}RU3X!o4mg8GiNj2&b^swEsQG; zy?A5|cHn{R8|?Y)ga=T`0uw$GOyj>%fj`8_`!g;0fDePhp8R-O8t09c z-fhScS8wL~7CjrcEOzG7g5Cadqo~aTMF?-fQ7oD%Ictf2HeX9`MKa~D9&E~#ZyzTy z5D$oI2tyF6R9?4xtC;)X*-*|15@1j+`f{Y?ehWWuvy9}T8filxL2^P7k8!!@q7y`+ z3i?zEF~YV%CP^XhJ>=;6?zGpLuQXo!OLkzgal#!V8EZ5lp_TWOlViKw&qIr|Y_FCn_$VcDx}5#mOY_MN42uJQ7IN20#h_lQdEFfc&VYG@m~w` zSS{q3m$}*57jKllQSrZ5w49Ryx)6{14xETHC&@)P_Y z$Tp#`^G|$K_Kkv-2Ys>1ZXOQ^JWQ27EtU#=ZZ*UJ226?O{*cyT_qBr5&*CY=x%f$0 zbK!03)PsL~fHKIaKN_RLl$e&gL}D{p8lwYqNCdlVX^T?DL4HI9?t38ydV}rGAH+Au zKmaGXhCX~CXiJk%p>&aw^T9!oB}x%ZsO9(^AOZfnbtT%Ebs+<>^z9I2dK-#}DeHFn z%F36oXo)pnsPwgCsB8^lr~c?(AuZsaXRGZX^OXbYh34bZbBbVjeu2hIr`9iO8IcDnH zZ8~S0_7e_@bQ=grP~Y^qNmv+=egA_4n}eh~O-CO!N}x-jQVg;uI5Onz1x$8~;ul}q zsQbQRVqK*`Fi0~8QIn2EuIG|H;m*;Pt>iefZ6f2Yu&^-W1hULm%q@egwoyE=a0&8f zaPn4$uW^(XiMRd9UkGHL+6#5Nz{WGAn5d8SjMkcjqQ2qvJHh5y#cd%F)=z(}BLNcN zmIBsg;!5_7MI8oW!Z`yBc?2*lk-Gs~Y!ZrJ4nt|t#oT^D!WwJ_%rRmX_}Q6g0SccJ zO8p$eEgvIT6|^D-aPrTpojU0*ORHZvDRpeRA`5F>zo=;ACUtc+kJ5uu+Xx`qc4v_9 zLH$qmv~+RRkfn!@c!AN2nUJpnzo4!IsJ|t{ZQby}<7Zg`_tTY3689zZ?`CiIuU~N{ zdr;(+yZEh#7ZJrUbTkeOej-*if8D$`Q{xPw!%SumCbK%`Tl&b|?N6cNP+9(!vy`61 zzt{eAM38oHBxldMimm!!r&!@!-EoX(-rU2PGO?T2QvPLauIN=1JGBc|&mVcpRK!U6 zGpcvs=!~V08HC~efRTO1)|RJr-UC50wEN<6KRap6|J8WjDDEf(q(rQsW>*(r5FSKQ zoa|@Mx0$ol)YguJ#84pE!A`t7LJ$M`$*P?yOiN&sEok~;zH!vBA|}@Lnt|OKRF!R*h3S+|=}sx7Q|U&!JEf%?q`OhNyAeU@ZYk;RZUJeS=X^73{-{frN8!BZ ziGA;V?XBg7^`khIq7$HS%b;hZ5A1o#$!4jFi7&OrXUVyuI|TC+`^3@7C})bk8;(A9 z7Ka<$Ps{ZzXcjE6Ow3MEn>&2f+ua{y4~95E9x5;7LzPK}N>Zg&W#?0Wn<7h=6{AyU zWInNAHQT`qa4=e=2VSn+I#V{WbaR&MHhjb(ChuOU{hf~gftGF+vcz6>HUpX&{*JJT z)fkMrm#_iU9cUD*JAJy*C5_=DcJVFLdJDh)1<@~*x`^^>WTdCyg->0WezOyj!v#0n zjTB9T56hW!IXzOpfCbkPjeiNi1VM$mR}{G-^1GR@(oOfc3fzZg;(-T*?2&$__KT)k zZ>u_Y>n>7_uF{HjgJ6845Dg_jBPQ;2H z>WV$(Dw>CW-WSlc)2}ZT^LV3H>B@W+0 z9mv*d0{n>JX(9v&&v7N5DBvnL0tCIs+Q|M;Owlj3bV6~`N}$0sVtlzIr?*tO;JocD zrqAx@O6bFB3kD!n2=vF1$3fykfQ)pz`x_Y?T@+pz8CS|wubdfSG*~`lgsXYu3MAdf zN;bs3{{)?UIFLxr`$IAv-*~oD=XDW1j8bu-UZ?fsY48W_bvw7zf`*|wMbS*vW7ztD z%ixIJ!3FbfXon^o4oFZYefD=f$?w;!TUQ%xjU)Zao2 z8?hI4YnI?qbe2T+e)ZA%PjC}E$oI6|i$iaQc+S45o#w(I6?tp+SGEa|VP;jYQ8qYM z%U)+PEsw`p&~;3su(c+aOI`r7-P1eTW5x`&98?$t-|$Y}tz-W5{wuot>!evl9e?ex z?EZN_$@SGey}FmwN1r-bZ(Fs9215{oIi||^E;X0OA>0iQg{Y`j@V(KFh6Zo=Xgda2 zIYsMOY$LOkeh2JJPc5UaD&?DM{msal)fXyh{m1Jh(^-jTb+8*XvyswK^SMYL%GW=w zp?ZCHY2AhIqo)d%YF(t0E;*Inu=}zjsnL^xlwwKAzd9`-yF#8W@TAqKn^`aZ_%vT{ zsWi;b{7pB2f`9r-aCYt5V)!O6j|qe$gK6cy=3bf6wm%;dg6LULXea^+3tw!0xBmXr zPqy56_Kf}M@Q)x-9D`zH16l1@KdL z3%V55PfRQ9Jo0-I84V`m;%I=)iqzun*KT!RU`>O`fN$b!R`XMz_qF_3(HaN&DK2YO z7E!0dfz;Z(sM?Cxzi(5MmH#~*XdCy@@ryl^44W{7qxW`m=);xs<(n$KJNomF!H|EM zA?YoXcna<$im*9mA^Lv9P+Kvtr;8X+LNVG=nYT6#zrPBBD=6UqYe`;6zf0Uvb}nvhkK? zbGZIPhk#tMt+3#I&eVC>+-&C#cD(!bN5Ch2JuY&?Oq1^ifjuz%y5rW~h!baGa1Cql z6tDGIT0pqkpM=#k^u+@X`@6E_a843Qv9dq%NvFuBBMO^EUM6NVqFwQ{S)`VG1t%R- ztn+#d{8WG@*&ERhm!XPxg@xvYgO!%=DNGt86jp8b7dK%~dIzqJRP0@T{~leP+JtI% zCZxcS^E^_2=HhF9Wo4y=(A;leIkiY0O#Yj-J7rMca?|TBxfYwF*n$Y*yMNc5U7s6o z3(P<9SMn=~p8et$F8z}pY`UQjXC40)AD63F+#V!DOr`+fGJ;Wo1iuZX`0bdJMwBiq z#+DqQi{T;6fc zS-oMhgfbw}ImaL9K&@jgu9b2jVrLi;xUowH0;fzQ&6jq;(eRHGyisacwU;rRlz=J} zhTy*jpMg_X{Hxrr_w-NQwHh4N`^upA(h|iq%Ca)WV~A=)Q!WJ99Bocy5@ENbEHVkw zG1Kra*J}0>WTete_cEhMveNlx3=N9chuus~n-C#iCq)?-eri zlLHmX*w$yQo6(Pwm#%j!N=uOd()H(x8?i{yCgAxE>Tt9B3lN)c@`%R7D(}KRZ{1ofaq_lm4w;?=`)LO$tJD!2W-Y@L zV$w4l3Xjp3a5FvPZ{H$D52DRER3L4 zYDI#7NRQ#a;7(|$D#DxbILPwfT=dhQz_CbFSMo1)6(J?c`ASta{;K6*K~@ z3#}hkSR!`eIgi`)5NDXkD=09qhjGW9kB7kwrJc*;RlQ^Zp$=%jg9b158U&4=Z;Wi6wc(^1u$Xs$s5U zsdM+hv4bRBgn~YlR53$&JX2!tc%38+34k3yeAVS!*jXnTJgX{%LO54~!TBF}DJZZM zN^jCsu=h!x)7B%f^vA<1EM(pF2$f| zx$CPr(L>=e9PnE2gtlF2#uE#DH5rWqL7W34m(f-z8jIrSC)7t{+U5m$mZTA9Mii9l z0l<@){OC&pFfQO3nGebn3+p~{8~McQ!xAj^seforE_jFTuibxOWDtOyZ?O4hKgtsb zT$8;-%tkjm1&lgjre|ofs{~z9;`zc&&eh9n(xcDY?~L&=D;YmfIjRX)?=oP5_O01;zW?jbT*9qZsV+F4Nl6qttqSEG6*1*mS^B#Oq3@->_ zy|jHts(ERETWhN$IBmUldY2VZU+YfX3{|8FIX)-doz<4H)Nel9h3V~<+A59L;3)U z8ry7y_J$6};Qp8Zq3K~556ZWD$25?;(>%+`7+hJ(Njl3WcnSBNI{ftO8 z*wU7+Qt$Zd=nFt7(l~dvb%;sJ@LM;o5_zyPf02uSrq0W`h#E-!JgE=p*28 zSQUiyUOfIl2N_Z+8JR=j&tM!vSCYG^OQl%(lqGnl2w{~1mprVac$w8685lrrd_6*O z+58A5L1<|vx@AA$ip8lW52-MchJq3Nd-z`G{~vUEu=Nw4pis(HWWOv0cD#3N{Acq? zEk+SRi!V{~Ttkfh$9%_ioMfnjd$n`5Z&7vLPzXR-KzDT_XD(b2QlW)S?mcAe=m((p zAA~wpF8^iLOZTKbZ9V-E@L2~wL$&_)4{yf5N{G0(rvqc549fe1+IMZ+#fpHGyrDBFX+e z=PfU55M}lfW9SCfTowEN^cre*;`6`9LH6W6bAc0XKvJ z=0mW91y0#Zh?x@RN$c5BissG*uE12x1WwJw>@W5e9fS}@_pblYok0^-uHBeD@;W#+ z_Ra(UKDx&77ZE+gF!g{!pWUm4sXbdunvszs#nKa#+;ELxQ%Z$2abEnu?eqQ9jq5ha zAL-I}uztU2d1U3}GOD`Z0vy~}gInatf`6#q_kh~1o ze+QLp*g?kyI8A?aUQYW%^msY-1QjrOgRXAJX=j%BbZsFEd879yO+P9t$L2h5TmJfY zZv#d9ryYce<#1peFKP>hYPbw~Kvt$zXDo(4{+Zjg`*K5N(uQ|cq9`!8ALfMMA z^*D)fn{eF4_r+FY;S`gECNU2nce;pSJOL58hY%w(u0g+y*FfEW=y20(kGU^fh~W{o$QLF z?yM)B23w<7AEgKAtX#849ljxr}j3*VzyGdY*3AcP~E2BcG(6%q=B@a zqzZ-o;o7SViFouw(`*xV8E_{X0W$$4SPsrd{p3yt7uOXqZyh{ISF?Z8p8f2YPL;1a zs{X#)?On#8cbmf`0=DnD*x&u|MI!T{UiJuE?E&DK3&#$pckPAzyKgN7Zw?b z0wK_|__s3*<04ZL@KSF;E_+)Gv4%VxUQIc3%9Van;PS0&BzL}+fR2H`%1=t+@b$50nD}VhyFiaRSN!#tZQtUiSrc#|1WN!LK-vCP<@c#~rW99l;C+YCHM28p zb``$BsXU}sig0@ToO&_U!tvDJV(e-Tx`Y){g?;%AUZ$8+-+l^oBMqOU8&Z7}AbzX% zN2;we95;D!hQqXf9So2a7@g52WUc`)SV}DDkIENHmAv;_Vzy(+vz=Q>M(&FsfS|0o zBL(__!1^7PqaFQowz?0b8=#>QX^ap46#Y7xJ)kPoX+OiFM)VqwN(b)RCv4;tDKNn zc-HM56?78f{F_%}^e)^VKta!}njJQtt$=mod_$MiOid8+iPl@9h;EF*T=hp(tz(B~FXPjYB-59i%Rc3jB($q1;9ep46QO<{g;oSE;>nNv5n# zp~Goqww>DM8)zPEDSHR}+~mir%nhcbXcb74tS_}RD8o7fIJtl=kj_D_DJDOcXY)tN z5;TQy!41-@)8xA9mBvo1Xl$s9?Vb__nP?)(}$ncWP&#$auYQ#6jwud>;MD}!4oY- zwNDgZ>ZIr})AeZs`0x1F(CY zGx-D0nVoAeCPpP-?cERyi#|rRP9e6^rwb|yQF%zcW|NT zbJRkyK=y7l61LoT51=A_-pz89-Lke>3vmW;_L2pAbm0H+L9;0qI}&5Pv#Q5y;_55SK0RoR;gXl2CRD%`KjT6v}y{rBXOj zh7froL0KeV%w>bBnTJVHv0%oa_yLQNozcJSuqIdfN8?^S6_Q;|{h@R!i=y2V&aXl2 zst({C3Y4J2J?8uIb!wNu8$A~bPUojRDV<_wZaW=>Py>lH^~aFv67&UH7jmNLN?t1( zQSrAr6Q~~2cV>$9?Y=2Xc3M(su<47`JU_0F0!%R;K&c96^7)KKaN++tBqZdQ`=J`( zg0!fgV7qXsyh$_RmcG|d45OABaXjxN^ZcENE?)6b?FTH7E5CMZSrq$|+|_JPeW$`D z2$&DXf*_FqSj6Y)ni4XG_S5MD&RYn#+>em;Csf!-?BQQ8G%OPd`sbUX7YO*)5x7vx zL@-|Ff`9;%>6HZ_FxXu*j0L!U?Qv=lrH@tyyF1VMj20dWzapMS;dqQlt~lClS&M2K zGBsP+2dtnW+>_|PE$MD0e*>~739Tk4^}ltjXxHkJgvQn;)XQy2PSO)%(gZ3cDAZWO z(P|B(`8%Ya4T7GME&#kK8Ek9}hQor6?ETS=3y=ccz1grKoOQ~q+!C8URN2y{cejDm zo*lQPX3l1jRo}`{XG<@!r^3paGNb*tZvX@)l6FUuzCHjR7zwd?52Ufis2@myP#rIil`{0BjCk(@vkENKWxiRb?Epl4!I1jPHrLAH&J1q{=v-O{MftmrnY@aAM<<14Eoy85D#~lRXM~#rP?4b8{4DM~sK?lslVr%?c)j!{NgIMwOkY z^FhPsArq`e#nUZzwT@Av!0vQFA(t|k<+|PAn!=J+F2R;op8JEH0Oh#h7b!ddYIo>f+<| z{uIh@NnLeX+E_jJdmjw7k<*B&!e?HJPP2Dqmu1;CYI7!gf}-4dZb?ks8yGVt_c8U? zEhi_h$`i_~OM3sedJK70GTPptx%3Mj=J93Ac39!k1sJM+a*E&fpxxX`qDo=#R~W5CE9 zaF{dinpRV=IWUM&JHV*{1X^N*&nj=+jYD_GI9W*kk1!w zYBuV}xi@+vwg^EaKr)&zwzXC8c|xOS!;#`QuQccEDzEPL>;dO0q3x;rr_=PZ>Vf>G zOV1zMT4C|`?n0U_;&9)Te7Rvdl$8#C+v+&8r~Z!3`}{A>WY2h_v7~8_jRbuQbmjJg z?E%bH9U#0S9J>92mC=oPkzI5IZa^79^h#YMYee$Vy1G)UPdFtg+fgdGb>6iHK*%efJ8w>RPyoRLO;%~cQ|HhY@~ z98UV-Y9J(@$TwwVod%>Zw@i4s;Lh!ZpONxhPzp{p;Q=qaiZ7-b;9w1O41;^yYT3e0 zOi~S!!2X!bmG?A&3qgiouOL+%-@RcUTYE8gKl07N=UgKFrBF%%Y$IQqKq&rchRRHIr$@dfI zIy9ottSkX;t>FNPnNSXV>XMQO5W*lxEB{!mb?1bz95NG*)_*X%RvzDvVl(I@QOlDv z>Le|UzV-VZ;OJZL2UkdDdcKQ~#jMd97(>icD(MLhvJf71<9QC+!ydwUEAER&XD7&Q(>sy7K5{Evc2R zZg|3s*r$&_TV^<*&W~p!Dw%jp2w4w3aZoi~HT~IRM1sjwghmg0tfAmFs$bY}Y62~f z8;-o-$As+c*sCiSKts+4jAJe?u5+)p!I2R$;P+2RNtr2E6UL|EHg*`h|K#X3c7~2wW&V=cANzyAm5P%5W8%UL%}iIE3k3duhb;_i^R| zf>>ELPML#>`U|+#!&Mw{&B33ui5ALg4c2ubd7 z7F7Df9^jf(L_E-Gh6SEXb$F(W;oX;6OvcQReL}vLvV0{t>adok8>1mLOPn$wDtYV# zv2hq{t>Ksb-Fx(v=2>C`Fv?xA{`$|wtu&NyZowjL!lhEwHp$KVAQJ;FN;(sXb z^EB5oVR~MGsVD12{$&uCIq0{)#_(RP^@*fly$1(~!EW?4)C_maavT1M*sRudHY2sJ zz-SOiXb%4xl+S{z%m;k*-|KfOp{WBG^k_nI1c+aAh?YAuF)_ub6g8As!jf-**1g-S zDWw^Uu|SGanh8J&d?{hbnoQj#>6)YjBOUlek)Ki8m_-IdTyG>|wgbKdIUc&ONX8I_ zC<))eeLP)@4azVx9HF49QiYAtpxmtKG~eM*9*RyHnKSyR6y0QA_%+}&_Tfi0 zs0CA&cw-!6OhzkYLoi&ATv46h$eSk})?&3ntL_7?UE6yWVTyBJBd<#Dd zH_JFnjw?HFNuELPxYOKSj!~&hOO+oFGQP@iByHZk=QIm-D~}J9e=SjEwO7vP=~7?= z;0yLS;XuWx+bU@Lwb25*Bwh&8_3S>k?8}}d^2Mw)rC5xS-RD?^U&V{96u9S?Rpxv` z<*^c){WfKPXL7*C3E!74vN5H+@(QEI@0|00DEmy#Xl}r>%LY%P=(`v;j?Vdp#{@?NJ*&VHFv( zXYCKwr{0F3ed)jAT-?kgB{!^-DASkJpey@3M~{b|lv%lltUYPv$**x7r(q)fX*h_E z&CNva3ci?t@VCC$rD@z9ymT>*gHe&e5S|15CT*x8NEdOPt#4z~^2Hq7^^v9lwHMOQ zT`u&D@ah)|=<-EeBY#KsqSZkRs6a#8SWW|FxppvXR4%vwQ;xJ)|Ls$G2D6Rf6!P0@b z*>yyeAz2=;IsUzZ+RP}c0bzH!^j99ne4ICF`CQqvW{ILD99_&e=`i*E%zHj{4m^j} zHW07nEv(=2$BzNv(4Rw&UG(0GVNJDyO8qx}@DyRia^IQ8J2M$<+J*@dh2MO!ByB6L z;i&lFU~}7r(GMZTy|eh;394EF(n%dEK-0hz9&9^=LSCG$25i6=3kwBc1$Q9$lj;>? znXO%kzcIxXhDILy_pj5k_t|t5QxpN_8*b$A*)Cj+p*2q_#qaQe3d|rvytMAfJ3&|_ zRm68NxB9P*Jh%8hI(?Seu;iNtXG|L_ZdQOl$8UfehcK9ZZ&phFrFm^9EO_ju^*KI> z3*MB#-x@7F9A2!-BS*x`G+cltJI7jl(4gL*v-W@rna%(Z^`<*pO+WebFMKe%4`g1c zR=!Qr!*>}{oI--&~bMv*?ILp$>GzVWRjR+9SdJ4G1eP=Qi6YN@Sai? zW$a9)aGslx#2@yj0|o)bT3BL|&G_qh9-ou--PR{o@Mqbo z4+S^t$f+LLY7c=4gt?dmEi=#c zFR2q}0)4NQWEBVAP@pJG^dN5P9`mbW_Y`&JID5E^zJz7QqxT;5g3=@LJRX?_+6#z! zbJ8=#82Sh?yB0ttTmfq{!2 zDcr^L$$~H~t03_3{;Oz>abZtYq#(c4@MZ!L3I8Jt2|6O+hU^M*AO?!<>wQKh8@|j& zVzPtQdMhy&n{q(hC!S;0(jU+Gk4qntc+=4KcEci|fvBP!rjn-J!N`zWILKQ7cwgmX zH)m_)cXxNGZ_QCM6+eijsu+W^$W%U41PDK1$(|TeDt{TK*LxQ{8l;s8Jy9=3qxim=~{EQ|QG|Jy9IZ4BSPBNrfAM04Y)x|s872Ym_r-E5K7TCcN zE4v#N1o4rTV!hfPA*ObU%$~fE9Qf`$hAUJA<${tB$s?hDcj=Mz*mo20+EMqaMs7fYbleXU!`rYO=d9CKD=kV(Q?vO zOEjg4Q#=#`Jq5*cYQTCzng+uhXFxC^D23Y)$wlk3mx(G!rc^JnvPX(;`PKwi#q9S& zX-8mrE~DowJC_Ty;T0B7G#H7B)N9X6&6!j_XF7;?6g2LEX?C{YvtSo_Y>(O8KTi(p zZtrrY;DMafZ^>ShbRqlOaVc0r_K)+F)g6=(qDfXqC=e{z6!i(4_)O~IbS^J4q{QQPmWFMH}*ZTDPe zoJ|+wLJy8>zBk5`HGY&OPK(K3k?1~LE4eDPf4au-MeJ;j*A$V5<4`Yt%Rwt-sR!`>{ zkgCAOPM1~#LN&C%))ofHkkF~@p(LrhY317%4yI5ND^b6dIPhBjHDv54h&p;&qAgbn zbe6)Zjb!e?8JW@xO{joF2A;k1Vk#-BDf)1F)&C0vH;A_&)y((B%fD_5oB4AQ3>|5T zO1sz-M=TLGhR=}Jp+l1b8}t2HEwBOBDA zT2pf^KG>vWFzWv1)~}(L-4X;fpLb-nUYJ5;k&{>Sfd zK2ly{tpQcF@FVm=Zt|ly5g^)hC*a@>a|}y&JI8#WYSh~&&0Eo`w6>( z`=7W(5}zeAAw_KZO8-wM66^OtV!v+I#s2#3J}J1)v= z>`E?&s;;M-wYUbGomoPH&(BzKOkFThxp9PbM*)AI$nLTz8J-^o_S3!jup{8cGI;|^ zEMDa0l5f#){8U5o=U=)3({cdPW&2rDwo(ZE zF+jO;T*)I6Y)u;qq}Uq7{6Vf57OJ#S_rESLeHy04(s8O!$cyrY9`N5ZdZ^ZpJ)++w zYH-LDr;^IY81D|Otf)v8cP2101V@0Qr9^j$(f6jLtt_Y-m2Z8slnFhkL8Sg)_sjvTvS4ZE%fRbaf5UDwdSq~e5NmOusd)@saxjG}Z zaqUHsmfSH#kq^(Pseh(4TS5sA7odYqsK!;9$wNv~CEeohnBuQjd@Fwvq-oB_1kNaM z(T%4|mCs!-AgJ8i$4(heghaDp8YZ|z*Z%qGj;LR`%HUiRC$b6!riLKP4LaSA*E*E4 z&SokAvyCv9QWj9yyTQB=3Q8)LY22)fgKmm&(Mf z&|&^)z@xt$@7iXE+lce0A6GkYD2W(Ou~YyR%O$#( z5h(v^f!H5OZ2T0lY5AVmbV3|Ckt!At!g34E++Y}}b{wLQ1~Zk3vPbL#2a4#m;i$Wi z3yvl{oRuqPcmFgJ*y1CKcST`pO3f`l*`2=ro@&?pIlZ8n@!2;zzes$y(t^+T)Mt8H z`_0?Q4GD^4GOVt2Gk0fpV?PG7NTC6+C^|zY+|#Y_i5K7A#Q(`^-pUiN*K+M>6vYfi zfIerItf=?X!Yk^zQ?UxkdN1($W?qqJ9~1`1Cqn9nRncA)xgK zKx;ylq*TyN1%_pSxQsSJ3!uASK(P!Ur)Wah9;uw45-t1yMH$ej_#kT&q+c4ergB~q ze9rEglb*au>9tIq7N$vVMAEyjVLdeCDy?zZwvt)s;Ds1Kt8{*ym5e zHm93$Q@H&sSEMroW0=l2p|@?n%`wAIzS62ghS85A*>Wtk>-$?J!A>H^jvX{*9I{|N zTeSFv@`G!P0@H#FUL6%7vSKDn);NQ8UpK9lDy9GtYX*)mN6)#ojH~~GCD^_sX;6nR z`-(5KVv?iWu-qyp%F2A-0Bxkp;%9F4a1CWg;s{L1TquCTQu0?Kg(RTlBsh^Llr=MT zux7;_mTAp&{tFOuELGqv!x#yHEB99C>E<;?;*wy)hx+4fa^H5dnGv*>-(fw{hZ(=BiC>*XpG3O*W?j!67zwMnbO^EC4{(0`;CP zb)UBoAkDI%kPaO(aWWslS4YW`0B{Nb^ZRzY9^}fv!qQi%UC((5FtLp zyZ~dm_(M+zk)gb>5;j6QOR(R*xt5qiFfD%{SHMC>il(wO;~5nwjYEX|YNu=?Jbl@q zSBeDSS99et>!E7qf+{QRkr2e@n_ZdFN%>!a{pA8@pw9fVvub*1P4V!oS7GZ=v!0g;>JSnQD+ z90y;@Gacx~YWcYie2&*PK6|Mn+sw)+;!y@{(&&!j>t9g`R0$m8x3HSWk3qMIz{)ZU zkUK8y7$~;F@#A7|H^QP}*=cdB7b0(KIdiGA$n3pq*0B7*dE0NDjc31X^7f$r;B`61 z%%}WRVadJ(e=>&d*A9_HiB3>NA5cXtM|PI*x-bBwtX__Y$`u;$gl=hq1F;mm02s<@ z5Lc;Fx+xB_q-o_*x(PxS6vpo);L2Or&Z-RB)aJ=wE5s9N zy$RV~{P?V4ETSJa;u6wUP$6A!v2BRkrVCbIY4wS<)(7(UER%i;)mhIlMU#t=%^74s z4kitXC{Wz?%Sf8d?QPOKWjc_75eOE~Z~&pKqJ}USoG5?^a0X40A0&y10Ed#UYMhSW z)o*RVNR|e>>Uny_o=5oMxZW9sdM>$A^hA@5>S$Np(d+VufOU-Qp4W#1v+>xlBXevs z&Qs|r6d6wL!3280OiWY?EMeM_>M5T$6gW-dBm=?^l=-f-zaC?IWD@7TKrFB+x_%*F zghJQ7H5HTxDqvDTZICq1cKe4nRWW+hUE2%+Cdu(1EZ( zEVErNWq`LPx!*(96WL|DdhHRh`>P%@5Na<|g|w)*Hdu`ERdtYlDeymylJj@bG7uwH z{4{rvUT}C+Ue07@W(L9OL8{lb@3f$R%bGL2bNg&91Z0vr{G0I=nYZsX8M@zpz`se)HQ28`PpeE-G-CRt*6mH_z6Z?V-7UZ_%trT!m)XM~jb(pXs5MT3G3M zwe}_`%XFNJKXf-Hwt$0wcEj;KCLBbxmXMGDrlp{fo$lNZK|nTl^k`e=@AhYJ5FPgnpf&}ndO-|_9WY*!HIv1#X(3gPkn~RTHx!QNt^}=L z`~DE_6m-90(rDXJb;~)h;cMMIKY(c(V7{il+e3!%P|?taj8Of_UWlNCJ?>N=*T3k_ z%#G%aid*-Dq7l9oZz{8UKl=RbqxbpEzR;$SXJ`Mk>=#N^i!antjDyK0;jRNyumiII znp-fQ#NyA`zTko(YS~DAgV?fu=tS$S5wpg+qPmQmzd z%}lc0R)c-7UyD#z%o`bN-`f?ra{Ju*F!9r7z@JXyf%$y$-`4GEOq=7i`3fgoDPKNp zC?Veo-L)XqdwXvcgDjATkTiV*@!^9H)nr0jZ1-0&@(rUt`{<^>idw0h9|J|!rGQ|4 zQ#s)axTBnxl^=s6{4qGiX2Bv*ik#Wq|KyOTDVc4dnp^N*yu3Ldow{ThE=nR+vJM6V zoKmHG(>dXgUU6*3Ih3MM%q9oS*#1eN2G=lYU!3Dl7NeH(ll0lCz-ud=A6#|hwy_k1 zN9gtN{_5AVk&rb4@cxNB9E?N0?*!ZlF!f~h8OF~luD%9f=3czwUGk4`H?vz|$sAtz znSYsXX@g7X{OZU;KKl-Pcib=lsEme~`8b9z*R0#CwV15m=w-aL-kM`WRUm=?z!T!X z^-!NCviB15G7r?}W|5h6RH{(r?S2Jdpsua`8bU(@Z!hSdyy>qs?g3L(bxTeX^om%K zv#Wa3b)>)qF|wFO{U3uC@2aPSGH{eI;h=%2n5+A9dsowWOz_pNE(-Nu(cUAy_{cY| zxbv0)15M8?q%pgvSrka1Tnu!Q9kwmDdg3%XuvuRsjPeK&bg$52i0U{rDL3_$RoQIv zh?Od-Q5BNSfnw^Hc~4vcw`1V;_C9aXHAQa*RCDNf2lPL@;%|L+M&n znD#0IFdM~?U*}U|PLasv9@Xusare5;Q6BTT&|S>S>0*1MADqcat)Cgb&|W-ru*pwz zYm~Hhlx5@j&*$7W-V?8QRS?--SJ0lm>r;nO(}4G6I|67K^iZ4+?>=t^Z@Y>Xh31HXS5hPM5&G=1gmXV$jR)=+Hlm4zy`WMM zCne?YnFqw7hllnY+6x+SQsZeDm34H6LFT()Df_>_hgG^rkHHSi@S@Mc^=pPiQ;)>g zHXWAeKXV3a)VfSzfjfgzWmiJ4;%8>z++Q2x%6S%_mSjf)4 zk$~a%)J=s?Yr5Pj^HO-tcvH6(y_tkkq0+gmXS${ss&p{aGh6=gNw$@-yuy$&FCf&T z%_0^Lb0X6;Mg2DV&{_)%1t0V=I+)<(PZd{~Q*qM6d~j6-x7|Ze))wT21AKiJyf4;; z^ZX3h^+qYs<2;qJ+Y{1uaoKnVKH~C|Y_FEWdB>HxYA?U~8*0cg^@S354 zAe9cSR5781he{d@zi0 zaG(=h#$jfe!2*znoKSB69XUl4^Pt-g#R$+xOX!3KgTI+qF8ll&(5ta2ldNlKzrh1Q zlg`?)hIqM$u0QvWH0jqN<+?%Qzu7AOCD>M|pR&O?qWH2F`6I>DZx61Zg-c#-OPM4; zfcI1*GZ3)lqq$74SYoF=he)BF#AOCQaK?YLKz;U<`o*`mU_}xw4Sj|*YQdOnQE2fdkr$s$W=t6N+UYC zDAB~n`7PV2>-}(uty=q(=ssfCBe@kFQ8p$iX}EK3`RO8-qBK zYazQY{MT8^gSc=GEl7$GC!43|6C{7)cSyy$`N9dTmr>qlZ3OPCd}%q>_zD&uPN^lp zTkNSsDH{P*-{o*gJN39Ps3Z32#K>!+Y%hLYTy?*-;q((~Ca_#&ORi6(_Bwd68@m9jMZqr5(&<^#yz1G zbK9ygw90`zs&wWQYjJWrBE&$t7{h}^i3%lC>eP*K`KU~xtJiQ67==wj3Y`q8@&+^O zw@&R*hBlE1lW#PuEx)^0TO0ZgYN=$W{6rUr!91bzL0`z*ERfko3ZmArq*ldMHzGBT zjGO`F;XN0G=);5wc{o`WFR|BHq|~m$KLX^jKJ)APGihkoQd6!;v31wQ?|OcU-7i!* zm812~In>*8{f?rD{)j3%932Yo(HM>K>z^zDoOdZ4I>iFLM4(Cw?5&j+ zNxS@oez0uHLlM_k?q2E1@txWBVy4B^y zI)Hrp3Ihcxq(LL*HUbyfLyjyoe_r&Y`j)RBb((h5xyjr4ok{4DWFAb%CtAteAF|%_ zrn;mL-sRg&xsF3GHQM!@uC#DCTM!d9_rvrPCrRd-nnKgSNKIUIh$jFES zd*3TiV^ka~4&4cYmF!MeRaUm~FJwP;8!szGt9eu#>k#97qQD^7^rYNf*>MWVMPa-< zo>B}Vpg`E>hW{byETf|SzAjEmNh2c7(1?^YNDe6t5)#tg-2x&o^bpcD zAkB{!>24`0r8}jiL7vP1S!-Uv8)g=BzxSSd&fcGWrr6U_44~+&g_masnR1Qt~T?@V?J0(sns~KGtMA zSTmKYrBY>pE*TU07Rmyt4wY@?oUZRM7&B3^hGGNZ8-V-^y07ty%>`15w^fMWY}FYI zmR7I`zmG6v=3mD^E$Z4mCR=*>k9v)L?9+sxMual&B{j0lJvT{3KPb8BIDu#E;6ZwX zn<|*zuf4O)Ash)wAmD)1Vr6_kZO8Yl?D#Jw4%i6*93uB#l~UroV5|6s0q#IhmqDA%;$pcJUW}WK0(yeTwKB8mowVdIV}>Um&Cn8tV}Z@k z8S4=!Aq5viYet_wH*r@;1Y->Cs3vX};R=G}C4YqRr!o4SKhA!+z?%Av`Zp31a0@&C z%5=tYm5n#{DAf~0TB(TwIh!VY`UC)gNt8&nWNn~wi42$4O9!-0kx6Rka@L%Oj$ZnoeT){z z?fGywID92*!p~<{jc9IeDb3F_+&d$c!MMS!CxY-1IkDt_rW{C)blgYbw322;YPQ_Q zS-thUeFX$#AjWcyjx7~Se-YbRjU~;{ejMPtT7EDL0oq$yqUf%}I)FST$d`?g3b5b_ zh?9UuQk8L3$^rF2xz7b>>Rr#})XA3fzX+0&ix}1<8kFpvAi$#fJS*&Us<~`rUyyR zn3j=?j`(rR0E8s68w2v#i`LQOltS}<--(VKg%?VowjX}uEx;dw=H8ZmHIK}u35*?e z`JH(zn7mUNqBVvcL&18JtWDFI(xW?mn9c_oYSSAlAhi~aN$3~ zYPd)d(w^Du1hkkazUPPNgYQ$c_B2N&iSw5*Hs>@Bg$PTKQU8+yT3l=#@ztW}RnFc# zk53k^uUD$g&&+E!mFXCiYRo8N&`fGYEH({TGIEvauFry6q-jcia|#fB)p`Jlx5unL ziO(dY&#ATS)1NNCi_07CVBRpBLw>lke92E`5T0=pE%{*oJG(c14Kr+i#nUr*8uBn& zw6B7QO1e`5?t-2SL{;kMQNy%-XIfa|fIIW7lyG60rjZDq4o&~V{4HCcm@Uj#$#11X zwY~4ZPemtFRD+oINNNg1_rw2%Vs)ZvvIK|H&I@VEe{buR9P=>B44_|8|AgZLCa@(b6}fF@(Q~X%%VmZXGND)A@+3i_g760Ty-A z?9gQgv!zK_$BPOh;zz-WaVLsWmhdxB{;U`AU0H5ReP8@tRdo3&^=q-~X#vJiVI(6} zuOA-hEnV5Qp(E*L)dYZGoGRYw?u_iPKp!7ls&^2Ll=5ec9=0bMwC_D6hjS`{tLbvl zi{`NX;h*I*Z45BwixcIcc&xC}tsX)+^r#K^%5!W5=sQ{VO78}KDBrw{3cRP>8oB3O z@ZFbR@SG>3yt~1iX}M-rYTKv2J4{Y_^pNWsRtohmlgUBIK*qrAuYI6izV{5kQP;7` z44cs?=F?EaB>cKvZQ`FIxo&{{K}z9lee&XmqI^;--q#ojZeia3*xBsy9JlPp%nkiN z#aLSVwkpNcj6J*>7Mf>Q1fHdhpydAf^k>sf<|q;V3Z1Zn^W0`qtJbc+ebcjy5GySK z85=)YJ~i18B5=D=;qdindmQ(mYCHo3NHe#~`2RgPFuq=o?E+tI>r7Q#G^Al4Ulp_o z;}u$y%?(1#geV;Wd9c%c%bI zT)L5V^{`NNB43M?d|mS|aE72o+M@)E%ay<(Ai$my2*^t+k&A13-Lg~jUmRIaq3^{< zaMcrP{Kt=r!4oW~rt=B3-SFr^;?S>o$NmArhSjG1|GMAl7=CW`yBNZIeyevHLcCW$ zZ$$r2Tl6OQ1_aT_X>#`ELdz>_l(YKZizKGD*vtL(0@N z+T^6DRn30L|Ac=ZzL)7pMs6PY1VvCgTXbZJ5E=gW0sEoBbqdj1WwM+>mg+~0%|V3~ zH(B;yiAs12X{0A1!Vp^ck|Jh;7Kp@sl|{XJ3B)Ap+4L1O8?q4UJXdVOMzVd_oQIt`KX#AS@4ch zLMVm!QoXZg>ccz^9S*Wy3sFAE-`dqIQgQeKefIqMIvTWSuMd$+j1ezf2ul425~ARlk{R*OW`6nP@@8Jgcp1O|Iu1>1b$f&_9r6%zjatQjC2&YcifQvqk&$r)P!r;jUbtoq8t@GMyRW{mI;x-jGibpB z)7lQm_DN`+nX|k2(|Ykf$1A`w-EVv$=gnu3ZJS@P@fu9s$Ua`5J(z%btM_WkTLN4@ zDOdgR)^Q4}kR#`LLYoNk|7IN|e?m+1aeOqP*C&URG2^_le7Hd4(1EY0fue|sQ`Tf1 zC8h@LfFfizJ@KO`0T-Cd>rcbC=lnAI@eY@LGOM3>(gYnivbdB`cu4Zn!#CjZCWFz$ z;FI+d^W#6?kosFzt)C^F_<8gRjeVDcReF({RxF^GHxG^rL=Gg$*X90A$#IYj(4vD8KSR~1_B_+!^b|xHR*&E(-F_l*Z2DT^LvhR+fexE7Qfp?_aPzi z+qsH)aHI^6|5>j=87aAwP0>H`iVUmcfyf5)98d;|rC{^XfEL4^e_99tRj)1LQuLUT z9L-0)(r;J;>AA#Z!Wctyrmn2bTTs`XOBeIKJ!*lKC^M@Qo84PMUt@ecYSD=8oR8EA z4678aBr#vL1|o=$%sMeLk+yrX(YjW-zza}|7_=E>&0ZPkJe`c~wNmbRG30%G5ySkm z<$h@HG;2d@kVP!DgZr`U*O4yYX@4=DXb+iRXj@P(tVotU6vcvq+7Jg}6j?)QI%5J;b?D~KJ)e|w3Qpb;? zz~C~c@7MsQ&Pm~<9rwiydx%on^)=_1Ft#qkpJ4)^GT<*%$%=eTWCk`1(|Ww#-rh&f z8nQ)g5Uo$`1ld$&2{d}AH4`}QhlYlZcdS5TQj&V6CI=Mz2fxgX#S?OG=)3)$`{HMs7W`6QK^!LdrDu%qID0?}}$M6Jr(7 z*tHuT;FL*0OK*um(@$5r5+(|T2PwV4nt|3tW9lP}(LONAqcSFxe38eK`TH8Q&f{}N zlp4Kxl8ZTwCK+dh4oZ?*X3if9kUsaKMx@`65V zXiMJfxT5D%noUhAlA19W;x_RSXfX9=q`!BTbiS4!Vh)X70;ftibB;ezqmR$8Z*E23 z#3JcpD#{a`J(%2Rqq%Y|bNNR)+XgEYTT>Wf$>#&oWLvtNiYq03dt(G_A zL4sGC{o{(Eb`<5)%uDWM4ApGwfQ?!4z5bodu0tZJ2{K4M6^$3tc;zi$1mEr^89fjB zVH*+m8rGMI)=SV(9dI)IPO2UCW*2uA@D*~~vJ$k)!7nZA-&XT3&x=FCs3QwMJleu>$2sqCfLezHps;kvhQMk5DW=Mt^7P_-j$5% z3y~fQ8Z?&*OA3CPg8>gKzH#(!ers(%{^Q=}tbS(s-$1tlVTo1{6IAFug}99rS7*L( zU`?U$+%AbSs*fqd#aE)LIj|I$b)J7>IyQ!CiunGaZtWPp$1~bttXW@$+!z*Dj+ZqH zb>2v|@~1Hq#pfwO&1cYi;jhW2|Enw`AmK%p%^TH+NFcCszh^KdSnLnYA^2SW^Ox z64+f=Ag#24yh@ahwnq74HsT`k-d$yfsJYGDv)P*f-eixJEFwqa@{U3C@adK+YA1f= z^QPTYW@E&+5cU^HsmW^X336QxjxB`XHeu<27XQr($eK;x*{-rkd|}41)>u*%Q`Ax7 zK3bJmrzPvS$nrZ`emElyJikM+Uv8tijf`@cUA)}m(;f10ji*meKwR%50q(E5zWzK% zjz}4OhC^uNSkI2osa;7!B_Ir24cpbR{CLCp+VY$X{a zu86yP&zw;6Wu`ke$lo;}5@tk8HV$X~*VY|WaB49Xmf{3GeVbm2`8*o&=KH^!eM0Pd z$7jaX+%I%S=+RB+KbyZ7itc6%cOKzG<=z`T>O8P4p#v5IQg+=SGiH@NWiJ^X8FdXG z+;fZ2M_UF^Z}sd~w#NdfOT@HGZcNpJs7!TNURxWoI-?WGQ~&Iv){ku9xjX>?u9b?0 zrN_=g_22r!1$E>D|9X=yN+qt;+h^RgJsYKOFi7JFds( ziUWkbvyz0ibn)zpHyARy%sh-2ldr@l#|0Em<(+*r&qm|prYvx|mlKOCs(b}`-i>Y9 zrN=37d2LtmyDLdyELS2sw%>b}8#HRLKSBDtKZ{Qx;Mh~3kSLs`)O#)eJG7w1Jo`CI z_Y|upx9?x;yQBFdMGJKQ^>NjrVGW6+Z%3LM*)mtt(qbTGgx2cmJwPE)3f3V5 zuGJYQI!Y|F+lzy8BQ~h?!M1LzFK(Z|7bF7%?Lje>#E#v_Zc(c{M8$x~r-0gbhpybH z^@;vBdmA_BrbhxInTY4pj0ZGx^Y8D<2tY3H{y|jb9q9x2y~%>ta=;_yhB}LzN|X5? zQm`>nf?UYprn$MI-u`QncAE*O(l_$y@?T9Qb(l>dvZBa837Je*d4ICN3I>Zg)n8li z2A^#jK8+(vV;Y{uCHPU-v588AZiLyzl_ecg1^-RW$#7;KIU5L*s-N7FDxA!yQxtuH zCjFzRXT64w#6rZ9ckr#^PXqdoOz)APUC^k{>Qtd;J&Pjhs23JpCLX1hnWAaIry!{I z4R@|<9RN3pj*n6$Tj}ylj2l!^NEZYHHLpv$s?op>o4KbMPWXtU%okOua=qBs^`J(4 zN_?V`HMlut@utWXPN`sk_>do{MJ#c+MDYrHuw&O9LLgtkmBzLcYVZ@v_)|q!PXd`1 zaiu(McjhQD(K5;Hw8wby(ioU~z#UuAbt6I-9qE4^Cy>r8`tNETYu=q~s6O4`&EF8b zd+PT&<bC8i~>H?qDW#P*JLXsrI$+SYu`K-<5-{iuwL zR~9ZH7e|c?(0g>!j-kxWG_llgLWJD1`{L;Y*0TL*WV^rS`~IFuppq+8D*Q1F`Sr-g zew2~k?W$7f-h}a+p6^YU>e0}Vn71=`Z=1}}MB01^8_T~DNA9RHkv<83*N*XBivh{l zBXz3YP$T5+v0dxNx1LS7Eq(%%1}opIJS@#AiIPx-adO7ee5{3tAjTU!aJoT<_a^>S zHxK!!UOQH9W51J+4dS*63%j$9oR7ONWmU8Nv1iKD#BD_^q7w~6L`0zJ3Z~*;3OpHHROMfP zNJC30)|b>nrs0`kk?hEnqp?or9@z5TXfhrAMA1G(8%#f`OwQ`3QOz%ZZaI|^71Odq zJ6`wS$|EZ^CuF3A^V!Wrykk3TJ`xi>=^+LVGByw;NU!ZhY3_+SngoK=6V_f5;;ikQ zxRH4u7<)S-Tbtwk0mm_bBf0GT(7Si6?fyFdn_tM)W1=0Aso-su-^lty>2~LZ_bqv4 zZ{3mxie;do=k^YL9IFM_OUo>7nS2?`tQaL-MMi|8(aX5C5A37Kj&5OeAkvZq33w_N zpD-=UGU#M+GxPWJ#t^m_oJln-A)Dae{q0WJmx6&;lF>By=$SdSc3^A1u!i+<=Zu_zoHY| z5DC}-iA~ZKmgs~KtnJe>E-_47r)!A1eA-_9vld1sct+zXEEdsnc7G@q+YD8iL&zo& zsqy$EXp*UW(ILvmp~?%~H#{Z<%C>_7k)%lUC{sj2YxRbrX|9YBc$kbBaymgo_(VH; zuyndX`c7oor&s9A!<)+T|JjsBFl94XcNjl4#4}?gkNik&p59+}k{3_A#Q#3JXWO}U zB*d83)cU7fz;8o-^J`sk**Q*~1|{fzI&ngYc|7*pAeGM|(vvK~8Tmduy)>FHNRWfJ zEY!~!SXaA+=rXt75~_}+eKKtJg!Kx8ZdM{d;p)`|Gzn%cwf0OV zShoIacPYc&-FU4p^B4^J+4sW0@Pa8RCB+Pk?sgXC1|=Dx`;#^I-+?ei<{;p5K&|fNNDZu%t^%Ak= z&${55s8|SfmAQ||fSHrCJZaj&G*yl{W-W|I`^g3uK^>I73n<#|)mPuJx)?_nBZ5_o zC89FF`NUw}YSteMlL@Q(#lV}9^`qx`X6B$1w%)Uf1jZ2bF|ins)S9PrBxSHV+;x8` z8r0~vy=FDm7W82>0A=zhr{iuAx`y@%H-i%kIA(xY4iKCBfID<9b0MS3_nf@k;JQh- zJY*S(5kg`UQKPI@6kToBZ+aam@IQd!{a?x-nL@;%>C}lTeuuv(WJ&``v*iRkVad2W zpA2z4lb9392NmKfxU51s@faNg+xGr|QeM=7lFjM2biNAwG&H~o=dUwMlqd7dc&+6? zTCd80nRv{8Ayc3?p^-m>On>r{H&7rA8aQghS_cz)9q1d3yyh6Y& zBhZjB%@rAx5L?{vCy_MLcS3i%d8g)HcL_2qWU_(-o~c;8>ZcPvJ;LgCGI?q;F<%r5 z1;t-xC!O@*3|+x%3|*EF{xYbBX>cET3d`q1-KyVlA0P(&7}O%*SBN}-0~<{NI|&w- z&ye|}PqL+Db3qZ@@#O-Ir~wj%==pACJ|-0WwM1GL!h1m;zFbvKU`8QAt)z->$<|rF zexC9;u%VY*8ltSdmUw1-sd5e{lGm$67%DtbDS9m=rC?Wh6^(`{cu5>LsF%$N&f6Gz zRm=GR%{kN@X1PWA0wEOxk=N{LESf}LHD1u@#oE04<10?7inowCnA?9Cob^^8uIOFM zd<4I11*Fumu+$RS+$`(K3`y%{>ZZW=CnNH zxI7HFJHUU10{Cx)Wm@1yDxB#1zMJ#iRHvioO6+|9il5iLNZZ)~H!uJ}0N^a*vD5X* zP{f^-iHVusoaB4gMv_O{_<_uJD`7>)h8mM1eEfUz_@?ZprA$O_78?MsKmAjMt3X=+ z{JF*9?YoS#zNv$jy3mM(-(u|0#FJldz+RVX&jem*B%0#sKTK$UB_L(7gk%WnF+wa` z`Xc9;DGr!keE*}(S1!o;2Nbt8>LFb{IqTY|nt91*(QP?L%jCX(UeN0UW9uF!c&w3UqC~`hjorBemLr zH2VE#2rb+x)VIQXh(6roa<^i+EiC4vKQZdWAhSJl~=A?gSJUcTD(pTNpi$o*Cl6SFlC|*_}dP*NdH(eJeK$R~P8~2yVhk?Y> zeX=4$);uzVY@A$?X+~H%if6l!2(Pw$k_EZ1P5BlZJ<_6Rh(aYfn zeEOtJnOm?xqmJb$BIz6_dA_RkaV_d#b9J`IwZO8+5{c!$Lo0~SyHh5Fb=AG_JWM!b zBt=~Q`7?H{VnSBG2ynQIX{b2eZDH`5Zd~4SJN_Z_ITHttG7G3 z&~LYJxTbwJg&{7W@uIQRoi3JAC`4Z_wg=P%)d9Es)lJHe7!_)t4Z><&bcY1b;jw6X zsS9?}xw|a!f5?|A86h8UFGaX*r>q~(X+ZPnJPN!emtFK>2K-n|mZRFiO)UXM#@-`6 zgZBAIaQyl)8A|iAs(*~e#8q{N@>qEF5;HlQV@p+GwQ;(nB;|a+Zd+iNZcg)zYZ{P? zWcp;SM8l0a^eK+Di`8kbALpBFR~4MJlrdOjnU;_fYrv#esNv-&QywM>tLn1dM*r(y-YZC#TeA7R6gfYlLN2Om1o17e@0YuU#Pv zFmZS&5a9UAc11e@+GW3jrmF|3IF2+AB!lFl> zkg01PxP-DBhm#8}5l3KnD*q2}Nh)ksH{al}o6w08&?5~2mb%DZmv~X4e}9W`1>LrI zWtV(2bh9XvL^(LhzHyXDk=%>v&BO5qR9YHu4F9%Yuz{>PARAvR5A8F*38fU1!Gn zE-#hhf2@I{`FxtVwz<$B=nY#xZ}h-YnJAPmx{{Yk|1G@ndf)+?&bs7FPZ|4&`_ip4 zMh0Jh^zBDyn#abQ!1BLOzS-8W)tU_FHm37H+bSNKlD*t78#CYrjpNL)q~lA95MpdU zVHVT$HS(aM-JYJV9~gYfnrQ4;KH*;=8gPD{ZEeP=@n}=fnt>r-`}jH!a5@RV?e}E&LhE8 zPfkuYRhR04)K^*kRfllcy2X{U+7+9QW!J@{xriRCT!}&*zBX`n;ZCzE58xo-(RHAW z7?M<|k}P%FC|wD~ovOn2t64gVgu_Yln!XujjYTM(P>9#9%G;$+?sj}wzNI*9y);Ty z0!aEsqV>L*ZbL6styy(?p5)bUyRO<_v8xMZy#eDeN4?AY#0Qjl5wDBf=M0YJ>bB{{ zG@W_0d5TL)Y|g^8YhPtt%d@WQj$ATa$>ZKxQjh9ruK_SaRnr*(Zic$&E(tIwhTc(! zs3u*F9+TU;XnsuuJDjIdw&)80f9wWCpq@ScPfBI_L$5dg3KH0iYh(}*CUpN$e0wUN zD(r!6^!}LbQStKFg@0`&8X9hS#~k>VChjqy;<1nLC(Y7hgei(}DO5a7c?=9SDveru z5uWrMzo2$#@(h}uDNFWo7^<;Xy}x%vI+PFnF?FnA)Xi*~yscNFdaKMnz@W@44I9wn zLd;Toe>X2#b5t&r9LF|#&G>|CX8q|nmX_H6HSMtpQpWP%-UDbjf!*wXy^j*n zqHJHqaz_CaI8*AMn>z(zlm0zqd$E>g7m-XnX0e46E6_;BJ!+}N6A_<7FQO7W+kJk* zBUr#LQT=Q0gQ7HRCs9cIti~+x)$_V!4%JHU#ynJO`$*cKWFe|p zW-4bXatf$YQg1k0&d$mNKWfCIrqkHqZB>Y9P~A{QPRnMeV10yOA_85WQ#1(!ZvQxw*~Lh}z4v#zK@Hn3K6(mg-fZ1371aPDx86msY6B5iLwS_4EC*_bVSqOyopC2);C@_Gy_p=J)Ug{sd$p~83b|m625kKhA2L1 zd4LmQf#p|OJyi8tQw+`p3)B?7G88=#b#XziE9f-D3hW>G-%^y0X7pw{HXpM6)`Nu! zS`w??)-Z2oa%scQx}oTdtE&eby_-QOZ}b^?a>yp)m?dS&U-=aZ#nP%njM`dlnR5RU zZ}+4Zh#Sht08fo~yRN@pZX+v^Qv!M{n!*!gCa5N-y5A;gh?;J)^UnD;@=~Ungrp=g zcsM_See!m$nQgt$zsK}Tr ztkM@Z@HnS6C^u=C=ta-UvPSwKV4?m$Ynwj|#<@R@ko=&H) z{c=kh)mz6BBsZXOi>Q@JMNg1cN0_m$)84q3h+bI{+Nrc^E2CY@cdlvNr@1rv+;Ini zP(KXL_Bza(m(eAfMW+AmuD^S4y(ZCc#-EVG9=avO+TB7!QT%IRidaMn%W;=$Nf#GWvZ>_)V-4#LxHcD8ZAzLt*Z_O=3tnrrl3Y9ERPTaDV z8gCa%>{<|J9tk-^j(FSk*3yq4;YPAiKz5D^TZzuLqiNHsRFVbLQ^!@P0BHpTFq%$S zd{$GMkRpUi>hk_}1+BT86BI$P0h4Gv`I-~vn_8~XW$gjF6CkL(taptR(1f8sa>QvW zTQA5#s)a*!lLuJAeUxiI9KSCD%wqU@Z35BVsm{Zv1Ch(MU#o8(6Ob+rUxk^+u7clK zI5}r|Jt@;P=oh~ZWEOqg!}@T2Tk$=O3<}c|pP}u9-ol@vZFFq(Br$nLX%_=ih76Mb zBwn|g!i?OFkLmbg~tE{REkrCrhsw&nReeD|VjN5vOIz-k_=A+Kn+} zR1O<^u=-`NtLcxPl(AR!A0GmrvNTa!$i0f*6JbyV}afy#_gl^y}kPq`p79$$|w&=0kuS`DA@CX)%BK_u9Nb13{=1gWMsd#1IU> ze)OoolY4+k5SWQ{{3EfD;jDoK-br`QNG8UH2pN7-lVP>g8Sls^uF1blU}p(X7lOC^ z7us*}xpzxZJ_H(*K$zzG^2K8Bx6m)(K<0_?5TpAA)sb>F-_15t!xEJ;$L?B_EKG-} zGf8pSirI7q2QOXt2AHbG#+%gJlgGLgX$-NfE)K8X|FMAt;YI*0HJqpChtmq zknYehpHF50>z&7cXhka7JqtMxDEV@6vJ)Nx>!8&k<>MnH`_YRhY=M^)koU$%xp%#) zukW~Fb#4wa%}QU=ySRQcUKn^2vD>CuzxlfTO6(Ro#}@ultm;X;D-A1I>L1t~eqi=j zp)Vhz^hLtsj}9r@)ql!Q+(0v;MX^p5EX{9xjSrf{O^#PO$+*`5Wch{@^ic>vq*djA zU)}LKi>~z5+rKNq>rP_E*k(GSUd3OG z;BHzpRwV-l= z=-IZ&cM+)i?Sjw=IsG_VMmJDl1yQEC{8M5xfz-aKj$PheW4?xxvy>3<%gx@PPI&x& zHYp0aWpW0nMS8U7-xJ-kpP?HCp3=EOn}z&^pb5RNNJ)v!o*CwmGka(9|Ef5#^h2X3 zf?DDt6mrz{+f<^R(Hv9ou|`qbC@007$KZWYAoA90`-+khEeCPU3(@4IhMuXsucH04 zBDFh~IQ1hzR7v|aVpZ1shKII4eH|?BKcA&1u7u+X5=!Kyr??O~^05+$HO45Zd1!^0 zhNV&TnxY94is&K8z{>SRPcMr;{wqq%M7(UMH;={n4j(Cu7r&0svY=u`05E_H7(1Ij zvW;^kn4TKE0b3Mk$*7ZQD`bS4HC~$8-iK;_Ht^$x_H}p69ct z#x&AezV$e2!2*>ejS@A@!%`HoeG-pu&F|(}Ebl+n{l}MaVp4!o+Uy2plyXph#m4p$ zp1gRPPKql4sm*w;vJbWN<7y;G9%1tV)2<0MdWHt{3-&n0!st2`u>1%s>}Fz0E@*9B zn7=YH$&%AMo3qW3w2SNx@XjzbKHJuDK|E>jj*63GeBqY-Q&=FAmWP&jTOnv!4 zi3v@IqRb><8SBuqS)<#)Y1;*}k@QBs2x^k#TkW51bQFYMZ+oGa#QqTJb?N7H_y5TI z<<-^&aae2!;sUnk(>xr;p2H8@yDOX{ni!)M6%I(@_!TM_Ql`&Duc@H&1Ll0=&RSF3 zp6OM^m--418WPza@$ST84OKdV9Os0LGR=17t~8pLEK(dji1ZV?D9CjOlMvFV`Tvo& zKF6R2^*O`tsoT;xVW2^F!;?c7v<8cdo0PE*FAw z!ahWb$jp$e-fgBqFUhZdRk>iwhVZ)9xb*$x+Y=qvX?mOdjkB&O=yEr-Z_+?ZO za@ync@yrfTq9}5{P|ijq5S-%&rR$f{v6XFIl%P1E%<@^A{J35rtg}3^i?bF}un_Ge z61cgtn)^lac{*WXZo^e*zPy!BARK5Yo!w9ceY99#``n;>iMUZw&HRh{h`fCpc#gO+ zN)z>+vLTfQukeen_wsaA~NNCaSkxnt-VykjM(HNZk0w zCB+y{;4ssbH!sRTm6lMGW~s=iuSjGh)o`aYV4}GoYo{O23uk-v>L5NocV5pn_(#W{ z2{Ahw3bZ*Jl7`Z74BcD1%@>{!jc?1*zfyLM?4GPcNw)?ev%)@PaMr{Tw4#x(bNIy8 zrcOKprRl7g>FA(!U@{2xP@{v~nUhXHq^~g!7-jrJaze#+(K&f>{)W3FC;lGX52~9CarkuuUH~ z9rQjjAV5#p!0({mL4eSmM8Z{fHHWzfZ~$|1k<A&j#^86a5+TG9Xi-}-a3vV|fBuZlGG>|#UjzF{ST8iPNbSP``zSiy zY{c2O28_K_JgCkwe$DATPa`L}o^DqL(=so`eV^7;7-Vd@zRrx_OFzv0! zd$QnySipe$;ucB+3^LTjDgkt8<0jo80)Z2B4l0yGi{7M)e-t}xIa8_rMG#Y++QdYh z7RhgCGRzoaw|)*=Q4u{t?>3{T5zyLoyHf7oJg6=c_?;_{zS9$V(3q0($Wz81M5lRb-*z zclkZ1PzIdLCv4=C2x`LUw)~f?=LW%jh4Pd(t02B5=%+VQuD&rt99m_OK4tL5uQ!hw zO?(1$AzZf7>8M=G;xr}LL%M_C{MHAOrpvFNcrfuazYOLl=dB=2+cab^o3Y6O-gf!g z#xNcxcXLH=Rie*w+xI1yo+-GCIIT?=DsiYPs;46R$;r=H*w~1oI4M#qupnPgEea}1 zS7!*g8CkjiwdxZ3n?!q@x@gd@Kl)(}I!p(y9e z6Tn_q%-?yh@WF@3|GQOQtHs#w-yD)Dr{gPthhsTrt>B`rW;V@welGyn#l8uJwzs>kXJreJqXdFH93_}H@HT_E>$N4_#%($e%5@uO` z8uBi}?~5vch?DCV=w$A`9}^w@R4emkFECQAZR0~U{oC<$hWOthfzc=BCyWnq)nH71uc*&iE|0EcQj)rBUVhrgf z>yY3IEIEnYlTuLe_tB;!$}WML*NVFS69&BznI11rw7Xz_JUkxnbAgeLZbPdfql@*a#>P@uqtlTBc2c}*~D&e(;t793EY3Jek^e}b*SO{y_@t@=~`R>AW ziPLS&`=LS>_KPn8tO>#MqwJ#AVy}M&MihQj3wb?J$S@Lh$HbWStvGU!{aUJif!6iyR>5*)^q_2F6jXe8miC-$#pk-O2i#{p3cf0NAP zrTyV<`N5&9`J-;|v{PFokn}yD_p(ti#SQMpC4ZD3Gd}ge~{{KurRCN+$nm z$4o)+oT-N*$gn!&K0E2}HI@D@$}XJK(2N#7|DR**X=wPe1Yct&TN>nLlC^^x)oeit zqQ2EHPr$Ll2|od%(b(t%0R0Ef9IR3F8MtgLmVS2(dpp#suEiYmvw{ekrFYKA)9mM*#aVg2LFFlLn` zv**6(sa56J&_$*>{r6EZ9ci3Hsi&OTPynOMvT9 zmz=_Yg8%kPVJ<=m2J`NOzpif44`gC+jaDWq0Qsh#(YhXbxz*p$CZ4>yRA1QAMp2f| z9OS3L%R=+u7JsKZ5pP9;VEtL+Gb)TbkYRIYV6Nw4E-?Imlg#nkF}uOr{Jq z&D_Pi=EfB1Z}e$&e*2s3;b`(0Oj3LQ-QQL}tXKh7FSGS`_oQ>1x~Nx&YDLB|wv{#? z3YtRir3+YohWIcM($gWq2J<)2qR`i|$llmZJZ&eI2;oPc&NCa*L<12fv$8`JG8Q`K z8~tftzA6T(qD9VOSXBH(4j@9s(EcN&mbM z=ny)85H@1z#P=%{4-uC%-MwVv8*U~UP0oj%FZ=M)@!^6Xnp`_HPuj8Xf!&W-{I*hW z?n+0=fBI697guX5xUb{6!nPzX8tV6pIXh4k;5}+l!Gd%KOO#SX`{#eqHjD-;RKd4# z@5SE^Wvre_;8oYdXW4`nJhLoI!Iy-nXIJNZ8lqzE9H{wxxO8>Y`u6_qo-*LD3;3Sz z#h_vcuXu0$`25BW={6?zYG_TL$gyyO$N4^%K*dRu&TlX z!g@7a18W^J0xBR*JZAl;E-T5xa*|6H8nPFSVz^=6JpN{$s_4Z&J17Uu1%Hnc6OvC9 z#Ab8K=oAP;CQJ#i$=x8V!>&HlpE*!ov5TL}v}q&SsgX#`FMB_$wTSCj0a1FW#Gr#Z z@pi(Dyhc}MU;5^Ew8n&al(-(!UinW;E%l5%)5;1xFT>=RN0M|^CHJ#eS68Cp=yFs)nd&G3I2;@k6)?29&{jP%(vI*@MW zckzd?Yz`glo+Ige#l^)vfMUy_{hDP%Vw+wDiaCVG%Y4VHl_M==^p1lV2b;ZcE+2nFNp89B^u*%mff57y6EKQ)WX~G1VSm&8$n;; zb=PMa_^sDDpZlG4LjK$h!uk$cvvJNc_UU!bhCs>zsfZ$Hwl&=Nv9bBUj9NK6&lHpN zyK6>SQ_H7vr*(T7!#BKp`upY=eYIbHNdN7;A!&PA8Cv+z3HMeZwix<9DTMb5aZQBmtZEatF< zoU!w8ZtG+uCwK>Wp3{bS78tJx$e1gZYce_MwUJehB#=yYKqXmdl~y8YbXKk+Rh9`+ zgKFLusl|^Fao&gu4LBG48eP$?UA2T^vxMiEeGxO}2~Yyp~rFC*hm8YiO8*~UMG-zA=Rs?m>X&8$u}USL6} zBxMd>WVUp8mIp*$f3;3jHD?Rq+K?4e$-oNspTx_Ce_@@tg1Cv%PmZ0YkDXkDZL2lW zWpBj>@S-z?|Dxv_q^LvRIC&{3#}A83b4ymr7bi-ok~GKo_x)P^!`pJCBx-#@gJmR|264-l_X+RH5y^5`4q!}m z(3^X`hQ-m&s$f1OpFa?TCEI1Imj=HmC7y(*uFTlH^3SFmVaP`F1#dH>uYTK^p?pi? zAZAk+ftH(?kmP5;FI_7Z7{DtKew>)5n&-W2^k<ACj4k5nN8_dgVE(PpijX;^UgZtLI-EKdJSo7?Yn1%~{2yhI!K0ivpGd~3 z4G53HiKG>%yA#d4$oE@D4-2G5eWcgL2Q-*DvbfHnY+{BE+|J%=O8-31UE8!YqVDez z(gl^H^Ll9Pk1xdoMU^w)hgKTA{Wo5?qN)U2)Q|EYjEwN`aFC&*tlOekX2mL}@oM5e zzDS@>n7;O#0gJQwOGHE&=o+I_77p#V-%*DcRnuTmv!Dj9LcKO-F|G2zEEXuM+Y=+^ z^^r=l0d$1NdU=<^o6DLbp* zOMG>!l{R_YNIadlZs?}eVh1a^Y3=0u`h}3F1meEpI@NqH%;3t z3)+^)abMGC!9REWF{_W6l6Gg4KW~jDZD?0qINN5Oh-4ZfMZn8!+#V?C0z~Xw($+}C zjULEJzJ&avCjrLLKKGLdkK3H>6L;vhPu_2#la9h;aN3!r1Qf+0)AiDya$$gziX=$9 zL-s)bQ!9y|D~y+WVb5(YCXa(z7HyS3PZ;(Ajhs0SPM-2tQ?7(^Elf@|0@Y=!UG&>> zjiD*VCChDYjjti5HvrlkWy4QOmCJGfvFOQdq;+D)kqdR)-JOEuB^Q&?8E6P;F zbiI1v+{h#7ndm>u?N9JCpE;pmJ_R`dw$j*$4yB2sS0=2k>OaMkLl3R_#t_Q1ra zhB*_5P3kSiCc8Be$ch9JokUF7kEPuS>(N^f=!L&Eu-+d|cX?1$D5C9`z|7t*+*BRD z{OUM)vF2ZPcYn>%QV$ppE$}{CEzl=z)wq!F+g~cK_IEOp8dlNAY}~wpB`_|KMRZ7gJ^w`vgfc5ip5=lyMfdMJmuVZ*F*ynHQPxSTm2pKkEi zyn4RJj`wWroa^Bzt>0ziqbIjn4jBb&5J4UOqaWQ8_Nndcv#usrI&ZV%>2sgyY|9DT zG4VXnN|W$Qx`iLpCv7)PaxGNlf)t13ls(d%cY|1$X0z-p64^oiNNUzwkFJkTHOPm2 zO2H2&Eyz!=RZir-1g?)YY;>u9vb$LgnJ9eVbaKYuryr*rDj9f%10(lrgU02&ZFsqO zcW%HI`rGa!h`e6ol4ffws&IWdBN8(*lp|u6Ej)DEnSGK8812UM>xqQ~OjfI87dn5tyN61l?yHicwC_@;kz5-50ZTXvP zxtil=1b^s$L+t3MJRF*5dxWL)YP*fMGsT28^?y!oC}?O9K@)LsxzwqaeLYOg7Lweq zR-^rCc4Wj5&vdN#iy5?#)>)|vmgivXdp7YB^?3exb&(Hlc-x28&`>U}48)n9v#m20 zUbX&53k}A-6fp)P`_pu++T70jIKWso7;GKZfYdzzNL=YFTKxM+GQ&4`z5P3LUMHW5 zTBEje(B&89rY-* zZ>>g8B(pkd*i^4M))PN{71q;ZSavth&@v6Z@F0PP+C=lxYZh3}kBLs}y1!yqDriTS zu<7=OG4-7bv)JStbX^P)c=1-UUVv^nTe|=Zozvx4#209Pbd=WxLu<6x$u55#$6poKsf zxpFBixSIN|xaEh_^a?JR55+~iA&Ns0RTWOW-q%a|rCT;VtYdruAW+2+Fo%qOpqak7 zLF1(nX=_GLZ2J`u76{kB7dB0`A{eN?vm5%@@W(0aduq?#n_% zKAQ^QnG4Iyv)^Bx#I$`GTfwO@#}iz&O~jgxXX^GB+bIw?~N#RX+NF*BOO+d%4(W^ux*p-q3-` z;g-{CsH;%yc;hIhnAq3Q$AxO@en(x7S5hZ-wAb}3t(b5$V%kkcZ@7Hcx=B+(Rs15} z53!VAX3jLx>Bi#n*jc3EGsM21oWxLZZ0Q-SYD%mRs;-}mA!o?9EmM~_VKBa(hXQt5 zpWP}p(d~2kqu9c7C8Ryu^6S=JbuU;wz|b2>B>FLmF$+9@0-qyZUu`9y|LSWF6cYv{ zOV1lJv974wUB;~1BKCDynQ=<`dwEk@X*Y34fxkN1Bh=1V)Ze}8lHYv>9P(55RYA=F zC8o&dfQm2pVaRZ>5Ic8D>H9)5WvK7d*2FF1lWQMS(N;K5R0WrF_fGXLXj`7BEwiji zOi6!wH3-*CJbj9ouo?g2M8rn4Y)vA5WBXC#p`Vs`ngI(Q3hYuki{okR!G5Rey(L5s zOGQNm0kt7CYN*-DHAStnZ3GkdYBrE28xr`v5316Afdqw+jllM4P5$w)IOJ@yj}(NR z6EQpOGCkTH*e{i{6T{zU*!0LrMbnDa!h+Ry<=nhLVVaHhaINCbLL#>9Kbq|}tU67T zUQI^{b7h!aPBv&VwIolZ2eHuZPJ1&i&tox`h!FDAtj97q#Su>!U~eaBX!x$}B_QOi z&-Dd;2K~K%9#OLoo9p?-323oEd2q&~DfXSSg6yo+QSt8-w1%WgokqSdoc8SC78RBK zIa8Fi&(25b6a3iI6M?Th`?)i%T|Wx(IY3-_16J;ou>5=6_ZiC*tyN+QEjgXPpLOCN z(_iYx;sa<%GNYv9se#0r1Y|D?iJQVF{?ZNpblmt#(`&;DD)co5d8(mHLbsmJ(-okE zhB@XiiKrUGZhk*s(&%C1^eaBDwVXVCdLZq-Iq`tHk#8bWrH=0Lia+VBTwCd=<3#H@ zHJqt(4P@O>7e2vd+^B~JA4xChva1|tq8Z*PLjmE>z6%fn>?US~c?Xn>#Vjvv{8Ivx zO@nae+C{hJk6mKmreN(ZDUB0HrJ{r|sV*))TW77AhLC_s+(cnuf2-tZ0X=%+4%acb zq(k*lK*6?!oAig{^|>z#vmaoV792-$EP|e{yW-N; zE5*v$)?y_#dvm2+puWBqKYS{kT1@6A_cW}*ik4B3Q zj9SkfBA(u7wA3h><-E(Iqi zeqD!-*E0cu*nG|1_bq!!s8YQ}ox&tow5HVi!ZGTM1s3`2ZyOHyUQr|WPDGj9_S<*4?%7LA+-997xsn&=-e%}xMyYqzea9WO4u-a(rJ6Tf$h0cl^O%2VYKvGu;XFImP_&Bvu z&Cst=>!kNXr=^Gjsi5V{k(E zxH%306^EG14hlSbe{upsR((~MPA_Pcjqe_gnUT1Jk5LB50NgY;H}?zSscLqya(3~< zE?j#o<0$Ol*(G8Dge3i+H2r=8h3|5l&E#8+lCEwf1W)u*JvMfPPH+wO%taC_nD-T8 z@&&pqI9~+)5? zO-t(g7oIAxiCbyK>A~YQ{5&a#b5v%T^MI9WgIpS;KrlV+3QS!w262DfUz% z>j|9KLeU6LD>QvDR?S+KD5J++6JEO)cFyg>ht;ZU=o;WeK;?2jWBT1xA>{31i_-tL ztfb{t(*B(6+{b{by=)_e@u?}eq@^IGd^|&{JN?g%IwPAOd9+pB3nnAv%sCD@8hGaV zQq$~u$3zx0%ijyv()l~G|7@(fakZ1p`qV5YD~ZI$R!r@bLwg~<-qm()#~U@|&K78F z#XJAGM(3*eOBKN<+D_%`ByyyGw3zGFREQFK`k@^wmnCC4rOMyV;Ly^Sf+nA_xUjgG zFCsXp0wcRG(~zsSCAw1y4eOXx>$KvRbCMYwbiVvH2}UcGJpyM#SLm~AZ`4eA_p^;; zrOyJU$sNlSMnM?)X|2Wzp-4yfP7~j}SH;zgasRGglQFL39;S8Dn0OZ?#BT9}Sh20tt+|*TWXGT-{Jik(|n`+ia?6@Yukms8V zE#5!sU^sMqqr7_*rkp1Myd8}mpGY63K3@Y)1q=SB-1=kRip1yXwS2h;Al*f!6;c0W z=RHQjv`{?`YNxiaDDH)HL6qF+lmJF-N_Ii=Zk^SAU&ETWdF{PLVe0i=fO=)>$9@N9 zSzPZL2atm`TWg6;DcuPi!%zRfPBJ~#8wQ)5I-#wB))G*@+zv?~y=mjc{KNY2&v^0d zoL4Wc`xMh<>BA?BGAtewVilL`uO9E)SA^`(7y$M0lRVo~*8}OlqveRF(`|oKd{{d6 zqf%6L`Ef+$~zCd&EdbmP69~$@){cntpAnu0{8og3LhU`b+te`)q+*t z4O>-q1&OiT++$+EgXGe!$0yC23zD>b2-2C+fW(zwZ1XSdH>=p+vO|r_J;0cL!47<+ zq}T!q{DfNMpFa!LYhMn-1QF0F?SAWO0nA={g@F5(yF{@qU_8j^ z2b1>F2WFf6-*8pIHKFkAle{(YcLG|(0*T|AVP)o39@Fh=)O|4f44)mfKJm%dqi7v! zSN`_sT>I!RzmGbnj-(pu6*J-rOKH2p!OiT70AOI+if3Zd%z1wv(~ulV7g8}oQL9@u ztk9mfQBd=^s{IrA35~#KwVKo9LsyJ1Qzf`UmHFWzRs(n z3%B@y0v5w53KcR1c~wmNozs<{GWsc5HR0KgBM0-U>~sYUgQT|1Z;mSW#3V6M+1DTE zE^eJpECT~Dx%km;znOIXSQC?aC%0w**P-Jw(lUlK&CP$ve`eAXuUgpWXU7C%n_2IN zU4jmNFL3gwm?(<4@@MS`0~@5w5BTQ~PLgA`+YM=AfFoDt=|#0YmKF1N^5^Gz$6IwV zz_3I>Cy4~!t3|PoDt=%!WxO+*0b(2a2S#-RuAX6$qb)5~~;ZD3NKr5xI&b>fp5XY+N1881I!b8t&!T;ZFTK0un;Oe9E==MBZN!u(r0r@D`2zE{q`!B$6*u6 zY}7MXom~Ao1|JG)>3(Ts8@fB5=C90KdOBeUg*Aw(-ItS|$fW^ap%5DctOWv{lIsaU zm~w-H(3q_Q^aR&AC8D6_j^DpfHBdl7248GKj0!kOU%cg#nV?Ng{pm+Ep`@|tXyYq} zwg8sh%H;F>xLK=WfNd%zeZ1r3VHggh9B2^ox}%?)t*17lr;-QGVtZWgOJ`EZP)x)_nmi7aIRe>X{xUnG| zg)>s0h~4}7P`eL-_jXY-k;FIyirmz3CN*3J>6nyrSF^vK98mWl}zwYi&iFXqh{MS5k72e9Jd4TU5*n z)Cw>&FjJ~PTqA%?C!+cI_iMndgM-q2d?04y{73FOzR2}AZ{b}GeAPybbf*2)M z2cYmXTW#8r5q4(6_A%Km*SMXu9^I}kJvF++&|JRxUOa#Pwut``rkuDz)OrSi?|RnQ z?P^-{zp!AS?b$ClIY&>{UuZ}Bro_n@evw9C2ZO9VUvER7*mg^}>=DD?5F>EM8>~CT zmLOp=NLtp}{Bn!>Y;%epPp%Tfe@&pvfDfehWe9Tb$gh^xTA2?C>!DGDE>8)mpxjPu zA5L#$Nc|`Gx@{Vwx*NX!Mx`ikS4JHc6{d@Xky8=`Y=v|l&8W98ToEZN&3ZO7c;nj- z*ou69K>e(ae;E|2_Em#%>G$76bIj2DcXM8lBqlwtEA_|ALcyR4O+1z*y<0wRdoQRz z9$8P!mgMSsdeJGYq6=hkV}BYP?3qcppuqEt$3`evKor^?{AyT-@ZlDlrCBbnGTG`y$!!;th3ni5$&puJ9@l8$pdS^lW;GZqd=3K?YM zDDetWE~DQr@Th-ntjzi)9oP%?Db0-yVRMb*SsWp|{3p~V2%)HIBZRFcW-zvX}7Kl|x?$HT0Ky&?lh5Ys(DJZD5tb=hLgf-NZ(J`PSl0HoqgwG$Z+(?06Ya;C9o zUnPbpUH4SgoQn!RwxI}R@;H~YoZ<^6LHEz-vMLFHMX$BfUV^tgn%>mYXzC=d z#kBc*`imU5=-IKKudmMO56~em33TpaZFk#gTYysK{x?6&>h86Vmx=)R_z=ncxU>u3 z+c6(&6Vw&QSe*1PHaTv&a{ij(M}K~E!e1w^ce^7wwQ&vkG!;|Xl)ZsAfBL2#ybHZH z&!+OFCPnX$Sr3~t4qZV{_cxk}bN00|-j@@STTw)u)%K*nRQg`PB0=11N6&o=_lVD) zfr+PFuyj-~5WG#P(Sd>372rAb%LYFWyy7zm4)0#CfaA#r97Nb;yO|{}uWdGx6lPfT zF*mO0ABC|Z-3cf+He#Y`!I8mSQ83eC^TbHn%ac+RQHUe%44V$*4 z^uwjsFxVRW0rJE3{%-I75@G&zw=MrN;t~q)$hk~xJC@1sW-!l|&R31Su(A^H>%=FJ zN;dJ235(&$%Co;=!{WfU7lT}NIqB%*qR*qvqs@-lroJ<2>hN$2Ck}E>eLWsp2nE9) zLr}X*lP+-mOere<)log8C(1?K3(Uop)zsjUhJt|Fd;MpUUgu}mr68bnGQ2rn0(!Fc zfGou}Wk6^rKP)zF(I}pX(Qkbu%=Fyff%26kxx@5+IwxQp!fKE)7}@1>H`OLNxK_{SSSyq#!Ep0D~EaINfPtu=R@yE zi^(6DbjwVHVO#XfxK%%Yj*_Cxz3=svjguQI2X7pxS^jJe#8;UfXru#%_t@|Qyj)P8 z+N8il*;v2H7^#IujAogZAHd=bciQr-rnDz2!bko7jt!jaJod%-g#SKQJRPz1hV6^V z`U8j!&`|2?GEkWC+}zxtZ5UcC0)AZ7njeZ55hWg|>QwqbgKUNQ9OIn8TX*YiVA`5~ik9 z5Z&|QqV5v!x1la zpO|5H`o4V#CFSRXom)C*I+=5~C=v*1`1c6?+NTLFspMcBJmQbHYlu!}dA@$`2Kl-b zbqG#`#gH`xpw2^*h`|Y0el-~cDIX+0p4*x(Zx1j)?*_s|i9jZU1VEwdzs%*9JVWki zw!cy&5cC~jb(IcVGG_C!5+U}$1PZ9M;Tx7XsxLg@$hWxK4vG^mr06=w7OXi90I>z) z=TdL`4EwL_g+7r{KRSfu8&X5mBi?cIj=uB6Bh+ZEyZZ<@@XqiuCMb1CcyXD8Z+K2|#~vK%F4u?o!Ln|PlX|HE)d*qgfFl8bB~u$>7GENbmVRGBE>epgBg6)ZANkvw$IBi4qQhtOX-OHjiH(?>la&}S zPpqySXNLRD=tYgikoExG(nde_+XyqSShMRF{+lPH2A@*K>S_XEyC&WK(b0dH!n7v* zIDa22X39TD{Qau}5eopPLUDN;)Mc$EtOvs79{HzUBQ5>US?w7FMo)4$?R;Q zlmm=h^)oXsnf4@wHf-~GP)cpDD2A%}EdPq#rCK96WLUXv{m?X#jsstiUSL37T^&;U zhn@o>Hso$Mdxg@&mhWo%{%eU~znhPwQXyI^44nT|JqOjz6zUwXwm)PEddRKB82qCd zs`lKg**Z^&qHs2~fle{FI#|(PZuMxmPn+?1EKZsAYH8 z3z7p+CQ$oN;K6Q!l=ESen1`iYZGHJJD)+sIF-n_x*V|J=NUOj=OZ(l?!C_NV&t1G6 zeQKyi?@4IcBOfG4l0>o{44?VOnz^q$Q-Eu--^%5Yqlb{qTE(mRD+OUNTsv#_B&?dy zed48lMXa=>M221eBX~8=uZu;?JNVD{`P&-Vi(NvLWS|i%^uWv2UIE$G|Fr{uSfJ2ANVjiWQ z*Vk9-IHI6iQ!2|YsYX#{Ui#`4e&CNj6m!IQh5;Q|Wjc9@{T%rop9HcY(@DuR4~v?#U=TK3=SecJ~vbt07vgHt^ySJuebUA zz`iFBcw7-RyccG;6>Ieb#8Qo7{14IBJB-6aLlDahyYuc>kp#>lH)%v^FMDO6~P0v_tAq7ec8xi4V0&5OuHyBF+KncUA!61?^NQ&`P&%^T?L*CI)urKFyg zAnJ8@!WvyYDG*AcqtjJuiB3+>O9VXB#P{}85|KML{lQ8}q5gGFQQ5YO15olLo2pG& z^pPGe`WN3kLsfs+D9I%!UTnaYyw3bHn$c``%obslo@K)<*Ew{PwqxTyOeq3Rd_c{R zh;G3J?yFq@9GEi4wEh}6xo^_cK&XW#8?zKZ&vNcO*4ed{c#c?F2{Nw1mK6?S$}stI z^sY;`0G*@kU`p`rfXqg`?L1>U;nvg@C3qva&rTQ@(IS5waADd@26Rg}XCjFIZ_D?GXZA_Xgk?yajFR z>BCCvFdT#UEep59mC0b-NL$GL)`)kU??`Xwbp$Xy0(oi>zCzEdaCuCsoxJ40q`}T< zp==aj6V==1^>DfxLoylqa~d`|oq)Lr|GG^dVxwnO;5ik;8Z}YH7x#JFeh|&<>SqXvY z$3`W^1$AIJt8R4xZf=DqBeBr%gclD{>pPYqr&Mt25mMTw&B z-W?WzFaV2IsF^g(`JewND9r&QMv^u~#t!?uCuLpNM+@`Yqn&B1bDqO3W1Ca`II|u{ zEP-t_IoZ{SC)Rg#0uIylAeCub5cWpPEv! zS=8-jb-^0>w@Jlne>_-60=^K8a(gQM@XkO-5bKWp!7mC(X9pkzkS>ZY5#6d@_yi~cU^7`Xl@fekYIZ?I=O1D$_KFl?7W>YTtIwm#$Fw&i?uRJ5w=as7#MzZbftcOzWPXYSx8!;ljhXjebC|yABEO-?j?L|y=XYYf34nybMa$#GT#JypafrP$eXu`L*W%+P`Ak(9&$RG6V zRo;oMINZG!CyFEyaO&;=wtF;{@la#djV+m97aI!Eax73fl=4Q26)E`z1|ng7Rst@5 z{D4G0FrTz%N?2ObQOhO!LUOoXkQqJWw5RnZxPiyr^+tW#`n^1^(MVLk(>ME^Hj&nl z1Z#Q%RHNN?l&)r<`S8v~daz{!^BtHG-`@V4=FG{hRdGE5%#Ccie?`qVk2R;W{HNc_ zeW&AezqZ%s&K(BMt&21Yry)u;M@qT#rTlG0M{o=x{?}kxGSL8(b5JQmN%y9Pqv>_% zL!Fw`!{hL(RuoP$tkg>qx--seb2lE-|lC7`z#uC<2v6;r?cG%}Dv10zJaC@@kq zd1R_XOZcD>Qy)ei!Y%?YpO()GpYJHA@U%!)|Bl7^4R|7dB{LcNLoWB=N~j+!qS4v9 zIB?l^yPmrP&cdxc!ax7J^>g|Fs0UzDzA~*U7|^O&L_8B)<|9CItRb4h=~B%Ib-I8r zH!K~&GX%wEULQ`-{-ivgiKtN~B+E^3Pv|^FJK>97#X6WnsYFX;mXVMJTjU*Z%4<9W3Fi-#cB~~M7#x^h0=;zA%!Zq1f?D1koi#X$r4siza51} zFVG{^CFXyn$_A*>r&qrzN&cTLm5mJDZ4rKI+OaSjGR*~`(AzlFTboK*j zJysv5Ax)87vZ7a1V9ImO-10{Rvm&nWD+yW@Hw<*rb-M3&;(iaMwf7YI68F z2-~*5i$e|%1!_dsq~e(HiC!yYtqt4(P`=F97R!GSfPfVnrIDa@mrvs`?2VMH1gcLt zP>#p=Z*)cap4n7hXN?t7XUN~B=0j{#sMd)r6KIi1e}r|AcQ2VqLK_VHvvz@F`I&m- z`O0K4h5tL%UtD?IgE7|JeBwU%ZnCv1D)|Hp5~-bh435{6GNA%0tF`ZxJe^ZhuLL+- z3c7arVv)WFzlKURDPWetB}Wb;j}xT?PIII_kLbFBZWuC(N$bFo2-5Z+uluZmDH1YZ z%xdbQ6#lXmA*Fl2F#@j|CPy_$;)6b*e>6ao)eR6li0ykzjXQ3phdVP!M)GApnE7Km zGfcC`XE)|A$4)nk$a_tFM6u;mKjIlJr|c}ClFLof=*pv1kaBnC7&L;&g?k}{1bijS zVus;=kw`^v%Hym0flJh}W@j)(n`m%X8m&N~0>uQ3kND2}Q9uGJLM#&NRT{qs2k?H3 z=eUstV|801a5m~2Vr-2}0UHT0oD661;xo2Bs-%iJGxtWfVgsrPkYW-4d9J@Mp~le65DdG3q^EIc#p<1dr{A27koap#a%KkB6h!e|tQ3t2{uwmKb>A zZ#@MdmUv#jePAaFXyrKKOM&9Z)7+S);-T4E*6-CTdZjQd3n5CoH4c zOV`H4|58{b$jHc?lB#~~nq3Gso*iE!a6hnV+^S!5bGyG$#zt8aBzb1mXlqkpN6){Y zAVOscS;ljrNI6D{e*IUYRPgl9nntAS8^JoGhsJD81k11 zOQspxSr*iiom$AA6pLRQw5G__j=oz&(*(2Qhhh1k{RlIYebY3|_dQ$eHlBj`l`J$M zt%w=DyQR42Qz1`Thb3?tG7v^pGcqylk zn=2h>82D~i*&ux~&p*AbfKB6%4JI2VQ`!~5e2{w;>e&3W2;qZ|DR<_d8x zHPXSSJ5lPK4-Q7CDpJ=X)@v<@q)`of%<49_Gn4fcTy8rfELZUD+83z>f$EAHHR993 z-(3P}RLPZL@DoH(av19EXLT*U$ow*syo|-lyTVKf@Bg~UzQzE|52o~ZVt)VT;o_g$ zHydq_Zhbq0+QN_{@j6^v-`uhwT_cG>Dg@IVE2d{h+@`xldA+7lWKeOwmJ!FOyBT6n zqxA*rA~yHt2U{J`tNINvw(dw2_=*)o%DohgBn9@7`VbrUMq);^|J`LF7bgJ2y}<1% zY)h2`Rd~b=B$h}FEO@FcCdfCpw$|!q5<%yI1X*eWj$#U1)xOa<+PC+v7L!sN2fhF! zSUYN1=>?L|z|Kw)h!HB7Err1z2O@ulT-b+e8+{_gMIQtJHN%4d5n*ZRFmT`|>+-K( zw1uLr!?i{EY3u7MAtRZ2MZ+Y2{3wYjOXtSQi?!bfg>7#*@>AraTcEOu0FUC7g?)Zm zjb}b^FWi;;Q?09~P6Q*4!AY)~Z<<>TFc;J?s1*d=72|nI1IeApbiAh_XPhvHtg`ESJai2XJ>&z^HxapR=iMcrijuA&yY^WKLtf`a%E7A5mjL@tBJ_VL^OMt~xVW<$9yvwsT zne-7hj7|i~rX3|-YC41QkG4s}#li{KCfzerw1A5{7hK#QKsB9It|xaXO)a)FmL>W1 zYx(^W!&d6uin!@i@0wlFiH)8f;Lh51krG`E&Gckch&f<;B|_E_Ye?Yq1Gd3ogM%_4 zzK;+BuhVe{18oBgRCV>7h)Y{F7Wknn!!^1mfljqe!wl_34jhJ%y(KVb=+LS*3De5J z*<9V>s@i#jgZ3E;7#dLTCTETu;H7D!I^^D4;k_#%#1bjolM24_$5Preoz&GcEv zmk65AQ_~Jef~HAT;9hMv^Em2bKxVsNLwkAMof@Op z^IeZ(;w9XA>UT8R_;}!p-W6tMqcs_z&$5Y`PI0guz=!}e=~UXR<>`6>FeRB?a7k6< zZy?h?WViO|>=nx4+%(9O?KQ!fyPkc|?awo>lrOr+eZHki9dr#ay^!Ka1zJP*CU$}xbLC+l9&SK~W zIWrI!3iVQrFm-)P&poklNzgU`g0J1`A84SR#VAzF>eyo~wBO&9h7wYUzGlIgus~12 z2%6(si@+AjK%?o5WvZ@8Ht2pG*&-ypg(HKXekvtG!B`Y$fOza7?uR*eGBh~IQns@Y z=1+m;DVh7NE&ZjPRak81z|@^DavYC*P6OBD)4d3NcjEV5-kuXOzm+|w{r%gQySCdC zya$;ng|fU0LPEk-m*$OOXF{SY-WP5jBJezZMSvrYV<0Ns2&muqY}o zTQ)4=<#xfMoICPZQ?LMk-|ZvL+XxW3p-V2zW;Ll4Buk@_O{emU#`f)>!X1I$#Jtk8 zRw5EV%|X=x9K}pB3@UO}jT(4u2AlFyKs^Me2FYOu>Vh93d^2qKfeHot-h79Q`$axKQ~d@o{h zFS?DBmI7byy87rqTKMrT_t#x#`nFhJu4r0-jVj73N(P5R9*8)@%z6yi@l$qaT`^!r@#L*P*qh2ICC^`M#-x)cpZ~+R?#Kk>LiZ*&IlCnjvF;=LN@HQ*F zaAW|!UXmRfK%yoJwOnVxro63h4Ixp#+Pv`a>s@D9o~${JpHdWxKHQ$*-RyqO5a zoKLZkTluHG|9M`%FQ+F+R3X2rSvl_YS!N|zE<+LhD{2CKY$T(J5pX)y9m|nn%a0=B z;;?XVa3H6H6sv5T>?*tR)X53QBgId#ea!{4wG{;ZP(DS*DbDHQn`Pip(jA%^a{EE7 zT2@CGs!>VbZ;SMioQ@pgc?wC3vLRQwN|G6Gy~(gMy@_6VTwU>?_=qjc7qbncTr(0| z>*!(T#2xz$w4rDB2lW4?HSE*JFx-GSf-)xG8wlXXEA#~+LkGZmlm#Js2#AFB;?C)) zJyMa-Qui36@5}wWCa_GD5VLGK=y9*J|zP^vPPKTLokjaTm=xtZ|Q{^*T_E$t1z)F$-~w36$nxl^It0F1e(fAPlUKX)cWbgNr3`0Y#4E2UnmR+y%P})5z zzF4aIM0|?a6dFh;RKF>dnKUAp8-tUDZFM+Xb^5KwkcIimE>cYAe_B6ANhQ;^x%I(9DBUY;A@ zKy1uW+V3<#*1J^Mrv|i&w#QE(gXqsIT9fd5Xy0Hvl#!|_iIdXTtVWqz=bZzwbkYMo zRGfpsChrMQOAPnAqI8g)v#{)yJ@Igzca%uc{#YqQOV#0y$YZjxzsDmZ-&-5HJ!6!( zX6vW=88Nz}6nCydN*v};b!qh3A2d_MJWd!OGYPx24NnTY_Xr8<0C7BGHQZRP(Ffsc0Uz#-B$bKEf{3?<&kPLW zB-bLv&&5R4fnEQNFt_<_#_{&QfSOQ941%kQ9@GaIQro!A=rL^5^GkRb^{@dP%e~M9 zZPatACP#xY65j$XD=)qb4$j}EZcaL{vBp7uSO_~l_$@gd7QwuWLp(&nG!@e4#k3#L zKH1u+&I;Y3oPG4mt+3!k09J9G*+dn+MQfVxfT9@?mx6U@8#3->?qEkss0V3Mct>i- zHZDtUS~=84G6Q&JTPws0$Zqe?$3lh~dYCR-u93sX)HOTywug0l(k;i45`R~ToNy_o zyRrOCH+R_F=P;gf_q{)Y*o^}yoRHOAfI-8{W}N%~KYEYx5G4_WWeeQ;YPEi_@qy(B zx}t-W1=h%%8;iJzdS0Ah?`9S(rxg-xWRSm|jXM&aXJBE-(2^au$14b%@4yC4#vKxw>MNv}2t_+1?{Z&jg z($Ws>G|2ufb|3%xu{2{4n4)#ALzDSP$WQv5oC$xjlUQa+dM8yk&G?UU;mXWou-A`) zlepq%!3{~e%go?bD*1~vPl%8Ct$TJv<@wc*{(*rGu)gjtsX+ZJ_8tO6Qbbkoe{J`| z5qQ2eu4;Tz3d{;FuxP53;Imxwismx)BUJP12zi+ydbAplAb1l_wlo+d(UE1IyZaD$OB#qih8 zCtTCgGAE%+)e>o{AZbQqNJH1C>G=+z{g3>w+sbOjKVX?He^Hzu0~rRh63lZE3!#>1 z2LThIubO|6n7J&#gGu8*DQpWDJKd{i?O1A+|DDL5N6Y}RnXR|^)Tat374+W8#^yT|j-+iZ`xTim2X{}7Nv6OWh_4y4eDJ8*fYRB+?E?n9G8bjG`Fg4~}4 z8zgsTb8F#+EFHn2R=I)G@zwMu$umEcAa)GZ51nQ0Vw0>Z?v)@upMO8jiR6|qtAcM5 zktxu#Akn8LslCIAdPguFPqMrd7OFhg0|jaR_ak=fo)_QXkpAkk%*fj3+kqa5OmwLG(CQVBOl z*#4r)AX5jL`j%r;aX|7u|C`L}uY@<(lki;n?j%5fXbez2qv;vsB*xhJ-?(nuZvfZx z+I565`(0RI*cgA`sJs&j<&3SQq0`%sIgQB~s-s5=lp>PeiqfwhGJk#QA=F6R{k?au zf^%2$Ioq0n4%3<-@uTt8M?Y_(6~M~-qv$i(VATH9w4?KK+w3CpAVWTpywm5Jdp3&| z$6d%iURTei|0XKKbZA!cF=}h8Y_Kh}7OolukagnyUc zu()sD*EL^E;1nD7(Sf*=V1U##pu{MQ<9X$hS#U;r=0ZXea+>~+r?(8tYWu#w=|&_Z zq#KkjX^;kKq*EGc>F)0CMv!i#Lt09@q`N~ppLL(_@Bh5;^5Q5S?!DJud#*Xh_zXRP zki|sR9MvT$669$4vr+qn3iDubNxQ-Ns(cAbi4eh+5HKh&03DJ!w7rOlo(?~Im*`)A z@_N9myo>u{D`5nn4#g&UVM!!uKu>ttYio!RQxoag!f|BPOf}<;k*VjMO?zY9{XSc$ z7PTNFjCJf;QFR-Q_FqTn;)b2!re>;{j=-=ppi(db4g+g0hsWO{9e)+oXoh=2hHHm# zUg+P&Z;uONk4r@w5c8cz^VPE@gk3QY*XpSD9qf$F9JHc5I@QBF?AAIoT47pVx*l_C zUc2^AHX02l-+D;Uy)$%jb2E%$5IPfHs;pu^TeLg^AVgeCd~^N=M{75?ayd-`zM=;M zwxNracCA*vlTgwWiJa@mDUL``U*131UUsA}-jNWDA`^EfGah+i=X6S^Ro&Kzo+{*z zV=L@Eycu>a*IWMP_4Zf-=++=wG`GJ^_J*ntfAC{tth3$?UzwRSv*tdj9yksJ+NCi_ zmd(FRymKD;na3t#L{>TaJ>hgP=QOS2YU&jb><-c@WaC6&Z%hukY_StceueLjIC44v zAvFAZ$=%A)w#l0^C3>&3E@1w7-yI?*`!N92;X{6**UMLa?hvKEI|H~hZ<^@T;p;7d zV1GJ`a(1|u0Vwd*m#khK+uNQuSN9M2{O=89pYKkue|JmO>8P$!%^?~YVmFs|gf*Z~ z4==gA`R|v<^^+(>dcAcqiTaIYvfNUiG_qv(^_c2_qXA!1V96=)O69?Bdhxz~3B&GcWTr=D_aQFnZ9RoSM>n)sVl_oubB6V}-Wwhs zUU)+E{kOZxsZh`EJuG*BF%0dPlfsN=iQi~r(rIyNE-Wn@s{bTY=Ccle{BrltZ#1I; zV_WX_s_JT6-MM{gSDi%S)Y7b7()y!4D~mma$Ex==`&ti%Uj*L5>cgqo>F~14fMtZD#;QVaY>`U-jH(J373B*H6Hum@0>u-n=^637I?M?%1tC_8YyjY zr5A2=brp^uX>g6$$H=-?PR0fF?^5>w>uIB2rh@prx2k=SkBnF+&BQKMUlYjU#$)iG zvkFZ|`?`q@3VKb_(+_OmX{|a7?;sfZQX?78{2#9yr$PMgx{Q1#o`)c+er} z2p~bA7QmLju2wH!=*AYlCh1mq%a)MIi!EN(7u-^93bV^D^#ei_|JsQKo}?U|bg@Lqh50Ux zh=7nKtfq!55luv|=5=g$hgmY3v9P-OLXye`51vXN^$J56Z~GckuI(Gk7d*TH)EkLZ zKD?$~l4~Jx^RMQiA1eF|MT|e|>5(uKC8Z2xIK07QC)Z^Nu_NZcU5(p&c=DdDGXK4E z1AFz`DQr$d+0Zi@QzFvfCeXIkp7Mdup5md^B0)`E`B&&*^%n*gDGH8h%bVUk&AX>X z&Z(=n%Y1a5wuiH~y9R+CCtr-r{+VuGi&YOsRuu*!AKk2ud!OE4Ew+3r=VT?K!TeZ0C zxH!dJrHzUa^CHM=c<3+4(<7Hgx6)zM=;{w1A9$|R8R{Ru``49WdpJ%kpe3YcIzBr% zoy>UOcr0!?&J`61jspm2bidBld#b~7Ru@q-Fyeds4SXY@q;{gAlQNx|6YNqcU)J7ra zsoe;?GFSO*rUe8qB2H)V(X!{p(p2hUNU5J#hh!|{fPSnWx@qupj)yiA(4Qx5syw_XzG>kR1;|Wt=raIEo zXXRu^aU~k3`IS-jSfUfP=?&c(ir=0yA zCOt}bi$ih8-(4e^<_(&JB-H9OVyM;GJHT>p)xuPxWno_*@u-7PKC(B`ET(w`zDSm#^);&W$q zw&HPg%Iw|!-0{+(CfTfh((>s&_W4u}jB>KG!k*^2Se}QAv;N)T@rv$g@zzb9gU7Y; zl``(xPKH)Hrl+96Bo)o&^J>nOleZ9|dULbv4|u3>VRj>gvp=FoFRRaLe8rUJ!(Q_( zNlCh14QdKExp~>k2}(x3dhHsdPaQ)C$&9d-ultt;Zp?dg8I9JPcjw(WUPbjY#pnwT zWcSruEH;4wvDfKrg)f!G_+e2-y?1unz;Cg9ZacDvP^teGrS5Pl>*DR+N)|C~i+BCG z*PHVpCAkRcO^M!29$6zU*J=&y7=|MBkK*yKuB_b}E$YKTl4^cS3vQWO1yU~ zR|sBc<}4hA{f9J{ceL|Oa9NCT^kWk`Z))Sknrpr5X$ONB4vY)?L;sp=^-Jz<1}HW; zKuMbNH-DARFuCf=ny4Xz4g<(ld<4q1q0f0gi{+Qd-3ps>5jJ=X>ji&iS;Qzufm67q zjT|9$JOxY~yU?rM=(&fS}OJ2C;JA)yKS&!r`W#~8# z6w&O~(@bfZ<>F%p_wxN-Qm`L69EI_GFoyz48bpV=_K$CImQnur>NJF>h0RQx7di4v zsazcD*JYg=4b0yNW3q&~R%pR{zC3h|`&2e)HiSRz{M${-O-1^-^85KhTr0~E#xUnFze~+!O!V%z9IhFq6vm=%Us6h#8#Od>XAd^Mv3Ao(UTUnd%sa2K*4}VoPP=&n<$P@DV=>i@ zBra~XX_RXCoQ8ycwP@PKITzYsEehH5xV``}5gq-VEQ34>YaOcHB^TGkW`JZY4~Czu zXb~Sp8rG;=Xd$(q9e3p4HvUA<+283yc|5ohDuwWJX-bZQ9Z^5p^EcDk`{87V1}KaF zgss>({UR-gGwkM0V2;CAA|MSE!J8H?aaq&>&BQ!Pla{~A(Xw#Ah7$BJcbR6v(PUpF z>j8E&xDW|N6AMD#PK(gx5^(x;GvG4M{zh`_T*A`HXT0gAGaoR^sj(N{%sIh+$-3mb?J%)v z^S;(RH1b;^_Kx(rCg78Iw2kVgUKaJ1^}J5&$ikQM?~388iQ;}`vM#{Zf}7@XqN;lC zAfmmhj+sDHGe?luYnu!(N1-dTquq+_Yewjh;CDT}_qX^i!iZz~c(Q-~=RgT2 z3?8g%y9n1vdJU;U2VOo%0xPNh`@*i*k2ev})W*OCiriV(u-Wg+pwCM!$wVBdP;p$G zT%KyNr~d{tpO%ZphzITVt#1{J@7?-^;$#u>TuR8e%IIV@@K{ghxzeJ+U=qE(COyr z=sU9(Itlsvo9zCG+s8d35=c?M$xcc|Y$cLx(yagT{LL#@k73r&UvAG|Hnf`}(qA$3 zBWdr#9`-fG{ry8SjFN((l^)9pDOsDCb4E!8v7GaJ3un6YRq)@qv ztmjZ>BCa>fS_Dl7SQUQGyQ}UIPt>G^69o;dj&r)Lz_b+VM3i^*C?RqSqQ3~*CV$$6;Wdx1LiJi z7h=dAnD%^s*1mnB-)%qyj!cLn6c{bB%CIPgKj5pmK*M}L-IKfQHNXTYqXCvd>Y2rw z{B;z)d$d=l4O&9PAdtgu_(T6Xz^l@=yTY*i5mR~%JMnj9)1VnpRHuDCod(ORxO)42 z6_69pq!;vXwsotr=aep)2Y*GWZ*MSrC~O+@pw5ytGnR6NbErNG*D)c%uOfuc4$*bN z`D81w87*}rxE@wf<2$3X=X`qOZhZ66V#ch+xH)Jg8#q?_x0A3E2zSk{6$9jB>B$6` z^?Le3B!zTUVRC50+APB9t-SU0%E&vhcjEkG$GY}sM)XP|KR9iR=KVVrNP|kCCku4T zO@O%ALDK?_R8XhdUY9=?By%)B}(`Jm}&1~sQU@Y9%#w6<|Wz0=TC z5R_H(-uD(XRt=^X4iCpir--E0t3#+aJ;4@FUT1zC?U;i;n?)J;_P5*2e#{-OwOKC1>|Vb>r~(24)3ebTc~rv(*}Y`2}X z_+tFc+>vyzd3w5D5Eli-_jqaHpMXy`rmx4TiJ(Ts-QwjwWpeeZ3|VJ?rErzry-`b! zgoB93syYm&q}NuXFs%_7*;djo!E2>RcRth;M@Xva^+^Txe&kM6lr%-pjR@ z)aqy1YL!3;kMwek{ukeiMmXSz!lLZk198x^JeYNSHWc$i@6AOpw4wi0hYq|J4S8R! zxT|3V=`nulU!5NClyu!v_xn>~XlseazgQHTNy!`*GLrr1uk3gT;c-R?g~= z{7?Zpc5--E)|uh9Z-}*PuRhYb`il?f`Yt%^tSzlRJM#|0Ato>kXC>$|65xPCro*MV zQMdI1+YTa|0}VFOh$+n<&)dA&qP%RLe=#KJZLRVTIrp36d8ZEx;~LWyVzE?F)1TGZ zD}JT2rgu(e*s`tv$n`zm$`Ps}#-0`z$2_<_jHRME3TwT(yBl$#d~L88q5m9@Z1yPs zqN+~spJvD>KQ}Y7Ao1{IrQXt%YB8bb9;RC`j~5ed^?GL_`N3{RRW@`thcs~&Nt}-++Jeq#+8ixxv#6m)_{v-8LAR=N>^Xd#TIog6 z^BHXB771qKrY4Ub%}(#9?%OWopZULv-uN$q>#<`*-BIQ)KS4#D&Yv&|q3F|FWRwslU%oQt zB~52{PB|qY!H8cd!7IHrS}6{HO>ZVPa`43~u*~U64ai?gr?k(bmVAn{rX(N?C=A(* z;9XqiezD25M(CWEJfXG^3=&rZ4u5bef@XA~JR}~AWK;?f0HMh|d{)G!JY*;tx|y|R zyafDSmeH;f)j-X{*IKYN6O*?@W+Euf3Zd~4mGS#(I8gFm10kU-T@2@kgT=n|x9j!I zK#2q#Q{#hQYf79PtvHv~s$15od4WDgqP!WinLyyYORmoG={uI?3SV^TA`6qwSM!OG zA(NjJpy7=*BbC%+qjZ>iD?ITMsOOf3uj~kqaCNHD+bRYOB@n2eyn51)8&Vxbq>l0m zqz_zO77k_OGql@Zq^jcfe8l5Ben7RjoJND7-iG_^=@e_p8N4Nk6sR$cYz#KayU|Vf zlp}HNorD9tMJ?KjM+51Y!o}Z8(%b>`hkDLyDe+ul!P3YC040dBE$rhAKBR(HYod60}OOQ5BSQ96Gosc zKi^fq)F8|G$D|#e~cB#*8l_nduM*K$QAk&WTz~pN{g6 z126aqZW#6!G69}NsMC(0soAzxquRhvM^TXsmoWe2h-;^A@ZsG|4yX43_N~D0TE8k| ze=g6?tZhn8r-RRsGSu*Vjzqc=Cku(?2ogp%N38EBku2%gziu!1P7Iu=wk}{ue26`6zWOUE#btNZr%1)wxeO2= zY3;YI_cVBj-PCff=fIHSH+&byE8>d9Y$=jXnCF~u$j9*Oq=n0t8v4t*Y>)V!^5gup z1O>GNOzFhwSLQ|0!o_c-=CbbmM+>7_Wx7Bo+i#?`(@&grvuL@ycpoIS%?%@w#Y^W4Ld)1|f@rl-+yS|5<$IYHr@1gnOLpsvq zEumm$mcsz?qV2isMu1#>lGORXS62cS@v|RD9Sa)FG9+57fo&afeJ+5Fx3`ol&vW-? zdyx90D{c^JL9Ka`{c9AG4W8fjqx(^^cAv07Oz^jlA3rXJ@uR;1jd+dAhCV>1rhqkf zc%2@M`mjBIGct>49ET1w4s!eoW9Y@VX=6sL$U<1cth4H=6s;5{DxM(B?Y|P>{33Ab$(vkiR6~53nE9}VM!Oaz z)+Ocu6Gnmk0xktLYHvt~*{z**TbP&(m#e-Uf>?Oxa~r?FI!jA*V_OxY9};bpbO(l> ziumfptoJtDxY4cMlWqLct<{t{yL>i3J;Z&UE$G#vF+)SN#G8bySb<5aiJ1<3BG~>? z!dNba@L$RS_lKB586brqFd^tcQm@N6jU5YF!cJ_?9z3n@-&~oaBNrz&eay5cW*;Wh5)%t6t188` zPet8${>52VWFdXS#{;f}*?y7Q)hsj_8Q=G)SPzt8kS?7d;B3KpDy?)J+8#PsAXhBU z8BZvVdn;(4sF>;Y%%MS~^uR@?sMb#%ZjFjVT4Eci0hORDT|e@`%X#l7C3V_KcF#k# zPN)Px<&S1Ac`t+NKjsP{VMCz&CW5e2;;BDD?69}Ldw`Y~;BYkB-O+(XHoU=d&Jct| zL)cS&MaW7Xrr1nLr?Z}gVnTxuVQL$${rI3u{ECNn9_{nMwB@ zX!hIRVV5Ku;AF1lVBY-g5g}*R>WxR%ZyUt2ssx9pSqKtBOCsL@8w{r5NZj|xfr=J^ zx&4v?;S~{`+RspjR&U>;w{jP&#$nOT3)K&3>$tgNax; zBT&*YgP`{9ogz0(*HNXy3 zwnd|A*PMB9135@HN>N1ub@sH~9X9bRT8g+v9|cQD-g7et7A?t3UDvu@qpJe;6HW0H zIc~RUghJ=~&V}P-lT+(5gscdBHeg%>me8yXj5w0+BmTCe`o`~%>;~g|6+S-Q+ll_r z-B_#k>F;~ppmcxIw(Ad%Y$q0_ zuUl?e-zl^O2+j#0EZ~@!b}*)H_F+<;KP5BzVt$DWsB5bhY117|Gr%DeKzIy>7r zD^@-?n=0f9OSU=YpaA=mMLjVjlj3=>U493VRc@Wuc40RTTQwKPZ*Fy&5~ z&9ET9Akor9fM5w#4MIIKd7WegeAa&jAvY+3ai5e%io{&c!5IvcadY&W(9^onf%-AA z>>p7J7P3E(l=HZ9gfkF<>|HAZhx|1fn4JoVIjcFRi#7Oi#6es`-~m8~g;+!&AcL_Kg-T^WOKId1Q+Pd2HVh)T717KMOEFbY4L9gCYjt;TZ^wi*a z8x>`;vy69ZD;_~`r36@c&M zE)4tpe=CHltNM#*4FE^gaI@k-4_Vig?eKlu@@x|}#(Jd2I+p6`>Xkg+t)Hcd8h#6I z0-f@=X@P$u?D*VgT5ZqwGKufqUPyc%?IDhA6jW3Y{*cNgDf#ep>JtMDOF!TLGI*O6 zvqQrO@B6iX0GkpLRln2zxd<*!s<2&Tt9~|kwQ!#d5+qh*)Jf6(mlxCGzf}(rjUxX6 z0W`*D9+1II&2M}z(pr8^^U&E^qeXifa%qU-=?z>by|-lg;RikJ8EtAE(=vPRJq{*} zt=-)+ntX@s?0^j~4<${_lJt{NkT(N~$Yf&ySn6$e`YiUkQm#NF=eL3n@W z@%sR6LPxl=j88dUqQAQQAnExSj zZC~KFTk{3IX8=DpU8F=2`{SJFv=u&xgRJ@bG3S=py!&!|>q{K;R5uNiEgCT|&S^*M zNA!KKy)|+ofzr_sy{ZrLsGL^wiZkVxj{EyfRGk3`=)Zso7(k-EepHln?@w8vZ*L<2 zBw4=dq;;uc7ry&|HrwfUHYJa~aawu`6~MrN_XRr@VeJ1zVZ{(+HRQ!RTdoY&l48$Je`tk z>zfU-VZip;6=;6)$wZAwQa7IL_yI)Df|ZUIJ4OlFMjcUPX|PL6OC4LwfeIfeAvr|; zGZUqY>y40ff;XjVHE<-kw2D+YpRN!?knN$El;Ha(rBH7EvLh!Y?bf&r@2LHg9_k*q zHymfzBB2*dg|o;ul$q51O+Gca?H@+473=@;IrYDqDBY*@e!4|oZZJdQ;LnO!op+~@ zymnImc9g-k&F94OnG2~259^`XL3yzp+TScWL_!K(WVWA;JOxWPecJI>+wOeg#~?Bn zW&?09q^1HI$t(Wb6M4}$m@LJ`;UO6`1Tp;n5RUP|bO|?j?3iApfe!`5V6%EZx?0Uw zLj!Edq(U#J-uM)`GYiF!xfru_#dm-_H4F^VxazCA>fX zmTz1*2<%%qU*6;3B|Qcy4wF;|Ij?EdF$U$nFvcXB&xYJ0c?aKZ75;Lq;2M3y;d183 zpzJ$SHV64p4ej3||KDm#`2vgyseCR>J3#5Rs z{abTyK6m{#-_j%k6wz4YYVq~g+ZGt~l<1AWw8NsYl`Ke9sQ2MK-XI&Ve zqyXrCMi4ld);p*_fBsA+B&5&4^(Y{*_fDCL0xJxZlT=ieB?vEVZt*g!%vf_^th>1Q z*4V_PATJLZN>N`wMv)G!Duwz7I;yeONWhygd~D5{EUDm^m+KWF!P0}V7oX8n{SQNt z2~gxURB)f@YJ`zFamqF9{S7)88Mr>pNWv+q+yskHB7H2-UhInT)G z-33FPTrGo4&G07}D=8-_6^?CdPIgDqbjSOp>EPhNj8_FmE`@dN6K>HxY) zi3obNK#Nf+#6##$^1uK4pMgp!1b}JLh`G?LD=HvqIXh!nWf~M7{3O8hRbO9Ecj91e zZH)v6^PB4~1%JfR**U-LePD7j7hC}J?UV87~8`gB0)~y2@=-~J`BI^6sSluY;U^D+RlFC}j zb@?q;!TScp+H7X$8I$smV!qeay+{{NR3!fufP`Hu*O~0w#!Qxz(nflHH93b4RbCt0 zpjAHIko)Q-5s}2xj-)>($2Wx38y`#xt>!+46e1(QvewM} z`2&^mN$WB34Ss!>bbU-{hjD@8(4|p7M9VxYbVI;>ZSL&P16rB01W{N zsl9YTbw+A|eP(titoJj=YitEALz(xra&s!bFR3Y2Vu;Q={H&JX#2?>|4N_zr9;iA@hP+eSM~ZP_6tRbzC-Vpu=p*57Hb zopaJYl6!fQ@27rV26A*^P=$g^Uv1D0Gd(?Bt&3$i4Q)t87DhQZyVIMe^8TG%Hf-VO zAj4l&O<@aex1wJaw%`-u3$(;W{1EJ-R3>_5CM-n*Kr4{I#-E)})<7t{cBud2{u5-* z<>1wsjva7a`AQaY!-@lzZ8D<=3NWcF9|YFl?zy1G{oD5OHJbli;wRT5jgtnGu!CsY zpC*9O&{^@!Vl(aYXE*dSs93o=AK9+KTg0n0=FGF6_`XsN%2yBH??)%H>8^Py15@gV za!Z;##{fb^pgB}tC70MQ=)eF*Bt&h@D7d`SuR*~3cNfT<*nc3aJn}&Lf;-127}RGh z+AOv~%~5571By5`+vA?`08C8E6PcE;<(oC>3Kl zaS6ES-_(DwT53ek;If{T<(m^LlR!Dpq6y@TG^<~nuQ#|LGLWO&5^RqGNGuXy{0Ci~ zQQ*WzZq1m2{l6uxN$#}%3w|W$g+)HQyc?iCTjg@rM8X~FhJOG41ze=TAflnJ6-Utf z^kFcq8jUN0QBa_YPpL5J0@n2Gd&Ba!-|nQJ_ly)UghK#q0<%6PNDqG;J$V)d-Latz ze$$Cj(Y1$|uklVbn>iM7?4hacq2umF!W@ax7S!$Iw=5py{xl^wyC<2irKt_M3M>1- zv?f&g!B9%;)df4XQRv|cLZN0>^;>H@jmh=HkZ@Fw?7m=zusKZE(0G$XvV zPd%-7p3;t7&?Nfof1_Q`?J5eONj)E#m^==kpxjPGJP(IaTLkbT=63t)Jx=;I`eLZe zgvn7$_)fH7mGG1^#4o9ea#?GB$#3^ZLL|XW`=ZIVY^|H(f7s(nVP7L3z^3OAGTCoc&p} z?K(2AJ+8)ak6rJmmVOoc94|J=0|EhvNJ=8MzK>QM*3`Mn8I6BxUMPAZ^3ANA(`FSH zBAjvlH0ma~=Jz^vc$Mk&@|R$Hs^lKj=K z>DgHiMgiEeudY64!9+#N=(6)dk*n+W2ooycZ}WyqSz2`}Rfgm*&2R2mx9H`^w4L`8 zrt&vaSzvB=dSg}ixWQM}44(z1J=iS~f98!{z%4_jbghzsi4e}Whx16U&k>Bag7uA! z`1`Q>@yDj;QL4Ay^P(nFGMeW$s>(X*9nJ^gR!zj3Phz4E#WMOK3x2`Z3f~tA(}Yv> z3HC%uj;02LabXI_1NveLMo&L_4U4PhJYSsa3;cLEMECq+o-QNi6fEZ2rnDF3-UKi3 ztq!h!V6;SyRH^P>d`;nr)ukmg0SP+5$?hj}*$B zN>&*|#2#F+4}qB}{D^x)DO8Z=G79Q|!On>05tDp8s6-&Q%3pME!v6*|x*%Zd^z^rY z@SN>RHoT5T2B_jd^vG#$Zf@WrJqSxM@lwJzKfxnW8qq%l6@~=g_#+dkJXfEwXwMvH zVOD#_>%NOrA+xIo<5R$bF_IHkZdt`EP5ouEcC|WmG73Mmx3G+?=TuuVr!iK9#J+-} zY{O*p?B8!hP%e(sCS_Ya_3BvA5I)_EhZ53hZy`x$DZ zQ937hRs$txv|Qyn!N^~!M6Q~!y72Oo`4xiwRSOmWL&StZaG!b4pGZt7r_o9$sTt1t^jb}}CV)BXjncy3T;}?Q zM#KIQ0xJiRON954(K-z*GK8hk{52b4%ZjaHwm2(eNJpkwMX81{HQEV;g|wn9M$Vo*^fHYLWw6o=R~8{XSDFW9%)T{QFf@?>;A}H9Gr*ZbxK4$E2P&G7p7l$AM3U49Vm{~EQK;PLTJ!Il69F`C&YCr> zv?Y9w;esPa)1urlIcn`F;$u+euf34M{E3XYx#)J{-VA!(+?cA#?6d9d1Coe zaACMA{>xAqnjyinNW7x?wWHzG--sBC2Hl2O1D7V}A8&|7rFML*u(KlFJ!i1L1;IYg+T#W#9w~9+kvV6%f{vjor(-{pPcOl|Y3UeLU zI(pF>Q3d#QbGk3TNwVH0X9*IiYYT=QiXuF{s)Jo{Zb&smJS*1}e^-;?bQaQU)0enh zF4{Pidr4{GRj)CLrE=+ZoER&^`O2#e$|Q)vLoScp3O>Y_45oBEhDdU3lZDSP;!&_`ysz!|pC3J?bX4Oqg7XEOCQ%Ng7vLZ>AqT%#z_k#f#B?=VHIJAVI z(nIdLo%=^`Z$UOTHak#kIj68uGTaLRkIV%8`Xw62z9<~t!g$e1^~5`h>NfR_&seu|-U@P0S52wANPG<-Q+? z5znuwfli>sIC^WAgZN*eLiDN_gv#K6RtG7c%h%!?ziFun3+{_tY3WU)AQ=2^lSCD_ zJ@e$aZ_re+Na{k>S`}xmKX}WH!OzE=PW9e_>W7Q+J;x^tKP?OI%d6ZKTe^9;_HK%o zjpr|%i{M~Uk}v-e4yX7-$O3fP5JHx8aVS04eVqB9RT6WRtPr#{*e{*6Qnv5DP|8>d zd^VHn1z`KQq$I%7^?3FAsdQTKCmA}dChPZxoak@g<1MYj;OVvw7cni=zw78(--#_S zbHk}#%Ge><8-{!0ZZ%1LuJt1|A4$$T$Fy)(?puolbL)rfXvKuRH;hH||6+H2S)2EE z!Nd=O&IG5w+E(uN!2frjhxUM8_pq>qJ%WX|a9YT{KMf~p3YIE>J$bB0qAnCQ_onoq z?WrWrUx#*v&{5)}`>~@;wk6eTYn9?FOf9z6Vy2I?)E= z`=qcZ&j#~D&K^V&&(`6kKfj*n3ukd(V%(dU-w5inQuNj@#gEUEuPKD5V|3mhe?RBc z`c-IObWsXOpCfyYe248bCVj}1BG^+o>6&6W?^K>l#mOO7`%O;K>vKZ zNRHkYas}AUfzW_(s(3X<$>pzKc{xL5%jT=Zq@)tl9sv@J@bD8c;Ewy|;BY>|KK^5@ zd;Kp8=vN}h$wj@hH1(Bf4ZEFLx-!B6bZC7wRa zN2ie@)nbVgR7<(^p63vLU6TY|uNT)SEf#)sN^AX0=-a=RDaK~*0Q0jC*DO$Yve%P5 zrxYOs?VjC=NmW$7|gsvBv#SEK8gkplo(@bX)_B-rkZaGrO0kn}WthHP-J2 zlv>6QjgAEe{3T@gYJ?ttuD-?!kv0Nm@P}S;_@PA=N5c29LuQynzBt3&j%uLlfa4{Y z!dKo6ofoK-x%qyWQ%^DJNXk2Tj9=p2;b`RJ4YDKtI;kUrF3!Aerr`g&hmN7k2O!Br zQAMTaq<^A75{v}6PiT6Zzo&86aIbG<@&W{7y8=>Lme4;Fo>`(3c2z1`S0d<-@Zmce2qlQtmfe#O4-;L7D^9VDBM@glhm}$ zE*NbgX4!5C!yu1GE-DH#+U(_(<@uTM?NTL+mJEF?U?Q7%J-*MdKCh23;wavolj}E} z48F;{PIXtQR?}RiLIk#oT7n#P>{JE8*=_p6_97ybw-44$c%~`d&*(&@N_Z-fuu!rJ zWGrQDaUr}tK}E?zr{uh8@8j{o&2s|~!J^T4Bneq<|Lg1Vg8mwiR`36)su}<-*ZF0Q zI#WhH*LC>Dw4Ubg0N(xm_N<53iISMuFbHc)>Qf;nldfc%+^o!|5u%*dzW);yzHG;{ zlx=ml!B}iBmM*3ELB`&kc=7W@T*=suMutP6V=bgT-247#gthUg1+jPI!!l@aED=b5FkPXvIU*nj4TVcy5)7WNK>bY zP#co52+SuiN!ZLOykyTUKM}}EYq7IyFtnEmD1X1Mp^qqh4)bPqJjj{AtP?7hqYKm- z+ODqS5#)@e_>-0%`nh@-15{Qrclqcjdq~KZF=M>HYG8ewJ;=V`&70`n9GMbBHqMDH zzO$3()h{5xoIie$UzYs9%d8gV_YkCYbGLEQCjj*s39-ZvRYXa*Q1hk$uvT`N!K#{t8J zuCH|#MSWp;xT@3AW(12~^)k_Iy$c0(7M>R^N|y|r{#Q?WlBFLwmEYAX<2D4omVPQA ze##{;3LS#WdW(MzeUAnjL-}I4*8z4MflQi6@rlgw{gV0k_1$n8HWF|tYW3k3lA)u8*sF7h*vCU7s@uXXv(>EtyTEsNM+Us(bCkH9sP8$**%t zoSl1_R%`gKXGb|-(W-^&$!!9hK|%HOZiacziLcU$gU*Y>@N1s|g{-MtEu}1|>@c-w z4Pd6JB8C{nQ_T4sv1UwZ4c(rK?cnge!ZIfpiy+x( z**%wl?A=5UYb^bdBf&lSlHj!rq$HIGq6O4N{z}A^Tr0jpIBHjN@XxV}!P!po##QXb z_DdVBn0P#eLZ~6sx^F7p#wSPN<`}bKNq=cir@8RToB9r$oT(v`?fLTVhQHaTfkNrB zF5ry@GL2zNL4H0=MFk_+{7hWz@1Y@QA+xS(t%iT~$UxI434*I2O9?#apaBLZzO|{x z2vy?|kR&kN2&!7hXaTg6=WS59GIT<^*U?xYLO^X>rPV&E_xa>eNLWAi(6iDh$7#yo zlBsD0w-HBj!^FzAj1WAC>4m*@{gUS?+Qu-?BaTqg7O(fpQ$?)K2=FGbzI|brv6K%A zu&#N23M8&hkougDBf#q}9!<`v3qV0#@3vD|eV#qr zE+;>wavhU+J}j;FgOSyyEdAcU>c)c;wD(p!(|kAEEjEa$hq99YH1a-?O8V%D$yzXm z%92izE@~w_JO}YIeQJ&!z`hL zCD!?}v8tq_g9c@8X(6Wv9<4i5@S$i?Fk0w}97F1MVKYH{C z{?C4x%r87$!hyG&oi!mMUMSt=gpboWvI7edOle~q8U*2|Qyv{fJNSZ6Epn@8i~FT4 z^lYI*(;iNT@o%Eq$9A$J1JlriHJk?FTc00R&D+z$oPPJ=?FxhP?Tohq{iF0O1jG)a zozn$<3i(F+^62Vbd&$|t<4Y8!iwuhEOG-L1)2R}%+$^cmO4aWqAIaGU#l;oSK4P>{ zMC8y+%jxy$_8Vo6CYKZ?9A3#wxeki}!Ma0|WRsW$A)?U9)|@V){90&9yKNESN^o?)d)krSzcws`PW zTXW#4M^npG(vmix6VZnUW}gCEFr+Vj@CFb3B7hVT&c_R_X|5Xmu*{~5W!4}TlYmu& zi{u8|68o`4(4Wp*Hum<#9^6PD=ZULO^bp^pZT+Tu3Gkts0aSxeyCHR*u|VAiWV+V9 z*BKf2Hh-u6J+)u$UY)Kl|H}C+uvzV}(E_hWtDX)0UBH{KoH5jS%GU(4-^Os&m&;nY zqyIKoEOJ_$u1WQr9fl1K4mP)wE{t9c(C-&q^9uYDiu$xOhWqHdZ;nkLs}3#7mR!MT z$zPLr-=n9V3d37CUc-{^O`jA4S2}Qe?4RsD_42*1HuZU5VQlrq(#U1XD3 z%C+3^V;;OP;l3;UXl}pH!~JBy^4;wD*8{^P(yaRoUwmHhR?M;tTK=Kd#zWhe3cjqG zp2x>O*{deHDWmnN{u?#^C}|wWW#iCycv-4tlK$$Dw68m{x~c5=i1^6}=d0^yjnm^- zj}r54Ufvsl>Hm+vZ=14arSzK=PQ}~*{XSY{&HY<;yvXNn<32yF7>kR`lk}-?_mb0T z{(JNhtbmKvr~F6)S~pH@ z+Ag@P+<$-kuICy)@Fh*>j+4HA8plH7V8hhZ)Y^}4yqtSU1+u`NNGz-5#keD*k_PGG zQBJffv0_1IUS@?nX;Us>;+HP$N|BkBrR|-5I=}8!5fgJe?S~Lzcd4Bg>0H@(6mg5j z7h&5+veE_9#^g%t&xH!N@`9g*Z`bepibIKxiwqJgJE{DN4C&0wB=r5$>4ykGro2LO zO_?OJb^{lyT3CbG*Z*vhp^%N&1~P6K5CBVqq+7RLi2J;cLFRD+4IUi)V$NOeWoIEV zE34}()UimiCQG=fT1qUd}zvepM1N*N*1iOl1gFY zQuHE=&0)V8)bO?5hcs=N<=z=&-*NV`p>F8bJ=k5QSx8GhO+M$%1)ML zVO%`*m@jS zTq;GWe8dl#;6O24&f@7q>PnOHET&?jT1W3v?m=Vz2(-zK3W?TN%lT)U@{jnZ9SuEt zt`_hU6s-i)5%+$?7AD*qywgnezEmEMyarVZea$74%-Ko0Y3oLtl{d$R8uMcr+$>{K zR{!ZeK>t&*Py0t7meuOvn(W;9+qLu8srcyOeVnqrSHd%Tb_lC#dhS%1 zmY9ep4@at(GTBVgS2GH2J_=I2b(e}9Bl&mvgi1;rWZp}6b3&`77q>DR>MJw5<#QIKnt+;uM=XVXH>Z|=MkJy;_!;x*db+o5XQ{8}=R zOj>jr{iC(pJV$}NeDXU&GAvK-zZk+_x~m8y(83=0NDz6`Bcz$K{dHMa+m!M(4qJ8J z0Mf8|D+n7VZFha#r}YT2RfIHs>NW5s3K!Yu9!bkNqvg=!BjZmu?-RO5+8ai(_tsUEs{1c{CUxtEZ}y{b63`x1R8%~l+Cc`8_54~b zj54)Q{;|Few95=ch(y3~$If34)W0bM%t+h{C=1$XpJ9mcXSZHr?!Lb`4a^#k{sD7) z_+7r(0G%jW;O~GXR0NfzS&{s06O&maj}Lr%U%)P8Hm`-I1dEhMFQ-5XcD>cF`FkNQ zpJXiSA?t>dVP`NyAf#>VsP19u$AMzCjIgdQ{*a3+#2X;#31{JW{v4F)e5Z{pq!`JP zNE9j{$Z0Fy!o(!z?dQnOogdX~f=SF^2l?M5)(H;-`UL=1y-OZJd z-jJx=(Bd8Ec($x1_hkdcptiNxbN1d z<7_4!GSkK8Hfc1bw~qe&{Pv3~m8ctnnwq-V>y$v_@&^GlWONuPKydoANjS{b=jC9w z^5Cs0ZTvT?yxS^RrVPdXOCki740)e_EqvIA5;^~4Ju?q=l7&%5;Im8S(jt`g-}OMP z`DLh8S}}U35%Z?XDf4P{ym0-aAP*P~ zw4#gRHf>t2?V|}_#v>w4xja8XMU<77rZg6d+??kjMpauhUJjBi9^s?`6*Dh^5Oa zuWyS%C+5g#b{ zBwpYSHL8>b#hB8P8{JcMDmfZm4I|bqjE^zsx#xF;8e4P%uIa`aV#+fXf^9LFwF zEz`Ixnc+x%MkBmzkzM3L$A??xe1g>&+*8alD~Kdr(VMrH&YvKp1=n?{<#tE5FkV}U z(0zMMk#y5!G1Dc49mBH!R$^bcXRz1{q2Ve86B7y~T}7HMiYuVW9<5wp z_ANoX2x^XPq1c(zfUZ)8biV48t*gA*QPO0IDrGS+{N9OqpgB(}V=Z~2M-D$v;>a+| z$A|~+C$PE#QoV{Gzr@boel_RmVyEY@1Z3N62q>{Cx?!kX9!5ap%*>$&Y3@k98^F&Y z+5U!5s3*`?_qI0f{AsKX!Xeix34%X2qqP}T;VJQfrbWV4BvzbE248)tt1skbv$ z>*GB!v$padya zw=}Yj?a_PwncNYYU0_7qDW8C4Gi;@}#rUstR_e`Vmr#-BygxtFxAa(YcCx1T8p~hV{%o*OJDWvIofjg1x^$m>DK|jG z;9^bS-`YTZ^EIWVlJobXW(sy2+0IPE!W1hb0tuIRBEjzQ8L6DlkbbpVl|rDFDTwLq zO=|<7$vg2j+IHW7^22*t_*@=)jTKwxSOdi>QR21BCts7?Xqjtk`nGe3cglEs#n_j$uRi6*UH`?I&45l&4Cpo{1 zs$a|$au!r)NuVkXo7;<=+E8$IF1N`~=7Pa}x@avKFlC%4D|+A^%69|Sla-P(GNNCy zI)lrrDc_Ua^=ExLrl#i^M*of$1AZ&m+p}2sZ!yCu2bTR+hNUUH>oWOyi=f$Vl2k`I zd<|`fps;Y=H>#l!$iR+Z%?l)e`Glxn9lE!-H(74Z&DR1Fi&kOObhVFy3=Fxx*rhr% zA^=Y}Z|(QHg%7-h+H$!$@vsD0ZwFcHRMPFEFRQmH9tEwNag*Y2J3TO#|H6YSh*`0T zZ#N~ndWA&h!R`)5q)1lh;JLjG%+$U}OWhCh&6cCOH}q~NXuO(LIiARF6!lAI;^MR8 z8HZZG?<{Rl>g8Sz4A=b3v*^HrIC_V2!{sLH76|C%j=V!j0W)B6C|VwA5(9H#YSxB@ znn_ieZi-Jtgp~Q^uio72r-abF@75}63L!V#_ zrdm4QPW!?^Cc33+3j9aRN1Ek{ll5K8ahjLmXU6+oSd^*b!9yMU8F)H~)YeP@;L<+i z%lSWi+Z`wzLJb?0>(W zwwKQ;b$zxQ z8NFzgA4%ph;UXp`X5R{mc3Jv}WN_aL2jDutJQfUAZyGl^;zNFY#ai&6OWNgF%QnWX z&16`0K|w)@QUie-qS?cgKoLgl?Px5MOCcb|WvkEnjD0O%JH_ zc|u&oH0QfMhARtFg)C+=yVkG=$g9_*g^LVyg!<`WSQ6FiomT2kRv)(83|``N@<_=h z)8vx{yjn2g;GiOR;HUaO^z&Ce)o=FwITwA`aN@oUbX3eN$!eum ze4Ftc*&u({Kkh2af*kqV-mXmj+SDWrjTw^BzVqF_i=?ry$SmxPYV#dEu%)s(r=Qxs z3XwYXf3G1?xPdUe)gQ&q{^NCwTJk#~#%8^fo92cJXGt43kwaCR-njL3C6zT@f zut^xNZH*O8zkfnICy@X_xH5RpMd>kA?IaHR8FzW4KMetGPL>WYWPr)|_u`kN%myGY zE$3Zr;YJ{|yDig==n>V}NApG=?Sgrjj z33Ay$#)T_#R<9kj8id5o15SSRz?^IqeHSptHL6QQhl_HM-WMB;cVoY&&saJihb&Zt zzZVE|eR2^@=G{k~Zk8I~C}kd+ot^xJzrmMbgRUw#Nf+ZrhrKXI`+Z`x&(G}A2gv{d zp+os1^cDE01ch*3zI*qs14=gjM`KKJlp=SQEH8rEPD0n8VXHPcDKtzgr^>uO+cc4N z9F;3Mk+r=PtsIv+yC;zpW&V0NPNbFlmqPL!^GjZB$SYcU!N6{k&XbY zWxdeqjmbzU@)B?-xck)IWmzCN~|G>FH@uysQpg)uxzawO==&T zS6F#~mW;#s z_0xIriE1_}WTZpp-0r>uytj%{3xWIT!9zWLee39H{%m|l2t>KYhCLaAoEH`~}8)XdqGKqP4YIzB=4E#7;p5(8I&>JPCS7Afxk zro%5{2cq2_emQ+!|k3KpWz0D3x*-+i1T~o00febBxskm&^7~ z1PQ(K8&Lpz(sj~zRB7s>FNR7Z;7TQAQR`Sw;VmdEL@VeeVzARudOdyP{s##yBktqp z?0#2CQA0^l5Prw_&APje_7asPj`jtvTd>t4jgjszdW8pVb>jrF`3#;aBSpk5Q!o6t_lP z21XU7dFpD+VRA_YN?Ft9@3E27#xni#KOp8r95}Q>&Y-@Yo*Rbmeh;ZTjN12)=bkuE z4!euKXMjVhyW!DyKA*90KC*|}BMWpfx#lcK(w%4BjrdHNJ;i_f$<%cG4W4Y4I)19F zBOv85(`wvOv5WBDC|Ig)V;Rp~XzyNslDhnD@BWSCI$04ht$^SpM># zwRdO!-hs5`-5H~^b%8JG9RNNjSQi+tQ&nIpSONptcHWMu)V6i9m_(vt=GNs50+{rC z#JtyYU*CNQyn{TJfJ|EZd*P{D;}61+vPK(SF5~huJ@CELM#^TsArLv8H*$=93U_(F z6bePlE}iT)MRq=C_|herEw2Bf>6q?%?w<1D<pwh@v&H7XA9ph;N^M3=Q(+}NikUQxzvsC@2i=fimGT4B8e~Gt z*H-oOk-4mU5_b9mQ&7f0Yt&LMn0vijil4Dr0wlWrngSdObCl{>2mfA`F)(eZ<` ze~<;2Q4InK?#kgxypwm$Pkz&oKxFJfRC~zGKV7Ig6R_{V$>-er@!ukDZnqp3tuECi zP0*n>vS#n6kwgL2lQ40#>Pt0|%@fXb)vkuuuws!P$Jp4IW5c*UkSACxXVPJuGBs3~ zJnn^>3^J8@XR5kyW$9XkN5rBFD=V)r@9NNj%kmSI)cL@$UU=YSkcJxu46*PrPt2pZ zOq;Obz1+h%$YSV-UZLTxAKn)(W17Yhb^Axgk*HTtP=NaVH+yn*pA$fKoPB}~z4=~` z{UkWV2o&-yf?)V*b9(RtbosHSs!UXST}jxDoAk1ijHZM2D8zcL>+1mzv@9$Vf^Hob za8gM>uFAe!l5C^0y%@H#?ws9#fgb)v{y0}6fDbMhBs6HkmJ;xtPU6-oi#FouX?DVP zisWGsFIG{rcfs^u3Tns4&0yTJnv--7HC%(JXWG1fO9;?Sz=Ey2-f0HIE$is)8b0Bq zk4XYeIFu^Pab86z@W;u?X^t6<65S&Tq;pJ8P7Ysw+U-rRYAd>TXP3azXUi}fa}6>q zqw6IhAHtsajRaAVS-54aFBD6@uWV10W46Op^|<@s$5&*%i1ZpbCMI5p1~yyyYzi|c zCl>HY$ddw6K5r%0;BH76g|1jy+&*`;z2VnUDB#eIrukZl0)cO>aAp*#8qU$*Na*jp zn_is#@~gF0$tU>yi90pv9P zlBr`*P7E`eoJK`Dj~Ljg@aG&6zLZIri$esvR`T-B#o zD2}zmHWg#oi_xV;n6+N<=kNKOwR&MfZcyr^12#Hj67q4GpOO8%ynJsZoSx>12;p6q z1KGg6Vbfq=%tr>SSN09-`6Srg=xYcNI-*eOmfJU)B(Ds1bfVtcUk=AbL7>TWK>L7< zQFpl7L#_CCUVQ`MVxRLxe|RmvtXtDT`T0V{=aSdeYfDX^;&MLtysc~`hI>uZH?EH| zLVt>YU5O(F_N119 z_|SO&r};B&Q}w&!xcEJkWa6m>ws2`4s!P_SXUMbM=Rrn-8xQ`qU!MhhQ=`(@UXd-! z+nsxl`{bj3XiCZehaCFQwFNLeYduR+W9qzj417eCidpFut~Ox`_$EJJHiHbQCE+4@ zpc9Mf+!;Z%Veh$x%gJYF$4>Q&zgC9ueiTDEZMZ%5Hx9 zHijJt+wocPcLk*<^x)7hg7d?a`hIJxLOib`G(21Vb!EhQW zh(Q|O0MNk4A`%soCdYU1d+0%RC^ep}shY&!#IO5f#oUMxrS=ooi`66U+7tSdw>>XC zXv(ojs{~gaq%P2lgM>(D2n{*3k!5~CQPE9xb#+HqSA_=;Tu?@Sc&q~C&;gKjm~p-R zTc~+}cPi?$g7?hw#Q9?Vi3M6*LUSw2U8_WShUq`wN&iTdB(ALCUdOzZ%T7P<2uw{) zePeZ~T==k<9vH*hWd2EsHMlrAI&;Ig+3$b|7n6g5c7cJ0gB%L4;P~sK#AWx9y7VPAxVQve-)pNqnEJQ#g9Wy_pooYZ9-6{) zQ!WxCS7Ee^XQDYgX$$u*jc-UtevgKI5l3Sl_1bbVZhPAad9%QG{U(2_#@j{EYdL2NYcW*uP zwo(>wJjN#`yaVDvZ}Vrnyc%3ZaR;6HP zZf4%nLU~SuR~s}PO1dS7RRhm#;|kRvh^VSov-^x$2AT!v3!}YvCY`EE-h-_l^1ge4 zOWRwh@-pe=%W%t2*NlNH-8*Eb!DZvCr9blZC>4@)FJ`^a2eU4pLi(C2SFjU%u58(>)eX>2gG!SK zP@Ap=U!C3H7``MW(Kw^`c=FPIZ{~(Lf~xuy0izsr#D&*_)1bLHs-;(=A&wU1tdv5l z5GtrV0HqRXBV8egWJmQK+j!degz?*Uw*(`Nw6ilOa-Th(7i~7gl6C#IrWHyLCA!oAm5KE=*1{FEy7*uX)VtD^1@sTsFB>T=dbd_<9Su zJbK?rOQ4U>ohVW^d+eh)f}b+TiaZ@XdfJz(Nr&=FOYzCcH9(dQ-B5?!U0aB^0Cpk#rhDW6cI+OXwB1n!s zGJhV>s_IW?Wd{=H|33a^Jo);-y79v*tJLOZIkXuk99FfZ-+eM1~=!Q8NFpJ5lPz-xwmB4SHlC*G7tNu_9Lns!ACHd1o z(waWB<&!m2%&`QajGtt=d=Ek~)ZcLZ*k*WfsCi8?m&asSZ9&|Zz)cW*RBl=O0r?}x z#&q}v1a#YArnbr(eEL9}NTK%hvt+E4MEDW~pU+*dL2v|Re$I|P9Hwc z(WBsfwVdOqvTU~iMh?*quQ?%-6!iPUlUBBv{7o#y9{3O8Uxc}Rq;WBytn|#Tw$E2f zxUGvMj1kC>jvNVoy0!Sm5J}8Q8xH+s4}ZRBsLT}$Ki-g&TPznLJ7099*1bBPaCiMk z4`1Tx`QI;`)oe?@k-t1ZSg*yr{dy8PXo-VzO&(>nSgz%w=3nHLoY&0d_tu9>Jb7){ z=6g6ZE$q;-6>vlc>L#zxu-()8%^8q)G?aVw4$if~(9d6;?ZDvs&KwQ`{FCA#D%~0~ z8aFpLJ7CRE^MveX8yHRn$J*T~(KPbF!#uS)-tcm=oMv@3HFpZf46om4ELNtSY!2hm z`i&~l(ms^V53Vi0l|U%bb5o7BC;{JNjdZ-I3HRy>?Uhs`QLyL*PqF4plCT#8@hO;3 zSC>D%|FcHR+ZWNkn6!B7-iuzp3Lnz0ocO5cA1tMke@2j6NSm8e14%+iK#}T|myx=# znd>Rj+tSXb?Us>KOYb^@_kt;dTmMNRxfI}G2;o>Fw$SMP+tLg!%Xmd1FKwL2K@6d$ z82U(T#c-4u`CQ{qZ-5nDb1|0JLk_J1|xwNOWncW?I* z4%O#9BcV@F=C(M!|7E2Ga>@eL&Xn5a_vmL66k6SSVWRsm&%l)w#pRW3zaw0KCyZ_x zH&`5rIMSyv_4{nBlf_ClJx-mR)d`9qUm! znPY3`f}V+8)-hcG%CjJB*B}kFDY^oI+xz%TS^{gkP1-=rB{l7~+zC z5|hDq_`h zrcb!j0-L`pJIce*ktcEfgcs&}?)fhgeqL@ITUrD7vHJD}4OIA{%Xmnu1{n*l*MSz) z$v(`pJu&PiZa5@j;l$_xO%0v58BGo`TK2z^*Vx1~Dv5{{p0S;s+PJAYH@c$}|KC^l z<_+Rx@jecGeJ9Pr>C1REFk=EIpYBSfE|8JEoAjecrQ;wdD*VS+KVCNT@Lf;p5WmjH zCL(7GnV4_4C=3$qzE}rEiZSXVt!|YDLin9BcTdLAfcpM&nccJ z$`_vBLF«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

    5U&h(#7kC=jCnfoABy7d?@qN+3i1vea1T8 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 diff --git a/docs/build-benchmarks/explanation/data-preparation.md b/docs/build-benchmarks/explanation/data-preparation.md deleted file mode 100644 index ce32a398d..000000000 --- a/docs/build-benchmarks/explanation/data-preparation.md +++ /dev/null @@ -1,161 +0,0 @@ - - - - -# Data Preparation for Multiple-Choice Question Benchmarks - -The prepare stage builds the seed dataset that backs multiple-choice question (MCQ) generation in `nemotron steps run byob/mcq`. - -The data preparation stage pairs few-shot rows from your configured Hugging Face benchmark with domain-specific text you place under `input_dir`. - -Each seed row joins exemplar MCQs with local passages so generate can copy structure and vocabulary from the benchmark while staying grounded in your corpus. - -## Why Few-Shot Examples? - -Few-shot rows show answer format, option layout, and tone. -They steer style toward the benchmark you picked and anchor quality on curated source questions instead of inventing layout from scratch. - -## Domain-Specific Data Requirements - -Domain text is what the model reads when it proposes a new question, options, and a correct answer index. - -### Format options - -- Text files, one directory per target key in `target_source_mapping`: - - ```text - input_dir/ - тФЬтФАтФА banking/ - тФВ тФЬтФАтФА intro.txt - тФВ тФФтФАтФА regulations.txt - тФФтФАтФА police/ - тФФтФАтФА main.txt - ``` - -- One Parquet file per target, for example `input_dir/banking.parquet`. - -Each `target_source_mapping` key must match either a directory under `input_dir` or a sibling `*.parquet` basename. - -### Parquet Targets - -Parquet targets must include `text` and `file_name`. -The loader treats each row as `parquet_path:file_name`, so `file_name` acts as the stable document handle inside that table. - -### Content Practices - -- Curate plain text for every target. - One folder such as `medicine` can suffice for a pilot; another team might split into `radiology`, `podiatry`, `clinical_documentation`, and similar labels that mirror internal source taxonomy. -- Avoid shipping personally identifiable information (PII), or replace sensitive spans with synthetic text before you run the step. -- Few-shot tag metadata is separate from domain files. - When you set `metadata_file`, you can attach tags to benchmark rows and filter few-shots with per-target `tags`, as described in {doc}`get-right-questions`. -- Start with data you can legally host in a development environment, then tighten controls before you connect restricted enterprise corpora. - -## Step 1: Load Source Benchmark - -The loader reads `hf_dataset` together with `split`, `subset`, and `source_subjects`, letting `ByobConfig.from_yaml` fill defaults where the YAML omits them. - -Expect question text, labeled choices, a keyed correct answer, subject labels, and optional tag strings when your metadata pipeline populates them. - -### Choosing a Benchmark - -Pick a benchmark whose tone matches the style you want the generator to echo, for example: - -- `cais/mmlu` for broad academic multiple-choice style. -- `TIGER-Lab/MMLU-Pro` for harder prompts with more reasoning surface. -- `Idavidrein/gpqa` for graduate-level science questions. - -Authoritative identifiers and default subsets are listed in {doc}`../reference/benchmarks`. - -## Step 2: Filter by Target-Source Mapping - -This stage decides which benchmark rows are eligible before sampling. - -Each target lists `subjects` and optional `tags` (when `metadata_file` is set) using list or weighted-map syntax. - -### Sample Configuration With Weights - -```yaml -target_source_mapping: - banking: - subjects: - management: 0.7 - marketing: 0.3 - tags: - reasoning,unambiguous: 0.8 - knowledge: 0.2 -``` - -The `tags` field always requires `metadata_file` with question-level rows the loader can join. - -### How It Works - -1. Place domain text under `input_dir/banking/` or supply `input_dir/banking.parquet` with the required columns. -2. Filter few-shot candidates to the listed subjects, then to tag combinations when tags are active. - Subject strings must exist in the Hugging Face split you loaded; confirm spelling on the dataset card. -3. Weights on `subjects` and `tags` normalize to probabilities. -4. The Cartesian product of subject and tag choices becomes the sampling categories inside `make_samples`. - -For the `banking` target above, you get four combined categories: - -- `management` + `reasoning,unambiguous`: 0.7 ├Ч 0.8 = 0.56 -- `management` + `knowledge`: 0.7 ├Ч 0.2 = 0.14 -- `marketing` + `reasoning,unambiguous`: 0.3 ├Ч 0.8 = 0.24 -- `marketing` + `knowledge`: 0.3 ├Ч 0.2 = 0.06 - -Strings such as `reasoning,unambiguous` split on commas when matched against metadata, following `mcq/dataset.py`. - -## Step 3: Sample Few-Shot Examples - -```yaml -few_shot_samples_per_query: 1 -``` - -Each query (domain chunk plus its draw) pulls `few_shot_samples_per_query` rows from the filtered benchmark table using the combined weights from Step 2. - -Random draws add diversity, benchmark curation supplies baseline quality, and subject or tag choices keep prompts aligned with each target corpus. -One to three few-shots per query is a common starting point; higher counts improve format mimicry but raise tokens, latency, and cost. - -## Step 4: Load Domain Content - -### Input formats - -- Text files such as `input_dir/banking/intro.txt`. -- Parquet bundles such as `input_dir/banking.parquet` with `text` and `file_name`. - -### Chunking - -```yaml -chunking_config: - window_size: 4096 # characters; use null for whole-document context -``` - -When `window_size` is a positive integer and the document exceeds the window, `chunk_text` samples a random start and returns exactly `window_size` characters for that query. -When `window_size` is `null`, the loader keeps the entire file as one segment (`segment_start` 0, `segment_end` equal to length). - -Chunking spreads questions across long manuals, exposes different sections per query, and can shrink per-call payloads compared with sending an entire chapter at once. - -## Step 5: Create Seed Dataset - -For every domain document under a target, `make_samples` follows this loop: - -1. Sample `queries_per_target_subject_document` draws from the subject├Чtag distribution. -2. For each draw, fetch `few_shot_samples_per_query` benchmark rows that satisfy the subject and tag filters. -3. Attach either the full document or a chunked slice according to `chunking_config`. - -```yaml -queries_per_target_subject_document: 10 -``` - -Rows accumulate in `seed.parquet`. -Refer to {doc}`../reference/output-files` for column names. - -Generate then reads those paired fields so the model sees canonical MCQ structure from the benchmark plus grounding text from your files. - -## Next Steps - -- {doc}`question-generation` shows how generate consumes `seed.parquet`. -- {doc}`pipeline-overview` situates prepare inside the wider `mcq` family. -- {doc}`../reference/generate-config` documents every YAML knob, including chunking and query defaults. diff --git a/docs/build-benchmarks/explanation/filtering.md b/docs/build-benchmarks/explanation/filtering.md deleted file mode 100644 index 161949600..000000000 --- a/docs/build-benchmarks/explanation/filtering.md +++ /dev/null @@ -1,133 +0,0 @@ - - - - -# Easiness and Hallucination Filtering - -Decide which generated multiple-choice question (MCQ) rows look too trivial or unreliable before you export `benchmark.parquet`, using only configuration and prompts. - -The `HALLUCINATION_EASINESS_DETECTION` stage runs two prompt families in parallel, each backed by one or more models listed in YAML. -Every row receives numeric scores and boolean flags. -Optional removal rules decide what survives into the final export. - -Artifacts and filenames are listed in {doc}`../reference/output-files`. -Field-level YAML is documented in {doc}`../reference/generate-config`. - -## What You Control - -| Control | Purpose | -| --- | --- | -| `filtering_model_configs` | Which models answer the easiness and hallucination judge prompts. | -| `easiness_threshold` | When the easiness vote fraction is above this value, the row is marked `is_easy`. | -| `hallucination_threshold` | When the hallucination vote fraction is below this value, the row is marked `is_hallucination`. | -| `remove_easy` | If true, rows with `is_easy` drop out of `benchmark.parquet` during final assembly. | -| `remove_hallucinated` | If true, rows with `is_hallucination` drop out of `benchmark.parquet` during final assembly. | -| `prompt_config` | `null` keeps packaged prompts; a path must supply `easiness_filter` and `hallucination_filter` blocks. Refer to {doc}`../how-to/prompt-tuning`. | -| `ndd_batch_size` | Batch size for the Data Designer calls that run this stage. | - -Even when removals are false, `stage_cache/filtered_questions.parquet` keeps `correct_ratio_easiness`, `correct_ratio_hallucination`, `is_easy`, and `is_hallucination` so you can audit scores before tightening thresholds. - -## How the Scores Work - -For each filter family, every configured model returns a parsed letter answer. -The pipeline compares those letters to `answer_generated` on the row. - -- Easiness builds `correct_ratio_easiness` as the fraction of easiness models whose answer matches `answer_generated`. - When that fraction is greater than `easiness_threshold`, `is_easy` is set to true to indicate the item was too easy for the swarm to disagree with. -- Hallucination builds `correct_ratio_hallucination` the same way for the hallucination model list. - When that fraction is less than `hallucination_threshold`, `is_hallucination` is set to true to indicate that too few models agreed with the generated label. Typically, these need human-in-the-loop review. - -Adding more models under a list increases the denominator of the ratio, so revisit thresholds whenever you add or remove swarm members. - -Each model alias produces its own response column before ratios are computed. -This approach helps to compare votes row by row. - -## Sample Configuration - -The following pattern matches the sample `tiny` configuration: one model per family with aliases that differ from other stages and from each other. - -```yaml -easiness_threshold: 0.8 -hallucination_threshold: 0.5 -remove_hallucinated: false -remove_easy: false -filtering_model_configs: - hallucination: - - alias: hal_gpt-oss-120b - model: openai/gpt-oss-120b - provider: nvidia - inference_parameters: - max_tokens: 1024 - max_parallel_requests: 1 - temperature: 0.0 - top_p: 1.0 - easiness: - - alias: eas_gpt-oss-120b - model: openai/gpt-oss-120b - provider: nvidia - inference_parameters: - max_tokens: 1024 - max_parallel_requests: 1 - temperature: 0.0 - top_p: 1.0 -``` - -### Optional Second Opinion - -Add another list entry when you want independent votes without changing code: - -```yaml -filtering_model_configs: - hallucination: - - alias: hal_primary - model: openai/gpt-oss-120b - provider: nvidia - inference_parameters: - max_tokens: 1024 - temperature: 0.0 - top_p: 1.0 - - alias: hal_backup - model: nvidia/nemotron-3-nano-omni-30b-a3b-reasoning - provider: nvidia - inference_parameters: - max_tokens: 65536 - temperature: 0.2 - top_p: 0.95 - easiness: - - alias: eas_primary - model: openai/gpt-oss-120b - provider: nvidia - inference_parameters: - max_tokens: 1024 - temperature: 0.0 - top_p: 1.0 -``` - -Use a model from a different model family when the generator model is also the primary filter model. -Set each entry to the production models you want in the vote. - -## Removal Defaults - -The `remove_hallucinated` field defaults to true when omitted from YAML, while `remove_easy` defaults to false. -Set both explicitly when you want reproducible behavior across environments. - -```yaml -remove_hallucinated: true -remove_easy: true -``` - -Turn removals off while you tune thresholds, inspect `filtered_questions.parquet`, then re-enable them for production runs. - -## Prompts - -If you specify a custom `prompt_config` file, include the `easiness_filter` and `hallucination_filter` sections expected by validation. -The default configuration files wire those prompts when `prompt_config` is `null`. - -## Related Information - -- {doc}`quality-validation` for upstream judgement, deduplication, distractors, and outlier stages that feed this step. -- {doc}`question-generation` for how rows enter the generate pipeline before filtering. -- {doc}`../how-to/skip-stages` if you need to rerun filtering after tweaking thresholds. diff --git a/docs/build-benchmarks/explanation/get-right-questions.md b/docs/build-benchmarks/explanation/get-right-questions.md deleted file mode 100644 index e32393876..000000000 --- a/docs/build-benchmarks/explanation/get-right-questions.md +++ /dev/null @@ -1,75 +0,0 @@ - - -# Getting the Right Questions From the Source Benchmark - -Choose the best rows from the Hugging Face source benchmark, such as Massive Multitask Language Understanding (MMLU), to use as few-shot examples for each target, from broad choices down to very specific tags. - -You control which source questions appear as few-shots by configuring coarse filters (`split`, `subset`, `hf_dataset`, `source_subjects`) and fine filters (`target_source_mapping`, and optional `tags` backed by `metadata_file`). -The intent is to show the model exemplars that match the subject you are generating for. - -In `nemotron steps run byob/mcq`, each key in `target_source_mapping` must match a folder of `.txt` files or a `*.parquet` file under `input_dir`, not an abstract label on its own. - -## The Funnel: Coarse to Fine-Grained Control - -Most question-answer benchmark datasets expose many subjects, such as astronomy, econometrics, elementary mathematics, nutrition, and so on. -Coarse filters shrink that universe before you attach sources to each local target. - -You can narrow step by step until each target draws from the pool you intend. - -```{image} ../_images/funnel.png -:class: .sd-p-1 -:width: 640px -:alt: Funnel from coarse to fine filtering: split, subset, source_subjects, then target_source_mapping with optional subjects and tags per target. -``` - -```{rubric} Coarse (top of funnel) -``` - -- `hf_dataset`: which Hugging Face benchmark to load, for example `cais/mmlu`. -- `split`: which split to read first, such as `test` or `train`, applied when the loader pulls the benchmark. -- `subset`: which variant of that benchmark, such as `all` for MMLU or `kn` for MMLU Indic, also applied at load time. -- `source_subjects`: which benchmark taxonomy labels may appear in the pool. - If you leave this list empty, the pipeline expands it to every subject available for the chosen `hf_dataset`, `subset`, and `split`. - Mappings only sample from subjects that remain in this pool. - -```{rubric} Finer (middle of funnel) -``` - -- `target_source_mapping`: for each target key that exists under `input_dir`, you list which source subjects to sample and optionally assign weights. - This ties each corpus folder or Parquet file to the part of the benchmark taxonomy you want the model to imitate. - -```{rubric} Finest (bottom of funnel) -``` - -- `tags`: optional. - When `metadata_file` lists question identifiers with tags, each target can filter few-shots further by tag strings such as `reasoning` or `unambiguous`, or by comma-joined combinations such as `reasoning,unambiguous`, optionally with weights. - Tags are the tightest lever on which rows become few-shots. - -## How It Fits Together - -1. Load: the pipeline loads the benchmark for `hf_dataset`, `split`, and `subset`, then keeps only the subjects in `source_subjects`, or all subjects when that list is empty after expansion. -1. Map: for each target, `target_source_mapping` names source subjects and optional tag sets to sample from. - Source subjects and tags each support explicit weights; otherwise sampling is uniform over the listed entries. -1. Sample: while building the seed dataset, the prepare step samples subject-tag pairs according to those weights and draws few-shot questions from the filtered source tables. - -The coarse settings define the global pool. -`target_source_mapping`, and tags when enabled, narrow which slice of that pool each target should use when it pairs exemplars with your domain chunks. - -## Configuration at a Glance - -| Control | Where | Effect | -| ------- | ----- | ------ | -| `hf_dataset` | Top-level config | Which Hugging Face dataset supplies few-shot rows. | -| `split` | Top-level config | Dataset split, such as `test`, taken from the source benchmark. | -| `subset` | Top-level config | Dataset subset, such as `all` or `kn`, applied before subject filtering. | -| `source_subjects` | Top-level config | Restricts which benchmark subjects remain in the pool; an empty list expands to all subjects for the chosen dataset, split, and subset. | -| `target_source_mapping` | Per target directory or Parquet | For each target under `input_dir`, which source subjects and optional tags to use, with optional weights. | - -## Related documentation - -- For full option details and validation rules, see {doc}`../reference/generate-config`. -- For allowed Hugging Face benchmarks and subsets, see {doc}`../reference/benchmarks`. -- For how the prepare step uses this mapping to build the seed dataset, see {doc}`data-preparation`. diff --git a/docs/build-benchmarks/explanation/index.md b/docs/build-benchmarks/explanation/index.md deleted file mode 100644 index d511b73fc..000000000 --- a/docs/build-benchmarks/explanation/index.md +++ /dev/null @@ -1,110 +0,0 @@ - - -# Concepts - -These pages explain how the `mcq` family inside `src/nemotron/steps/byob` prepares data, runs each generation stage, and optionally translates benchmarks. - -```{toctree} -:maxdepth: 2 -:hidden: - -pipeline-overview -Data Preparation -Get the Right Questions -question-generation -quality-validation -filtering -translation -``` - -## Architecture - -::::{grid} 1 1 1 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} {octicon}`workflow;1.5em;sd-mr-1` Pipeline overview -:link: pipeline-overview -:link-type: doc -Prepare, generate, translate, and the Parquet stage cache. -+++ -{bdg-secondary}`stages` -::: - -:::: - -## Core processes - -::::{grid} 1 1 1 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} {octicon}`database;1.5em;sd-mr-1` Data preparation -:link: data-preparation -:link-type: doc -Seeds from Hugging Face plus local corpus chunks. -+++ -{bdg-secondary}`few-shot` -::: - -:::{grid-item-card} {octicon}`cross-reference;1.5em;sd-mr-1` Mapping targets to sources -:link: get-right-questions -:link-type: doc -`source_subjects`, weights, and optional tags. -+++ -{bdg-secondary}`target_source_mapping` -::: - -:::{grid-item-card} {octicon}`sparkle-fill;1.5em;sd-mr-1` Question generation -:link: question-generation -:link-type: doc -Data Designer batched calls from prepared seeds. -+++ -{bdg-secondary}`generation` -::: - -:::: - -## Quality assurance - -::::{grid} 1 1 1 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} {octicon}`checklist;1.5em;sd-mr-1` Validation stack -:link: quality-validation -:link-type: doc -Judgement, deduplication, distractors, coverage, outliers. -+++ -{bdg-secondary}`validation` -::: - -:::{grid-item-card} {octicon}`filter;1.5em;sd-mr-1` Filtering -:link: filtering -:link-type: doc -Easiness and hallucination scores with removal flags. -+++ -{bdg-secondary}`filtering` -::: - -:::: - -## Translation - -::::{grid} 1 1 1 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} {octicon}`globe;1.5em;sd-mr-1` Translation -:link: translation -:link-type: doc -Curator translation, backtranslation, metrics, final schema. -+++ -{bdg-secondary}`translate` -::: - -:::: - -## Next steps - -- Hands-on first run: {doc}`../getting-started` -- YAML tables: {doc}`../reference/index` diff --git a/docs/build-benchmarks/explanation/pipeline-overview.md b/docs/build-benchmarks/explanation/pipeline-overview.md deleted file mode 100644 index cb65e020c..000000000 --- a/docs/build-benchmarks/explanation/pipeline-overview.md +++ /dev/null @@ -1,44 +0,0 @@ - - -# Pipeline Overview - -The `mcq` family is registered in `runtime/benchmark_families/registry.py` and exposes three entrypoints: `prepare_data`, `generate`, and `translate`. - -`nemotron.steps.byob.scripts.runtime.run_byob` dispatches by `stage`: - -| CLI / YAML `stage` | Calls | -| --- | --- | -| `prepare` | `prepare_mcq_data` | -| `generate` | `generate_mcq` | -| `translate` | `translate_mcq` | -| `all` | `prepare_mcq_data` then `generate_mcq` | - -`nemotron steps run byob/mcq` executes `mcq/step.py`, which forwards to the BYOB argparse dispatcher in `src/nemotron/steps/byob/scripts/run.py`. - -## Generate stage order - -`generate_mcq` in `runtime/benchmark_families/mcq/pipeline.py` writes Parquet files under `output_dir/expt_name/stage_cache/` in this order: - -1. **GENERATION** тАФ `generated_questions.parquet` -2. **JUDGEMENT** тАФ `judged_questions.parquet` -3. **SEMANTIC_DEDUPLICATION** тАФ `semantic_deduplicated_questions.parquet` (skipped body when `semantic_deduplication_config.enabled` is false, but the file still materializes with duplicate flags) -4. **DISTRACTOR_EXPANSION** тАФ optional when `do_distractor_expansion` is true -5. **COVERAGE_CHECK** тАФ optional when `do_coverage_check` is true -6. **DISTRACTOR_VALIDITY_CHECK** тАФ `valid_distractors.parquet` -7. **SEMANTIC_OUTLIER_DETECTION** тАФ `semantic_outlier_detection.parquet` -8. **HALLUCINATION_EASINESS_DETECTION** тАФ `filtered_questions.parquet` -9. **FINAL_OUTPUT** тАФ copies into `benchmark_raw.parquet`, applies `remove_hallucinated` / `remove_easy`, renames columns, and writes `benchmark.parquet` - -## Translate stage order - -`translate_mcq` writes: - -1. **TRANSLATION** тАФ `stage_cache/translated_questions.parquet` -2. **BACKTRANSLATION** тАФ `stage_cache/backtranslated_questions.parquet` -3. **QUALITY_METRICS** тАФ `stage_cache/quality_metrics.parquet` -4. **FINAL_OUTPUT** тАФ `benchmark_raw.parquet`, optional `remove_low_quality` filter, column rename to the MCQ schema, `benchmark.parquet` - -See {doc}`../reference/output-files` for the exact filenames. diff --git a/docs/build-benchmarks/explanation/quality-validation.md b/docs/build-benchmarks/explanation/quality-validation.md deleted file mode 100644 index 769accb23..000000000 --- a/docs/build-benchmarks/explanation/quality-validation.md +++ /dev/null @@ -1,32 +0,0 @@ - - -# Quality Validation - -This page summarizes optional and mandatory checks between generation and the final Parquet export. - -## Judgement - -`judge_questions` scores each candidate against the `judge_model_config` prompt template, producing `judged_questions.parquet`. - -## Semantic deduplication - -When `semantic_deduplication_config.enabled` is true, `TextSemanticDeduplicationMCQ` runs inside `runtime/benchmark_families/mcq/deduplication.py`. -If the flag is false, the stage copies the input and marks `is_duplicate` as false for every row. - -## Distractor expansion and validity - -If `do_distractor_expansion` is true, the pipeline expands four-choice rows toward ten choices, then runs `check_distractor_validity` with `distractor_validity_model_config`. - -## Coverage - -When `do_coverage_check` is true, `TextCoverageMCQ` analyzes whether generated text still reflects the source chunk windows. - -## Semantic outliers - -`semantic_outlier_detection_config.enabled` toggles `TextSemanticOutlierDetectionMCQ`. -When disabled, the stage writes `is_outlier = False` and null neighbour metadata while still emitting the Parquet file expected by later stages. - -Each stage writes its own Parquet under `stage_cache/`; see {doc}`../reference/output-files`. diff --git a/docs/build-benchmarks/explanation/question-generation.md b/docs/build-benchmarks/explanation/question-generation.md deleted file mode 100644 index f0b6d99c3..000000000 --- a/docs/build-benchmarks/explanation/question-generation.md +++ /dev/null @@ -1,114 +0,0 @@ - - - - -# Question Generation - -Understand how the generate stage turns prepared seeds into new multiple-choice question (MCQ) rows, and which YAML settings you control. - -Generation reads `seed.parquet` from the prepare step, batches work through Data Designer using `generation_model_config` and your prompt templates, and writes `stage_cache/generated_questions.parquet` under `output_dir`/`expt_name`. - -For YAML field names and defaults, use {doc}`../reference/generate-config`. -To override packaged prompts, use {doc}`../how-to/prompt-tuning`. - -## Overview - -Question generation uses few-shot prompting so a configured model can draft MCQs grounded in your domain text. -Each call combines the following inputs: - -- Few-shot exemplars that show the answer format and tone you want, drawn from the Hugging Face benchmark you configured during prepare. -- Domain passages taken from your `input_dir` corpora and paired in `seed.parquet`. -- Model parameters under `generation_model_config`, including provider, model id, and `inference_parameters` such as temperature and token limits. - -## Few-Shot Prompting - -### How It Works - -Templates package exemplars and domain text into a single prompt. -The exact layout comes from the packaged defaults when `prompt_config` is `null`, or from your override file when you set `prompt_config` to a path. - -Illustrative shape: - -```text -[Few-shot example 1] -Question: [example question] -Choices: A. [...], B. [...], C. [...], D. [...] -Answer: [correct label] - -[Few-shot example 2] -... - -[Domain passage] -[Your domain-specific text here] - -Generate a question based on the content above, following the format of the examples. -``` - -What the model sees: - -1. Example MCQs in the target shape. -2. The domain passage the prepare step attached to that row. -3. Instructions to match the exemplar format. - -What the model returns: - -Structured fields for a four-option item: question text, choice list, and the correct answer key, aligned with the response schema Data Designer expects for this family. - -## Language - -Benchmark few-shots are often English, and many teams pair them with an English-capable model, then run the separate translation stage when they need another locale. - -To skip translation, you need benchmark rows and a model that both support your target language. - -## Row Inputs - -After prepare formats the seed for generation, each batch row carries at least: - -- `text`: domain passage the question must ground on. -- `few_shot_examples`: formatted benchmark exemplars for the prompt. -- `target_subject`: which corpus folder or Parquet target produced the row. - -Additional columns such as `source_subject`, `tags`, and `language` are carried through for tracing and templating. -Refer to {doc}`../reference/output-files` for the evolving Parquet layout. - -## Model Configuration - -You control cost, latency, and creativity through `generation_model_config`. -A minimal pattern matches the sample configuration files: - -```yaml -generation_model_config: - alias: gpt-oss-120b - model: openai/gpt-oss-120b - provider: nvidia - inference_parameters: - max_tokens: 1024 - max_parallel_requests: 1 - temperature: 0.0 - top_p: 1.0 -``` - -### Temperature and Sampling - -`temperature` controls randomness in the provider request. - -- Values closer to zero usually produce steadier, more repeatable wording. -- Higher values increase variety but can also increase refusals or off-format answers, so raise them gradually while you watch `generated_questions.parquet`. - -`max_parallel_requests` caps concurrent calls per batch; balance it against provider rate limits. - -## After Generation - -New rows move through validation and cleanup stages before they become `benchmark.parquet`, including judgement, optional semantic deduplication, distractor expansion when enabled, optional coverage scoring, semantic outlier scoring, and easiness or hallucination filtering. - -Read {doc}`quality-validation` for the full stage list and artifacts, {doc}`filtering` for threshold behavior, and {doc}`../reference/output-files` for filenames under `stage_cache/`. - -## Next Steps - -- {doc}`quality-validation` for the checks that run after `generated_questions.parquet`. -- {doc}`filtering` for how easy or hallucinated items are removed or retained. -- {doc}`pipeline-overview` for where generate sits in the `mcq` family. -- {doc}`data-preparation` for how `seed.parquet` is built upstream. diff --git a/docs/build-benchmarks/explanation/translation.md b/docs/build-benchmarks/explanation/translation.md deleted file mode 100644 index 99a6cc2d1..000000000 --- a/docs/build-benchmarks/explanation/translation.md +++ /dev/null @@ -1,114 +0,0 @@ - - - - -# Translation - -Learn how to take an existing `benchmark.parquet` from generation, translate it to a target locale, score quality with backtranslation metrics, and export another `benchmark.parquet`. - -The field names, defaults, and validation rules are listed in {doc}`../reference/translation-config`. -Artifact paths are summarized in {doc}`../reference/output-files`. - -## What You Configure - -| Control | What you set | -| --- | --- | -| `dataset_path` | Absolute or workspace path to the source `benchmark.parquet` you want translated. | -| `output_dir` / `expt_name` | Where caches and the translated `benchmark.parquet` are written. | -| `source_language` / `target_language` | BCP-47 style tags, for example `en-US` and `hi-IN`. | -| `translation_model_config` | Curator experimental translation block: `backend_type`, `params` (model, provider, credentials, `inference_parameters`), plus optional `stage` and `segment_stage` maps. | -| `backtranslation_quality_metrics` | List of `{type, threshold}` entries. Each `type` must be `sacrebleu`, `chrf`, or `ter`; each `threshold` must be nonnegative. Keep at least one entry so scoring runs; outputs land in `quality_metrics.parquet` with per-metric scores and `is_quality_metric_passed`. | -| `remove_low_quality` | When `true` (the default if you omit the key), rows that fail the aggregate quality gate are dropped before the final export. When `false`, every row is kept so you can inspect scores first. | - -Do not set `translation_model_config.stage.enable_faith_eval` to true. -Translation relies on backtranslation metrics instead of FAITH. - -## Running the Translate Stage - -Pass `stage=translate` unless your YAML sets a top-level `stage` key. -The CLI requires an explicit stage when that key is absent. - -```console -uv run nemotron steps run byob/mcq -c translate stage=translate -``` - -## Tune Quality Gates - -The `backtranslation_quality_metrics` field is the only place you define automatic pass or fail rules for backtranslation checks. -Add or remove list entries to change which scores are computed, and adjust `threshold` values when you want stricter or looser gates. - -After a run, open `quality_metrics.parquet` under `output_dir`/`expt_name`/`stage_cache/` to read per-metric score columns and `is_quality_metric_passed` before you change YAML again. - -## Final Filtering Control - -- `remove_low_quality` decides whether failing rows disappear from the exported `benchmark.parquet`. - - ```yaml - remove_low_quality: true # omit to get the same default - ``` - - ```yaml - remove_low_quality: false # keep failing rows; filter manually using Parquet columns - ``` - -## Reference Layout - -The sample `src/nemotron/steps/byob/mcq/config/translate.yaml` file shows a complete `translation_model_config` with `backend_type: llm`, NVIDIA provider parameters, and `stage` / `segment_stage` tuning. -Copy that structure, then swap model IDs, concurrency, and language tags for your workload. - -The YAML below mirrors the sample configu, including `remove_low_quality: false` so rows that fail the aggregate quality gate remain in `benchmark.parquet` and you can inspect `stage_cache/quality_metrics.parquet` while you tune thresholds. - -When you omit `remove_low_quality` or set it to `true`, failing rows are dropped before export. - -```yaml -expt_name: byob_mcq_translation -dataset_path: /path/to/benchmark.parquet -output_dir: /path/to/outputs -source_language: en-US -target_language: hi-IN - -translation_model_config: - backend_type: llm - params: - alias: gpt-oss-120b - model: openai/gpt-oss-120b - provider: nvidia - api_key_env: NGC_API_KEY - inference_parameters: - max_tokens: 16000 - max_parallel_requests: 8 - temperature: 0.0 - top_p: 0.95 - stage: - segmentation_mode: coarse - min_segment_chars: 0 - output_mode: both - segment_stage: - health_check: true - max_concurrent_requests: 8 - -backtranslation_quality_metrics: - - type: sacrebleu - threshold: 25 - - type: chrf - threshold: 50 - - type: ter - threshold: 50 - -remove_low_quality: false -``` - -## Directory Structure - -The translation stage writes intermediate Parquet files to `//` as `translated_questions.parquet`, `backtranslated_questions.parquet`, and `quality_metrics.parquet`, followed by `benchmark_raw.parquet` and the renamed `benchmark.parquet` in the experiment root. -Use the intermediate files to debug language mix-ups, threshold misses, or model refusals before you change configuration again. - -## Related Information - -- {doc}`../reference/translation-config` for every required and optional YAML key. -- {doc}`../how-to/custom-model-endpoints` for credentials and base URLs on your model blocks. -- {doc}`../how-to/skip-stages` when you need to rerun only translation or downstream stages after a config tweak. -- {doc}`pipeline-overview` to see where translate sits after generate. diff --git a/docs/build-benchmarks/getting-started.md b/docs/build-benchmarks/getting-started.md deleted file mode 100644 index 7132ed55f..000000000 --- a/docs/build-benchmarks/getting-started.md +++ /dev/null @@ -1,104 +0,0 @@ - - -(getting-started-byob-mcq)= -# Getting Started with Building MCQ Benchmarks - - - -::::{grid} 2 - -:::{grid-item-card} -:columns: 8 - -**What You'll Build**: A small multiple-choice question (MCQ) benchmark for math questions from the sample `tiny` configuration. -You'll run the `nemotron steps run byob/mcq` command and it will use an NVIDIA-hosted model endpoint for inference. - -^^^ - -**In this tutorial, you will**: - -1. Install Python dependencies. -2. Run the `tiny` configuration from the repository root. -3. Locate outputs and scan the main Parquet artifacts. -4. Confirm `benchmark.parquet` columns against the output reference. - -{octicon}`clock;1.5em;sd-mr-1` This tutorial requires between 10 and 15 minutes to complete. -::: - -:::{grid-item-card} -:columns: 4 - -{octicon}`flame;1.5em;sd-mr-1` **Sample Prompt** - -^^^ - -Help me create an MCQ benchmark using the `tiny` configuration from the Nemotron repository clone, write outputs under `./output`, then show me which Parquet files to open first. - -::: -:::: - -## Start Here - -- Run all commands from the repository root so the `input_dir` path in the procedure resolves. -- The sample configuration uses the `cais/mmlu` dataset from Hugging Face for few-shot examples of multiple-choice questions. -- The sample configuration uses the `src/nemotron/steps/byob/data/tiny_input/maths/tiny.txt` file for input. - - ```{literalinclude} ../../src/nemotron/steps/byob/data/tiny_input/maths/tiny.txt - ``` - -## Prerequisites - -- You have a host with access to https://integrate.api.nvidia.com. -- The `uv` tool available in your shell. -- `NVIDIA_API_KEY` exported in the same shell session before you run the procedure. - The default model for the configuration is `openai/gpt-oss-120b`. - -## Procedure - -1. Clone the repository: - - ```console - git clone https://github.com/NVIDIA-NeMo/Nemotron && cd Nemotron - ``` - -1. From the repository root, add the dependencies for building benchmarks: - - ```console - uv sync --extra byob - ``` - -1. Run generation with host paths. - The `tiny` configuration sets `stage: all`. - This stage setting chains the data preparation and then generation for MCQ. - - ```console - uv run nemotron steps run byob/mcq \ - -c tiny \ - family=mcq \ - stage=all \ - input_dir="./src/nemotron/steps/byob/data/tiny_input" \ - output_dir=./byob-output - ``` - - When the `-c` / `--config` argument is not a path, the command resolves the config file name in the `src/nemotron/steps/byob/mcq/config/` directory. - - When the command finishes, list the `./byob-output/byob_mcq_tiny/` directory. - The `expt_name` field in the `src/nemotron/steps/byob/mcq/config/tiny.yaml` file specifies that directory. - Look for the following files: - - - `stage_cache/*.parquet`, one file per intermediate stage, described in {doc}`reference/output-files` - - `benchmark_raw.parquet`, the full row set before optional removals - - `benchmark.parquet`, the final `mcq` schema for downstream use - -1. Open `benchmark.parquet` with Pandas, Polars, or another Parquet-aware tool and confirm columns match {doc}`reference/output-files`. - -## Next Steps - -For background on how stages connect, read {doc}`explanation/pipeline-overview`. -For task-focused changes, continue with: - -- Swap in your own corpus and mapping: {doc}`how-to/prepare-data`. -- Tune endpoints and keys: {doc}`how-to/custom-model-endpoints`. diff --git a/docs/build-benchmarks/how-to/custom-model-endpoints.md b/docs/build-benchmarks/how-to/custom-model-endpoints.md deleted file mode 100644 index 652bdb917..000000000 --- a/docs/build-benchmarks/how-to/custom-model-endpoints.md +++ /dev/null @@ -1,37 +0,0 @@ - - -# Configure Model Endpoints for BYOB - -BYOB does not ship model weights. -Instead, YAML blocks describe OpenAI-compatible clients for each stage that calls a language model. - -## Generation and judgement - -`generation_model_config` and `judge_model_config` are required mappings. -They follow the same structure you see in `src/nemotron/steps/byob/mcq/config/default.yaml`: `alias`, `model`, `provider`, and nested `inference_parameters` such as `max_tokens`, `max_parallel_requests`, `temperature`, and `top_p`. - -`setup_model_config` in `runtime/data_designer_utils.py` reads these blocks when Data Designer runs batched stages. - -## Distractor and validity stages - -When `do_distractor_expansion` is true, `distractor_expansion_model_config` must be present. -`distractor_validity_model_config` is always required in the current schema validation. - -## Filtering swarm - -`filtering_model_configs` contains two lists, `hallucination` and `easiness`. -Each list entry needs a unique `alias` across both lists. -The structure mirrors other model blocks so you can aim filters at different endpoints than the generator. - -## Translation models - -Translation uses `translation_model_config` in `translate.yaml`. -`backend_type`, `params` (including `api_key_env` and `base_url`), and nested `stage` / `segment_stage` keys are passed into CuratorтАЩs experimental translation pipeline. - -## API keys - -Model blocks may set `api_key_env` to read secrets from the environment (for example `NGC_API_KEY` in the sample translation config). -Set those variables in the shell that launches `nemotron steps run`. diff --git a/docs/build-benchmarks/how-to/domain-data.md b/docs/build-benchmarks/how-to/domain-data.md deleted file mode 100644 index 48bf0f9d3..000000000 --- a/docs/build-benchmarks/how-to/domain-data.md +++ /dev/null @@ -1,105 +0,0 @@ - - - - -# Using Your Own Domain Data - -Use this tutorial to learn how to build your own benchmark with your own domain text. - -You will create a parent folder, your `input_dir`, with one subdirectory per key in `target_source_mapping`, each holding UTF-8 `.txt` files the prepare stage can sample. - -When you finish the steps below, the prepare stage can build stems from your corpora together with your Hugging Face subject wiring. - -- Each directory name directly under `input_dir` must match a key in `target_source_mapping`, for example `banking`, `police`, or `maths`. -- Split long material across several `.txt` files when you want different documents to drive different queries. -- Set `input_dir` in YAML to the parent directory so `uv run nemotron steps run byob/mcq` resolves relative paths from the shell working directory, or use an absolute path for a fixed location. - -## Step 1: Create Target Directories - -Create one folder per entry you plan under `target_source_mapping`. - -```bash -# Example layout next to your workspace; adjust paths to match your machine. -mkdir -p ./data/byob/banking -mkdir -p ./data/byob/police -mkdir -p ./data/byob/maths -``` - -Path tips: - -- Prefer absolute paths in YAML when several people reuse the same file from different working directories. -- Relative paths resolve from the shell working directory where you invoke `uv run nemotron steps run byob/mcq`. - -The pipeline resolves `input_dir` relative to that working directory. -If you need a fixed location regardless of where people run the command, set `input_dir` to an absolute path in YAML. - -Do not use Hugging Face subject names as directory names; use the same strings you use as keys under `target_source_mapping`. -Few-shot subjects such as `high_school_mathematics` still belong under `source_subjects` and under each targetтАЩs `subjects` field. - -## Step 2: Add Text Files - -Place UTF-8 text under each target directory. -Use several smaller files instead of one huge blob when you want different documents to drive different queries. - -```bash -cat > ./data/byob/banking/intro.txt << 'EOF' -Modern banking in India originated in the mid-18th century... -EOF -``` - -Read the sample `src/nemotron/steps/byob/data/tiny_input/maths/tiny.txt` file for tone and length. - -## Step 3: Point YAML at the Parent Directory - -Set `input_dir` to the parent of those directories and wire few-shot subjects your Hugging Face split actually contains. - -```yaml -input_dir: ./data/byob -hf_dataset: cais/mmlu -subset: all -split: test -source_subjects: - - high_school_mathematics - -target_source_mapping: - banking: - subjects: - - business_ethics - - econometrics - police: - subjects: - - jurisprudence - - international_law - maths: - subjects: - - high_school_mathematics -``` - -Allowed `hf_dataset` values and default `subset` / `split` behavior are listed in {doc}`../reference/benchmarks`. - -## Best Practices - -### Content Quality - -- Aim for a few thousand characters per document when you want diverse stems without exhausting context. -- Prefer complete explanations over fragments so judges and filters see coherent context. -- Strip or replace personally identifiable information before you run in shared environments. - -### Organization - -- Keep one domain taxonomy per directory; do not mix unrelated subjects under the same target key. -- Split long manuals into several `.txt` files so `queries_per_target_subject_document` can visit different offsets. - -### Performance and Chunking - -- Pilot with a handful of documents per target before scaling out. -- Use `chunking_config.window_size` when you need sliding windows over very long text; `null` keeps each file as one unit. - Field detail is in {doc}`../reference/generate-config`. - -## Next Steps - -- Run prepare alone or the full pipeline after you align YAML: {doc}`prepare-data`. -- Inspect `seed.parquet` and downstream paths in {doc}`../reference/output-files`. diff --git a/docs/build-benchmarks/how-to/index.md b/docs/build-benchmarks/how-to/index.md deleted file mode 100644 index 7b6c1694e..000000000 --- a/docs/build-benchmarks/how-to/index.md +++ /dev/null @@ -1,94 +0,0 @@ - - -# How-To Guides - -Task-focused guides for `nemotron steps run byob/mcq` with the `mcq` family. - -Start with {doc}`../getting-started` if you have not produced `benchmark.parquet` yet. - -```{toctree} -:maxdepth: 1 -:hidden: - -Prepare Data -Use Your Domain Data -Model Endpoints -Tune Prompts -Skip Stages -``` - -## Setup and configuration - -::::{grid} 1 1 2 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} {octicon}`file-directory;1.5em;sd-mr-1` Prepare your data -:link: prepare-data -:link-type: doc -Lay out `input_dir`, text or Parquet inputs, and `target_source_mapping`. -+++ -{bdg-secondary}`input_dir` -::: - -:::{grid-item-card} {octicon}`database;1.5em;sd-mr-1` Domain corpus files -:link: domain-data -:link-type: doc -Create per-target directories of `.txt` files and match them to YAML. -+++ -{bdg-secondary}`corpus` -::: - -:::{grid-item-card} {octicon}`gear;1.5em;sd-mr-1` Model endpoints -:link: custom-model-endpoints -:link-type: doc -Configure OpenAI-compatible providers for generation, judgement, expansion, validity, and filters. -+++ -{bdg-secondary}`yaml` -::: - -:::: - -## Advanced workflows - -::::{grid} 1 1 1 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} {octicon}`comment;1.5em;sd-mr-1` Prompt tuning -:link: prompt-tuning -:link-type: doc -Point `prompt_config` at a YAML file that defines stage templates. -+++ -{bdg-secondary}`prompt` -::: - -:::{grid-item-card} {octicon}`sync;1.5em;sd-mr-1` Skip stages -:link: skip-stages -:link-type: doc -Resume with `skip_until` and cached Parquet files. -+++ -{bdg-secondary}`iteration` -::: - -:::: - -## Workflow overview - -```{mermaid} -flowchart LR - A[Prepare data layout] --> B[Edit YAML] - B --> C[uv run nemotron steps run byob/mcq] - C --> D{Need translation?} - D -->|yes| E[translate config + passthrough] - D -->|no| F[Done] - E --> F - C -.->|iterate| G[skip_until] - G --> C -``` - -## Related documentation - -- {doc}`../explanation/index` тАФ how each stage behaves. -- {doc}`../reference/index` тАФ full field lists and allowed datasets. diff --git a/docs/build-benchmarks/how-to/prepare-data.md b/docs/build-benchmarks/how-to/prepare-data.md deleted file mode 100644 index e4b7d4d89..000000000 --- a/docs/build-benchmarks/how-to/prepare-data.md +++ /dev/null @@ -1,87 +0,0 @@ - - - - -# Prepare Your Own Domain Data - -This guide shows how to place domain text under `input_dir`, map each target -key in `target_source_mapping`, and set the positive integers that control how -much work prepare does per document. - -Use this guide when your configuration points at local sources and you want to -validate layout before you run prepare or the full pipeline. - -For how prepare joins few-shot rows and domain text, see -{doc}`../explanation/data-preparation`. -For a filesystem-first walkthrough of directories and Parquet basenames, see {doc}`domain-data`. -Field-by-field options for the whole step live in {doc}`../reference/generate-config`. - -## Directory Layout - -The prepare stage reads domain text from `input_dir` and pairs each passage with -few-shot rows from the Hugging Face dataset named in `hf_dataset`. - -For each key in `target_source_mapping`, supply one of the following next to -`input_dir`: - -- A directory `input_dir//` that contains at least one `.txt` file. -- A Parquet file `input_dir/.parquet` whose rows include the columns the - loader expects, described in {doc}`../explanation/data-preparation`. - -If both a directory and a file named `.parquet` exist, the loader -prefers the directory and logs a warning. - -## Source Subjects And Mapping - -In this step, a *target subject* is one key in `target_source_mapping` on the -domain side of the pairing. - -The `source_subjects` lists benchmark subjects from the Hugging Face dataset that -you are allowed to sample as few-shot sources. -Every name that appears under a targetтАЩs `subjects` field must also appear in -`source_subjects`, or validation fails. - -Each target entry in `target_source_mapping` carries a `subjects` value in one -of two shapes: - -- A list of source subject names selects those rows with uniform weights. -- An empty list means use every entry in `source_subjects`, again with uniform - weights. -- A mapping from source subject name to a non-negative weight defines a - weighted mixture, and weights must sum to a value greater than zero. - The loader normalizes them internally. - -Optional `tags` on a target pair with `metadata_file` when you supply tag -metadata from a file. -If `metadata_file` is absent, do not set `tags`, because validation rejects that -combination. - -## Few-Shot and Query Counts - -These positive integers live in the same configuration as the rest of the step -and control how much generation work each stored document drives: - -- `few_shot_samples_per_query` caps how many few-shot exemplar rows feed each - query. -- `queries_per_target_subject_document` sets how many queries run per domain - document. -- `num_questions_per_query` sets how many questions each query produces. - -They must all be greater than zero. -Short definitions also appear in the tables under {doc}`../reference/generate-config`. - -## Hugging Face Dataset - -Set `hf_dataset` to one of the identifiers listed in {doc}`../reference/benchmarks`. -If you omit `subset` or `split`, defaults come from `HF_DATASET_TO_SUBSET` and -the loader logic in `ByobConfig.from_yaml`. - -## Run Prepare Alone - -Set `stage: prepare` in your configuration file. - -Prepare writes the seed artifact that generate consumes. -The file names and roles are listed in {doc}`../reference/output-files`. diff --git a/docs/build-benchmarks/how-to/prompt-tuning.md b/docs/build-benchmarks/how-to/prompt-tuning.md deleted file mode 100644 index 09a275043..000000000 --- a/docs/build-benchmarks/how-to/prompt-tuning.md +++ /dev/null @@ -1,230 +0,0 @@ - - - - -(byob-mcq-prompt-tuning)= -# Prompt Tuning for Benchmarks - -The build-your-own benchmark (BYOB) pipeline for multiple-choice questions (MCQs) runs several stages that each call a large language model (LLM). -Each stage reads prompt text from your configuration. -You can replace the packaged wording to change tone, difficulty, guardrails, and output shape while keeping the same pipeline contract. - -Use this guide when packaged prompts are almost right and you want different instructions, tone, or few-shot examples without changing stage order or the expected output shape. - -For every field on the main experiment YAML file, see {doc}`../reference/generate-config`. -For load-time validation errors, see {doc}`../reference/troubleshooting`. - -## Point the experiment file at your prompts - -Leave `prompt_config` set to `null` when the packaged prompts are acceptable. - -Set `prompt_config` to a filesystem path when you want a full override file for all six stages. -The path is read when the configuration loads, so the file must exist and be readable at that moment. -Relative paths resolve from the shell working directory where you launch `nemotron`, not from the directory that contains your main configuration file. -Use an absolute path when you want the same resolution no matter which directory you run from. - -```yaml -prompt_config: /path/to/my_prompts.yaml -``` - -Run the step as usual. - -```console -$ uv run nemotron steps run byob/mcq -c /path/to/config.yaml -``` - -If any required stage is missing, if either string under a stage is absent, or if a value is not a string, validation stops before the pipeline starts and reports the failing field. - -The samples that you can copy from are in `src/nemotron/steps/byob/runtime/benchmark_families/mcq/prompts/` in the Nemotron repository, one module per stage. - -## Structure of the Prompt YAML File - -Create one YAML file that defines all six stages. -Each stage is a mapping with exactly two string keys, `system_prompt` and `prompt`. -Multi-line strings are fine when you use YAML block scalars. - -The loader treats a custom file as all-or-nothing. -You must include every stage even when you only intend to change one of them. - -### Required Stages - -| Stage key | Role in the pipeline | -| --- | --- | -| `qa_generation` | Creates new questions with four choices from the seed passage and few-shot examples. | -| `question_judge` | Scores clarity, validity, and knowledge versus reasoning style. | -| `hallucination_filter` | Asks filter models to answer with the passage present to catch unsupported content. | -| `easiness_filter` | Asks filter models to answer without the passage to catch questions that are too easy. | -| `distractor_expansion` | Adds six distractors when expansion is enabled in the main configuration file. | -| `distractor_validity` | Checks that only the labeled answer is correct given the passage. | - -## How Placeholders Work - -Prompt strings are not plain static prose. -They carry two different kinds of markers, and some stages use both kinds in the same string. - -*NeMo Data Designer* substitutes *seed column* markers. -After any earlier formatting, those markers look like `{{column_name}}` and pull values from the CSV row the stage is processing. - -Some stages run an earlier pass that substitutes *run-parameter* markers written with single braces, such as `{num_questions}`. -Those values come from your main experiment configuration file or from small integers the pipeline derives before Data Designer runs. - -Packaged templates sometimes show column names with four braces, for example `{{{{target_subject}}}}`. -That pattern survives the run-parameter pass and leaves a normal `{{target_subject}}` marker for Data Designer. - -If a stage forwards both strings as written, the pipeline does not apply the single-brace pass. -Every `{{column_name}}` token you leave in YAML must match a real column in that stageтАЩs seed data. - -### Common Run-Parameter Tokens - -- `{num_few_shot_samples}` is the few-shot count from the main configuration file. -- `{num_questions}` is the questions per query from the main configuration file. -- `{num_choices}` either rewritten for filter stages so Data Designer can inject `{{num_choices}}`, or replaced with the integer `4` or `10` for distractor validityтАЩs system prompt. -- `{choices}` rewritten during filtering so Data Designer receives `{{choices_text}}` for the rendered choice list on each row. - -### Column Markers Copied from Packaged Templates - -The list below shows fields that appear in the sample files. -Quadruple-brace forms are common in `qa_generation` and in some filter user prompts. -Judging prompts use ordinary double braces because that stage is forwarded as written. - -- `{{{{target_subject}}}}` тАФ subject label for the target passage. -- `{{{{text}}}}` тАФ source passage body. -- `{{{{few_shot_examples}}}}` тАФ serialized few-shot examples. -- `{{{{language}}}}` тАФ target locale string for generation. -- `{{{{question_generated_formatted}}}}` тАФ question plus choices as produced upstream. -- `{{question}}` тАФ generated question text for the judge stage. - -## Example: QA Generation Block - -Use the layout from `src/nemotron/steps/byob/runtime/benchmark_families/mcq/prompts/qa_generation.py` as a starting point when you author your own file. - -```{code-block} yaml -:class: scrollable - -qa_generation: - system_prompt: | - You are an expert in creating questions from a description of a given topic. - You will be given {num_few_shot_samples} example questions and answers unrelated to the topic. - - You should - 1. Create {num_questions} questions, four choices and answers similar to the example question answer. - 2. Follow the question style of the example question answers (Direct WH question/Completion/Best explanation/Best action/Equivalence/Other). - 3. Try to create questions that are higher in the cognitive level scale, by mostly using concepts from the text passage. - 4. The questions should not explicitly refer to the passage or example question answer. - 5. Assume that the person reading the questions does not have access to the passage or example question answer. So make the question clear as to what the topic is. - prompt: | - Definition of cognitive level (higher is better): - 1: Recall - The question asks for recall of isolated facts, definitions, or simple formulas (e.g., тАЬWhat is the full form of SEBI?тАЭ). - - 2: Understanding - The question checks comprehension of concepts, classifications, or simple explanations (e.g., interpret what an LTV ratio means for a borrower). - - 3: Application - The question requires using a concept, rule, or formula in a straightforward, familiar situation (e.g., compute postтАСtax return on a fixed deposit given basic data). - - 4: Analysis - The question involves breaking down information, comparing alternatives, or identifying relationships/causes (e.g., infer the impact of an RBI rate change on bond prices or bank NIMs). - - 5: Evaluate - The question requires judgment among alternatives based on criteria, or synthesizing information to choose the best course of action or construct a plan (e.g., select the most appropriate investment strategy for a given Indian retail investor scenario). - - - Create {num_questions} questions, four choices and answers for the given topic: - Topic: {{{{target_subject}}}} - - {{{{text}}}} - - - Now make {num_questions} questions, four choices and answers for the topic similar to the example question answer. Don't make the answer too obvious. - - Example questions and answers:- - {{{{few_shot_examples}}}} - - Write the questions and options in the language: {{{{language}}}} - Return the questions in JSON format with each question having the following fields: - - question: The question - - choice_a: The first choice (A) - - choice_b: The second choice (B) - - choice_c: The third choice (C) - - choice_d: The fourth choice (D) - - answer: The answer (A/B/C/D) -``` - -## Shorter Excerpts for Other Stages - -Use these fragments when you want a quick visual check that a stage matches your expectations. - -### Judging - -Forwarded as written, so only double-brace column names appear. - -```text -Here is the question: -Question: {{question}} -``` - -### Filtering - -The system line keeps `{num_choices}` in YAML. -The pipeline rewrites it so Data Designer later fills `{{num_choices}}` per row. - -```text -You are answering a multiple-choice question with {num_choices} choices. -You will be given a passage on a topic and a question and a list of choices. -``` - -The hallucination user prompt carries passage markers, the formatted question, and `{choices}`, which becomes `{{choices_text}}` for Data Designer. - -```text -Topic: {{{{target_subject}}}} - -{{{{text}}}} - - -Answer the following question: - -{{{{question_generated_formatted}}}} - -The answer should be one of {choices}. Think step by step and then finish your answer with "The answer is (X)" where X is the correct letter choice. -``` - -The easiness filter reuses the same `{num_choices}` and `{choices}` contract on the system and user strings but omits the topic and passage block. -Copy each filter stage from its own packaged default instead of swapping strings between them. - -### Distractor Validity - -Only the system line runs the single-brace pass, replacing `{num_choices}` with the integer `4` or `10`. - -```text -The question claims that there is only one correct answer among the {num_choices} choices. -``` - -The user `prompt` is forwarded as written; keep its `{{column}}` names aligned with the packaged file. - -## Stage-by-Stage Formatting Checklist - -Use this table when you need a compact reminder of where single-brace substitution runs. - -| Stage | Single-brace pass on `system_prompt` | Single-brace pass on `prompt` | -| --- | --- | --- | -| `qa_generation` | Yes, `{num_few_shot_samples}` and `{num_questions}` | Yes, `{num_questions}` only | -| `question_judge` | No | No | -| `hallucination_filter` | Yes, `{num_choices}` becomes `{{num_choices}}` | Yes, `{choices}` becomes `{{choices_text}}` | -| `easiness_filter` | Same as hallucination | Same as hallucination | -| `distractor_expansion` | No | No | -| `distractor_validity` | Yes, `{num_choices}` becomes `4` or `10` | No | - -`distractor_expansion` is fully forwarded, so treat it like judging for placeholder editing rules. - -## Practical Tips - -Duplicate an entire packaged stage before you delete lines. -Partial copies are the most common source of missing `{{column}}` names. - -When you only need small wording edits, change sentences around the placeholder lines first and leave the markers alone until you must move them. - -You must still ship `hallucination_filter` and `easiness_filter` blocks in your override file even when your edits focus on question generation. diff --git a/docs/build-benchmarks/how-to/skip-stages.md b/docs/build-benchmarks/how-to/skip-stages.md deleted file mode 100644 index e1f1910d1..000000000 --- a/docs/build-benchmarks/how-to/skip-stages.md +++ /dev/null @@ -1,40 +0,0 @@ - - -# Skip Stages When Iterating - -Both **generate** and **translate** honor `skip_until`, a string that names an enum entry on the internal stage list. -Stages whose enum value is **less than** the named stage are skipped as long as the expected Parquet already exists. - -## Generation enum names - -From `McqGenerationStage` in `runtime/benchmark_families/mcq/pipeline.py`, valid names include: - -`GENERATION`, `JUDGEMENT`, `SEMANTIC_DEDUPLICATION`, `DISTRACTOR_EXPANSION`, `COVERAGE_CHECK`, `DISTRACTOR_VALIDITY_CHECK`, `SEMANTIC_OUTLIER_DETECTION`, `HALLUCINATION_EASINESS_DETECTION`, `FINAL_OUTPUT` - -## Translation enum names - -From `McqTranslationStage`: - -`TRANSLATION`, `BACKTRANSLATION`, `QUALITY_METRICS`, `FINAL_OUTPUT` - -## CLI usage - -Pass the resume point as a dotlist override: - -```console -uv run nemotron steps run byob/mcq -c /path/to/generate.yaml skip_until=JUDGEMENT -``` - -```console -uv run nemotron steps run byob/mcq -c translate stage=translate skip_until=BACKTRANSLATION -``` - -## Preconditions - -Skipping only works when the Parquet file produced by the previous stage is already on disk under `output_dir/expt_name/stage_cache/`. -Otherwise the next stage reads missing input and fails. - -For other common failure modes, see {doc}`../reference/troubleshooting`. diff --git a/docs/build-benchmarks/index.md b/docs/build-benchmarks/index.md deleted file mode 100644 index 6c7aa6356..000000000 --- a/docs/build-benchmarks/index.md +++ /dev/null @@ -1,147 +0,0 @@ - - -(build-benchmarks-index)= -# About Building Multiple-Choice Question Benchmarks - - - -This section describes how to build a custom multiple-choice question (MCQ) benchmark as Apache Parquet files with the `nemotron steps run byob/mcq` command. -You supply domain text files under `input_dir`, and the pipeline samples few-shot exemplars from a Hugging Face benchmark named in your configuration, such as `cais/mmlu`. -The configuration specifies subject filters such as `high_school_mathematics`. - -The benchmark step prepares seed rows, generates and judges questions, runs optional deduplication and distractor stages, and writes `benchmark.parquet`. -An optional translation stage reads an existing benchmark and writes another `benchmark.parquet` with the same column layout. - -:::{tip} -New to this flow? Follow {doc}`getting-started` once, then use the grids and tables below to jump to how-to guides, concepts, or reference pages. -::: - -## When to Use - -The `nemotron steps run byob/mcq` command enables the following outcomes. - -- Questions grounded in your own documents, paired with few-shot items from a public benchmark subject you declare in configuration. -- A repeatable Parquet artifact, one experiment folder under your configured `output_dir`, plus intermediate caches when you iterate. -- Optional translation with forward passes, backtranslation, and metric thresholds before you export another Parquet benchmark. - -## Pipeline Summary - -At a high level, the benchmark step performs the following work. - -1. Prepare: sample few-shot examples and align them with chunks from your corpus into a seed dataset. -2. Generate: run the staged MCQ pipeline from generation through filtering into `benchmark_raw.parquet` and `benchmark.parquet`. -3. Translate, optional: translate questions and options, score backtranslation quality, and export a new `benchmark.parquet`. - -## Documentation Series - -::::{grid} 1 2 2 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} {octicon}`book;1.5em;sd-mr-1` Tutorial -:link: getting-started -:link-type: doc -Install the `byob` extra, run the sample `tiny` configuration with local paths, and inspect Parquet outputs. -The `tiny` fixture pairs `cais/mmlu` high school mathematics few-shots with a one-line input file related to algebra. -+++ -{bdg-secondary}`hands-on` -::: - -:::{grid-item-card} {octicon}`tools;1.5em;sd-mr-1` How-To Guides -:link: how-to/index -:link-type: doc -Prepare data, tune models in YAML, customize prompts, and resume with `skip_until`. -+++ -{bdg-secondary}`task-based` -::: - -:::{grid-item-card} {octicon}`light-bulb;1.5em;sd-mr-1` Concepts -:link: explanation/index -:link-type: doc -How prepare, generate, and translate stages fit together and what each configuration block does. -+++ -{bdg-secondary}`concept-focused` -::: - -:::{grid-item-card} {octicon}`list-unordered;1.5em;sd-mr-1` Reference -:link: reference/index -:link-type: doc -Supported Hugging Face datasets, Parquet outputs, and YAML fields. -+++ -{bdg-secondary}`specification` -::: - -:::: - -## All Documentation - -````{tab-set} - -```{tab-item} Tutorial - -| Guide | What you will do | -| --- | --- | -| {doc}`./getting-started` | Run `nemotron steps run byob/mcq` with `tiny` and inspect outputs | - -``` - -```{tab-item} How-To Guides - -| Guide | What you will do | -| --- | --- | -| {doc}`how-to/prepare-data` | Lay out `input_dir` and `target_source_mapping` | -| {doc}`how-to/domain-data` | Lay out per-target `.txt` corpora under `input_dir` | -| {doc}`how-to/custom-model-endpoints` | Point generation, judgement, and filter models at your endpoints | -| {doc}`how-to/prompt-tuning` | Override prompts with a YAML file | -| {doc}`how-to/skip-stages` | Resume after intermediate Parquet caches | - -``` - -```{tab-item} Concepts - -| Guide | What you will learn | -| --- | --- | -| {doc}`explanation/pipeline-overview` | Stage order for prepare, generate, and translate | -| {doc}`explanation/data-preparation` | Seeds, chunking, and the prepare step | -| {doc}`explanation/get-right-questions` | `source_subjects` and `target_source_mapping` | -| {doc}`explanation/question-generation` | Data Designer batched generation | -| {doc}`explanation/quality-validation` | Judgement, deduplication, distractors, coverage, outliers | -| {doc}`explanation/filtering` | Easiness and hallucination filters | -| {doc}`explanation/translation` | Curator translation and backtranslation metrics | - -``` - -```{tab-item} Reference - -| Guide | What you will find | -| --- | --- | -| {doc}`reference/output-files` | Paths under `output_dir` / `expt_name` | -| {doc}`reference/troubleshooting` | Symptom-to-fix index for BYOB runs | -| {doc}`reference/benchmarks` | Allowed `hf_dataset` values and default subsets | -| {doc}`reference/generate-config` | Generation YAML keys | -| {doc}`reference/translation-config` | Translation YAML keys | - -``` - -```` - -## What You Need - -- A Nemotron clone with dependencies installed, including the `byob` extra from `uv sync --extra byob`. -- Model credentials and endpoints that match the `generation_model_config`, `judge_model_config`, and related blocks in your YAML, as described in {doc}`how-to/custom-model-endpoints`. -- Network access to download the configured Hugging Face benchmark split unless it is already cached on disk. - -## Quick Start - -1. Follow {doc}`getting-started` if you have not run the step yet. -2. Read {doc}`how-to/prepare-data` when you are ready to point the pipeline at your own corpus and mapping. -3. Open {doc}`reference/generate-config` or {doc}`reference/translation-config` when you need field-level YAML detail. - -## Limitations and Considerations - -- Cost: generation, judgement, expansion, validity checks, and filters call remote models whenever you configure them to do so. -- Time: full runs depend on corpus size, model latency, and which optional stages stay enabled. -- Rate limits: hosted APIs may throttle parallel requests that you set under `inference_parameters`. -- Curator mount: checked-in configurations mount NeMo Curator from Git for translation and deduplication-related paths, so remote profiles must expose that tree the same way your environment expects. diff --git a/docs/build-benchmarks/reference/benchmarks.md b/docs/build-benchmarks/reference/benchmarks.md deleted file mode 100644 index 5b1099dc0..000000000 --- a/docs/build-benchmarks/reference/benchmarks.md +++ /dev/null @@ -1,24 +0,0 @@ - - -# Supported Hugging Face Benchmarks - -`hf_dataset` in your generation YAML must be one of the strings in `ALLOWED_HF_DATASETS` inside `src/nemotron/steps/byob/runtime/constants.py`. - -If you omit `subset` in YAML, `ByobConfig.from_yaml` substitutes the default from `HF_DATASET_TO_SUBSET`. - -| `hf_dataset` | Default `subset` when omitted | -| --- | --- | -| `cais/mmlu` | `all` | -| `TIGER-Lab/MMLU-Pro` | `default` | -| `ai4bharat/MILU` | `English` | -| `CohereLabs/Global-MMLU` | `en` | -| `CohereLabs/Global-MMLU-Lite` | `en` | -| `LinguaLift/IndicMMLU-Pro` | `hindi` | -| `openai/MMMLU` | `default` | -| `sarvamai/mmlu-indic` | `en` | -| `Idavidrein/gpqa` | `gpqa_main` | - -Each identifier maps to the shared MCQ dataset implementation through `HF_DATASET_TO_MODULE`, which currently resolves every row to `nemotron.steps.byob.runtime.benchmark_families.mcq`. diff --git a/docs/build-benchmarks/reference/generate-config.md b/docs/build-benchmarks/reference/generate-config.md deleted file mode 100644 index d911da5df..000000000 --- a/docs/build-benchmarks/reference/generate-config.md +++ /dev/null @@ -1,75 +0,0 @@ - - -# Generation Configuration Reference - -This page lists the YAML keys validated inside `ByobConfig.from_yaml` in `runtime/config.py`. -Optional keys show their defaults in the dataclass or in the `get` calls inside `from_yaml`. - -## Experiment layout - -| Key | Notes | -| --- | --- | -| `expt_name` | Required string; builds `output_dir/expt_name/`. | -| `output_dir` | Required writable directory. | -| `input_dir` | Required path containing each `target_source_mapping` corpus. | -| `random_seed` | Optional; seeds Python and NumPy when present. | -| `ndd_batch_size` | Optional positive int; defaults to `1000` in the dataclass but sample configs use smaller values. | - -## Dataset selection - -| Key | Notes | -| --- | --- | -| `hf_dataset` | Must appear in `ALLOWED_HF_DATASETS`. | -| `subset` | Optional; defaults per {doc}`benchmarks`. | -| `split` | Optional; defaults to `"test"`. | -| `language` | Required string (for example `en-US`). | -| `metadata_file` | Optional CSV path enabling tag-aware sampling. | - -## Subjects and sampling - -| Key | Notes | -| --- | --- | -| `source_subjects` | Required non-empty list of benchmark subject strings. | -| `target_source_mapping` | Required mapping; see {doc}`../how-to/prepare-data`. | -| `few_shot_samples_per_query` | Required positive int. | -| `queries_per_target_subject_document` | Required positive int. | -| `num_questions_per_query` | Required positive int. | - -## Prompts and models - -| Key | Notes | -| --- | --- | -| `prompt_config` | `null` loads packaged defaults; a string path loads YAML with all required stages. | -| `generation_model_config` | Required mapping for Data Designer calls. | -| `judge_model_config` | Required mapping. | -| `do_distractor_expansion` | Required bool. | -| `distractor_expansion_model_config` | Required when expansion is true. | -| `distractor_validity_model_config` | Required mapping. | -| `filtering_model_configs` | Required dict with `hallucination` and `easiness` lists. | -| `easiness_threshold` | Required float in `[0, 1]`. | -| `hallucination_threshold` | Required float in `[0, 1]`. | -| `remove_hallucinated` | Optional bool; defaults to `True`. | -| `remove_easy` | Optional bool; defaults to `False`. | - -## Optional quality stages - -| Key | Notes | -| --- | --- | -| `semantic_deduplication_config` | Dict with `enabled`, embedding model id, clustering parameters, and `remove_duplicates`. | -| `semantic_outlier_detection_config` | Dict with `enabled`, embedding model id, and neighbour thresholds. | -| `chunking_config` | Dict; supports `window_size` (`null` keeps whole documents). | -| `do_coverage_check` | Bool; defaults to `False` when omitted. | -| `coverage_check_config` | Dict with `window_size` and `model_identifier`. | - -## Curator mount - -Sample configs include a `run.env.mounts` entry that uses `${auto_mount:...}` to place NeMo Curator on `/opt/Curator`. -Remote profiles must preserve the same mount contract your environment expects. - -## Stage dispatch for `nemotron steps run` - -The generic steps CLI accepts `family`, `stage`, and `skip_until` as dotlist overrides, and you can also place those keys directly in YAML. -`family` defaults to `mcq` when omitted. diff --git a/docs/build-benchmarks/reference/index.md b/docs/build-benchmarks/reference/index.md deleted file mode 100644 index b9f0e2ddf..000000000 --- a/docs/build-benchmarks/reference/index.md +++ /dev/null @@ -1,85 +0,0 @@ - - -# Reference - -Specifications grounded in `src/nemotron/steps/byob`. - -```{toctree} -:maxdepth: 1 -:hidden: - -benchmarks -output-files -generate-config -translation-config -troubleshooting -``` - -## Outputs - -::::{grid} 1 1 2 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} {octicon}`file-code;1.5em;sd-mr-1` Output files -:link: output-files -:link-type: doc -Seed, stage cache, raw and final Parquet paths. -+++ -{bdg-secondary}`parquet` -::: - -:::{grid-item-card} {octicon}`alert;1.5em;sd-mr-1` Troubleshooting -:link: troubleshooting -:link-type: doc -Common configuration errors, missing caches, filtering, and endpoint issues. -+++ -{bdg-secondary}`faq` -::: - -:::: - -## Configuration - -::::{grid} 1 1 2 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} {octicon}`gear;1.5em;sd-mr-1` Generation YAML -:link: generate-config -:link-type: doc -Required keys for `ByobConfig.from_yaml`. -+++ -{bdg-secondary}`yaml` -::: - -:::{grid-item-card} {octicon}`globe;1.5em;sd-mr-1` Translation YAML -:link: translation-config -:link-type: doc -`ByobTranslationConfig.from_yaml` requirements. -+++ -{bdg-secondary}`yaml` -::: - -:::: - -## Source benchmarks - -::::{grid} 1 1 1 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} {octicon}`database;1.5em;sd-mr-1` Allowed Hugging Face datasets -:link: benchmarks -:link-type: doc -Identifiers and default subsets from `runtime/constants.py`. -+++ -{bdg-secondary}`hf_dataset` -::: - -:::: - -## Related documentation - -- Tutorial: {doc}`../getting-started` -- Concepts: {doc}`../explanation/index` diff --git a/docs/build-benchmarks/reference/output-files.md b/docs/build-benchmarks/reference/output-files.md deleted file mode 100644 index 951a992e3..000000000 --- a/docs/build-benchmarks/reference/output-files.md +++ /dev/null @@ -1,88 +0,0 @@ - - -# Output Files - -All paths below are relative to `output_dir` from your YAML and the string `expt_name`. - -## Prepare - -| File | Description | -| --- | --- | -| `seed.parquet` | Few-shot rows plus domain chunks. | - -## Generate - -The final generation creates these files: - -| File | Description | -| --- | --- | -| `benchmark_raw.parquet` | Snapshot immediately before column renaming for the final schema. | -| `benchmark.parquet` | Final MCQ schema; column meanings and a sample row are in the next section. | - -The following intermediate files that are created in the `stage_cache` directory: - -| File | Stage | -| --- | --- | -| `generated_questions.parquet` | GENERATION | -| `judged_questions.parquet` | JUDGEMENT | -| `semantic_deduplicated_questions.parquet` | SEMANTIC_DEDUPLICATION | -| `expanded_distractors.parquet` | DISTRACTOR_EXPANSION (only when `do_distractor_expansion` is true) | -| `coverage_check.parquet` | COVERAGE_CHECK (only when `do_coverage_check` is true) | -| `valid_distractors.parquet` | DISTRACTOR_VALIDITY_CHECK | -| `semantic_outlier_detection.parquet` | SEMANTIC_OUTLIER_DETECTION | -| `filtered_questions.parquet` | HALLUCINATION_EASINESS_DETECTION | - -(final-mcq-columns)= -## Final MCQ Columns - -Generation and translation both export the same eight columns on the final `benchmark.parquet` file. - -| Column | Meaning | -| --- | --- | -| `question_id` | Stable identifier for the row, taken from the internal `id_question` field before export. | -| `question` | Stem text for the multiple-choice item. After translation this is the target-language text. | -| `options` | Ordered list of choice strings. The list order matches the letter labels implied by `answer_index`. | -| `answer_index` | Zero-based index into `options` for the correct choice. | -| `answer` | Letter label for the correct choice, derived from `answer_index` (`0` тЖТ `A`, `1` тЖТ `B`, and so on). | -| `cot_content` | Reserved for chain-of-thought text. The current pipeline sets this column to the literal `-` for every row on export. | -| `src` | Reserved for a source document marker. The current pipeline sets this column to the literal `-` for every row on export. | -| `category` | Target key from `target_source_mapping` in your generation configuration, in other words the domain bucket name for the row, not the Hugging Face few-shot subject name. | - -### Sample Row - -Values below are illustrative; your identifiers and wording will differ. - -```json -{ - "question_id": "mcq-00042", - "question": "If x^2 = 9, which value can x take?", - "options": ["-3 only", "-3 or 3", "3 only", "9"], - "answer_index": 1, - "answer": "B", - "cot_content": "-", - "src": "-", - "category": "maths" -} -``` - -## Translate - -The translate stage creates the following final output files: - -| File | Description | -| --- | --- | -| `benchmark_raw.parquet` | Intermediate snapshot prior to optional quality filtering. | -| `benchmark.parquet` | Final translated MCQ after fields are renamed back to `question`, `options`, `answer_index`, and `answer`. Column semantics match generation; see {ref}`final-mcq-columns`. | - -The following intermediate files are created in the `staged_cache` directory. - -| File | Stage | -| --- | --- | -| `translated_questions.parquet` | TRANSLATION | -| `backtranslated_questions.parquet` | BACKTRANSLATION | -| `quality_metrics.parquet` | QUALITY_METRICS | - -Intermediate translation Parquet files can include additional columns such as `question_translated`, `options_translated`, backtranslation fields, and metric scores. diff --git a/docs/build-benchmarks/reference/translation-config.md b/docs/build-benchmarks/reference/translation-config.md deleted file mode 100644 index ee77f4241..000000000 --- a/docs/build-benchmarks/reference/translation-config.md +++ /dev/null @@ -1,51 +0,0 @@ - - - - -# Translation Configuration Reference - -This page describes the YAML configuration file that you provide for the translate stage: the keys you set or override, how backtranslation quality scores show up in Parquet output columns, and which rows are omitted from the final `benchmark.parquet` when quality filtering is enabled. - -## Required Keys - -| Key | Notes | -| --- | --- | -| `expt_name` | Directory name under `output_dir` for caches and final artifacts. | -| `dataset_path` | Existing `benchmark.parquet` from a generation run. | -| `output_dir` | Parent directory for `expt_name`. | -| `source_language` | BCP-47 style tag (for example `en-US`). | -| `target_language` | Target locale tag (for example `hi-IN`). | -| `translation_model_config` | Dictionary with `backend_type`, `params`, and optional `stage` and `segment_stage`. | -| `backtranslation_quality_metrics` | Non-empty list; each element is a dictionary with `type` and `threshold`. | - -## Quality Metrics - -Each `type` must be `sacrebleu`, `chrf`, or `ter`. -Each `threshold` must be nonnegative. - -NeMo Curator writes one numeric score column and one boolean pass column per configured metric, for example `score_chrf` and `score_chrf_passed`. -The column `is_quality_metric_passed` is true on a row when every per-metric pass column is true for that row. - -Each score compares the original benchmark text with the round-trip backtranslation from the target locale, using sentence-level APIs from the *sacrebleu* library. - -| `type` | Measures | Scale and direction | How to interpret scores | Row passes when | -| --- | --- | --- | --- | --- | -| `sacrebleu` | Sentence bilingual evaluation understudy (BLEU) | 0 through 100 after *sacrebleu* tokenization; higher values track closer matches to the reference. | High scores mean the backtranslation preserved wording and order; scores near zero mean little *n*-gram overlap. | `score_sacrebleu` тЙе `threshold` | -| `chrf` | Sentence character n-gram F-score (chrF) | 0 through 100 in typical sentence outputs; higher values mean closer character-level match. | High scores track spelling and phrasing fidelity; low scores mean the backtranslation diverged on the surface string. | `score_chrf` тЙе `threshold` | -| `ter` | Sentence translation error rate (TER) | Zero means no edits; larger values report more insertions, deletions, or substitutions relative to the reference. | Values close to zero mean the backtranslation needed minimal editing to match the original; large values signal heavy rewrites or mismatch. | `score_ter` тЙд `threshold` | - -Inspect `stage_cache/quality_metrics.parquet` under your experiment directory to pick thresholds from the score spread you see in data. - -## Optional Keys - -| Key | Default | Notes | -| --- | --- | --- | -| `remove_low_quality` | `True` unless YAML overrides it | When true, the pipeline omits rows where `is_quality_metric_passed` is false before export. | - -## FAITH evaluation - -`translation_model_config.stage.enable_faith_eval` must not be true. -The benchmark translation relies on backtranslation metrics instead of FAITH filtering diff --git a/docs/build-benchmarks/reference/troubleshooting.md b/docs/build-benchmarks/reference/troubleshooting.md deleted file mode 100644 index cd676939d..000000000 --- a/docs/build-benchmarks/reference/troubleshooting.md +++ /dev/null @@ -1,57 +0,0 @@ - - - - -# Troubleshooting - -This page lists common symptoms when you run `nemotron steps run byob/mcq` with the bring your own benchmark (BYOB) multiple choice question (MCQ) family and when you tune BYOB translation settings. -Each table row pairs a symptom with the files, fields, or flags you should inspect first. -For stage flow and design rationale, see the explanation pages linked from {doc}`../explanation/index`. - -## Configuration Rejected Before the Pipeline Runs - -| Symptom | What to do | -| --- | --- | -| Assertion that `tags` should not be specified when `metadata_file` is absent | Remove `tags` from every `target_source_mapping` entry, or set top-level `metadata_file` to the comma-separated values (CSV) file that supplies tag metadata. See {doc}`../how-to/prepare-data`. | -| Assertion that BYOB translation does not support FAITH evaluation | Under `translation_model_config.stage`, set `enable_faith_eval` to false or omit the field. BYOB translation expects `backtranslation_quality_metrics` instead of FAITH. See {doc}`translation-config` and {doc}`../explanation/translation`. | -| Message that a prompt override key is missing or is not a string, or validation fails on `prompt_config` | Open your `prompt_config` YAML and match the structure in {doc}`../how-to/prompt-tuning`. Easiness and hallucination overrides must include the expected blocks. | -| Schema validation reports that `distractor_validity_model_config` is missing | The current generation schema requires this block even when distractor expansion is off. Add the block as described in {doc}`../how-to/custom-model-endpoints`. | - -## Skipped Stages and Missing Parquet Inputs - -| Symptom | What to do | -| --- | --- | -| A stage fails because an expected Parquet file is missing under `output_dir//stage_cache/` | When you use `skip_until`, every stage before the resume point must have written its output file to disk. Rerun from an earlier stage without skipping, or copy valid caches from a prior run. See {doc}`../how-to/skip-stages`. | - -## Generation Ends With No Final Benchmark Rows - -| Symptom | What to do | -| --- | --- | -| Log line `No questions left after filtering`, or `benchmark.parquet` is missing after a run that exited early | Open `stage_cache/filtered_questions.parquet` and inspect `is_easy`, `is_hallucination`, and score columns. Loosen `easiness_threshold` or `hallucination_threshold`, set `remove_easy` and `remove_hallucinated` to false for a diagnostic run, or adjust upstream judgement and deduplication settings. See {doc}`../explanation/filtering`. | - -## Translation Export Drops Every Row - -| Symptom | What to do | -| --- | --- | -| `benchmark.parquet` exists but has zero rows after translation | When `remove_low_quality` is true, only rows with `is_quality_metric_passed` are exported. Inspect `stage_cache/quality_metrics.parquet`, relax metric thresholds in `backtranslation_quality_metrics`, or set `remove_low_quality` to false while you tune. See {doc}`../explanation/translation`. | - -## Few-Shot Sampling Finds No Rows - -| Symptom | What to do | -| --- | --- | -| Runtime error stating there are no samples for a given source subject and tag combination | Tag filters must match comma-separated tag strings that appear in the metadata CSV for that Hugging Face subject. Widen `tags`, correct the CSV, or confirm `source_subjects` and `target_source_mapping` names align with {doc}`../how-to/prepare-data` and {doc}`../explanation/get-right-questions`. | - -## Hosted Models Throttle or Stall - -| Symptom | What to do | -| --- | --- | -| Timeouts, HTTP responses in the 429 range, or bursty failures when calling remote endpoints | Reduce `max_parallel_requests` and related batch settings in your YAML, rerun on a smaller slice of data, and confirm API keys and quotas. See {doc}`../explanation/question-generation` and {doc}`../how-to/custom-model-endpoints`. | - -## Related Reference - -- Parquet layout and final column list: {doc}`output-files` -- Generation YAML fields: {doc}`generate-config` -- Translation YAML fields: {doc}`translation-config` diff --git a/docs/conf.py b/docs/conf.py deleted file mode 100644 index 451e1c63b..000000000 --- a/docs/conf.py +++ /dev/null @@ -1,150 +0,0 @@ -# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Configuration file for the Sphinx documentation builder. -# -# For the full list of built-in configuration values, see the documentation: -# https://www.sphinx-doc.org/en/master/usage/configuration.html - -# -- Project information ----------------------------------------------------- -# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information - -import os -import shutil -import sys -from pathlib import Path - -sys.path.insert(0, os.path.abspath("_ext")) - -project = "Nemotron" -copyright = "2026, NVIDIA Corporation" -author = "NVIDIA Corporation" - -# Version is set by CI via DOCS_VERSION env var (dev or stable) -# Defaults to "dev" for local builds -release = os.environ.get("DOCS_VERSION", "nightly") - -# -- General configuration --------------------------------------------------- -# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration - -extensions = [ - "myst_parser", # For our markdown docs - "sphinx.ext.viewcode", # For adding a link to view source code in docs - "sphinx.ext.napoleon", # For google style docstrings - "sphinx_copybutton", # For copy button in code blocks - "sphinx_design", # For grid cards and other design elements - "sphinxcontrib.mermaid", # For mermaid diagrams - "nemotron_customize", - "sphinx_reredirects", -] - -templates_path = ["_templates"] -exclude_patterns = ["_build", "Thumbs.db", ".DS_Store", "customize"] - -# -- Options for MyST Parser (Markdown) -------------------------------------- -# MyST Parser settings -myst_enable_extensions = [ - "dollarmath", # Enables dollar math for inline math - "amsmath", # Enables LaTeX math for display mode - "colon_fence", # Enables code blocks using ::: delimiters instead of ``` - "deflist", # Supports definition lists with term: definition format - "fieldlist", # Enables field lists for metadata like :author: Name - "tasklist", # Adds support for GitHub-style task lists with [ ] and [x] - "attrs_block", # Enables setting attributes on block elements using {#id .class key=val} -] -myst_heading_anchors = 5 # Generates anchor links for headings up to level 5 - -# Configure MyST to handle mermaid code blocks -myst_fence_as_directive = ["mermaid"] - -# -- Options for Mermaid ----------------------------------------------------- -# Configure mermaid diagrams -mermaid_version = "latest" # Use the latest version of mermaid - -copybutton_prompt_text = ">>> |$ |# " -copybutton_exclude = ".linenos, .gp, .go" - -# -- Options for HTML output ------------------------------------------------- -# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output - -# -- Custom static files for Termynal terminal animations ------------------- -html_static_path = ["_static"] -html_css_files = [ - "css/termynal.css", - "customize.css", -] -html_js_files = [ - "js/termynal.js", - "js/termynal-init.js", -] - -html_theme = "nvidia_sphinx_theme" -html_theme_options = { - "switcher": { - "json_url": "../versions1.json", - "version_match": release, - }, - "icon_links": [ - { - "name": "GitHub", - "url": "https://github.com/NVIDIA-NeMo/Nemotron", - "icon": "fa-brands fa-github", - } - ], - "extra_head": { - """ - - """ - }, - "extra_footer": { - """ - - """ - }, -} -html_extra_path = ["project.json", "versions1.json"] - -# Github links are now getting rate limited from the Github Actions -if os.environ.get("CI", False): - linkcheck_ignore = [ - ".*github\\.com.*", - ".*githubusercontent\\.com.*", - ] - -redirects = { - # Usage cookbook тЖТ deployment guides summary - "usage-cookbook/README": "../deployment-guides.html", - "usage-cookbook/Nemotron-Nano2-VL/README": "../../deployment-guides.html", - "usage-cookbook/Nemotron-Parse-v1.1/README": "../../deployment-guides.html", - "usage-cookbook/Nemotron-3-Nano-Omni/Megatron-bridge/README": "../../../deployment-guides.html", - "usage-cookbook/Nemotron-3-Nano-Omni/automodel/automodel_training_cookbook": "../../../deployment-guides.html", - "usage-cookbook/Nemotron-3-Nano-Omni/doc-intelligence-with-parse/README": "../../../deployment-guides.html", - "usage-cookbook/Nemotron-3-Super/README": "../../deployment-guides.html", - "usage-cookbook/Nemotron-3-Super/grpo-dapo/README": "../../../deployment-guides.html", - "usage-cookbook/Nemotron-3-Super/lora-text2sql/README": "../../../deployment-guides.html", - "usage-cookbook/Nemotron-3-Super/lora-text2sql/nemo-automodel/README": "../../../../deployment-guides.html", - "usage-cookbook/Nemotron-3-Super/lora-text2sql/nemo-megatron-bridge/README": "../../../../deployment-guides.html", - "usage-cookbook/Nemotron-3-Super/SparkDeploymentGuide/README": "../../../deployment-guides.html", - "usage-cookbook/Nemotron-3-Super/OpenScaffoldingResources/README": "../../../deployment-guides.html", - "usage-cookbook/Nemotron-3-Super/grpo-dapo/grpo_training_cookbook": "../../../deployment-guides.html", - "usage-cookbook/Nemotron-3-Ultra-Base/README": "../../deployment-guides.html", - # Use case examples тЖТ application examples summary - "use-case-examples/README": "../application-examples.html", - "use-case-examples/Simple Nemotron-3-Nano Usage Example/README": "../../application-examples.html", - "use-case-examples/Data Science ML Agent/README": "../../application-examples.html", - "use-case-examples/RAG Agent with Nemotron RAG Models/README": "../../application-examples.html", - "use-case-examples/Intelligent Document Processing with Nemotron RAG/README": "../../application-examples.html", - "use-case-examples/nemotron-voice-rag-agent-example/README": "../../application-examples.html", - "use-case-examples/sql-lora-finetuning-and-deployment/README": "../../application-examples.html", -} diff --git a/docs/curate/getting-started.md b/docs/curate/getting-started.md deleted file mode 100644 index a8d8dce34..000000000 --- a/docs/curate/getting-started.md +++ /dev/null @@ -1,125 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Run nemotron steps run curate/nemo_curator on the packaged tiny JSONL file." -topics: ["Curation", "Tutorial", "NeMo Curator"] -tags: ["Tutorial", "Curation"] -content: - type: "Tutorial" - difficulty: "Beginner" - audience: ["ML Engineer", "Data Scientist"] ---- - -(getting-started-curate)= -# Getting Started With Data Curation - -::::{grid} 2 - -:::{grid-item-card} -:columns: 8 - -**What You'll Build**: a filtered set of JSONL shards from the packaged -tiny fixture. -The run reads the fixture, passes it through the NeMo Curator pipeline with all -optional filters disabled, and writes output shards to a local directory. - -^^^ - -**In this tutorial, you will**: - -1. Clone the repository and install dependencies. -1. Configure the Ray runtime environment. -1. Inspect the packaged fixture. -1. Run the curation step with the tiny configuration. -1. Inspect the output shards. - -{octicon}`clock;1.5em;sd-mr-1` This tutorial requires approximately 5 minutes to complete. -::: - -:::{grid-item-card} {octicon}`flame;1.5em;sd-mr-1` **Sample Prompt** -:columns: 4 - -Run the `curate/nemo_curator` step on the packaged tiny JSONL fixture, then show me -the names and record counts of the output shards. - -::: -:::: - -## Prerequisites - -- The `uv` tool is available in your shell. - -## Procedure - -1. Clone the repository, if you haven't already: - - ```console - $ git clone https://github.com/NVIDIA-NeMo/Nemotron && cd Nemotron - ``` - -1. Install the dependencies for curating data: - - ```console - $ uv sync --extra curate - ``` - -1. Set the Ray runtime environment variable so Ray workers reuse the synchronized - project environment: - - ```console - $ export RAY_ENABLE_UV_RUN_RUNTIME_ENV=0 - ``` - -1. Inspect the packaged fixture at - `src/nemotron/steps/curate/nemo_curator/data/tiny.jsonl`. - Each record contains a `text` field. - - ```{literalinclude} ../../src/nemotron/steps/curate/nemo_curator/data/tiny.jsonl - :language: json - :class: scrollable - ``` - -1. Run the curation step. - The `tiny` configuration disables optional language, word-count, and domain - filters, making this run a baseline validation of the reader, writer, and Ray - startup. - The checked-in `tiny.yaml` uses container paths, so override `input_glob` and - `output_dir` with host paths: - - ```console - $ uv run --no-sync nemotron steps run curate/nemo_curator -c tiny \ - input_glob="${PWD}/src/nemotron/steps/curate/nemo_curator/data/tiny.jsonl" \ - output_dir="${PWD}/output/curate-tiny" - ``` - -1. Inspect the output directory: - - ```console - $ find output/curate-tiny -type f - ``` - - Open a shard and confirm that records contain the configured `text_field`. - NeMo Curator assigns the exact shard name. - -## Summary - -In this tutorial, you completed the following tasks: - -- Cloned the repository and installed the project dependencies. -- Configured the Ray runtime environment. -- Ran the `curate/nemo_curator` step with the packaged tiny JSONL fixture. -- Inspected the output shards and verified that records contain the configured - text field. - -The `tiny` configuration disables all optional filters. -To add language, word-count, or domain filters to a production corpus, refer to -the how-to guides below. - -## Next Steps - -- Point the step at your own JSONL corpus: {doc}`how-to/run-local-jsonl`. -- Download a Hugging Face dataset before curation: - {doc}`how-to/use-huggingface-snapshot`. -- Add language, word-count, or domain filters: {doc}`how-to/enable-filters`. -- Look up all configuration fields and CLI flags: {doc}`reference/curate-config` - and {doc}`reference/cli-curate`. diff --git a/docs/curate/how-to/enable-filters.md b/docs/curate/how-to/enable-filters.md deleted file mode 100644 index cdb1bb0ed..000000000 --- a/docs/curate/how-to/enable-filters.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Enable language, word-count, and domain filters in curate/nemo_curator." -topics: ["Curation", "How-To", "Filters"] -tags: ["How-To", "Curation", "Language ID", "Domain Classification"] -content: - type: "How-To" - difficulty: "Intermediate" - audience: ["ML Engineer", "Data Scientist"] ---- - -# Enable Curation Filters - -Start with no filters, confirm JSONL input and output, then add one filter family at a time. - -## Language Filtering - -Set `language_codes` to uppercase language codes and provide a FastText language identification model. - -```console -$ uv run --no-sync nemotron steps run curate/nemo_curator -c tiny \ - input_glob="${PWD}/data/my_corpus/**/*.jsonl" \ - output_dir="${PWD}/output/curated-en" \ - language_codes=[EN] \ - models.fasttext_langid="${PWD}/cache/models/fasttext/lid.176.bin" \ - quality_filters.min_langid_score=0.3 -``` - -Set `language_codes=[]` to skip FastText language identification entirely. - -## Word-Count Filtering - -Set both `quality_filters.min_words` and `quality_filters.max_words`. -The step raises an error if only one of those keys is present. - -```console -$ uv run --no-sync nemotron steps run curate/nemo_curator -c tiny \ - input_glob="${PWD}/data/my_corpus/**/*.jsonl" \ - output_dir="${PWD}/output/curated-word-count" \ - quality_filters.min_words=50 \ - quality_filters.max_words=5000 -``` - -Set `quality_filters={}` to skip word-count filtering. - -## Domain Filtering - -Set `domains` to the domains you want to keep. -The step uses NeMo Curator's multilingual domain classifier. - -```console -$ uv run --no-sync nemotron steps run curate/nemo_curator -c tiny \ - input_glob="${PWD}/data/my_corpus/**/*.jsonl" \ - output_dir="${PWD}/output/curated-domain" \ - domains=[STEM] \ - models.hf_cache_dir="${PWD}/cache/huggingface" -``` - -```{tip} -Keep the first domain-filtered run small. -The classifier may download or cache model assets on first use. -``` - -## Filter Order - -The step applies filters in this order: - -1. FastText language identification and language filtering, when `language_codes` is non-empty. -2. Word-count filtering, when `quality_filters.min_words` and `quality_filters.max_words` are both set. -3. Multilingual domain classification, when `domains` is non-empty. - -When output is unexpectedly small, disable later filters first, then relax thresholds. diff --git a/docs/curate/how-to/index.md b/docs/curate/how-to/index.md deleted file mode 100644 index 3ce06c0f3..000000000 --- a/docs/curate/how-to/index.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Task-focused guides for curate/nemo_curator." -topics: ["Curation", "How-To"] -tags: ["How-To", "Curation", "NeMo Curator"] -content: - type: "How-To" - difficulty: "Intermediate" - audience: ["ML Engineer", "Data Scientist"] ---- - -# Curation How-To Guides - -Use these guides after the local initial validation in {doc}`../getting-started`. - -```{toctree} -:maxdepth: 1 - -run-local-jsonl -use-huggingface-snapshot -enable-filters -``` diff --git a/docs/curate/how-to/run-local-jsonl.md b/docs/curate/how-to/run-local-jsonl.md deleted file mode 100644 index dfb205458..000000000 --- a/docs/curate/how-to/run-local-jsonl.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Run curate/nemo_curator on local JSONL files." -topics: ["Curation", "How-To", "JSONL"] -tags: ["How-To", "Curation", "JSONL"] -content: - type: "How-To" - difficulty: "Intermediate" - audience: ["ML Engineer", "Data Scientist"] ---- - -# Run Curation on Local JSONL - -Use this path when your corpus already exists as local JSONL files. - -## Input Requirements - -Each input record must contain the configured `text_field`. -The default field name is `text`. - -Example record: - -```json -{"id": "doc-001", "text": "The text to keep, filter, or route downstream."} -``` - -## Minimal Local Run - -Start with optional filters disabled. -This verifies the reader and writer path before adding model-backed filters. - -```console -$ uv sync --extra curate -$ export RAY_ENABLE_UV_RUN_RUNTIME_ENV=0 - -$ uv run --no-sync nemotron steps run curate/nemo_curator -c tiny \ - input_glob="${PWD}/data/my_corpus/**/*.jsonl" \ - output_dir="${PWD}/output/curated-jsonl" \ - text_field=text \ - language_codes=[] \ - domains=[] \ - quality_filters={} -``` - -Use an absolute path or a path relative to the repository root. -When running on a remote executor, make sure the path exists inside the container or shared mount. - -## Add CPU Resources - -For local runs, you can set Ray CPU count in YAML or as a CLI override: - -```console -$ uv run --no-sync nemotron steps run curate/nemo_curator -c tiny \ - input_glob="${PWD}/data/my_corpus/**/*.jsonl" \ - output_dir="${PWD}/output/curated-jsonl" \ - ray.num_cpus=4 -``` - -For generated Lepton profiles, `NEMOTRON_CURATOR_RAY_NUM_CPUS` can provide the CPU count when `ray.num_cpus` is omitted. - -## Validate Output - -After the run: - -- Confirm that output shards exist under `output_dir`. -- Count records before and after filtering. -- Inspect a few output records to confirm the `text_field` is present and not empty. - -If output is empty, run again with `language_codes=[]`, `domains=[]`, and `quality_filters={}` before enabling filters. diff --git a/docs/curate/how-to/use-huggingface-snapshot.md b/docs/curate/how-to/use-huggingface-snapshot.md deleted file mode 100644 index 5e40b1292..000000000 --- a/docs/curate/how-to/use-huggingface-snapshot.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Use the dataset block in curate/nemo_curator to materialize a Hugging Face dataset snapshot before curation." -topics: ["Curation", "How-To", "Hugging Face"] -tags: ["How-To", "Curation", "Hugging Face"] -content: - type: "How-To" - difficulty: "Intermediate" - audience: ["ML Engineer", "Data Scientist"] ---- - -# Use a Hugging Face Snapshot - -Set the `dataset` block when the curation job should call `huggingface_hub.snapshot_download` before NeMo Curator reads files. - -## Configuration Shape - -```yaml -dataset: - repo_id: HuggingFaceFW/fineweb-edu - repo_type: dataset - local_dir: ./data/fineweb-edu - allow_patterns: - - data/*.jsonl - -input_glob: ./data/fineweb-edu/**/*.jsonl -``` - -The `dataset` block is passed to `snapshot_download`. -After the download finishes, `input_glob` must point at JSONL files under `dataset.local_dir`. - -## Run With the Default Configuration - -The default config demonstrates a FineWeb-Edu-style snapshot. -It also enables language filtering, so you must provide the FastText language identification model path if you keep `language_codes` non-empty. - -```console -$ uv sync --extra curate -$ export RAY_ENABLE_UV_RUN_RUNTIME_ENV=0 - -$ uv run --no-sync nemotron steps run curate/nemo_curator -c default \ - dataset.local_dir="${PWD}/data/fineweb-edu" \ - input_glob="${PWD}/data/fineweb-edu/**/*.jsonl" \ - output_dir="${PWD}/output/fineweb-edu-curated" \ - models.fasttext_langid="${PWD}/cache/models/fasttext/lid.176.bin" -``` - -## Snapshot Without Optional Filters - -For a first infrastructure run, disable filters and verify that snapshot download and JSONL IO work. - -```console -$ uv run --no-sync nemotron steps run curate/nemo_curator -c default \ - dataset.local_dir="${PWD}/data/fineweb-edu" \ - input_glob="${PWD}/data/fineweb-edu/**/*.jsonl" \ - output_dir="${PWD}/output/fineweb-edu-curated" \ - language_codes=[] \ - domains=[] \ - quality_filters={} -``` - -## Private or Gated Datasets - -If the Hugging Face repository requires authentication, export `HF_TOKEN` before running. -For remote jobs, pass `HF_TOKEN` through the environment profile. - -```console -$ export HF_TOKEN="" -``` diff --git a/docs/curate/index.md b/docs/curate/index.md deleted file mode 100644 index 4393bb068..000000000 --- a/docs/curate/index.md +++ /dev/null @@ -1,134 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Curate JSONL text with nemotron steps run curate/nemo_curator and NeMo Curator reader, filter, classifier, and writer stages." -topics: ["Curation", "NeMo Curator", "JSONL"] -tags: ["Curation", "Documentation"] -content: - type: "Explanation" - difficulty: "Beginner" - audience: ["ML Engineer", "Data Scientist"] ---- - -(curate-index)= -# About Data Curation With NeMo Curator - -The `nemotron steps run curate/nemo_curator` command reads JSONL data, optionally materializes a Hugging Face dataset snapshot, applies lightweight NeMo Curator filters, and writes filtered JSONL shards for downstream translation or training data preparation. - -Use this step when you already have JSONL records and need a small, repeatable curation pass before a later step such as `translate/nemo_curator`, `data_prep/pretrain_prep`, or `data_prep/sft_packing`. - -## When to Use - -Use `curate/nemo_curator` when you need: - -- A local JSONL reader and writer path using NeMo Curator. -- Optional FastText language identification and language filtering. -- Optional word-count filtering. -- Optional multilingual domain classification and filtering. -- Optional Hugging Face dataset snapshot download before the Curator reader runs. - -```{note} -This step is intentionally lightweight. -It does not crawl web pages, extract Common Crawl WARC files, or run large deduplication workflows. -Use a dedicated Curator recipe for those jobs before this step, or add a separate step when that behavior is needed. -``` - -## Pipeline Summary - -```{mermaid} -flowchart LR - A[Optional Hugging Face snapshot] --> B[JSONL files] - C[Local JSONL files] --> B - B --> D[JsonlReader] - D --> E{Language filter enabled?} - E -->|yes| F[FastText language ID] - E -->|no| G{Word-count filter enabled?} - F --> G - G -->|yes| H[WordCountFilter] - G -->|no| I{Domain filter enabled?} - H --> I - I -->|yes| J[MultilingualDomainClassifier] - I -->|no| K[JsonlWriter] - J --> K - K --> L[Filtered JSONL shards] -``` - -## Documentation Series - -::::{grid} 1 2 2 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} {octicon}`book;1.5em;sd-mr-1` Tutorial -:link: getting-started -:link-type: doc -Install the Nemotron CLI, run a local tiny JSONL initial curation validation, and inspect output shards. -+++ -{bdg-secondary}`hands-on` -::: - -:::{grid-item-card} {octicon}`tools;1.5em;sd-mr-1` How-To Guides -:link: how-to/index -:link-type: doc -Run local JSONL curation, download a Hugging Face snapshot, and enable optional filters. -+++ -{bdg-secondary}`task-based` -::: - -:::{grid-item-card} {octicon}`list-unordered;1.5em;sd-mr-1` Reference -:link: reference/index -:link-type: doc -YAML parameters, CLI syntax, input/output format, and troubleshooting. -+++ -{bdg-secondary}`lookup` -::: - -:::: - -## All Documentation - -````{tab-set} - -```{tab-item} Tutorial - -| Guide | What you do | -| --- | --- | -| {doc}`getting-started` | Run `curate/nemo_curator` on the packaged tiny JSONL fixture | - -``` - -```{tab-item} How-To Guides - -| Guide | Focus | -| --- | --- | -| {doc}`how-to/run-local-jsonl` | Local JSONL reader/writer path | -| {doc}`how-to/use-huggingface-snapshot` | `dataset` block and Hugging Face snapshot download | -| {doc}`how-to/enable-filters` | Language, word-count, and domain filters | - -``` - -```{tab-item} Reference - -| Guide | Content | -| --- | --- | -| {doc}`reference/curate-config` | YAML field reference | -| {doc}`reference/cli-curate` | `nemotron steps run curate/nemo_curator` syntax | -| {doc}`reference/io-format` | Input and output shapes | -| {doc}`reference/troubleshooting` | Common failures and fixes | - -``` - -```` - -## What You Need - -- JSONL input with one text field, usually named `text`. -- Optional model assets when filters are enabled, such as a FastText language identification model for `language_codes`. -- A writable output directory for JSONL shards. - -## Quick Paths - -1. First local run: {doc}`getting-started` -2. Local corpus setup: {doc}`how-to/run-local-jsonl` -3. Hugging Face snapshot setup: {doc}`how-to/use-huggingface-snapshot` -4. Filter setup: {doc}`how-to/enable-filters` -5. Lookup flags: {doc}`reference/cli-curate` diff --git a/docs/curate/reference/cli-curate.md b/docs/curate/reference/cli-curate.md deleted file mode 100644 index 305d46732..000000000 --- a/docs/curate/reference/cli-curate.md +++ /dev/null @@ -1,75 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "CLI reference for nemotron steps run curate/nemo_curator." -topics: ["Curation", "Reference", "CLI"] -tags: ["Reference", "CLI", "Curation"] -content: - type: "Reference" - difficulty: "All Levels" - audience: ["ML Engineer", "Data Scientist"] ---- - -# curate/nemo_curator CLI - -## Syntax - -```bash -uv run --no-sync nemotron steps run curate/nemo_curator \ - [-c ] \ - [-r | -b ] \ - [-d] \ - [...] -``` - -Use `-c tiny` for a small initial validation configuration and `-c default` for the Hugging Face snapshot example. -Refer to [Nemotron Steps CLI Reference](../../train-models/reference/cli-reference.md) for the shared flag set. - -## Common Commands - -Show the step contract: - -```console -$ uv run --no-sync nemotron steps show curate/nemo_curator -``` - -Run a local JSONL initial validation: - -```console -$ uv run --no-sync nemotron steps run curate/nemo_curator -c tiny \ - input_glob="${PWD}/src/nemotron/steps/curate/nemo_curator/data/tiny.jsonl" \ - output_dir="${PWD}/output/curate-tiny" -``` - -Run on Lepton with the generated Curator profile: - -```console -$ uv run --no-sync nemotron steps run curate/nemo_curator -c tiny --batch lepton_curate -``` - -Run against local corpus shards: - -```console -$ uv run --no-sync nemotron steps run curate/nemo_curator -c tiny \ - input_glob="${PWD}/data/my_corpus/**/*.jsonl" \ - output_dir="${PWD}/output/curated-jsonl" \ - text_field=text \ - language_codes=[] \ - domains=[] \ - quality_filters={} -``` - -## Dotlist Overrides - -All YAML fields can be overridden from the command line with `key=value` syntax. -Examples: - -- `input_glob=/data/**/*.jsonl` -- `output_dir=/output/curated` -- `text_field=body` -- `language_codes=[EN]` -- `quality_filters.min_words=50` -- `quality_filters.max_words=5000` -- `ray.num_cpus=4` - -Use shell quoting around globs or lists when your shell expands them unexpectedly. diff --git a/docs/curate/reference/curate-config.md b/docs/curate/reference/curate-config.md deleted file mode 100644 index cade4e1cf..000000000 --- a/docs/curate/reference/curate-config.md +++ /dev/null @@ -1,116 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Configuration field reference for curate/nemo_curator." -topics: ["Curation", "Reference", "Configuration"] -tags: ["Reference", "Configuration", "Curation"] -content: - type: "Reference" - difficulty: "All Levels" - audience: ["ML Engineer", "Data Scientist"] ---- - -# curate/nemo_curator Configuration - -The step reads YAML from `src/nemotron/steps/curate/nemo_curator/config/`. - -| File | Purpose | -| --- | --- | -| `tiny.yaml` | Curator-container initial validation configuration. Optional filters are disabled. Override `input_glob` for local runs because the checked-in path is a container path. | -| `default.yaml` | Example Hugging Face snapshot workflow for FineWeb-Edu-style JSONL with language and word-count filters enabled. | - -## Top-Level Fields - -```{option} input_glob - -JSONL file path or glob passed to NeMo Curator `JsonlReader`. -``` - -```{option} output_dir - -Directory where NeMo Curator writes JSONL output shards. -``` - -```{option} text_field - -Record field containing the text to curate. - -Default: `text`. -``` - -```{option} dataset - -Optional keyword arguments passed to `huggingface_hub.snapshot_download`. -Set `dataset: null` for local-input-only runs. - -Common keys are `repo_id`, `repo_type`, `local_dir`, and `allow_patterns`. -``` - -```{option} language_codes - -Uppercase language codes to keep. -Set `language_codes: []` to skip FastText language identification and language filtering. -When this list is non-empty, `models.fasttext_langid` must point at a FastText language identification model. -``` - -```{option} domains - -Domains to keep through NeMo Curator `MultilingualDomainClassifier`. -Set `domains: []` to skip domain classification. -``` - -```{option} quality_filters - -Optional quality settings. -`min_langid_score` applies when language filtering is enabled. -`min_words` and `max_words` enable word-count filtering and must be set together. -Set `quality_filters: {}` to skip word-count filtering. -``` - -```{option} models - -Optional model and cache paths. - -Common keys: - -- Set `fasttext_langid` to the path of the FastText language identification model. -- Set `hf_cache_dir` to the Hugging Face model cache directory for classifier assets. -``` - -```{option} ray.num_cpus - -Optional Ray CPU count. -If omitted, the Lepton curate profile can provide `NEMOTRON_CURATOR_RAY_NUM_CPUS`. -``` - -## Minimal Local Configuration - -```yaml -language_codes: [] -domains: [] -text_field: text -input_glob: ./data/**/*.jsonl -output_dir: ./output/curated-jsonl -dataset: null -models: {} -quality_filters: {} -``` - -## Filtered Configuration - -```yaml -language_codes: - - EN -domains: [] -text_field: text -input_glob: ./data/**/*.jsonl -output_dir: ./output/curated-jsonl -dataset: null -models: - fasttext_langid: ./cache/models/fasttext/lid.176.bin - hf_cache_dir: ./cache/huggingface -quality_filters: - min_langid_score: 0.3 - min_words: 50 - max_words: 5000 -``` diff --git a/docs/curate/reference/index.md b/docs/curate/reference/index.md deleted file mode 100644 index fdd990b2b..000000000 --- a/docs/curate/reference/index.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Reference pages for curate/nemo_curator." -topics: ["Curation", "Reference"] -tags: ["Reference", "Curation", "NeMo Curator"] -content: - type: "Reference" - difficulty: "All Levels" - audience: ["ML Engineer", "Data Scientist"] ---- - -# Curation Reference - -Use these pages to look up CLI syntax, configuration fields, input/output format, and common failures. - -```{toctree} -:maxdepth: 1 - -cli-curate -curate-config -io-format -troubleshooting -``` diff --git a/docs/curate/reference/io-format.md b/docs/curate/reference/io-format.md deleted file mode 100644 index de10fb236..000000000 --- a/docs/curate/reference/io-format.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Input and output format for curate/nemo_curator." -topics: ["Curation", "Reference", "IO"] -tags: ["Reference", "JSONL", "Curation"] -content: - type: "Reference" - difficulty: "All Levels" - audience: ["ML Engineer", "Data Scientist"] ---- - -# Curation Input and Output Format - -## Input - -Input files must be JSON Lines. -Each line is a JSON object. -The configured `text_field` must exist on each record. - -```json -{"id": "doc-001", "text": "The text to curate."} -``` - -By default, `text_field` is `text`. - -## Output - -The step writes JSONL shards under `output_dir` using NeMo Curator `JsonlWriter`. -The output contains the fields read by `JsonlReader`, plus filter or classifier fields when those stages are enabled. - -Typical no-filter output: - -```json -{"text": "The text to curate."} -``` - -When language filtering is enabled, the pipeline adds a language score field used by the filter. -When domain classification is enabled, classifier output fields depend on the installed NeMo Curator classifier implementation. - -## Downstream Use - -Use the output as `filtered_jsonl`. -Common downstream paths are: - -- Use `translate/nemo_curator` for corpus translation. -- Use `data_prep/pretrain_prep` for pretraining data preparation. -- Use `data_prep/sft_packing` when the curated records are already in the required supervised fine-tuning (SFT) format. - -If a downstream step needs fields beyond `text`, verify that the curation reader/writer path preserves those fields before scaling the run. diff --git a/docs/curate/reference/troubleshooting.md b/docs/curate/reference/troubleshooting.md deleted file mode 100644 index 2aef640a8..000000000 --- a/docs/curate/reference/troubleshooting.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Troubleshooting reference for curate/nemo_curator." -topics: ["Curation", "Reference", "Troubleshooting"] -tags: ["Troubleshooting", "Curation", "NeMo Curator"] -content: - type: "Reference" - difficulty: "All Levels" - audience: ["ML Engineer", "Data Scientist"] ---- - -# Curation Troubleshooting - -| Symptom | Likely Cause | Fix | -| --- | --- | --- | -| `input_glob` matches no files | Path does not exist in the current host, container, or shared mount | Use an absolute path or verify the mount. For local tiny runs, override the packaged `/nemo_run/code/...` path with `${PWD}/src/nemotron/steps/curate/nemo_curator/data/tiny.jsonl`. | -| Missing FastText model | `language_codes` is non-empty but `models.fasttext_langid` is missing or invalid | Set `language_codes=[]` to disable language filtering, or provide the FastText `lid.176.bin` path. | -| `quality_filters` error about `min_words` and `max_words` | Only one word-count bound was set | Set both `quality_filters.min_words` and `quality_filters.max_words`, or set `quality_filters={}`. | -| Output is empty or much smaller than expected | Filters are too strict or applied before corpus shape is understood | Re-run with `language_codes=[]`, `domains=[]`, and `quality_filters={}`. Add filters back one at a time. | -| Ray worker starts a new `.venv` or cannot import dependencies | Local `uv run` and the Ray runtime environment are both attempting to manage dependency setup | Export `RAY_ENABLE_UV_RUN_RUNTIME_ENV=0` and run with `uv run --no-sync` after `uv sync --extra curate`. | -| Large local file causes memory pressure | Input shard is too large for the available Ray worker memory | Split large JSONL files into smaller shards before running Curator. | -| Domain classifier downloads repeatedly | Hugging Face cache path is not persistent | Set `models.hf_cache_dir` to a persistent cache location and mount it in remote profiles. | - -## Debug Checklist - -1. Run the local tiny command with filters disabled. -2. Confirm `uv sync --extra curate` completed in the same repository clone. -3. Confirm the input path exists where the command runs. -4. Confirm `output_dir` is writable. -5. Add language, word-count, and domain filters one at a time. diff --git a/docs/deployment-guides.md b/docs/deployment-guides.md deleted file mode 100644 index 6ae3b765d..000000000 --- a/docs/deployment-guides.md +++ /dev/null @@ -1,104 +0,0 @@ - - - -(deployment-guides)= -# Deployment Guides - -Deployment guides, fine-tuning recipes, and agentic usage examples for Nemotron models. Each card links to its directory in the [Nemotron GitHub repository](https://github.com/NVIDIA-NeMo/nemotron). - -::::{grid} 1 2 2 2 -:gutter: 3 - -:::{grid-item-card} {octicon}`mark-github;1.5em;sd-mr-1` Nemotron 3 Super -:link: https://github.com/NVIDIA-NeMo/nemotron/tree/main/usage-cookbook/Nemotron-3-Super -:link-type: url - -Notebooks for deploying the 120B/12B-active hybrid Mamba-Transformer MoE model with vLLM, SGLang, and TensorRT-LLM. -+++ -{bdg-success}`Notebook` {bdg-secondary}`Local GPU` {bdg-muted-line}`Apr 28, 2026` -::: - -:::{grid-item-card} {octicon}`mark-github;1.5em;sd-mr-1` Nemotron 3 Super тАФ LoRA Text2SQL -:link: https://github.com/NVIDIA-NeMo/nemotron/tree/main/usage-cookbook/Nemotron-3-Super/lora-text2sql -:link-type: url - -Supervised fine-tuning with LoRA for Text2SQL using the BIRD SQL benchmark. Includes recipes for both NeMo AutoModel and Megatron Bridge. -+++ -{bdg-secondary}`Local GPU` {bdg-info}`Fine-tuning` {bdg-muted-line}`Apr 28, 2026` -::: - -:::{grid-item-card} {octicon}`mark-github;1.5em;sd-mr-1` Nemotron 3 Super on DGX Spark -:link: https://github.com/NVIDIA-NeMo/nemotron/tree/main/usage-cookbook/Nemotron-3-Super/SparkDeploymentGuide -:link-type: url - -Deploy on a single DGX Spark with 128 GB unified memory using vLLM (nightly) and TensorRT-LLM, including NVFP4 quantization and MTP speculative decoding. -+++ -{bdg-secondary}`Local GPU` {bdg-muted-line}`Apr 10, 2026` -::: - -:::{grid-item-card} {octicon}`mark-github;1.5em;sd-mr-1` Nemotron 3 Ultra Base -:link: https://github.com/NVIDIA-NeMo/nemotron/tree/main/usage-cookbook/Nemotron-3-Ultra-Base -:link-type: url - -550B total / 55B active parameter base model checkpoint announced at GTC 2026. A starting point for custom fine-tuning and RL post-training pipelines тАФ not yet instruction-tuned. -+++ -{bdg-secondary}`Local GPU` {bdg-info}`Fine-tuning` {bdg-muted-line}`Mar 23, 2026` -::: - -:::{grid-item-card} {octicon}`mark-github;1.5em;sd-mr-1` Nemotron 3 Super on GRPO/DAPO RL Training -:link: https://github.com/NVIDIA-NeMo/nemotron/tree/main/usage-cookbook/Nemotron-3-Super/grpo-dapo -:link-type: url - -Full-weight RL training from a base model using the GRPO/DAPO algorithm to reproduce emergent math reasoning. Requires 5├Ч GB200 or 3├Ч B200 nodes. -+++ -{bdg-secondary}`Local GPU` {bdg-info}`Fine-tuning` {bdg-muted-line}`Mar 11, 2026` -::: - -:::{grid-item-card} {octicon}`mark-github;1.5em;sd-mr-1` Nemotron 3 Super on Agentic Coding -:link: https://github.com/NVIDIA-NeMo/nemotron/tree/main/usage-cookbook/Nemotron-3-Super/OpenScaffoldingResources -:link-type: url - -Use Nemotron 3 Super with OpenCode, OpenClaw, Kilo Code CLI, and OpenHands via OpenRouter and build.nvidia.com. -+++ -{bdg-success}`Beginner` {bdg-muted-line}`Mar 11, 2026` -::: - -:::{grid-item-card} {octicon}`mark-github;1.5em;sd-mr-1` Nemotron Nano 2 VL -:link: https://github.com/NVIDIA-NeMo/nemotron/tree/main/usage-cookbook/Nemotron-Nano2-VL -:link-type: url - -Notebooks for the 12B multimodal model that unifies visual and textual understanding. Covers NIM inference via build.nvidia.com and local Hugging Face deployment. -+++ -{bdg-success}`Notebook` {bdg-secondary}`Local GPU` {bdg-muted-line}`Oct 28, 2025` -::: - -:::{grid-item-card} {octicon}`mark-github;1.5em;sd-mr-1` Nemotron Parse v1.1 -:link: https://github.com/NVIDIA-NeMo/nemotron/tree/main/usage-cookbook/Nemotron-Parse-v1.1 -:link-type: url - -Notebook for the document-parsing VLM that converts PDFs and unstructured documents into structured JSON, LaTeX, and Markdown. Available via NIM at build.nvidia.com. -+++ -{bdg-success}`Beginner` {bdg-success}`Notebook` {bdg-muted-line}`Oct 28, 2025` -::: - -:::: diff --git a/docs/index.md b/docs/index.md deleted file mode 100644 index a6b7a1bac..000000000 --- a/docs/index.md +++ /dev/null @@ -1,324 +0,0 @@ - -# Nemotron Training Recipes - -**Open and efficient models for agentic AI.** Reproducible training pipelines with transparent data, techniques, and weights. - -

    - -## Quick Start - -
    - -```console -// Install the Nemotron training recipes -$ git clone https://github.com/NVIDIA-NeMo/Nemotron -$ cd Nemotron && uv sync - -// Run a tiny SFT job on your cluster -$ uv run nemotron steps run sft/automodel -c tiny --run YOUR-CLUSTER - -// Run the Nano3 pipeline stage by stage -$ uv run nemotron nano3 data prep pretrain --run YOUR-CLUSTER -$ uv run nemotron nano3 pretrain --run YOUR-CLUSTER -$ uv run nemotron nano3 data prep sft --run YOUR-CLUSTER -$ uv run nemotron nano3 sft --run YOUR-CLUSTER -$ uv run nemotron nano3 data prep rl --run YOUR-CLUSTER -$ uv run nemotron nano3 rl --run YOUR-CLUSTER -``` - -
    - -> **Note**: The `--run YOUR-CLUSTER` flag submits jobs to your configured Slurm cluster via [NeMo-Run](nemo_runspec/nemo-run.md). See [Execution through NeMo-Run](nemo_runspec/nemo-run.md) for setup instructions. - -## Sample Deployments and Applications - -::::{grid} 1 2 2 2 -:gutter: 3 - -:::{grid-item-card} Deployment Guides -:link: deployment-guides -:link-type: doc - -Deployment guides for Nemotron models: TensorRT-LLM, vLLM, SGLang, NIM, and Hugging Face. -::: - -:::{grid-item-card} Sample Applications -:link: application-examples -:link-type: doc - -End-to-end applications: RAG agents, ML agents, and multi-agent systems. -::: - -:::: - -## Customization Workflows with Nemotron Steps - -::::{grid} 1 2 2 2 -:gutter: 3 - -:::{grid-item-card} Translation -:link: translation/index -:link-type: doc - -Translate JSONL or Parquet corpora with `translate/nemo_curator`, NeMo Curator -backends, and optional FAITH quality scoring. -::: - -:::{grid-item-card} Build MCQ Benchmarks -:link: build-benchmarks/index -:link-type: doc - -Generate and translate custom multiple-choice benchmarks with `byob/mcq`. -::: - -:::{grid-item-card} Data Curation -:link: curate/index -:link-type: doc - -Filter JSONL text with `curate/nemo_curator` before translation or training data preparation. -::: - -:::{grid-item-card} Synthetic Data Generation -:link: sdg/index -:link-type: doc - -Use `sdg/data_designer` to produce SFT, tool-use, and preference datasets. -::: - -:::{grid-item-card} Model Evaluation -:link: model-eval/index -:link-type: doc - -Evaluate hosted endpoints or checkpoints with `eval/model_eval`. -::: - -:::: - -## Training Recipes - -::::{grid} 1 2 2 2 -:gutter: 3 - -:::{grid-item-card} Nemotron 3 Nano -:link: nemotron/nano3/README -:link-type: doc - -31.6B total / 3.6B active parameters, 25T tokens, up to 1M context. Hybrid Mamba-Transformer with sparse MoE. - -**Stages:** Pretraining тЖТ SFT тЖТ RL -::: - -:::{grid-item-card} Nemotron 3 Omni -:link: nemotron/omni3/README -:link-type: doc - -GA-checkpoint multimodal post-training recipe with stage-local container builds and a three-step RL stack. - -**Stages:** SFT тЖТ RL MPO тЖТ RL text тЖТ RL vision тЖТ Eval -::: - -:::{grid-item-card} Embedding Fine-Tuning -:link: nemotron/embed/README -:link-type: doc - -Fine-tune Llama-Nemotron-Embed-1B-v2 on domain-specific data with synthetic data generation, evaluation, and NIM deployment. - -**Stages:** SDG тЖТ Data Prep тЖТ Finetune тЖТ Eval тЖТ Export тЖТ Deploy -::: - -:::{grid-item-card} Reranking Fine-Tuning -:link: nemotron/rerank/README -:link-type: doc - -Fine-tune Llama-Nemotron-Rerank-1B-v2 cross-encoders for domain-specific reranking with synthetic data generation, evaluation, export, and NIM deployment. - -**Stages:** SDG тЖТ Data Prep тЖТ Finetune тЖТ Eval тЖТ Export тЖТ Deploy -::: - -:::: - -## Recipe Layout - -Nemotron keeps **data-producing recipes** separate from **model-family training recipes**: - -| Path | Purpose | Example | -|------|---------|---------| -| `src/nemotron/recipes/data/curation/` | Filter, dedup, and curate existing corpora | [Nemotron-CC](nemotron/data/curation/nemotron-cc.md) | -| `src/nemotron/recipes/data/sdg/` | Generate synthetic datasets that can feed multiple families | [Long-document SDG](nemotron/data/sdg/long-document.md) feeding [Omni3 SFT](nemotron/omni3/sft.md) | -| `src/nemotron/recipes//` | Family-specific training, RL, evaluation, and model lifecycle commands | [Nano3](nemotron/nano3/README.md), [Omni3](nemotron/omni3/README.md) | - -## Training Pipeline - -Each recipe family has its own stage layout, and all of them can be tracked through [artifact lineage](nemotron/artifacts.md): - -| Family | Stage layout | -|--------|--------------| -| [Nano3](nemotron/nano3/README.md) | Pretraining тЖТ SFT тЖТ RL | -| [Omni3](nemotron/omni3/README.md) | SFT тЖТ RL MPO тЖТ RL text тЖТ RL vision тЖТ Eval | -| [Super3](nemotron/super3/README.md) | Pretraining тЖТ SFT тЖТ RL тЖТ Quantization тЖТ Eval | -| [Embed](nemotron/embed/README.md) | SDG тЖТ Data Prep тЖТ Finetune тЖТ Eval тЖТ Export тЖТ Deploy | -| [Rerank](nemotron/rerank/README.md) | SDG тЖТ Data Prep тЖТ Finetune тЖТ Eval тЖТ Export тЖТ Deploy | - -## Why Nemotron? - -| | | -|---|---| -| **Open Models** | Transparent training data, techniques, and weights for community innovation | -| **Compute Efficiency** | Model pruning enabling higher throughput via TensorRT-LLM | -| **High Accuracy** | Built on frontier open models with human-aligned reasoning | -| **Flexible Deployment** | Deploy anywhere: edge, single GPU, or data center with NIM | - -## Features - -- **End-to-end pipelines** from raw data to deployment-ready models -- **[Artifact lineage](nemotron/artifacts.md)** via [W&B](nemotron/wandb.md) from data to model -- **Built on [NVIDIA's NeMo stack](nemotron/nvidia-stack.md)** (Megatron-Bridge, NeMo-RL) -- **Reproducible** with versioned configs, data blends, and checkpoints - -## Resources - -- [Tech Report](https://research.nvidia.com/labs/nemotron/files/NVIDIA-Nemotron-3-Nano-Technical-Report.pdf) тАУ Nemotron 3 Nano methodology -- [Model Weights](https://huggingface.co/collections/nvidia/nvidia-nemotron-v3) тАУ pre-trained checkpoints on HuggingFace -- [Pre-training Datasets](https://huggingface.co/collections/nvidia/nemotron-pre-training-datasets) тАУ open pre-training data -- [Post-training Datasets](https://huggingface.co/collections/nvidia/nemotron-post-training-v3) тАУ SFT and RL data -- [Artifact Lineage](nemotron/artifacts.md) тАУ W&B integration guide -- [Model training steps](train-models/index.md) тАУ SFT, PEFT, RL, and optimization with `nemotron step run` - -```{toctree} -:caption: Nemotron -:hidden: - -Home -application-examples.md -deployment-guides.md -``` - -```{toctree} -:caption: Nemotron Step Basics -:hidden: - -About -Basics -Getting Started -Airgap Environment -``` - -```{toctree} -:caption: Data Curation -:hidden: - -About -Getting Started -Tasks -Reference -``` - -```{toctree} -:caption: Synthetic Data Generation -:hidden: - -About -Getting Started -Tips for Using Agents -Planning -Tasks -Reference -``` - -```{toctree} -:caption: Translation -:hidden: - -About -Getting Started -Tips for Using Agents -translation/explanation/index.md -Tasks -Reference -``` - -```{toctree} -:caption: Build MCQ Benchmarks -:hidden: - -About -Getting Started -Concepts -Tasks -Reference -``` - -```{toctree} -:caption: Model Training -:hidden: - -About -Getting Started -Tips for Using Agents -Concepts -Tasks -Reference -``` - -```{toctree} -:caption: Model Evaluation -:hidden: - -About -Getting Started -Tips for Using Agents -Concepts -Tasks -Reference -``` - -```{toctree} -:caption: Training Recipes -:hidden: - -Nemotron 3 Nano -Nemotron 3 Omni -Nemotron 3 Super -Llama Nemotron Embed -Llama Nemotron Rerank -nemotron/artifacts.md -``` - -```{toctree} -:caption: Nemotron Kit -:hidden: - -nemotron/kit.md -nemotron/nvidia-stack.md -nemo_runspec/package-readme.md -nemo_runspec/nemo-run.md -nemo_runspec/omegaconf.md -nemo_runspec/artifacts.md -nemotron/wandb.md -nemotron/cli.md -nemotron/data-prep.md -nemotron/xenna-observability.md -``` - -```{toctree} -:caption: Data Recipes -:hidden: - -nemotron/data/curation/nemotron-cc.md -nemotron/data/sdg/long-document.md -``` - -```{toctree} -:caption: Architecture -:hidden: - -architecture/README.md -architecture/design-philosophy.md -architecture/cli-architecture.md -runspec/v1/spec.md -``` diff --git a/docs/model-eval/explanation/endpoint-types-and-benchmarks.md b/docs/model-eval/explanation/endpoint-types-and-benchmarks.md deleted file mode 100644 index 8ed4a16e7..000000000 --- a/docs/model-eval/explanation/endpoint-types-and-benchmarks.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Why eval/model_eval couples endpoint type to NeMo Evaluator Launcher task family." -topics: ["Model Evaluation", "Endpoints"] -tags: ["Explanation", "Model Evaluation"] -content: - type: "Explanation" - difficulty: "Beginner" - audience: ["ML Engineer", "Data Scientist"] ---- - -(model-eval-endpoint-types-and-benchmarks)= -# Endpoint Types And Task Families - -`eval/model_eval` passes endpoint and task configuration to NeMo Evaluator Launcher. -The endpoint type must match the selected task family. - -## Endpoint Fields - -Hosted endpoint runs use: - -```text -target.api_endpoint.url -target.api_endpoint.model_id -target.api_endpoint.api_key_name -target.api_endpoint.type -``` - -The `type` value is usually `chat` or `completions`. -The URL path should agree with that value. - -## Task Families - -- Chat and instruction tasks issue chat-completions requests and score generated answers. -- Log-probability tasks need a completions endpoint with logprobs support and a tokenizer that matches the served model. - -## Decision Table - -| Task family | Required endpoint type | Extra requirements | -| --- | --- | --- | -| Hosted chat smoke tests | `chat` | A chat-completions URL and a valid API key. | -| Instruction/chat tasks | `chat` | Generation parameters appropriate for the model and task. | -| Log-probability tasks | `completions` | A completions endpoint with logprobs support and a matching tokenizer. | - -The repository smoke-test config, `tiny_chat.yaml`, uses `mmlu_instruct` with `target.api_endpoint.type=chat`. -The checkpoint config, `default.yaml`, includes launcher tasks for Megatron checkpoint evaluation; verify endpoint and tokenizer requirements before changing those tasks. - -## Related Pages - -- {doc}`tokenizer-alignment` for the tokenizer side of log-probability tasks. -- {doc}`pipeline-overview` for where endpoint config enters the run. -- {doc}`../how-to/evaluate-deployed-checkpoint` for choosing the hosted or checkpoint path. -- {doc}`../reference/benchmarks-catalog` for task identifiers. diff --git a/docs/model-eval/explanation/index.md b/docs/model-eval/explanation/index.md deleted file mode 100644 index f0b2a94a1..000000000 --- a/docs/model-eval/explanation/index.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Concept pages for nemotron eval/model_eval: pipeline architecture, endpoint and benchmark families, and tokenizer alignment." -topics: ["Model Evaluation", "Concepts"] -tags: ["Explanation", "Model Evaluation"] -content: - type: "Explanation" - difficulty: "Beginner" - audience: ["ML Engineer", "Data Scientist"] ---- - -# Concepts - -The pages in this section cover the design rules behind `eval/model_eval`. -Read them when you want to understand why the how-to pages take the actions they do, before you change a configuration default or adapt a recipe to a new deployment. - -```{toctree} -:maxdepth: 1 -:hidden: - -pipeline-overview -endpoint-types-and-benchmarks -tokenizer-alignment -``` - -## Pipeline And Architecture - -::::{grid} 1 1 1 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} {octicon}`graph;1.5em;sd-mr-1` Pipeline Overview -:link: pipeline-overview -:link-type: doc -Artifact flow from a checkpoint or hosted endpoint, through `eval/model_eval`, into `eval_results` on disk. -+++ -{bdg-secondary}`architecture` -::: - -:::: - -## Deployment Contract - -::::{grid} 1 1 1 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} {octicon}`plug;1.5em;sd-mr-1` Endpoint Types And Benchmark Families -:link: endpoint-types-and-benchmarks -:link-type: doc -Chat versus completions endpoints, and which benchmark families match each one. -+++ -{bdg-secondary}`endpoint` -::: - -:::{grid-item-card} {octicon}`package;1.5em;sd-mr-1` Tokenizer Alignment -:link: tokenizer-alignment -:link-type: doc -Why log-probability benchmarks need a tokenizer that matches the served model. -+++ -{bdg-secondary}`tokenizer` -::: - -:::: diff --git a/docs/model-eval/explanation/pipeline-overview.md b/docs/model-eval/explanation/pipeline-overview.md deleted file mode 100644 index 4afd034c6..000000000 --- a/docs/model-eval/explanation/pipeline-overview.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "How nemotron eval/model_eval builds a NeMo Evaluator Launcher config and writes eval_results." -topics: ["Model Evaluation", "Pipeline"] -tags: ["Explanation", "Architecture"] -content: - type: "Explanation" - difficulty: "Beginner" - audience: ["ML Engineer", "Data Scientist"] ---- - -(model-eval-pipeline-overview)= -# Pipeline Overview - -The `eval/model_eval` step is a thin Nemotron wrapper around NeMo Evaluator Launcher. -It does not implement benchmark scoring itself. -It loads a YAML config, applies command-line overrides, saves the launcher config, and calls `run_eval`. - -## Architecture - -```{mermaid} -%%{init: {'theme': 'base', 'themeVariables': { 'primaryBorderColor': '#333333', 'lineColor': '#333333', 'primaryTextColor': '#333333', 'clusterBkg': '#ffffff', 'clusterBorder': '#333333'}}}%% -flowchart LR - hosted["Hosted OpenAI-compatible endpoint"] --> cfg["target.api_endpoint"] - ckpt["Megatron Bridge iter_* checkpoint"] --> deploy["launcher deployment block"] - cfg --> step["eval/model_eval"] - deploy --> step - step --> launcher["NeMo Evaluator Launcher run_eval"] - launcher --> results["eval_results under output_dir"] -``` - -## Runtime Flow - -1. `step.py` calls `run_model_eval` from `runtime.py`. -1. The runtime loads the selected config from `config/default.yaml`, `config/tiny_chat.yaml`, or a user-supplied YAML path. -1. Hydra-style dotlist overrides are merged into the config. -1. Nemotron-only keys are removed before launcher dispatch: `dry_run`, `output_dir`, `task_filters`, and `run`. -1. `output_dir` is copied into `execution.output_dir`. -1. The resolved launcher config is saved and printed as `launcher_config`. -1. `nemo_evaluator_launcher.api.functional.run_eval` is called with the launcher config and optional task filters. - -## Input Artifacts - -The step declares optional `checkpoint_megatron` input. -Hosted endpoint runs do not consume a checkpoint artifact. -Launcher-managed checkpoint runs usually pass a concrete Megatron Bridge `iter_*` directory through `deployment.checkpoint_path`. - -## Output Artifact - -The step produces `eval_results`. -The exact directory layout and files are owned by NeMo Evaluator Launcher and the selected task implementations. -For result inspection guidance, refer to {doc}`../reference/output-artifacts`. - -## What Is Owned Where - -| Owned by Nemotron | Owned by NeMo Evaluator Launcher | -| --- | --- | -| Step discovery, config loading, dotlist overrides, launcher config saving. | Task implementations, endpoint probing, deployment orchestration, and result files. | -| `dry_run`, `output_dir`, `task_filters`, and `run` preprocessing. | `execution`, `deployment`, `target`, `evaluation`, `tasks`, and `export` semantics after dispatch. | -| The `step.toml` contract and agent-facing guidance. | Accepted task identifiers and version-specific task behavior. | - -## Related Pages - -- {doc}`endpoint-types-and-benchmarks` for endpoint/task pairing. -- {doc}`tokenizer-alignment` for why log-probability tasks need a matching tokenizer. -- {doc}`../reference/output-artifacts` for result inspection. -- {doc}`../how-to/discover-the-step` for reading the step contract before configuring a run. diff --git a/docs/model-eval/explanation/tokenizer-alignment.md b/docs/model-eval/explanation/tokenizer-alignment.md deleted file mode 100644 index 6ecf69b94..000000000 --- a/docs/model-eval/explanation/tokenizer-alignment.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Why log-probability tasks in eval/model_eval require a tokenizer that matches the served model." -topics: ["Model Evaluation", "Tokenizer"] -tags: ["Explanation", "Model Evaluation"] -content: - type: "Explanation" - difficulty: "Beginner" - audience: ["ML Engineer", "Data Scientist"] ---- - -(model-eval-tokenizer-alignment)= -# Tokenizer Alignment - -The hosted chat smoke path in `tiny_chat.yaml` does not require a tokenizer override. -Tokenizer alignment becomes important when you run log-probability tasks such as HellaSwag or other tasks that score candidate continuations by token likelihood. - -## Where The Tokenizer Lives - -Tokenizer settings live under: - -```text -evaluation.nemo_evaluator_config.config.params.extra.tokenizer -evaluation.nemo_evaluator_config.config.params.extra.tokenizer_backend -``` - -The `default.yaml` config sets the tokenizer to `${deployment.checkpoint_path}/tokenizer`, which matches the Megatron Bridge checkpoint path when that checkpoint contains a tokenizer subdirectory. - -## Why It Must Match - -Log-probability tasks ask the endpoint to score candidate token sequences. -If the evaluator tokenizes candidates differently from the served model, the model scores the wrong token ids and the metric is not meaningful. - -## Accepted Shapes - -Use one of these tokenizer values when a selected task requires local tokenization: - -- A Hugging Face model id. -- A filesystem path containing tokenizer files. -- The `tokenizer/` subdirectory inside a Megatron Bridge `iter_*` checkpoint. - -Use `huggingface` for `evaluation.nemo_evaluator_config.config.params.extra.tokenizer_backend` unless the selected launcher task explicitly requires another backend. - -## Related Pages - -- {doc}`endpoint-types-and-benchmarks` for endpoint/task pairing. -- {doc}`pipeline-overview` for runtime flow. -- {doc}`../reference/config-schema` for field-by-field documentation. -- {doc}`../reference/troubleshooting` for common tokenizer and checkpoint-path failures. diff --git a/docs/model-eval/getting-started.md b/docs/model-eval/getting-started.md deleted file mode 100644 index e02470b43..000000000 --- a/docs/model-eval/getting-started.md +++ /dev/null @@ -1,123 +0,0 @@ - - -(model-eval-getting-started)= -# Getting Started With Model Evaluation - -::::{grid} 2 - -:::{grid-item-card} -:columns: 8 - -**What You'll Build**: one NeMo Evaluator Launcher result directory for a single hosted chat smoke-test task, written by the `eval/model_eval` step. - -^^^ - -**In this tutorial, you will**: - -1. Discover the `eval/model_eval` step from the local catalog. -1. Inspect the hosted-endpoint sample config, `tiny_chat.yaml`. -1. Run a one-sample hosted chat evaluation. -1. List the result files on disk. - -{octicon}`clock;1.5em;sd-mr-1` This tutorial requires between 15 and 30 minutes to complete, depending on endpoint latency. -::: - -:::{grid-item-card} {octicon}`flame;1.5em;sd-mr-1` **Sample Prompt** -:columns: 4 - -Run a one-sample hosted chat evaluation with `eval/model_eval` and `tiny_chat.yaml`, then show me the launcher config and result files. -::: -:::: - -## Prerequisites - -- Run all commands from the repository root. -- Install the evaluator extra: - - ```console - $ uv sync --extra evaluator - ``` - -- A reachable OpenAI-compatible chat-completions endpoint. -- A model identifier advertised by that endpoint. -- A bearer token exported as the environment variable referenced by `target.api_endpoint.api_key_name`. - -## About The Sample Configuration - -The hosted chat sample file is at `src/nemotron/steps/eval/model_eval/config/tiny_chat.yaml`. -It sets `deployment.type: none`, points NeMo Evaluator Launcher at `target.api_endpoint`, and runs the chat-compatible `mmlu_instruct` task with `limit_samples: 1`. - -```{literalinclude} ../../src/nemotron/steps/eval/model_eval/config/tiny_chat.yaml -:language: yaml -``` - -## Procedure - -1. Clone the repository, if you haven't already: - - ```console - $ git clone https://github.com/NVIDIA-NeMo/Nemotron && cd Nemotron - ``` - -1. Synchronize dependencies: - - ```console - $ uv sync --extra evaluator - ``` - -1. Export the endpoint values. - `EVAL_ROOT` is a directory you choose; it is the parent of the per-run `output_dir`. - - ```console - $ export NVIDIA_API_KEY="" - $ export NEMO_EVALUATOR_MODEL_URL="" - $ export NEMO_EVALUATOR_MODEL_ID="" - $ export NEMO_EVALUATOR_ENDPOINT_TYPE=chat - $ export EVAL_ROOT="$(pwd)/output/eval-getting-started" - ``` - -1. Confirm that the local catalog exposes `eval/model_eval`. - - ```console - $ uv run --no-sync nemotron steps show eval/model_eval - ``` - -1. Run the hosted chat smoke test. - - ```console - $ uv run --no-sync nemotron steps run eval/model_eval \ - -c tiny_chat \ - output_dir="$EVAL_ROOT/results-tiny-chat" \ - target.api_endpoint.url="$NEMO_EVALUATOR_MODEL_URL" \ - target.api_endpoint.model_id="$NEMO_EVALUATOR_MODEL_ID" \ - target.api_endpoint.api_key_name=NVIDIA_API_KEY \ - target.api_endpoint.type=chat \ - evaluation.nemo_evaluator_config.config.params.limit_samples=1 - ``` - - The step writes the launcher config path to stdout. - If NeMo Evaluator Launcher returns an invocation id, the step also prints `status_command` and `logs_command` values that you can run to inspect the job. - Treat those commands as part of the run: wait until the launcher reports a - terminal status before expecting final metric artifacts. - - To inspect the merged Nemotron job config without invoking the launcher, add `--dry-run`. - To pass NeMo Evaluator Launcher's own dry-run flag, use the config override `dry_run=true`. - -1. List the files written under the output directory after the launcher job - reaches a terminal status. - - ```console - $ find "$EVAL_ROOT/results-tiny-chat" -maxdepth 5 -type f | sort - ``` - - The exact file names are owned by NeMo Evaluator Launcher and can vary by task version. - -## Next Steps - -- Run the standard checkpoint-evaluation config: {doc}`how-to/evaluate-deployed-checkpoint`. -- Look up the full YAML schema: {doc}`reference/config-schema`. -- Drive the step from a coding agent: {doc}`using-skills`. -- Run hosted evaluations with custom task settings: {doc}`how-to/run-hosted-evaluation`. diff --git a/docs/model-eval/how-to/discover-the-step.md b/docs/model-eval/how-to/discover-the-step.md deleted file mode 100644 index 43200fdcc..000000000 --- a/docs/model-eval/how-to/discover-the-step.md +++ /dev/null @@ -1,75 +0,0 @@ - - -(model-eval-discover-the-step)= -# Discover The Model Evaluation Step - -This guide shows how to find `eval/model_eval` in the step catalog, how to read its contract, and how to decide whether it applies. - -## Prerequisites - -- The Nemotron repository is synced. -- A local checkout is sufficient; discovery reads local `step.toml` files only. - -## List Eval-Category Steps - -```bash -uv run --no-sync nemotron steps list --category eval --json -``` - -The response includes `eval/model_eval`, the step that wraps NeMo Evaluator Launcher. - -## Inspect The Step Contract - -```bash -uv run --no-sync nemotron steps show eval/model_eval --json -``` - -The response contains the fields declared in `src/nemotron/steps/eval/model_eval/step.toml`. - -| Field | What It Tells You | -| --- | --- | -| `consumes` | Optional input artifact type. This step accepts `checkpoint_megatron`. | -| `produces` | Output artifact type. This step produces `eval_results`. | -| `parameters` | Documented knobs such as `target.api_endpoint.*`, `deployment.checkpoint_path`, `task_filters`, and launcher params. | -| `strategies` | Rules for hosted smoke tests, checkpoint evaluation, endpoint/task pairing, and task-name selection. | -| `errors` | Named failure modes and recovery guidance. | -| `reference` | Upstream NeMo Evaluator Launcher references. | - -## Read The Sample Files - -The step provides two config files under `src/nemotron/steps/eval/model_eval/config/`. - -```{literalinclude} ../../../src/nemotron/steps/eval/model_eval/config/tiny_chat.yaml -:language: yaml -``` - -`tiny_chat.yaml` is the hosted chat smoke-test config. -It sets `deployment.type: none`, reads `target.api_endpoint.*` from environment variables, and runs `mmlu_instruct` with `limit_samples: 1`. - -```{literalinclude} ../../../src/nemotron/steps/eval/model_eval/config/default.yaml -:language: yaml -``` - -`default.yaml` is the Megatron Bridge checkpoint evaluation config. -It uses NeMo Evaluator Launcher deployment and evaluates the configured `tasks` entries. - -## Decide Whether It Applies - -`eval/model_eval` applies when the following statements are true. - -- The model is already available as an OpenAI-compatible endpoint, or NeMo Evaluator Launcher can deploy the checkpoint from the selected config. -- The tasks you need are implemented by the installed NeMo Evaluator Launcher stack. -- The endpoint type matches the selected task family. - -`eval/model_eval` is not the right step when the evaluation needs a custom scorer that NeMo Evaluator Launcher does not implement. -Write a dedicated evaluation step in that case, modeled on the contract layout under `src/nemotron/steps/`. - -## Related - -- `src/nemotron/steps/eval/model_eval/step.toml` for the full step contract. -- {doc}`run-hosted-evaluation` for the first procedural walk-through after discovery. -- {doc}`../reference/config-schema` for field-by-field YAML reference. -- {doc}`../reference/cli-reference` for the flag and override surface. diff --git a/docs/model-eval/how-to/evaluate-deployed-checkpoint.md b/docs/model-eval/how-to/evaluate-deployed-checkpoint.md deleted file mode 100644 index 3c2a0f52f..000000000 --- a/docs/model-eval/how-to/evaluate-deployed-checkpoint.md +++ /dev/null @@ -1,79 +0,0 @@ - - -(model-eval-evaluate-deployed-checkpoint)= -# Evaluate A Deployed Checkpoint - -This guide covers the two supported evaluation shapes in the current `eval/model_eval` step. - -- Use `tiny_chat.yaml` when the model is already hosted behind an OpenAI-compatible chat endpoint. -- Use `default.yaml` when NeMo Evaluator Launcher should deploy a Megatron Bridge checkpoint and run the configured tasks. - -## Prerequisites - -- `uv sync --extra evaluator` has completed. -- For hosted evaluation, you have the endpoint URL, model id, and API key environment variable. -- For checkpoint evaluation, you have a concrete Megatron Bridge `iter_*` checkpoint path. - -## Hosted Endpoint Path - -For an existing endpoint, use the same command shape as {doc}`run-hosted-evaluation`. - -```bash -export NVIDIA_API_KEY="" -export NEMO_EVALUATOR_MODEL_URL="https:///v1/chat/completions" -export NEMO_EVALUATOR_MODEL_ID="" - -uv run --no-sync nemotron steps run eval/model_eval \ - -c tiny_chat \ - output_dir=./output/eval-hosted \ - target.api_endpoint.url="$NEMO_EVALUATOR_MODEL_URL" \ - target.api_endpoint.model_id="$NEMO_EVALUATOR_MODEL_ID" \ - target.api_endpoint.api_key_name=NVIDIA_API_KEY \ - target.api_endpoint.type=chat -``` - -## Launcher-Managed Checkpoint Path - -For Megatron Bridge checkpoints, use `default.yaml`. -Point `deployment.checkpoint_path` at the concrete iteration directory. - -```bash -uv run --no-sync nemotron steps run eval/model_eval \ - -c default \ - output_dir=./output/eval-megatron \ - deployment.checkpoint_path=/path/to/run/iter_0001000 \ - evaluation.nemo_evaluator_config.config.params.limit_samples=1 -``` - -The default config uses the launcher `deployment` block to serve the checkpoint and then runs the configured `tasks`. -If you change tasks to a log-probability task, keep `evaluation.nemo_evaluator_config.config.params.extra.tokenizer` aligned with the deployed checkpoint. - -## Endpoint And Task Pairing - -The endpoint type must match the task family. -Chat and instruction tasks need `target.api_endpoint.type=chat`. -Log-probability tasks such as HellaSwag need a completions endpoint with logprobs support and a matching tokenizer. -For the matching rule, refer to {doc}`../explanation/endpoint-types-and-benchmarks`. - -## What To Check After Submission - -The step prints the launcher config path. -When NeMo Evaluator Launcher returns an invocation id, it also prints: - -```text -status_command: nemo-evaluator-launcher status -logs_command: nemo-evaluator-launcher logs -``` - -Run those commands to monitor the job, then inspect `output_dir` after completion. - -## Related - -- {doc}`run-hosted-evaluation` for the hosted endpoint walk-through. -- {doc}`../explanation/index` for endpoint type, tokenizer alignment, and task-family concepts. -- {ref}`model-eval-comparing-runs` for before-and-after evaluation framing. -- {doc}`../../deployment-guides` for broader deployment options. -- {doc}`../reference/config-schema` for the YAML field reference. diff --git a/docs/model-eval/how-to/index.md b/docs/model-eval/how-to/index.md deleted file mode 100644 index a0cc678d8..000000000 --- a/docs/model-eval/how-to/index.md +++ /dev/null @@ -1,51 +0,0 @@ - - -(model-eval-how-to-index)= -# Model Evaluation How-To Guides - -This section provides task-focused procedures for running `eval/model_eval`. -For your first run, start with {doc}`../getting-started`. -For agent-driven sessions, read {doc}`../using-skills` first. - -## Choose A Guide - -::::{grid} 1 2 2 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} {octicon}`search;1.5em;sd-mr-1` Discover The Step -:link: discover-the-step -:link-type: doc -List the step, read its contract, and decide whether it applies to the task. -+++ -{bdg-secondary}`discovery` -::: - -:::{grid-item-card} {octicon}`play;1.5em;sd-mr-1` Run A Hosted Evaluation -:link: run-hosted-evaluation -:link-type: doc -Run benchmarks against an already-running, OpenAI-compatible endpoint. -+++ -{bdg-secondary}`hosted-endpoint` -::: - -:::{grid-item-card} {octicon}`server;1.5em;sd-mr-1` Evaluate A Deployed Checkpoint -:link: evaluate-deployed-checkpoint -:link-type: doc -Choose a deployment path, deploy the endpoint, and point the step at it. -+++ -{bdg-secondary}`deployment` -::: - -:::: - -```{toctree} -:hidden: -:maxdepth: 1 - -discover-the-step -run-hosted-evaluation -evaluate-deployed-checkpoint -``` diff --git a/docs/model-eval/how-to/run-hosted-evaluation.md b/docs/model-eval/how-to/run-hosted-evaluation.md deleted file mode 100644 index 664820aca..000000000 --- a/docs/model-eval/how-to/run-hosted-evaluation.md +++ /dev/null @@ -1,84 +0,0 @@ - - -(model-eval-run-hosted-evaluation)= -# Run A Hosted Evaluation - -This guide runs `eval/model_eval` against an already-running OpenAI-compatible endpoint. -For the out-of-the-box hosted smoke test, use `tiny_chat.yaml`. - -## Prerequisites - -- The Nemotron repository is synced with `uv sync --extra evaluator`. -- A reachable endpoint URL. -- The endpoint's advertised model id. -- A credential exported as an environment variable. - -## Choose The Starting Config - -| Config | Use | -| --- | --- | -| `tiny_chat.yaml` | Hosted chat smoke test. Runs `mmlu_instruct` with `limit_samples: 1`. | -| `default.yaml` | Launcher-managed checkpoint deployment and evaluation. Use this when the launcher should deploy a Megatron Bridge checkpoint. | - -Hosted chat QA should start with `tiny_chat.yaml`. - -## Set Endpoint Values - -```bash -export NVIDIA_API_KEY="" -export NEMO_EVALUATOR_MODEL_URL="" -export NEMO_EVALUATOR_MODEL_ID="" -export NEMO_EVALUATOR_ENDPOINT_TYPE=chat -``` - -The config stores the API key environment variable name, not the secret value. - -## Run And Stream Output - -```bash -uv run --no-sync nemotron steps run eval/model_eval \ - -c tiny_chat \ - output_dir=./output/eval-tiny-chat \ - target.api_endpoint.url="$NEMO_EVALUATOR_MODEL_URL" \ - target.api_endpoint.model_id="$NEMO_EVALUATOR_MODEL_ID" \ - target.api_endpoint.api_key_name=NVIDIA_API_KEY \ - target.api_endpoint.type=chat \ - evaluation.nemo_evaluator_config.config.params.limit_samples=1 -``` - -The step saves the launcher config and then calls NeMo Evaluator Launcher. -If the launcher returns an invocation id, the command prints the status and log commands to run next. - -To compile the Nemotron job without invoking the launcher: - -```bash -uv run --no-sync nemotron steps run eval/model_eval -d -c tiny_chat \ - target.api_endpoint.url="$NEMO_EVALUATOR_MODEL_URL" \ - target.api_endpoint.model_id="$NEMO_EVALUATOR_MODEL_ID" -``` - -To invoke the launcher in its own dry-run mode: - -```bash -uv run --no-sync nemotron steps run eval/model_eval -c tiny_chat dry_run=true -``` - -## Validate Output Artifacts - -After the run completes, list files under `output_dir`. - -```bash -find ./output/eval-tiny-chat -maxdepth 5 -type f | sort -``` - -The exact file set is owned by NeMo Evaluator Launcher and can vary by task version. - -## Related - -- {doc}`discover-the-step` for discovery commands. -- {doc}`evaluate-deployed-checkpoint` for the launcher-managed checkpoint path. -- {doc}`../reference/cli-reference` for the full flag and override surface. -- {doc}`../reference/config-schema` for the YAML field reference. diff --git a/docs/model-eval/index.md b/docs/model-eval/index.md deleted file mode 100644 index 711e23073..000000000 --- a/docs/model-eval/index.md +++ /dev/null @@ -1,170 +0,0 @@ - - -(model-eval-index)= -# About Model Evaluation - -The `eval/model_eval` Nemotron step is a wrapper around NeMo Evaluator Launcher. -It runs launcher tasks against either an existing OpenAI-compatible endpoint or a launcher-managed Megatron Bridge checkpoint deployment, then writes an `eval_results` artifact to disk. - -:::{tip} -New to model evaluation or the Nemotron CLI? -Read {doc}`using-skills` for a short guide to productive agent sessions, then start the {doc}`getting-started` tutorial to run one benchmark on one sample against a hosted endpoint. -::: - -## When To Use - -Use `eval/model_eval` when the work matches one of the following. - -- Score a trained checkpoint with NeMo Evaluator Launcher tasks. -- Compare a new training run against a baseline by running the same task set against both, with generation parameters and endpoint type held constant. -- Perform a sample run against a hosted endpoint, to confirm the URL, credential, and model id before scaling up. -- Pair this step with a baseline evaluation before training to capture before-and-after measurements around a training change, by following {ref}`model-eval-comparing-runs`. - -## Pipeline At A Glance - -```{mermaid} -%%{init: {'theme': 'base', 'themeVariables': { 'primaryBorderColor': '#333333', 'lineColor': '#333333', 'primaryTextColor': '#333333', 'clusterBkg': '#ffffff', 'clusterBorder': '#333333'}}}%% -flowchart LR - ckpt["Hugging Face or
    Megatron Bridge checkpoint"] --> deploy["OpenAI-compatible
    endpoint"] - hosted["Hosted endpoint"] --> deploy - deploy --> step["eval/model_eval
    (NeMo Evaluator)"] - step --> results["eval_results
    per-benchmark subdirs"] -``` - -NeMo Evaluator Launcher owns task execution and result files under `output_dir`. -For the contract and the on-disk layout, refer to {doc}`reference/output-artifacts`. - -## How It Works - -The runner reads a single YAML document, applies command-line overrides, removes Nemotron-only keys, saves the resolved launcher config, and calls `nemo_evaluator_launcher.api.functional.run_eval`. - -The endpoint type must match the benchmark family. -Chat and instruction benchmarks need a *chat* endpoint. -*Log-probability* tasks, such as HellaSwag, need a *completions* endpoint with `logprobs` support and a tokenizer that matches the served model. - -The hosted smoke-test config is `tiny_chat.yaml`. -The checkpoint-evaluation config is `default.yaml`. -Generation settings live under `evaluation.nemo_evaluator_config.config.params`. - -For the full concept set behind these design rules, refer to {doc}`explanation/index`. - -## Documentation - -::::{grid} 1 2 2 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} {octicon}`rocket;1.5em;sd-mr-1` Getting Started -:link: getting-started -:link-type: doc -Run one benchmark on one sample against a hosted endpoint, end to end. -+++ -{bdg-success}`15-30 min` {bdg-secondary}`tutorial` -::: - -:::{grid-item-card} {octicon}`heart;1.5em;sd-mr-1` Use The Model Evaluation Skill With Confidence -:link: using-skills -:link-type: doc -Run a productive agent session: opening brief, four required inputs, and how `SKILL.md` keeps the session focused. -+++ -{bdg-success}`10 min read` {bdg-secondary}`newcomer` -::: - -:::{grid-item-card} {octicon}`checklist;1.5em;sd-mr-1` How-To Guides -:link: how-to/index -:link-type: doc -Discover the step, run a hosted evaluation, and evaluate a deployed checkpoint. -+++ -{bdg-success}`3 guides` {bdg-secondary}`task-focused` -::: - -:::{grid-item-card} {octicon}`list-unordered;1.5em;sd-mr-1` Reference -:link: reference/index -:link-type: doc -YAML schema, command-line flags, output artifact layout, benchmark catalog, and troubleshooting. -+++ -{bdg-success}`5 references` {bdg-secondary}`lookup` -::: - -:::{grid-item-card} {octicon}`book;1.5em;sd-mr-1` Concepts -:link: explanation/index -:link-type: doc -Architecture, endpoint and benchmark families, and tokenizer alignment. -+++ -{bdg-success}`3 pages` {bdg-secondary}`explanation` -::: - -:::: - -## All Documentation - -````{tab-set} - -```{tab-item} Getting Started - -| Guide | What You Will Do | Time | -|---|---|---| -| {doc}`getting-started` | Run a one-sample evaluation against a hosted endpoint | 15-30 min | -| {doc}`using-skills` | Drive `eval/model_eval` from a coding agent | 10 min read | - -``` - -```{tab-item} How-To Guides - -| Guide | What You Will Do | -|---|---| -| {doc}`how-to/discover-the-step` | List the step, read its contract, and decide whether it applies | -| {doc}`how-to/run-hosted-evaluation` | Run benchmarks against an already-running endpoint | -| {doc}`how-to/evaluate-deployed-checkpoint` | Pick a deployment path, then point the step at the endpoint | - -``` - -```{tab-item} Reference - -| Reference | What You Will Find | -|---|---| -| {doc}`reference/config-schema` | YAML field reference for `default.yaml` and `tiny_chat.yaml` | -| {doc}`reference/cli-reference` | Flags and Hydra overrides for `nemotron steps run eval/model_eval` | -| {doc}`reference/output-artifacts` | `eval_results` contract and on-disk layout | -| {doc}`reference/benchmarks-catalog` | NeMo Evaluator Launcher task identifiers grouped by family | -| {doc}`reference/troubleshooting` | Named error modes from `step.toml`, with cause and recovery | - -``` - -```{tab-item} Concepts - -| Concept | What You Will Learn | -|---|---| -| {doc}`explanation/index` | Map of the concept pages and how they relate | -| {doc}`explanation/pipeline-overview` | Artifact flow from checkpoint through `eval/model_eval` into `eval_results` | -| {doc}`explanation/endpoint-types-and-benchmarks` | Chat versus completions endpoints, and which benchmark families match each one | -| {doc}`explanation/tokenizer-alignment` | Why log-probability benchmarks need a tokenizer that matches the served model | - -``` - -```` - -## Before You Start - -- The Nemotron repository is synced and `uv sync` is complete. -- A bearer token is exported as the environment variable named in `target.api_endpoint.api_key_name`. - Hosted smoke tests usually use `NVIDIA_API_KEY`. -- A reachable evaluation endpoint URL and a model identifier the endpoint advertises. -- A tokenizer that matches the served model when running log-probability tasks. - The hosted chat smoke test does not require a tokenizer override. - -## Limitations And Considerations - -- Cost: every benchmark sample issues at least one request to the endpoint, and hosted endpoints incur per-token cost. -- Rate limits: hosted endpoints throttle concurrent requests, so set `evaluation.nemo_evaluator_config.config.params.parallelism` to a value the endpoint can serve. -- Deployment: `tiny_chat.yaml` targets an already-deployed endpoint; `default.yaml` uses launcher-managed deployment for a Megatron Bridge checkpoint. -- Comparability: scores are comparable when the endpoint type, task version, tokenizer, and generation parameters are held constant across runs. - The {ref}`model-eval-comparing-runs` section explains the framing. - -## Related Documentation - -- The full `step.toml` contract: `src/nemotron/steps/eval/model_eval/step.toml` in the repository. -- The before-and-after evaluation framing: {ref}`model-eval-comparing-runs`. -- Upstream NeMo Evaluator quick-start: . diff --git a/docs/model-eval/reference/benchmarks-catalog.md b/docs/model-eval/reference/benchmarks-catalog.md deleted file mode 100644 index b2cc53fee..000000000 --- a/docs/model-eval/reference/benchmarks-catalog.md +++ /dev/null @@ -1,70 +0,0 @@ - - -(model-eval-benchmarks-catalog)= -# Tasks Catalog - -This page catalogs task identifiers used by `eval/model_eval`. -NeMo Evaluator Launcher owns the authoritative task list. -Use this page as a quick map, then verify exact names with the installed launcher. - -```bash -nemo-evaluator-launcher ls tasks -nemo-evaluator-launcher ls task -``` - -## Naming Rule - -Use the exact task id listed by NeMo Evaluator Launcher. -Do not prepend a harness name unless the launcher lists that exact dotted id. - -## Repository Starting Points - -| Config | Task entries | When to use | -| --- | --- | --- | -| `tiny_chat.yaml` | `mmlu_instruct` | Hosted chat smoke test. | -| `default.yaml` | `adlr_mmlu`, `hellaswag` | Launcher-managed Megatron checkpoint evaluation. | - -## Chat And Instruction Tasks - -These tasks use a chat endpoint. -The hosted smoke-test config uses this family. - -| Identifier | Notes | -| --- | --- | -| `mmlu_instruct` | Chat/instruction smoke task used by `tiny_chat.yaml`. | -| `adlr_mmlu` | Configured by `default.yaml`; verify endpoint requirements in the installed launcher. | - -## Log-Probability Tasks - -These tasks generally need a completions endpoint with logprobs support and a tokenizer that matches the served model. - -| Identifier | Notes | -| --- | --- | -| `hellaswag` | Configured by `default.yaml`; requires endpoint/tokenizer compatibility for meaningful scores. | - -Configure tokenizer values under: - -```text -evaluation.nemo_evaluator_config.config.params.extra.tokenizer -evaluation.nemo_evaluator_config.config.params.extra.tokenizer_backend -``` - -## Choosing Tasks - -Ask three questions before changing the task list. - -1. Does the installed launcher list the task id exactly? -1. Does the endpoint type match the task family? -1. Is this a smoke test or a production comparison? - -For production comparisons, keep the same task list, endpoint type, tokenizer, and generation parameters across baseline and post-training runs. - -## Related - -- {doc}`config-schema` for the `tasks` section and evaluator params. -- {doc}`output-artifacts` for result layout expectations. -- {doc}`../explanation/endpoint-types-and-benchmarks` for endpoint/task pairing. -- {ref}`model-eval-comparing-runs` for before-and-after evaluation framing. diff --git a/docs/model-eval/reference/cli-reference.md b/docs/model-eval/reference/cli-reference.md deleted file mode 100644 index 9eb55f75e..000000000 --- a/docs/model-eval/reference/cli-reference.md +++ /dev/null @@ -1,111 +0,0 @@ - - -(model-eval-cli-reference)= -# CLI Reference - -This page documents the CLI surface for `nemotron steps run eval/model_eval`. -The flags are shared by every Nemotron step. -The override examples are specific to the `eval/model_eval` YAML schema. - -## Syntax - -```bash -uv run nemotron steps run eval/model_eval [FLAGS] [HYDRA_OVERRIDES...] -``` - -Run the command from the repository root after `uv sync --extra evaluator`. -Pass the configuration name with `-c`, per-step overrides as `key=value` dotlists, and optional execution flags. - -## Flags - -| Flag | Long form | Purpose | -| --- | --- | --- | -| `-c` | `--config` | Config name inside `src/nemotron/steps/eval/model_eval/config/`, such as `default` or `tiny_chat`. Accepts a path to a YAML file. | -| `-r` | `--run` | Attached execution by using an environment profile defined in `env.toml`. | -| `-b` | `--batch` | Detached execution by using an environment profile defined in `env.toml`. | -| `-d` | `--dry-run` | Compile the Nemotron job config and exit without dispatching. | -| | `--force-squash` | Force re-squash of the container image when the selected backend builds one. | - -Invoking the command without `-c` resolves the runspec default, `default.yaml`. - -## Common Overrides - -| Override | Purpose | -| --- | --- | -| `output_dir=` | Base output directory. The runtime also writes this into `execution.output_dir` before calling NeMo Evaluator Launcher. | -| `dry_run=true` | Pass dry-run mode to NeMo Evaluator Launcher. This is different from CLI `--dry-run`, which only compiles the Nemotron job. | -| `task_filters=[,...]` | Optional subset of configured task names passed to NeMo Evaluator Launcher. | -| `target.api_endpoint.url=` | OpenAI-compatible endpoint URL for hosted evaluation when `deployment.type=none`. | -| `target.api_endpoint.model_id=` | Exact model id advertised by the hosted endpoint. | -| `target.api_endpoint.api_key_name=` | Name of the environment variable holding the bearer token. This is the variable name, not the secret. | -| `target.api_endpoint.type=` | Endpoint type expected by the selected task. | -| `evaluation.nemo_evaluator_config.config.params.limit_samples=` | Per-task sample cap for smoke tests. | -| `evaluation.nemo_evaluator_config.config.params.parallelism=` | Concurrent requests issued by the evaluator where supported. | -| `evaluation.nemo_evaluator_config.config.params.request_timeout=` | Per-request timeout in seconds. | -| `evaluation.nemo_evaluator_config.config.params.extra.tokenizer=` | Tokenizer used by log-probability tasks such as HellaSwag. | -| `deployment.checkpoint_path=` | Megatron Bridge checkpoint path used by `default.yaml` launcher deployment. | -| `deployment.image=` | Container image used by the launcher deployment in `default.yaml`. | - -## Discovery Commands - -```bash -uv run --no-sync nemotron steps list --category eval --json -uv run --no-sync nemotron steps show eval/model_eval --json -``` - -`nemotron steps show eval/model_eval --json` prints the full step contract, including `consumes`, `produces`, `parameters`, `strategies`, and `errors`. - -## Examples - -### Hosted Chat Smoke Test - -```bash -: "${NVIDIA_API_KEY:?Set NVIDIA_API_KEY}" -: "${NEMO_EVALUATOR_MODEL_URL:?Set the chat-completions endpoint URL}" -: "${NEMO_EVALUATOR_MODEL_ID:?Set the endpoint model id}" - -uv run --no-sync nemotron steps run eval/model_eval \ - -c tiny_chat \ - output_dir=./output/eval-tiny-chat \ - target.api_endpoint.url="$NEMO_EVALUATOR_MODEL_URL" \ - target.api_endpoint.model_id="$NEMO_EVALUATOR_MODEL_ID" \ - target.api_endpoint.api_key_name=NVIDIA_API_KEY \ - target.api_endpoint.type=chat \ - evaluation.nemo_evaluator_config.config.params.limit_samples=1 -``` - -### Megatron Checkpoint Evaluation Config - -Use `default.yaml` when NeMo Evaluator Launcher should deploy a Megatron Bridge checkpoint and then run the configured tasks. - -```bash -uv run --no-sync nemotron steps run eval/model_eval \ - -c default \ - output_dir=./output/eval-megatron \ - deployment.checkpoint_path=/path/to/checkpoint/iter_0001000 \ - evaluation.nemo_evaluator_config.config.params.limit_samples=1 -``` - -### Compile Without Dispatching - -```bash -uv run --no-sync nemotron steps run eval/model_eval -d -c tiny_chat \ - target.api_endpoint.url="$NEMO_EVALUATOR_MODEL_URL" \ - target.api_endpoint.model_id="$NEMO_EVALUATOR_MODEL_ID" -``` - -### Launcher Dry Run - -```bash -uv run --no-sync nemotron steps run eval/model_eval -c tiny_chat dry_run=true -``` - -## Related - -- {doc}`config-schema` for the YAML schema accepted by `-c` and dotlist overrides. -- {doc}`output-artifacts` for the on-disk layout produced under `output_dir`. -- {doc}`../how-to/run-hosted-evaluation` for a procedural walk-through. -- {doc}`../how-to/discover-the-step` for the step-contract discovery commands. diff --git a/docs/model-eval/reference/config-schema.md b/docs/model-eval/reference/config-schema.md deleted file mode 100644 index c26c4105c..000000000 --- a/docs/model-eval/reference/config-schema.md +++ /dev/null @@ -1,122 +0,0 @@ - - -(model-eval-config-schema)= -# Configuration Reference - -This page documents the YAML schema consumed by `nemotron steps run eval/model_eval`. -The step is a thin wrapper around NeMo Evaluator Launcher: it loads a YAML config, applies Hydra-style overrides, removes Nemotron-only keys, saves a launcher config, and calls `nemo_evaluator_launcher.api.functional.run_eval`. - -## Sample Configs - -| Config | Purpose | -| --- | --- | -| `tiny_chat.yaml` | Hosted chat endpoint smoke test. Uses `deployment.type: none`, `target.api_endpoint.*`, and one configured task, `mmlu_instruct`. | -| `default.yaml` | Megatron Bridge checkpoint evaluation through NeMo Evaluator Launcher. Uses launcher-managed `execution`, `deployment`, `evaluation`, and `tasks` sections. | - -## Top-Level Keys - -```{literalinclude} ../../../src/nemotron/steps/eval/model_eval/config/tiny_chat.yaml -:language: yaml -:class: scrollable -``` - -```{literalinclude} ../../../src/nemotron/steps/eval/model_eval/config/default.yaml -:language: yaml -:class: scrollable -``` - -| Key | Used By | Purpose | -| --- | --- | --- | -| `dry_run` | Nemotron runtime | Passed to NeMo Evaluator Launcher as `run_eval(..., dry_run=...)`. | -| `output_dir` | Nemotron runtime | Copied into `execution.output_dir` before launcher dispatch. | -| `task_filters` | Nemotron runtime | Optional task-name subset passed to launcher. | -| `run` | Nemotron runtime | Nemotron-side artifact, environment, and W&B interpolation. Removed before launcher dispatch. | -| `execution` | NeMo Evaluator Launcher | Where and how launcher execution runs. | -| `deployment` | NeMo Evaluator Launcher | How the evaluated model is deployed, or `type: none` for an existing endpoint. | -| `target` | NeMo Evaluator Launcher | Existing API endpoint metadata for hosted evaluation. | -| `evaluation` | NeMo Evaluator Launcher | Evaluator config, generation params, logging, caching, and adapter settings. | -| `tasks` | NeMo Evaluator Launcher | Exact task entries to run. Each entry has a `name`. | -| `export` | NeMo Evaluator Launcher | Optional export settings, such as W&B export. | - -## Hosted Endpoint Fields - -Use these fields with `tiny_chat.yaml` or any config that sets `deployment.type: none`. - -| Field | Purpose | -| --- | --- | -| `target.api_endpoint.model_id` | Exact model id advertised by the endpoint. | -| `target.api_endpoint.url` | Full OpenAI-compatible endpoint URL, including `/v1/chat/completions` or `/v1/completions`. | -| `target.api_endpoint.api_key_name` | Environment variable name that holds the bearer token. Never put the secret value in config. | -| `target.api_endpoint.type` | Endpoint type, usually `chat` for hosted chat smoke tests. | - -The `tiny_chat.yaml` file reads these values from `NEMO_EVALUATOR_MODEL_ID`, `NEMO_EVALUATOR_MODEL_URL`, `NEMO_EVALUATOR_API_KEY_NAME`, and `NEMO_EVALUATOR_ENDPOINT_TYPE`. - -## Evaluation Params - -Generation and evaluator controls live under: - -```text -evaluation.nemo_evaluator_config.config.params -``` - -Common fields are: - -| Field | Purpose | -| --- | --- | -| `temperature` | Sampling temperature for generation tasks. | -| `top_p` | Top-p nucleus sampling. | -| `max_new_tokens` | Maximum generated tokens for chat/instruction tasks. | -| `max_retries` | Request retry count. | -| `parallelism` | Request concurrency where supported. | -| `request_timeout` | Per-request timeout in seconds. | -| `limit_samples` | Optional per-task sample cap. Use `1` for smoke tests. | -| `extra.tokenizer` | Tokenizer path or Hugging Face id required by log-probability tasks. | -| `extra.tokenizer_backend` | Tokenizer backend, usually `huggingface`. | - -## Tasks - -Tasks are NeMo Evaluator Launcher task entries. -Use exact task IDs from the installed launcher, for example: - -```bash -nemo-evaluator-launcher ls tasks -nemo-evaluator-launcher ls task mmlu_instruct -``` - -The sample configs define these starting points. - -| Config | Tasks | -| --- | --- | -| `tiny_chat.yaml` | `mmlu_instruct` | -| `default.yaml` | `adlr_mmlu`, `hellaswag` | - -Do not prepend a harness name unless the launcher lists that exact dotted task id. - -## Checkpoint Deployment Fields - -The `default.yaml` config uses launcher-managed deployment for a Megatron Bridge checkpoint. -The most common override is: - -```bash -deployment.checkpoint_path=/path/to/iter_0001000 -``` - -Use the concrete `iter_*` checkpoint directory, not just the parent training output directory. -For log-probability tasks, keep the tokenizer aligned with the deployed checkpoint through `evaluation.nemo_evaluator_config.config.params.extra.tokenizer`. - -## Validation Behavior - -Nemotron does not implement a separate benchmark loop for this step. -It validates only enough to build the launcher config and import NeMo Evaluator Launcher. -Endpoint checks, task validation, result writing, and launcher invocation state are owned by NeMo Evaluator Launcher. - -## Related - -- {doc}`cli-reference` for command-line flags and Hydra override syntax. -- {doc}`benchmarks-catalog` for task identifiers grouped by endpoint family. -- {doc}`output-artifacts` for the `eval_results` contract and the on-disk layout. -- {doc}`troubleshooting` for common launcher and config failures. -- `src/nemotron/steps/eval/model_eval/step.toml` for the full step contract. diff --git a/docs/model-eval/reference/index.md b/docs/model-eval/reference/index.md deleted file mode 100644 index b484972c0..000000000 --- a/docs/model-eval/reference/index.md +++ /dev/null @@ -1,67 +0,0 @@ - - -(model-eval-reference-index)= -# Model Evaluation Reference - -Lookup pages for `eval/model_eval`. -For the section overview, refer to {doc}`../index`. -For procedural walk-throughs, refer to {doc}`../how-to/index`. - -::::{grid} 1 2 2 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} {octicon}`file-code;1.5em;sd-mr-1` Configuration Reference -:link: config-schema -:link-type: doc -YAML schema for `default.yaml` and `tiny_chat.yaml`, field by field. -+++ -{bdg-secondary}`yaml` -::: - -:::{grid-item-card} {octicon}`terminal;1.5em;sd-mr-1` CLI Reference -:link: cli-reference -:link-type: doc -`nemotron steps run eval/model_eval` flags and Hydra overrides. -+++ -{bdg-secondary}`cli` -::: - -:::{grid-item-card} {octicon}`archive;1.5em;sd-mr-1` Output Artifacts -:link: output-artifacts -:link-type: doc -The `eval_results` contract and the on-disk directory layout. -+++ -{bdg-secondary}`artifacts` -::: - -:::{grid-item-card} {octicon}`list-unordered;1.5em;sd-mr-1` Benchmarks Catalog -:link: benchmarks-catalog -:link-type: doc -Benchmark identifiers grouped by family, with endpoint-type guidance. -+++ -{bdg-secondary}`tasks` -::: - -:::{grid-item-card} {octicon}`alert;1.5em;sd-mr-1` Troubleshooting -:link: troubleshooting -:link-type: doc -Named error modes from `step.toml`, with the most common cause and the recovery for each. -+++ -{bdg-secondary}`errors` -::: - -:::: - -```{toctree} -:hidden: -:maxdepth: 1 - -config-schema -cli-reference -output-artifacts -benchmarks-catalog -troubleshooting -``` diff --git a/docs/model-eval/reference/output-artifacts.md b/docs/model-eval/reference/output-artifacts.md deleted file mode 100644 index 7ff9d09b4..000000000 --- a/docs/model-eval/reference/output-artifacts.md +++ /dev/null @@ -1,78 +0,0 @@ - - -(model-eval-output-artifacts)= -# Output Artifacts - -This page describes the artifact produced by `eval/model_eval`. - -## The `eval_results` Contract - -`step.toml` declares a single produced artifact. - -| Field | Value | -| --- | --- | -| `type` | `eval_results` | -| `description` | Benchmark metrics, artifacts, and evaluation summaries produced by NeMo Evaluator. | - -The contract is intentionally loose. -Nemotron does not normalize evaluator outputs. -NeMo Evaluator Launcher owns the exact file set and directory shape under the configured `output_dir`. - -## Launcher Config - -Before calling the launcher, the step saves the resolved launcher config and prints: - -```text -launcher_config: -``` - -If the launcher returns an invocation id, the step also prints: - -```text -launcher_invocation_id: -status_command: nemo-evaluator-launcher status -logs_command: nemo-evaluator-launcher logs -``` - -Those commands are the source of truth for job state and logs after submission. - -## Directory Layout - -The base output directory is `output_dir`, copied into `execution.output_dir`. -The exact files inside that directory depend on the configured launcher tasks. - -For the hosted chat smoke test, inspect: - -```bash -find ./output/eval-tiny-chat -maxdepth 5 -type f | sort -``` - -For checkpoint evaluation, inspect the output directory you supplied: - -```bash -find ./output/eval-megatron -maxdepth 5 -type f | sort -``` - -(model-eval-comparing-runs)= -## Comparing Runs - -Evaluation results carry meaning when paired with another evaluation. -A trained checkpoint is scored against a baseline, a new prompt format is scored against an older one, and a quantized export is scored against the unquantized weights. -The comparison is honest when the surrounding configuration is held constant. - -Apply the following practices before treating any single evaluation as a result. - -- Run a lightweight baseline before the training, conversion, or quantization step you are measuring. -- Snapshot the exact evaluation config, including config file name, `output_dir`, endpoint fields, task list, tokenizer, and generation parameters. -- Place a date or run identifier in `output_dir` so baseline and post-change directories live side by side. -- Keep endpoint type, task versions, tokenizer, and generation parameters identical between runs. -- Rerun the baseline task set first before exploring new tasks. - -## Related - -- {doc}`config-schema` for the YAML keys that influence what is written. -- {doc}`benchmarks-catalog` for task identifiers. -- `src/nemotron/steps/eval/model_eval/step.toml` for the full step contract. diff --git a/docs/model-eval/reference/troubleshooting.md b/docs/model-eval/reference/troubleshooting.md deleted file mode 100644 index 8828d5983..000000000 --- a/docs/model-eval/reference/troubleshooting.md +++ /dev/null @@ -1,94 +0,0 @@ - - -(model-eval-troubleshooting)= -# Troubleshooting - -This page maps common `eval/model_eval` failures to the config fields that usually need correction. -Nemotron builds a launcher config and calls NeMo Evaluator Launcher; task execution, endpoint checks, and result writing are owned by the launcher. - -## Evaluator Extra Missing - -Symptom: - -```text -Error: nemo-evaluator-launcher is required for evaluation -Install with: uv sync --extra evaluator -``` - -Recovery: - -```bash -uv sync --extra evaluator -``` - -Then rerun the same `nemotron steps run eval/model_eval` command with `uv run --no-sync`. - -## Hosted Endpoint Fails - -Most hosted failures come from one of these fields: - -| Field | What To Check | -| --- | --- | -| `target.api_endpoint.url` | Full endpoint URL, including `/v1/chat/completions` or `/v1/completions`. | -| `target.api_endpoint.model_id` | Exact model id returned by the endpoint's models API or UI. | -| `target.api_endpoint.api_key_name` | Environment variable name, not the secret value. | -| `target.api_endpoint.type` | `chat` for chat tasks, `completions` for completions/logprob tasks. | - -For hosted smoke tests, start with `tiny_chat.yaml` and `target.api_endpoint.type=chat`. - -## Wrong Task For Endpoint Type - -Chat tasks need a chat endpoint. -Log-probability tasks generally need a completions endpoint with logprobs support and a tokenizer. - -If the launcher fails after endpoint setup, check: - -```text -tasks -target.api_endpoint.type -evaluation.nemo_evaluator_config.config.params.extra.tokenizer -``` - -Use exact task IDs from: - -```bash -nemo-evaluator-launcher ls tasks -``` - -## Bad Checkpoint Path - -When using `default.yaml`, point `deployment.checkpoint_path` at a concrete Megatron Bridge `iter_*` directory. -Do not point it only at the parent training output directory. - -```bash -deployment.checkpoint_path=/path/to/run/iter_0001000 -``` - -For log-probability tasks, also verify: - -```bash -evaluation.nemo_evaluator_config.config.params.extra.tokenizer=/path/to/run/iter_0001000/tokenizer -``` - -## Launcher Job State - -The step prints launcher follow-up commands when the launcher returns an invocation id. - -```text -status_command: nemo-evaluator-launcher status -logs_command: nemo-evaluator-launcher logs -``` - -Run those commands before changing config. -The launcher logs usually distinguish endpoint/authentication failures from task-schema failures. - -## Related Pages - -- {doc}`config-schema` for field names and config shape. -- {doc}`output-artifacts` for launcher config and result paths. -- {doc}`../explanation/tokenizer-alignment` for tokenizer alignment. -- {doc}`../explanation/endpoint-types-and-benchmarks` for endpoint/task pairing. -- `src/nemotron/steps/eval/model_eval/step.toml` for the documented error names. diff --git a/docs/model-eval/using-skills.md b/docs/model-eval/using-skills.md deleted file mode 100644 index f6a9c6162..000000000 --- a/docs/model-eval/using-skills.md +++ /dev/null @@ -1,74 +0,0 @@ - - -(model-eval-using-skills)= -# Use The Model Evaluation Skill With Confidence - -This page is for users who plan to drive `eval/model_eval` from a coding agent. -The goal is a clear handoff between what you decide and what the agent edits or runs. - -## What The Agent Needs - -For the hosted chat smoke test, provide: - -- The endpoint URL, including the `/v1/chat/completions` path. -- The model id advertised by the endpoint. -- The API key environment variable name, usually `NVIDIA_API_KEY`. -- The output directory to use. - -For checkpoint evaluation with `default.yaml`, also provide: - -- The concrete Megatron Bridge `iter_*` checkpoint path. -- The tokenizer path or Hugging Face tokenizer id if the selected task needs logprobs. - -## Recommended First Run - -Ask the agent to start with `tiny_chat.yaml` unless you explicitly need launcher-managed checkpoint deployment. -The first command should look like: - -```bash -uv run --no-sync nemotron steps run eval/model_eval \ - -c tiny_chat \ - output_dir=./output/eval-tiny-chat \ - target.api_endpoint.url="$NEMO_EVALUATOR_MODEL_URL" \ - target.api_endpoint.model_id="$NEMO_EVALUATOR_MODEL_ID" \ - target.api_endpoint.api_key_name=NVIDIA_API_KEY \ - target.api_endpoint.type=chat -``` - -## A Reusable Opening Brief - -```text -Context: [one sentence on the model and what you want to score] -Goal for this session: [for example, a hosted chat smoke test that writes files on disk] -Endpoint URL: [full URL with path, or "I do not have this yet, please ask"] -Model identifier: [as the endpoint advertises it] -API key environment variable: [name only, for example NVIDIA_API_KEY] -Checkpoint path: [only if using default.yaml launcher deployment] -Tokenizer: [only if using log-probability tasks] -Hard limits: [for example, do not change endpoint type, do not fabricate values] -Please: Use `eval/model_eval` defaults from the repo unless something blocks that. -``` - -The agent should ask for missing fields instead of guessing. - -## What Success Looks Like - -A reasonable first success is the hosted chat smoke test described in {doc}`getting-started`. -The session reaches that point when: - -- The agent issues one `nemotron steps run eval/model_eval -c tiny_chat ...` command. -- The command prints a `launcher_config` path. -- The output directory contains files after NeMo Evaluator Launcher completes. - -If the launcher fails, the agent should report the error and the relevant config fields. -It should not retry with fabricated endpoint, model, or credential values. - -## Next Steps - -- Run the tutorial: {doc}`getting-started`. -- Pick a deployment path: {doc}`how-to/evaluate-deployed-checkpoint`. -- Run a hosted evaluation: {doc}`how-to/run-hosted-evaluation`. -- Look up flags and YAML fields: {doc}`reference/cli-reference` and {doc}`reference/config-schema`. diff --git a/docs/nemo_runspec/artifacts.md b/docs/nemo_runspec/artifacts.md deleted file mode 100644 index 2a8e31065..000000000 --- a/docs/nemo_runspec/artifacts.md +++ /dev/null @@ -1,286 +0,0 @@ -# Artifact Tracking - -`nemo_runspec.artifacts` provides the tracking infrastructure that connects data prep, training, and evaluation stages through versioned artifact references. It supports two backends that can run simultaneously: - -- **Manifest-based tracking** (`nemo_runspec.manifest_tracker`) тАФ writes structured JSON manifests to any fsspec-compatible storage (local, Lustre, S3, GCS, HF Hub). Always reliable, zero external dependencies. -- **W&B artifact tracking** тАФ logs artifacts to [Weights & Biases](../nemotron/wandb.md) for team collaboration, UI browsing, and lineage graphs. - -Manifests are the always-on foundation; W&B is best-effort on top. - -> For artifact *types* (PretrainBlendsArtifact, SFTDataArtifact, etc.) and the Pydantic base class, see [nemotron.kit artifacts](../nemotron/artifacts.md). - -## Configuration - -### env.toml - -Configure artifact tracking in your `env.toml`. These are team-wide defaults merged into every job config by `build_job_config()`: - -```toml -# Both backends: manifest always, wandb best-effort -[artifacts] -wandb = true - -[artifacts.manifest] -root = "/lustre/team/artifacts" - -[wandb] -project = "nemotron" -entity = "YOUR-TEAM" -``` - -Backend combinations: - -| Setup | Use Case | -|-------|----------| -| `manifest` + `wandb = true` | **Recommended.** Manifest is always reliable; wandb adds UI + team features | -| `manifest` only | Offline / local development, no wandb dependency | -| `wandb = true` only | Legacy behavior, wandb-only tracking | -| Neither | No artifact tracking | - -### Disabling per-run - -Override via dotlist on any command: - -```bash -# Run with manifest only (no wandb) -uv run nemotron super3 sft --run dlw artifacts.wandb=false - -# Fully disable artifact tracking -uv run nemotron super3 sft --run dlw artifacts.manifest.root=null artifacts.wandb=false -``` - -### Manifest Storage Backends - -The `manifest.root` value supports any fsspec-compatible URI: - -| Backend | Example | Notes | -|---------|---------|-------| -| Local / Lustre / NFS | `/lustre/team/artifacts` | Best for training clusters | -| S3 | `s3://bucket/artifacts` | Requires AWS credentials | -| GCS | `gs://bucket/artifacts` | Requires GCP credentials | -| HF Hub | `hf://org/repo-name` | Great for sharing; batched commits | - -### Config Flow - -1. `build_job_config()` merges `[artifacts]` from env.toml into the job config (YAML overrides env.toml) -2. `extract_train_config()` preserves the top-level `artifacts:` section -3. Inside the container, `setup_artifact_tracking()` reads `config.artifacts` to initialize backends -4. `build_env_vars()` extracts `WANDB_PROJECT` / `WANDB_ENTITY` from `[wandb]` in env.toml - -## The Two-Function API - -Scripts use two functions from `nemo_runspec.artifacts`: - -```python -from nemo_runspec.artifacts import setup_artifact_tracking, log_artifact -``` - -### `setup_artifact_tracking(config)` тАФ Initialize backends and resolve references - -Called early, **before** dataclass conversion. Reads `config.artifacts`, initializes the active backends, and resolves `${art:...}` references. - -```python -config = load_omegaconf_yaml(config_path) -tracking = setup_artifact_tracking(config) # BEFORE dataclass conversion -cfg = omegaconf_to_dataclass(config, MyConfig) -``` - -Returns an `ArtifactTrackingResult` with flags: -- `tracking.manifest` тАФ whether manifest backend is active -- `tracking.wandb` тАФ whether wandb backend is active -- `tracking.qualified_names` тАФ wandb artifact qualified names for lineage registration - -### `log_artifact(artifact, tracking)` тАФ Save to all active backends - -Saves the artifact to **all** active backends. Replaces `artifact.save()` in data-prep scripts: - -```python -artifact = SFTDataArtifact(path=output_dir, pack_size=4096, ...) -log_artifact(artifact, tracking) # logs to manifest + wandb -``` - -When both backends are active: -1. `artifact.save()` logs via the global lineage tracker (WandbTracker after `init_wandb_from_env()`) -2. `log_artifact` additionally writes to ManifestTracker (stored reference survives the global overwrite) - -When only one backend is active, `artifact.save()` handles everything and `log_artifact` is effectively a pass-through. - -### Resolution Priority - -When resolving `${art:...}` references: - -| Active Backends | Resolution Method | -|----------------|-------------------| -| wandb + manifest | Resolve via wandb API (downloads artifact, gets lineage) | -| manifest only | Resolve from local/fsspec manifest files | -| wandb only | Resolve via wandb API | -| neither | Fall through to local resolver | - -## Usage Patterns - -### Train Scripts (self-contained packager) - -Train scripts are inlined into `main.py` by the self-contained packager. They use `setup_artifact_tracking` for initialization and stage-specific monkey-patches for checkpoint logging: - -```python -tracking = setup_artifact_tracking(config, artifacts_key="run") - -# Stage-specific monkey-patches based on active backends -if tracking.manifest and tracking.wandb: - patch_checkpoint_logging_both() -elif tracking.wandb: - patch_wandb_checkpoint_logging() -elif tracking.manifest: - patch_manifest_checkpoint_logging() - -# Wandb lineage: register input artifacts after wandb.init() -if tracking.wandb: - patch_wandb_init_for_lineage( - artifact_qualified_names=tracking.qualified_names, - tags=["pretrain"], - ) -``` - -### Data Prep Scripts (code packager) - -Data prep scripts use the code packager (full rsync), so the complete `nemo_runspec` API is available at runtime. They use `log_artifact` for explicit artifact saving: - -```python -tracking = setup_artifact_tracking(config) - -if tracking.wandb: - init_wandb_from_env() # creates wandb run for metrics - -# ... run pipeline ... - -log_artifact(artifact, tracking) # logs to manifest + wandb -wandb_kit.finish_run(exit_code=0) -``` - -## Manifest Directory Structure - -``` -{root}/ -тФЬтФАтФА nano3-pretrain-data/ -тФВ тФЬтФАтФА v1/ -тФВ тФВ тФЬтФАтФА manifest.json # Full provenance record -тФВ тФВ тФФтФАтФА metadata.json # Resolver-compatible format -тФВ тФЬтФАтФА v2/ -тФВ тФВ тФЬтФАтФА manifest.json -тФВ тФВ тФФтФАтФА metadata.json -тФВ тФФтФАтФА latest # Plain text file: "v2" -тФВ -тФЬтФАтФА nano3-sft-model/ -тФВ тФЬтФАтФА v1/ -тФВ тФВ тФЬтФАтФА manifest.json -тФВ тФВ тФФтФАтФА metadata.json -тФВ тФФтФАтФА latest -``` - -- **Zero-copy**: Data stays at its original location. Only JSON metadata is written. -- **`latest` file**: Plain text containing the version directory name (e.g., `v2`). Works on all filesystems тАФ no symlink issues. -- **Version discovery**: Scan `v*/` directories. `latest` provides O(1) latest lookup. - -### manifest.json - -Full provenance and lineage record: - -```json -{ - "name": "nano3-sft-data", - "version": 2, - "type": "SFTDataArtifact", - "path": "/lustre/data/nano3/sft/output/splits", - "created_at": "2026-03-11T10:30:00-07:00", - "producer": "nemo_abc123", - "metadata": { - "pack_size": 4096, - "total_tokens": 15000000 - }, - "inputs": ["hf://nvidia/dataset-a"], - "used_artifacts": ["nano3-pretrain-data:v2"] -} -``` - -### metadata.json - -Resolver-compatible format тАФ the full Pydantic `model_dump()` output. The `${art:data,field}` resolver reads fields from this file. - -## CLI Display - -### Job Submission Panel - -Shows which artifact stores are active before the job runs: - -``` -Job Submission -тФЬтФАтФА configs -тФВ тФЬтФАтФА job: /path/to/job.yaml -тФВ тФФтФАтФА train: /path/to/train.yaml -тФЬтФАтФА artifacts -тФВ тФЬтФАтФА manifest: /lustre/.../artifacts -тФВ тФФтФАтФА wandb: тЬУ enabled -тФФтФАтФА mode: attached -``` - -### Completion Panel - -After a data prep or training job completes: - -``` -тХнтФАтФА Step Complete (super3-pretrain-data-tiny) тФАтФАтХо -тФВ ... тФВ -тФВ Manifest: /lustre/.../super3-pretrain-data/v1 тФВ -тФВ W&B: https://wandb.ai/romeyn/nemotron/.. тФВ -тХ░тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтХп -``` - -## Viewing Lineage - -### From Manifest Files - -Inspect manifests directly on the filesystem: - -```bash -# See latest version -cat /lustre/artifacts/nano3-sft-data/latest -# v2 - -# Read manifest -cat /lustre/artifacts/nano3-sft-data/v2/manifest.json -# {"name": "nano3-sft-data", "version": 2, "path": "...", ...} -``` - -### In W&B - -1. Navigate to your project's **Artifacts** tab -2. Select any artifact (e.g., `ModelArtifact-rl`) -3. Click the **Graph** view to see upstream dependencies - -## Troubleshooting - -### "Artifact not found" - -- Check artifact name and version (inspect manifest directory or W&B UI) -- Verify `manifest.root` in env.toml points to the correct location -- For wandb: ensure `project` and `entity` match, and run `wandb login` - -### Manifest path empty in completion panel - -- Verify `[artifacts.manifest]` is configured in `env.toml` -- Check that the manifest root directory is writable - -### Wandb digest mismatch - -The pipeline automatically patches wandb's digest verification for local file references. If you still see errors, ensure you're using the latest version of the pipeline code. - -### Running without wandb - -Set `artifacts.wandb=false` on the command line or remove the `wandb = true` line from `[artifacts]` in env.toml. Manifest tracking works independently. - -## Further Reading - -- [Artifact Types](../nemotron/artifacts.md) тАУ Pydantic artifact classes and custom types -- [OmegaConf Resolvers](./omegaconf.md) тАУ `${art:...}` interpolations -- [W&B Integration](../nemotron/wandb.md) тАУ credentials and configuration -- [Execution & env.toml](./nemo-run.md) тАУ execution profiles and env.toml reference diff --git a/docs/nemo_runspec/nemo-run.md b/docs/nemo_runspec/nemo-run.md deleted file mode 100644 index d49cc3af6..000000000 --- a/docs/nemo_runspec/nemo-run.md +++ /dev/null @@ -1,719 +0,0 @@ -# Execution through NeMo-Run - -Nemotron recipes use [NeMo-Run](https://github.com/NVIDIA-NeMo/Run) for job orchestration. NeMo-Run is an NVIDIA tool for configuring, executing, and managing ML experiments across computing environments. - -> **Note**: This release supports Slurm, DGX Cloud (run:ai), and Lepton executors, including Ray-based runs on all three backends. - -## What is NeMo-Run? - -NeMo-Run decouples **what** you want to run from **where** you run it: - -```mermaid -%%{init: {'theme': 'base', 'themeVariables': { 'primaryBorderColor': '#333333', 'lineColor': '#333333', 'primaryTextColor': '#333333', 'clusterBkg': '#ffffff', 'clusterBorder': '#333333'}}}%% -flowchart LR - subgraph config["Configuration"] - Task["Training Task"] - end - - subgraph nemorun["NeMo-Run"] - Packager["Packager"] - Executor["Executor"] - end - - subgraph targets["Execution Targets"] - Local["Local"] - Docker["Docker"] - Slurm["Slurm"] - Cloud["Cloud"] - end - - Task --> Packager - Packager --> Executor - Executor --> Local - Executor --> Docker - Executor --> Slurm - Executor --> Cloud -``` - -**Core concepts:** -- **Executor** тАУ where to run (local, Docker, Slurm, cloud) -- **Packager** тАУ how to package code for the executor -- **Launcher** тАУ how to launch the process (torchrun, direct) - -For full documentation, see the [NeMo-Run GitHub repository](https://github.com/NVIDIA-NeMo/Run). - -## Quick Start - -Add `--run ` to any recipe command: - -```bash -# Execute on a Slurm cluster -uv run nemotron nano3 pretrain -c tiny --run YOUR-CLUSTER - -# Detached execution (submit and exit) -uv run nemotron nano3 pretrain -c tiny --batch YOUR-CLUSTER - -# Preview without executing -uv run nemotron nano3 pretrain -c tiny --run YOUR-CLUSTER --dry-run -``` - -## Execution Profiles - -The `nemo_runspec` package adds an `env.toml` configuration layer on top of NeMo-Run. This gives you declarative execution profiles that integrate with the CLI. This is a **Nemotron-specific feature** -- standard NeMo-Run requires programmatic configuration. - -Create an `env.toml` in your project root. Each section defines a named execution profile that can be referenced via `--run ` or `--batch `: - -```toml -# env.toml - -[wandb] -project = "nemotron" -entity = "YOUR-TEAM" - -[YOUR-CLUSTER] -executor = "slurm" -account = "YOUR-ACCOUNT" -partition = "batch" -nodes = 2 -ntasks_per_node = 8 -gpus_per_node = 8 -mounts = ["/lustre:/lustre"] -``` - -When you run `uv run nemotron nano3 pretrain --run YOUR-CLUSTER`, the kit reads this profile, builds the appropriate NeMo-Run executor, and submits your job. - -### Profile Inheritance - -Profiles can extend other profiles to reduce duplication: - -```toml -[base-slurm] -executor = "slurm" -account = "my-account" -partition = "gpu" -time = "04:00:00" - -[YOUR-CLUSTER] -extends = "base-slurm" -nodes = 4 -ntasks_per_node = 8 -gpus_per_node = 8 - -[YOUR-CLUSTER-large] -extends = "YOUR-CLUSTER" -nodes = 16 -time = "08:00:00" -``` - -## Executors - -### Slurm - -Submit jobs to a Slurm cluster. Container execution requires [Pyxis](https://github.com/NVIDIA/pyxis), NVIDIA's container plugin for Slurm. - -```toml -[YOUR-CLUSTER] -executor = "slurm" -account = "my-account" -partition = "gpu" -nodes = 4 -ntasks_per_node = 8 -gpus_per_node = 8 -time = "04:00:00" -mounts = ["/data:/data"] -``` - -#### SSH Tunnel Submission - -Submit from a remote machine via SSH: - -```toml -[YOUR-CLUSTER] -executor = "slurm" -account = "my-account" -partition = "gpu" -nodes = 4 -tunnel = "ssh" -host = "cluster.example.com" -user = "username" -identity = "~/.ssh/id_rsa" -``` - -#### Partition Overrides - -Specify different partitions for `--run` vs `--batch`: - -```toml -[YOUR-CLUSTER] -executor = "slurm" -partition = "batch" # Default -run_partition = "interactive" # For --run (attached) -batch_partition = "backfill" # For --batch (detached) -``` - -### DGX Cloud (run:ai) - -Submit jobs to NVIDIA DGX Cloud via the run:ai API. This executor handles authentication, data movement to PVCs, and multi-node distributed training through DGX Cloud workloads. - -```toml -[dgxcloud] -executor = "dgxcloud" -base_url = "https://your-dgxcloud-instance.example.com/api/v1" -kube_apiserver_url = "https://your-dgxcloud-k8s.example.com" -client_id = "YOUR-CLIENT-ID" # `app_id` accepted as legacy alias -client_secret = "YOUR-CLIENT-SECRET" # `app_secret` accepted as legacy alias -project_name = "YOUR-PROJECT" -container_image = "nvcr.io/nvidia/nemo:latest" -pvc_nemo_run_dir = "/pvc/nemo_run" -nodes = 2 -gpus_per_node = 8 -nprocs_per_node = 8 -pvcs = [ - { claimName = "my-pvc", path = "/pvc", readOnly = false } -] -``` - -For run:ai scheduler integration, use `custom_spec`: - -```toml -[dgxcloud-runai] -extends = "dgxcloud" -custom_spec = { schedulerName = "runai-scheduler" } -``` - -### Lepton - -Submit jobs to NVIDIA DGX Cloud Lepton clusters. Lepton provides SDK-based job submission with node group scheduling and shared memory configuration. - -```toml -[lepton] -executor = "lepton" -container_image = "nvcr.io/nvidia/nemo:latest" -nemo_run_dir = "/nemo_run" -nodes = 2 -gpus_per_node = 8 -resource_shape = "gpu.h100.8" -node_group = "my-node-group" -shared_memory_size = 65536 -mounts = [ - { path = "/data", mount_path = "/data" } -] -pre_launch_commands = ["pip install my-package"] -``` - -### Docker - -Run in a local Docker container with GPU support: - -```toml -[docker] -executor = "docker" -container_image = "nvcr.io/nvidia/nemo:latest" -gpus_per_node = 8 -runtime = "nvidia" -mounts = ["/data:/data"] -``` - -### Building Containers - -Some recipes, including Omni3, build stage-local containers through the same profile system instead of pulling a pre-baked image. - -**Cluster-side build via Nemotron CLI** - -```bash -uv run nemotron omni3 build sft --run YOUR-CLUSTER -uv run nemotron omni3 build rl --run YOUR-CLUSTER -``` - -These commands submit short CPU-oriented build jobs through NeMo-Run. If your site uses a different partition or walltime for build jobs, set `build_partition` and `build_time` in `env.toml`. The dispatcher only runs on slurm executors today; non-slurm executors (e.g. Lepton, k8s) error out cleanly with a hook for future PRs. - -```toml -[YOUR-CLUSTER] -executor = "slurm" -partition = "batch" -build_partition = "cpu" -build_time = "02:00:00" -# Lustre-visible host path for the build cache; mounted into the build -# container at /nemotron-cache and used to land the OCI archive output. -build_cache_dir = "/lustre/.../users//.cache/nemotron" -``` - -> **Why `build_cache_dir`?** The dispatcher mounts this path into the -> build container so podman can save the resulting OCI archive somewhere -> a future training job can read. Pre-`build_cache_dir`, the dispatcher -> hard-coded `~/.cache/nemotron` evaluated at submission time, which -> resolved to the laptop's home directory and didn't exist on cluster -> nodes. Set `build_cache_dir` to a Lustre-visible path; the dispatcher -> will `mkdir -p` it on the remote before submission so first-run is -> seamless. - -### How the build container authenticates with private registries - -The SFT Dockerfile's `FROM` references `nvcr.io/nvidian/nemo:`, -which is gated behind NGC credentials. Rather than ask operators to -provision a separate `~/.docker/config.json`, the dispatcher reuses -enroot's existing credentials at job-submission time: - -1. The dispatcher reads `~/.config/enroot/.credentials` (netrc format) - over the SSH tunnel. -2. It filters to the `nvcr.io` entry (other registries in the file тАФ - gitlab tokens, etc. тАФ are *not* exposed to the build container). -3. It transcodes the entry into a docker-format `auth.json` and writes - it to `/.auth/auth.json` with mode `0600`. -4. It mounts that file into the build container at - `/root/.config/containers/auth.json:ro`. - -Podman inside the build container then authenticates with `nvcr.io` -automatically. No env vars, no per-job secrets in slurm scripts. If you -add a new private registry the build needs, add an entry for it in -`~/.config/enroot/.credentials` and extend the dispatcher's allowlist -(see `materialize_podman_auth_from_enroot` in -`src/nemo_runspec/execution.py`). - -**Local build from the stage Dockerfile** - -```bash -cd src/nemotron/recipes/omni3/stage0_sft -docker build -t nemotron/omni3-sft:latest -f Dockerfile . -# or -podman build -t nemotron/omni3-sft:latest -f Dockerfile . -``` - -Use the local path when iterating on the Dockerfile itself; use `nemotron omni3 build --run ` when you want the same build recipe executed on the cluster. - -### Other Executors - -NeMo-Run also supports these executors (not yet integrated into env.toml profiles): - -| Executor | Description | -|----------|-------------| -| `skypilot` | Cloud instances (AWS, GCP, Azure) via SkyPilot | -| `kubeflow` | Kubernetes Training Operator (PyTorchJob) | - -## Packagers - -Packagers determine how your code is bundled and transferred to the execution target. NeMo-Run provides several packagers for different workflows. - -### GitArchivePackager (Default) - -Packages code from a git repository using `git archive`. Only includes committed files. - -```toml -[YOUR-CLUSTER] -executor = "slurm" -packager = "git" -# ... other settings -``` - -**How it works:** -1. Runs `git archive --format=tar.gz` from repository root -2. Includes only committed files (uncommitted changes are excluded) -3. Optionally includes git submodules -4. Transfers archive to execution target - -**Key options:** - -| Option | Default | Description | -|--------|---------|-------------| -| `subpath` | - | Package only a subdirectory of the repo | -| `include_submodules` | `true` | Include git submodules in archive | -| `include_pattern` | - | Glob pattern for additional uncommitted files | - -**Best for:** Production runs with version-controlled code. - -### PatternPackager - -Packages files matching glob patterns. Useful for code not under version control. - -```toml -[YOUR-CLUSTER] -executor = "slurm" -packager = "pattern" -packager_include_pattern = "src/**/*.py" -``` - -**How it works:** -1. Finds files matching the glob pattern -2. Creates tar archive of matched files -3. Preserves directory structure relative to pattern base - -**Key options:** - -| Option | Description | -|--------|-------------| -| `include_pattern` | Glob pattern(s) for files to include | -| `relative_path` | Base path for pattern matching | - -**Best for:** Quick iterations, non-git projects, or including generated files. - -### HybridPackager - -Combines multiple packagers into a single archive. Useful for complex projects. - -```toml -[YOUR-CLUSTER] -executor = "slurm" -packager = "hybrid" -# Configuration via code (see below) -``` - -**How it works:** -1. Runs each sub-packager independently -2. Extracts outputs to temporary directories -3. Merges all into final archive with folder organization - -**Example in code:** - -```python -import nemo_run as run - -hybrid = run.HybridPackager( - sub_packagers={ - "code": run.GitArchivePackager(subpath="src"), - "configs": run.PatternPackager(include_pattern="configs/*.yaml"), - "data": run.PatternPackager(include_pattern="data/*.json"), - } -) -``` - -**Best for:** Projects with mixed version-controlled and generated content. - -### Passthrough Packager - -No packagingтАФassumes code is already available on the target (e.g., in a container image or shared filesystem). - -```toml -[YOUR-CLUSTER] -executor = "slurm" -packager = "none" -``` - -**Best for:** Pre-built containers, shared filesystems like `/lustre`. - -## CLI Options - -### `--run` vs `--batch` - -| Option | Behavior | Use Case | -|--------|----------|----------| -| `--run` | AttachedтАФwaits for completion, streams logs | Interactive development | -| `--batch` | DetachedтАФsubmits and exits immediately | Long-running jobs | - -### Config Overrides - -Override config values using Hydra-style syntax: - -```bash -# Override training iterations -uv run nemotron nano3 pretrain --run YOUR-CLUSTER train.train_iters=5000 - -# Override nodes -uv run nemotron nano3 pretrain --run YOUR-CLUSTER run.env.nodes=8 -``` - -## env.toml Reference - -An `env.toml` file contains two kinds of sections: **system-level sections** (reserved names) and **execution profiles** (any other name). - -### System-Level Sections - -These sections have reserved names and are not execution profiles: - -```toml -[wandb] -project = "nemotron" -entity = "YOUR-TEAM" - -[artifacts] -backend = "file" # "file" or "wandb" (default: "wandb" if [wandb] exists) -root = "/path/to/artifacts" # Root directory for file-based artifacts - -[cache] -git_dir = "/lustre/.../git-cache" # Directory for caching git repos (for auto_mount) - -[cli] -theme = "github-light" # Rich console theme -``` - -| Section | Field | Type | Description | -|---------|-------|------|-------------| -| `[wandb]` | `project` | str | W&B project name (injected into `run.wandb.project`) | -| `[wandb]` | `entity` | str | W&B entity/team name (injected into `run.wandb.entity`) | -| `[artifacts]` | `backend` | str | Artifact storage backend: `"file"` or `"wandb"` | -| `[artifacts]` | `root` | str | Root directory for file-based artifact storage | -| `[cache]` | `git_dir` | str | Directory for caching git repos cloned by `${auto_mount:...}` | -| `[cli]` | `theme` | str | Rich console theme name | - -### Execution Profile Fields - -Every other section is an execution profile. Use `--run ` or `--batch ` to select one. - -```toml -[my-cluster] -executor = "slurm" -account = "my-account" -partition = "batch" -run_partition = "interactive" -batch_partition = "batch" -tunnel = "ssh" -host = "cluster.example.com" -user = "username" -remote_job_dir = "/lustre/users/me/run" -time = "04:00:00" -nodes = 2 -ntasks_per_node = 8 -gpus_per_node = 8 -mem = "0" -exclusive = true -container_image = "/path/to/image.sqsh" -mounts = ["/lustre:/lustre"] -startup_commands = ["source /opt/env.sh"] -``` - -**Core:** - -| Field | Type | Default | Description | -|-------|------|---------|-------------| -| `executor` | str | `"local"` | Execution backend: `"local"`, `"docker"`, `"slurm"`, `"dgxcloud"`, or `"lepton"` | -| `extends` | str | - | Parent profile to inherit from | - -**Local executor:** - -| Field | Type | Default | Description | -|-------|------|---------|-------------| -| `nproc_per_node` | int | `1` | Number of GPU processes (for torchrun) | - -**Slurm executor:** - -| Field | Type | Default | Description | -|-------|------|---------|-------------| -| `account` | str | - | Slurm account for job billing | -| `partition` | str | - | Default Slurm partition | -| `run_partition` | str | - | Partition for `--run` (attached mode) | -| `batch_partition` | str | - | Partition for `--batch` (detached mode) | -| `nodes` | int | `1` | Number of compute nodes | -| `ntasks_per_node` | int | `1` | Tasks per node | -| `gpus_per_node` | int | - | GPUs per node | -| `cpus_per_task` | int | - | CPU cores per task | -| `time` | str | `"04:00:00"` | Job time limit (HH:MM:SS) | -| `mem` | str | - | Memory per node (`"0"` = all available) | -| `exclusive` | bool | - | Request exclusive node access | - -**SSH tunnel (for remote submission):** - -| Field | Type | Default | Description | -|-------|------|---------|-------------| -| `tunnel` | str | - | Set to `"ssh"` for remote submission | -| `host` | str | - | SSH hostname | -| `user` | str | - | SSH username | -| `remote_job_dir` | str | - | Working directory on the remote cluster | - -**Container:** - -| Field | Type | Default | Description | -|-------|------|---------|-------------| -| `container_image` | str | - | Container image path (`.sqsh` for Slurm, Docker URI for local) | -| `container` | str | - | Alias for `container_image` (checked as fallback) | -| `mounts` | list | `[]` | Container mount points (`"/host:/container"`) | - -**Startup:** - -| Field | Type | Default | Description | -|-------|------|---------|-------------| -| `startup_commands` | list | `[]` | Shell commands to run before the training script | - -**DGX Cloud executor:** - -| Field | Type | Default | Description | -|-------|------|---------|-------------| -| `base_url` | str | *required* | DGX Cloud API base URL | -| `kube_apiserver_url` | str | *required* | Kubernetes API server URL for the DGX Cloud cluster | -| `client_id` | str | *required* | Client ID for authentication | -| `client_secret` | str | *required* | Client secret for authentication | -| `app_id` | str | - | Legacy alias for `client_id` (back-compat shim) | -| `app_secret` | str | - | Legacy alias for `client_secret` (back-compat shim) | -| `project_name` | str | *required* | DGX Cloud project name | -| `pvc_nemo_run_dir` | str | *required* | PVC path for nemo-run job directory | -| `nodes` | int | `1` | Number of compute nodes | -| `gpus_per_node` | int | `0` | GPUs per node | -| `nprocs_per_node` | int | `1` | Processes per node | -| `pvcs` | list | `[]` | PVC mount specifications (list of dicts with `claimName`, `path`, `readOnly`) | -| `distributed_framework` | str | `"PyTorch"` | Distributed framework (`"PyTorch"`) | -| `custom_spec` | dict | `{}` | Additional workload spec overrides (e.g., `schedulerName` for run:ai) | - -**Lepton executor:** - -| Field | Type | Default | Description | -|-------|------|---------|-------------| -| `nemo_run_dir` | str | *required* | Remote directory for nemo-run job files | -| `nodes` | int | `1` | Number of compute nodes | -| `gpus_per_node` | int | `0` | GPUs per node | -| `nprocs_per_node` | int | `1` | Processes per node | -| `resource_shape` | str | `""` | Resource shape (e.g., `"gpu.h100.8"`) | -| `node_group` | str | `""` | Target node group | -| `node_reservation` | str | `""` | Node reservation identifier | -| `shared_memory_size` | int | `65536` | Shared memory size in MB | -| `mounts` | list | `[]` | Mount specifications (list of dicts with `path`, `mount_path`) | -| `image_pull_secrets` | list | `[]` | Container registry authentication secrets | -| `pre_launch_commands` | list | `[]` | Commands to run before launching the job | -| `custom_spec` | dict | `{}` | Additional job spec overrides | - -### How Profiles Are Resolved - -When you run `--run my-cluster`: - -1. **Load**: `env.toml` is found by walking up from the current directory -2. **Inherit**: If `extends = "parent"` is set, fields are inherited recursively -3. **Merge**: The profile overlays the config YAML's `run.env` defaults (`{**yaml_defaults, **profile}`) -4. **Inject**: `[wandb]` section is injected into `run.wandb` - -This means config YAML provides defaults for any field env.toml doesn't set. For example, the evaluator config sets `container: nvcr.io/nvidia/nemo-evaluator:latest` in its YAML, which is used unless your env.toml profile overrides it. - -### Full Example - -```toml -# env.toml - -# --- System sections (not profiles) --- - -[wandb] -project = "nemotron" -entity = "my-team" - -[artifacts] -backend = "file" -root = "/lustre/users/me/artifacts" - -[cache] -git_dir = "/lustre/users/me/git-cache" - -# --- Execution profiles --- - -[local] -executor = "local" -nproc_per_node = 8 - -[my-cluster] -executor = "slurm" -account = "my-account" -partition = "batch" -run_partition = "interactive" -batch_partition = "batch" -time = "04:00:00" -tunnel = "ssh" -host = "login.cluster.com" -user = "me" -remote_job_dir = "/lustre/users/me/run" - -[pretrain] -extends = "my-cluster" -nodes = 2 -ntasks_per_node = 8 -gpus_per_node = 8 -mem = "0" -exclusive = true -mounts = ["/lustre:/lustre"] - -[pretrain-large] -extends = "pretrain" -nodes = 8 -time = "08:00:00" - -[data-prep] -extends = "my-cluster" -run_partition = "cpu" -batch_partition = "cpu" -nodes = 1 -ntasks_per_node = 1 -cpus_per_task = 96 - -[rl] -extends = "pretrain" -container_image = "/lustre/users/me/nano3-rl.sqsh" - -# --- DGX Cloud (run:ai) --- - -[dgxcloud] -executor = "dgxcloud" -base_url = "https://dgx.example.com/api/v1" -app_id = "MY-APP-ID" -app_secret = "MY-APP-SECRET" -project_name = "my-project" -container_image = "nvcr.io/nvidia/nemo:latest" -pvc_nemo_run_dir = "/pvc/nemo_run" -nodes = 2 -gpus_per_node = 8 -nprocs_per_node = 8 -pvcs = [ - { claimName = "my-pvc", path = "/pvc", readOnly = false } -] - -# --- Lepton --- - -[lepton] -executor = "lepton" -container_image = "nvcr.io/nvidia/nemo:latest" -nemo_run_dir = "/nemo_run" -nodes = 2 -gpus_per_node = 8 -resource_shape = "gpu.h100.8" -node_group = "my-node-group" -``` - -## Ray-Enabled Recipes - -Some recipes use Ray for distributed execution. When you run a Ray-enabled recipe with `--run`, the Ray cluster is set up automatically: - -```bash -# Data prep uses Ray -uv run nemotron nano3 data prep pretrain --run YOUR-CLUSTER - -# RL training uses Ray -uv run nemotron nano3 rl -c tiny --run YOUR-CLUSTER -``` - -### Ray on DGX Cloud and Lepton - -Ray-based recipes work with DGX Cloud and Lepton executors. The framework automatically selects the appropriate Ray backend based on the executor type: - -- **Slurm**: Uses `SlurmRayJob` with SSH tunnel (default) -- **DGX Cloud**: Uses `DGXCloudRayJob` for self-organizing Ray topology within distributed workloads -- **Lepton**: Uses `LeptonRayJob` with the Lepton SDK - -```toml -# Ray-enabled RL on DGX Cloud -[dgxcloud-rl] -executor = "dgxcloud" -base_url = "https://dgx.example.com/api/v1" -app_id = "YOUR-ID" -app_secret = "YOUR-SECRET" -project_name = "your-project" -container_image = "nvcr.io/nvidia/nemo-rl:latest" -pvc_nemo_run_dir = "/pvc/nemo_run" -nodes = 4 -gpus_per_node = 8 - -# Ray-enabled RL on Lepton -[lepton-rl] -executor = "lepton" -container_image = "nvcr.io/nvidia/nemo-rl:latest" -nemo_run_dir = "/nemo_run" -nodes = 4 -gpus_per_node = 8 -resource_shape = "gpu.h100.8" -node_group = "my-node-group" -``` - -Use with any Ray-enabled recipe: - -```bash -uv run nemotron nano3 rl -c tiny --run dgxcloud-rl -uv run nemotron nano3 rl -c tiny --run lepton-rl -``` - -## Further Reading - -- [NeMo-Run GitHub](https://github.com/NVIDIA-NeMo/Run) тАУ full documentation -- [W&B Integration](../nemotron/wandb.md) тАУ credential handling -- [Nemotron Kit](../nemotron/kit.md) тАУ artifact system and lineage tracking -- [CLI Framework](../nemotron/cli.md) тАУ building recipe CLIs diff --git a/docs/nemo_runspec/omegaconf.md b/docs/nemo_runspec/omegaconf.md deleted file mode 100644 index 9dc05bd9e..000000000 --- a/docs/nemo_runspec/omegaconf.md +++ /dev/null @@ -1,330 +0,0 @@ -# OmegaConf Configuration System - -Nemotron uses [OmegaConf](https://omegaconf.readthedocs.io/) for configuration management, with custom resolvers (in `nemo_runspec.config.resolvers`) for automatic artifact resolution and W&B lineage tracking. This page covers the `run` section in configs, artifact interpolations, and unified W&B logging. - -## The `run` Section - -The `run` section in recipe configs holds execution and artifact metadata. It's separate from the training algorithm configuration. - -```yaml -# config.yaml -run: - # Artifact references - automatically resolved with W&B lineage - data: PretrainBlendsArtifact-default:latest - model: ModelArtifact-pretrain:v5 - - # Environment configuration (container image) - env: - container: nvcr.io/nvidia/nemo:25.11.nemotron_3_nano - -# Training configuration sections -recipe: - _target_: megatron.bridge.recipes.nemotronh.nemotron_next_3b_v2_pretrain_config - per_split_data_args_path: ${art:data,path}/blend.json # Resolved from artifact - -logger: - wandb_project: ${run.wandb.project} # Injected from env.toml - wandb_entity: ${run.wandb.entity} # Injected from env.toml - -checkpoint: - save: /nemo_run/pretrain - save_interval: 20 -``` - -### How `run.wandb` is Populated - -When you run a recipe with `--run `, the CLI reads your `env.toml` and injects the `[wandb]` section into `run.wandb`: - -```toml -# env.toml -[wandb] -project = "nemotron" -entity = "my-team" - -[YOUR-CLUSTER] -executor = "slurm" -# ... -``` - -This allows configs to reference W&B settings via interpolation (`${run.wandb.project}`) without hardcoding them. - -## Artifact Interpolations - -The `${art:NAME,FIELD}` resolver enables automatic artifact resolution with W&B lineage tracking. - -### Syntax - -```yaml -# Basic path resolution -data_path: ${art:data,path} # /path/to/artifact - -# Field resolution -model_version: ${art:model,version} # v5 -model_type: ${art:model,type} # "model" -checkpoint_step: ${art:model,iteration} # 10000 - -# Metadata field resolution (from metadata.json) -pack_size: ${art:data,pack_size} # 4096 -training_path: ${art:data,training_path} # /path/to/training_4096.parquet -``` - -### Supported Fields - -| Field | Source | Description | -|-------|--------|-------------| -| `path` | Artifact info | Local filesystem path to artifact (default) | -| `version` | Artifact info | W&B artifact version (e.g., "v5") | -| `name` | Artifact info | Artifact name | -| `type` | Artifact info | Artifact type ("dataset", "model") | -| `iteration` | Metadata | Training iteration (for model checkpoints) | -| `*` | `metadata.json` | Any field from the artifact's metadata | - -### Example: Pretrain Config - -```yaml -run: - data: PretrainBlendsArtifact-default:latest - -recipe: - _target_: megatron.bridge.recipes.nemotronh.nemotron_next_3b_v2_pretrain_config - # Resolved to: /path/to/wandb/artifacts/PretrainBlendsArtifact-default-v3/blend.json - per_split_data_args_path: ${art:data,path}/blend.json -``` - -### Example: SFT Config with Model Checkpoint - -```yaml -run: - data: SFTDataArtifact-default:latest - model: pretrain:latest - -recipe: - _target_: megatron.bridge.recipes.nemotronh.nemotron_nano_9b_v2_finetune_config - # Resolved to the pretrain checkpoint save directory - pretrained_checkpoint: ${art:model,path} - # Resolved to the checkpoint iteration number - ckpt_step: ${art:model,iteration} -``` - -### Example: RL Config - -```yaml -run: - data: SplitJsonlDataArtifact-rl:latest - model: sft:latest - env: - container: nvcr.io/nvidia/nemo-rl:v0.4.0.nemotron_3_nano - -policy: - # Resolved to the SFT model checkpoint path - model_name: ${art:model,path} - -data: - # Resolved from artifact metadata - train_jsonl_fpath: ${art:data,train_path} - validation_jsonl_fpath: ${art:data,val_path} -``` - -## How Artifact Resolution Works - -### Resolution Modes - -The artifact resolver supports two modes to handle different framework requirements: - -| Mode | When Used | Description | -|------|-----------|-------------| -| `active_run` | W&B run already active | Calls `wandb.use_artifact()` directly | -| `pre_init` | Before `wandb.init()` | Uses `wandb.Api()` to resolve, defers lineage | - -**Why two modes?** Megatron-Bridge owns `wandb.init()` during training. The kit resolves artifacts *before* training starts, then patches `wandb.init()` to register lineage once the run is active. - -### Resolution Pipeline - -``` -тФМтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФР -тФВ 1. Config Loading тФВ -тФВ - Load YAML with OmegaConf тФВ -тФВ - Detect artifact references in run section тФВ -тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФмтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФШ - тЦ╝ -тФМтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФР -тФВ 2. register_resolvers_from_config() тФВ -тФВ - Scan run section for artifact patterns тФВ -тФВ - Download artifacts from W&B (rank 0 only in distributed) тФВ -тФВ - Store qualified_name for lineage registration тФВ -тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФмтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФШ - тЦ╝ -тФМтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФР -тФВ 3. OmegaConf Resolver Registration тФВ -тФВ - Register ${art:NAME,FIELD} resolver тФВ -тФВ - Fields resolve to artifact path, version, or metadata тФВ -тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФмтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФШ - тЦ╝ -тФМтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФР -тФВ 4. patch_wandb_init_for_lineage() тФВ -тФВ - Patch wandb.init() to call use_artifact() when run starts тФВ -тФВ - Registers lineage in W&B graph тФВ -тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФШ -``` - -### Distributed Coordination - -In multi-GPU training, only rank 0 downloads artifacts: - -1. **Rank 0**: Downloads artifacts, writes results to shared marker file -2. **Other ranks**: Wait for marker file, read shared results -3. **All ranks**: Use identical artifact paths - -This prevents redundant downloads and ensures consistency across workers. - -## Unified W&B Logging - -Nemotron Kit provides a unified W&B logging approach that works across Megatron-Bridge and NeMo-RL, which have different logging conventions. - -> **Coming Soon**: Native support for artifact lineage and checkpoint logging is being added directly to Megatron-Bridge and NeMo-RL. Once available, the monkey patches described below will no longer be necessary. - -### The Problem - -| Framework | Checkpoint Logging | W&B Init | -|-----------|-------------------|----------| -| Megatron-Bridge | `on_save_checkpoint_success()` | Owns `wandb.init()` | -| NeMo-RL | `CheckpointManager.finalize_checkpoint()` | Separate init | - -Both frameworks need to: -- Log checkpoints as W&B artifacts -- Track lineage from input artifacts -- Store metadata for downstream jobs - -### The Solution: Monkey Patches (Temporary) - -Until native support is available, the kit uses targeted monkey patches to unify logging behavior: - -```python -# In train.py (pretraining/SFT) -from nemotron.kit.wandb_kit import ( - patch_wandb_checkpoint_logging, - patch_wandb_init_for_lineage, -) - -# Resolve artifacts before wandb.init() -qualified_names = register_resolvers_from_config(config, mode="pre_init") - -# Patch wandb.init to register lineage when MB initializes it -patch_wandb_init_for_lineage(artifact_qualified_names=qualified_names) - -# Patch checkpoint saving to log artifacts with metadata -patch_wandb_checkpoint_logging() -``` - -```python -# In train.py (RL) -from nemotron.kit.wandb_kit import patch_nemo_rl_checkpoint_logging - -# Patch NeMo-RL checkpoint manager -patch_nemo_rl_checkpoint_logging() -``` - -### What the Patches Do - -**`patch_wandb_checkpoint_logging()`** (Megatron-Bridge): -- Wraps `on_save_checkpoint_success()` -- Adds `wait()` call so artifacts appear immediately in W&B -- Stores `absolute_path` in metadata for cross-job access -- Resolves container paths (`/nemo_run/`) to actual Lustre paths - -**`patch_nemo_rl_checkpoint_logging()`** (NeMo-RL): -- Wraps `CheckpointManager.finalize_checkpoint()` -- Logs checkpoints as W&B artifacts with consistent naming -- Same metadata format as Megatron-Bridge patches - -**`patch_wandb_init_for_lineage()`**: -- Patches `wandb.init()` to call `use_artifact()` for resolved artifacts -- Registers lineage in W&B graph once run is active - -### Container Path Resolution - -When running in containers, checkpoints are saved to mount paths like `/nemo_run/`. The kit resolves these to actual filesystem paths for cross-job access: - -```python -# Container path (inside job) -/nemo_run/pretrain/iter_0010000 - -# Resolved path (for artifact metadata) -/lustre/scratch/user/jobs/12345/pretrain/iter_0010000 -``` - -Resolution uses: -1. `NEMO_RUN_DIR` environment variable (set by nemo-run) -2. `/proc/mounts` to find bind mount source - -## Usage in Training Scripts - -### Pretraining/SFT (Megatron-Bridge) - -```python -from nemo_runspec.config.resolvers import register_resolvers_from_config -from nemotron.kit.wandb_kit import ( - patch_wandb_checkpoint_logging, - patch_wandb_init_for_lineage, -) - -def main(): - config = OmegaConf.load("config.yaml") - - # Resolve artifacts before wandb.init() - qualified_names = register_resolvers_from_config( - config, - artifacts_key="run", - mode="pre_init", - ) - - # Patch for lineage and checkpoint logging - patch_wandb_init_for_lineage(artifact_qualified_names=qualified_names) - patch_wandb_checkpoint_logging() - - # Now Megatron-Bridge handles the rest - pretrain(config=cfg, forward_step_func=forward_step) -``` - -### RL (NeMo-RL) - -```python -from nemo_runspec.config.resolvers import register_resolvers_from_config -from nemotron.kit.wandb_kit import patch_nemo_rl_checkpoint_logging - -def main(): - config = load_config("grpo_config.yaml") - - # Patch before any wandb interaction - patch_nemo_rl_checkpoint_logging() - - # Resolve artifacts - register_resolvers_from_config( - config, - artifacts_key="run", - mode="pre_init", - ) - - # Resolve config (${art:...} interpolations now work) - config = OmegaConf.to_container(config, resolve=True) - - # NeMo-RL training - grpo_train(...) -``` - -## Additional Resolvers - -The kit also provides utility resolvers: - -```yaml -# Multiplication resolver (NeMo-RL) -train_mb_tokens: ${mul:${policy.max_total_sequence_length}, ${policy.train_micro_batch_size}} -``` - -## Further Reading - -- [Artifact Lineage](../nemotron/artifacts.md) тАУ W&B artifact system and lineage tracking -- [Creating Custom Artifacts](../nemotron/artifacts.md#creating-custom-artifacts) тАУ defining typed artifact classes -- [W&B Integration](../nemotron/wandb.md) тАУ credential handling -- [CLI Framework](../nemotron/cli.md) тАУ recipe CLIs and `--run` execution -- [Execution through NeMo-Run](./nemo-run.md) тАУ `env.toml` profiles diff --git a/docs/nemo_runspec/package-readme.md b/docs/nemo_runspec/package-readme.md deleted file mode 100644 index 0f3c01fe2..000000000 --- a/docs/nemo_runspec/package-readme.md +++ /dev/null @@ -1,6 +0,0 @@ -# nemo_runspec Package - -The following content is pulled from the package source for convenience. The canonical source file in the repository is `src/nemo_runspec/README.md`. - -```{include} ../../src/nemo_runspec/README.md -``` diff --git a/docs/project.json b/docs/project.json deleted file mode 100644 index ea29b6c11..000000000 --- a/docs/project.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "nemotron", - "version": "nightly" -} diff --git a/docs/runspec/v1/spec.md b/docs/runspec/v1/spec.md deleted file mode 100644 index d72fd4bb5..000000000 --- a/docs/runspec/v1/spec.md +++ /dev/null @@ -1,155 +0,0 @@ -# Runspec: `[tool.runspec]` Specification - -## What is runspec? - -Runspec is a declarative metadata format for recipe scripts. Each recipe embeds -a `[tool.runspec]` block inside standard [PEP 723](https://peps.python.org/pep-0723/) inline script metadata, -describing **what the script is and what it needs** to run тАФ identity, container -image, launch method, config layout, and resource defaults. - -This keeps recipes self-describing and portable. Any tool (CLI, CI, notebook, -another cookbook) can read the same metadata without importing cookbook-specific -code. - -## Motivation - -Nemotron is a cookbook тАФ a reference implementation you fork and customize. The -key architectural goal is that an agent (or human) can freely port recipes between -workflow engines (nemo-run, SkyPilot, plain bash) without reverse-engineering how -a script should be launched. Runspec makes this possible by separating **what a -script needs** (declarative metadata) from **how it gets run** (execution logic -in CLI commands). - -Without runspec, recipe metadata is scattered across CLI wrappers, config files, -and docstrings. Adding a new recipe means editing multiple files. Porting to a -different workflow engine means tracing through code to rediscover identity, -image, launch method, and resource requirements. Runspec collapses all of this -into the script itself: - -- **Identity**: what is this recipe called? -- **Environment**: what container image and setup does it need? -- **Launch**: how should it be started (torchrun, ray, direct)? -- **Config**: where do YAML configs live relative to the script? -- **Resources**: what are sensible defaults for nodes and GPUs? - -Because this metadata is declarative and machine-readable, any tool can consume -it тАФ a CLI, a CI pipeline, a notebook, or an agent building a completely -different execution backend. See the [Design Philosophy](../../architecture/design-philosophy.md) -for the broader principles behind this approach. - -## Format - -Runspec lives inside [PEP 723](https://peps.python.org/pep-0723/) inline script metadata тАФ the `# /// script` block -at the top of a Python file. Inside that block, runspec uses the `[tool.runspec]` -TOML table and its sub-tables. - -```python -#!/usr/bin/env python3 -# /// script -# [tool.runspec] -# schema = "1" -# docs = "https://raw.githubusercontent.com/NVIDIA-NeMo/Nemotron/main/docs/runspec/v1/spec.md" -# name = "nano3/pretrain" -# image = "nvcr.io/nvidia/nemo:25.11.nemotron_3_nano" -# setup = "NeMo and all training dependencies are pre-installed in the image." -# -# [tool.runspec.run] -# launch = "torchrun" -# -# [tool.runspec.config] -# dir = "./config" -# default = "default" -# format = "omegaconf" -# -# [tool.runspec.resources] -# nodes = 1 -# gpus_per_node = 8 -# /// -``` - -Each line is prefixed with `# ` per PEP 723 convention. The block starts with -`# /// script` and ends with `# ///`. - -## Schema (v1) - -### `[tool.runspec]` тАФ Top-level - -| Field | Type | Default | Description | -|-------|------|---------|-------------| -| `schema` | `str` | `"1"` | Schema version. Always `"1"` for now. | -| `docs` | `str` | `""` | URL to this specification. Enables agents and tools to fetch the spec for context. Use a raw GitHub URL (e.g., `https://raw.githubusercontent.com/NVIDIA-NeMo/Nemotron/main/docs/runspec/v1/spec.md`). | -| `name` | `str` | `""` | Recipe identity (e.g., `"nano3/pretrain"`, `"nano3/data/prep/sft"`). Used in job names, display, and directory layout. | -| `image` | `str?` | `null` | Default container image for remote execution. | -| `setup` | `str` | `""` | Human-readable description of what the image provides or what setup is needed. | - -### `[tool.runspec.run]` тАФ Launch configuration - -| Field | Type | Default | Description | -|-------|------|---------|-------------| -| `launch` | `str` | `"torchrun"` | How to start the script: `"torchrun"` (distributed), `"ray"` (Ray cluster), or `"direct"` (plain python). | -| `cmd` | `str` | `"python {script} --config {config}"` | Command template. Supports `{script}` and `{config}` placeholders. | -| `workdir` | `str?` | `null` | Working directory inside the container (e.g., `"/opt/nemo-rl"`). | - -### `[tool.runspec.config]` тАФ Config layout - -| Field | Type | Default | Description | -|-------|------|---------|-------------| -| `dir` | `str` | `"./config"` | Config directory, relative to the script file. | -| `default` | `str` | `"default"` | Name of the default config (without extension). | -| `format` | `str` | `"omegaconf"` | Config format: `"omegaconf"`, `"yaml"`, or `"json"`. | - -### `[tool.runspec.resources]` тАФ Resource defaults - -| Field | Type | Default | Description | -|-------|------|---------|-------------| -| `nodes` | `int` | `1` | Default number of nodes. | -| `gpus_per_node` | `int` | `8` | Default GPUs per node. | - -### `[tool.runspec.env]` тАФ Environment variables - -An optional key-value table of environment variables to set at runtime: - -```toml -[tool.runspec.env] -NCCL_NVLS_ENABLE = "0" -``` - -## How the CLI uses runspec - -A typical CLI command reads runspec at import time and uses it throughout: - -```python -from nemo_runspec import parse as parse_runspec - -SCRIPT_PATH = "src/nemotron/recipes/nano3/stage0_pretrain/train.py" -SPEC = parse_runspec(SCRIPT_PATH) - -# SPEC.name тЖТ "nano3/pretrain" -# SPEC.image тЖТ container image for remote execution -# SPEC.config_dir тЖТ absolute path to config directory -# SPEC.config.default тЖТ "default" config name -# SPEC.run.launch тЖТ "torchrun" -``` - -The command file contains the visible execution logic тАФ runspec tells it **what** -to run, the command decides **how** (local, slurm, ray, etc.). - -## Adding a new recipe - -1. Write the training/data-prep script -2. Add a `[tool.runspec]` block at the top -3. Create a CLI command that calls `parse_runspec()` on it -4. Register the command in the typer group - -The runspec block is the single source of truth. No need to duplicate metadata -in the CLI layer. - -## Reference implementation - -The `nemo_runspec` Python package (`src/nemo_runspec/`) implements: - -- **Parsing**: `_parser.py` extracts the PEP 723 block and parses the TOML -- **Models**: `_models.py` defines the frozen `Runspec` dataclass -- **CLI toolkit**: config loading, env.toml profiles, RecipeTyper, packaging, etc. - -See `src/nemo_runspec/README.md` for package-level documentation. diff --git a/docs/sdg/_snippets/input/greenteme.yaml b/docs/sdg/_snippets/input/greenteme.yaml deleted file mode 100644 index d4f88c796..000000000 --- a/docs/sdg/_snippets/input/greenteme.yaml +++ /dev/null @@ -1,75 +0,0 @@ -output_dir: ${oc.env:SDG_OUTPUT_DIR,${oc.env:NEMO_RUN_DIR,${oc.env:PWD}/output}/sdg} -output_path: ${output_dir}/greenteme_sft.jsonl -num_records: 100 - -seed_dataset: - path: ${oc.env:PWD}/src/nemotron/steps/sdg/data_designer/data/greenteme_inquiry_seeds.jsonl - strategy: shuffle - fields: [scenario] - -models: - - alias: nvidia-text - model: nvidia/nemotron-3-nano-30b-a3b - provider: nvidia - skip_health_check: true - inference_parameters: - temperature: 0.8 - top_p: 1.0 - max_tokens: 1200 - -columns: - - name: traveler_segment - type: category - values: - - frequent_flyer - - business_traveler - - family_with_children - - first_time_international - - elite_loyalty_member - - leisure_couple - - - name: inquiry_type - type: category - values: - - rebooking - - baggage_issue - - refund_request - - loyalty_status - - fare_rules - - flight_status - - - name: channel - type: category - values: [chat, phone, app] - - - name: user_query - type: llm_text - model_alias: nvidia-text - prompt: | - You are role-playing a {{ traveler_segment }} contacting Greenteme Airlines - via {{ channel }} about a {{ inquiry_type }}. The scenario is: - "{{ scenario }}" - - Write the customer's first message. Keep it natural, 1-3 sentences. - Do not reference any real airline name, real flight number, or real - loyalty program. - - - name: assistant_response - type: llm_text - model_alias: nvidia-text - prompt: | - You are a customer-service agent at Greenteme Airlines, a fictional airline. - Reply to this customer message: - - "{{ user_query }}" - - Provide a concise, professional, compliant response, 2-4 sentences. Stay - realistic and grounded in standard airline policy. Do not invent real - airline names, real flight numbers, real PNR codes, or real loyalty - program details. No markdown. - -output_projection: - type: openai_messages - user_field: user_query - assistant_field: assistant_response - metadata_fields: [traveler_segment, inquiry_type, channel, scenario] diff --git a/docs/sdg/_snippets/input/greenteme_inquiry_seeds.jsonl b/docs/sdg/_snippets/input/greenteme_inquiry_seeds.jsonl deleted file mode 100644 index a20321e1e..000000000 --- a/docs/sdg/_snippets/input/greenteme_inquiry_seeds.jsonl +++ /dev/null @@ -1,12 +0,0 @@ -{"scenario": "Connecting flight cancelled due to weather; customer needs to arrive at destination by tomorrow morning for a wedding."} -{"scenario": "Checked baggage missing on arrival; flight landed two hours ago and the bag did not appear at the carousel."} -{"scenario": "Customer wants a refund on a non-refundable ticket due to a documented medical emergency."} -{"scenario": "Customer is unsure why their loyalty status was downgraded this year and wants to understand the qualifying criteria."} -{"scenario": "Customer wants to change a fare class on an existing booking and needs to know the fare difference and any change fees."} -{"scenario": "Flight is showing a four-hour delay and the customer wants to know whether they will make their connection."} -{"scenario": "Customer was double-charged for a seat upgrade and wants the duplicate charge reversed."} -{"scenario": "Customer needs to add a service animal to an upcoming international flight and wants to know what documentation is required."} -{"scenario": "Bag damaged in transit; customer needs to file a claim and wants the timeline and required documentation."} -{"scenario": "Customer rebooked through self-service and is now seated apart from a travel companion; they want to be reseated together."} -{"scenario": "Customer wants to use a travel credit from a previous cancellation but cannot find the credit number in their account."} -{"scenario": "Customer's payment method was declined when trying to complete a booking and they want to know what to do."} diff --git a/docs/sdg/_snippets/input/step-with-person-datetime.py b/docs/sdg/_snippets/input/step-with-person-datetime.py deleted file mode 100644 index cde4f083b..000000000 --- a/docs/sdg/_snippets/input/step-with-person-datetime.py +++ /dev/null @@ -1,327 +0,0 @@ -#!/usr/bin/env python3 -# /// script -# [tool.runspec] -# schema = "1" -# name = "steps/sdg/data_designer" -# -# [tool.runspec.run] -# launch = "python" -# -# [tool.runspec.config] -# dir = "./config" -# default = "default" -# format = "omegaconf" -# -# [tool.runspec.resources] -# nodes = 1 -# gpus_per_node = 0 -# /// - -# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Generate synthetic SFT or RL preference data with NeMo Data Designer. - -Mirrors the upstream NVIDIA-NeMo/DataDesigner Python SDK: build a -``DataDesignerConfigBuilder`` from a declarative YAML column spec, then call -``client.preview(builder)`` (fast iteration) or ``client.create(builder, тАж)`` -(full dataset). - -Two configs ship out of the box: - - ``default.yaml`` тАФ SFT chat data (sampler ``persona`` ├Ч seed ``topic`` + - LLM-generated ``user_query`` / ``assistant_response``). - - ``rl_pref.yaml`` тАФ DPO preference data (two LLM-generated responses + an - LLM judge to label chosen / rejected). - -Generation uses a remote inference endpoint, so this step needs no GPUs of its -own тАФ only network access to the configured model service. Customisation lives -entirely in YAML. -""" - -from __future__ import annotations - -import json -from pathlib import Path -from typing import Any - -from omegaconf import OmegaConf - -from nemotron.kit.train_script import ( - apply_hydra_overrides, - load_omegaconf_yaml, - parse_config_and_overrides, -) - -DEFAULT_CONFIG = Path(__file__).parent / "config" / "default.yaml" - - -def build_columns(builder: Any, columns: list[dict[str, Any]], dd: Any) -> None: - """Translate declarative column specs into typed Data Designer column configs. - - Supported ``type``s: - - ``category`` тАФ pick uniformly from a fixed list of values. - - ``person`` тАФ Census-grounded persona profile via the person sampler. - - ``datetime`` тАФ random datetime within a start/end range. - - ``seed`` тАФ surface a column from the seed dataset by name. - - ``llm_text`` тАФ generate free text via an LLM. - - ``llm_structured`` тАФ generate structured JSON via an LLM (provide ``output_format``). - - ``llm_judge`` тАФ alias for ``llm_structured``. - """ - for spec in columns: - kind = spec["type"] - name = spec["name"] - - if kind == "category": - builder.add_column( - dd.SamplerColumnConfig( - name=name, - sampler_type=dd.SamplerType.CATEGORY, - params=dd.CategorySamplerParams(values=spec["values"]), - ) - ) - - elif kind == "person": - builder.add_column( - dd.SamplerColumnConfig( - name=name, - sampler_type=dd.SamplerType.PERSON, - params=dd.PersonSamplerParams( - locale=spec.get("locale", "en_US"), - age_range=spec.get("age_range"), - with_synthetic_personas=spec.get("with_synthetic_personas", True), - ), - ) - ) - - elif kind == "datetime": - builder.add_column( - dd.SamplerColumnConfig( - name=name, - sampler_type=dd.SamplerType.DATETIME, - params=dd.DatetimeSamplerParams( - start=spec["start"], - end=spec["end"], - ), - ) - ) - - elif kind == "seed": - # The column name must match the field in the seed dataset. - builder.add_column(dd.SeedDatasetColumnConfig(name=name)) - - elif kind == "llm_text": - builder.add_column( - dd.LLMTextColumnConfig( - name=name, - model_alias=spec.get("model_alias", "nvidia-text"), - prompt=spec["prompt"], - ) - ) - - elif kind in ("llm_structured", "llm_judge"): - builder.add_column( - dd.LLMStructuredColumnConfig( - name=name, - model_alias=spec.get("model_alias", "nvidia-text"), - prompt=spec["prompt"], - output_format=spec["output_format"], - ) - ) - - else: - raise ValueError(f"Unknown column type: {kind!r}") - - -def project_records(records: list[dict[str, Any]], projection: dict[str, Any] | None) -> list[dict[str, Any]]: - """Project Data Designer records into training-ready JSONL schemas.""" - if not projection: - return records - - kind = projection.get("type") - if kind == "structured_messages": - source_field = projection.get("source_field", "conversation") - messages_field = projection.get("messages_field", "messages") - tools_field = projection.get("tools_field", "tools") - metadata_fields = projection.get("metadata_fields") or [] - projected = [] - for record in records: - source = record[source_field] - if isinstance(source, str): - source = json.loads(source) - if not isinstance(source, dict): - raise ValueError(f"{source_field!r} must be a mapping or JSON object string") - - item = {"messages": source[messages_field]} - if tools_field in source: - item["tools"] = source[tools_field] - for field in metadata_fields: - if field in record: - item[field] = record[field] - projected.append(item) - return projected - - if kind == "openai_messages": - user_field = projection.get("user_field", "user_query") - assistant_field = projection.get("assistant_field", "assistant_response") - metadata_fields = projection.get("metadata_fields") or [] - projected = [] - for record in records: - item = { - "messages": [ - {"role": "user", "content": record[user_field]}, - {"role": "assistant", "content": record[assistant_field]}, - ] - } - for field in metadata_fields: - if field in record: - item[field] = record[field] - projected.append(item) - return projected - - if kind == "dpo_preference": - prompt_field = projection.get("prompt_field", "prompt") - response_a_field = projection.get("response_a_field", "response_a") - response_b_field = projection.get("response_b_field", "response_b") - judge_field = projection.get("judge_field", "judge") - winner_field = projection.get("winner_field", "winner") - projected = [] - for record in records: - judge = record.get(judge_field) - if isinstance(judge, str): - judge = json.loads(judge) - if not isinstance(judge, dict): - raise ValueError(f"{judge_field!r} must be a mapping or JSON object string") - - winner = str(judge.get(winner_field, "")).upper() - if winner == "A": - chosen = record[response_a_field] - rejected = record[response_b_field] - elif winner == "B": - chosen = record[response_b_field] - rejected = record[response_a_field] - else: - raise ValueError(f"Unsupported preference winner {winner!r}; expected 'A' or 'B'") - - projected.append( - { - "prompt": record[prompt_field], - "chosen": chosen, - "rejected": rejected, - } - ) - return projected - - raise ValueError(f"Unknown output_projection type: {kind!r}") - - -def records_from_designer_result(result: Any) -> list[dict[str, Any]]: - """Extract records from either preview or dataset-creation results.""" - if hasattr(result, "load_dataset"): - dataset = result.load_dataset() - elif hasattr(result, "dataset"): - dataset = result.dataset - else: - raise TypeError( - "Data Designer result must expose either `load_dataset()` " - "or an in-memory `dataset` attribute" - ) - - if dataset is None: - raise ValueError("Data Designer returned an empty dataset result") - - if isinstance(dataset, list): - return dataset - - if hasattr(dataset, "to_pandas"): - dataset = dataset.to_pandas() - - if hasattr(dataset, "to_dict"): - return dataset.to_dict(orient="records") - - raise TypeError(f"Unsupported Data Designer dataset type: {type(dataset).__name__}") - - -def main() -> None: - config_path, cli_overrides = parse_config_and_overrides(default_config=DEFAULT_CONFIG) - raw = apply_hydra_overrides(load_omegaconf_yaml(config_path), cli_overrides) - cfg = OmegaConf.to_container(raw, resolve=True) - - columns = cfg.get("columns") - if not columns: - raise ValueError(f"{config_path}: config must declare a non-empty `columns:` list") - - output_path = Path(cfg["output_path"]) - output_path.parent.mkdir(parents=True, exist_ok=True) - - # Deferred imports keep the module importable on dev hosts without - # data_designer installed. - import data_designer.config as dd - from data_designer.interface import DataDesigner - - builder = dd.DataDesignerConfigBuilder() - - # Models тАФ translate the YAML `models:` list into typed ModelConfig objects. - # The builder ships with default model aliases; replace them when the YAML - # declares the same alias so our endpoint / parameters win. - for spec in cfg.get("models") or []: - alias = spec["alias"] - try: - builder.delete_model_config(alias) - except Exception: - pass # alias not yet registered тАФ fine, just add it. - - params = spec.get("inference_parameters") or {} - builder.add_model_config( - dd.ModelConfig( - alias=alias, - model=spec["model"], - provider=spec.get("provider"), - skip_health_check=spec.get("skip_health_check", False), - inference_parameters=dd.ChatCompletionInferenceParams(**params), - ) - ) - - seed = cfg.get("seed_dataset") - if seed: - strategy_name = seed.get("strategy", "shuffle").upper() - builder.with_seed_dataset( - dd.LocalFileSeedSource(path=seed["path"]), - sampling_strategy=dd.SamplingStrategy[strategy_name], - ) - - build_columns(builder, columns, dd) - - client = DataDesigner() - - if cfg.get("preview", False): - result = client.preview(builder, num_records=cfg["num_records"]) - verb = "Preview" - else: - result = client.create( - builder, - num_records=cfg["num_records"], - ) - verb = "Generated" - - records = records_from_designer_result(result) - records = project_records(records, cfg.get("output_projection")) - - with output_path.open("w") as f: - for record in records: - f.write(json.dumps(record) + "\n") - print(f"{verb} {len(records)} records тЖТ {output_path}") - - -if __name__ == "__main__": - main() diff --git a/docs/sdg/_snippets/output/greenteme_preview.jsonl b/docs/sdg/_snippets/output/greenteme_preview.jsonl deleted file mode 100644 index 72ae5482e..000000000 --- a/docs/sdg/_snippets/output/greenteme_preview.jsonl +++ /dev/null @@ -1,32 +0,0 @@ -{ - "messages": [ - { - "role": "user", - "content": "Hi! I'm traveling internationally for the first time soon and need to add a service animal to my booking. Could you let me know what documentation I need to provide?" - }, - { - "role": "assistant", - "content": "Thank you for contacting Greenteme Airlines. Please provide a valid government-issued health certificate and a signed service animal relief form for your destination country. You can upload these documents through the Manage Booking section of our website at least 48 hours before departure." - } - ], - "traveler_segment": "first_time_international", - "inquiry_type": "rebooking", - "channel": "app", - "scenario": "Customer needs to add a service animal to an upcoming international flight and wants to know what documentation is required." -} -{ - "messages": [ - { - "role": "user", - "content": "\"Hi, I just rebooked my flight online and realized my companion and I are now seated in different rows. Is there any way you can help us get seats together?\"" - }, - { - "role": "assistant", - "content": "Hello, thank you for reaching out to Greenteme Airlines. Please provide your booking reference, and we will check for available adjacent seats to move you and your companion together. Note that depending on your fare class, a seat selection fee may apply." - } - ], - "traveler_segment": "first_time_international", - "inquiry_type": "refund_request", - "channel": "phone", - "scenario": "Customer rebooked through self-service and is now seated apart from a travel companion; they want to be reseated together." -} diff --git a/docs/sdg/_snippets/output/preview.txt b/docs/sdg/_snippets/output/preview.txt deleted file mode 100644 index be6c61d98..000000000 --- a/docs/sdg/_snippets/output/preview.txt +++ /dev/null @@ -1,87 +0,0 @@ - -Compiled Configuration - -тХнтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА run тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтХо -тФВ mode: local тФВ -тФВ profile: null тФВ -тФВ env: {} тФВ -тФВ cli: тФВ -тФВ argv: тФВ -тФВ - preview=true тФВ -тФВ - num_records=2 тФВ -тФВ dotlist: тФВ -тФВ - preview=true тФВ -тФВ - num_records=2 тФВ -тФВ passthrough: [] тФВ -тФВ config: default тФВ -тФВ recipe: тФВ -тФВ name: steps/sdg/data_designer тФВ -тФВ script: /local/var/tmp/nvidia/nemotron/src/nemotron/steps/sdg/data_designer/step.py тФВ -тХ░тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтХп - -тХнтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА config тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтХо -тФВ output_dir: ${oc.env:SDG_OUTPUT_DIR,${oc.env:NEMO_RUN_DIR,${oc.env:PWD}/output}/sdg} тФВ -тФВ output_path: ${output_dir}/sft.jsonl тФВ -тФВ num_records: 2 тФВ -тФВ seed_dataset: тФВ -тФВ path: ${oc.env:PWD}/src/nemotron/steps/sdg/data_designer/data/sft_topic_seeds.jsonl тФВ -тФВ strategy: shuffle тФВ -тФВ fields: тФВ -тФВ - topic тФВ -тФВ models: тФВ -тФВ - alias: nvidia-text тФВ -тФВ model: nvidia/nemotron-3-nano-30b-a3b тФВ -тФВ provider: nvidia тФВ -тФВ skip_health_check: true тФВ -тФВ inference_parameters: тФВ -тФВ temperature: 0.8 тФВ -тФВ top_p: 1.0 тФВ -тФВ max_tokens: '******' тФВ -тФВ columns: тФВ -тФВ - name: persona тФВ -тФВ type: category тФВ -тФВ values: тФВ -тФВ - teacher тФВ -тФВ - engineer тФВ -тФВ - student тФВ -тФВ - researcher тФВ -тФВ - support_agent тФВ -тФВ - name: user_query тФВ -тФВ type: llm_text тФВ -тФВ model_alias: nvidia-text тФВ -тФВ prompt: 'Write a single user message for a {{ persona }} asking about: {{ topic тФВ -тФВ }}. тФВ -тФВ тФВ -тФВ Keep it natural, 1-3 sentences. тФВ -тФВ тФВ -тФВ ' тФВ -тФВ - name: assistant_response тФВ -тФВ type: llm_text тФВ -тФВ model_alias: nvidia-text тФВ -тФВ prompt: 'Helpful assistant reply to: "{{ user_query }}". тФВ -тФВ тФВ -тФВ Style: concise, factual, no markdown. тФВ -тФВ тФВ -тФВ ' тФВ -тФВ output_projection: тФВ -тФВ type: openai_messages тФВ -тФВ user_field: user_query тФВ -тФВ assistant_field: assistant_response тФВ -тФВ metadata_fields: тФВ -тФВ - persona тФВ -тФВ - topic тФВ -тФВ preview: true тФВ -тХ░тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтХп - - - -тХнтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтХо -тФВ Job Submission тФВ -тФВ тФЬтФАтФА configs тФВ -тФВ тФВ тФЬтФАтФА job: /local/var/tmp/nvidia/nemotron/.nemotron/jobs/20260509-133530-steps-sdg-data_designer/job.yaml тФВ -тФВ тФВ тФФтФАтФА train: /local/var/tmp/nvidia/nemotron/.nemotron/jobs/20260509-133530-steps-sdg-data_designer/train.yaml тФВ -тФВ тФФтФАтФА mode: local тФВ -тХ░тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтХп - -Executing: /local/var/tmp/nvidia/nemotron/.venv/bin/python3 /local/var/tmp/nvidia/nemotron/src/nemotron/steps/sdg/data_designer/step.py --config /local/var/tmp/nvidia/nemotron/.nemotron/jobs/20260509-133530-steps-sdg-data_designer/train.yaml -Preview 2 records тЖТ /local/var/tmp/nvidia/nemotron/output/sdg/sft.jsonl diff --git a/docs/sdg/_snippets/output/sft_first_record.jsonl b/docs/sdg/_snippets/output/sft_first_record.jsonl deleted file mode 100644 index 1344d109f..000000000 --- a/docs/sdg/_snippets/output/sft_first_record.jsonl +++ /dev/null @@ -1,14 +0,0 @@ -{ - "messages": [ - { - "role": "user", - "content": "Could you explain how reducing latency affects the quality of the modelтАЩs responses? IтАЩm trying to understand the tradeтАСoffs involved." - }, - { - "role": "assistant", - "content": "Reducing latency shortens the time the model takes to generate a response, which often means it has less computational budget or fewer inference steps. With fewer steps or a tighter budget, the model may:\n\n- Produce shorter, less nuanced outputs \n- Miss subtle contextual cues or deeper reasoning \n- Rely more on surfaceтАСlevel patterns rather than elaborate context \n- Be more prone to errors or hallucinations that would be filtered out with additional processing \n\nThe tradeтАСoff is speed versus depth: faster responses can be less thorough, less coherent, or lower in quality, especially for tasks that benefit from extended reasoning or detailed elaboration. Balancing the two involves choosing an acceptable latency target while preserving enough inference capacity to maintain the desired response quality." - } - ], - "persona": "teacher", - "topic": "tradeoffs between model latency and response quality" -} diff --git a/docs/sdg/getting-started.md b/docs/sdg/getting-started.md deleted file mode 100644 index c2be733d6..000000000 --- a/docs/sdg/getting-started.md +++ /dev/null @@ -1,146 +0,0 @@ - - -(sdg-getting-started)= -# Generate Your First Synthetic Dataset - -::::{grid} 2 - -:::{grid-item-card} -:columns: 8 - -**What You'll Build**: a small supervised fine-tuning (SFT) chat dataset in OpenAI message format. -The dataset contains five records grounded in the `sft_topic_seeds.jsonl` seed file in the repository. -Data Designer generates the records against an NVIDIA-hosted large language model (LLM) endpoint. - -^^^ - -**In this tutorial, you will**: - -1. Set up prerequisites: the repository and an NVIDIA API key. -1. Read the default pipeline configuration. -1. Run a preview to verify the pipeline and model. -1. Generate a small dataset of five records. -1. Locate and inspect the output JSON Lines (JSONL) file. - -{octicon}`clock;1.5em;sd-mr-1` This tutorial requires between 5 and 10 minutes to complete. -::: - -:::{grid-item-card} {octicon}`flame;1.5em;sd-mr-1` **Sample Prompt** -:columns: 4 - -Run a 2-record preview of the default synthetic data generation (SDG) pipeline, then generate 5 records and show me the first output record. - -::: -:::: - -## Prerequisites - -- Run all commands from the repository root. -- An `NVIDIA_API_KEY` for the default model, `nvidia/nemotron-3-nano-30b-a3b`. - Data generation runs against an NVIDIA-hosted endpoint, so you can complete this tutorial on any machine with network access. - -## How the Default Pipeline Works - -The default pipeline at `src/nemotron/steps/sdg/data_designer/config/default.yaml` combines two sources of variation for each record. -A *seed topic* is sampled from `sft_topic_seeds.jsonl`, for example a topic on safe deployment of AI assistants in enterprise support workflows. -A *persona category*, such as teacher or engineer, is sampled from a fixed category set. -Together they anchor a user prompt. -The pipeline generates a matching assistant response and projects the result into OpenAI chat-format messages. - -```{literalinclude} ../../src/nemotron/steps/sdg/data_designer/config/default.yaml -:language: yaml -:lines: 15- -:class: scrollable -``` - -## Procedure - -1. Clone the repository, if you have not already done so: - - ```console - $ git clone https://github.com/NVIDIA-NeMo/Nemotron && cd Nemotron - ``` - -1. Install the dependencies for synthetic data generation: - - ```console - $ uv sync --extra data-sdg - ``` - -1. Set your NVIDIA API key: - - ```console - $ export NVIDIA_API_KEY="" - ``` - -1. Run a 2-record preview to verify the model alias, prompts, and column mappings before generating at scale. - - ```console - $ uv run nemotron steps run sdg/data_designer -c default preview=true num_records=2 - ``` - - The pipeline registers the model alias, generates two rows, and prints a summary: - - ````{dropdown} Example Output - :icon: code-square - - ```{literalinclude} _snippets/output/preview.txt - :language: text - ``` - ```` - -1. Generate the five-record dataset: - - ```console - $ uv run nemotron steps run sdg/data_designer -c default num_records=5 - ``` - - The default output path is `./output/sdg/sft.jsonl`. - To change the path, set the `SDG_OUTPUT_DIR` environment variable or pass `output_path=...` on the command line. - -1. Inspect the output. - Each line of `sft.jsonl` is one chat record. - The `openai_messages` projection emits a `messages` array along with the seed `topic` and sampled `persona` as metadata for traceability. - The following sample shows one record from the `sft.jsonl` file. - - ```{literalinclude} _snippets/output/sft_first_record.jsonl - :language: json - ``` - -## Summary - -In this tutorial, you completed the following tasks: - -- Ran a 2-record preview to verify the pipeline and model. -- Generated a 5-record SFT chat dataset with `default.yaml`. -- Located the OpenAI-format JSONL output. - -As you scale this workflow up, keep two principles in mind: - -- Run a preview first. - The `preview=true num_records=N` form runs the same pipeline against a small record count, so you can iterate on column specifications and prompts before scaling `num_records` up. -- The output format matches the trainer. - The `openai_messages` projection emits records ready for `data_prep/sft_packing` or AutoModel SFT. - -## Next Steps - -- Adapt the pipeline to a specific domain: {doc}`how-to/create-domain-dataset`. -- Preview, generate, and customize output: {doc}`how-to/run`. -- Generate preference pairs for direct preference optimization (DPO): {doc}`how-to/preference-data`. -- Dispatch to a cluster: {doc}`how-to/dispatch-to-cluster` describes env.toml profiles and container images. -- Look up flags and config fields: {doc}`reference/cli-reference`, {doc}`reference/config-schema`. diff --git a/docs/sdg/how-to/create-domain-dataset.md b/docs/sdg/how-to/create-domain-dataset.md deleted file mode 100644 index 332ecfdc3..000000000 --- a/docs/sdg/how-to/create-domain-dataset.md +++ /dev/null @@ -1,130 +0,0 @@ - - -(sdg-create-greenteme-airlines-dataset)= -# Create a Domain Dataset for Airlines Customer Service - -::::{grid} 2 - -:::{grid-item-card} -:columns: 8 - -**What You'll Build**: A domain-adapted SFT chat dataset modeled on fictional airlines customer-service conversations. - -^^^ - -**In this how-to guide, you will**: - -1. Create an airline-domain pipeline config. -2. Create a seed file of airline inquiry scenarios. -3. Swap the category columns for three airline-relevant dimensions. -4. Rewrite the LLM prompts for the airline domain. -5. Update the output projection and output path. -6. Run a preview to verify, then generate 100 records. - -{octicon}`clock;1.5em;sd-mr-1` This guide requires between 20 and 30 minutes to complete. -::: - -:::{grid-item-card} -:columns: 4 - -{octicon}`flame;1.5em;sd-mr-1` **Sample Prompt** - -^^^ - -Adapt the default SDG pipeline for Greenteme Airlines customer service with three category dimensions, run a 2-record preview, then generate 100 records and show me one output record. - -::: -:::: - -## Prerequisites - -- тЬЕ Completed {doc}`../getting-started` тАФ at least one successful preview and full run of `default.yaml` so you know the pipeline works end-to-end. -- тЬЕ `NVIDIA_API_KEY` set in your environment. - -## How This Differs From the Default Pipeline - -The default pipeline mixes a single category dimension, `persona`, with seed topics. -This example adds category dimensions, `traveler_segment`, `inquiry_type`, and `channel`, on top of seed scenarios so that diversity comes from explicit, controllable values. - -## Procedure - -1. Create a `src/nemotron/steps/sdg/data_designer/config/greenteme.yaml` ([download](../_snippets/input/greenteme.yaml)) file like the following example: - - ```{literalinclude} ../_snippets/input/greenteme.yaml - :language: yaml - :class: scrollable - ``` - - The key differences from the default pipeline: - - The variation for traveler segment, inquiry type, and channel are all provided by category-type columns. - - The variation for the scenarios is provided by the seed JSONL file from the next step. - - The system-style instruction lives at the top of each prompt rather than as a separate field. The LLM text columns take a single prompt that includes the role for the LLM to assume. - - The `output_projection` field includes the new metadata fields. - -2. Create a seed file, `src/nemotron/steps/sdg/data_designer/data/greenteme_inquiry_seeds.jsonl`, ([download](../_snippets/input/greenteme_inquiry_seeds.jsonl)) like the following example: - - ```{literalinclude} ../_snippets/input/greenteme_inquiry_seeds.jsonl - :language: json - :class: scrollable - ``` - -1. Run a preview by specifying `preview=true num_records=2` to verify the pipeline before scaling: - - ```console - $ nemotron steps run sdg/data_designer -c greenteme preview=true num_records=2 - ``` - - ````{dropdown} Example Output - :icon: code-square - - ```{literalinclude} ../_snippets/output/greenteme_preview.jsonl - :language: json - ``` - ```` - -1. Generate the dataset by raising `num_records` after the preview output looks correct: - - ```console - $ nemotron steps run sdg/data_designer -c greenteme num_records=100 - ``` - -## Going Further - -**Locale-aware persona profiles.** The current YAML schema supports category, seed, and LLM column types. To replace the static `traveler_segment` category with Census-grounded persona profiles using Data Designer's [person sampler](https://nvidia-nemo.github.io/DataDesigner/latest/concepts/person_sampling/), you can include locale, age range, and synthetic-personas integration. - -**Multi-turn conversations.** The example shows a single user and assistant exchange. -For multi-turn dialogue, follow the `customer_support_tools.yaml` pattern: ask one `llm_text` column to return a JSON object with `messages` and optional `tools`, then use the `structured_messages` output projection to write training-ready JSONL. - -**Dispatch to a cluster.** Generation runs locally against the NVIDIA-hosted endpoint by default. To run on Lepton or Slurm, see {doc}`dispatch-to-cluster` тАФ env.toml profiles, container images, and the gotchas that bite first-time cluster runs. - -## Schema and Downstream Use - -The `openai_messages` projection emits records with a `messages` array plus the metadata fields you list. These flow directly into: - -- `data_prep/sft_packing` for Megatron-Bridge-style training, or -- AutoModel SFT, which consumes the chat format directly. - -For a full reference of available projection shapes, see {doc}`../reference/output-projections`. - -## Next Steps - -- **Generate preference pairs for DPO**: {doc}`preference-data` тАФ the `rl_pref.yaml` pattern. -- **Generate tool-calling SFT data**: {doc}`tool-call-data` тАФ multi-turn `messages` and `tools` with `structured_messages`. -- **CLI flags and overrides**: {doc}`../reference/cli-reference`. -- **Config schema**: {doc}`../reference/config-schema` тАФ full reference for column types, samplers, and projections. -- **Pipeline overview**: {doc}`../index`. diff --git a/docs/sdg/how-to/dispatch-to-cluster.md b/docs/sdg/how-to/dispatch-to-cluster.md deleted file mode 100644 index 2c27758f0..000000000 --- a/docs/sdg/how-to/dispatch-to-cluster.md +++ /dev/null @@ -1,162 +0,0 @@ - - -(sdg-dispatch-to-cluster)= -# Dispatch SDG to a Cluster - -This guide covers configuring an env.toml profile and running `sdg/data_designer` on Lepton or Slurm. Generation is CPU-only (no GPUs needed) and calls a remote LLM endpoint, so the step fits naturally on a CPU node with outbound network access. - -## env.toml Profile Shape - -Add a profile to `env.toml` (repository root). The example below targets a Lepton CPU node: - -```toml -[lepton_sdg_data_designer] -executor = "lepton" -container_image = "nvcr.io/nvidia/nemo:25.11.nemotron_3_nano" -nemo_run_dir = "/mnt/shared/nemo-run" -nodes = 1 -gpus_per_node = 0 -resource_shape = "cpu.large" -node_group = "your-node-group" -shared_memory_size = 1024 -can_be_preempted = true -queue_priority = "mid-4000" -startup_commands = [ - "python -m pip install --quiet --break-system-packages 'data-designer==0.5.5'" -] -mounts = [ - { path = "/your-nfs-source", mount_path = "/mnt/shared", from = "node-nfs:your-nfs-id" } -] - -[lepton_sdg_data_designer.env_vars] -NVIDIA_API_KEY = "${oc.env:NVIDIA_API_KEY}" -``` - -## Run - -```console -$ uv run --no-sync nemotron steps run sdg/data_designer -c default --batch lepton_sdg_data_designer num_records=1000 -``` - -Use `--run` instead of `--batch` to stream logs interactively. - -## Known Gotchas - -These are the failure modes that commonly affect first-time cluster SDG runs. - -### `data-designer` is not pre-installed in the container - -The NeMo container image does not include `data-designer`. Install it at startup via `startup_commands`: - -```toml -startup_commands = [ - "python -m pip install --quiet --break-system-packages 'data-designer==0.5.5'" -] -``` - -Do not omit `--break-system-packages` тАФ without it pip refuses to install into the system Python on recent NeMo images. - -### Default `shared_memory_size` crashes a CPU node - -The runspec default for `shared_memory_size` is 65536 MB (64 GB), which exceeds the RAM of most CPU node types and causes the job to be rejected or OOM-killed immediately. Set it to a small value; this step makes no use of shared memory: - -```toml -shared_memory_size = 1024 -``` - -### `nemo_run_dir` must be on shared storage - -`nemo-run` uses a busybox data-mover sidecar to stage the launch script into `nemo_run_dir`. If this path is not visible to both the data-mover and the main container тАФ specifically if it is local to one node тАФ the main container never finds the script and the job fails with `No such file or directory`. - -Set `nemo_run_dir` to a path on the shared NFS mount and include the mount in your profile: - -```toml -nemo_run_dir = "/mnt/shared/nemo-run" -mounts = [ - { path = "/your-nfs-source", mount_path = "/mnt/shared", from = "node-nfs:your-nfs-id" } -] -``` - -:::{note} -In the `mounts` table, `path` is the NFS **source** path on the NFS server тАФ not the in-container destination. `mount_path` is the in-container path. -::: - -### `NVIDIA_API_KEY` is not forwarded automatically - -Unlike `HF_TOKEN` and `WANDB_API_KEY`, `NVIDIA_API_KEY` is not automatically forwarded to the container. Declare it explicitly in the `env_vars` section: - -```toml -[lepton_sdg_data_designer.env_vars] -NVIDIA_API_KEY = "${oc.env:NVIDIA_API_KEY}" -``` - -Set it in your local shell before submitting the job: - -```console -$ export NVIDIA_API_KEY="your-api-key" -$ uv run --no-sync nemotron steps run sdg/data_designer -c default --batch lepton_sdg_data_designer num_records=1000 -``` - -### Container image: always look up, never guess - -Do not invent image tags. `nemo:latest` does not exist on `nvcr.io`. Check `src/nemotron/steps/sdg/data_designer/step.py` header comments or `src/nemotron/steps/env/env_toml/config/lepton.yaml` for known-good image references before setting `container_image`. - -### Preemption and queue-priority fields were not wired (now fixed) - -`can_be_preempted`, `can_preempt`, and `queue_priority` are now forwarded from env.toml to `LeptonExecutor`. If you are on an older version of the repo where these were silently ignored, upgrade before expecting preemption scheduling to take effect. - -## Slurm Profile - -For Slurm, replace the Lepton-specific fields with Slurm equivalents. The `startup_commands` and `env_vars` gotchas apply equally: - -```toml -[slurm-sdg] -executor = "slurm" -container_image = "nvcr.io/nvidia/nemo:25.11.nemotron_3_nano" -nemo_run_dir = "/lustre/team/nemo-run" -nodes = 1 -gpus_per_node = 0 -run_partition = "cpu" -batch_partition = "cpu" -startup_commands = [ - "python -m pip install --quiet --break-system-packages 'data-designer==0.5.5'" -] - -[slurm-sdg.env_vars] -NVIDIA_API_KEY = "${oc.env:NVIDIA_API_KEY}" -``` - -:::{tip} -On clusters where the default partition requires GPUs (for example, NVIDIA's `dlw` cluster), set `run_partition` and `batch_partition` to a CPU-capable partition. `gpus_per_node = 0` alone is not sufficient тАФ the partition itself must accept zero-GPU jobs. -::: - -## Verify Before Scaling - -Run a preview via the cluster profile before a large batch: - -```console -$ uv run --no-sync nemotron steps run sdg/data_designer -c default --run lepton_sdg_data_designer preview=true num_records=2 -``` - -Confirm the job reaches `Running`, the model alias check succeeds, and two records are returned before submitting the full job. - -## Next Steps - -- **env.toml reference**: `docs/nemo_runspec/nemo-run.md` тАФ full profile field reference. -- **CLI flags**: {doc}`../reference/cli-reference`. -- **Troubleshooting**: {doc}`../reference/troubleshooting` тАФ full failure-mode reference. diff --git a/docs/sdg/how-to/index.md b/docs/sdg/how-to/index.md deleted file mode 100644 index 9b459de6f..000000000 --- a/docs/sdg/how-to/index.md +++ /dev/null @@ -1,80 +0,0 @@ - - -(sdg-how-to-index)= -# Synthetic Data How-To Guides - -This section provides task-focused guides for common SDG workflows. -For your first run, start with {doc}`../getting-started`. - -If you are new to model training or want a calmer on-ramp before tasks, read {doc}`../using-skills` for how to run a productive session with a coding agent. - -::::{grid} 1 2 2 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} {octicon}`play;1.5em;sd-mr-1` Run the Pipeline -:link: run -:link-type: doc -Preview, generate, and customize output path and projection. -+++ -{bdg-success}`10 min` {bdg-secondary}`intermediate` -::: - -:::{grid-item-card} {octicon}`briefcase;1.5em;sd-mr-1` Create a Domain Dataset -:link: create-domain-dataset -:link-type: doc -Adapt the pipeline to a custom domain with a seed file and multiple category dimensions. -+++ -{bdg-success}`20 min` {bdg-secondary}`intermediate` -::: - -:::{grid-item-card} {octicon}`tools;1.5em;sd-mr-1` Generate Tool-Call Data -:link: tool-call-data -:link-type: doc -Generate multi-turn conversations with OpenAI-style tool calls for tool-use SFT. -+++ -{bdg-success}`15 min` {bdg-secondary}`intermediate` -::: - -:::{grid-item-card} {octicon}`git-compare;1.5em;sd-mr-1` Generate Preference Data -:link: preference-data -:link-type: doc -Generate DPO preference pairs (prompt / chosen / rejected) from `rl_pref.yaml`. -+++ -{bdg-success}`15 min` {bdg-secondary}`intermediate` -::: - -:::{grid-item-card} {octicon}`server;1.5em;sd-mr-1` Dispatch to a Cluster -:link: dispatch-to-cluster -:link-type: doc -Configure an env.toml profile and run SDG on Lepton or Slurm. -+++ -{bdg-success}`30 min` {bdg-secondary}`intermediate` -::: - -:::: - -```{toctree} -:hidden: -:maxdepth: 1 - -Create a Domain Dataset -Create Tool-Calling Dataset -preference-data -dispatch-to-cluster -run -``` diff --git a/docs/sdg/how-to/preference-data.md b/docs/sdg/how-to/preference-data.md deleted file mode 100644 index db5df7b64..000000000 --- a/docs/sdg/how-to/preference-data.md +++ /dev/null @@ -1,93 +0,0 @@ - - -(sdg-preference-data)= -# Generate Preference Data for DPO - -This example shows how to use the `rl_pref.yaml` configuration file. -The example generates _prompt_, _chosen_, and _rejected_ triples for direct preference optimization (DPO) training. -Output flows directly into `data_prep/rl_prep` and then `rl/nemo_rl/dpo`. - -## How It Works - -The `rl_pref.yaml` file registers two model aliases at different temperatures: -a high-temperature creative model and a low-temperature precise model. -The goal is to produce two responses per prompt that are distinct: - -```{literalinclude} ../../../src/nemotron/steps/sdg/data_designer/config/rl_pref.yaml -:language: yaml -:lines: 15- -:class: scrollable -``` - -For each seed prompt the pipeline: - -1. Generates `response_a` (high temperature) and `response_b` (low temperature) independently. -2. Asks a third LLM call (`judge` column, `llm_judge` type) to compare them and return `{"winner": "A"}` or `{"winner": "B"}`. -3. The `dpo_preference` projection maps winner тЖТ chosen / rejected and writes `{"prompt": "...", "chosen": "...", "rejected": "..."}`. - -## Prerequisites - -- `NVIDIA_API_KEY` set in your environment. -- A seed file with one `prompt` field per line. The bundled `rl_pref_prompt_seeds.jsonl` contains general reasoning prompts. Replace it with domain-specific prompts for targeted preference data. - -## Procedure - -1. Preview two records to verify the judge returns valid `winner` values: - - ```console - $ nemotron steps run sdg/data_designer -c rl_pref preview=true num_records=2 - ``` - -2. Generate the dataset. The checked-in `rl_pref.yaml` default is 100 records: - - ```console - $ nemotron steps run sdg/data_designer -c rl_pref num_records=500 - ``` - - Output is written to `./output/sdg/rl_pref.jsonl`. - - Inspect the output. Each line is a preference triple: - - ```json - {"prompt": "Explain why retrieval-augmented generation can reduce hallucinations.", "chosen": "RAG grounds the model in retrieved documents, so claims are tied to specific passages rather than purely to weights.", "rejected": "RAG is better because it uses more data and is generally smarter than standard models."} - ``` - -## Adapt the Seed File - -Swap `seed_dataset.path` to point at your own prompt seed file. Each line must be valid JSON with a `prompt` field: - -```json -{"prompt": "Describe the tradeoffs between batch and streaming inference for real-time applications."} -``` - -Keep seed prompts representative of the target capability and diverse across difficulty levels. -The judge performs better when the two responses have a clear quality difference--consider widening the temperature gap between the two model aliases if the judge returns many ties or unexpected results. - -## Downstream Pipeline - -```text -rl_pref.jsonl тЖТ data_prep/rl_prep тЖТ rl/nemo_rl/dpo -``` - -`data_prep/rl_prep` tokenizes and prepares preference pairs. `rl/nemo_rl/dpo` consumes the prepared dataset. Verify the `prompt`, `chosen`, and `rejected` fields are present in every record before handing off. - -## Next Steps - -- **Output projection reference**: {doc}`../reference/output-projections` тАФ `dpo_preference` schema. -- **Config schema**: {doc}`../reference/config-schema` тАФ `llm_judge` column type and `dpo_preference` projection fields. -- **Dispatch to a cluster**: {doc}`dispatch-to-cluster`. diff --git a/docs/sdg/how-to/run.md b/docs/sdg/how-to/run.md deleted file mode 100644 index 24c35844d..000000000 --- a/docs/sdg/how-to/run.md +++ /dev/null @@ -1,61 +0,0 @@ - - -(sdg-run)= -# Tips for the Data Generation Pipeline - -## Preview Before Generating - -Always preview before running a full generation job. Preview mode calls the same pipeline with a small record count, projects the records, and writes them to `output_path`: - -```console -$ nemotron steps run sdg/data_designer -c default preview=true num_records=2 -``` - -Use preview to verify: - -- Column references in prompts (`{{ column_name }}`) resolve to the expected values. -- Seed fields, such as `{{ scenario }}`, `{{ prompt }}`, and so on, are populated from the seed file. -- The model returns text that matches the prompt's intent. -- The `output_projection` produces the schema downstream steps expect. - -## Specify a Configuration File - -The repository includes the following sample config files in the `src/nemotron/steps/sdg/data_designer/config` directory: - -| Config | Output | Use for | -|---|---|---| -| `default.yaml` | SFT chat (`openai_messages`) | General chat SFT | -| `customer_support_tools.yaml` | Tool-call SFT (`structured_messages`) | Tool-use SFT | -| `rl_pref.yaml` | Preference pairs (`dpo_preference`) | DPO / RLHF | -| `tiny.yaml` | SFT chat, 10 records, short tokens | Fast iteration | - -Specify the file in the `-c` argument: - -```console -$ nemotron steps run sdg/data_designer -c customer_support_tools preview=true num_records=2 -``` - -## Run Attached on a Cluster Profile - -To dispatch to a Lepton or Slurm profile configured in `env.toml`, use `--run` (attached, streams logs) or `--batch` (detached): - -```console -$ nemotron steps run sdg/data_designer -c default --run my-lepton-profile num_records=1000 -``` - -For cluster setup, see {doc}`dispatch-to-cluster`. diff --git a/docs/sdg/how-to/tool-call-data.md b/docs/sdg/how-to/tool-call-data.md deleted file mode 100644 index b6fd3f17d..000000000 --- a/docs/sdg/how-to/tool-call-data.md +++ /dev/null @@ -1,122 +0,0 @@ - - -(sdg-tool-call-data)= -# Generate Tool-Calling Data for SFT - -Use this guide when you need multi-turn chat JSONL where the assistant issues OpenAI-style `tool_calls` and a `tool` role returns structured results, suitable for supervised fine-tuning (SFT) with a `tools` definition array. - -You will use the sample config `customer_support_tools.yaml`, which produces ecommerce-style support threads. Each output row includes a `messages` array (with tool turns) and a `tools` array, ready for packing and training. - -## Outcomes - -- Understand how the shipped config asks one `llm_text` column to emit a full JSON multi-turn trace in a single model call. -- Preview, generate, and validate records before training. -- Know how to retarget seeds, prompts, and schema for your own domain. - -## How It Works - -Compared with single-turn configs such as `default.yaml`, this setup drives the whole conversation from one `llm_text` column. -The prompt tells the model to return a JSON object with `tools` and `messages` keys. -The `structured_messages` output projection parses that JSON object, extracts `messages` and `tools`, adds metadata, and serializes nested tool payload objects into OpenAI-compatible string fields. - -```{literalinclude} ../../../src/nemotron/steps/sdg/data_designer/config/customer_support_tools.yaml -:language: yaml -:lines: 15- -:class: scrollable -``` - -Each seed row supplies five anchor fields the prompt interpolates: `customer_name`, `issue`, `order_id`, `product`, and `policy_hint`. Two extra category columns (`urgency`, `channel`) add variety without multiplying seed rows for every combination. - -## Prerequisites - -- Nemotron CLI available and working; if this is your first SDG run, complete {doc}`../getting-started`. -- `NVIDIA_API_KEY` set in the environment. -- The bundled seed file `data/customer_support_tool_seeds.jsonl` (shipped with the step). Add rows, or point the config at your own JSONL. - -## Procedure - -1. Preview two records so structured output matches the schema: - - ```console - $ nemotron steps run sdg/data_designer -c customer_support_tools preview=true num_records=2 - ``` - - In the preview, confirm: - - - Exactly one assistant message with `tool_calls`. - - Exactly one `tool` message whose `tool_call_id` matches the call. - - `function.arguments` and tool-message `content` are JSON strings after projection. - - The assistantтАЩs closing turn references the tool result (not a generic reply). - - No markdown in message `content` if your trainer expects plain text. - -2. Generate the dataset: - - ```console - $ nemotron steps run sdg/data_designer -c customer_support_tools num_records=200 - ``` - - Output path: `./output/sdg/customer_support_tool_sft.jsonl`. - Spot-check a few lines. Each record exposes top-level `messages` and `tools` plus metadata, like the following example: - - ```text - { - "messages": [ - {"role": "system", "content": "You are a helpful ecommerce support agent..."}, - {"role": "user", "content": "Hi, I haven't received my headphones yet..."}, - {"role": "assistant", "content": "I'd be happy to help. Could you share your order number?"}, - {"role": "user", "content": "It's ORD-10492."}, - {"role": "assistant", "content": "", "tool_calls": [{"id": "call_001", "type": "function", "function": {"name": "lookup_order", "arguments": "{\"order_id\":\"ORD-10492\"}"}}]}, - {"role": "tool", "tool_call_id": "call_001", "name": "lookup_order", "content": "{\"status\":\"delayed\",\"eta\":\"tomorrow\"}"}, - {"role": "assistant", "content": "Your order is delayed and should arrive tomorrow. Per our policy, I can arrange an expedited replacement if you prefer."} - ], - "tools": [{"type": "function", "function": {"name": "lookup_order", "description": "...", "parameters": {...}}}], - "customer_name": "Priya", "issue": "late delivery", "urgency": "frustrated", "channel": "web_chat" - } - ``` - -## Adapt to Your Domain - -1. Replace or extend the seed file so rows cover your entities. You may rename the five anchor fields as long as the prompt and YAML refer to the same names. -2. Update `seed_dataset.fields` in the YAML to match those names. -3. Rewrite the `prompt` for your scenario and tool surface. -4. Adjust the JSON schema described in the prompt if the message layout changes, for example multiple tool calls per conversation. - -Keep `output_projection` as `structured_messages` so the step extracts `messages` and `tools` from the structured column and merges category metadata onto each record. - -## Validation Checklist - -Before training, sample at least 50 records and verify: - -- [ ] Every `tool_calls` block has a matching `tool` message with the same `tool_call_id`. -- [ ] `function.arguments` and tool-message `content` values are JSON strings in the projected JSONL. -- [ ] The assistantтАЩs final reply uses the tool result (not a canned answer that ignores it). -- [ ] No unexpected markdown in `content` if the trainer assumes plain text. -- [ ] `tools` is present and non-empty on every record. - -## Downstream Use - -```text -customer_support_tool_sft.jsonl тЖТ data_prep/sft_packing тЖТ SFT training -``` - -The `structured_messages` projection writes `messages` and `tools` at the top level, matching formats common to AutoModel-style SFT and Megatron-Bridge-style workflows. Run `data_prep/sft_packing` in dry-run mode before a large training job to confirm the packer accepts your file. - -## Next Steps - -- Output projection reference: {doc}`../reference/output-projections` to learn the `structured_messages` schema. -- Config schema: {doc}`../reference/config-schema` for column types and output projections. diff --git a/docs/sdg/index.md b/docs/sdg/index.md deleted file mode 100644 index 29d57c1aa..000000000 --- a/docs/sdg/index.md +++ /dev/null @@ -1,146 +0,0 @@ - - -(sdg-index)= -# About Synthetic Data Generation - -Generate synthetic training data with [NeMo Data Designer](https://nvidia-nemo.github.io/DataDesigner/) using a declarative YAML pipeline. Seed a generation run with your domain-specific topics, scenarios, or personas; define the column structure and prompts in YAML; and produce training-ready JSONL without writing Python. - -Three output shapes ship out of the box: SFT chat data, tool-calling SFT data, and DPO preference pairs. - -:::{tip} -New to SDG or new to model training? Read {doc}`using-skills` for a short guide to productive agent sessions, then start the {doc}`getting-started` tutorial to run the bundled pipeline and produce your first dataset in 5 to 10 minutes. -::: - -## When to Use - -Use SDG when you need training data that does not already exist in sufficient quantity or quality for your target domain or task. - -- **SFT chat data** тАФ Generate user/assistant conversation pairs grounded in domain-specific topics, scenarios, or personas. Use `default.yaml` as a starting point and adapt it to your domain. -- **Tool-calling SFT data** тАФ Generate multi-turn conversations that include assistant tool calls and tool responses in OpenAI format. Use `customer_support_tools.yaml` as a starting point. -- **DPO preference data** тАФ Generate prompt / chosen / rejected triples for preference learning. Use `rl_pref.yaml`. -- **Custom domains** тАФ Swap the seed file, category columns, and prompts to target any domain. The pipeline is fully declarative; customisation does not require editing Python. -- **Cluster-scale generation** тАФ Dispatch generation to Lepton or Slurm via env.toml profiles when local throughput is insufficient. - -## Pipeline at a Glance - -```mermaid -%%{init: {'theme': 'base', 'themeVariables': { 'primaryBorderColor': '#333333', 'lineColor': '#333333', 'primaryTextColor': '#333333', 'clusterBkg': '#ffffff', 'clusterBorder': '#333333'}}}%% -flowchart TB - seed["Seed file (optional)"] --> dsg - cat["Category samplers"] --> dsg - per["Person sampler (optional)"] --> dsg - dsg["Data Designer column graph
    Jinja2 prompts ┬╖ LLM calls"] - dsg --> proj["output_projection"] - proj --> om["openai_messages"] - proj --> dpo["dpo_preference"] - proj --> sm["structured_messages"] - om --> jsonl["JSONL"] - dpo --> jsonl - sm --> jsonl - jsonl --> train["data_prep/sft_packing or AutoModel SFT"] -``` - -Each run is reproducible: the seed file, column specs, model alias, inference parameters, and projection rules are all version-controlled in a single YAML file. - -## Documentation - -::::{grid} 1 2 2 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} {octicon}`rocket;1.5em;sd-mr-1` Getting Started -:link: getting-started -:link-type: doc -Run the bundled pipeline end-to-end: preview two records, generate five, inspect the output JSONL. -+++ -{bdg-success}`5тАУ10 min` {bdg-secondary}`tutorial` -::: - -:::{grid-item-card} {octicon}`heart;1.5em;sd-mr-1` Use the SDG Skill With Confidence -:link: using-skills -:link-type: doc -Prepare for a focused chat with a coding agent: opening brief, seed ideas, and how `SKILL.md` supports the session without memorization. -+++ -{bdg-success}`10 min read` {bdg-secondary}`newcomer` -::: - -:::{grid-item-card} {octicon}`checklist;1.5em;sd-mr-1` How-To Guides -:link: how-to/index -:link-type: doc -Task-focused guides: adapt the pipeline to a domain, generate preference pairs, dispatch to a cluster. -+++ -{bdg-success}`5 guides` {bdg-secondary}`task-focused` -::: - -:::{grid-item-card} {octicon}`list-unordered;1.5em;sd-mr-1` Reference -:link: reference/index -:link-type: doc -YAML config schema, CLI flags, output projection shapes, and troubleshooting. -+++ -{bdg-success}`4 references` {bdg-secondary}`lookup` -::: - -:::: - -## All Documentation - -````{tab-set} - -```{tab-item} Getting Started - -| Guide | What You'll Do | Time | -|---|---|---| -| {doc}`getting-started` | Preview and generate your first synthetic SFT dataset | 5тАУ10 min | -| {doc}`using-skills` | Run a productive agent session: brief, seeds, plain terms, and light use of `SKILL.md` | 10 min read | - -``` - -```{tab-item} How-To Guides - -| Guide | What You'll Do | -|---|---| -| {doc}`how-to/run` | Preview, generate, and customize output path and projection | -| {doc}`how-to/create-domain-dataset` | Adapt the pipeline to a custom domain with a seed file and multiple category dimensions | -| {doc}`how-to/tool-call-data` | Generate multi-turn tool-calling SFT data | -| {doc}`how-to/preference-data` | Generate DPO preference pairs from `rl_pref.yaml` | -| {doc}`how-to/dispatch-to-cluster` | Dispatch generation to Lepton or Slurm via env.toml | - -``` - -```{tab-item} Reference - -| Reference | What You'll Find | -|---|---| -| {doc}`reference/config-schema` | Full YAML column types, sampler parameters, and projection fields | -| {doc}`reference/cli-reference` | `nemotron steps run sdg/data_designer` flags and hydra overrides | -| {doc}`reference/output-projections` | The three projection shapes with annotated JSONL examples | -| {doc}`reference/troubleshooting` | Dispatch failures, image pull errors, API key issues, schema drift | - -``` - -```` - -## Before You Start - -- The `NVIDIA_API_KEY` environment variable is required for the default model, `nvidia/nemotron-3-nano-30b-a3b`, hosted on integrate.nvidia.com. - -## Limitations and Considerations - -- **Cost**: Generation calls a hosted LLM endpoint; each record incurs API cost. -- **Quality**: After generating records, review them before training. -- **Scale**: API rate limits apply. For large generation runs, dispatch to a cluster and consider batching across multiple nodes. -- **Reproducibility**: Seed files, column specs, model aliases, and inference parameters should all be version-controlled together. Changing any one of them changes the output distribution. diff --git a/docs/sdg/planning.md b/docs/sdg/planning.md deleted file mode 100644 index 67d82e66d..000000000 --- a/docs/sdg/planning.md +++ /dev/null @@ -1,47 +0,0 @@ - - -(sdg-planning)= -# Planning a Synthetic Data Generation Run - -Synthetic data generation involves a sequence of decisions that determine whether the resulting data is useful for training. - -## What Does Good Source Data Look Like for Your Domain? - -The seed file and prompts are where your domain knowledge enters the pipeline. -The scenarios, constraints, and vocabulary you bring to the seed scenarios shape everything the generation produces. -A pipeline run without domain knowledge produces generic output from the model's own training data regardless of how well the column specs are written. - -The quality of your seed material is the strongest lever you have on the quality of what the pipeline produces. - -## What Makes a Generated Record Good Enough to Train on? - -Before scaling, be able to evaluate the quality of a generated record for your domain. - -If you were building a hand-curated training dataset, would you include this record? -If yes, it belongs. - -If you would hesitate because the response sounds evasive, the scenario is implausible, or the assistant fabricated a detail, that is a signal to revise the prompt or seed before generating at scale. - -Preview records before you commit to generating thousands of records. - -## Next Steps - -- First run: {doc}`getting-started` -- Adapt the pipeline to your domain: {doc}`./how-to/create-domain-dataset` -- Preview and iterate on a config: {doc}`./how-to/run` -- Config field reference: {doc}`./reference/config-schema` diff --git a/docs/sdg/reference/cli-reference.md b/docs/sdg/reference/cli-reference.md deleted file mode 100644 index 5c5f8b263..000000000 --- a/docs/sdg/reference/cli-reference.md +++ /dev/null @@ -1,111 +0,0 @@ - - -(sdg-cli-reference)= -# CLI Reference - -Command-line reference for `nemotron steps run sdg/data_designer`. For pipeline overview, see {doc}`../index`. - -## Syntax - -```console -$ nemotron steps run sdg/data_designer \ - [-c CONFIG] \ - [--run PROFILE | --batch PROFILE] \ - [--dry-run] \ - [KEY=VALUE ...] -``` - -## Flags - -```{option} -c, --config CONFIG - -Config name (resolved from the step's `config/` directory) or an absolute/relative path to a YAML file. - -Bundled names: `default`, `customer_support_tools`, `rl_pref`, `tiny`. - -**Default**: `default` -``` - -```{option} -r, --run PROFILE - -Run attached using the env.toml profile named `PROFILE`. Job output streams to the terminal. Use for short interactive runs. -``` - -```{option} -b, --batch PROFILE - -Run detached using the env.toml profile named `PROFILE`. Job is submitted and the command returns immediately. Use for long cluster jobs. -``` - -```{option} -d, --dry-run - -Compile the config and print the resolved job spec without executing. Useful for verifying hydra overrides before submission. -``` - -## Hydra Overrides - -Any `KEY=VALUE` argument after the flags is passed as a hydra dotlist override and merged into the resolved config. Overrides take precedence over YAML values. - -| Override | Example | Effect | -|---|---|---| -| `num_records=N` | `num_records=50` | Generate N records | -| `preview=true` | `preview=true` | Run in preview mode | -| `output_path=PATH` | `output_path=/data/out.jsonl` | Write output to PATH | -| `seed_dataset.path=PATH` | `seed_dataset.path=/data/seeds.jsonl` | Override seed file | -| `models.0.inference_parameters.temperature=T` | `models.0.inference_parameters.temperature=0.5` | Override first model's temperature | - -Dotlist path follows the YAML structure. Nested keys use `.` as separator; list items use `.N` (zero-indexed). - -## Examples - -Preview the default config with two records: - -```console -$ nemotron steps run sdg/data_designer -c default preview=true num_records=2 -``` - -Generate 100 SFT records with a custom output path: - -```console -$ nemotron steps run sdg/data_designer -c default \ - num_records=100 \ - output_path=/data/my-project/sft.jsonl -``` - -Dry-run a cluster submission to check the resolved config: - -```console -$ nemotron steps run sdg/data_designer -c default --run my-profile --dry-run -``` - -Run attached on a Lepton profile with 500 records: - -```console -$ nemotron steps run sdg/data_designer -c default --run lepton_sdg_data_designer num_records=500 -``` - -Use a config at an arbitrary path: - -```console -$ nemotron steps run sdg/data_designer -c /path/to/my-config.yaml preview=true num_records=2 -``` - -## Related - -- {doc}`../how-to/run` тАФ Preview, generate, and customize output. -- {doc}`../how-to/dispatch-to-cluster` тАФ env.toml profile setup. -- {doc}`config-schema` тАФ YAML config field reference. diff --git a/docs/sdg/reference/config-schema.md b/docs/sdg/reference/config-schema.md deleted file mode 100644 index 4ffa0924c..000000000 --- a/docs/sdg/reference/config-schema.md +++ /dev/null @@ -1,213 +0,0 @@ - - -(sdg-config-schema)= -# Config Schema - -This page provides the reference information for the YAML config file consumed by `sdg/data_designer`. - -## Simple Fields - -| Field | Type | Required | Description | -|---|---|---|---| -| `output_dir` | string | no | Base output directory. Supports OmegaConf env-var interpolation. Default resolves `$SDG_OUTPUT_DIR`, then `$NEMO_RUN_DIR/sdg`, then `./output/sdg`. | -| `output_path` | string | yes | Full path for the output JSONL file. Typically `${output_dir}/my-dataset.jsonl`. | -| `num_records` | int | yes | Number of records to generate (`client.create`) or preview (`client.preview`). | -| `preview` | bool | no | When `true`, calls `client.preview()` instead of `client.create()`. Default: `false`. Prefer setting this as a CLI override (`preview=true`) rather than in the YAML. | - -## seed_dataset - -Optional top-level field. -When present, Data Designer samples one row per generated record from the seed file and makes the fields available to column prompts by using Jinja2. - -| Field | Type | Required | Description | -|---|---|---|---| -| `path` | string | yes | Path to a JSONL file. Each line is a JSON object. | -| `strategy` | string | no | `shuffle` (default) or `ordered`. | -| `fields` | list[string] | yes | Column names to expose. Must match keys in the seed JSONL objects. These become available as `{{ field_name }}` in prompts without being declared in `columns`. | - -## models - -A required top-level field. -The field specifies a list of model configurations. -Each entry defines one alias that column specs reference by name. - -| Field | Type | Required | Description | -|---|---|---|---| -| `alias` | string | yes | Short name referenced by `model_alias` in column specs. | -| `model` | string | yes | Model identifier such as `nvidia/nemotron-3-nano-30b-a3b` and `openai/gpt-oss-20b`. | -| `provider` | string | no | Provider name, such as `nvidia` or `anthropic`. | -| `skip_health_check` | bool | no | Skip the startup probe against the model provider. Useful for local or offline endpoints. Default: `false`. | -| `inference_parameters.temperature` | float | no | Sampling temperature. | -| `inference_parameters.top_p` | float | no | Top-p nucleus sampling. | -| `inference_parameters.max_tokens` | int | no | Maximum output tokens per call. | - -## columns - -A required top-level field. -This field is an ordered list of column specs. -Each column has a `name`, a `type`, and type-specific fields. -Columns can reference earlier columns and seed fields in prompts by using Jinja2 syntax like `{{ column_name }}`. - -### Categorical Columns - -Samples uniformly from a fixed list of string or numeric values like the following example. - -```yaml -- name: persona - type: category - values: [teacher, engineer, student, researcher] -``` - -| Field | Required | Description | -|---|---|---| -| `name` | yes | Column name. | -| `values` | yes | List of values to sample from. | - -### Seed Columns - -Provides a named field from the seed dataset as a column. -Use this column type when a seed field needs to appear in `metadata_fields` or must be referenced in a way that requires it to be an explicit column. - -```yaml -- name: topic - type: seed -``` - -| Field | Required | Description | -|---|---|---| -| `name` | yes | Must match a field name in `seed_dataset.fields`. | - -Seed fields declared in `seed_dataset.fields` are available directly in prompts without this column type. -Use `seed` only when you need the field as a named column in the output schema. - -### LLM Text Columns - -Generates free-form text using an LLM call. -These columns can references earlier specified columns and seed fields in `prompt` by using Jinja2 syntax. - -```yaml -- name: user_query - type: llm_text - model_alias: nvidia-text - prompt: | - Write a message from a {{ persona }} asking about: {{ topic }}. -``` - -| Field | Required | Description | -|---|---|---| -| `name` | yes | Column name. | -| `model_alias` | no | Alias from `models`. Default: `nvidia-text`. | -| `prompt` | yes | Jinja2 template. Reference any earlier column or seed field with `{{ name }}`. | - -### LLM Structured Columns - -This column type generates structured JSON by making an LLM call. -The column definition instructs the model to return JSON matching `output_format`. -Use this column type for multi-turn conversations, preference judges, and any output that must conform to a schema. - -```yaml -- name: conversation - type: llm_structured - model_alias: nvidia-text - prompt: | - Generate a support conversation for customer {{ customer_name }}... - output_format: - type: object - properties: - messages: - type: array - ... - required: [messages] -``` - -| Field | Required | Description | -|---|---|---| -| `name` | yes | Column name. | -| `model_alias` | no | Alias from `models`. Default: `nvidia-text`. | -| `prompt` | yes | Jinja2 template. | -| `output_format` | yes | JSON Schema dict describing the expected output structure. | - -### LLM Judge Columns - -This type is an alias for `llm_structured`. -This type is typically used for columns that compare or evaluate other columns. - -```yaml -- name: judge - type: llm_judge - model_alias: nvidia-text - prompt: | - Compare response A and B for: {{ prompt }} - A: {{ response_a }} - B: {{ response_b }} - output_format: - type: object - properties: - winner: - type: string - enum: [A, B] - required: [winner] -``` - -## output_projection - -This top-level field maps raw Data Designer records into the schema expected by downstream steps. -Refer to {doc}`output-projections` for full field tables and annotated JSONL examples for each type. - -| `type` | Use for | Downstream | -|---|---|---| -| `openai_messages` | Single-turn SFT chat | `data_prep/sft_packing`, AutoModel SFT | -| `dpo_preference` | Preference pairs | `data_prep/rl_prep`, `rl/nemo_rl/dpo` | -| `structured_messages` | Multi-turn with tool calls | `data_prep/sft_packing`, AutoModel SFT | - -## Extending the Schema: `person` and `datetime` Samplers - -The current `step.py` supports the column types above. To use Data Designer's locale-aware person sampler or datetime sampler, `step.py`'s `build_columns()` function must be extended with `person` and `datetime` branches. A reference implementation showing both additions is in: - -```{literalinclude} ../_snippets/input/step-with-person-datetime.py -:language: python -:start-at: " elif kind == \"person\":" -:end-before: " elif kind == \"seed\":" -``` - -Once merged, configs can declare: - -```yaml -- name: traveler - type: person - locale: en_US - age_range: [22, 75] - with_synthetic_personas: true - -- name: booking_date - type: datetime - start: "2024-01-01" - end: "2025-12-31" -``` - -Download personas for the locale before running: - -```console -$ data-designer download personas --locale en_US -``` - -## Related Information - -- {doc}`output-projections` тАФ projection field reference and JSONL examples. -- {doc}`cli-reference` тАФ flags and hydra override syntax. -- {doc}`../how-to/run` тАФ preview and generate workflow. diff --git a/docs/sdg/reference/index.md b/docs/sdg/reference/index.md deleted file mode 100644 index 2e4becd39..000000000 --- a/docs/sdg/reference/index.md +++ /dev/null @@ -1,68 +0,0 @@ - - -(sdg-reference-index)= -# SDG Reference - -Complete specifications for the SDG pipeline. For pipeline overview and when to use it, refer to {doc}`../index`. - -::::{grid} 1 2 2 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} {octicon}`file-code;1.5em;sd-mr-1` Config Schema -:link: config-schema -:link-type: doc -All YAML fields: top-level settings, seed dataset, model aliases, column types, and output projections. -+++ -{bdg-secondary}`lookup` -::: - -:::{grid-item-card} {octicon}`terminal;1.5em;sd-mr-1` CLI Reference -:link: cli-reference -:link-type: doc -`nemotron steps run sdg/data_designer` flags and hydra override syntax. -+++ -{bdg-secondary}`lookup` -::: - -:::{grid-item-card} {octicon}`arrow-switch;1.5em;sd-mr-1` Output Projections -:link: output-projections -:link-type: doc -The three projection shapes with annotated JSONL examples. -+++ -{bdg-secondary}`lookup` -::: - -:::{grid-item-card} {octicon}`alert;1.5em;sd-mr-1` Troubleshooting -:link: troubleshooting -:link-type: doc -Failure modes for local runs and cluster dispatch. -+++ -{bdg-secondary}`lookup` -::: - -:::: - -```{toctree} -:hidden: -:maxdepth: 1 - -config-schema -cli-reference -output-projections -troubleshooting -``` diff --git a/docs/sdg/reference/output-projections.md b/docs/sdg/reference/output-projections.md deleted file mode 100644 index a3ec2a670..000000000 --- a/docs/sdg/reference/output-projections.md +++ /dev/null @@ -1,150 +0,0 @@ - - -(sdg-output-projections)= -# Output Projections - -The `output_projection` block in a config maps raw Data Designer records into the schema expected by downstream training steps. Each projection type extracts specific columns and writes one JSON object per line. - -## OpenAI Messages - -Produces single-turn OpenAI chat-format records. Use for SFT chat data that feeds `data_prep/sft_packing` or AutoModel SFT. - -**YAML**: - -```yaml -output_projection: - type: openai_messages - user_field: user_query # column containing the user turn - assistant_field: assistant_response # column containing the assistant turn - metadata_fields: [persona, topic] # additional columns to include at top level -``` - -**Output** (one JSON object per line): - -```json -{ - "messages": [ - {"role": "user", "content": "How do I calibrate the sensor threshold?"}, - {"role": "assistant", "content": "Set the threshold in the device settings under Calibration тЖТ Sensor Range. A value of 0.85 works well for most environments."} - ], - "persona": "engineer", - "topic": "industrial sensor calibration" -} -``` - -Fields: - -| Field | Required | Description | -|---|---|---| -| `type` | yes | `"openai_messages"` | -| `user_field` | yes | Column name for the user message content | -| `assistant_field` | yes | Column name for the assistant message content | -| `metadata_fields` | no | List of additional column names to include at the top level | - -## DPO Preference - -Produces preference triples for DPO training. Use with `rl_pref.yaml` and the `llm_judge` column pattern. Output feeds `data_prep/rl_prep`. - -**YAML**: - -```yaml -output_projection: - type: dpo_preference - prompt_field: prompt # column containing the input prompt - response_a_field: response_a # column containing the first candidate response - response_b_field: response_b # column containing the second candidate response - judge_field: judge # column containing the judge's structured output - winner_field: winner # key inside the judge output that holds "A" or "B" -``` - -**Output** (one JSON object per line): - -```json -{ - "prompt": "Explain why retrieval-augmented generation can reduce hallucinations in enterprise assistants.", - "chosen": "RAG grounds the model in retrieved passages, so factual claims are tied to source documents rather than purely to learned weights.", - "rejected": "RAG is better because it uses the internet and knows more things than a regular model." -} -``` - -Fields: - -| Field | Required | Description | -|---|---|---| -| `type` | yes | `"dpo_preference"` | -| `prompt_field` | yes | Column name for the input prompt | -| `response_a_field` | yes | Column name for candidate A | -| `response_b_field` | yes | Column name for candidate B | -| `judge_field` | yes | Column name for the judge's structured output | -| `winner_field` | yes | Key within the judge output JSON that holds `"A"` or `"B"` | - -The projection raises `ValueError` if `winner` is not `"A"` or `"B"`. The `llm_judge` column must be configured to return exactly this structure. - -## Structured Messages - -Produces multi-turn records with `messages` and an optional `tools` array. -The shipped `customer_support_tools.yaml` config generates this shape with an `llm_text` column that returns a JSON object; `llm_structured` columns can also feed this projection when their output is a mapping with the same fields. -Output feeds `data_prep/sft_packing` or AutoModel SFT. - -**YAML**: - -```yaml -output_projection: - type: structured_messages - source_field: conversation # column containing the structured JSON object - messages_field: messages # key inside the structured object for the messages array - tools_field: tools # key inside the structured object for the tools array - metadata_fields: [customer_name, issue, urgency, channel] -``` - -**Output** (one JSON object per line): - -```json -{ - "messages": [ - {"role": "system", "content": "You are a helpful ecommerce support agent."}, - {"role": "user", "content": "I haven't received my order yet."}, - {"role": "assistant", "content": "", "tool_calls": [{"id": "call_001", "type": "function", "function": {"name": "lookup_order", "arguments": "{\"order_id\":\"ORD-10492\"}"}}]}, - {"role": "tool", "tool_call_id": "call_001", "name": "lookup_order", "content": "{\"status\":\"delayed\",\"eta\":\"tomorrow\"}"}, - {"role": "assistant", "content": "Your order is delayed and will arrive tomorrow. I can arrange an expedited replacement if needed."} - ], - "tools": [{"type": "function", "function": {"name": "lookup_order", "description": "Look up order status by ID.", "parameters": {"type": "object", "properties": {"order_id": {"type": "string"}}, "required": ["order_id"]}}}], - "customer_name": "Priya", - "issue": "late delivery", - "urgency": "frustrated", - "channel": "web_chat" -} -``` - -Fields: - -| Field | Required | Description | -|---|---|---| -| `type` | yes | `"structured_messages"` | -| `source_field` | yes | Column containing the structured JSON conversation object | -| `messages_field` | no | Key in `source_field` for the messages array. Default: `"messages"` | -| `tools_field` | no | Key in `source_field` for the tools array. Omitted from output if not present in the record | -| `metadata_fields` | no | List of additional column names to include at the top level | - -The `source_field` column value may be a JSON string or a dict; both are handled. - -## Related Information - -- {doc}`config-schema` тАФ Full YAML config field reference. -- {doc}`../how-to/tool-call-data` тАФ Using `structured_messages` with `customer_support_tools.yaml`. -- {doc}`../how-to/preference-data` тАФ Using `dpo_preference` with `rl_pref.yaml`. diff --git a/docs/sdg/reference/troubleshooting.md b/docs/sdg/reference/troubleshooting.md deleted file mode 100644 index dc07f594a..000000000 --- a/docs/sdg/reference/troubleshooting.md +++ /dev/null @@ -1,112 +0,0 @@ - - -(sdg-troubleshooting)= -# Troubleshooting - -Failure modes for local runs and cluster dispatch. For cluster-specific setup, see {doc}`../how-to/dispatch-to-cluster`. - -## Local Run Failures - -::::{dropdown} `Unknown column type: 'person'` or similar ValueError - -**Cause**: The YAML declares a column `type` that `step.py`'s `build_columns()` does not recognise. Currently supported types: `category`, `seed`, `llm_text`, `llm_structured`, `llm_judge`. - -**Solution**: Check the spelling. For `person` and `datetime` sampler support, `step.py` must be extended тАФ see the extension reference in {doc}`config-schema`. -:::: - -::::{dropdown} `config must declare a non-empty columns: list` - -**Cause**: The YAML has an empty or missing `columns:` block. - -**Solution**: Add at least one column spec. A minimal config must include at least one `llm_text` or `llm_structured` column that produces output content. -:::: - -::::{dropdown} `Jinja2` template references an undefined variable - -**Cause**: A prompt uses `{{ column_name }}` but `column_name` is neither a declared column, a seed field in `seed_dataset.fields`, nor an earlier column in the list. - -**Solution**: Add the column or seed field, or fix the typo. Run `preview=true num_records=2` to catch this cheaply before a full generation job. -:::: - -::::{dropdown} Model health check fails at startup - -**Cause**: Data Designer probes the model endpoint at startup. If the model is not available from the configured provider, or if `NVIDIA_API_KEY` is not set, the probe fails and the step exits before generating any records. - -**Solution**: -- Confirm `export NVIDIA_API_KEY="..."` is set. -- Add `skip_health_check: true` to the model spec to bypass the probe (useful for local or vLLM endpoints that aren't in the provider catalog). -:::: - -::::{dropdown} Output JSONL is empty or has fewer records than `num_records` - -**Cause**: Data Designer skips or drops records where the structured output doesn't validate against `output_format`, or where the LLM returns a refusal. - -**Solution**: -- Run `preview=true` and inspect a sample for refusals or schema mismatches. -- Simplify the `output_format` if the model consistently fails to match a complex schema. -- Raise `max_tokens` if responses are being cut off mid-JSON. -:::: - -## Cluster Dispatch Failures - -::::{dropdown} Job exits immediately with `No such file or directory` (launch script) - -**Cause**: `nemo_run_dir` is not on shared storage. The data-mover sidecar writes the launch script to `nemo_run_dir`, but the main container cannot see it if the path is local to a different node or not mounted. - -**Solution**: Set `nemo_run_dir` to a path on the shared NFS mount and add the corresponding `mounts` entry to the env.toml profile. See {doc}`../how-to/dispatch-to-cluster`. -:::: - -::::{dropdown} `data-designer` import error inside the container - -**Cause**: The NeMo container image does not pre-install `data-designer`. - -**Solution**: Add to `startup_commands`: - -```toml -startup_commands = [ - "python -m pip install --quiet --break-system-packages 'data-designer==0.5.5'" -] -``` -:::: - -::::{dropdown} Job rejected or OOM-killed immediately on a CPU node - -**Cause**: The default `shared_memory_size` (65536 MB) exceeds the available RAM on the CPU node type. - -**Solution**: Set `shared_memory_size = 1024` in the env.toml profile. The SDG step makes no use of shared memory. -:::: - -::::{dropdown} `NVIDIA_API_KEY` not available inside the container - -**Cause**: `NVIDIA_API_KEY` is not automatically forwarded to the job environment the way `HF_TOKEN` and `WANDB_API_KEY` are. - -**Solution**: Declare it explicitly in the env.toml profile: - -```toml -[lepton_sdg_data_designer.env_vars] -NVIDIA_API_KEY = "${oc.env:NVIDIA_API_KEY}" -``` - -And set it in your shell before submitting: `export NVIDIA_API_KEY="..."`. -:::: - -## Related - -- {doc}`../how-to/dispatch-to-cluster` тАФ Full cluster setup walkthrough. -- {doc}`cli-reference` тАФ Flags and hydra overrides. -- {doc}`config-schema` тАФ YAML field reference. diff --git a/docs/sdg/using-skills.md b/docs/sdg/using-skills.md deleted file mode 100644 index e6ff35adc..000000000 --- a/docs/sdg/using-skills.md +++ /dev/null @@ -1,90 +0,0 @@ - - -(sdg-using-skills)= -# Use the SDG Skill With Confidence - -This page is for newcomers to model training and new to *synthetic data generation (SDG)*. -The main goal is to help you run a productive, efficient session with a coding agent: less back-and-forth, fewer clarifying questions, and clearer handoffs between what you decide and what the agent edits in the repository. - -This page aligns with the `nemotron steps run sdg/data_designer` command. -Use an agent to translate your intent into the right YAML, seed files, and `nemotron` commands. - -## Keeping an Agent Session Productive - -Provide a short brief you write yourself, not something the agent drafts for you: - -```{div} sd-font-italic sd-font-weight-lighter -- "We need data for a model that can answer short questions about our companyтАЩs travel and expense policy." -- "I need multi-turn conversations for a retail support bot that can call tools such as order lookup and return eligibility. The tone must be friendly and concise." -``` - -Ask the agent to start from shipped configs and the {doc}`getting-started` flow unless there is a strong reason to invent a new layout. - -If you want a reusable shape, you can copy the following block into the chat and fill in the bracketed lines. - -```text -Context: [product or domain in one sentence] -Goal for this session: [one outcome, for example ten seed ideas or a preview command that works] -тАЬGoodтАЭ means: [two bullets] -Hard limits: [language, tone, privacy, or тАЬdo not touch cluster dispatch yetтАЭ] -Please: [one request]. Use Nemotron SDG defaults from the repo unless something blocks that. -``` - -## What Success Looks Like on Day One - -A reasonable first success is a small preview run that writes plausible rows to `output_path`, plus a short list of seed ideas you believe are on-brand for your domain. -If you have that, you are already operating SDG: iterate small, then scale record counts. - -The hands-on path is {doc}`getting-started`. -When you are ready to attach your own domain, follow {doc}`how-to/create-domain-dataset`. - -## Where Domain-Specific Ideas Come From - -Seed data can be short anchors that tell the generator which slice of the world each row should reflect. -A newcomer can build a first seed list the same way a product owner scopes a feature. - -Runbooks, internal FAQs, and training decks can inspire situations when policy allows. -If you cannot paste source text, a neutral rewrite still carries domain truth, for example тАЬpartial refund after a split shipmentтАЭ instead of a ticket ID. - -Standards, regulator explainers, textbooks, and course outlines supply topics and jargon. -Your operator value is the twist that matches your product, not the generic paragraph anyone could find online. - -## Ask the Agent to Propose, Then You Curate - -Paste a product brief or policy summary and then ask for candidate seed lines. -The opening brief in the section above keeps this step short: one propose-and-curate round per session is usually enough before you run a preview again. - -## Staying Grounded on Policy and Quality - -Check licensing and confidentiality before you drop internal documents into an agent or into a seed file. -Keep evaluation benchmarks separate from training seeds so synthetic items do not leak into the set you use to claim quality. -Skim `src/nemotron/steps/sdg/SKILL.md` for the short list of pattern links on blending, versioning, and benchmarks when you move past experiments. - -## How SKILL.md Fits Your Session - -`src/nemotron/steps/sdg/SKILL.md` is written for assistants that route work into the right shipped YAML profile and guardrails. -You do not need to memorize it. - -Skim the decision table once so you know which bundled config matches which need, then let the agent open that file when you change output format or scale record counts. -You can also say in the chat, тАЬfollow `src/nemotron/steps/sdg/SKILL.md` for SDG,тАЭ so guardrails land in the thread without a long lecture. - -## Next Steps - -- Run the tutorial: {doc}`getting-started`. -- Adapt seeds and YAML to your domain: {doc}`how-to/create-domain-dataset`. -- Look up flags and fields when the agent names them: {doc}`reference/cli-reference` and {doc}`reference/config-schema`. diff --git a/docs/steps/airgap.md b/docs/steps/airgap.md deleted file mode 100644 index 5569fdf6e..000000000 --- a/docs/steps/airgap.md +++ /dev/null @@ -1,150 +0,0 @@ - - -(steps-airgap)= -# Run Nemotron Steps in an Airgap Environment - -This page describes how to run Nemotron steps in an *airgap environment*: a cluster or account boundary where training jobs cannot rely on the public internet for downloads, package indexes, or external APIs unless you explicitly provide replacements. - -A build process under `deploy/nemotron-customizer/airgap/` runs on a *networked host* and produces container images and a manifest for the steps in `src/nemotron/steps/`. -You transfer those artifacts into the airgap environment, then submit jobs as usual with `nemotron steps`. -A short checklist at the end of this page covers the storage, secrets, and providers you must manage for the environment. - -For definitions of *step*, *configuration*, *environment profile*, and *artifact*, see [Nemotron Steps Basics](basics.md). - -## Before You Start - -Confirm two things before you start the build process. - -- Docker is installed and can pull `nvcr.io` and Docker Hub images on the networked host. -- The networked host has disk space under `deploy/nemotron-customizer/airgap/out/` for the image TAR files you plan to produce. - Each image TAR file is several gigabytes. -- You [explored the Nemotron CLI](./getting-started.md). - -## Procedure: Build and Run the Airgap Bundle - -Follow these phases in order and on the specified host. - -### Networked Host: Choose the Steps to Cover - -You decide which steps the build process covers by editing the `workflow.stages` field in `airgap.yaml`. -The default value targets a small supervised fine-tuning workflow. - -1. Edit `deploy/nemotron-customizer/airgap/airgap.yaml`. -2. In `workflow.stages`, add the `` steps to run, such as `translate/nemo_curator:default`, and remove the rest. - - Prerequisites steps are automatically added from the `dependencies` map. - For example, an `sft/megatron_bridge:tiny` step also produces an image that covers `data_prep/sft_packing`. - -If you would rather not edit the file, leave `workflow.stages` as is and specify `--target :` one or more times in the next phase to override the file. - -### Networked Host: Plan the Bundle - -1. From the repository root, run a plan-only pass. - - ```console - $ uv run python deploy/nemotron-customizer/airgap/runner.py \ - --config deploy/nemotron-customizer/airgap/airgap.yaml - ``` - - Review the `[airgap]` section at the end of the output. - Confirm the images and steps match the steps you specified. - The following example is for the `translate/nemo_curator` and `sft/megatron_bridge` steps. - The `data_prep/sft_packing` step is a dependency. - - ```text - ... - [airgap] wrote /home/user/nemotron/deploy/nemotron-customizer/airgap/out/airgap-manifest.yaml - [airgap] selected execution images: - - translate/nemo_curator: nemotron-customizer-nemo-curator-airgap-4dd4fef4:latest - - data_prep/sft_packing: nemotron-customizer-nemo-megatron-airgap-55d08ccf:latest - - sft/megatron_bridge: nemotron-customizer-nemo-megatron-airgap-2fea0796:latest - ``` - -### Networked Host: Build and Export Images - -Some steps clone or expect a repository checkout at runtime by default. -The `sft/megatron_bridge`, `peft/megatron_bridge`, `byob/mcq`, and `translate/nemo_curator` configs use `auto_mount` entries that the build process embeds in the relevant execution image so airgapped jobs do not clone from GitHub. -The `optimize/modelopt/prune` and `optimize/modelopt/distill` steps expect ModelOpt examples under `/opt/Model-Optimizer` and will try to clone `https://github.com/NVIDIA/Model-Optimizer.git` if the checkout is absent; in an airgap, use an execution image or mount that already contains that checkout. - -1. Confirm the target CPU architecture matches what you build on the networked host, or set `platform` on the relevant entry in `airgap.yaml` when they differ. - - ```yaml - launcher_image: - platform: linux/amd64 - - execution_images: - nemo-megatron: - platform: linux/amd64 - ``` - -2. Run the execute pass. - - ```console - $ uv run python deploy/nemotron-customizer/airgap/runner.py \ - --config deploy/nemotron-customizer/airgap/airgap.yaml \ - --execute - ``` - -3. If a run stops halfway, rerun the command. - - If you change the workflow or image plan, delete `airgap-build-state.yaml` before rerunning. - Otherwise, the build process reuses the stale state. - -4. Collect `airgap-manifest.yaml`, launcher and execution image TAR files, and any generated requirements or repository-overlay metadata from the `deploy/nemotron-customizer/airgap/out/` directory. - -### Transfer and Load Inside the Airgap Environment - -1. Transfer the image TAR files and the manifest into the airgap environment by using a tool, such as `scp` or `rsync`. -2. Load images into the cluster container runtime or private registry your executor uses. -3. Stage large artifacts on executor-visible persistent storage. - They were not embedded in the images at build time. - These artifacts include model weights, datasets, checkpoints, tokenizer files, and customer data. -4. Reference those paths through configuration overrides and `run.env.mounts` in your environment profile. - -### Inside the Airgap Environment: Submit Jobs - -1. Open `airgap-manifest.yaml` and read the image tag or digest under `step_execution_images` for each step you run. -2. For the steps that embed a repository at build time, override `run.env.mounts` to an empty list at submit time. - - ```yaml - run: - env: - mounts: [] - ``` - - The shipped overlay configs under `deploy/nemotron-customizer/airgap/configs/` do this for `sft/megatron_bridge`. -3. Submit with `nemotron steps` and specify `run.env.container_image` to the manifest value. - - ```console - $ nemotron steps run \ - -c \ - -b \ - run.env.container_image= - ``` - -4. If you operate an internal Hugging Face mirror or need the Hugging Face Hub reachable from inside the airgap environment, override the Dockerfile defaults using your profile `env_vars`. - -:::{note} -The execution Dockerfiles set `HF_HUB_OFFLINE=1`, `TRANSFORMERS_OFFLINE=1`, `HF_DATASETS_OFFLINE=1`, and `WANDB_MODE=offline` so airgap runs do not reach out to public services by default. -Those are upstream environment variable names from Hugging Face and Weights & Biases. -::: - -## Cluster Checklist - -Use this short list after you load the bundle and before you submit production jobs. -It covers what stays your responsibility at the cluster, regardless of how the images were built. - -- Mount read-only storage for corpora, benchmarks, and pretrained checkpoints, and read-write storage for outputs. -- Replace any Hugging Face Hub identifier in your configuration with a filesystem path on a shared mount when the Hugging Face Hub is not reachable from the airgap environment. -- Update model provider configurations, such as `sdg/data_designer`, to an endpoint reachable from inside the airgap environment, such as a vLLM instance on the local network. -- Provide secrets through environment variables your executor injects, not through files committed to the repository. -- Run `nemotron steps show --json` and confirm every `consumes` entry maps to a local path or a mounted artifact before you submit. - -## Related Material - -- `deploy/nemotron-customizer/airgap/README.md` for full airgap mechanics, pip cache volumes, and architecture notes. -- [Nemotron Steps Basics](basics.md) for environment profiles and mounts. -- Domain references for steps you run, for example [Model Training](../train-models/index.md), [Synthetic Data Generation](../sdg/index.md), and [Model Evaluation](../model-eval/index.md). diff --git a/docs/steps/basics.md b/docs/steps/basics.md deleted file mode 100644 index 41fa8795c..000000000 --- a/docs/steps/basics.md +++ /dev/null @@ -1,146 +0,0 @@ - - -(steps-basics)= -# Nemotron Steps Basics - -This page defines the building blocks of the `nemotron steps` CLI. -You do not need to read it to invoke a single command, but every domain section in the documentation assumes that you already understand these definitions. - -## What a Step Is - -A *step* is a named unit of work with a stable identifier, such as `sft/automodel`, `byob/mcq`, or `optimize/modelopt/quantize`. -Each step packages four things: - -- A description of the work the step performs. -- The artifacts the step *consumes*, such as a chat-formatted JSON Lines (JSONL) dataset or a Megatron checkpoint. -- The artifacts the step *produces*, such as a Hugging Face checkpoint or a Parquet benchmark. -- One or more named configurations that supply parameter values. - -The step identifier is the only piece of information you need to invoke a job. -Steps live under `src/nemotron/steps/` in the source tree, and the CLI discovers them at startup. -Use `nemotron steps list` to see every available step, and use `nemotron steps show ` to inspect a single step. - -## Configurations - -A *configuration* is a named set of parameter values for a step, such as `tiny` or `default`. -A configuration sets values like the dataset path, the base model identifier, the batch size, the number of training steps, and the parallelism strategy. - -Every step that runs at production scale ships at least two configurations: - -- `tiny` runs a short job that exercises the plumbing without consuming meaningful compute. - Use `tiny` to confirm that the step starts, that the data path is wired, and that the cluster accepts the submission. -- `default` runs a production-shape job. - Use `default` as the starting point for real work, and override individual values from the command line when needed. - -You select the configuration with the `-c` option. -You can supply ad hoc overrides as trailing `key=value` dotlist arguments on the same command line. - -## Environment Profiles - -An *environment profile* is a named description of an execution target. -A profile sets the container image, the node count, the resource shape, the mount points, and any cluster-specific startup commands. - -You select the profile in one of three ways: - -- Omit the `-r` and `-b` flags to run on the local machine. -- Pass `-r ` to run attached, where the CLI streams logs back to your terminal until the job ends. -- Pass `-b ` to run detached, where the CLI submits the job and returns immediately. - -The CLI reads profiles from a TOML file named `env.toml` at the repository root by default. -Set the `NEMOTRON_ENV_FILE` environment variable to point at a different profile file, such as `env.lepton.toml` or `env.slurm.toml`. -See [Execution Through NeMo Run](../nemo_runspec/nemo-run.md) for the full profile model, attached and detached execution, and cluster setup. - -### Generating Profile Files With the env Step - -The `env/env_toml` step generates and validates profile files from compact YAML templates. -Treat it as common infrastructure that other steps rely on, not as a workload step. -Use `env/env_toml` when you need to bootstrap an `env.lepton.toml` or `env.slurm.toml` from the bundled templates, add a new profile that inherits from an existing one, or validate that a profile satisfies the resource guardrails for Curator, Data Designer, Ray, or reinforcement learning (RL) steps. - -The following procedure generates a starter profile file, reviews it, and points the CLI at it. - -1. Choose the bundled configuration that matches your target. - Use `lepton` for Lepton AI, `slurm` for a Slurm cluster, or `dgxcloud` for NVIDIA DGX Cloud. - List the available configurations with the following command. - - ```console - $ nemotron steps show env/env_toml - ``` - -2. Run the step from the repository root so the output lands beside `pyproject.toml`. - The following command generates an `env.lepton.toml` from the `lepton` configuration. - - ```console - $ nemotron steps run env/env_toml -c lepton - ``` - - Substitute `-c slurm` or `-c dgxcloud` for the other targets. - The step writes to `env.lepton.toml`, `env.slurm.toml`, or `env.dgxcloud.toml` by default, and it refuses to overwrite an existing file. - If you intentionally want to regenerate, pass `force=true` on the command line. - -3. Open the generated TOML file and replace the site-specific values. - At minimum, set the node group, the resource shape, the workspace path, and the mount points. - For Slurm, also set the host, the user account, the partition, and the remote job directory. - Keep secrets out of the file and reference them through `${oc.env:VAR_NAME}` placeholders. - -4. Point the CLI at the generated file by exporting `NEMOTRON_ENV_FILE`. - - ```console - $ export NEMOTRON_ENV_FILE=env.lepton.toml - ``` - - Add the export to your shell profile if you always work against the same target. - Without the variable, the CLI looks for a plain `env.toml` at the repository root. - -5. Confirm a profile resolves before you launch real work. - Pick a step that already has a generated profile and run it with the `tiny` configuration. - - ```console - $ nemotron steps run sft/automodel -c tiny -r lepton_sft_automodel - ``` - - A successful submission proves that the CLI loaded the profile file, matched the named profile, and accepted the resource shape. - -After the file passes step (5), you can add new profiles by editing the YAML template under `src/nemotron/steps/env/env_toml/config/` and rerunning `nemotron steps run env/env_toml` with `force=true`. -Child profiles can use `extends` to inherit from an existing profile and override only the image, the mounts, the environment variables, or the resource shape that differ. - -## Artifacts Between Steps - -Steps chain together through *artifacts*. -An artifact is a typed payload, such as `training_jsonl`, `packed_parquet`, `binidx`, `checkpoint_hf`, `checkpoint_megatron`, or `eval_results`. -One step writes an artifact to a path you control, and a later step reads that same artifact as its input. - -The chain holds as long as the consumer accepts the producer's artifact type. -When two steps speak different layouts of the same idea, a `convert/*` step bridges the gap. -For example, `convert/megatron_to_hf` turns a `checkpoint_megatron` artifact into a `checkpoint_hf` artifact for deployment. - -You can list the producers and consumers of a given artifact type from the CLI: - -```console -$ nemotron steps list --produces training_jsonl -$ nemotron steps list --consumes training_jsonl -``` - -See [Getting Started With Steps](getting-started.md) for a guided tour of these commands. - -## Composing a Run - -The following command composes all three concepts into one invocation. - -```console -$ nemotron steps run sft/automodel -c tiny -r lepton_sft_automodel -``` - -The CLI reads the `sft/automodel` step, applies the `tiny` configuration, and submits the job to the cluster the `lepton_sft_automodel` profile describes. -Change the step identifier to choose a different unit of work. -Change the configuration to change parameter values without editing files. -Change the profile to move the same job to a different cluster. - -## Where To Go Next - -- [Getting Started With Steps](getting-started.md) walks through listing steps, inspecting inputs and outputs, and exploring the step graph from the CLI. -- [Model Training](../train-models/index.md) covers supervised fine-tuning, parameter-efficient fine-tuning, RL alignment, and post-training optimization. -- [Synthetic Data Generation](../sdg/index.md), [Translation](../translation/index.md), [Build MCQ Benchmarks](../build-benchmarks/index.md), and [Model Evaluation](../model-eval/index.md) each cover one family of steps end to end. -- [Execution Through NeMo Run](../nemo_runspec/nemo-run.md) describes profiles, attached and detached runs, and cluster setup. diff --git a/docs/steps/getting-started.md b/docs/steps/getting-started.md deleted file mode 100644 index 1130c3101..000000000 --- a/docs/steps/getting-started.md +++ /dev/null @@ -1,135 +0,0 @@ - - -(steps-getting-started)= -# Getting Started With Steps - -This guide walks through the basic CLI operations that you use to discover steps, inspect their inputs and outputs, and chain them into pipelines. -You do not need a cluster or a GPU to follow along. -Every command in this guide reads metadata only. - -If you have not read [Nemotron Steps Basics](basics.md), start there for the definitions of *step*, *configuration*, *environment profile*, and *artifact*. - -## Prerequisites - -- Python 3.10 or later. -- [uv](https://docs.astral.sh/uv/) installed and on your path. - -These prerequisites cover the basics for an introduction to using the steps. -For each activity, such as model training or data generation, refer to the getting started page of each activity for additional prerequisites. - -## Getting Access to the Nemotron CLI - -1. Clone the repository, if you haven't already: - - ```console - $ git clone https://github.com/NVIDIA-NeMo/Nemotron && cd Nemotron - ``` - - Run all commands from the repository root. - -1. Synchronize the common dependencies: - - ```console - $ uv sync - ``` - -1. Confirm you can run the CLI: - - ```console - $ uv run nemotron steps --help - ``` - -The output lists the step-catalog subcommands that this guide uses: `list`, `show`, and `run`. - -## List the Available Steps - -Use `nemotron steps list` to see every step that the CLI discovers. -The output is a table with the step identifier, the category, the consumed artifact types, the produced artifact types, and a short description. - -```console -$ uv run nemotron steps list -``` - -Each row in the table is one building block that you can run, inspect, or chain into a pipeline. - -### Filter by Category - -Pass `--category` to narrow the list to one family of steps. -For example, the following command shows only the supervised fine-tuning steps. - -```console -$ uv run nemotron steps list --category sft -``` - -The category matches the top-level folder under `src/nemotron/steps/`. -Common categories include `sft`, `peft`, `rl`, `pretrain`, `optimize`, `convert`, `data_prep`, `sdg`, `translate`, `curate`, `byob`, `eval`, and `env`. - -### Emit Machine-Readable JSON - -Pass `--json` to emit a JSON array instead of a table. -The JSON output is the same data the table renders, with no formatting noise, so it works well with `jq` and with agent tooling. - -```console -$ uv run nemotron steps list --json -$ uv run nemotron steps list --category sft --json | jq '.[].id' -``` - -The `--json` flag is available on both `nemotron steps list` and `nemotron steps show`. - -## Inspect a Single Step - -Use `nemotron steps show ` to print the manifest for one step. -The output includes the description, the consumed and produced artifacts with their types and descriptions, the parameters with their defaults and choices, and the run specification, which covers the launcher, the container image, the resource shape, and the default configuration. - -```console -$ uv run nemotron steps show sft/automodel -``` - -The same command in JSON form is the easiest way to read the full manifest programmatically. - -```console -$ uv run nemotron steps show sft/automodel --json -``` - -The JSON document includes a `consumes` array and a `produces` array. -Each entry has a `type`, a `required` flag, and a `description`. -These two arrays are the contract that connects one step to the next. - -## Chain Steps Through Artifacts - -Steps fit together because their consumed and produced artifact types match. -Use the `--produces` and `--consumes` filters on `nemotron steps list` to walk the building-block graph from either direction. - -To find every step that writes a `training_jsonl` artifact, run the following command. - -```console -$ uv run nemotron steps list --produces training_jsonl -``` - -The output lists the synthetic data generation and data preparation steps that emit training JSONL. - -To find every step that reads a `training_jsonl` artifact, run the following command. - -```console -$ uv run nemotron steps list --consumes training_jsonl -``` - -The output lists the fine-tuning and reinforcement-learning (RL) steps that take training JSONL as input. - -Together, the two queries show you which steps you can chain. -For example, the `sdg/data_designer` step produces `training_jsonl`, and the `sft/automodel` step consumes `training_jsonl`, so you can pipe the synthetic dataset directly into supervised fine-tuning without an intermediate conversion. - -The same pattern works for other artifact types, such as `packed_parquet`, `binidx`, `checkpoint_hf`, `checkpoint_megatron`, `checkpoint_lora`, `synthetic_jsonl`, `eval_results`, and `mcq_benchmark_parquet`. - -## Where To Go Next - -Pick the domain section that matches the work you have in mind. - -- [Synthetic Data Generation](../sdg/index.md) to generate chat data, tool-calling data, or preference pairs. -- [Translation](../translation/index.md) to translate corpora with optional faithfulness, accuracy, integrity, and translation-quality holistic (FAITH) scoring. -- [Build MCQ Benchmarks](../build-benchmarks/index.md) to generate a multiple-choice question benchmark from your own documents. -- [Model Training](../train-models/index.md) to fine-tune, align, or optimize a model. -- [Model Evaluation](../model-eval/index.md) to score a deployed checkpoint with standard benchmarks. diff --git a/docs/steps/index.md b/docs/steps/index.md deleted file mode 100644 index 1df941f05..000000000 --- a/docs/steps/index.md +++ /dev/null @@ -1,156 +0,0 @@ - - -(steps-index)= -# About Nemotron Steps - -A Nemotron *step* is a named, reusable unit of work that you invoke with the `nemotron steps` CLI. -Each step declares the artifacts it consumes, the artifacts it produces, and a set of named configurations that you can run on your laptop, on a single node, or on a cluster. -Steps are the building blocks of every Nemotron pipeline. - -This section is the entry point for the step model itself. -Use it to learn what a step is, to explore the available steps from the CLI, and to find the right domain section for the work you have in mind. - -## The Basics - -::::{grid} 1 2 2 2 -:gutter: 2 - -:::{grid-item-card} Nemotron Steps Basics -:link: basics -:link-type: doc - -Definitions of *step*, *configuration*, *environment profile*, and *artifact*. -Start here if you have not run a step before. -+++ -`Concepts` -::: - -:::{grid-item-card} Getting Started With Steps -:link: getting-started -:link-type: doc - -List the available steps, inspect their inputs and outputs, and chain steps together. -+++ -`Beginner` -::: - -:::: - -## Building Block Steps - -Pipelines are modular. -You can run a single step in isolation, and you can compose steps into longer flows. -The cards below group the available steps by the outcome they support. -Follow the link in each card for tutorials, how-to guides, concepts, and reference material in that domain. - -::::::{grid} 1 1 3 3 -:gutter: 2 - -:::::{grid-item} - -::::{grid} 1 -:gutter: 1 - -:::{grid-item-card} Synthetic Data Generation -:link: ../sdg/index -:link-type: doc - -Build your own dataset -^^^ - -Generate supervised fine-tuning (SFT) chat data, tool-calling data, or preference pairs with NeMo Data Designer. -Backed by the `sdg/data_designer` step. -::: - -:::{grid-item-card} Translation -:link: ../translation/index -:link-type: doc - -Translate JSON Lines or Apache Parquet corpora with NeMo Curator, with optional faithfulness, accuracy, integrity, and translation-quality holistic (FAITH) scoring. -Backed by the `translate/nemo_curator` step. -::: - -:::{grid-item-card} Data Curation and Preparation -:link: ../curate/index -:link-type: doc - -Filter raw text with `curate/nemo_curator`, then tokenize and shard it with the `data_prep/pretrain_prep`, `data_prep/sft_packing`, and `data_prep/rl_prep` steps. -Use the curation docs for JSONL filtering and the training docs for data preparation. -::: - -:::: - -::::: - -:::::{grid-item} - -::::{grid} 1 -:gutter: 1 - -:::{grid-item-card} Multiple-Choice Question Benchmarks -:link: ../build-benchmarks/index -:link-type: doc - -Build your own benchmarks -^^^ - -Generate a custom multiple-choice question (MCQ) benchmark from your own documents, with optional translation. -Backed by the `byob` step. -::: - -:::: - -::::: - -:::::{grid-item} - -::::{grid} 1 -:gutter: 1 - -:::{grid-item-card} Model Training -:link: ../train-models/index -:link-type: doc - -Build your own models -^^^ - -Pretrain, fine-tune, align, and optimize models with the `pretrain/`, `sft/`, `peft/`, `rl/`, `optimize/`, and `convert/` step families. -::: - -:::{grid-item-card} Model Evaluation -:link: ../model-eval/index -:link-type: doc - -Score a trained checkpoint on standard benchmarks with NeMo Evaluator. -Backed by the `eval/model_eval` step. -::: - -:::: - -::::: - -:::::: - -## Shared Infrastructure - -Every remote run depends on an *environment profile* that describes the cluster, the container image, the resource shape, and the mount points. -The `env/env_toml` step generates these profile files from compact YAML templates for Lepton or Slurm. -The Basics page covers profiles and the `env/env_toml` step in detail. - -## I Want To - -| Goal | Go To | -| --- | --- | -| Learn what a step, configuration, and profile are | [Nemotron Steps Basics](basics.md) | -| List the available steps from the CLI | [Getting Started With Steps](getting-started.md) | -| Run steps in an airgap environment | [Airgap](airgap.md) | -| Curate JSONL text | [Data Curation](../curate/index.md) | -| Generate synthetic training data | [Synthetic Data Generation](../sdg/index.md) | -| Translate a corpus | [Translation](../translation/index.md) | -| Build an MCQ benchmark | [Build MCQ Benchmarks](../build-benchmarks/index.md) | -| Fine-tune or align a model | [Model Training](../train-models/index.md) | -| Evaluate a model | [Model Evaluation](../model-eval/index.md) | -| Set up a Lepton or Slurm environment profile | [Nemotron Steps Basics](basics.md) | diff --git a/docs/train-models/_snippets/input/env.tmpl b/docs/train-models/_snippets/input/env.tmpl deleted file mode 100644 index 0b0a10c53..000000000 --- a/docs/train-models/_snippets/input/env.tmpl +++ /dev/null @@ -1,29 +0,0 @@ -[lepton_base] -executor = "lepton" -container_image = "nvcr.io/nvidia/nemo:25.11.nemotron_3_nano" -node_group = "" -nemo_run_dir = "/mnt/lustre-shared//experiments" -remote_job_dir = "/mnt/lustre-shared//output/functional" -workspace = "/mnt/lustre-shared" -ray_version = "2.48.0" -shared_memory_size = 65536 -pip_extras = ["typer", "rich", "pydantic-settings"] -mounts = [ - { from = "node-nfs:", path = "", mount_path = "/mnt/lustre-shared" } -] -env_vars = { - HF_TOKEN = "${oc.env:HF_TOKEN,''}", - HF_HOME = "/mnt/lustre-shared/hf", - WANDB_API_KEY = "${oc.env:WANDB_API_KEY,''}", - WANDB_PROJECT = "", - NVIDIA_API_KEY = "${oc.env:NVIDIA_API_KEY,''}", - RAY_DEDUP_LOGS = "0", - RAY_GRAFANA_IFRAME_HOST = "" -} - -[lepton_sft_automodel] -extends = "lepton_base" -container_image = "nvcr.io/nvidia/nemo-automodel:26.04" -resource_shape = "gpu.8xa100-80gb" -nodes = 2 -pip_extras = ["typer", "rich", "pydantic-settings", "omegaconf"] diff --git a/docs/train-models/_snippets/input/sample-messages.jsonl b/docs/train-models/_snippets/input/sample-messages.jsonl deleted file mode 100644 index f9db43000..000000000 --- a/docs/train-models/_snippets/input/sample-messages.jsonl +++ /dev/null @@ -1,16 +0,0 @@ -{ - "messages": [ - { - "role": "system", - "content": "You answer arithmetic questions in one sentence." - }, - { - "role": "user", - "content": "What is twelve times seven?" - }, - { - "role": "assistant", - "content": "Twelve times seven is eighty-four." - } - ] -} diff --git a/docs/train-models/_snippets/output/gs-show.txt b/docs/train-models/_snippets/output/gs-show.txt deleted file mode 100644 index afa515dfb..000000000 --- a/docs/train-models/_snippets/output/gs-show.txt +++ /dev/null @@ -1,22 +0,0 @@ -тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА sft/automodel тАФ SFT Training (AutoModel) тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА -~/nemotron/src/nemotron/steps/sft/automodel - -Supervised fine-tuning with the AutoModel stack for HF-format models and JSONL -datasets that already use OpenAI chat-format messages. Supports full SFT and -LoRA-style adapter tuning from the same step. - -Consumes - тАв training_jsonl тАФ Instruction data in JSONL with a messages field - -Produces - тАв checkpoint_hf тАФ HuggingFace checkpoint directory (full model or adapter-style PEFT output) - -Parameters - тАв peft (default=null) тАФ Use 'lora' for adapter tuning, or 'null' for full fine-tuning. - -Runspec - launcher: torchrun - image: - - resources: nodes=1 gpus_per_node=4 - config dir: ~/nemotron/src/nemotron/steps/sft/automodel/config - default config: default diff --git a/docs/train-models/explanation/artifact-graph.md b/docs/train-models/explanation/artifact-graph.md deleted file mode 100644 index 184f01034..000000000 --- a/docs/train-models/explanation/artifact-graph.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Explains how training steps declare typed inputs and outputs, what the common training and alignment paths look like, and why tokenizer alignment matters across a pipeline." -topics: ["Training", "Explanation", "Concepts"] -tags: ["Artifact Graph", "Pipeline", "JSONL", "Checkpoint", "Tokenizer"] -content: - type: "Explanation" - difficulty: "Intermediate" - audience: ["ML Engineer", "Developer"] ---- - -# Artifact Graph - -For definitions of *artifact*, *step*, and how the CLI's `--produces` and `--consumes` filters let you walk the artifact graph, see [Nemotron Steps Basics](../../steps/basics.md). -This page focuses on the artifact types and common chains specific to model training. - -## Common Training Paths - -The supervised fine-tuning paths in the Nemotron pipeline follow one of the following two chains. - -- The Hugging Face line used by `sft/automodel`: `training_jsonl` тЖТ `sft/automodel` тЖТ `checkpoint_hf`. -- The packed Megatron line used by `sft/megatron_bridge`: `training_jsonl` тЖТ packing prep тЖТ `packed_parquet` тЖТ `sft/megatron_bridge` тЖТ `checkpoint_megatron`. - -A typical alignment path starts from a `checkpoint_megatron` policy, adds preference or reward-side data, runs one of the `rl/nemo_rl/...` steps, and produces a new `checkpoint_megatron`. - -A typical compression path starts from `checkpoint_hf`, runs `optimize/modelopt/quantize`, and produces `checkpoint_megatron`. -Add a conversion step after quantization when the next consumer needs a Hugging Face layout again. - -## Tokenizer and Chat Template Consistency - -Matching artifact types is not enough for correctness. -The tokenizer, the chat template, and the maximum sequence length must stay consistent across every step that tokenizes text or loads weights for the same model line. -A mismatch often appears as a plausible training loss curve with poor downstream quality. - -## Related Reading - -- [Nemotron Steps Basics](../../steps/basics.md) defines the concepts of *step*, *configuration*, *environment profile*, and *artifact*. -- [Training Basics](basics.md) defines the training-specific terms, including tokenizers and chat templates. -- [Data and Checkpoint Formats](../how-to/data-and-checkpoint-formats.md) describes the on-disk layouts of each artifact type. -- [Training Libraries](training-libraries.md) describes the ecosystem of libraries that back the steps. diff --git a/docs/train-models/explanation/basics.md b/docs/train-models/explanation/basics.md deleted file mode 100644 index 9f693f173..000000000 --- a/docs/train-models/explanation/basics.md +++ /dev/null @@ -1,102 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Plain-language introduction to fine-tuning approaches, tokenizers, datasets, and checkpoints. For the step, configuration, and environment profile model, see Nemotron Steps Basics." -topics: ["Training", "Explanation", "Concepts"] -tags: ["Beginner", "Explanation", "SFT", "PEFT", "RL", "Quantization", "Tokenizer", "Chat Template", "JSONL", "Checkpoint"] -content: - type: "Explanation" - difficulty: "Beginner" - audience: ["ML Engineer", "Developer"] ---- - -# Training Basics - -This page defines the training-specific terms that the rest of the training documentation uses. -You do not need to read it to run a command, but every other page in this section assumes that you already understand these basics. -For the step, configuration, and environment profile model that every Nemotron command shares, see [Nemotron Steps Basics](../../steps/basics.md). - -## Training Approaches - -The Nemotron training pipeline packages four common training approaches. -This section defines each one in plain language. - -### Supervised Fine-Tuning - -*Supervised fine-tuning* (SFT) trains a base model on a dataset of instruction-and-response examples. -The training loop reads each example, asks the model to predict the desired response, and updates every weight in the model to lower the prediction error. -You start an SFT run from a base model checkpoint and a dataset of chat-formatted examples. -You finish with a fine-tuned checkpoint that prefers the response style your dataset modeled. -SFT is the usual first step after base pretraining when you adapt a model to a new task or domain. - -### Parameter-Efficient Fine-Tuning - -*Parameter-efficient fine-tuning* (PEFT) is fine-tuning that updates only a small number of new weights, called *adapter weights*, while keeping the base model weights frozen. -The most common form in the Nemotron pipeline is *low-rank adaptation* (LoRA), which inserts small matrices alongside the existing weight matrices and trains only those small matrices. -PEFT runs cost a fraction of full SFT in GPU memory and produce a small adapter artifact instead of a full model. -You can serve a PEFT adapter on top of the base model at inference time, or you can merge the adapter with the base model after training to produce a single deployable checkpoint. - -### Reinforcement Learning Alignment - -*Reinforcement learning* (RL) alignment is a follow-on training stage that takes a supervised fine-tuned model and improves it against a reward signal instead of fixed responses. -The model proposes its own responses, a scoring mechanism rates each one, and the training loop nudges the model toward higher-rated responses. -Different RL methods use different scoring mechanisms, but they all depend on a working SFT checkpoint to start from and a quality-controlled prompt or preference dataset. - -### Quantization - -*Quantization* lowers the numerical precision used to store model weights, for example, from sixteen-bit floating point to eight-bit floating point. -The quantized model uses less memory and runs faster on the hardware that supports the lower-precision math. -Quality drops a small amount in exchange. -You apply quantization after the model is fully trained and you have committed to a deployment target. -The choice of quantization recipe, such as `fp8` or `nvfp4`, depends on the target hardware. - -## Tokenizers and Chat Templates - -A *tokenizer* converts text strings into the integer identifiers the model consumes, and converts the model's output identifiers back into text. -Each model family ships with its own tokenizer. -A run that uses one tokenizer to prepare data and a different tokenizer to train will fail outright, or, worse, will train against meaningless input. -Keep the tokenizer aligned across every stage that touches the same model. - -A *chat template* is a small text-substitution recipe that the tokenizer applies to a multi-turn conversation before tokenization. -It inserts role markers such as `user` and `assistant`, any special start-of-turn and end-of-turn tokens, and any fixed system instructions. -The template ships with the tokenizer. -You do not write a chat template by hand for ordinary fine-tuning. -You do need to confirm that the conversation format of your dataset matches what the chosen tokenizer's template expects. - -## The Messages JSON Lines Format - -Most SFT and PEFT steps in this documentation consume chat-formatted *JSON Lines* (JSONL) datasets. -JSONL is one independent JSON object per line, with no enclosing array. -Each object has a single field named `messages` that holds an ordered list of conversation turns. -Each turn has a `role` of `system`, `user`, or `assistant`, and a `content` field with the turn's text. - -The following is one JSONL record covering a system instruction, a user question, and the assistant response. - -```{literalinclude} ../_snippets/input/sample-messages.jsonl -:language: json -``` - -A real dataset has one such line for every training example. -The training loop reads the file line by line, applies the model's chat template to each `messages` list, and treats the assistant turns as the prediction targets. - -## Checkpoints - -A *checkpoint* is a saved snapshot of a model's weights. -A checkpoint contains every numeric parameter the model uses to make predictions, in a serialization format the training and inference code can read back. -Most training steps in the Nemotron pipeline produce one of the following three checkpoint layouts. - -| Layout | When You Encounter It | What It Contains | -| --- | --- | --- | -| Hugging Face checkpoint | Output of SFT runs that use the NeMo AutoModel library. | A directory of safetensors files plus tokenizer files. The checkpoint is deployable as is to any Hugging Face inference runtime. | -| Megatron checkpoint | Output of Megatron-Bridge SFT runs, of RL runs, and of quantization runs. | A directory of distributed shards that match the parallelism settings of the training job. The checkpoint requires conversion to Hugging Face format before deployment to common inference runtimes. | -| LoRA adapter checkpoint | Output of every PEFT run. | A directory containing only the adapter weights. The adapter requires either the base model alongside it at inference time, or a merge step that combines the two into a deployable single-model checkpoint. | - -Two ground rules help avoid trouble. -Always keep the original base checkpoint together with any adapter you train against it. -Always record the tokenizer version that produced the data so the inference runtime picks up the same tokenizer at serving time. - -## Where To Go Next - -- [Nemotron Steps Basics](../../steps/basics.md) defines the *step*, *configuration*, and *environment profile* model that every training command uses. -- [Getting Started With Training Steps](../getting-started.md) walks through a first run. -- [Reference](../reference/index.md) lists every step, configuration, and command-line option. diff --git a/docs/train-models/explanation/index.md b/docs/train-models/explanation/index.md deleted file mode 100644 index cdcc11177..000000000 --- a/docs/train-models/explanation/index.md +++ /dev/null @@ -1,50 +0,0 @@ - - -(train-models-explanation-index)= -# Training Concepts - -This section provides conceptual material for training with Nemotron steps. -{doc}`basics` introduces fine-tuning approaches, tokenizers, the chat dataset format, and checkpoint layouts. -For the step, configuration, and environment profile model that every Nemotron command shares, see {doc}`../../steps/basics`. -The remaining pages explain how artifacts relate to one another and how the training libraries differ. - -::::{grid} 1 2 2 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} {octicon}`book;1.5em;sd-mr-1` Training Basics -:link: basics -:link-type: doc -Defines supervised fine-tuning, parameter-efficient fine-tuning, reinforcement learning alignment, quantization, tokenizers, the chat dataset format, and checkpoints. -+++ -{bdg-secondary}`concepts` -::: - -:::{grid-item-card} {octicon}`workflow;1.5em;sd-mr-1` Artifact Graph -:link: artifact-graph -:link-type: doc -Explains how steps declare typed inputs and outputs and what common training and alignment paths look like. -+++ -{bdg-secondary}`concepts` -::: - -:::{grid-item-card} {octicon}`package;1.5em;sd-mr-1` Training Libraries -:link: training-libraries -:link-type: doc -Explains which library backs each step and how that choice determines data format, checkpoint layout, and parallelism. -+++ -{bdg-secondary}`concepts` -::: - -:::: - -```{toctree} -:hidden: -:maxdepth: 1 - -basics -artifact-graph -training-libraries -``` diff --git a/docs/train-models/explanation/training-libraries.md b/docs/train-models/explanation/training-libraries.md deleted file mode 100644 index 81748769e..000000000 --- a/docs/train-models/explanation/training-libraries.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Explains which training library backs each Nemotron step, and how the choice of library determines data format, checkpoint layout, and parallelism conventions." -topics: ["Training", "Explanation", "Concepts"] -tags: ["Training Libraries", "NeMo AutoModel", "Megatron-Bridge", "NeMo RL", "Model Optimizer"] -content: - type: "Explanation" - difficulty: "Intermediate" - audience: ["ML Engineer", "Developer"] ---- - -# Training Libraries - -Each Nemotron training step delegates to a specific *training library*. -The library determines how the step loads models, how it reads data, and the native checkpoint layout it writes. -Different libraries impose different data formats, checkpoint formats, and parallelism conventions, so the choice of library shapes every step downstream of it. -The Nemotron training pipeline draws on an ecosystem of four libraries, described in the sections that follow. - -## NeMo AutoModel - -The steps `sft/automodel` and `peft/automodel` use the NeMo AutoModel library for training centered on Hugging Face conventions. -The expected input is JSON Lines (JSONL) files in OpenAI chat format, read directly without an intermediate packing step. -The output is a Hugging Face checkpoint directory that any Hugging Face inference runtime can load as is. - -## Megatron-Bridge - -The steps `sft/megatron_bridge` and `peft/megatron_bridge` use the Megatron-Bridge library for large distributed training runs. -The expected input is packed Apache Parquet produced by a separate packing step. -The output is a Megatron-format checkpoint, sharded to match the parallelism settings the run used. -A separate conversion step turns the Megatron output into a Hugging Face checkpoint when the next consumer expects that layout. - -## NeMo RL - -The steps under `rl/nemo_rl/` delegate to the NeMo RL library for reinforcement learning alignment algorithms. -Every NeMo RL step requires a supervised fine-tuned policy checkpoint in Megatron format as the warm start. -Different alignment algorithms have different reward sources and different dataset shapes, so the consumed artifact types vary per step. - -## NVIDIA Model Optimizer - -The steps under `optimize/modelopt/` call the NVIDIA Model Optimizer library, which runs alongside Megatron-Bridge for export. -*Quantization* lowers the numerical precision of model weights so the model uses less memory and runs faster on the target hardware. -*Pruning* removes weights or whole structural units to shrink the model. -*Distillation* transfers quality from a larger teacher checkpoint to a smaller student checkpoint. - -## Choosing a Library - -Use the relevant how-to guide to map your supervised fine-tuning (SFT), parameter-efficient fine-tuning (PEFT), or reinforcement learning (RL) requirements to a library. -Treat your library choice as long-term. -Switching from one library to another requires conversion steps and a new round of performance tuning, not a single configuration flag change. - -## Related Reading - -- [Training Basics](basics.md) defines the training approaches and the artifact types each library consumes and produces. -- [Choose an SFT Backend](../how-to/choose-sft-backend.md) compares the two SFT libraries side by side. -- [Execution through NeMo Run](../../nemo_runspec/nemo-run.md) describes how each library is launched at runtime. diff --git a/docs/train-models/getting-started.md b/docs/train-models/getting-started.md deleted file mode 100644 index c7933d257..000000000 --- a/docs/train-models/getting-started.md +++ /dev/null @@ -1,120 +0,0 @@ -# Getting Started with Training Steps - -This page walks through one supervised fine tuning (SFT) run on DGX Cloud Lepton using the *tiny* configuration. -The tiny configuration lives in `src/nemotron/steps/sft/automodel/config/tiny.yaml` and is meant for short validation before you scale work. -The goal is to validate end-to-end execution, NeMo Run, and your environment profile on real multi-node hardware. - -## Prerequisites - -- You need access to DGX Cloud Lepton with GPU nodes. - This path assumes two nodes with eight A100 80 GB GPUs per node, matching the `run.env` block in `src/nemotron/steps/sft/automodel/config/tiny.yaml`. -- You set the following environment variables: - - `HF_TOKEN` - - `WANDB_API_KEY` - - `NVIDIA_API_KEY` -- You ran `lep login` after syncronizing dependencies and are logged into Lepton. - -The preceding list applies to the steps on this page. -Refer to [](./index.md#limitations-and-restrictions) for information about supported environments. - -## Procedure - -1. Clone the repository, if you haven't already: - - ```console - $ git clone https://github.com/NVIDIA-NeMo/Nemotron && cd Nemotron - ``` - -1. Set the dependencies: - - ```console - $ uv sync - ``` - -1. Create an `env.toml` at the root of the repository like the following example: - - ```{literalinclude} _snippets/input/env.tmpl - :language: text - ``` - - ```{dropdown} Summary of the Config File - - The `[lepton_base]` table defines cluster fundamentals that every profile inherits: the executor, the base container image, the node group, shared-storage paths, the Ray runtime version, the shared-memory size, the Python package extras the Nemotron CLI needs, the cluster mount, and an `env_vars` block whose `${oc.env:VAR,''}` entries pull credentials from your shell at submit time. - The `[lepton_sft_automodel]` table extends the base and adds the AutoModel container image, the resource shape needed for full-parameter SFT, the node count, and the additional Python package extras the AutoModel runtime expects. - - Contact your cluster administrator for the values that replace the placeholders. - - - ``: The Lepton node group identifier for the cluster you have access to. - - ``: A directory you own on the shared mount where NeMo Run records each experiment. - - ``: The alias of the Lepton storage fileset that each container mounts. - - ``: The host path the fileset exposes. - - ``: The Weights & Biases project name the run reports to. - ``` - - Export `HF_TOKEN`, `WANDB_API_KEY`, and `NVIDIA_API_KEY` in your shell before submitting; the env file pulls them in without writing the values to disk. - - If you would rather generate a complete env file with every Nemotron training profile pre-wired, run the bundled environment profile generator instead of writing the file by hand. - - ```console - $ uv run nemotron steps run env/env_toml -c lepton output_path=env.toml force=true - ``` - - The generator emits every canonical profile the training steps expect, including data-prep, SFT, PEFT, RL, and pretrain variants. - -1. View the step manifest and run specification: - - ```console - $ uv run nemotron steps show sft/automodel - ``` - - ````{dropdown} Example Output - :icon: code-square - - ```{literalinclude} _snippets/output/gs-show.txt - ``` - ```` - -1. Compile the job against your Lepton profile without submitting it. - The profile name `lepton_sft_automodel` must match a table in your root `env.toml`. - - ```console - $ uv run nemotron steps run sft/automodel --config tiny --run lepton_sft_automodel --dry-run - ``` - - ````{dropdown} Partial Output - ```text - Compiled Configuration - - тХнтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА run тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтХо - тФВ env: тФВ - тФВ nodes: 2 тФВ - тФВ gpus_per_node: 8 тФВ - тФВ nprocs_per_node: 8 тФВ - тФВ executor: lepton тФВ - тФВ container_image: nvcr.io/nvidia/nemo-automodel:26.04 тФВ - тФВ node_group: az-sat-lepton-001 тФВ - тФВ resource_shape: gpu.8xa100-80gb тФВ - тФВ remote_job_dir: /mnt/lustre-shared/user/nemotron/.nemotron-jobs - ... - ``` - ```` - -1. Submit the sample SFT job: - - ```console - $ uv run nemotron steps run sft/automodel -c tiny -r lepton_sft_automodel - ``` - -The sample `tiny` config sets small training and validation splits. -To specify the output path for checkpoints, set `SFT_OUTPUT_DIR` before running or specify the `checkpoint.checkpoint_dir` CLI override. - -## Success Checks - -- The command `nemotron steps show ` lists `consumes` and `produces` artifact types. Those types must line up with your pipeline when you chain steps. -- A finished sample run leaves logs and job metadata where NeMo Run is configured to write them. See [Execution through NeMo Run](../nemo_runspec/nemo-run.md) for experiment layout. -- If you change tokenizer, template, or sequence length, keep them consistent across every step that touches the same model line. The [Artifact Graph](explanation/artifact-graph.md) page explains why consistency matters. - -## Next Steps - -- Follow [Run SFT with AutoModel on Custom Data](how-to/run-sft-automodel.md) when you need to point `tiny.yaml` at your own data or change the base model. -- Read [Choose an SFT Backend](how-to/choose-sft-backend.md) when you need Megatron Bridge instead of AutoModel. diff --git a/docs/train-models/how-to/choose-peft-backend.md b/docs/train-models/how-to/choose-peft-backend.md deleted file mode 100644 index 53d9f923e..000000000 --- a/docs/train-models/how-to/choose-peft-backend.md +++ /dev/null @@ -1,35 +0,0 @@ -# Choose a PEFT Backend - -Parameter-efficient fine tuning (PEFT) in Nemotron is implemented as dedicated steps that emit adapter checkpoints. Pick the backend that matches your base checkpoint format and your data path. - -## Options - -| Step id | Best when | Primary inputs | Primary output artifact | -|---------|------------|------------------|---------------------------| -| `peft/automodel` | You have a Hugging Face base, chat-formatted JSON Lines (JSONL), and a small GPU count | `training_jsonl` | `checkpoint_lora` | -| `peft/megatron_bridge` | You have a Megatron base checkpoint and packed Apache Parquet at scale | `packed_parquet`, `checkpoint_megatron` | `checkpoint_lora` | - -## Decision Flow - -1. If you have one to four graphics processing units (GPUs) and JSON Lines (JSONL) chat data, use `peft/automodel`. -2. If you have eight or more GPUs, you already run Megatron packing, and you train adapters on a Megatron base, use `peft/megatron_bridge`. -3. If deployment requires a merged Hugging Face model, plan `convert/merge_lora` after training. Add any Megatron to Hugging Face conversion step that your pipeline needs before merge. Adapter evaluation scores are not identical to merged model scores. - -## Sample Commands - -```console -$ uv run nemotron steps run peft/automodel -c tiny -$ uv run nemotron steps run peft/megatron_bridge -c tiny -``` - -The Megatron Bridge path needs compatible packed Parquet and a base `checkpoint_megatron` path that you set in training configuration. - -## Success Criteria - -- You version adapter artifacts with base model id, data blend, rank, alpha, and target module set so you can reproduce runs. -- You re-evaluate after merge when production uses merged weights. - -## Related Reading - -- [Choose an SFT Backend](choose-sft-backend.md) -- [Data and Checkpoint Formats](data-and-checkpoint-formats.md) diff --git a/docs/train-models/how-to/choose-rl-step.md b/docs/train-models/how-to/choose-rl-step.md deleted file mode 100644 index 25ad0cdf0..000000000 --- a/docs/train-models/how-to/choose-rl-step.md +++ /dev/null @@ -1,42 +0,0 @@ -# Choose an RL Alignment Step - -Post-training alignment with NeMo RL is split into three steps under `rl/nemo_rl/`. The table uses short names: direct preference optimization (DPO), reinforcement learning with verifiable rewards (RLVR) paired with group relative policy optimization (GRPO), and reinforcement learning from human feedback (RLHF). Choose a step based on how the reward signal enters training, not based on model family alone. - -## Options - -| Step id | Reward source | Typical data shape | Output | -|---------|---------------|-------------------|--------| -| `rl/nemo_rl/dpo` | Static preference pairs | Prompt with chosen and rejected completions | `checkpoint_megatron` | -| `rl/nemo_rl/rlvr` | Verifiable or programmatic checks | Prompt with answers, tests, or environment metadata | `checkpoint_megatron` | -| `rl/nemo_rl/rlhf` | Learned reward or judge model | Prompts plus a reward model checkpoint | `checkpoint_megatron` | - -All three steps consume a warm-start policy in `checkpoint_megatron` format produced by Megatron-style supervised fine tuning (SFT). They do not train a policy from scratch. - -## Decision Flow - -1. If you only have pairwise preferences and no online reward, use `rl/nemo_rl/dpo`. -2. If reward is deterministic, for example unit tests, answer match, or tool success, use `rl/nemo_rl/rlvr`. -3. If a separate reward model or judge produces scores, use `rl/nemo_rl/rlhf`. -4. For resource-server rewards or NeMo Gym style rewards, use the RLVR or RLHF configuration paths documented in each step `SKILL.md` file and YAML file. Some flows use `config/nemo_gym.yaml`. - -## Data Preparation - -When preference JSONL still contains Hugging Face placeholders or needs sharding resolution, run the RL prep step upstream. Inspect `data_prep/rl_prep` in the step tree. Read the manifest for your chosen `rl/nemo_rl/...` step for required `consumes` types. - -## Sample Commands - -```console -$ uv run nemotron steps run rl/nemo_rl/dpo -c tiny -$ uv run nemotron steps run rl/nemo_rl/rlvr -c tiny -$ uv run nemotron steps run rl/nemo_rl/rlhf -c tiny -``` - -## Success Criteria - -- You validate reward design on a small batch before you scale rollout count. -- You track KullbackтАУLeibler (KL) drift, reward variance, response length, and held-out task metrics. Average reward alone is not sufficient. - -## Related Reading - -- [Execution through NeMo Run](../../nemo_runspec/nemo-run.md) describes Ray-backed RL workloads on supported executors. -- [Training Libraries](../explanation/training-libraries.md) places NeMo RL in the wider library ecosystem. diff --git a/docs/train-models/how-to/choose-sft-backend.md b/docs/train-models/how-to/choose-sft-backend.md deleted file mode 100644 index 1402241d4..000000000 --- a/docs/train-models/how-to/choose-sft-backend.md +++ /dev/null @@ -1,38 +0,0 @@ -# Choose an SFT Backend - -Supervised fine tuning (SFT) is implemented by two interchangeable steps. Pick one step based on data format, checkpoint format, and scale. - -## Options - -| Step id | Best when | Primary input artifact | Primary output artifact | -|---------|-----------|------------------------|-------------------------| -| `sft/automodel` | You have OpenAI chat-formatted JSON Lines (JSONL), you want Hugging Face style checkpoints, or you want the smallest cluster footprint for iteration | `training_jsonl` | `checkpoint_hf` | -| `sft/megatron_bridge` | You need distributed Megatron Bridge training with packed sequences and an Apache Parquet pipeline | `packed_parquet` | `checkpoint_megatron` | - -## Decision Flow - -1. If your data is already chat-formatted JSON Lines (JSONL) and downstream tools expect Hugging Face safetensors, start with `sft/automodel`. -2. If your data is packed Parquet produced by the packing prep step, or you require Megatron distributed checkpoints without an export round trip, use `sft/megatron_bridge`. -3. If you start on one backend and later need the other output format, plan an explicit conversion step in your pipeline. Do not switch backends silently without conversion. - -## Prerequisites for Megatron Bridge - -Megatron Bridge SFT expects packed Parquet that is compatible with the tokenizer and sequence length you will use in training. The pack size in prep must match the training sequence length. If they diverge, you risk shape errors mid-run. - -## Sample Commands - -```console -$ uv run nemotron steps run sft/automodel -c tiny -$ uv run nemotron steps run sft/megatron_bridge -c tiny -``` - -## Success Criteria - -- The commands `nemotron steps show sft/automodel` and `nemotron steps show sft/megatron_bridge` list the `consumes` types your workspace must provide. -- Loss decreases on a small slice before you scale data or learning rate. -- Tokenizer, chat template, and sequence length stay aligned with evaluation and with any later reinforcement learning (RL) step that reuses the policy. - -## Related Reading - -- [Data and Checkpoint Formats](data-and-checkpoint-formats.md) -- [Artifact Graph](../explanation/artifact-graph.md) diff --git a/docs/train-models/how-to/convert-checkpoints.md b/docs/train-models/how-to/convert-checkpoints.md deleted file mode 100644 index 609821acf..000000000 --- a/docs/train-models/how-to/convert-checkpoints.md +++ /dev/null @@ -1,123 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "How to choose and run Nemotron checkpoint conversion steps between Hugging Face, Megatron, and LoRA adapter layouts." -topics: ["Training", "How-To", "Checkpoint Conversion"] -tags: ["How-To", "Checkpoints", "Conversion", "Hugging Face", "Megatron", "LoRA"] -content: - type: "How-To" - difficulty: "Intermediate" - audience: ["ML Engineer", "Developer"] ---- - -# Convert Checkpoints Between Training Steps - -Use a conversion step when one step produces a checkpoint layout that the next step cannot consume directly. -The converter is an explicit pipeline step, not an implicit side effect of training. - -## Choose the Converter - -| Source artifact | Target artifact | Step | -| --- | --- | --- | -| `checkpoint_hf` | `checkpoint_megatron` | `convert/hf_to_megatron` | -| `checkpoint_megatron` | `checkpoint_hf` | `convert/megatron_to_hf` | -| `checkpoint_lora` plus original base checkpoint | merged `checkpoint_hf` | `convert/merge_lora` | - -Common cases: - -- AutoModel SFT or PEFT produces Hugging Face layout checkpoints. Use `convert/hf_to_megatron` before Megatron-Bridge consumers that require Megatron layout. -- Megatron-Bridge SFT, RL, and some optimization steps produce Megatron distributed checkpoints. Use `convert/megatron_to_hf` before Hugging Face-native evaluation, deployment, or pruning flows. -- PEFT steps produce adapter checkpoints. Use `convert/merge_lora` when deployment or evaluation needs a single merged Hugging Face checkpoint. - -## Preflight Checks - -Before conversion: - -- Pick one validated checkpoint iteration. For Megatron exports, point `megatron_path` at the concrete `iter_*` checkpoint directory, not the parent run directory. -- Keep output paths separate from input paths. A failed conversion should never overwrite the source checkpoint. -- Keep tokenizer and chat-template provenance with the checkpoint. If the converter needs `hf_model_id`, use the original model or config source used by training. -- For LoRA merge, use the exact base checkpoint the adapter was trained against. - -## Convert Hugging Face to Megatron - -Use this path when a Megatron-Bridge consumer needs a Megatron distributed checkpoint. - -```console -$ nemotron steps run convert/hf_to_megatron -c default \ - hf_model_id=/path/to/hf_checkpoint_or_model_id \ - megatron_path=/path/to/output_megatron_checkpoint -``` - -For NVIDIA Nemotron checkpoints, keep `dtype=bfloat16` unless the source checkpoint requires another dtype. - -## Convert Megatron to Hugging Face - -Use this path when the next consumer is Hugging Face-native evaluation, deployment, pruning, or a tool that expects safetensors. - -```console -$ nemotron steps run convert/megatron_to_hf -c default \ - megatron_path=/path/to/megatron/iter_0000100 \ - hf_model_id=nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16 \ - hf_path=/path/to/output_hf_checkpoint -``` - -The `hf_model_id` value supplies the model configuration and tokenizer expectations used to reconstruct the Hugging Face layout. - -## Merge LoRA Into a Hugging Face Base - -Use this path for adapters produced by Hugging Face-native PEFT flows. - -```console -$ nemotron steps run convert/merge_lora -c default \ - backend=hf_peft \ - lora_checkpoint=/path/to/adapter_checkpoint \ - base_hf_path=/path/to/original_hf_base \ - output_hf_path=/path/to/merged_hf_checkpoint -``` - -Do not merge into a different base model, even if the architecture name matches. - -## Merge Megatron-Bridge LoRA - -Use this path for adapters produced by Megatron-Bridge PEFT flows. -The step can write a merged Megatron checkpoint and export a Hugging Face checkpoint when `export_hf=true`. - -```console -$ nemotron steps run convert/merge_lora -c default \ - backend=megatron_bridge \ - lora_checkpoint=/path/to/lora_megatron_checkpoint \ - base_megatron_path=/path/to/original_dense_megatron_checkpoint \ - hf_model_id=nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16 \ - output_megatron_path=/path/to/merged_megatron_checkpoint \ - output_hf_path=/path/to/merged_hf_checkpoint -``` - -Use `tp`, `pp`, and `ep` overrides when the merge must match a specific tensor, pipeline, or expert parallel layout. - -## Run on a Cluster Profile - -Generated environment files include one shared conversion profile per executor family. -Use the profile that matches your site: - -```console -$ nemotron steps run convert/megatron_to_hf -c default --batch lepton_convert_model \ - megatron_path=/mnt/lustre-shared/output/sft/megatron_bridge/iter_0000100 \ - hf_model_id=nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16 \ - hf_path=/mnt/lustre-shared/output/convert/sft-hf -``` - -Equivalent profile names are `slurm_convert_model` for Slurm and `dgxcloud_convert_model` for DGX Cloud. - -## Validate the Output - -After conversion: - -- Confirm the output directory exists and contains model weights plus tokenizer/config files for Hugging Face outputs. -- Run a small generation or evaluation smoke test before using the checkpoint for a larger training or evaluation job. -- Preserve the source checkpoint until the converted checkpoint has passed validation. - -## Related Documentation - -- [Data and Checkpoint Formats](data-and-checkpoint-formats.md) -- [Artifact Graph](../explanation/artifact-graph.md) -- [Conversion Step References](../reference/convert/index.md) diff --git a/docs/train-models/how-to/data-and-checkpoint-formats.md b/docs/train-models/how-to/data-and-checkpoint-formats.md deleted file mode 100644 index 25fc20dd5..000000000 --- a/docs/train-models/how-to/data-and-checkpoint-formats.md +++ /dev/null @@ -1,35 +0,0 @@ -# Data and Checkpoint Formats - -Training steps declare compatible artifacts in each `step.toml` file. This page summarizes the types that most training steps use so you can chain steps without format surprises. - -## Canonical Definitions - -Artifact names and compatibility rules live in `src/nemotron/steps/types.toml` at the repository root of the step library. Treat that file as the source of truth for names such as `training_jsonl`, `packed_parquet`, and `checkpoint_megatron`. - -## Frequently Used Types - -- The `training_jsonl` type means JSON Lines (JSONL) with a `messages` field in OpenAI chat shape. AutoModel supervised fine tuning (SFT) and parameter-efficient fine tuning (PEFT) consume it, and several reinforcement learning (RL) data paths consume it. -- The `packed_parquet` type means packed shards with token columns and masks for Megatron Bridge style trainers. You get this type only after you run a packing prep step when you use the Parquet path. -- The `checkpoint_hf` type means Hugging Face layout checkpoints or full weights on disk. -- The `checkpoint_megatron` type means Megatron distributed checkpoints sharded across parallel ranks. -- The `checkpoint_lora` type means low-rank adaptation (LoRA) adapter weights. Many downstream tools still need merge or export before deployment. - -## Chaining Guidance - -1. AutoModel SFT never consumes `packed_parquet`. Megatron Bridge SFT does not consume raw JSON Lines (JSONL) for the packed pipeline. -2. RL steps in this repository expect a Megatron policy checkpoint for warm start. If your SFT used AutoModel, insert the appropriate conversion step before RL. -3. Optimization steps that start from `checkpoint_hf` require a merged base when the trainable artifact was LoRA. - -## Where to Look in the Tree - -Each step directory contains the following files: - -- `step.toml` holds the identifier, human title, tags, `[[consumes]]`, `[[produces]]`, `[[parameters]]`, optional `[[strategies]]`, `[[errors]]`, and `[[models]]` blocks. -- `config/default.yaml` holds primary configuration tuned for real workloads. -- `config/tiny.yaml` holds reduced settings for short sample runs and end-to-end execution validation. -- Extra files such as `config/nemo_gym.yaml` appear only on steps that need alternate method profiles. - -## Related Reading - -- [Artifact Graph](../explanation/artifact-graph.md) -- [Step Catalog (Training)](../reference/step-catalog.md) diff --git a/docs/train-models/how-to/env-and-executors.md b/docs/train-models/how-to/env-and-executors.md deleted file mode 100644 index b6ff5535f..000000000 --- a/docs/train-models/how-to/env-and-executors.md +++ /dev/null @@ -1,26 +0,0 @@ -# Environment Profiles and Executors - -Training steps use the same NeMo Run integration as the rest of Nemotron. Configuration is compiled into a job. Then a *backend* submits that job locally, to Slurm, to Lepton, or to other supported targets that your environment profile defines. - -## What to Read First - -[Execution through NeMo Run](../../nemo_runspec/nemo-run.md) is the canonical guide for the following topics: - -- Environment profile files and how they attach clusters, images, and mounts. -- Attached runs with `--run` compared with detached runs with `--batch`. -- How dotlist overrides merge into YAML training configuration. - -## How This Maps to Steps - -The command `nemotron steps run` resolves a step identifier to `step.py`, loads the step `config/` directory, and parses the same `env.toml` file that other Nemotron jobs use. Your workflow can select a different environment file if you configure that consistently. The command then hands the built job to the selected backend. You do not need a separate executor YAML file per step beyond what NeMo Run already consumes through the profile. - -## Practical Checklist - -1. Confirm `uv run nemotron steps show ` prints the run specification you expect. -2. Run with `--dry-run` once per new profile to catch mount and image issues early. -3. For reinforcement learning (RL) steps that require Ray, align node count, GPU count, and Ray settings with what NeMo RL expects for your cluster. Long-form details stay in NeMo Run and NeMo RL documentation linked from each step `step.toml` reference block. - -## Related Reading - -- [Getting Started](../getting-started.md) -- [Nemotron CLI Overview](../../nemotron/cli.md) diff --git a/docs/train-models/how-to/index.md b/docs/train-models/how-to/index.md deleted file mode 100644 index fae4390c0..000000000 --- a/docs/train-models/how-to/index.md +++ /dev/null @@ -1,95 +0,0 @@ - - -(train-models-how-to-index)= -# Model Training How-To Guides - -This section provides task-focused guides for common training workflows. -For your first run, start with {doc}`../getting-started`. - -If you are new to fine-tuning concepts, read {doc}`../explanation/index` for definitions of fine-tuning approaches, data formats, and checkpoints before working through these tasks. - -::::{grid} 1 2 2 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} {octicon}`play;1.5em;sd-mr-1` Run SFT with AutoModel on Custom Data -:link: run-sft-automodel -:link-type: doc -Configure `tiny.yaml` for your own JSONL data, run the step, verify the checkpoint output, and resolve common issues. -+++ -{bdg-success}`30 min` {bdg-secondary}`beginner` -::: - -:::{grid-item-card} {octicon}`rocket;1.5em;sd-mr-1` Choose an SFT Backend -:link: choose-sft-backend -:link-type: doc -Pick between `sft/automodel` and `sft/megatron_bridge` based on checkpoint format and scale. -+++ -{bdg-secondary}`intermediate` -::: - -:::{grid-item-card} {octicon}`tools;1.5em;sd-mr-1` Choose a PEFT Backend -:link: choose-peft-backend -:link-type: doc -Pick between `peft/automodel` and `peft/megatron_bridge` based on base checkpoint format and data path. -+++ -{bdg-secondary}`intermediate` -::: - -:::{grid-item-card} {octicon}`milestone;1.5em;sd-mr-1` Choose an RL Alignment Step -:link: choose-rl-step -:link-type: doc -Pick between DPO, RLVR, and RLHF based on how the reward signal enters training. -+++ -{bdg-secondary}`intermediate` -::: - -:::{grid-item-card} {octicon}`zap;1.5em;sd-mr-1` Run Post-Training Optimization -:link: run-optimization -:link-type: doc -Apply quantization, pruning, or distillation with Model Optimizer after a trained model passes your quality bar. -+++ -{bdg-secondary}`intermediate` -::: - -:::{grid-item-card} {octicon}`server;1.5em;sd-mr-1` Environment Profiles and Executors -:link: env-and-executors -:link-type: doc -Configure NeMo Run environment profiles for local, Slurm, and Lepton execution. -+++ -{bdg-secondary}`intermediate` -::: - -:::{grid-item-card} {octicon}`database;1.5em;sd-mr-1` Data and Checkpoint Formats -:link: data-and-checkpoint-formats -:link-type: doc -Understand the JSONL, Parquet, and checkpoint types that training steps declare in `step.toml`. -+++ -{bdg-secondary}`intermediate` -::: - -:::{grid-item-card} {octicon}`git-compare;1.5em;sd-mr-1` Convert Checkpoints Between Training Steps -:link: convert-checkpoints -:link-type: doc -Run a conversion step when one step produces a checkpoint layout that the next step cannot consume directly. -+++ -{bdg-secondary}`intermediate` -::: - -:::: - -```{toctree} -:hidden: -:maxdepth: 1 - -Run SFT with AutoModel on Custom Data -Choose an SFT Backend -Choose a PEFT Backend -Choose an RL Alignment Step -Run Post-Training Optimization -Environment Profiles and Executors -Data and Checkpoint Formats -Convert Checkpoints -``` diff --git a/docs/train-models/how-to/run-optimization.md b/docs/train-models/how-to/run-optimization.md deleted file mode 100644 index eacb96dab..000000000 --- a/docs/train-models/how-to/run-optimization.md +++ /dev/null @@ -1,42 +0,0 @@ -# Run Post-Training Optimization - -Optimization steps apply NVIDIA Model Optimizer flows after you have a trained model that is worth compressing. Run them only on checkpoints that already passed your quality bar. - -## Steps - -| Step id | Purpose | Typical input | Output | -|---------|---------|---------------|--------| -| `optimize/modelopt/quantize` | Post-training quantization | `checkpoint_hf` | `checkpoint_megatron` | -| `optimize/modelopt/prune` | Structured pruning | `checkpoint_hf` | `checkpoint_hf` | -| `optimize/modelopt/distill` | Teacher-student recovery | Teacher and student `checkpoint_hf`, optional `binidx` | `checkpoint_megatron` | - -## Decision Flow - -1. If you only need a smaller numeric type for inference, start with `optimize/modelopt/quantize`. Pick a quantization recipe that matches your hardware. FP8 suits Hopper. NVFP4 suits Blackwell. Read `step.toml` for parameter names and allowed values. -2. If you need a smaller architecture, use `optimize/modelopt/prune`. -3. If quality drops after compression, use `optimize/modelopt/distill` with a full-precision teacher while the student matches the compressed artifact. -4. Do not run optimization on unmerged adapters. When the source was parameter-efficient fine tuning (PEFT) with low-rank adaptation (LoRA), merge LoRA into a base checkpoint first. - -## Order of Operations - -Distillation after pruning is the usual recovery order when both apply. Quantization is largely independent. Quantization still needs a benchmark before and after you run it. - -## Sample Commands - -```console -$ uv run nemotron steps run optimize/modelopt/quantize -c tiny -$ uv run nemotron steps run optimize/modelopt/prune -c tiny -$ uv run nemotron steps run optimize/modelopt/distill -c tiny -``` - -Tiny runs and mock-data runs validate end-to-end execution only. Judge final quality on full calibration or distillation data. - -## Success Criteria - -- You keep the original high-precision checkpoint and its evaluation baseline. -- Post-optimization evaluation uses the same benchmark suite as pre-optimization evaluation. - -## Related Reading - -- [Optimization Steps Reference](../reference/optimize/index.md) -- [Artifact Graph](../explanation/artifact-graph.md) diff --git a/docs/train-models/how-to/run-sft-automodel.md b/docs/train-models/how-to/run-sft-automodel.md deleted file mode 100644 index 8d1921088..000000000 --- a/docs/train-models/how-to/run-sft-automodel.md +++ /dev/null @@ -1,80 +0,0 @@ - - -# Run SFT with AutoModel on Custom Data - -This guide walks through configuring and running the `sft/automodel` step with your own instruction data. -The step trains models in a Hugging Face checkpoint layout from OpenAI chat-formatted JSON Lines (JSONL). - -Before following this guide, complete [Getting Started with Training Steps](../getting-started.md) to verify your environment profile and confirm that the sample job runs to completion. - -## Prerequisites - -- A completed `env.toml` at the repository root with a training profile such as `lepton_sft_automodel`. - See [Getting Started with Training Steps](../getting-started.md) for the environment snippet and how to generate the full profile file. -- `HF_TOKEN`, `WANDB_API_KEY`, and `NVIDIA_API_KEY` exported in your shell. -- Instruction data in JSONL form where each record includes a `messages` field in OpenAI chat format. -- A Hugging Face access token if the base model is gated or must be downloaded from the Hugging Face Hub. -- Enough GPU memory for the model you select. - Verify memory requirements before scaling beyond a tiny configuration. - -## Configure the Step - -1. Open `src/nemotron/steps/sft/automodel/config/tiny.yaml`. - The checked-in defaults pull small public data slices from the Hugging Face Hub. - Replace the `dataset` and `model` fields with your paths and model identifier. - -2. Align the tokenizer and chat template with how your JSONL was built. - The step applies the tokenizer at training time, so a mismatch between the template used during data preparation and the template applied here causes silent quality degradation or a hard failure at startup. - See [Data and Checkpoint Formats](data-and-checkpoint-formats.md) for the canonical field names the step expects. - -## Run the Step - -Submit the step against your environment profile: - -```console -$ uv run nemotron steps run sft/automodel -c tiny -r lepton_sft_automodel -``` - -Replace `lepton_sft_automodel` with the profile name from your `env.toml` when your team uses a different table key. -See [Execution through NeMo Run](../../nemo_runspec/nemo-run.md) for profile setup and scheduler behavior. - -## Verify Output - -The step manifest declares a `checkpoint_hf` artifact on success. -Confirm the output directory you set in the training configuration contains checkpoints, and that logs show stable loss for the duration of the run. - -To inspect what the step produces, run: - -```console -$ uv run nemotron steps show sft/automodel -``` - -The `produces` block lists `checkpoint_hf` and the path it writes to. - -## Common Issues - -- When you encounter CUDA out-of-memory errors, reduce batch sizes in YAML or switch to a smaller base model. -- When the trainer reports a missing chat template, pick a tokenizer that defines a template or convert your data to a format the trainer accepts. - The `step.toml` file lists `[[errors]]` entries such as `chat_template_missing` with recovery hints. -- When you need to checkpoint to a specific directory, set `SFT_OUTPUT_DIR` in your shell before running or pass the `checkpoint.checkpoint_dir` override on the command line. - -## Next Steps - -- Read [Choose an SFT Backend](choose-sft-backend.md) when you need Megatron Bridge and packed Parquet instead of AutoModel and JSONL. -- Read [Data and Checkpoint Formats](data-and-checkpoint-formats.md) to understand how JSONL and checkpoints chain with other steps. -- Read [Convert Checkpoints Between Training Steps](convert-checkpoints.md) when the next step in your pipeline requires a different checkpoint layout. diff --git a/docs/train-models/index.md b/docs/train-models/index.md deleted file mode 100644 index 2a7342926..000000000 --- a/docs/train-models/index.md +++ /dev/null @@ -1,90 +0,0 @@ -# Model Training with Nemotron Steps - -This section documents how to run supervised fine-tuning (SFT), parameter-efficient fine-tuning (PEFT), reinforcement learning (RL) alignment, and post-training optimization with Nemotron *steps*. -Each step packages a training approach, configuration files, and entry logic that you invoke through the `nemotron steps` CLI. -For the definitions of *step*, *configuration*, and *environment profile* that apply across every domain, see [Nemotron Steps Basics](../steps/basics.md). -If you are new to fine-tuning, start with [Training Basics](explanation/basics.md), which defines the training-specific terms the rest of this section uses. - -## Capabilities at a Glance - -| Area | Step Names | Role | -|------|-------------------------------|------| -| SFT | `sft/automodel`, `sft/megatron_bridge` | Supervised fine tuning from chat-formatted JSON Lines (JSONL) or packed Apache Parquet | -| PEFT | `peft/automodel`, `peft/megatron_bridge` | Adapter training with a smaller trainable surface | -| RL | `rl/nemo_rl/dpo`, `rl/nemo_rl/rlvr`, `rl/nemo_rl/rlhf` | Alignment after a supervised fine tuning (SFT) policy exists | -| Optimize | `optimize/modelopt/quantize`, `optimize/modelopt/prune`, `optimize/modelopt/distill` | Compression and quality recovery | - -## Limitations and Restrictions - -The Nemotron steps for data preparation and model training do not support local training, such as on a developer workstation. - -These steps require access to at least two nodes, each equipped with 8 x NVIDIA A100 80 GB or better GPUs. -These steps support the following environments: - -- Slurm -- NVIDIA DGX Cloud Lepton -- NVIDIA Run:ai - -For assistance with configuring access to one of the supported computing environments, refer to [](./reference/env-profile-generator.md) or run the `nemotron-env-toml` skill with your agent. - -## Learning Path - -::::{grid} 1 2 2 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} Training Basics -:link: explanation/basics -:link-type: doc -This page defines supervised fine-tuning, parameter-efficient fine-tuning, reinforcement learning alignment, quantization, tokenizers, the chat dataset format, and checkpoints. -+++ -`Beginner Level` -::: - -:::{grid-item-card} Getting Started -:link: getting-started -:link-type: doc -This guide covers installation expectations, the environment profile, and how to run your first sample job with the `tiny` configuration. -+++ -`Beginner` -::: - -:::{grid-item-card} How-To Guides -:link: how-to/index -:link-type: doc -These guides are task-focused. They explain how to pick a backend, wire data, and run optimization steps. -+++ -`Intermediate` -::: - -:::{grid-item-card} Explanation -:link: explanation/index -:link-type: doc -This material explains the basics, the artifact graph, and how the training libraries differ. -+++ -`Concepts` -::: - -:::{grid-item-card} Reference -:link: reference/index -:link-type: doc -This material is for lookup. It lists the step catalog, parameters, and configuration conventions. -+++ -`Lookup` -::: - -:::{grid-item-card} Model Training with Agents -:link: using-skill -:link-type: doc -Use the customize skill with a YAML-first plan: repo steps, then configs, then code only for gaps. -+++ -`Workflow` -::: - -:::: - -## Quick Links - -- [Model Training with Agents](using-skill.md) describes how to work with the `nemotron-customize` skill for multi-stage training plans and YAML-first deliverables. -- [Getting Started](getting-started.md) describes how to verify the CLI and run a tiny configuration. -- [Execution through NeMo Run](../nemo_runspec/nemo-run.md) describes profiles, attached and detached runs, and clusters. -- [Nemotron CLI Overview](../nemotron/cli.md) describes how the wider CLI relates to configuration and overrides. diff --git a/docs/train-models/reference/cli-reference.md b/docs/train-models/reference/cli-reference.md deleted file mode 100644 index 18127fbea..000000000 --- a/docs/train-models/reference/cli-reference.md +++ /dev/null @@ -1,274 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Command-line reference for the nemotron steps subcommand group." -topics: ["Training", "Reference", "CLI"] -tags: ["Reference", "CLI", "Command-Line", "Steps"] -content: - type: "Reference" - difficulty: "All Levels" - audience: ["ML Engineer", "Developer"] ---- - -# Nemotron Steps CLI Reference - -This page documents the `nemotron steps` command group, the entry point for discovering, inspecting, and running every supervised fine-tuning (SFT), parameter-efficient fine-tuning (PEFT), reinforcement learning (RL), and optimization step packaged under `src/nemotron/steps/`. - -The command group is registered by the Nemotron CLI and exposes three subcommands: - -- `nemotron steps list` enumerates discovered steps with optional filters. -- `nemotron steps show ` prints the manifest, runspec, and parameters for one step. -- `nemotron steps run ` compiles a configuration, selects an executor, and submits a job. - -Each subcommand resolves a step by its identifier, such as `sft/automodel` or `rl/nemo_rl/dpo`. -The [Step Catalog](step-catalog.md) lists every identifier. - -## Syntax - -The `run` subcommand accepts a step identifier, a configuration name or path, an execution mode, and any number of trailing overrides: - -```bash -nemotron steps run \ - [-c ] \ - [-r | -b ] \ - [-d] \ - [--force-squash] \ - [...] \ - [...] -``` - -The `list` and `show` subcommands take only options and an optional step identifier: - -```bash -nemotron steps list [--category ] [--consumes ] [--produces ] [--json] - -nemotron steps show [--json] -``` - -## Required Arguments - -```{option} - -The step identifier under `src/nemotron/steps/`, such as `sft/automodel`, `peft/megatron_bridge`, `rl/nemo_rl/dpo`, or `optimize/modelopt/quantize`. - -This argument is positional and required for `nemotron steps run` and `nemotron steps show`. - -Example: `nemotron steps run sft/automodel` -``` - -## Optional Arguments - -The following options apply to `nemotron steps run`. -Pass them between the subcommand and any trailing overrides. - -```{option} -c, --config - -The configuration to compile for the run. -Bare names resolve to `config/.yaml` inside the step directory. -A relative or absolute path resolves directly to that file. - -Default: the configuration declared as `[config] default` in the step's runspec, typically `default`. - -Example: `-c tiny` resolves to `src/nemotron/steps/sft/automodel/config/tiny.yaml`. -``` - -```{option} -r, --run - -The environment profile to attach to for synchronous execution. -The profile name must match a top-level `[]` table in the active `env.toml` file. -The CLI streams logs to your terminal until the job finishes. - -This option is mutually exclusive with `--batch`. - -Example: `-r lepton_sft_automodel` -``` - -```{option} -b, --batch - -The environment profile to submit to for detached execution. -The profile name must match a top-level `[]` table in the active `env.toml` file. -The CLI returns once the job is submitted. - -This option is mutually exclusive with `--run`. - -Example: `-b slurm_prod` -``` - -```{option} -d, --dry-run - -Compile and print the merged configuration as a rich table, then exit without submitting the job. -Use this option to validate overrides before you commit GPU time. - -Default: disabled. -``` - -```{option} --force-squash - -Force re-creation of the squashed container image used by remote executors even when a cached image already exists. -Use this option after you change the container image referenced in your environment profile. - -Default: disabled. -``` - -The `list` subcommand has its own option set. - -```{option} --category - -Restrict the output to one step category, such as `sft`, `peft`, `rl`, or `optimize`. - -Example: `--category sft` -``` - -```{option} --consumes - -Restrict the output to steps that declare a `[[consumes]]` entry of the given artifact type, such as `training_jsonl`, `packed_parquet`, `checkpoint_hf`, or `checkpoint_megatron`. - -Example: `--consumes training_jsonl` -``` - -```{option} --produces - -Restrict the output to steps that declare a `[[produces]]` entry of the given artifact type. - -Example: `--produces checkpoint_megatron` -``` - -```{option} --json - -Emit machine-readable JSON instead of the human-formatted table. -Use this option from agents or shell pipelines. - -Default: disabled. -``` - -## Configuration Overrides - -Any token after the options that contains an equals sign and does not start with a hyphen is treated as a *dotlist override* and merged into the compiled configuration. -Any other token is preserved as a *passthrough argument* for the step's underlying script. -The split is performed by `nemo_runspec.cli_context.split_unknown_args`. - -```{option} .= - -A dotlist override that sets a nested key in the compiled YAML configuration. -Use dotted paths to reach nested structures, the same way OmegaConf interprets them. - -Examples: -- `step_scheduler.max_steps=10` -- `model.pretrained_model_name_or_path=mistralai/Mistral-7B-Instruct-v0.3` -- `args.export_quant_cfg=fp8` -``` - -```{option} - -Any token that does not match a known option and does not contain an equals sign is forwarded verbatim to the step's underlying script. -The script applies the token only when its stripped name, with dashes converted to underscores, matches a top-level field in the compiled configuration. -Tokens that do not map to a top-level field are silently ignored, so most parameters are set through dotlist overrides instead. -``` - -## Configuration Resolution - -The CLI resolves `--config` in the following order: - -1. If the value is an absolute or relative file path that exists, the CLI loads that file. -2. Otherwise the CLI treats the value as a bare name and looks for `config/.yaml` inside the step directory. -3. If `--config` is omitted, the CLI uses the runspec default declared in the step's `step.py`. - -Each step ships at minimum a `config/default.yaml` file for production-shape runs and a `config/tiny.yaml` file for short validation. -Some steps ship additional variants, such as `config/fp8.yaml` for `optimize/modelopt/quantize` and `config/nemo_gym.yaml` for `rl/nemo_rl/rlvr`. -The per-step pages list every config file. - -## Environment Profile and Executor Selection - -The `--run` and `--batch` options select a profile from an `env.toml` file. -The file is found by the following rules: - -1. If the `NEMOTRON_ENV_FILE` environment variable is set, the CLI uses that path. -2. Otherwise the CLI walks upward from the current directory until it finds a file named `env.toml`, stopping at the project root that contains `pyproject.toml`. - -Each profile is a top-level TOML table. -The table's `executor` field selects `local`, `slurm`, or `lepton` execution. -The remaining fields configure the container image, mounts, resources, and environment variables for that executor. -Refer to [Environment and Executors](../how-to/env-and-executors.md) for the full schema. - -If you omit both `--run` and `--batch`, the CLI submits the step on the local backend. -Remote execution requires `-r` or `-b` together with a profile that exists in the active `env.toml` file. - -## Command Examples - -Compile and validate the configuration without submitting the job: - -```console -$ nemotron steps run sft/automodel -c tiny --dry-run -``` - -Submit an attached run on a Lepton profile, override the step count, and override the base model: - -```console -$ nemotron steps run sft/automodel -c default -r lepton_sft_automodel \ - step_scheduler.max_steps=100 \ - model.pretrained_model_name_or_path=mistralai/Mistral-7B-Instruct-v0.3 -``` - -Submit a detached run on a Slurm profile and enable the mock-data path through a dotlist override: - -```console -$ nemotron steps run optimize/modelopt/distill -c tiny -b slurm_optimize_modelopt_distill args.use_mock_data=true -``` - -Filter the catalog for steps that consume preference data: - -```console -$ nemotron steps list --consumes training_jsonl --category rl -``` - -Print the manifest for one step as JSON for agent consumption: - -```console -$ nemotron steps show sft/automodel --json -``` - -## Per-Category References - -::::{grid} 1 2 2 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} Supervised Fine-Tuning Steps -:link: sft/index -:link-type: doc -The `sft/automodel` and `sft/megatron_bridge` references. -+++ -{bdg-success}`reference` -::: - -:::{grid-item-card} Parameter-Efficient Fine-Tuning Steps -:link: peft/index -:link-type: doc -The `peft/automodel` and `peft/megatron_bridge` references. -+++ -{bdg-success}`reference` -::: - -:::{grid-item-card} Reinforcement Learning Steps -:link: rl/index -:link-type: doc -The `rl/nemo_rl/dpo`, `rl/nemo_rl/rlvr`, and `rl/nemo_rl/rlhf` references. -+++ -{bdg-success}`reference` -::: - -:::{grid-item-card} Optimization Steps -:link: optimize/index -:link-type: doc -The `optimize/modelopt/quantize`, `optimize/modelopt/prune`, and `optimize/modelopt/distill` references. -+++ -{bdg-success}`reference` -::: - -:::: - -## Related Documentation - -- [Step Catalog](step-catalog.md) lists every step identifier and its manifest path. -- [Configuration Conventions](config-conventions.md) explains the per-step `config/` layout, dotlist override rules, and the relationship to environment profiles. -- [Environment and Executors](../how-to/env-and-executors.md) explains the `env.toml` schema and profile selection. -- [Execution Through NeMo Run](../../nemo_runspec/nemo-run.md) explains attached and detached execution, image squashing, and remote job directories. diff --git a/docs/train-models/reference/config-conventions.md b/docs/train-models/reference/config-conventions.md deleted file mode 100644 index f6951b214..000000000 --- a/docs/train-models/reference/config-conventions.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Per-step configuration conventions for Nemotron training steps." -topics: ["Training", "Reference", "Configuration"] -tags: ["Reference", "Configuration", "YAML", "Overrides"] -content: - type: "Reference" - difficulty: "All Levels" - audience: ["ML Engineer", "Developer"] ---- - -# Configuration Conventions - -This page describes the per-step configuration layout, the rules the CLI uses to resolve a configuration name, and the rules it uses to merge command-line overrides. -The conventions apply to every step registered under `src/nemotron/steps/`. - -Each step ships its manifest, configuration files, and entry script next to each other on disk. -The manifest, `step.toml`, remains authoritative for parameters, consumed and produced artifacts, supported models, and operator strategies. - -## Per-Step Directory Layout - -For a step directory `src/nemotron/steps///`, expect the following files. - -| File | Purpose | -| --- | --- | -| `step.toml` | Manifest with the identifier, human-readable title, tags, `[[consumes]]` blocks, `[[produces]]` blocks, `[[parameters]]` blocks, optional `[[strategies]]`, optional `[[errors]]`, and optional `[[models]]` blocks. | -| `step.py` | Entry script that the CLI invokes after configuration compilation. The script also declares the NeMo Run specification. | -| `config/default.yaml` | Primary configuration tuned for production-shape runs. | -| `config/tiny.yaml` | Reduced configuration for short validation runs. | -| `config/.yaml` | Optional configuration variants. Examples include `config/fp8.yaml` and `config/nvfp4.yaml` for `optimize/modelopt/quantize`, and `config/nemo_gym.yaml` for `rl/nemo_rl/rlvr`. | - -The per-step reference pages list every configuration file that the step ships. - -## Configuration Resolution - -The CLI resolves the `-c` and `--config` value in the following order. - -1. When the value is an absolute or relative file path that exists on disk, the CLI loads that file directly. -2. Otherwise the CLI treats the value as a bare name and looks for `config/.yaml` inside the step directory. -3. When the value is omitted, the CLI uses the runspec default declared in the step's `step.py`, typically `default`. - -The following command resolves the bare name `tiny` to `src/nemotron/steps/sft/automodel/config/tiny.yaml`: - -```console -$ nemotron steps run sft/automodel -c tiny -``` - -The following command loads an explicit path: - -```console -$ nemotron steps run sft/automodel -c /lustre/configs/qwen-sft.yaml -``` - -## Dotlist Overrides - -Any trailing argument that contains an equals sign and does not start with a hyphen is treated as a *dotlist override*. -The CLI merges dotlist overrides into the compiled YAML configuration by using OmegaConf semantics, so dotted paths reach nested structures. - -```console -$ nemotron steps run sft/automodel -c default \ - step_scheduler.max_steps=200 \ - model.pretrained_model_name_or_path=meta-llama/Llama-3.1-8B-Instruct -``` - -The override syntax follows the rules in `nemo_runspec.cli_context.split_unknown_args`. -Refer to the [Nemotron Steps CLI Reference](cli-reference.md) for the full syntax and additional examples. - -## Passthrough Arguments - -Any trailing token that does not match a known option and does not contain an equals sign is preserved as a *passthrough argument* and forwarded to the step's entry script. -The script applies the token only when its stripped name, with dashes converted to underscores, matches a top-level field in the compiled configuration. -Tokens that do not map to a top-level field are silently ignored, so most parameters are better set through dotlist overrides. - -## Environment Variables in Configurations - -Configuration files use the OmegaConf `${oc.env:NAME,default}` resolver to read environment variables at compile time. -The default configurations rely on the following environment variables. - -| Variable | Used By | Purpose | -| --- | --- | --- | -| `SFT_OUTPUT_DIR` | `sft/automodel` | Destination directory for SFT checkpoints. Defaults to `./output/automodel-tiny`. | -| `SFT_PACKED_DIR` | `sft/megatron_bridge`, `peft/megatron_bridge` | Source directory for packed Parquet shards produced by `data_prep/sft_packing`. | -| `RL_POLICY_MODEL` | `rl/nemo_rl/dpo`, `rl/nemo_rl/rlhf`, `rl/nemo_rl/rlvr` | Hugging Face identifier or local path for the policy. Defaults to `meta-llama/Llama-3.2-1B-Instruct`. | -| `WANDB_NAME` | All training steps | Weights and Biases run name. | -| `NEMO_RUN_DIR` | `optimize/modelopt/*` | Output root used to derive default destination paths. | - -Set these variables in your shell, in the environment profile, or in an executor `env` block, depending on whether the run is local or remote. - -## Environment Profiles - -Per-cluster environment variables, container images, and startup commands live in `env.toml` at the repository root, not in per-step YAML files. -The active profile is selected with `--run` or `--batch`, and the file is found by the rules described in the [Nemotron Steps CLI Reference](cli-reference.md). - -## Related Documentation - -- [Getting Started With Training Steps](../getting-started.md) walks through a first run. -- [Nemotron Steps CLI Reference](cli-reference.md) covers `list`, `show`, and `run` syntax. -- [Step Catalog](step-catalog.md) lists every step identifier and its manifest path. -- [Execution Through NeMo Run](../../nemo_runspec/nemo-run.md) explains profiles, attached and detached execution, and clusters. diff --git a/docs/train-models/reference/convert/hf-to-megatron.md b/docs/train-models/reference/convert/hf-to-megatron.md deleted file mode 100644 index ea464795b..000000000 --- a/docs/train-models/reference/convert/hf-to-megatron.md +++ /dev/null @@ -1,110 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Command-line reference for the convert/hf_to_megatron step." -topics: ["Training", "Reference", "Checkpoint Conversion"] -tags: ["Reference", "CLI", "Steps", "Hugging Face", "Megatron"] -content: - type: "Reference" - difficulty: "All Levels" - audience: ["ML Engineer", "Developer"] ---- - -# convert/hf_to_megatron - -This step converts a Hugging Face checkpoint or model id into Megatron distributed checkpoint layout. -Use it when a downstream Megatron-Bridge step expects `checkpoint_megatron` but the upstream artifact is `checkpoint_hf`. - -## Syntax - -```bash -nemotron steps run convert/hf_to_megatron \ - [-c ] \ - [-r | -b ] \ - [-d] \ - [...] -``` - -Refer to the [Nemotron Steps CLI Reference](../cli-reference.md) for the shared flag set. - -## Configuration Files - -The step ships `config/default.yaml` under `src/nemotron/steps/convert/hf_to_megatron/config/`. -The default source model is `nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16`, and the default output path is derived from `CONVERT_OUTPUT_DIR`, `NEMO_RUN_DIR`, or `./output/convert`. - -## Inputs and Outputs - -| Direction | Artifact Type | Required | Description | -| --- | --- | --- | --- | -| Consumes | `checkpoint_hf` | Yes | A clean Hugging Face checkpoint directory or model id. | -| Produces | `checkpoint_megatron` | - | A Megatron distributed checkpoint directory. | - -## Parameters - -```{option} hf_model_id= - -Hugging Face model id or local checkpoint path to import. -Use a clean model directory, not trainer logs, optimizer state, or adapter-only output. - -Example: `hf_model_id=nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16` -``` - -```{option} megatron_path= - -Output directory for the Megatron distributed checkpoint. -Keep this path separate from the Hugging Face source path. - -Example: `megatron_path=/lustre/output/convert/nano3-megatron` -``` - -```{option} dtype= - -Torch dtype used during import. -Typical NVIDIA Nemotron checkpoints use `bfloat16`. - -Choices: `bfloat16`, `float16`, `float32`. -Default: `bfloat16`. -``` - -```{option} device_map= - -Optional Transformers `device_map` forwarded during Hugging Face model loading, such as `auto` or `cuda:0`. -Leave unset unless the conversion host requires explicit placement. -``` - -```{option} trust_remote_code= - -Whether to trust Hugging Face custom model code when AutoBridge loads the source model configuration. - -Default: `true`. -``` - -## Command Examples - -Convert the default NVIDIA Nemotron base model into a local Megatron output directory: - -```console -$ nemotron steps run convert/hf_to_megatron -c default \ - hf_model_id=nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16 \ - megatron_path=./output/convert/nano3-megatron -``` - -Submit the conversion through a generated Lepton profile: - -```console -$ nemotron steps run convert/hf_to_megatron -c default --batch lepton_convert_model \ - hf_model_id=nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16 \ - megatron_path=/mnt/lustre-shared/output/convert/nano3-megatron -``` - -## Recovery Notes - -- If the source came from LoRA training, merge the adapter into the original base first with `convert/merge_lora`. -- If tokenizer or model config files are missing, use the original Hugging Face model id as `hf_model_id`. -- If conversion fails, retry into a fresh `megatron_path` instead of reusing a partially written directory. - -## Related Documentation - -- [Convert Checkpoints Between Training Steps](../../how-to/convert-checkpoints.md) -- [convert/merge_lora](merge-lora.md) -- [Megatron-Bridge Documentation](https://docs.nvidia.com/nemo/megatron-bridge/latest/) diff --git a/docs/train-models/reference/convert/index.md b/docs/train-models/reference/convert/index.md deleted file mode 100644 index 51bb4e27c..000000000 --- a/docs/train-models/reference/convert/index.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Reference pages for Nemotron checkpoint conversion steps." -topics: ["Training", "Reference", "Checkpoint Conversion"] -tags: ["Reference", "Steps", "Checkpoints", "Conversion"] -content: - type: "Reference" - difficulty: "All Levels" - audience: ["ML Engineer", "Developer"] ---- - -# Checkpoint Conversion Steps - -This section documents the conversion steps registered under `src/nemotron/steps/convert/`. -Use these steps to bridge checkpoint layouts between Hugging Face, Megatron distributed checkpoints, and LoRA adapter outputs. - -## Steps - -::::{grid} 1 2 2 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} convert/hf_to_megatron -:link: hf-to-megatron -:link-type: doc -Import a Hugging Face checkpoint or model id into Megatron distributed checkpoint layout. -+++ -{bdg-success}`reference` -::: - -:::{grid-item-card} convert/megatron_to_hf -:link: megatron-to-hf -:link-type: doc -Export a Megatron distributed checkpoint iteration into Hugging Face safetensors layout. -+++ -{bdg-success}`reference` -::: - -:::{grid-item-card} convert/merge_lora -:link: merge-lora -:link-type: doc -Merge a LoRA adapter with its original base checkpoint to produce a standalone checkpoint. -+++ -{bdg-success}`reference` -::: - -:::: - -## Related Documentation - -- [Convert Checkpoints Between Training Steps](../../how-to/convert-checkpoints.md) -- [Data and Checkpoint Formats](../../how-to/data-and-checkpoint-formats.md) -- [Step Catalog](../step-catalog.md) - -```{toctree} -:hidden: -:maxdepth: 1 - -hf-to-megatron -megatron-to-hf -merge-lora -``` diff --git a/docs/train-models/reference/convert/megatron-to-hf.md b/docs/train-models/reference/convert/megatron-to-hf.md deleted file mode 100644 index 3f83dcfbe..000000000 --- a/docs/train-models/reference/convert/megatron-to-hf.md +++ /dev/null @@ -1,117 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Command-line reference for the convert/megatron_to_hf step." -topics: ["Training", "Reference", "Checkpoint Conversion"] -tags: ["Reference", "CLI", "Steps", "Megatron", "Hugging Face"] -content: - type: "Reference" - difficulty: "All Levels" - audience: ["ML Engineer", "Developer"] ---- - -# convert/megatron_to_hf - -This step converts a Megatron distributed checkpoint into Hugging Face safetensors layout. -Use it when a downstream Hugging Face-native consumer expects `checkpoint_hf` but the upstream artifact is `checkpoint_megatron`. - -## Syntax - -```bash -nemotron steps run convert/megatron_to_hf \ - [-c ] \ - [-r | -b ] \ - [-d] \ - [...] -``` - -Refer to the [Nemotron Steps CLI Reference](../cli-reference.md) for the shared flag set. - -## Configuration Files - -The step ships `config/default.yaml` under `src/nemotron/steps/convert/megatron_to_hf/config/`. -The default `hf_model_id` is `nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16`, and `megatron_path` must be supplied for real runs. - -## Inputs and Outputs - -| Direction | Artifact Type | Required | Description | -| --- | --- | --- | --- | -| Consumes | `checkpoint_megatron` | Yes | A specific Megatron checkpoint directory, normally an `iter_*` directory. | -| Produces | `checkpoint_hf` | - | A Hugging Face safetensors checkpoint directory. | - -## Parameters - -```{option} megatron_path= - -Specific Megatron checkpoint directory to export. -Point this at the concrete checkpoint iteration, not the parent training run folder. - -Example: `megatron_path=/lustre/runs/sft/checkpoints/iter_0000100` -``` - -```{option} hf_model_id= - -Hugging Face model id or config source used by AutoBridge to reconstruct the Hugging Face architecture and tokenizer expectations. - -Example: `hf_model_id=nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16` -``` - -```{option} hf_path= - -Output directory for the exported Hugging Face safetensors checkpoint. - -Example: `hf_path=/lustre/output/convert/sft-hf` -``` - -```{option} trust_remote_code= - -Whether to trust custom Hugging Face model code while reconstructing the export target. - -Default: `true`. -``` - -```{option} show_progress= - -Whether to show Megatron-Bridge export progress output. - -Default: `true`. -``` - -```{option} strict= - -Whether Megatron-Bridge should require source and target checkpoint keys to match strictly. - -Default: `true`. -``` - -## Command Examples - -Export a validated Megatron checkpoint iteration to Hugging Face layout: - -```console -$ nemotron steps run convert/megatron_to_hf -c default \ - megatron_path=/path/to/megatron/iter_0000100 \ - hf_model_id=nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16 \ - hf_path=./output/convert/sft-hf -``` - -Submit the export through a generated Lepton profile: - -```console -$ nemotron steps run convert/megatron_to_hf -c default --batch lepton_convert_model \ - megatron_path=/mnt/lustre-shared/output/sft/megatron_bridge/iter_0000100 \ - hf_model_id=nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16 \ - hf_path=/mnt/lustre-shared/output/convert/sft-hf -``` - -## Recovery Notes - -- If export fails because the checkpoint is incomplete, wait for async checkpoint save to finish and retry from a complete `iter_*` directory. -- If tokenizer or config reconstruction fails, set `hf_model_id` to the original base model or config source. -- Validate the exported Hugging Face checkpoint with a small generation or evaluation job before deployment. - -## Related Documentation - -- [Convert Checkpoints Between Training Steps](../../how-to/convert-checkpoints.md) -- [Data and Checkpoint Formats](../../how-to/data-and-checkpoint-formats.md) -- [Megatron-Bridge Documentation](https://docs.nvidia.com/nemo/megatron-bridge/latest/) diff --git a/docs/train-models/reference/convert/merge-lora.md b/docs/train-models/reference/convert/merge-lora.md deleted file mode 100644 index 6d325bd60..000000000 --- a/docs/train-models/reference/convert/merge-lora.md +++ /dev/null @@ -1,153 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Command-line reference for the convert/merge_lora step." -topics: ["Training", "Reference", "Checkpoint Conversion", "LoRA"] -tags: ["Reference", "CLI", "Steps", "PEFT", "LoRA", "Merge"] -content: - type: "Reference" - difficulty: "All Levels" - audience: ["ML Engineer", "Developer"] ---- - -# convert/merge_lora - -This step merges a LoRA adapter with its original base checkpoint. -Use it when a downstream consumer needs a standalone checkpoint instead of an adapter plus base model pair. - -## Syntax - -```bash -nemotron steps run convert/merge_lora \ - [-c ] \ - [-r | -b ] \ - [-d] \ - [...] -``` - -Refer to the [Nemotron Steps CLI Reference](../cli-reference.md) for the shared flag set. - -## Configuration Files - -The step ships `config/default.yaml` under `src/nemotron/steps/convert/merge_lora/config/`. -The default `backend` is `auto`. -When `base_megatron_path` is set, `auto` selects the Megatron-Bridge merge path. -Otherwise, `auto` selects the Hugging Face PEFT merge path. - -## Inputs and Outputs - -| Direction | Artifact Type | Required | Description | -| --- | --- | --- | --- | -| Consumes | `checkpoint_lora` | Yes | LoRA adapter weights from a PEFT step. | -| Consumes | `checkpoint_hf` | Yes for `hf_peft` | Original Hugging Face base checkpoint or model/config source. | -| Consumes | `checkpoint_megatron` | Required for `megatron_bridge` | Original dense Megatron checkpoint for Megatron-Bridge adapter merge. | -| Produces | `checkpoint_hf` | - | Merged standalone Hugging Face checkpoint. | -| Produces | `checkpoint_megatron` | Optional | Merged Megatron checkpoint when `backend=megatron_bridge`. | - -## Parameters - -```{option} backend= - -Adapter merge backend. -`auto` selects `megatron_bridge` when `base_megatron_path` is set, otherwise `hf_peft`. - -Default: `auto`. -``` - -```{option} lora_checkpoint= - -Adapter checkpoint path produced by a PEFT step. -``` - -```{option} base_hf_path= - -Original Hugging Face base checkpoint for `backend=hf_peft`, or Hugging Face config/model source for `backend=megatron_bridge`. -Do not substitute a different base. -``` - -```{option} base_megatron_path= - -Original dense Megatron checkpoint for `backend=megatron_bridge`. -Use the base checkpoint that the adapter was trained against. -``` - -```{option} hf_model_id= - -Hugging Face model id or path used to reconstruct architecture when exporting a Megatron-Bridge merge to Hugging Face layout. - -Example: `hf_model_id=nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16` -``` - -```{option} output_hf_path= - -Directory for the merged standalone Hugging Face checkpoint. -``` - -```{option} output_megatron_path= - -Directory for the merged Megatron checkpoint when `backend=megatron_bridge`. -``` - -```{option} cpu= - -Merge on CPU when GPU memory is tight or when running outside a training container. - -Default: `true`. -``` - -```{option} tp= - -Tensor parallel size for Megatron-Bridge merge. - -Default: `1`. -``` - -```{option} pp= - -Pipeline parallel size for Megatron-Bridge merge. - -Default: `1`. -``` - -```{option} ep= - -Expert parallel size for Megatron-Bridge merge. - -Default: `1`. -``` - -## Command Examples - -Merge an AutoModel PEFT adapter into its original Hugging Face base: - -```console -$ nemotron steps run convert/merge_lora -c default \ - backend=hf_peft \ - lora_checkpoint=/path/to/adapter_checkpoint \ - base_hf_path=/path/to/original_hf_base \ - output_hf_path=./output/convert/merged-hf -``` - -Merge a Megatron-Bridge PEFT adapter and export the merged result to Hugging Face layout: - -```console -$ nemotron steps run convert/merge_lora -c default --batch lepton_convert_model \ - backend=megatron_bridge \ - lora_checkpoint=/mnt/lustre-shared/output/peft/megatron_bridge/adapter \ - base_megatron_path=/mnt/lustre-shared/output/base/megatron \ - hf_model_id=nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16 \ - output_megatron_path=/mnt/lustre-shared/output/convert/merged-megatron \ - output_hf_path=/mnt/lustre-shared/output/convert/merged-hf -``` - -## Recovery Notes - -- If scores differ after merge, evaluate the adapter-loaded model and the merged checkpoint separately; do not assume they are identical. -- If merge fails with missing keys or shape mismatch, verify the adapter was trained against the same base checkpoint. -- Write outputs to a fresh directory so a failed merge cannot overwrite the base or adapter. - -## Related Documentation - -- [Choose a PEFT Backend](../../how-to/choose-peft-backend.md) -- [convert/hf_to_megatron](hf-to-megatron.md) -- [PEFT documentation](https://github.com/huggingface/peft) diff --git a/docs/train-models/reference/env-profile-generator.md b/docs/train-models/reference/env-profile-generator.md deleted file mode 100644 index 0a0e67746..000000000 --- a/docs/train-models/reference/env-profile-generator.md +++ /dev/null @@ -1,136 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Command-line reference for the env/env_toml step that generates an environment profile file for every Nemotron training step." -topics: ["Training", "Reference", "Environment Profiles"] -tags: ["Reference", "CLI", "Environment Profile", "Lepton", "Slurm"] -content: - type: "Reference" - difficulty: "Intermediate" - audience: ["ML Engineer", "Developer"] ---- - -# Env Profile Generator - -The `env/env_toml` step generates the *environment profile* file that every other Nemotron training step reads when it submits a job to a cluster. -The generator emits a single Tom's Obvious Minimal Language (TOML) file with one named profile per step, including data preparation, supervised fine-tuning (SFT), parameter-efficient fine-tuning (PEFT), reinforcement learning (RL), pretraining, optimization, evaluation, synthetic data generation, translation, and curation profiles. -You typically run this step once, before you submit your first training job to a cluster, and you re-run it only when site values such as the node group, container image, or shared mount path change. - -## Syntax - -```bash -nemotron steps run env/env_toml -c [= ...] -``` - -The CLI accepts the same dotlist override syntax used by every other step. -Refer to the [Nemotron Steps CLI Reference](cli-reference.md) for the shared flag set. - -## Configuration Files - -The step ships three configuration files under `src/nemotron/steps/env/env_toml/config/`. - -| File | Cluster Shape | -| --- | --- | -| `lepton.yaml` | Targets a DGX Cloud Lepton workspace with node-group, fileset mount, and resource-shape placeholders that you override at the command line. | -| `slurm.yaml` | Targets a Slurm cluster reached over SSH, with host, account, partition, and Lustre mount placeholders. | -| `dgxcloud.yaml` | Targets a DGX Cloud Run:AI installation with project, department, and image-pull credential placeholders. | - -The default configuration is `lepton`. - -## Inputs and Outputs - -The step has no input artifact. -It produces one `env_toml` artifact, the generated environment profile file. - -The default `output_path` differs by configuration. - -| Configuration | Default `output_path` | -| --- | --- | -| `lepton` | `env.lepton.toml` | -| `slurm` | `env.slurm.toml` | -| `dgxcloud` | `env.dgxcloud.toml` | - -Override `output_path` to write the file somewhere other than the repository root, for example a per-cluster directory under your quality assurance workspace. - -## Parameters - -The step exposes three top-level parameters. -Pass each one as a dotlist override after the configuration name. - -```{option} output_path= - -Where to write the generated environment profile file. -A relative path is resolved against the current working directory. -Keep this value at the repository root for normal use so the CLI can discover the file by walking upward from any subdirectory. - -Default: `env.lepton.toml`, `env.slurm.toml`, or `env.dgxcloud.toml`, taken from the selected configuration. - -Example: `output_path=env.toml` -``` - -```{option} force= - -Whether to overwrite `output_path` when a file already exists at that location. -Set this value to `true` when you re-run the generator with new site overrides and you want the existing file replaced. -Leave the value at the default when you want the existing file preserved so a stale invocation cannot clobber a hand-edited profile. - -Default: `false`. - -Example: `force=true` -``` - -```{option} sections..= - -A dotlist override that reaches into one of the named profiles emitted by the generator and replaces a specific key. -Use this pattern to set site-specific values such as the node group, container image, mount path, or per-profile environment variables without editing the shipped configuration file. - -The dot path always begins with `sections`, then the profile name, then the key path inside that profile. -Nested keys, such as a single environment variable, append additional dot segments. - -Examples: - -- `sections.lepton_base.node_group=` replaces the node group on the base Lepton profile. -- `sections.lepton_base.env_vars.WANDB_PROJECT=` sets the Weights and Biases project name for every profile that inherits from `lepton_base`. -- `sections.slurm_base.account=` sets the Slurm account on the base Slurm profile. -``` - -The shipped configurations declare additional document-level keys such as `preamble` and `checks` that drive the generator itself. -These keys behave identically to any other dotlist override, but most users only need the three parameters described above. - -## Examples - -Generate a default Lepton environment profile at the repository root and overwrite any existing file at that path. - -```console -$ nemotron steps run env/env_toml -c lepton output_path=env.toml force=true -``` - -The command writes a single `env.toml` file at the repository root with every canonical profile the Nemotron training steps expect, including data-prep, SFT, PEFT, RL, pretrain, optimize, evaluate, synthetic data generation, translation, and curation profiles. - -Generate a Lepton environment profile with site-specific node-group and Weights and Biases overrides. - -```console -$ nemotron steps run env/env_toml -c lepton \ - output_path=env.lepton.toml \ - force=true \ - sections.lepton_base.node_group= \ - sections.lepton_base.env_vars.WANDB_PROJECT= \ - sections.lepton_base.env_vars.WANDB_ENTITY= \ - sections.lepton_base.env_vars.WANDB_NAME= -``` - -Each `sections.lepton_base.*` override replaces the matching key on the `[lepton_base]` profile in the generated file. -Every child profile that extends `lepton_base`, for example `lepton_sft_automodel` and `lepton_prep_sft_packing`, inherits the new value through the profile inheritance chain. - -## Editing the Generated File - -The generated file is a normal TOML document. -You can hand-edit any profile after generation, for example to add a one-off mount path or to change a container image for a single profile. -When you need only a small slice of profiles or you want to start from a minimal hand-written file rather than the full set of canonical profiles, follow the manual template walkthrough in the [Quickstart](../getting-started.md). - -## Related Documentation - -- [Quickstart](../getting-started.md) -- [Nemotron Steps CLI Reference](cli-reference.md) -- [Step Catalog](step-catalog.md) -- [Configuration Conventions](config-conventions.md) diff --git a/docs/train-models/reference/index.md b/docs/train-models/reference/index.md deleted file mode 100644 index f4e645023..000000000 --- a/docs/train-models/reference/index.md +++ /dev/null @@ -1,123 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Reference index for Nemotron training steps, configuration conventions, and the CLI." -topics: ["Training", "Reference"] -tags: ["Reference", "CLI", "Configuration", "Steps"] -content: - type: "Reference" - difficulty: "All Levels" - audience: ["ML Engineer", "Developer"] ---- - -# Training Reference - -This section provides lookup material for every supervised fine-tuning (SFT), parameter-efficient fine-tuning (PEFT), reinforcement learning (RL), and optimization step packaged under `src/nemotron/steps/`. -Use these pages to find the exact CLI syntax, configuration file layout, parameters, and configuration overrides for each step. - -## Reference Sections - -::::{grid} 1 2 2 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} {octicon}`terminal;1.5em;sd-mr-1` Nemotron Steps CLI Reference -:link: cli-reference -:link-type: doc -Shared command-line syntax, options, dotlist overrides, and passthrough arguments for the `nemotron steps` command group. -+++ -{bdg-success}`lookup` -::: - -:::{grid-item-card} {octicon}`gear;1.5em;sd-mr-1` Env Profile Generator -:link: env-profile-generator -:link-type: doc -The packaged `env/env_toml` step that generates the environment profile file every other training step consumes. -+++ -{bdg-success}`setup` -::: - -:::{grid-item-card} {octicon}`list-unordered;1.5em;sd-mr-1` Step Catalog -:link: step-catalog -:link-type: doc -Every step identifier, manifest path, and per-step reference link. -+++ -{bdg-success}`lookup` -::: - -:::{grid-item-card} {octicon}`file-code;1.5em;sd-mr-1` Configuration Conventions -:link: config-conventions -:link-type: doc -Per-step `config/` layout, CLI configuration resolution, dotlist override rules, and environment-variable expansion. -+++ -{bdg-success}`lookup` -::: - -:::: - -## Per-Category Step References - -::::{grid} 1 2 2 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} {octicon}`rocket;1.5em;sd-mr-1` Supervised Fine-Tuning Steps -:link: sft/index -:link-type: doc -The `sft/automodel` and `sft/megatron_bridge` references. -+++ -{bdg-success}`reference` -::: - -:::{grid-item-card} {octicon}`tools;1.5em;sd-mr-1` Parameter-Efficient Fine-Tuning Steps -:link: peft/index -:link-type: doc -The `peft/automodel` and `peft/megatron_bridge` references. -+++ -{bdg-success}`reference` -::: - -:::{grid-item-card} {octicon}`milestone;1.5em;sd-mr-1` Reinforcement Learning Steps -:link: rl/index -:link-type: doc -The `rl/nemo_rl/dpo`, `rl/nemo_rl/rlvr`, and `rl/nemo_rl/rlhf` references. -+++ -{bdg-success}`reference` -::: - -:::{grid-item-card} {octicon}`zap;1.5em;sd-mr-1` Optimization Steps -:link: optimize/index -:link-type: doc -The `optimize/modelopt/quantize`, `optimize/modelopt/prune`, and `optimize/modelopt/distill` references. -+++ -{bdg-success}`reference` -::: - -:::{grid-item-card} {octicon}`git-compare;1.5em;sd-mr-1` Checkpoint Conversion Steps -:link: convert/index -:link-type: doc -The `convert/hf_to_megatron`, `convert/megatron_to_hf`, and `convert/merge_lora` references. -+++ -{bdg-success}`reference` -::: - -:::: - -## Related Documentation - -- [Getting Started With Training Steps](../getting-started.md) walks through a first run with the tiny configuration. -- [Execution Through NeMo Run](../../nemo_runspec/nemo-run.md) explains attached and detached execution, environment profiles, and remote job directories. -- [How-To Guides](../how-to/index.md) cover backend choice, data and checkpoint formats, and environment-and-executor setup. - -```{toctree} -:hidden: -:maxdepth: 2 - -cli-reference -env-profile-generator -step-catalog -config-conventions -SFT Steps -PEFT Steps -RL Steps -Optimization Steps -Checkpoint Conversion Steps -``` diff --git a/docs/train-models/reference/optimize/distill.md b/docs/train-models/reference/optimize/distill.md deleted file mode 100644 index e088b02b8..000000000 --- a/docs/train-models/reference/optimize/distill.md +++ /dev/null @@ -1,182 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Command-line reference for the optimize/modelopt/distill step." -topics: ["Training", "Reference", "CLI", "Optimization", "Distillation"] -tags: ["Reference", "CLI", "Steps", "Optimization", "Distillation", "Teacher-Student", "ModelOpt", "Megatron-Bridge"] -content: - type: "Reference" - difficulty: "All Levels" - audience: ["ML Engineer", "Developer"] ---- - -# optimize/modelopt/distill - -This step runs teacher-student distillation by using NVIDIA Model Optimizer through NVIDIA Megatron-Bridge. -The step can run as a standalone training job, or as a quality-recovery pass after pruning or quantization. -Real-data runs consume Megatron `bin/idx` data produced by `data_prep/pretrain_prep`. -The step produces a distilled Megatron distributed checkpoint. - -## Syntax - -```bash -nemotron steps run optimize/modelopt/distill \ - [-c ] \ - [-r | -b ] \ - [-d] \ - [--force-squash] \ - [...] \ - [...] -``` - -Refer to the [Nemotron Steps CLI Reference](../cli-reference.md) for the shared flag set. - -## Configuration Files - -The step ships two configuration files under `src/nemotron/steps/optimize/modelopt/distill/config/`. - -| File | Purpose | -| --- | --- | -| `default.yaml` | Generic teacher-student distillation configuration with `Qwen/Qwen3-8B` as the teacher and `Qwen/Qwen3-4B` as the student. | -| `tiny.yaml` | Short validation run that exercises the distillation pipeline with mock data. | - -Pass the configuration name with `-c`: - -```console -$ nemotron steps run optimize/modelopt/distill -c tiny -$ nemotron steps run optimize/modelopt/distill -c default -``` - -## Inputs and Outputs - -| Direction | Artifact Type | Required | Description | -| --- | --- | --- | --- | -| Consumes | `checkpoint_hf` | Yes | The teacher and student Hugging Face (HF) checkpoints. | -| Consumes | `binidx` | No | Optional real distillation data from `data_prep/pretrain_prep`. This input is unnecessary when `args.use_mock_data=true`. | -| Produces | `checkpoint_megatron` | тАФ | The distilled Megatron distributed checkpoint. | - -## Step Parameters - -The manifest declares five distillation parameters. -Pass them as dotlist overrides. - -```{option} args.teacher_hf_path= - -The Hugging Face identifier or local path for the teacher checkpoint. - -Example: `args.teacher_hf_path=nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16` -``` - -```{option} args.student_hf_path= - -The Hugging Face identifier or local path for the student checkpoint. - -Example: `args.student_hf_path=Qwen/Qwen3-4B` -``` - -```{option} args.data_paths= - -The Megatron data blend, expressed as the upstream command-line sequence in the form `[weight, prefix, weight, prefix, ...]`. - -Example: `args.data_paths='[0.5, /lustre/data/wiki, 0.5, /lustre/data/c4]'` -``` - -```{option} args.use_mock_data= - -When set to `true`, the step runs a validation pass with mock data instead of real Megatron `bin/idx` data. - -Default: `false`. - -Example: `args.use_mock_data=true` -``` - -```{option} extra_args= - -Literal upstream arguments that the step forwards to the distillation script. -Use this parameter to pass newly added Model Optimizer flags that do not yet have a dedicated `args.*` entry. - -Default: `[]`. - -Example: `extra_args=["--hf_export_path", "/lustre/distilled/hf"]` -``` - -Frequently used dotlist overrides drawn from the default configuration include the following. - -```{option} args.tp_size= - -The tensor-parallel degree applied during distillation. - -Example: `args.tp_size=4` -``` - -```{option} args.train_iters= - -The number of training iterations. - -Example: `args.train_iters=2000` -``` - -```{option} args.seq_length= - -The training sequence length. - -Example: `args.seq_length=4096` -``` - -## Strategies - -The manifest records three operator strategies for `optimize/modelopt/distill`. - -- When you recover quality after pruning or quantization, set the original BF16 checkpoint as the teacher and the optimized checkpoint as the student. -- When you validate the pipeline, set `args.use_mock_data=true`, `args.seq_length=512`, `args.train_iters=100`, and a small `args.eval_iters` value. -- When you need a Hugging Face checkpoint, set `args.hf_export_path` and `args.student_hf_model`, or convert a saved Megatron iteration after the run completes. - -## Command Examples - -Run the tiny validation configuration locally with mock data: - -```console -$ nemotron steps run optimize/modelopt/distill -c tiny -``` - -Compile the default configuration without submitting the job: - -```console -$ nemotron steps run optimize/modelopt/distill -c default --dry-run -``` - -Submit an attached distillation run on a Lepton profile with real data: - -```console -$ nemotron steps run optimize/modelopt/distill -c default -r lepton_optimize_modelopt_distill \ - args.teacher_hf_path=nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16 \ - args.student_hf_path=Qwen/Qwen3-4B \ - args.data_paths='[0.5, /lustre/data/wiki, 0.5, /lustre/data/c4]' \ - args.train_iters=2000 -``` - -Submit a detached pipeline-validation run on a Slurm profile with mock data: - -```console -$ nemotron steps run optimize/modelopt/distill -c default -b slurm_optimize_modelopt_distill \ - args.use_mock_data=true \ - args.seq_length=512 \ - args.train_iters=100 -``` - -## Related Skill - -Run the `nemotron-optimizer-distillation` skill with your agent. - -## Related Documentation - -- [Nemotron Steps CLI Reference](../cli-reference.md) covers the shared option set, dotlist overrides, and passthrough arguments. -- [Run Post-Training Optimization](../../how-to/run-optimization.md) explains the ordering of prune and distill, hardware targets, and quality recovery. -- [optimize/modelopt/prune](prune.md) feeds pruned checkpoints into this step. - -### Upstream - -- [NVIDIA Model Optimizer Repository](https://github.com/NVIDIA/Model-Optimizer) -- [NVIDIA Model Optimizer Documentation](https://nvidia.github.io/Model-Optimizer/) -- [Megatron-Bridge Documentation](https://docs.nvidia.com/nemo/megatron-bridge/0.4.0/) -- [Megatron-Bridge Distillation Guide](https://docs.nvidia.com/nemo/megatron-bridge/0.4.0/training/distillation.html) diff --git a/docs/train-models/reference/optimize/index.md b/docs/train-models/reference/optimize/index.md deleted file mode 100644 index d695733fc..000000000 --- a/docs/train-models/reference/optimize/index.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Reference pages for the model optimization steps." -topics: ["Training", "Reference", "Optimization", "Quantization", "Pruning", "Distillation"] -tags: ["Reference", "Steps", "Optimization", "ModelOpt", "Megatron-Bridge"] -content: - type: "Reference" - difficulty: "All Levels" - audience: ["ML Engineer", "Developer"] ---- - -# Model Optimization Steps - -This section documents the model optimization steps registered under `src/nemotron/steps/optimize/modelopt/`. -The three steps wrap NVIDIA Model Optimizer through NVIDIA Megatron-Bridge to quantize, prune, and distill trained checkpoints. - -## Steps - -::::{grid} 1 2 2 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} optimize/modelopt/quantize -:link: quantize -:link-type: doc -Post-training quantization with floating-point recipes such as fp8 and nvfp4, and integer recipes such as int8_sq and int4_awq. -+++ -{bdg-success}`reference` -::: - -:::{grid-item-card} optimize/modelopt/prune -:link: prune -:link-type: doc -Structured pruning by target parameter budget or explicit architecture. -+++ -{bdg-success}`reference` -::: - -:::{grid-item-card} optimize/modelopt/distill -:link: distill -:link-type: doc -Teacher-student distillation that recovers quality after pruning or quantization. -+++ -{bdg-success}`reference` -::: - -:::: - -## Related Documentation - -- [Nemotron Steps CLI Reference](../cli-reference.md) covers the shared option set, dotlist overrides, and passthrough arguments. -- [Run Post-Training Optimization](../../how-to/run-optimization.md) explains the ordering of prune and distill, hardware targets, and quality recovery. -- [Configuration Conventions](../config-conventions.md) describes the per-step `config/` layout. - -```{toctree} -:hidden: -:maxdepth: 1 - -quantize -prune -distill -``` diff --git a/docs/train-models/reference/optimize/prune.md b/docs/train-models/reference/optimize/prune.md deleted file mode 100644 index 0a23bcffd..000000000 --- a/docs/train-models/reference/optimize/prune.md +++ /dev/null @@ -1,174 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Command-line reference for the optimize/modelopt/prune step." -topics: ["Training", "Reference", "CLI", "Optimization", "Pruning"] -tags: ["Reference", "CLI", "Steps", "Optimization", "Pruning", "ModelOpt", "Megatron-Bridge"] -content: - type: "Reference" - difficulty: "All Levels" - audience: ["ML Engineer", "Developer"] ---- - -# optimize/modelopt/prune - -This step runs structured pruning on a Hugging Face (HF) format checkpoint by using NVIDIA Model Optimizer through NVIDIA Megatron-Bridge. -The step supports pruning by a target parameter budget that Model Optimizer searches against, or pruning to an explicit architecture that you supply. -The step produces a pruned Hugging Face checkpoint that you can pass to `optimize/modelopt/distill` for quality recovery. - -## Syntax - -```bash -nemotron steps run optimize/modelopt/prune \ - [-c ] \ - [-r | -b ] \ - [-d] \ - [--force-squash] \ - [...] \ - [...] -``` - -Refer to the [Nemotron Steps CLI Reference](../cli-reference.md) for the shared flag set. - -## Configuration Files - -The step ships two configuration files under `src/nemotron/steps/optimize/modelopt/prune/config/`. - -| File | Purpose | -| --- | --- | -| `default.yaml` | Generic structured-pruning configuration for `Qwen/Qwen3-8B` with two-way pipeline parallelism. | -| `tiny.yaml` | Short validation run that exercises the pruning pipeline. | - -Pass the configuration name with `-c`: - -```console -$ nemotron steps run optimize/modelopt/prune -c tiny -$ nemotron steps run optimize/modelopt/prune -c default -``` - -## Inputs and Outputs - -| Direction | Artifact Type | Required | Description | -| --- | --- | --- | --- | -| Consumes | `checkpoint_hf` | Yes | A Hugging Face model identifier or checkpoint to prune. | -| Produces | `checkpoint_hf` | тАФ | The pruned Hugging Face checkpoint. | - -## Step Parameters - -The manifest declares four pruning parameters. -Pass them as dotlist overrides. - -```{option} args.prune_target_params= - -The target parameter count for the Model Optimizer search. -Use scientific notation for billions of parameters. - -Default: `6e9`. - -Example: `args.prune_target_params=4e9` -``` - -```{option} args.prune_export_config= - -The explicit target architecture for manual pruning, expressed as a dictionary that maps hyperparameter names such as `hidden_size`, `ffn_hidden_size`, or `num_layers` to integer values. -Set this parameter when you want a specific architecture and you set `args.prune_target_params=null`. - -Example: `args.prune_export_config='{"hidden_size":4096,"ffn_hidden_size":11008,"num_layers":24}'` -``` - -```{option} args.hparams_to_skip= - -The architecture hyperparameters that the search must leave unchanged. - -Example: `args.hparams_to_skip=["num_attention_heads"]` -``` - -```{option} extra_args= - -Literal upstream arguments that the step forwards to the pruning script. -Use this parameter to pass newly added Model Optimizer flags that do not yet have a dedicated `args.*` entry. - -Default: `[]`. - -Example: `extra_args=["--num_layers_in_first_pipeline_stage", "4"]` -``` - -Frequently used dotlist overrides drawn from the default configuration include the following. - -```{option} args.hf_model_name_or_path= - -The Hugging Face identifier or local path for the checkpoint to prune. - -Example: `args.hf_model_name_or_path=meta-llama/Llama-3.1-8B-Instruct` -``` - -```{option} args.output_hf_path= - -The destination directory for the pruned Hugging Face checkpoint. - -Example: `args.output_hf_path=/lustre/runs/pruned/llama-6b` -``` - -```{option} args.pp_size= - -The pipeline-parallel degree applied during pruning. - -Example: `args.pp_size=4` -``` - -## Strategies - -The manifest records three operator strategies for `optimize/modelopt/prune`. - -- When you know the target model budget, set `args.prune_target_params` and leave `args.prune_export_config` unset so Model Optimizer searches candidate architectures. -- When you need a specific architecture, set `args.prune_export_config` to the target dictionary and set `args.prune_target_params=null`. -- When the layer count does not divide the pipeline-parallel size, set `args.num_layers_in_first_pipeline_stage` and `args.num_layers_in_last_pipeline_stage` to balance the partition. - -## Command Examples - -Run the tiny validation configuration locally: - -```console -$ nemotron steps run optimize/modelopt/prune -c tiny -``` - -Compile the default configuration without submitting the job: - -```console -$ nemotron steps run optimize/modelopt/prune -c default --dry-run -``` - -Submit an attached run on a Lepton profile that searches for a four-billion-parameter target: - -```console -$ nemotron steps run optimize/modelopt/prune -c default -r lepton_optimize_modelopt_prune \ - args.hf_model_name_or_path=meta-llama/Llama-3.1-8B-Instruct \ - args.prune_target_params=4e9 \ - args.output_hf_path=/lustre/pruned/llama-4b -``` - -Submit a detached run on a Slurm profile that prunes to a manually specified architecture: - -```console -$ nemotron steps run optimize/modelopt/prune -c default -b slurm_optimize_modelopt_prune \ - args.prune_target_params=null \ - args.prune_export_config='{"hidden_size":4096,"ffn_hidden_size":11008,"num_layers":24}' \ - args.pp_size=4 -``` - -## Related Skill - -Run the `nemotron-optimizer-pruning` skill with your agent. - -## Related Documentation - -- [Nemotron Steps CLI Reference](../cli-reference.md) covers the shared option set, dotlist overrides, and passthrough arguments. -- [Run Post-Training Optimization](../../how-to/run-optimization.md) explains the ordering of prune and distill, hardware targets, and quality recovery. -- [optimize/modelopt/distill](distill.md) recovers quality after pruning. - -### Upstream - -- [NVIDIA Model Optimizer Repository](https://github.com/NVIDIA/Model-Optimizer) -- [NVIDIA Model Optimizer Documentation](https://nvidia.github.io/Model-Optimizer/) -- [Megatron-Bridge Documentation](https://docs.nvidia.com/nemo/megatron-bridge/0.4.0/) -- [Megatron-Bridge Pruning Guide](https://docs.nvidia.com/nemo/megatron-bridge/0.4.0/training/pruning.html) diff --git a/docs/train-models/reference/optimize/quantize.md b/docs/train-models/reference/optimize/quantize.md deleted file mode 100644 index ff2c535d9..000000000 --- a/docs/train-models/reference/optimize/quantize.md +++ /dev/null @@ -1,164 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Command-line reference for the optimize/modelopt/quantize step." -topics: ["Training", "Reference", "CLI", "Optimization", "Quantization"] -tags: ["Reference", "CLI", "Steps", "Optimization", "Quantization", "ModelOpt", "Megatron-Bridge", "FP8", "NVFP4"] -content: - type: "Reference" - difficulty: "All Levels" - audience: ["ML Engineer", "Developer"] ---- - -# optimize/modelopt/quantize - -This step runs post-training quantization (PTQ) on a Hugging Face (HF) format checkpoint by using NVIDIA Model Optimizer through NVIDIA Megatron-Bridge. -The step supports every quantization recipe that the installed Megatron-Bridge quantization script accepts. -The step produces a quantized Megatron distributed checkpoint that you can export back to Hugging Face format with the upstream `export.py` script. - -## Syntax - -```bash -nemotron steps run optimize/modelopt/quantize \ - [-c ] \ - [-r | -b ] \ - [-d] \ - [--force-squash] \ - [...] \ - [...] -``` - -Refer to the [Nemotron Steps CLI Reference](../cli-reference.md) for the shared flag set. - -## Configuration Files - -The step ships four configuration files under `src/nemotron/steps/optimize/modelopt/quantize/config/`. - -| File | Purpose | -| --- | --- | -| `default.yaml` | Generic post-training quantization configuration with `fp8` selected and `nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16` as the input checkpoint. | -| `fp8.yaml` | FP8 quantization configuration tuned for Hopper-class hardware. | -| `nvfp4.yaml` | NVFP4 quantization configuration tuned for Blackwell-class hardware. | -| `tiny.yaml` | Short validation run that exercises the quantization pipeline. | - -Pass the configuration name with `-c`: - -```console -$ nemotron steps run optimize/modelopt/quantize -c tiny -$ nemotron steps run optimize/modelopt/quantize -c default -$ nemotron steps run optimize/modelopt/quantize -c fp8 -$ nemotron steps run optimize/modelopt/quantize -c nvfp4 -``` - -## Inputs and Outputs - -| Direction | Artifact Type | Required | Description | -| --- | --- | --- | --- | -| Consumes | `checkpoint_hf` | Yes | A Hugging Face base or aligned checkpoint to quantize. | -| Produces | `checkpoint_megatron` | тАФ | A quantized Megatron distributed checkpoint. Export the artifact to Hugging Face format with `/opt/Megatron-Bridge/examples/quantization/export.py` when you need a deployable Hugging Face checkpoint. | - -## Step Parameters - -The manifest declares three quantization parameters. -Pass them as dotlist overrides. - -```{option} args.export_quant_cfg= - -The quantization recipe to apply. -The supported recipes match the choices that the installed upstream `quantize.py` accepts. - -Choices: `int8_sq`, `fp8`, `fp8_blockwise`, `int4_awq`, `w4a8_awq`, `nvfp4`. - -Default: `fp8`. - -Example: `args.export_quant_cfg=nvfp4` -``` - -```{option} args.calib_size= - -The number of calibration samples used to determine quantization scales. - -Default: `512`. - -Example: `args.calib_size=1024` -``` - -```{option} extra_args= - -Literal upstream arguments that the step forwards to the underlying quantization script. -Use this parameter to pass newly added Model Optimizer flags that do not yet have a dedicated `args.*` entry. - -Default: `[]`. - -Example: `extra_args=["--my_new_flag", "value"]` -``` - -Frequently used dotlist overrides drawn from the default configuration include the following. - -```{option} args.hf_model_id= - -The Hugging Face identifier or local path for the checkpoint to quantize. - -Example: `args.hf_model_id=nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16` -``` - -```{option} args.megatron_save_path= - -The destination directory for the quantized Megatron distributed checkpoint. - -Example: `args.megatron_save_path=/lustre/runs/quantized/nano3-fp8` -``` - -## Strategies - -The manifest records three operator strategies for `optimize/modelopt/quantize`. - -- When the target hardware is Hopper or H100, start from `config/fp8.yaml` and set `args.export_quant_cfg=fp8`. -- When the target hardware is Blackwell or B200, start from `config/nvfp4.yaml` and set `args.export_quant_cfg=nvfp4`. -- When you need a Hugging Face checkpoint, export the produced Megatron checkpoint by using `/opt/Megatron-Bridge/examples/quantization/export.py` after the quantization run completes. - -## Command Examples - -Run the tiny validation configuration locally: - -```console -$ nemotron steps run optimize/modelopt/quantize -c tiny -``` - -Compile the FP8 configuration without submitting the job: - -```console -$ nemotron steps run optimize/modelopt/quantize -c fp8 --dry-run -``` - -Submit an attached FP8 run on a Lepton profile for the Nano3 base model: - -```console -$ nemotron steps run optimize/modelopt/quantize -c fp8 -r lepton_optimize_modelopt_quantize \ - args.hf_model_id=nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-Base-BF16 \ - args.calib_size=1024 -``` - -Submit a detached NVFP4 run on a Slurm profile for the Super3 base model: - -```console -$ nemotron steps run optimize/modelopt/quantize -c nvfp4 -b slurm_optimize_modelopt_quantize \ - args.hf_model_id=nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16 \ - args.megatron_save_path=/lustre/quantized/super3-nvfp4 -``` - -## Related Skill - -Run the `nemotron-optimizer-quantization` skill with your agent. - -## Related Documentation - -- [Nemotron Steps CLI Reference](../cli-reference.md) covers the shared option set, dotlist overrides, and passthrough arguments. -- [Run Post-Training Optimization](../../how-to/run-optimization.md) explains the ordering of prune and distill, hardware targets, and quality recovery. - -### Upstream - -- [NVIDIA Model Optimizer Repository](https://github.com/NVIDIA/Model-Optimizer) -- [NVIDIA Model Optimizer Documentation](https://nvidia.github.io/Model-Optimizer/) -- [Megatron-Bridge Documentation](https://docs.nvidia.com/nemo/megatron-bridge/latest/) -- [Megatron-Bridge Quantization Guide](https://docs.nvidia.com/nemo/megatron-bridge/latest/modelopt/quantization.html) diff --git a/docs/train-models/reference/peft/automodel.md b/docs/train-models/reference/peft/automodel.md deleted file mode 100644 index 3ff88d21d..000000000 --- a/docs/train-models/reference/peft/automodel.md +++ /dev/null @@ -1,193 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Command-line reference for the peft/automodel training step." -topics: ["Training", "Reference", "CLI", "PEFT", "LoRA", "AutoModel"] -tags: ["Reference", "CLI", "Steps", "PEFT", "LoRA", "AutoModel", "Hugging Face"] -content: - type: "Reference" - difficulty: "All Levels" - audience: ["ML Engineer", "Developer"] ---- - -# peft/automodel - -This step trains a low-rank adaptation (LoRA) adapter on top of a Hugging Face (HF) format base model by using the NeMo AutoModel library. -The training loop matches `sft/automodel`, with a LoRA adapter wired in by default to keep large base models practical for adapter tuning. -The step produces a `checkpoint_lora` artifact that you can merge with the base model by using the `convert/merge_lora` step. - -## Syntax - -```bash -nemotron steps run peft/automodel \ - [-c ] \ - [-r | -b ] \ - [-d] \ - [--force-squash] \ - [...] \ - [...] -``` - -Refer to the [Nemotron Steps CLI Reference](../cli-reference.md) for the shared flag set. - -## Configuration Files - -The step ships two configuration files under `src/nemotron/steps/peft/automodel/config/`. - -| File | Purpose | -| --- | --- | -| `default.yaml` | Full-shape LoRA tuning on `Qwen/Qwen3-30B-A3B` with the AutoModel `TrainFinetuneRecipeForNextTokenPrediction` recipe. | -| `tiny.yaml` | Short validation run with a small dataset slice and a short training schedule. | - -Pass the configuration name with `-c`: - -```console -$ nemotron steps run peft/automodel -c tiny -$ nemotron steps run peft/automodel -c default -``` - -## Inputs and Outputs - -| Direction | Artifact Type | Required | Description | -| --- | --- | --- | --- | -| Consumes | `training_jsonl` | Yes | Chat-format JSON Lines with a `messages` field. | -| Produces | `checkpoint_lora` | тАФ | LoRA adapter weights. Merge the adapter with the base model by using `convert/merge_lora` to obtain a deployable Hugging Face checkpoint. | - -## Supported Models - -The manifest declares three reference base models. -Other Hugging Face causal language models that load through `AutoModelForCausalLM.from_pretrained` also work. - -| Model | Minimum GPUs | Default | Notes | -| --- | --- | --- | --- | -| `Qwen/Qwen3-30B-A3B` | 8 | Yes | Mixture-of-experts (MoE) base model used by `config/default.yaml`. | -| `meta-llama/Llama-3.1-8B-Instruct` | 2 | No | Common dense baseline for single-node LoRA tuning. | -| `mistralai/Mistral-7B-Instruct-v0.3` | 1 | No | Strong default for single-GPU LoRA tuning. | - -Override the base model from the command line: - -```console -$ nemotron steps run peft/automodel -c default \ - model.pretrained_model_name_or_path=mistralai/Mistral-7B-Instruct-v0.3 -``` - -## Step Parameters - -The manifest declares two LoRA-specific parameters. -Pass them as dotlist overrides. - -```{option} peft.dim= - -The LoRA rank. -Values in the eight-to-thirty-two range work well for most tasks. -Raise the rank when the downstream task is harder than the base task. - -Default: `16`. - -Example: `peft.dim=32` -``` - -```{option} peft.alpha= - -The LoRA alpha scaling factor. -A value equal to twice the rank works well in practice. - -Default: `32`. - -Example: `peft.alpha=64` -``` - -Frequently used dotlist overrides drawn from the AutoModel recipe include the following. - -```{option} step_scheduler.max_steps= - -The maximum number of optimizer steps for the run. - -Example: `step_scheduler.max_steps=200` -``` - -```{option} step_scheduler.global_batch_size= - -The global batch size across all data-parallel workers. - -Example: `step_scheduler.global_batch_size=64` -``` - -```{option} dataset.path_or_dataset_id= - -The Hugging Face dataset identifier or a local path that resolves to a JSON Lines chat dataset. - -Example: `dataset.path_or_dataset_id=/data/my-instructions.jsonl` -``` - -```{option} peft.dropout= - -The LoRA dropout rate applied during training. - -Example: `peft.dropout=0.05` -``` - -## Strategies - -The manifest records two operator strategies for `peft/automodel`. - -- When the run targets a single GPU or memory is tight, keep `peft.dim` low, in the eight-to-sixteen range, and prefer a Mistral-class base model. -- When the adapter is intended for deployment, run `convert/merge_lora` after training to merge the adapter with the base model and produce a standalone Hugging Face checkpoint. - -## Common Errors - -```{option} oom - -Cause: GPU memory is exhausted during forward or backward passes. - -Recovery: reduce `peft.dim`, lower `step_scheduler.local_batch_size`, lower the maximum sequence length, or move to a smaller base model. -``` - -## Command Examples - -Run the tiny validation configuration locally: - -```console -$ nemotron steps run peft/automodel -c tiny -``` - -Compile the default configuration on a Lepton profile without submitting the job: - -```console -$ nemotron steps run peft/automodel -c default -r lepton_peft_automodel --dry-run -``` - -Submit an attached LoRA run with a higher adapter rank: - -```console -$ nemotron steps run peft/automodel -c default -r lepton_peft_automodel \ - peft.dim=32 \ - peft.alpha=64 \ - step_scheduler.max_steps=500 -``` - -Submit a detached single-GPU LoRA run on a Slurm profile against a smaller base model: - -```console -$ nemotron steps run peft/automodel -c default -b slurm_peft_automodel \ - model.pretrained_model_name_or_path=mistralai/Mistral-7B-Instruct-v0.3 \ - peft.dim=8 \ - peft.alpha=16 -``` - -## Related Skill - -Run the `nemotron-peft-automodel` skill with your agent. - -## Related Documentation - -- [Nemotron Steps CLI Reference](../cli-reference.md) covers the shared option set, dotlist overrides, and passthrough arguments. -- [Choose a PEFT Backend](../../how-to/choose-peft-backend.md) compares `peft/automodel` and `peft/megatron_bridge`. -- [peft/megatron_bridge](megatron-bridge.md) documents the Megatron-Bridge LoRA step. - -### Upstream - -- [NeMo AutoModel Repository](https://github.com/NVIDIA-NeMo/Automodel) -- [NeMo AutoModel Documentation](https://docs.nvidia.com/nemo/automodel/latest/index.html) -- [NeMo AutoModel PEFT Guide](https://docs.nvidia.com/nemo/automodel/latest/guides/llm/finetune.html) -- [AutoModel Training Script](https://github.com/NVIDIA-NeMo/Automodel/blob/main/nemo_automodel/recipes/llm/train_ft.py) diff --git a/docs/train-models/reference/peft/index.md b/docs/train-models/reference/peft/index.md deleted file mode 100644 index 7c9f2de32..000000000 --- a/docs/train-models/reference/peft/index.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Reference pages for the parameter-efficient fine-tuning training steps." -topics: ["Training", "Reference", "PEFT", "LoRA"] -tags: ["Reference", "Steps", "PEFT", "LoRA"] -content: - type: "Reference" - difficulty: "All Levels" - audience: ["ML Engineer", "Developer"] ---- - -# Parameter-Efficient Fine-Tuning Steps - -This section documents the parameter-efficient fine-tuning (PEFT) steps registered under `src/nemotron/steps/peft/`. -Each step trains a low-rank adaptation (LoRA) adapter on top of a base model and produces a `checkpoint_lora` artifact. -Merge that artifact with the base model by using the `convert/merge_lora` step when you need a standalone Hugging Face (HF) checkpoint for deployment. - -## Steps - -::::{grid} 1 2 2 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} peft/automodel -:link: automodel -:link-type: doc -LoRA tuning with the NeMo AutoModel library against Hugging Face base models and JSON Lines chat datasets. -+++ -{bdg-success}`reference` -::: - -:::{grid-item-card} peft/megatron_bridge -:link: megatron-bridge -:link-type: doc -LoRA tuning on top of NVIDIA Megatron-Bridge for distributed training of the Nemotron model family. -+++ -{bdg-success}`reference` -::: - -:::: - -## Related Documentation - -- [Nemotron Steps CLI Reference](../cli-reference.md) covers the shared option set, dotlist overrides, and passthrough arguments. -- [Choose a PEFT Backend](../../how-to/choose-peft-backend.md) compares `peft/automodel` and `peft/megatron_bridge`. -- [Configuration Conventions](../config-conventions.md) describes the per-step `config/` layout. - -```{toctree} -:hidden: -:maxdepth: 1 - -automodel -megatron-bridge -``` diff --git a/docs/train-models/reference/peft/megatron-bridge.md b/docs/train-models/reference/peft/megatron-bridge.md deleted file mode 100644 index 8e4b5791b..000000000 --- a/docs/train-models/reference/peft/megatron-bridge.md +++ /dev/null @@ -1,191 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Command-line reference for the peft/megatron_bridge training step." -topics: ["Training", "Reference", "CLI", "PEFT", "LoRA", "Megatron Bridge"] -tags: ["Reference", "CLI", "Steps", "PEFT", "LoRA", "Megatron-Bridge"] -content: - type: "Reference" - difficulty: "All Levels" - audience: ["ML Engineer", "Developer"] ---- - -# peft/megatron_bridge - -This step trains a low-rank adaptation (LoRA) adapter on top of a Megatron checkpoint by using NVIDIA Megatron-Bridge. -Use this step when a full supervised fine-tune does not fit in memory at the target model size, but you still need tensor and pipeline parallelism. -The step consumes packed Apache Parquet shards produced by `data_prep/sft_packing` together with a base Megatron checkpoint, and produces a `checkpoint_lora` artifact. - -## Syntax - -```bash -nemotron steps run peft/megatron_bridge \ - [-c ] \ - [-r | -b ] \ - [-d] \ - [--force-squash] \ - [...] \ - [...] -``` - -Refer to the [Nemotron Steps CLI Reference](../cli-reference.md) for the shared flag set. - -## Configuration Files - -The step ships two configuration files under `src/nemotron/steps/peft/megatron_bridge/config/`. - -| File | Purpose | -| --- | --- | -| `default.yaml` | Full-shape LoRA tuning on top of the Nano3 Megatron-Bridge finetune recipe with rank thirty-two adapters on `linear_qkv` and `linear_proj`. | -| `tiny.yaml` | Short validation run against packed Parquet shards. | - -Pass the configuration name with `-c`: - -```console -$ nemotron steps run peft/megatron_bridge -c tiny -$ nemotron steps run peft/megatron_bridge -c default -``` - -## Inputs and Outputs - -| Direction | Artifact Type | Required | Description | -| --- | --- | --- | --- | -| Consumes | `packed_parquet` | Yes | Packed Parquet shards with `input_ids` and `loss_mask` columns. Produce these shards with `data_prep/sft_packing` first. | -| Consumes | `checkpoint_megatron` | Yes | A pretrained Megatron checkpoint to adapt. | -| Produces | `checkpoint_lora` | тАФ | LoRA adapter weights. Merge the adapter with the base checkpoint by using `convert/merge_lora` to obtain a deployable Hugging Face (HF) checkpoint. | - -## Step Parameters - -The manifest declares two LoRA-specific parameters. -Pass them as dotlist overrides. - -```{option} peft.type= - -The parameter-efficient training scheme. -Only `lora` is supported today. - -Choices: `lora`. - -Default: `lora`. - -Example: `peft.type=lora` -``` - -```{option} peft.dim= - -The LoRA rank. - -Default: `32`. - -Example: `peft.dim=16` -``` - -Frequently used dotlist overrides drawn from the Nano3 finetune recipe include the following. - -```{option} recipe.seq_length= - -The training sequence length applied by the recipe. -This value must match the `pack_size` you used in `data_prep/sft_packing`. - -Example: `recipe.seq_length=8192` -``` - -```{option} recipe.tensor_model_parallel_size= - -The tensor-model-parallel degree applied by the Nano3 finetune recipe. - -Example: `recipe.tensor_model_parallel_size=8` -``` - -```{option} recipe.pipeline_model_parallel_size= - -The pipeline-model-parallel degree applied by the Nano3 finetune recipe. - -Example: `recipe.pipeline_model_parallel_size=4` -``` - -```{option} train.train_iters= - -The number of training iterations. - -Example: `train.train_iters=2000` -``` - -```{option} train.global_batch_size= - -The global batch size for the training loop. - -Example: `train.global_batch_size=32` -``` - -```{option} dataset.nano3_packed_sft_dir= - -The directory that contains packed Parquet shards from `data_prep/sft_packing`. -The default configuration reads this value from the `SFT_PACKED_DIR` environment variable. - -Example: `dataset.nano3_packed_sft_dir=/lustre/packed/super3-sft` -``` - -## Strategies - -The manifest records one operator strategy for `peft/megatron_bridge`. - -- When a full supervised fine-tune does not fit in memory at the desired model size, switch to `peft/megatron_bridge` to keep tensor and pipeline parallelism while reducing the trainable parameter count. - -## Common Errors - -```{option} missing_packed_data - -Cause: the training loop cannot find packed Parquet shards at the configured `dataset.nano3_packed_sft_dir`. - -Recovery: run `data_prep/sft_packing` first, or override `dataset.nano3_packed_sft_dir` to point at the directory that holds the packed splits. -``` - -## Command Examples - -Run the tiny validation configuration locally: - -```console -$ nemotron steps run peft/megatron_bridge -c tiny -``` - -Compile the default configuration without submitting the job: - -```console -$ nemotron steps run peft/megatron_bridge -c default --dry-run -``` - -Submit an attached LoRA run on a Lepton profile with a longer sequence length: - -```console -$ nemotron steps run peft/megatron_bridge -c default -r lepton_peft_megatron_bridge \ - peft.dim=16 \ - recipe.seq_length=8192 \ - train.train_iters=2000 -``` - -Submit a detached LoRA run on a Slurm profile with eight-way tensor parallelism: - -```console -$ nemotron steps run peft/megatron_bridge -c default -b slurm_peft_megatron_bridge \ - peft.dim=32 \ - recipe.tensor_model_parallel_size=8 \ - train.global_batch_size=64 -``` - -## Related Skill - -Run the `nemotron-peft-megatron-bridge` skill with your agent. - -## Related Documentation - -- [Nemotron Steps CLI Reference](../cli-reference.md) covers the shared option set, dotlist overrides, and passthrough arguments. -- [Choose a PEFT Backend](../../how-to/choose-peft-backend.md) compares `peft/megatron_bridge` and `peft/automodel`. -- [peft/automodel](automodel.md) documents the NeMo AutoModel LoRA step. - -### Upstream - -- [Megatron-Bridge Repository](https://github.com/NVIDIA-NeMo/Megatron-Bridge) -- [Megatron-Bridge Documentation](https://docs.nvidia.com/nemo/megatron-bridge/latest/) -- [Megatron-Bridge PEFT Guide](https://docs.nvidia.com/nemo/megatron-bridge/latest/training/peft.html) -- [Megatron-Bridge Packed Sequences](https://docs.nvidia.com/nemo/megatron-bridge/latest/training/packed-sequences.html) diff --git a/docs/train-models/reference/rl/dpo.md b/docs/train-models/reference/rl/dpo.md deleted file mode 100644 index 35574688b..000000000 --- a/docs/train-models/reference/rl/dpo.md +++ /dev/null @@ -1,153 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Command-line reference for the rl/nemo_rl/dpo training step." -topics: ["Training", "Reference", "CLI", "RL", "DPO"] -tags: ["Reference", "CLI", "Steps", "RL", "DPO", "Alignment", "NeMo-RL"] -content: - type: "Reference" - difficulty: "All Levels" - audience: ["ML Engineer", "Developer"] ---- - -# rl/nemo_rl/dpo - -This step runs direct preference optimization (DPO) alignment on NeMo-RL. -The step consumes a preference dataset of chosen-and-rejected response pairs, together with a supervised fine-tuning (SFT) Megatron checkpoint that serves as the warm-start policy. -The step produces an aligned `checkpoint_megatron` artifact. - -## Syntax - -```bash -nemotron steps run rl/nemo_rl/dpo \ - [-c ] \ - [-r | -b ] \ - [-d] \ - [--force-squash] \ - [...] \ - [...] -``` - -Refer to the [Nemotron Steps CLI Reference](../cli-reference.md) for the shared flag set. - -## Configuration Files - -The step ships two configuration files under `src/nemotron/steps/rl/nemo_rl/dpo/config/`. - -| File | Purpose | -| --- | --- | -| `default.yaml` | Full-shape DPO with a five-hundred-step training schedule and `meta-llama/Llama-3.2-1B-Instruct` as the policy. | -| `tiny.yaml` | Short validation run with a small dataset slice. | - -Pass the configuration name with `-c`: - -```console -$ nemotron steps run rl/nemo_rl/dpo -c tiny -$ nemotron steps run rl/nemo_rl/dpo -c default -``` - -## Inputs and Outputs - -| Direction | Artifact Type | Required | Description | -| --- | --- | --- | --- | -| Consumes | `training_jsonl` | Yes | Preference JSON Lines with `prompt`, `chosen`, and `rejected` fields. | -| Consumes | `checkpoint_megatron` | Yes | The supervised fine-tuned policy to align. | -| Produces | `checkpoint_megatron` | тАФ | The DPO-aligned policy checkpoint. | - -## Step Parameters - -The manifest declares one DPO-specific parameter. -Pass it as a dotlist override. - -```{option} dpo.reference_policy_kl_penalty= - -The Kullback-Leibler (KL) penalty between the trained policy and the reference policy. -This value corresponds to ╬▓ in the DPO objective. -Lower values let the policy drift further from the reference; higher values keep the policy close to the reference. - -Default: `0.05`. - -Example: `dpo.reference_policy_kl_penalty=0.1` -``` - -Frequently used dotlist overrides drawn from the NeMo-RL DPO recipe include the following. - -```{option} policy.model_name= - -The Hugging Face identifier or local path for the policy. -The default configuration reads this value from the `RL_POLICY_MODEL` environment variable. - -Example: `policy.model_name=meta-llama/Llama-3.2-3B-Instruct` -``` - -```{option} dpo.max_num_steps= - -The maximum number of training steps. - -Example: `dpo.max_num_steps=1000` -``` - -```{option} policy.train_global_batch_size= - -The global batch size across all data-parallel workers. - -Example: `policy.train_global_batch_size=64` -``` - -```{option} policy.optimizer.lr= - -The optimizer learning rate. - -Example: `policy.optimizer.lr=1.0e-6` -``` - -## Strategies - -The manifest records one operator strategy for `rl/nemo_rl/dpo`. - -- When the loss diverges or the Kullback-Leibler divergence collapses, raise `dpo.reference_policy_kl_penalty` to a value in the 0.1-0.3 range, or lower the learning rate. - -## Command Examples - -Run the tiny validation configuration locally: - -```console -$ nemotron steps run rl/nemo_rl/dpo -c tiny -``` - -Compile the default configuration without submitting the job: - -```console -$ nemotron steps run rl/nemo_rl/dpo -c default --dry-run -``` - -Submit an attached run on a Lepton profile with a tighter Kullback-Leibler penalty: - -```console -$ nemotron steps run rl/nemo_rl/dpo -c default -r lepton_rl_nemo_rl_dpo \ - dpo.reference_policy_kl_penalty=0.2 \ - dpo.max_num_steps=1000 -``` - -Submit a detached run on a Slurm profile with a larger policy: - -```console -$ nemotron steps run rl/nemo_rl/dpo -c default -b slurm_rl_nemo_rl_dpo \ - policy.model_name=meta-llama/Llama-3.2-3B-Instruct \ - policy.train_global_batch_size=64 \ - policy.optimizer.lr=1.0e-6 -``` - -## Related Skill - -Run the `nemotron-rl-nemo-rl-dpo` skill with your agent. - -## Related Documentation - -- [Nemotron Steps CLI Reference](../cli-reference.md) covers the shared option set, dotlist overrides, and passthrough arguments. -- [Choose an RL Alignment Step](../../how-to/choose-rl-step.md) compares the three RL steps. - -### Upstream - -- [NeMo-RL DPO Example](https://github.com/NVIDIA-NeMo/RL/blob/main/examples/run_dpo.py) -- [NeMo-RL Repository](https://github.com/NVIDIA-NeMo/RL) diff --git a/docs/train-models/reference/rl/index.md b/docs/train-models/reference/rl/index.md deleted file mode 100644 index 8369dc329..000000000 --- a/docs/train-models/reference/rl/index.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Reference pages for the reinforcement learning training steps." -topics: ["Training", "Reference", "RL", "DPO", "RLVR", "RLHF"] -tags: ["Reference", "Steps", "RL", "DPO", "RLVR", "RLHF", "NeMo-RL"] -content: - type: "Reference" - difficulty: "All Levels" - audience: ["ML Engineer", "Developer"] ---- - -# Reinforcement Learning Steps - -This section documents the reinforcement learning (RL) alignment steps registered under `src/nemotron/steps/rl/nemo_rl/`. -All three steps run on NeMo-RL, consume a supervised fine-tuning (SFT) Megatron checkpoint as the warm-start policy, and produce an aligned `checkpoint_megatron` artifact. - -## Steps - -::::{grid} 1 2 2 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} rl/nemo_rl/dpo -:link: dpo -:link-type: doc -Direct preference optimization with preference pairs. -+++ -{bdg-success}`reference` -::: - -:::{grid-item-card} rl/nemo_rl/rlvr -:link: rlvr -:link-type: doc -Reinforcement learning with verifiable rewards via group relative policy optimization. -+++ -{bdg-success}`reference` -::: - -:::{grid-item-card} rl/nemo_rl/rlhf -:link: rlhf -:link-type: doc -Reinforcement learning from human feedback with a generative reward model judge. -+++ -{bdg-success}`reference` -::: - -:::: - -## Related Documentation - -- [Nemotron Steps CLI Reference](../cli-reference.md) covers the shared option set, dotlist overrides, and passthrough arguments. -- [Choose an RL Alignment Step](../../how-to/choose-rl-step.md) compares the three RL steps. -- [Configuration Conventions](../config-conventions.md) describes the per-step `config/` layout. - -```{toctree} -:hidden: -:maxdepth: 1 - -dpo -rlvr -rlhf -``` diff --git a/docs/train-models/reference/rl/rlhf.md b/docs/train-models/reference/rl/rlhf.md deleted file mode 100644 index f79589726..000000000 --- a/docs/train-models/reference/rl/rlhf.md +++ /dev/null @@ -1,162 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Command-line reference for the rl/nemo_rl/rlhf training step." -topics: ["Training", "Reference", "CLI", "RL", "RLHF", "GRPO"] -tags: ["Reference", "CLI", "Steps", "RL", "RLHF", "GRPO", "Reward Model", "GenRM", "NeMo-RL", "NeMo-Gym"] -content: - type: "Reference" - difficulty: "All Levels" - audience: ["ML Engineer", "Developer"] ---- - -# rl/nemo_rl/rlhf - -This step runs reinforcement learning from human feedback (RLHF) on top of the NeMo-RL group relative policy optimization (GRPO) training loop, with a generative reward model judge. -The step consumes a prompt dataset for rollouts, a supervised fine-tuning (SFT) Megatron checkpoint as the warm-start policy, and a Hugging Face (HF) reward model checkpoint that NeMo-Gym serves as the judge. -The step produces an aligned `checkpoint_megatron` artifact. - -## Syntax - -```bash -nemotron steps run rl/nemo_rl/rlhf \ - [-c ] \ - [-r | -b ] \ - [-d] \ - [--force-squash] \ - [...] \ - [...] -``` - -Refer to the [Nemotron Steps CLI Reference](../cli-reference.md) for the shared flag set. - -## Configuration Files - -The step ships two configuration files under `src/nemotron/steps/rl/nemo_rl/rlhf/config/`. - -| File | Purpose | -| --- | --- | -| `default.yaml` | NeMo-Gym RLHF path with GRPO sampling and a generative reward model judge that NeMo-Gym hosts. | -| `tiny.yaml` | Short validation run with a small dataset slice. | - -Pass the configuration name with `-c`: - -```console -$ nemotron steps run rl/nemo_rl/rlhf -c tiny -$ nemotron steps run rl/nemo_rl/rlhf -c default -``` - -## Inputs and Outputs - -| Direction | Artifact Type | Required | Description | -| --- | --- | --- | --- | -| Consumes | `training_jsonl` | Yes | Prompt JSON Lines used for rollouts. | -| Consumes | `checkpoint_megatron` | Yes | The supervised fine-tuned policy to align. | -| Consumes | `checkpoint_hf` | Yes | The reward model checkpoint, in Hugging Face format, served as the generative reward model judge. | -| Produces | `checkpoint_megatron` | тАФ | The RLHF-aligned policy checkpoint. | - -## Step Parameters - -The manifest declares two NeMo-Gym RLHF parameters. -Pass them as dotlist overrides. - -```{option} grpo.num_generations_per_prompt= - -The number of rollouts produced per prompt. -This value sets the GRPO group size. - -Default: `8`. - -Example: `grpo.num_generations_per_prompt=16` -``` - -```{option} env.nemo_gym.genrm_model.responses_api_models.vllm_model.model= - -The Hugging Face identifier or local path for the generative reward model that NeMo-Gym serves through its responses API. - -Default: `meta-llama/Llama-3.2-1B-Instruct` (or the value of `RL_REWARD_MODEL` when that variable is set). - -Example: `env.nemo_gym.genrm_model.responses_api_models.vllm_model.model=nvidia/Nemotron-Reward-Model` -``` - -Frequently used dotlist overrides drawn from the NeMo-RL GRPO recipe include the following. - -```{option} grpo.max_num_steps= - -The maximum number of training steps. - -Example: `grpo.max_num_steps=1000` -``` - -```{option} grpo.num_prompts_per_step= - -The number of prompts sampled per training step. - -Example: `grpo.num_prompts_per_step=32` -``` - -```{option} data.train.data_path= - -The path to the training JSON Lines dataset. - -Example: `data.train.data_path=/lustre/rlhf/train.jsonl` -``` - -```{option} data.validation.data_path= - -The path to the validation JSON Lines dataset. - -Example: `data.validation.data_path=/lustre/rlhf/val.jsonl` -``` - -## Strategies - -The manifest records two operator strategies for `rl/nemo_rl/rlhf`. - -- When the reward model saturates or reward hacking appears in rollouts, raise the Kullback-Leibler penalty, lower the learning rate, or add reward clipping. -- When the data follows the Super3 RLHF layout, keep `env.should_use_nemo_gym=true` and point `data.train.data_path` and `data.validation.data_path` at the prepared NeMo-Gym JSON Lines files. - -## Command Examples - -Run the tiny validation configuration locally: - -```console -$ nemotron steps run rl/nemo_rl/rlhf -c tiny -``` - -Compile the default configuration without submitting the job: - -```console -$ nemotron steps run rl/nemo_rl/rlhf -c default --dry-run -``` - -Submit an attached run on a Lepton profile with an explicit reward model identifier: - -```console -$ nemotron steps run rl/nemo_rl/rlhf -c default -r lepton_rl_nemo_rl_rlhf \ - env.nemo_gym.genrm_model.responses_api_models.vllm_model.model=nvidia/Nemotron-Reward-Model \ - grpo.num_generations_per_prompt=16 -``` - -Submit a detached run on a Slurm profile with a longer training schedule: - -```console -$ nemotron steps run rl/nemo_rl/rlhf -c default -b slurm_rl_nemo_rl_rlhf \ - grpo.max_num_steps=1000 \ - data.train.data_path=/lustre/rlhf/train.jsonl \ - data.validation.data_path=/lustre/rlhf/val.jsonl -``` - -## Related Skill - -Run the `nemotron-rl-nemo-rl-rlhf` skill with your agent. - -## Related Documentation - -- [Nemotron Steps CLI Reference](../cli-reference.md) covers the shared option set, dotlist overrides, and passthrough arguments. -- [Choose an RL Alignment Step](../../how-to/choose-rl-step.md) compares the three RL steps. - -### Upstream - -- [Super3 RLHF Recipe](https://github.com/NVIDIA-NeMo/Nemotron/tree/main/src/nemotron/recipes/super3/stage2_rl/stage3_rlhf) -- [NeMo-RL Repository](https://github.com/NVIDIA-NeMo/RL) diff --git a/docs/train-models/reference/rl/rlvr.md b/docs/train-models/reference/rl/rlvr.md deleted file mode 100644 index ec15281b0..000000000 --- a/docs/train-models/reference/rl/rlvr.md +++ /dev/null @@ -1,179 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Command-line reference for the rl/nemo_rl/rlvr training step." -topics: ["Training", "Reference", "CLI", "RL", "RLVR", "GRPO"] -tags: ["Reference", "CLI", "Steps", "RL", "RLVR", "GRPO", "NeMo-RL", "NeMo-Gym"] -content: - type: "Reference" - difficulty: "All Levels" - audience: ["ML Engineer", "Developer"] ---- - -# rl/nemo_rl/rlvr - -This step runs reinforcement learning with verifiable rewards (RLVR) by using group relative policy optimization (GRPO) on NeMo-RL. -Use this step when the downstream task has a programmatic reward signal, such as a unit-tested code generation task or a mathematics problem with a ground-truth solution. -The step produces an aligned `checkpoint_megatron` artifact. - -## Syntax - -```bash -nemotron steps run rl/nemo_rl/rlvr \ - [-c ] \ - [-r | -b ] \ - [-d] \ - [--force-squash] \ - [...] \ - [...] -``` - -Refer to the [Nemotron Steps CLI Reference](../cli-reference.md) for the shared flag set. - -## Configuration Files - -The step ships three configuration files under `src/nemotron/steps/rl/nemo_rl/rlvr/config/`. - -| File | Purpose | -| --- | --- | -| `default.yaml` | Lightweight upstream group relative policy optimization (GRPO) example path. The step delegates to `/opt/nemo-rl/examples/run_grpo.py`. | -| `nemo_gym.yaml` | NeMo-Gym path that mirrors the Super3 RLVR style, using NeMo-Gym JSON Lines and resource-server reward configurations. | -| `tiny.yaml` | Short validation run with a small dataset slice. | - -Pass the configuration name with `-c`: - -```console -$ nemotron steps run rl/nemo_rl/rlvr -c tiny -$ nemotron steps run rl/nemo_rl/rlvr -c default -$ nemotron steps run rl/nemo_rl/rlvr -c nemo_gym -``` - -## Inputs and Outputs - -| Direction | Artifact Type | Required | Description | -| --- | --- | --- | --- | -| Consumes | `training_jsonl` | Yes | Prompt JSON Lines with verifiable answers, such as ground-truth solutions for a mathematics task. | -| Consumes | `checkpoint_megatron` | Yes | The supervised fine-tuned policy to optimize. | -| Produces | `checkpoint_megatron` | тАФ | The RLVR-aligned policy checkpoint. | - -## Step Parameters - -The manifest declares three group relative policy optimization (GRPO) parameters. -Pass them as dotlist overrides. - -```{option} grpo.num_generations_per_prompt= - -The number of rollouts produced per prompt. -This value sets the GRPO group size. - -Default: `8`. - -Example: `grpo.num_generations_per_prompt=16` -``` - -```{option} grpo.normalize_rewards= - -When set to `true`, the trainer normalizes rewards within each group before computing advantages. - -Default: `true`. - -Example: `grpo.normalize_rewards=false` -``` - -```{option} env.should_use_nemo_gym= - -When set to `true`, the step switches from the upstream generic GRPO example to the NeMo-Gym GRPO runner. - -Default: `false`. - -Example: `env.should_use_nemo_gym=true` -``` - -Frequently used dotlist overrides drawn from the NeMo-RL GRPO recipe include the following. - -```{option} grpo.max_num_steps= - -The maximum number of training steps. - -Example: `grpo.max_num_steps=1000` -``` - -```{option} grpo.num_prompts_per_step= - -The number of prompts sampled per training step. - -Example: `grpo.num_prompts_per_step=24` -``` - -```{option} grpo.use_leave_one_out_baseline= - -When set to `true`, the trainer uses a leave-one-out baseline within each group when computing advantages. - -Example: `grpo.use_leave_one_out_baseline=false` -``` - -```{option} data.train.data_path= - -The path to the training JSON Lines dataset. - -Example: `data.train.data_path=/lustre/rlvr/train.jsonl` -``` - -```{option} data.validation.data_path= - -The path to the validation JSON Lines dataset. - -Example: `data.validation.data_path=/lustre/rlvr/val.jsonl` -``` - -## Strategies - -The manifest records two operator strategies for `rl/nemo_rl/rlvr`. - -- When reward variance is low, raise `grpo.num_generations_per_prompt` and keep the leave-one-out baseline enabled. -- When the data follows the Super3 JSON Lines layout or relies on resource-server rewards, start from `config/nemo_gym.yaml` and set `data.train.data_path`, `data.validation.data_path`, and the NeMo-Gym `env.nemo_gym.config_paths` field. - -## Command Examples - -Run the tiny validation configuration locally: - -```console -$ nemotron steps run rl/nemo_rl/rlvr -c tiny -``` - -Compile the default configuration without submitting the job: - -```console -$ nemotron steps run rl/nemo_rl/rlvr -c default --dry-run -``` - -Submit an attached run on a Lepton profile with a larger group size and more training steps: - -```console -$ nemotron steps run rl/nemo_rl/rlvr -c default -r lepton_rl_nemo_rl_rlvr \ - grpo.num_generations_per_prompt=16 \ - grpo.max_num_steps=1000 -``` - -Submit a detached run on a Slurm profile with the NeMo-Gym path and explicit data paths: - -```console -$ nemotron steps run rl/nemo_rl/rlvr -c nemo_gym -b slurm_rl_nemo_rl_rlvr \ - env.should_use_nemo_gym=true \ - data.train.data_path=/lustre/rlvr/train.jsonl \ - data.validation.data_path=/lustre/rlvr/val.jsonl -``` - -## Related Skill - -Run the `nemotron-rl-nemo-rl-rlvr` skill with your agent. - -## Related Documentation - -- [Nemotron Steps CLI Reference](../cli-reference.md) covers the shared option set, dotlist overrides, and passthrough arguments. -- [Choose an RL Alignment Step](../../how-to/choose-rl-step.md) compares the three RL steps. - -### Upstream - -- [NeMo-RL GRPO Example](https://github.com/NVIDIA-NeMo/RL/blob/main/examples/run_grpo.py) -- [NeMo-RL Repository](https://github.com/NVIDIA-NeMo/RL) diff --git a/docs/train-models/reference/sft/automodel.md b/docs/train-models/reference/sft/automodel.md deleted file mode 100644 index 0e734e6c0..000000000 --- a/docs/train-models/reference/sft/automodel.md +++ /dev/null @@ -1,193 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Command-line reference for the sft/automodel training step." -topics: ["Training", "Reference", "CLI", "SFT", "AutoModel"] -tags: ["Reference", "CLI", "Steps", "SFT", "AutoModel", "Hugging Face"] -content: - type: "Reference" - difficulty: "All Levels" - audience: ["ML Engineer", "Developer"] ---- - -# sft/automodel - -This step runs supervised fine-tuning (SFT) on a Hugging Face (HF) format model from a JSON Lines (JSONL) chat dataset, using the NeMo AutoModel library. -The same step supports full fine-tuning and low-rank adaptation (LoRA) tuning, controlled by the `peft` parameter. - -## Syntax - -```bash -nemotron steps run sft/automodel \ - [-c ] \ - [-r | -b ] \ - [-d] \ - [--force-squash] \ - [...] \ - [...] -``` - -Refer to the [Nemotron Steps CLI Reference](../cli-reference.md) for the shared flag set. - -## Configuration Files - -The step ships two configuration files under `src/nemotron/steps/sft/automodel/config/`. - -| File | Purpose | -| --- | --- | -| `default.yaml` | Full-shape training on `Qwen/Qwen3-30B-A3B` with the AutoModel `TrainFinetuneRecipeForNextTokenPrediction` recipe. | -| `tiny.yaml` | Short validation run with five training steps and a 64-record dataset slice from `HuggingFaceH4/ultrachat_200k`. | - -Pass either name with `-c`: - -```console -$ nemotron steps run sft/automodel -c tiny -$ nemotron steps run sft/automodel -c default -``` - -## Inputs and Outputs - -| Direction | Artifact Type | Required | Description | -| --- | --- | --- | --- | -| Consumes | `training_jsonl` | Yes | Instruction data in JSONL with a `messages` field in OpenAI chat format. | -| Produces | `checkpoint_hf` | тАФ | Hugging Face checkpoint directory. The output is a full model checkpoint when `peft=null`, and a LoRA adapter directory when `peft=lora`. | - -## Supported Models - -The manifest declares three reference base models. -Other Hugging Face causal language models that load through `AutoModelForCausalLM.from_pretrained` also work. - -| Model | Minimum GPUs | Default | Notes | -| --- | --- | --- | --- | -| `Qwen/Qwen3-30B-A3B` | 8 | Yes | Mixture-of-experts (MoE) base model used by `config/default.yaml`. | -| `meta-llama/Llama-3.1-8B-Instruct` | 4 | No | Common dense baseline for single-node SFT and LoRA. | -| `mistralai/Mistral-7B-Instruct-v0.3` | 2 | No | Use this model when GPU count is small or iteration speed matters. | - -Override the base model from the command line: - -```console -$ nemotron steps run sft/automodel -c default \ - model.pretrained_model_name_or_path=meta-llama/Llama-3.1-8B-Instruct -``` - -## Step Parameters - -The manifest declares one Nemotron-specific parameter. -Pass it as a dotlist override after the options. - -```{option} peft=VALUE - -Selects adapter-style training instead of full fine-tuning. -Set this value to `lora` to train a LoRA adapter, or to `null` for full SFT. - -Choices: `lora`, `null`. - -Default: `null`. - -Example: `peft=lora` -``` - -You can also override any key from the compiled YAML configuration. -The frequently used keys include the following. - -```{option} step_scheduler.max_steps=N - -The maximum number of optimizer steps for the run. - -Example: `step_scheduler.max_steps=200` -``` - -```{option} step_scheduler.global_batch_size=N - -The global batch size across all data-parallel workers. - -Example: `step_scheduler.global_batch_size=64` -``` - -```{option} dataset.path_or_dataset_id= - -The Hugging Face dataset identifier or a local path that resolves to a JSONL chat dataset. - -Example: `dataset.path_or_dataset_id=/data/my-instructions.jsonl` -``` - -```{option} checkpoint.checkpoint_dir=PATH - -The directory where the AutoModel recipe writes checkpoints. - -Example: `checkpoint.checkpoint_dir=/output/qwen-sft` -``` - -## Strategies - -The manifest records four operator strategies for `sft/automodel`. - -- When the run has one or two GPUs, or memory is tight, set `peft=lora` and start from a Mistral-class model. -- When the run has three or four GPUs and the chosen model fits comfortably, consider full fine-tuning only when the resulting checkpoint size and iteration speed remain acceptable. -- When the dataset already uses OpenAI chat-format JSONL, skip `data_prep/sft_packing` and train directly from `training_jsonl`. -- When you need an immediately deployable HF checkpoint, keep the safetensors save format and the consolidated HF output layout that `config/default.yaml` sets. - -## Common Errors - -```{option} chat_template_missing - -Cause: the tokenizer for the chosen model does not include a chat template, so the AutoModel recipe cannot render the `messages` field into prompt-and-completion form. - -Recovery: choose a tokenizer with chat-template support, or convert the data to prompt-and-completion format before training. -``` - -```{option} oom - -Cause: GPU memory is exhausted during forward or backward passes. - -Recovery: set `peft=lora`, reduce `step_scheduler.global_batch_size`, or move to a smaller model. -``` - -## Command Examples - -Run the tiny validation configuration locally: - -```console -$ nemotron steps run sft/automodel -c tiny -``` - -Compile the default configuration on a Lepton profile without submitting the job: - -```console -$ nemotron steps run sft/automodel -c default -r lepton_sft_automodel --dry-run -``` - -Submit an attached LoRA run on a Lepton profile with a smaller base model: - -```console -$ nemotron steps run sft/automodel -c default -r lepton_sft_automodel \ - peft=lora \ - model.pretrained_model_name_or_path=mistralai/Mistral-7B-Instruct-v0.3 \ - step_scheduler.max_steps=500 -``` - -Submit a detached full SFT on Slurm and write checkpoints to a shared scratch directory: - -```console -$ nemotron steps run sft/automodel -c default -b slurm_sft_automodel \ - peft=null \ - step_scheduler.global_batch_size=64 \ - checkpoint.checkpoint_dir=/lustre/runs/qwen-sft -``` - -## Related Skill - -Run the `nemotron-sft-automodel` skill with your agent. - -## Related Documentation - -- [Nemotron Steps CLI Reference](../cli-reference.md) covers the shared option set, dotlist overrides, and passthrough arguments. -- [Choose an SFT Backend](../../how-to/choose-sft-backend.md) compares `sft/automodel` to `sft/megatron_bridge`. -- [Configuration Conventions](../config-conventions.md) describes the per-step `config/` layout. - -### Upstream - -- [NeMo AutoModel Repository](https://github.com/NVIDIA-NeMo/Automodel) -- [NeMo AutoModel Documentation](https://docs.nvidia.com/nemo/automodel/latest/index.html) -- [NeMo AutoModel Fine-Tuning Guide](https://docs.nvidia.com/nemo/automodel/latest/guides/llm/finetune.html) -- [AutoModel Training Script](https://github.com/NVIDIA-NeMo/Automodel/blob/main/nemo_automodel/recipes/llm/train_ft.py) diff --git a/docs/train-models/reference/sft/index.md b/docs/train-models/reference/sft/index.md deleted file mode 100644 index df3f3bcff..000000000 --- a/docs/train-models/reference/sft/index.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Reference pages for the supervised fine-tuning training steps." -topics: ["Training", "Reference", "SFT"] -tags: ["Reference", "Steps", "SFT", "AutoModel", "Megatron-Bridge"] -content: - type: "Reference" - difficulty: "All Levels" - audience: ["ML Engineer", "Developer"] ---- - -# Supervised Fine-Tuning Steps - -This section documents the supervised fine-tuning (SFT) steps registered under `src/nemotron/steps/sft/`. -The two steps target different training libraries and consume different data formats. -Both produce checkpoints you can use as warm-start policies for reinforcement learning alignment. - -## Steps - -::::{grid} 1 2 2 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} sft/automodel -:link: automodel -:link-type: doc -Supervised fine-tuning with the NeMo AutoModel library against Hugging Face base models and JSON Lines chat datasets. -+++ -{bdg-success}`reference` -::: - -:::{grid-item-card} sft/megatron_bridge -:link: megatron-bridge -:link-type: doc -Supervised fine-tuning on top of NVIDIA Megatron-Bridge for distributed training of the Nemotron model family. -+++ -{bdg-success}`reference` -::: - -:::: - -## Related Documentation - -- [Nemotron Steps CLI Reference](../cli-reference.md) covers the shared option set, dotlist overrides, and passthrough arguments. -- [Choose an SFT Backend](../../how-to/choose-sft-backend.md) compares `sft/automodel` and `sft/megatron_bridge`. -- [Configuration Conventions](../config-conventions.md) describes the per-step `config/` layout. - -```{toctree} -:hidden: -:maxdepth: 1 - -automodel -megatron-bridge -``` diff --git a/docs/train-models/reference/sft/megatron-bridge.md b/docs/train-models/reference/sft/megatron-bridge.md deleted file mode 100644 index 150a91761..000000000 --- a/docs/train-models/reference/sft/megatron-bridge.md +++ /dev/null @@ -1,212 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Command-line reference for the sft/megatron_bridge training step." -topics: ["Training", "Reference", "CLI", "SFT", "Megatron Bridge"] -tags: ["Reference", "CLI", "Steps", "SFT", "Megatron-Bridge", "Distributed Training"] -content: - type: "Reference" - difficulty: "All Levels" - audience: ["ML Engineer", "Developer"] ---- - -# sft/megatron_bridge - -This step runs supervised fine-tuning (SFT) on a Megatron checkpoint by using NVIDIA Megatron-Bridge. -It supports tensor, pipeline, and context parallelism for large-scale distributed training of the Nemotron model family. -The step consumes packed Apache Parquet shards produced by `data_prep/sft_packing`. - -## Syntax - -```bash -nemotron steps run sft/megatron_bridge \ - [-c ] \ - [-r | -b ] \ - [-d] \ - [--force-squash] \ - [...] \ - [...] -``` - -See the [Nemotron Steps CLI Reference](../cli-reference.md) for the shared flag set. - -## Configuration Files - -The step ships three configuration files under `src/nemotron/steps/sft/megatron_bridge/config/`. - -| File | Purpose | -| --- | --- | -| `default.yaml` | Two-node Slurm functional-test configuration. Loads base weights from Hugging Face via AutoBridge with LoRA enabled (`peft: lora`). Not the programmatic default. | -| `nano3.yaml` | Production full-SFT configuration for the Nano3 model (`peft: null`, 1700 training iterations). This is the programmatic default loaded when no `-c` flag is specified. | -| `tiny.yaml` | Short validation run against packed Parquet shards on a two-node Lepton profile. | - -Pass the configuration name with `-c`: - -```console -$ nemotron steps run sft/megatron_bridge -c tiny -$ nemotron steps run sft/megatron_bridge -c default -``` - -## Inputs and Outputs - -| Direction | Artifact Type | Required | Description | -| --- | --- | --- | --- | -| Consumes | `packed_parquet` | Yes | Packed SFT Parquet shards with `input_ids` and `loss_mask` columns. Produce these shards with `data_prep/sft_packing` first. | -| Consumes | `checkpoint_megatron` | No | A pretrained Megatron checkpoint or a prior Megatron SFT checkpoint. When this input is absent, the step loads weights from the Hugging Face model declared by `hf_model_path`. | -| Produces | `checkpoint_megatron` | тАФ | A fine-tuned Megatron distributed checkpoint. | - -## Supported Models - -| Model | Minimum GPUs | Default | Notes | -| --- | --- | --- | --- | -| `nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16` | 8 | Yes | Nemotron 3 Nano with 31.6 billion total and 3.2 billion active parameters. This model is the default Nano3 path. | -| `nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16` | 32 | No | Nemotron 3 Super with 120.6 billion total and 12.7 billion active parameters. Typical runs start at 32 GPUs. | - -## Step Parameters - -The manifest declares two Nemotron-specific parameters. -Pass them as dotlist overrides. - -```{option} seq_length=N - -The training sequence length. -This value must match the `pack_size` you used in `data_prep/sft_packing`. - -Choices: `2048`, `4096`, `8192`, `16384`, `32768`. - -Default: `4096`. - -Example: `seq_length=8192` -``` - -```{option} peft=VALUE - -Selects low-rank adaptation (LoRA) tuning instead of full SFT. -Set this value to `lora` for adapter tuning, or to `null` for full fine-tuning when the model and optimizer states fit in memory. - -Choices: `lora`, `null`. - -Default: `null` (as set in `nano3.yaml`, the programmatic default config). The `default.yaml` functional-test config sets this to `lora`. - -Example: `peft=null` -``` - -Frequently used dotlist overrides drawn from the underlying recipe include the following. - -```{option} hf_model_path= - -The Hugging Face identifier or local path used to load base weights through `AutoBridge` when no Megatron checkpoint is supplied. - -Example: `hf_model_path=nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16` -``` - -```{option} recipe.tensor_model_parallel_size=N - -The tensor-model-parallel degree applied by the Nano3 finetune recipe. - -Example: `recipe.tensor_model_parallel_size=8` -``` - -```{option} recipe.pipeline_model_parallel_size=N - -The pipeline-model-parallel degree applied by the Nano3 finetune recipe. - -Example: `recipe.pipeline_model_parallel_size=4` -``` - -```{option} train.global_batch_size=N - -The global batch size for the training loop. - -Example: `train.global_batch_size=128` -``` - -```{option} checkpoint.save=PATH - -The directory where the Megatron-Bridge recipe writes checkpoints. - -Example: `checkpoint.save=/lustre/runs/nano3-sft/checkpoints` -``` - -## Strategies - -The manifest records the following operator strategies for `sft/megatron_bridge`. - -- When the dataset has fewer than ten thousand records, lower `train.global_batch_size` and raise the number of training iterations to keep optimizer steps useful. -- When the operator wants LoRA tuning, set `peft=lora` to lower the GPU requirement and shrink the checkpoint footprint. -- When the operator selects the Super3 model, start from a 32-GPU plan with `tp=8`, `pp=4`, `cp=1`, and verify cluster topology before scaling further. -- When `seq_length > 32768`, enable hybrid context parallelism. -- When GPU memory is tight, such as on A100 40 GB hardware, enable activation checkpointing and consider central-processing-unit (CPU) offloading. -- When you want maximum throughput on H100 hardware, keep packed sequences enabled and tune overlap and sequence-packing settings before scaling up. - -## Common Errors - -```{option} tokenizer_mismatch - -Cause: the tokenizer used during `data_prep/sft_packing` differs from the tokenizer used for training, so token identifiers do not align. - -Recovery: set the `data_prep/sft_packing` tokenizer to match the training model and regenerate the packed Parquet shards. -``` - -```{option} oom - -Cause: GPU memory is exhausted during forward, backward, or optimizer steps. - -Recovery: reduce `train.global_batch_size`, increase parallelism, or reduce `seq_length`. -``` - -```{option} missing_packed_data - -Cause: the training loop cannot find packed Parquet shards at the configured `dataset.nano3_packed_sft_dir`. - -Recovery: run `data_prep/sft_packing` first, or override `dataset.nano3_packed_sft_dir` to point at the directory that holds the packed splits. -``` - -## Command Examples - -Run the tiny validation configuration on the two-node Lepton SFT profile: - -```console -$ nemotron steps run sft/megatron_bridge -c tiny -r lepton_sft_megatron_bridge -``` - -Compile the default configuration without submitting the job: - -```console -$ nemotron steps run sft/megatron_bridge -c default --dry-run -``` - -Submit a detached LoRA run on Slurm with a longer sequence length: - -```console -$ nemotron steps run sft/megatron_bridge -c default -b slurm_sft_megatron_bridge \ - peft=lora \ - seq_length=8192 \ - train.global_batch_size=256 -``` - -Submit an attached run on the Super3 base model with eight-way tensor parallelism and four-way pipeline parallelism: - -```console -$ nemotron steps run sft/megatron_bridge -c default -r lepton_sft_megatron_bridge \ - hf_model_path=nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16 \ - recipe.tensor_model_parallel_size=8 \ - recipe.pipeline_model_parallel_size=4 -``` - -## Related Skill - -Run the `nemotron-sft-megatron-bridge` skill with your agent. - -## Related Documentation - -- [Nemotron Steps CLI Reference](../cli-reference.md) covers the shared option set, dotlist overrides, and passthrough arguments. -- [Choose an SFT Backend](../../how-to/choose-sft-backend.md) compares `sft/megatron_bridge` to `sft/automodel`. -- [Configuration Conventions](../config-conventions.md) describes the per-step `config/` layout. - -### Upstream - -- [Megatron-Bridge Repository](https://github.com/NVIDIA-NeMo/Megatron-Bridge) -- [Megatron-Bridge Documentation](https://docs.nvidia.com/nemo/megatron-bridge/latest/) -- [Megatron-Bridge Training Entry Points](https://docs.nvidia.com/nemo/megatron-bridge/latest/training/entry-points.html) -- [Megatron-Bridge Packed Sequences](https://docs.nvidia.com/nemo/megatron-bridge/latest/training/packed-sequences.html) diff --git a/docs/train-models/reference/step-catalog.md b/docs/train-models/reference/step-catalog.md deleted file mode 100644 index 24c8c50ef..000000000 --- a/docs/train-models/reference/step-catalog.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Catalog of every Nemotron training step identifier, manifest path, and per-step reference link." -topics: ["Training", "Reference", "Steps", "Catalog"] -tags: ["Reference", "Steps", "Catalog"] -content: - type: "Reference" - difficulty: "All Levels" - audience: ["ML Engineer", "Developer"] ---- - -# Step Catalog - -This page catalogs every training step identifier registered under `src/nemotron/steps/` in the `sft`, `peft`, `rl`, and `optimize` directories. -Each row gives the step identifier, the on-disk manifest path, and the per-step reference page. - -Adjacent preparation and conversion steps do not appear in this catalog. -Those step identifiers include `data_prep/sft_packing`, `data_prep/rl_prep`, and `convert/megatron_to_hf`, and they live under different directories with their own manifests. - -## Supervised Fine-Tuning Steps - -| Step Identifier | Manifest Path | Reference | -| --- | --- | --- | -| `sft/automodel` | `src/nemotron/steps/sft/automodel/step.toml` | [sft/automodel](sft/automodel.md) | -| `sft/megatron_bridge` | `src/nemotron/steps/sft/megatron_bridge/step.toml` | [sft/megatron_bridge](sft/megatron-bridge.md) | - -## Parameter-Efficient Fine-Tuning Steps - -| Step Identifier | Manifest Path | Reference | -| --- | --- | --- | -| `peft/automodel` | `src/nemotron/steps/peft/automodel/step.toml` | [peft/automodel](peft/automodel.md) | -| `peft/megatron_bridge` | `src/nemotron/steps/peft/megatron_bridge/step.toml` | [peft/megatron_bridge](peft/megatron-bridge.md) | - -## Reinforcement Learning Steps - -| Step Identifier | Manifest Path | Reference | -| --- | --- | --- | -| `rl/nemo_rl/dpo` | `src/nemotron/steps/rl/nemo_rl/dpo/step.toml` | [rl/nemo_rl/dpo](rl/dpo.md) | -| `rl/nemo_rl/rlvr` | `src/nemotron/steps/rl/nemo_rl/rlvr/step.toml` | [rl/nemo_rl/rlvr](rl/rlvr.md) | -| `rl/nemo_rl/rlhf` | `src/nemotron/steps/rl/nemo_rl/rlhf/step.toml` | [rl/nemo_rl/rlhf](rl/rlhf.md) | - -## Optimization Steps - -| Step Identifier | Manifest Path | Reference | -| --- | --- | --- | -| `optimize/modelopt/quantize` | `src/nemotron/steps/optimize/modelopt/quantize/step.toml` | [optimize/modelopt/quantize](optimize/quantize.md) | -| `optimize/modelopt/prune` | `src/nemotron/steps/optimize/modelopt/prune/step.toml` | [optimize/modelopt/prune](optimize/prune.md) | -| `optimize/modelopt/distill` | `src/nemotron/steps/optimize/modelopt/distill/step.toml` | [optimize/modelopt/distill](optimize/distill.md) | - -## List Steps from the Command Line - -This catalog covers the `sft`, `peft`, `rl`, and `optimize` step categories. -Running `nemotron steps list` with no filter returns all registered steps, including data preparation, evaluation, conversion, environment, and other categories not listed here. -Use the `--category`, `--consumes`, and `--produces` filters to narrow the results. - -```console -$ nemotron steps list --category sft -$ nemotron steps list --consumes training_jsonl -$ nemotron steps list --produces checkpoint_megatron --json -``` - -## Related Documentation - -- [Nemotron Steps CLI Reference](cli-reference.md) covers the `list`, `show`, and `run` subcommands. -- [Configuration Conventions](config-conventions.md) describes the per-step `config/` layout. diff --git a/docs/train-models/using-skill.md b/docs/train-models/using-skill.md deleted file mode 100644 index 60e18f7f7..000000000 --- a/docs/train-models/using-skill.md +++ /dev/null @@ -1,76 +0,0 @@ -# Tips for Model Training with Agents - -## Have a Goal in Mind - -You might want to add instruction following, specialize a model on your domain or product voice, align behavior with preferences after supervised fine tuning, or land on a smaller or faster model through distillation, pruning, or quantization. -Those are concrete outcomes to name before you reach for an agent. - -This page helps you get that plan and work efficiently with your agent. -You steer an agent through the *nemotron-customize* skill (`/nemotron-customize`). -The agent can use the skill to produce an explicit series of steps and commands before anything executes. -The full skill contract lives in `skills/nemotron-customize/SKILL.md` at the repository root. - -Use the skill when you have a general direction, but you are unsure how to proceed inside this repository: which steps apply, how artifacts connect, or what YAML shape the runners expect. - -## What to Tell the Agent - -The agent maps your goal to a plan: an ordered set of steps, configs, and commands. -The more grounded the context you give it, the less it has to guessтАФand the less rework you do later. -The lists below use progressive disclosure: start with the short block, then add detail as the session develops. - -### Have Ready Early - -These items keep the first prompts grounded and cut down rework. -The nested lines are example sentences you can paste or adapt; they are not the only valid wording. - -- Desired outcome in plain language, so the agent can narrow the stage chain and success checks. - - :::{div} sd-font-italic sd-font-weight-lighter - - "We want the model to follow our runbook-style instructions on support tickets without drifting into free-form guesses when the ticket is incomplete." - - "After training, reviewers should see fewer policy violations on a fixed red-team prompt set we already use in evaluation." - ::: - -- Rough stage story when you already know it (for example SFT then alignment), or an explicit note that you want a recommendation, so the agent does not guess your pipeline shape. - - :::{div} sd-font-italic sd-font-weight-lighter - - "We already ran SFT in another teamтАЩs repo; from here we only need alignment on preference data against that checkpoint." - - "We do not know the right order; recommend a minimal path from the catalog given our data and hardware." - ::: - -- Where inputs live, paths or Hugging Face Hub datasets, and what you call the starting weights, so manifests and `consumes` edges can line up without invented paths. - - :::{div} sd-font-italic sd-font-weight-lighter - - "Training chat lives at `/data/support/train.jsonl` on the shared file system. The evaluation JSONL is next to it under `eval.jsonl`." - - "Base weights are `organization/model-name` on the Hugging Face Hub. We have a local cache under `/scratch/hf-cache`." - ::: - -- Hardware you schedule against at least at nodes, GPUs per node, and GPU family, so scale and parallelism assumptions stay realistic. - - :::{div} sd-font-italic sd-font-weight-lighter - - "We can schedule up to four nodes with eight H100 GPUs per node in Lepton for training; prefer fewer nodes if the step supports it cleanly." - - "Slurm jobs must write checkpoints under `/project/checkpoints/$USER/run-id` so retention policies pick them up." - ::: - -You do not need step identifiers or perfect file formats before you start if you are willing to discover those with the agent in the next block. - -### Fine to Clarify During the Session - -The skill uses an _orient phase_ so that you and the agent can tighten these together. - -- How your data layout lines up with what a chosen step expects, using [Data and Checkpoint Formats](how-to/data-and-checkpoint-formats.md) and the stepтАЩs `step.toml` as you go. -- Backend choice inside a family, using [Choose an SFT Backend](how-to/choose-sft-backend.md), [Choose a PEFT Backend](how-to/choose-peft-backend.md), or [Choose an RL Alignment Step](how-to/choose-rl-step.md) when you want a human-readable decision before configs land. -- Whether the first execution should validate end-to-end execution with a short sample run or target production-scale training, so defaults match intent. -- Tokenizer, template, and sequence-length consistency across prep and train when the pipeline touches more than one stage. - -### Where to Look When You Are Unsure - -Use the [How-To Guides](how-to/index.md) for task-level procedures. -Use [Reference](reference/index.md) for naming and configuration conventions. -Use [Explanation](explanation/index.md) for how artifacts and libraries fit together. -You can also ask the agent to walk a specific step with `nemotron steps show` once you know its name. - -## Your Role in the Loop - -The skill follows _orient_, _plan_, _act_, and then _verify_. -You answer missing constraints, approve the plan before files change, and check that stage outputs line up with the next stageтАЩs inputs. -`SKILL.md` spells out each phase, file naming, and verification expectations for the whole catalog, not only training. diff --git a/docs/translation/_snippets/input/train_sample.jsonl b/docs/translation/_snippets/input/train_sample.jsonl deleted file mode 100644 index 191463602..000000000 --- a/docs/translation/_snippets/input/train_sample.jsonl +++ /dev/null @@ -1,5 +0,0 @@ -{"messages": [{"role": "system", "content": "You are a helpful assistant with access to weather information."}, {"role": "user", "content": "What's the weather in Tokyo?"}, {"role": "assistant", "tool_calls": [{"id": "weather_5854", "type": "function", "function": {"name": "get_weather", "arguments": "{\"location\": \"Tokyo\", \"units\": \"fahrenheit\"}"}}], "content": ""}, {"role": "tool", "tool_call_id": "weather_5854", "content": "{\"temp\": 72, \"condition\": \"sunny\", \"humidity\": 45}"}, {"role": "assistant", "content": "The weather in Tokyo is sunny with a temperature of 72\u00b0F and 45% humidity."}], "tools": [{"type": "function", "function": {"name": "get_weather", "description": "Get current weather for a location", "parameters": {"type": "object", "properties": {"location": {"type": "string"}, "units": {"type": "string"}}, "required": ["location"]}}}]} -{"messages": [{"role": "system", "content": "You are a database assistant."}, {"role": "user", "content": "Find all users from California"}, {"role": "assistant", "tool_calls": [{"id": "db_2329", "type": "function", "function": {"name": "query_database", "arguments": "{\"query\": \"Find all users from California\"}"}}], "content": ""}, {"role": "tool", "tool_call_id": "db_2329", "content": "[{\"id\": 1, \"name\": \"John Doe\", \"state\": \"CA\"}, {\"id\": 5, \"name\": \"Jane Smith\", \"state\": \"CA\"}]"}, {"role": "assistant", "content": "Here's what I found: [{\"id\": 1, \"name\": \"John Doe\", \"state\": \"CA\"}, {\"id\": 5, \"name\": \"Jane Smith\", \"state\": \"CA\"}]"}], "tools": [{"type": "function", "function": {"name": "query_database", "description": "Query the database", "parameters": {"type": "object", "properties": {"query": {"type": "string"}}, "required": ["query"]}}}]} -{"messages": [{"role": "system", "content": "You are a calculator assistant."}, {"role": "user", "content": "What is 156 * 24?"}, {"role": "assistant", "tool_calls": [{"id": "calc_8712", "type": "function", "function": {"name": "calculate", "arguments": "{\"expression\": \"156 * 24\"}"}}], "content": ""}, {"role": "tool", "tool_call_id": "calc_8712", "content": "3744"}, {"role": "assistant", "content": "The result of 156 * 24 is 3744."}], "tools": [{"type": "function", "function": {"name": "calculate", "description": "Perform mathematical calculation", "parameters": {"type": "object", "properties": {"expression": {"type": "string"}}, "required": ["expression"]}}}]} -{"messages": [{"role": "system", "content": "You are a database assistant."}, {"role": "user", "content": "Get product by ID 12345"}, {"role": "assistant", "tool_calls": [{"id": "db_7995", "type": "function", "function": {"name": "query_database", "arguments": "{\"query\": \"Get product by ID 12345\"}"}}], "content": ""}, {"role": "tool", "tool_call_id": "db_7995", "content": "{\"id\": 12345, \"name\": \"Laptop\", \"price\": 999.99}"}, {"role": "assistant", "content": "Here's what I found: {\"id\": 12345, \"name\": \"Laptop\", \"price\": 999.99}"}], "tools": [{"type": "function", "function": {"name": "query_database", "description": "Query the database", "parameters": {"type": "object", "properties": {"query": {"type": "string"}}, "required": ["query"]}}}]} -{"messages": [{"role": "system", "content": "You are a helpful assistant with access to weather information."}, {"role": "user", "content": "What's the weather in Dubai?"}, {"role": "assistant", "tool_calls": [{"id": "weather_8882", "type": "function", "function": {"name": "get_weather", "arguments": "{\"location\": \"Dubai\", \"units\": \"fahrenheit\"}"}}], "content": ""}, {"role": "tool", "tool_call_id": "weather_8882", "content": "{\"temp\": 55, \"condition\": \"rainy\", \"humidity\": 80}"}, {"role": "assistant", "content": "The weather in Dubai is rainy with a temperature of 55\u00b0F and 80% humidity."}], "tools": [{"type": "function", "function": {"name": "get_weather", "description": "Get current weather for a location", "parameters": {"type": "object", "properties": {"location": {"type": "string"}, "units": {"type": "string"}}, "required": ["location"]}}}]} diff --git a/docs/translation/_snippets/output/translated.jsonl b/docs/translation/_snippets/output/translated.jsonl deleted file mode 100644 index f98d07f2e..000000000 --- a/docs/translation/_snippets/output/translated.jsonl +++ /dev/null @@ -1,466 +0,0 @@ -{ - "messages": [ - { - "role": "system", - "content": "[рдЖрдк рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕рд╣рд╛рдпрдХ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдореМрд╕рдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдБрдЪ рд╣реИред]" - }, - { - "role": "user", - "content": "[рдЯреЛрдХреНрдпреЛ рдореЗрдВ рдореМрд╕рдо рдХреИрд╕рд╛ рд╣реИ?]" - }, - { - "role": "assistant", - "tool_calls": [ - { - "id": "weather_5854", - "type": "function", - "function": { - "name": "get_weather", - "arguments": "{\"location\": \"Tokyo\", \"units\": \"fahrenheit\"}" - } - } - ], - "content": "" - }, - { - "role": "tool", - "tool_call_id": "weather_5854", - "content": "{\"temp\": 72, \"condition\": \"sunny\", \"humidity\": 45}" - }, - { - "role": "assistant", - "content": "рдЯреЛрдХреНрдпреЛ рдореЗрдВ рдореМрд╕рдо рдзреВрдкрднрд░рд╛ рд╣реИ, 72┬░F рдХрд╛ рддрд╛рдкрдорд╛рди рдФрд░ 45% рдЖрд░реНрджреНрд░рддрд╛ рдХреЗ рд╕рд╛рдеред" - } - ], - "tools": [ - { - "type": "function", - "function": { - "name": "get_weather", - "description": "Get current weather for a location", - "parameters": { - "type": "object", - "properties": { - "location": { - "type": "string" - }, - "units": { - "type": "string" - } - }, - "required": [ - "location" - ] - } - } - } - ], - "translation_time": 8.9217984676, - "translation_errors": "", - "translated_text": [ - { - "role": "system", - "content": "[рдЖрдк рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕рд╣рд╛рдпрдХ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдореМрд╕рдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдБрдЪ рд╣реИред]" - }, - { - "role": "user", - "content": "[рдЯреЛрдХреНрдпреЛ рдореЗрдВ рдореМрд╕рдо рдХреИрд╕рд╛ рд╣реИ?]" - }, - { - "role": "assistant", - "tool_calls": [ - { - "id": "weather_5854", - "type": "function", - "function": { - "name": "get_weather", - "arguments": "{\"location\": \"Tokyo\", \"units\": \"fahrenheit\"}" - } - } - ], - "content": "" - }, - { - "role": "tool", - "tool_call_id": "weather_5854", - "content": "{\"temp\": 72, \"condition\": \"sunny\", \"humidity\": 45}" - }, - { - "role": "assistant", - "content": "рдЯреЛрдХреНрдпреЛ рдореЗрдВ рдореМрд╕рдо рдзреВрдкрднрд░рд╛ рд╣реИ, 72┬░F рдХрд╛ рддрд╛рдкрдорд╛рди рдФрд░ 45% рдЖрд░реНрджреНрд░рддрд╛ рдХреЗ рд╕рд╛рдеред" - } - ], - "translation_metadata": "{\"target_lang\": \"hi\", \"translation\": {\"content\": [\"[рдЖрдк рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕рд╣рд╛рдпрдХ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдореМрд╕рдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдБрдЪ рд╣реИред]\", \"[рдЯреЛрдХреНрдпреЛ рдореЗрдВ рдореМрд╕рдо рдХреИрд╕рд╛ рд╣реИ?]\", \"\", \"{\\\"temp\\\": 72, \\\"condition\\\": \\\"sunny\\\", \\\"humidity\\\": 45}\", \"рдЯреЛрдХреНрдпреЛ рдореЗрдВ рдореМрд╕рдо рдзреВрдкрднрд░рд╛ рд╣реИ, 72┬░F рдХрд╛ рддрд╛рдкрдорд╛рди рдФрд░ 45% рдЖрд░реНрджреНрд░рддрд╛ рдХреЗ рд╕рд╛рдеред\"]}, \"segmented_translation\": {\"content\": [{\"src\": \"You are a helpful assistant with access to weather information.\", \"tgt\": \"[рдЖрдк рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕рд╣рд╛рдпрдХ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдореМрд╕рдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдБрдЪ рд╣реИред]\"}, {\"src\": \"What's the weather in Tokyo?\", \"tgt\": \"[рдЯреЛрдХреНрдпреЛ рдореЗрдВ рдореМрд╕рдо рдХреИрд╕рд╛ рд╣реИ?]\"}, {\"src\": \"The weather in Tokyo is sunny with a temperature of 72┬░F and 45% humidity.\", \"tgt\": \"рдЯреЛрдХреНрдпреЛ рдореЗрдВ рдореМрд╕рдо рдзреВрдкрднрд░рд╛ рд╣реИ, 72┬░F рдХрд╛ рддрд╛рдкрдорд╛рди рдФрд░ 45% рдЖрд░реНрджреНрд░рддрд╛ рдХреЗ рд╕рд╛рдеред\"}]}}", - "translated_messages": "[{\"role\": \"system\", \"content\": \"[рдЖрдк рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕рд╣рд╛рдпрдХ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдореМрд╕рдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдБрдЪ рд╣реИред]\"}, {\"role\": \"user\", \"content\": \"[рдЯреЛрдХреНрдпреЛ рдореЗрдВ рдореМрд╕рдо рдХреИрд╕рд╛ рд╣реИ?]\"}, {\"role\": \"assistant\", \"tool_calls\": [{\"id\": \"weather_5854\", \"type\": \"function\", \"function\": {\"name\": \"get_weather\", \"arguments\": \"{\\\"location\\\": \\\"Tokyo\\\", \\\"units\\\": \\\"fahrenheit\\\"}\"}}], \"content\": \"\"}, {\"role\": \"tool\", \"tool_call_id\": \"weather_5854\", \"content\": \"{\\\"temp\\\": 72, \\\"condition\\\": \\\"sunny\\\", \\\"humidity\\\": 45}\"}, {\"role\": \"assistant\", \"content\": \"рдЯреЛрдХреНрдпреЛ рдореЗрдВ рдореМрд╕рдо рдзреВрдкрднрд░рд╛ рд╣реИ, 72┬░F рдХрд╛ рддрд╛рдкрдорд╛рди рдФрд░ 45% рдЖрд░реНрджреНрд░рддрд╛ рдХреЗ рд╕рд╛рдеред\"}]" -} -{ - "messages": [ - { - "role": "system", - "content": "рдЖрдк рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред" - }, - { - "role": "user", - "content": "рд╕рднреА рдХреИрд▓рд┐рдлреЛрд░реНрдирд┐рдпрд╛ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЦреЛрдЬреЗрдВ" - }, - { - "role": "assistant", - "tool_calls": [ - { - "id": "db_2329", - "type": "function", - "function": { - "name": "query_database", - "arguments": "{\"query\": \"Find all users from California\"}" - } - } - ], - "content": "" - }, - { - "role": "tool", - "tool_call_id": "db_2329", - "content": "[{\"id\": 1, \"name\": \"John Doe\", \"state\": \"CA\"}, {\"id\": 5, \"name\": \"Jane Smith\", \"state\": \"CA\"}]" - }, - { - "role": "assistant", - "content": "рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдорд┐рд▓рд╛: [{\"id\": 1, \"name\": \"John Doe\", \"state\": \"CA\"}, {\"id\": 5, \"name\": \"Jane Smith\", \"state\": \"CA\"}]" - } - ], - "tools": [ - { - "type": "function", - "function": { - "name": "query_database", - "description": "Query the database", - "parameters": { - "type": "object", - "properties": { - "query": { - "type": "string" - } - }, - "required": [ - "query" - ] - } - } - } - ], - "translation_time": 18.4458503723, - "translation_errors": "", - "translated_text": [ - { - "role": "system", - "content": "рдЖрдк рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред" - }, - { - "role": "user", - "content": "рд╕рднреА рдХреИрд▓рд┐рдлреЛрд░реНрдирд┐рдпрд╛ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЦреЛрдЬреЗрдВ" - }, - { - "role": "assistant", - "tool_calls": [ - { - "id": "db_2329", - "type": "function", - "function": { - "name": "query_database", - "arguments": "{\"query\": \"Find all users from California\"}" - } - } - ], - "content": "" - }, - { - "role": "tool", - "tool_call_id": "db_2329", - "content": "[{\"id\": 1, \"name\": \"John Doe\", \"state\": \"CA\"}, {\"id\": 5, \"name\": \"Jane Smith\", \"state\": \"CA\"}]" - }, - { - "role": "assistant", - "content": "рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдорд┐рд▓рд╛: [{\"id\": 1, \"name\": \"John Doe\", \"state\": \"CA\"}, {\"id\": 5, \"name\": \"Jane Smith\", \"state\": \"CA\"}]" - } - ], - "translation_metadata": "{\"target_lang\": \"hi\", \"translation\": {\"content\": [\"рдЖрдк рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред\", \"рд╕рднреА рдХреИрд▓рд┐рдлреЛрд░реНрдирд┐рдпрд╛ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЦреЛрдЬреЗрдВ\", \"\", \"[{\\\"id\\\": 1, \\\"name\\\": \\\"John Doe\\\", \\\"state\\\": \\\"CA\\\"}, {\\\"id\\\": 5, \\\"name\\\": \\\"Jane Smith\\\", \\\"state\\\": \\\"CA\\\"}]\", \"рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдорд┐рд▓рд╛: [{\\\"id\\\": 1, \\\"name\\\": \\\"John Doe\\\", \\\"state\\\": \\\"CA\\\"}, {\\\"id\\\": 5, \\\"name\\\": \\\"Jane Smith\\\", \\\"state\\\": \\\"CA\\\"}]\"]}, \"segmented_translation\": {\"content\": [{\"src\": \"You are a database assistant.\", \"tgt\": \"рдЖрдк рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред\"}, {\"src\": \"Find all users from California\", \"tgt\": \"рд╕рднреА рдХреИрд▓рд┐рдлреЛрд░реНрдирд┐рдпрд╛ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЦреЛрдЬреЗрдВ\"}, {\"src\": \"Here's what I found: [{\\\"id\\\": 1, \\\"name\\\": \\\"John Doe\\\", \\\"state\\\": \\\"CA\\\"}, {\\\"id\\\": 5, \\\"name\\\": \\\"Jane Smith\\\", \\\"state\\\": \\\"CA\\\"}]\", \"tgt\": \"рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдорд┐рд▓рд╛: [{\\\"id\\\": 1, \\\"name\\\": \\\"John Doe\\\", \\\"state\\\": \\\"CA\\\"}, {\\\"id\\\": 5, \\\"name\\\": \\\"Jane Smith\\\", \\\"state\\\": \\\"CA\\\"}]\"}]}}", - "translated_messages": "[{\"role\": \"system\", \"content\": \"рдЖрдк рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред\"}, {\"role\": \"user\", \"content\": \"рд╕рднреА рдХреИрд▓рд┐рдлреЛрд░реНрдирд┐рдпрд╛ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЦреЛрдЬреЗрдВ\"}, {\"role\": \"assistant\", \"tool_calls\": [{\"id\": \"db_2329\", \"type\": \"function\", \"function\": {\"name\": \"query_database\", \"arguments\": \"{\\\"query\\\": \\\"Find all users from California\\\"}\"}}], \"content\": \"\"}, {\"role\": \"tool\", \"tool_call_id\": \"db_2329\", \"content\": \"[{\\\"id\\\": 1, \\\"name\\\": \\\"John Doe\\\", \\\"state\\\": \\\"CA\\\"}, {\\\"id\\\": 5, \\\"name\\\": \\\"Jane Smith\\\", \\\"state\\\": \\\"CA\\\"}]\"}, {\"role\": \"assistant\", \"content\": \"рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдорд┐рд▓рд╛: [{\\\"id\\\": 1, \\\"name\\\": \\\"John Doe\\\", \\\"state\\\": \\\"CA\\\"}, {\\\"id\\\": 5, \\\"name\\\": \\\"Jane Smith\\\", \\\"state\\\": \\\"CA\\\"}]\"}]" -} -{ - "messages": [ - { - "role": "system", - "content": "[рдЖрдк рдПрдХ рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред]" - }, - { - "role": "user", - "content": "[рдХреНрдпрд╛ 156 * 24 рд╣реИ?]" - }, - { - "role": "assistant", - "tool_calls": [ - { - "id": "calc_8712", - "type": "function", - "function": { - "name": "calculate", - "arguments": "{\"expression\": \"156 * 24\"}" - } - } - ], - "content": "" - }, - { - "role": "tool", - "tool_call_id": "calc_8712", - "content": "3744" - }, - { - "role": "assistant", - "content": "156 * 24 рдХрд╛ рдкрд░рд┐рдгрд╛рдо 3744 рд╣реИред" - } - ], - "tools": [ - { - "type": "function", - "function": { - "name": "calculate", - "description": "Perform mathematical calculation", - "parameters": { - "type": "object", - "properties": { - "expression": { - "type": "string" - } - }, - "required": [ - "expression" - ] - } - } - } - ], - "translation_time": 34.5283660889, - "translation_errors": "", - "translated_text": [ - { - "role": "system", - "content": "[рдЖрдк рдПрдХ рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред]" - }, - { - "role": "user", - "content": "[рдХреНрдпрд╛ 156 * 24 рд╣реИ?]" - }, - { - "role": "assistant", - "tool_calls": [ - { - "id": "calc_8712", - "type": "function", - "function": { - "name": "calculate", - "arguments": "{\"expression\": \"156 * 24\"}" - } - } - ], - "content": "" - }, - { - "role": "tool", - "tool_call_id": "calc_8712", - "content": "3744" - }, - { - "role": "assistant", - "content": "156 * 24 рдХрд╛ рдкрд░рд┐рдгрд╛рдо 3744 рд╣реИред" - } - ], - "translation_metadata": "{\"target_lang\": \"hi\", \"translation\": {\"content\": [\"[рдЖрдк рдПрдХ рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред]\", \"[рдХреНрдпрд╛ 156 * 24 рд╣реИ?]\", \"\", \"3744\", \"156 * 24 рдХрд╛ рдкрд░рд┐рдгрд╛рдо 3744 рд╣реИред\"]}, \"segmented_translation\": {\"content\": [{\"src\": \"You are a calculator assistant.\", \"tgt\": \"[рдЖрдк рдПрдХ рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред]\"}, {\"src\": \"What is 156 * 24?\", \"tgt\": \"[рдХреНрдпрд╛ 156 * 24 рд╣реИ?]\"}, {\"src\": \"The result of 156 * 24 is 3744.\", \"tgt\": \"156 * 24 рдХрд╛ рдкрд░рд┐рдгрд╛рдо 3744 рд╣реИред\"}]}}", - "translated_messages": "[{\"role\": \"system\", \"content\": \"[рдЖрдк рдПрдХ рдХреИрд▓рдХреБрд▓реЗрдЯрд░ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред]\"}, {\"role\": \"user\", \"content\": \"[рдХреНрдпрд╛ 156 * 24 рд╣реИ?]\"}, {\"role\": \"assistant\", \"tool_calls\": [{\"id\": \"calc_8712\", \"type\": \"function\", \"function\": {\"name\": \"calculate\", \"arguments\": \"{\\\"expression\\\": \\\"156 * 24\\\"}\"}}], \"content\": \"\"}, {\"role\": \"tool\", \"tool_call_id\": \"calc_8712\", \"content\": \"3744\"}, {\"role\": \"assistant\", \"content\": \"156 * 24 рдХрд╛ рдкрд░рд┐рдгрд╛рдо 3744 рд╣реИред\"}]" -} -{ - "messages": [ - { - "role": "system", - "content": "[рдЖрдк рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред]" - }, - { - "role": "user", - "content": "3. Copy the content as-is.\n```python\ndef calculate_sum(a, b):\n return a + b\n```" - }, - { - "role": "assistant", - "tool_calls": [ - { - "id": "db_7995", - "type": "function", - "function": { - "name": "query_database", - "arguments": "{\"query\": \"Get product by ID 12345\"}" - } - } - ], - "content": "" - }, - { - "role": "tool", - "tool_call_id": "db_7995", - "content": "{\"id\": 12345, \"name\": \"Laptop\", \"price\": 999.99}" - }, - { - "role": "assistant", - "content": "рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдорд┐рд▓рд╛: {\"id\": 12345, \"name\": \"Laptop\", \"price\": 999.99}" - } - ], - "tools": [ - { - "type": "function", - "function": { - "name": "query_database", - "description": "Query the database", - "parameters": { - "type": "object", - "properties": { - "query": { - "type": "string" - } - }, - "required": [ - "query" - ] - } - } - } - ], - "translation_time": 39.8996043205, - "translation_errors": "", - "translated_text": [ - { - "role": "system", - "content": "[рдЖрдк рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред]" - }, - { - "role": "user", - "content": "3. Copy the content as-is.\n```python\ndef calculate_sum(a, b):\n return a + b\n```" - }, - { - "role": "assistant", - "tool_calls": [ - { - "id": "db_7995", - "type": "function", - "function": { - "name": "query_database", - "arguments": "{\"query\": \"Get product by ID 12345\"}" - } - } - ], - "content": "" - }, - { - "role": "tool", - "tool_call_id": "db_7995", - "content": "{\"id\": 12345, \"name\": \"Laptop\", \"price\": 999.99}" - }, - { - "role": "assistant", - "content": "рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдорд┐рд▓рд╛: {\"id\": 12345, \"name\": \"Laptop\", \"price\": 999.99}" - } - ], - "translation_metadata": "{\"target_lang\": \"hi\", \"translation\": {\"content\": [\"[рдЖрдк рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред]\", \"3. Copy the content as-is.\\n```python\\ndef calculate_sum(a, b):\\n return a + b\\n```\", \"\", \"{\\\"id\\\": 12345, \\\"name\\\": \\\"Laptop\\\", \\\"price\\\": 999.99}\", \"рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдорд┐рд▓рд╛: {\\\"id\\\": 12345, \\\"name\\\": \\\"Laptop\\\", \\\"price\\\": 999.99}\"]}, \"segmented_translation\": {\"content\": [{\"src\": \"You are a database assistant.\", \"tgt\": \"[рдЖрдк рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред]\"}, {\"src\": \"Get product by ID 12345\", \"tgt\": \"3. Copy the content as-is.\\n```python\\ndef calculate_sum(a, b):\\n return a + b\\n```\"}, {\"src\": \"Here's what I found: {\\\"id\\\": 12345, \\\"name\\\": \\\"Laptop\\\", \\\"price\\\": 999.99}\", \"tgt\": \"рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдорд┐рд▓рд╛: {\\\"id\\\": 12345, \\\"name\\\": \\\"Laptop\\\", \\\"price\\\": 999.99}\"}]}}", - "translated_messages": "[{\"role\": \"system\", \"content\": \"[рдЖрдк рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд╣рд╛рдпрдХ рд╣реИрдВред]\"}, {\"role\": \"user\", \"content\": \"3. Copy the content as-is.\\n```python\\ndef calculate_sum(a, b):\\n return a + b\\n```\"}, {\"role\": \"assistant\", \"tool_calls\": [{\"id\": \"db_7995\", \"type\": \"function\", \"function\": {\"name\": \"query_database\", \"arguments\": \"{\\\"query\\\": \\\"Get product by ID 12345\\\"}\"}}], \"content\": \"\"}, {\"role\": \"tool\", \"tool_call_id\": \"db_7995\", \"content\": \"{\\\"id\\\": 12345, \\\"name\\\": \\\"Laptop\\\", \\\"price\\\": 999.99}\"}, {\"role\": \"assistant\", \"content\": \"рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдорд┐рд▓рд╛: {\\\"id\\\": 12345, \\\"name\\\": \\\"Laptop\\\", \\\"price\\\": 999.99}\"}]" -} -{ - "messages": [ - { - "role": "system", - "content": "рдЖрдк рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕рд╣рд╛рдпрдХ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдореМрд╕рдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдБрдЪ рд╣реИред" - }, - { - "role": "user", - "content": "[рджреБрдмрдИ рдореЗрдВ рдореМрд╕рдо рдХреИрд╕рд╛ рд╣реИ?]" - }, - { - "role": "assistant", - "tool_calls": [ - { - "id": "weather_8882", - "type": "function", - "function": { - "name": "get_weather", - "arguments": "{\"location\": \"Dubai\", \"units\": \"fahrenheit\"}" - } - } - ], - "content": "" - }, - { - "role": "tool", - "tool_call_id": "weather_8882", - "content": "{\"temp\": 55, \"condition\": \"rainy\", \"humidity\": 80}" - }, - { - "role": "assistant", - "content": "рджреБрдмрдИ рдореЗрдВ рдореМрд╕рдо рдмрд╛рд░рд┐рд╢ рдХреЗ рд╕рд╛рде рд╣реИ, рддрд╛рдкрдорд╛рди 55┬░F рдФрд░ 80% рдЖрд░реНрджреНрд░рддрд╛ рдХреЗ рд╕рд╛рдеред" - } - ], - "tools": [ - { - "type": "function", - "function": { - "name": "get_weather", - "description": "Get current weather for a location", - "parameters": { - "type": "object", - "properties": { - "location": { - "type": "string" - }, - "units": { - "type": "string" - } - }, - "required": [ - "location" - ] - } - } - } - ], - "translation_time": 50.0045132637, - "translation_errors": "", - "translated_text": [ - { - "role": "system", - "content": "рдЖрдк рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕рд╣рд╛рдпрдХ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдореМрд╕рдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдБрдЪ рд╣реИред" - }, - { - "role": "user", - "content": "[рджреБрдмрдИ рдореЗрдВ рдореМрд╕рдо рдХреИрд╕рд╛ рд╣реИ?]" - }, - { - "role": "assistant", - "tool_calls": [ - { - "id": "weather_8882", - "type": "function", - "function": { - "name": "get_weather", - "arguments": "{\"location\": \"Dubai\", \"units\": \"fahrenheit\"}" - } - } - ], - "content": "" - }, - { - "role": "tool", - "tool_call_id": "weather_8882", - "content": "{\"temp\": 55, \"condition\": \"rainy\", \"humidity\": 80}" - }, - { - "role": "assistant", - "content": "рджреБрдмрдИ рдореЗрдВ рдореМрд╕рдо рдмрд╛рд░рд┐рд╢ рдХреЗ рд╕рд╛рде рд╣реИ, рддрд╛рдкрдорд╛рди 55┬░F рдФрд░ 80% рдЖрд░реНрджреНрд░рддрд╛ рдХреЗ рд╕рд╛рдеред" - } - ], - "translation_metadata": "{\"target_lang\": \"hi\", \"translation\": {\"content\": [\"рдЖрдк рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕рд╣рд╛рдпрдХ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдореМрд╕рдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдБрдЪ рд╣реИред\", \"[рджреБрдмрдИ рдореЗрдВ рдореМрд╕рдо рдХреИрд╕рд╛ рд╣реИ?]\", \"\", \"{\\\"temp\\\": 55, \\\"condition\\\": \\\"rainy\\\", \\\"humidity\\\": 80}\", \"рджреБрдмрдИ рдореЗрдВ рдореМрд╕рдо рдмрд╛рд░рд┐рд╢ рдХреЗ рд╕рд╛рде рд╣реИ, рддрд╛рдкрдорд╛рди 55┬░F рдФрд░ 80% рдЖрд░реНрджреНрд░рддрд╛ рдХреЗ рд╕рд╛рдеред\"]}, \"segmented_translation\": {\"content\": [{\"src\": \"You are a helpful assistant with access to weather information.\", \"tgt\": \"рдЖрдк рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕рд╣рд╛рдпрдХ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдореМрд╕рдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдБрдЪ рд╣реИред\"}, {\"src\": \"What's the weather in Dubai?\", \"tgt\": \"[рджреБрдмрдИ рдореЗрдВ рдореМрд╕рдо рдХреИрд╕рд╛ рд╣реИ?]\"}, {\"src\": \"The weather in Dubai is rainy with a temperature of 55┬░F and 80% humidity.\", \"tgt\": \"рджреБрдмрдИ рдореЗрдВ рдореМрд╕рдо рдмрд╛рд░рд┐рд╢ рдХреЗ рд╕рд╛рде рд╣реИ, рддрд╛рдкрдорд╛рди 55┬░F рдФрд░ 80% рдЖрд░реНрджреНрд░рддрд╛ рдХреЗ рд╕рд╛рдеред\"}]}}", - "translated_messages": "[{\"role\": \"system\", \"content\": \"рдЖрдк рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕рд╣рд╛рдпрдХ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдореМрд╕рдо рдХреА рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдкрд╣реБрдБрдЪ рд╣реИред\"}, {\"role\": \"user\", \"content\": \"[рджреБрдмрдИ рдореЗрдВ рдореМрд╕рдо рдХреИрд╕рд╛ рд╣реИ?]\"}, {\"role\": \"assistant\", \"tool_calls\": [{\"id\": \"weather_8882\", \"type\": \"function\", \"function\": {\"name\": \"get_weather\", \"arguments\": \"{\\\"location\\\": \\\"Dubai\\\", \\\"units\\\": \\\"fahrenheit\\\"}\"}}], \"content\": \"\"}, {\"role\": \"tool\", \"tool_call_id\": \"weather_8882\", \"content\": \"{\\\"temp\\\": 55, \\\"condition\\\": \\\"rainy\\\", \\\"humidity\\\": 80}\"}, {\"role\": \"assistant\", \"content\": \"рджреБрдмрдИ рдореЗрдВ рдореМрд╕рдо рдмрд╛рд░рд┐рд╢ рдХреЗ рд╕рд╛рде рд╣реИ, рддрд╛рдкрдорд╛рди 55┬░F рдФрд░ 80% рдЖрд░реНрджреНрд░рддрд╛ рдХреЗ рд╕рд╛рдеред\"}]" -} diff --git a/docs/translation/explanation/faith-evaluation.md b/docs/translation/explanation/faith-evaluation.md deleted file mode 100644 index 052f64536..000000000 --- a/docs/translation/explanation/faith-evaluation.md +++ /dev/null @@ -1,79 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "How FAITH integrates into nemotron steps run translate/nemo_curator and interacts with translation backends." -topics: ["Translation", "FAITH"] -tags: ["Explanation", "Quality"] -content: - type: "Explanation" - difficulty: "Beginner" - audience: ["ML Engineer", "Data Scientist"] ---- - -# FAITH Evaluation Inside Translation - -This page explains how optional FAITH scoring behaves when `faith_eval.enabled` is `true` inside `nemotron steps run translate/nemo_curator`. -FAITH stands for the five quality dimensions the judge scores against each translated segment: *Fluency*, *Accuracy*, *Idiomaticity*, *Terminology*, and *Handling of Format*. - -FAITH runs in the same `TranslationStage` invocation as translation. There is no separate CLI only for FAITH scoring. - -## What FAITH Adds - -FAITH scores translation quality segment-by-segment using a large language model (LLM) judge configured alongside your translation backend: - -- `faith_eval.threshold` defines the minimum acceptable average score. The starter default is `2.5`, which you should tune per model. See the next section for what the scale means. -- FAITH scoring follows the translated segment pairs produced by Curator's translation stage for long inputs. -- `faith_eval.filter_enabled` drops failing rows when `true`, which lets you keep high-confidence shards only. - -## Score Scale - -The FAITH judge scores each of the five dimensions on a one-to-five scale, where one is poor and five is excellent. -The full per-dimension rubric lives in the upstream NeMo Curator prompt at `nemo_curator/stages/text/experimental/translation/prompts/faith_eval.yaml`. -The Fluency band quoted below is representative; the other four dimensions use the same one-to-five shape with dimension-specific wording. - -```text -1. **Fluency (1-5)**: Does the translation read naturally in the target language, free from grammar or syntax errors? - - 1: Very poor fluency, difficult to understand. - - 2: Somewhat fluent but with major grammatical issues. - - 3: Generally fluent with a few errors. - - 4: Mostly fluent but may have minor grammatical issues. - - 5: Perfect grammar, native-like fluency. -``` - -The judge also emits two sentinel values that sit outside the one-to-five scale, quoted here from the same prompt: - -```text -In case there is no translation provided, give -1 to all the categories! -If case of non-applicable score, make the score=0 -``` - -A score of `0` means the dimension does not apply to the row, for example Terminology on a translation that contains no specialized terms. -A score of `-1` means the judge received no translation to evaluate. - -The `faith_avg` column is the mean of the dimensions that scored above zero. -Dimensions marked `0` for "not applicable" are excluded from the average, so a translation with no specialized terminology can still earn a perfect `faith_avg` of `5.0`. -If every dimension is `0` or `-1`, `faith_avg` is `0.0`. - -Filtering keeps a row when `faith_avg >= faith_eval.threshold`, with parse failures preserved so reviewers can audit them. -The starter default `2.5` sits between band two, "major grammatical issues," and band three, "generally fluent with a few errors." -Treat `2.5` as a noisy-data floor rather than a quality bar. -Raise the threshold when you want a tighter quality gate, for example to `3.5` when you are building a high-confidence parallel corpus. - -## Why an LLM Client Is Always Required - -Whenever `faith_eval.enabled` is `true`, the stage instantiates an OpenAI-compatible client using `server.url`, `server.api_key` or `server.api_key_env`, and `faith_eval.model_name`. If you omit `faith_eval.model_name`, the stage falls back to `server.model`. - -Even if `backend` is `nmt`, `google`, or `aws`, FAITH still issues LLM calls. Plan keys and quotas accordingly. - -## Merge Semantics - -`merge_scores: true` is the default. It attaches FAITH outputs alongside translated columns so reviewers can audit scores without losing structured chat payloads. - -## Related YAML Surface - -See `faith_eval` in {doc}`../reference/translate-config` and operational recipes in {doc}`../how-to/run-faith-evaluation`. - -## Related Pages - -- Where FAITH sits in the pipeline: {doc}`pipeline-overview` -- Input and output shapes when scores merge or filter: {doc}`../reference/io-format` diff --git a/docs/translation/explanation/index.md b/docs/translation/explanation/index.md deleted file mode 100644 index 399ea3525..000000000 --- a/docs/translation/explanation/index.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Concept pages for nemotron steps run translate/nemo_curator: pipeline flow, segmentation, FAITH." -topics: ["Translation", "Concepts"] -tags: ["Explanation", "Translation"] -content: - type: "Explanation" - difficulty: "Beginner" - audience: ["ML Engineer", "Data Scientist"] ---- - -# Concepts - -Background on how the translation pipeline fits together, how segmentation behaves, and what FAITH measures. Use these pages when how-to steps refer to behavior you want to understand before changing defaults. - -```{toctree} -:maxdepth: 1 -:hidden: - -pipeline-overview -segmentation -faith-evaluation -``` - -Concept-focused explanations for `nemotron steps run translate/nemo_curator` and the `translate/nemo_curator` Curator pipeline. - -## Pipeline Processing - -::::{grid} 1 1 1 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} {octicon}`graph;1.5em;sd-mr-1` Pipeline overview -:link: pipeline-overview -:link-type: doc -Reader to `TranslationStage` to writer, with an optional FAITH branch. -+++ -{bdg-secondary}`architecture` -::: - -:::{grid-item-card} {octicon}`package;1.5em;sd-mr-1` Segmentation -:link: segmentation -:link-type: doc -Coarse versus fine `segmentation_mode` trade-offs. -+++ -{bdg-secondary}`segmentation` -::: - -:::: - -## Evaluation Inside Translation - -::::{grid} 1 1 1 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} {octicon}`checklist;1.5em;sd-mr-1` FAITH evaluation -:link: faith-evaluation -:link-type: doc -What FAITH captures when `faith_eval.enabled` is true. -+++ -{bdg-secondary}`faith` -::: - -:::: diff --git a/docs/translation/explanation/pipeline-overview.md b/docs/translation/explanation/pipeline-overview.md deleted file mode 100644 index 4005c9eef..000000000 --- a/docs/translation/explanation/pipeline-overview.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "How nemotron steps run translate/nemo_curator flows through Curator readers, TranslationStage, writers, and FAITH." -topics: ["Translation", "Pipeline"] -tags: ["Explanation", "Architecture"] -content: - type: "Explanation" - difficulty: "Beginner" - audience: ["ML Engineer", "Data Scientist"] ---- - -# Pipeline Overview - -This page describes how `nemotron steps run translate/nemo_curator` moves records from `input_path` into `output_dir` by using NVIDIA NeMo Curator staging primitives. - -## Architecture - -```{mermaid} -flowchart LR - A[input_path] --> B[Reader] - B --> C[TranslationStage] - C --> D[Writer] - D --> E[output_dir shards] - C --> F{faith_eval.enabled?} - F -->|yes| G[FAITH scoring LLM] - G --> C - F -->|no| D -``` - -## Reader Stage - -1. Format detection follows `input_format`, which may be `auto`, `jsonl`, or `parquet`. -2. Paths may be a single file, a glob, or a homogeneous directory of shards. Never mix JSON Lines (JSONL) and Parquet in one directory when `auto` is active. - -## Translation Stage - -`TranslationStage` performs backend-specific translation for every location matched by `text_field`, for example `messages.*.content` wildcards inside chat arrays. - -- `backend` selects `llm`, `nmt`, `google`, or `aws`. -- `segmentation_mode` chooses coarse versus fine segmentation before translation units leave the stage. -- `output_mode` controls whether replaced fields, raw metadata, or both appear on each record. - -## Writer Stage - -The writer emits `output_format` shards, either `jsonl` or `parquet`, under `output_dir`. Expect partitioned filenames rather than a single merged file. Downstream packing steps usually consume the directory directly. - -## FAITH Coupling - -When `faith_eval.enabled` is true the stage keeps an OpenAI-compatible client even if `backend` is `nmt`, `google`, or `aws`, because FAITH scoring uses the LLM configured under `server`. You can override that model string with `faith_eval.model_name`. - -## Operational Reminders - -- Translation failures surface as runtime errors from Curator. Rerun with smaller concurrency if providers throttle you. -- Extremely large single files may require an offline splitting stage. Mirror the guardrails codified in `step.toml`. - -## Related Pages - -- Hands-on first run: {doc}`../getting-started` -- Segmentation behavior: {doc}`segmentation` -- FAITH semantics: {doc}`faith-evaluation` -- YAML keyed to this flow: {doc}`../reference/translate-config` diff --git a/docs/translation/explanation/segmentation.md b/docs/translation/explanation/segmentation.md deleted file mode 100644 index 90a40ae45..000000000 --- a/docs/translation/explanation/segmentation.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Segmentation modes for nemotron steps run translate/nemo_curator: coarse and fine modes, plus min_segment_chars." -topics: ["Translation", "Segmentation"] -tags: ["Explanation", "Translation"] -content: - type: "Explanation" - difficulty: "Beginner" - audience: ["ML Engineer", "Data Scientist"] ---- - -# Segmentation - -This page helps you pick `segmentation_mode` values that keep translations faithful without chopping structured payloads. - -## Controls - -| YAML key | Meaning | -|----------|---------| -| `segmentation_mode` | `coarse` is the default. It balances throughput while respecting code fences and markup boundaries. `fine` emits smaller linguistic segments when coarse spans truncate meaning. | -| `min_segment_chars` | Skips extremely short fragments that harm throughput or confuse backends. The default is `0`, which disables filtering. | - -## When Coarse Is Enough - -Start with `segmentation_mode: coarse` when records contain JSON-like strings, tool arguments, or fenced code blocks. Coarse mode tracks reconstruction metadata so `TranslationStage` can rebuild the original nesting after translating natural-language spans. - -## When to Switch to Fine - -Move to `segmentation_mode: fine` when you observe clipped sentences, missing trailing punctuation, or uneven translations inside long paragraphs, and you have confirmed the issue disappears after finer segmentation. - -Fine mode increases API calls or neural machine translation (NMT) batches. Budget concurrency by using `max_concurrent_requests` or backend-specific knobs. - -## Interaction With FAITH - -FAITH scoring is part of Curator's translation stage and follows the translated segment pairs produced by the stage, which keeps thresholds interpretable on long documents. - -## Practical Workflow - -1. Run with `coarse` first. -2. Inspect a handful of difficult rows such as legal text, mixed Markdown, or multilingual snippets. -3. If boundaries look wrong, toggle `fine` on a slice before scaling up. - -## Related Pages - -- Step-by-step fine mode: {doc}`../how-to/use-fine-segmentation` -- Pipeline context: {doc}`pipeline-overview` -- FAITH alignment with segments: {doc}`faith-evaluation` diff --git a/docs/translation/getting-started.md b/docs/translation/getting-started.md deleted file mode 100644 index 1bc1414f7..000000000 --- a/docs/translation/getting-started.md +++ /dev/null @@ -1,138 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Run nemotron steps run translate/nemo_curator end-to-end with config/default.yaml and sample chat JSONL." -topics: ["Translation", "Tutorial"] -tags: ["Tutorial", "Translation"] -content: - type: "Tutorial" - difficulty: "Beginner" - audience: ["ML Engineer", "Data Scientist"] ---- - -(getting-started-translation)= -# Getting Started With Translation - -You will produce translated JSON Lines (JSONL) shards under an `output_dir` you choose, with FAITH quality scoring applied in the same run. FAITH is the translation-quality scorer name used in NVIDIA NeMo Curator documentation. - -This tutorial runs `nemotron steps run translate/nemo_curator` end to end on a small sample file. You use `src/nemotron/steps/translate/nemo_curator/config/default.yaml` and CLI dotlist overrides. - -:::{card} -What You Will Produce - -Translation shards sit under a writable `output_dir`, with filtering governed by `faith_eval` in the same run. - -^^^ - -Overview - -1. Export `NVIDIA_API_KEY`. -2. Download the sample `train_sample.jsonl` chat file. -3. Run `nemotron steps run translate/nemo_curator -c default` with CLI overrides for paths, languages, and `server.model`. -4. Inspect `output_dir` for translated records. - -{octicon}`clock;1em;sd-mr-1` Budget roughly five to fifteen minutes depending on network latency and response time from your provider and on corpus size. -The sample contains about one hundred lines. -::: - -## Prerequisites - -- Network access to `https://integrate.api.nvidia.com/v1`. -- `NVIDIA_API_KEY` exported in your shell. -- For local `uv run` execution with Curator/Ray, export `RAY_ENABLE_UV_RUN_RUNTIME_ENV=0` - so Ray workers reuse the synchronized project environment. - -## Sample Input File - -This translation tutorial uses `train_sample.jsonl` as a compact multi-turn chat dataset. - -```{literalinclude} _snippets/input/train_sample.jsonl -:language: json -:class: scrollable -``` - -## Procedure - -1. Clone the repository, if you haven't already: - - ```console - $ git clone https://github.com/NVIDIA-NeMo/Nemotron && cd Nemotron - ``` - -1. Synchronize the dependencies: - - ```console - $ uv sync --extra translate - ``` - -1. Download `train_sample.jsonl` from the [sample file](_snippets/input/train_sample.jsonl). - - Save the file in the repository root if you want to match the `input_path` below exactly. If you save it elsewhere, change `input_path` in the commands that follow. - -1. Run the translation stage. - - From the repository root, specify the `default.yaml` config and overrides by using CLI arguments. - Set `server.model` to a model your endpoint serves. - Replace `` with your NVIDIA API key value, or set `NVIDIA_API_KEY` in your environment before running the command. - - ```console - $ export NVIDIA_API_KEY="" - $ export RAY_ENABLE_UV_RUN_RUNTIME_ENV=0 - - $ uv run --no-sync nemotron steps run translate/nemo_curator -c default \ - input_path="${PWD}/train_sample.jsonl" \ - output_dir=./output/translation-getting-started \ - source_language=en \ - target_language=hi \ - server.model=nvidia/nemotron-3-nano-omni-30b-a3b-reasoning \ - faith_eval.enabled=false \ - faith_eval.filter_enabled=false \ - max_concurrent_requests=4 - ``` - - - `input_path` and `output_dir` replace the placeholders in `default.yaml`. - - `source_language` and `target_language` must be explicit two-letter language codes from the ISO 639-1 standard, which the International Organization for Standardization publishes. - - The starter file leaves them empty on purpose so you choose the pair at run time. - - `server.model` is required when `backend` is `llm`. - - The default `server.url` in `default.yaml` is `https://integrate.api.nvidia.com/v1`. - -1. Inspect the output. - - The `output_dir` path holds the Curator writer output when `output_format` is `jsonl`, usually several shard files instead of one consolidated JSONL file. - Spot-check one line. - - ```console - $ find ./output/translation-getting-started -name '*.jsonl' | head -n 1 | xargs head -n 1 | python3 -m json.tool --no-ensure-ascii - ``` - - Translated chat payloads match `text_field` set to `messages.*.content`, `output_mode` set to `both`, and `reconstruct_messages` set to `true` in `default.yaml`. - - ```{literalinclude} _snippets/output/translated.jsonl - :language: json - :class: scrollable - ``` - -1. Optional: Print the merged configuration without running the stage. - - Pass `--dry-run` or `-d` so Curator does not execute the pipeline. - - ```console - $ export RAY_ENABLE_UV_RUN_RUNTIME_ENV=0 - - $ uv run --no-sync nemotron steps run translate/nemo_curator -d -c default \ - input_path=./train_sample.jsonl \ - output_dir=./output/translation-getting-started \ - source_language=en \ - target_language=hi \ - server.model=nvidia/nemotron-3-nano-omni-30b-a3b-reasoning - ``` - -## Next Steps - -- Deeper behavior of FAITH in this pipeline: {doc}`explanation/faith-evaluation` -- Backend tuning: {doc}`how-to/run-llm-translation` -- Field wiring and `output_mode`: {doc}`how-to/configure-fields-and-output` -- FAITH thresholds and filtering: {doc}`how-to/run-faith-evaluation` -- CLI flags and overrides: {doc}`reference/cli-translation` diff --git a/docs/translation/how-to/configure-fields-and-output.md b/docs/translation/how-to/configure-fields-and-output.md deleted file mode 100644 index 437d10d6b..000000000 --- a/docs/translation/how-to/configure-fields-and-output.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Configure text_field, output_mode, reconstruct_messages, and writer formats." -topics: ["Translation", "Configuration"] -tags: ["How-To", "Translation"] -content: - type: "How-To" - difficulty: "Beginner" - audience: ["ML Engineer", "Data Scientist"] ---- - -# Configure Fields and Output - -Use this guide when you need to align `text_field`, `output_mode`, reconstruction flags, and formats with your dataset schema before or after a first run. - -For a guided first invocation, see {doc}`../getting-started`. - -## Choosing `text_field` - -- Chat corpora in OpenAI layout typically use `messages.*.content` so every message `content` entry is translated consistently. -- Plain documents might use a single column such as `article_body`. Omit wildcards when the schema is flat. - -## Outputs - -| YAML key | Behavior | -|----------|----------| -| `output_field` / `translation_column` | Control column names used when emitting translated strings. The default is `translated_text`. | -| `output_mode` | `replaced` overwrites source strings, `raw` preserves originals plus metadata, and `both` keeps audit trails. The starter default is `both`. | -| `merge_scores` | Keeps FAITH outputs adjacent to translations when scoring runs. | -| `reconstruct_messages`, `messages_field`, `messages_content_field` | Enable faithful reconstructions of chat arrays. These default to `true` for standard `messages` and `content` layouts. | - -## Formats - -Set `input_format` when automatic probing cannot distinguish ambiguous globs. Align `output_format` with downstream packing expectations; values are `jsonl` or `parquet`. - -## CLI Overrides - -You can override any YAML key with dotlists: - -```bash -uv run nemotron steps run translate/nemo_curator -c default \ - text_field=messages.*.content \ - output_mode=both \ - reconstruct_messages=true \ - input_path=/path/to/chat.jsonl \ - output_dir=/path/to/out \ - source_language=en \ - target_language=fr -``` - -## Related Pages - -- Schema patterns: {doc}`../reference/io-format` -- Segmentation interactions: {doc}`use-fine-segmentation` diff --git a/docs/translation/how-to/index.md b/docs/translation/how-to/index.md deleted file mode 100644 index 7c8680653..000000000 --- a/docs/translation/how-to/index.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Task guides for nemotron steps run translate/nemo_curator backends and configuration." -topics: ["Translation", "How-To"] -tags: ["How-To", "Translation"] -content: - type: "How-To" - difficulty: "Beginner" - audience: ["ML Engineer", "Data Scientist"] ---- - -# How-To Guides - -This section has task-focused procedures for changing backends, wiring fields, tuning segmentation, and adjusting FAITH. - -For copy-paste prompts and habits when you work with a coding agent, read {doc}`../using-skills` first. -Start with {doc}`../getting-started` if you have not run the step yet. - -```{toctree} -:maxdepth: 1 -:hidden: - -run-llm-translation -run-nmt-translation -run-google-aws-translation -configure-fields-and-output -use-fine-segmentation -run-faith-evaluation -``` - -Focused procedures for `nemotron steps run translate/nemo_curator`. - -## Run Translation - -::::{grid} 1 1 1 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} {octicon}`cpu;1.5em;sd-mr-1` LLM backend -:link: run-llm-translation -:link-type: doc -OpenAI-compatible servers, hosted or on-prem. -+++ -{bdg-secondary}`backend=llm` -::: - -:::{grid-item-card} {octicon}`server;1.5em;sd-mr-1` NMT HTTP service -:link: run-nmt-translation -:link-type: doc -Self-hosted `POST /translate` microservices. -+++ -{bdg-secondary}`backend=nmt` -::: - -:::{grid-item-card} {octicon}`cloud;1.5em;sd-mr-1` Google or AWS -:link: run-google-aws-translation -:link-type: doc -Managed cloud translation APIs. -+++ -{bdg-secondary}`backend=google|aws` -::: - -:::: - -## Configure and Tune - -::::{grid} 1 1 1 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} {octicon}`file-directory;1.5em;sd-mr-1` Fields and outputs -:link: configure-fields-and-output -:link-type: doc -Wildcards, `output_mode`, chat reconstruction. -+++ -{bdg-secondary}`schema` -::: - -:::{grid-item-card} {octicon}`package;1.5em;sd-mr-1` Segmentation -:link: use-fine-segmentation -:link-type: doc -Switch `segmentation_mode` deliberately. -+++ -{bdg-secondary}`segmentation` -::: - -:::: - -## FAITH Quality Gates - -::::{grid} 1 1 1 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} {octicon}`checklist;1.5em;sd-mr-1` FAITH evaluation -:link: run-faith-evaluation -:link-type: doc -Thresholds, filtering, model overrides. -+++ -{bdg-secondary}`faith` -::: - -:::: - -```{mermaid} -graph LR - A[Prepare YAML + env] --> B[nemotron steps run translate/nemo_curator] - B --> C{Need FAITH?} - C -->|yes| D[Tune faith_eval] - C -->|no| E[Disable faith_eval] - D --> B - E --> B -``` diff --git a/docs/translation/how-to/run-faith-evaluation.md b/docs/translation/how-to/run-faith-evaluation.md deleted file mode 100644 index 0ffeb085c..000000000 --- a/docs/translation/how-to/run-faith-evaluation.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Tune faith_eval inside nemotron steps run translate/nemo_curator runs." -topics: ["Translation", "FAITH"] -tags: ["How-To", "Translation"] -content: - type: "How-To" - difficulty: "Intermediate" - audience: ["ML Engineer", "Data Scientist"] ---- - -# Run FAITH Evaluation - -Use this guide when you need to tune thresholds, filtering, or scorer models for FAITH inside `nemotron steps run translate/nemo_curator` without a separate evaluation command. - -FAITH runs inside `TranslationStage` whenever `faith_eval.enabled` is `true`. The `default.yaml` starter profile ships with FAITH enabled. For how FAITH couples to non-LLM backends, see {doc}`../explanation/faith-evaluation`. - -## Essential Knobs - -| YAML path | Purpose | -|-----------|---------| -| `faith_eval.enabled` | Master toggle. Set `false` when you only need raw translation. | -| `faith_eval.threshold` | Average score floor. Rows failing the threshold are dropped when `filter_enabled` is `true`. | -| `faith_eval.filter_enabled` | Enables or disables removing low-scoring rows. | -| `faith_eval.model_name` | Overrides `server.model` for scoring-only workloads. | -| `faith_eval.generation_config` | Optional OpenAI-compatible generation settings for the FAITH scorer. | -| `faith_eval.max_concurrent_requests` | Optional scorer-side concurrency limit. | - -## LLM Credentials - -FAITH always requires the OpenAI-compatible `server` configuration. Set `NVIDIA_API_KEY` first, for example by replacing `` below. - -```bash -export NVIDIA_API_KEY="" -uv run nemotron steps run translate/nemo_curator -c default \ - faith_eval.enabled=true \ - faith_eval.threshold=3.0 \ - faith_eval.filter_enabled=true \ - server.model=YOUR_LLM_MODEL_ID \ - input_path=/path/to/chat.jsonl \ - output_dir=/path/to/out \ - source_language=en \ - target_language=hi -``` - -FAITH scoring is part of Curator's translation stage and is aligned to the translated segments produced by the stage. There is no separate `faith_eval.segment_level` switch in this Nemotron config. - -## Disable FAITH Temporarily - -```bash -uv run nemotron steps run translate/nemo_curator -c default \ - faith_eval.enabled=false \ - input_path=/path/to/chat.jsonl \ - output_dir=/path/to/out \ - source_language=en \ - target_language=hi \ - server.model=YOUR_LLM_MODEL_ID -``` - -Even with FAITH off, `backend=llm` still needs `server.model` for translation itself. - -## Related Pages - -- Concept primer: {doc}`../explanation/faith-evaluation` -- Full YAML reference: {doc}`../reference/translate-config` diff --git a/docs/translation/how-to/run-google-aws-translation.md b/docs/translation/how-to/run-google-aws-translation.md deleted file mode 100644 index 1574c7918..000000000 --- a/docs/translation/how-to/run-google-aws-translation.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Use backend=google or backend=aws with nemotron steps run translate/nemo_curator." -topics: ["Translation", "Cloud"] -tags: ["How-To", "Translation"] -content: - type: "How-To" - difficulty: "Intermediate" - audience: ["ML Engineer", "Data Scientist"] ---- - -# Run Google or AWS Translation - -Use this guide when `backend` is `google` or `aws` and you want managed cloud translation with credentials supplied outside YAML files. - -## Shared Practices - -- Inject credentials through provider-standard environment variables or instance roles. Do not paste secrets into `default.yaml`. -- Keep `google.project_id`, `google.location`, and `google.api_version` aligned with your Google Cloud Platform (GCP) setup. API version `v3` requires project metadata. -- Pin `aws.region` near your data residency requirements on Amazon Web Services (AWS). - -## Google Example Skeleton - -```bash -uv run nemotron steps run translate/nemo_curator -c default \ - backend=google \ - google.project_id=YOUR_PROJECT \ - google.api_version=v3 \ - google.location=global \ - input_path=/path/to/chat.jsonl \ - output_dir=/path/to/out \ - source_language=en \ - target_language=ja -``` - -## AWS Example Skeleton - -```bash -uv run nemotron steps run translate/nemo_curator -c default \ - backend=aws \ - aws.region=us-west-2 \ - input_path=/path/to/chat.jsonl \ - output_dir=/path/to/out \ - source_language=en \ - target_language=es -``` - -## FAITH Reminder - -Cloud backends still pair with the FAITH LLM client. Keep `server` populated whenever `faith_eval.enabled` is `true`. - -## Related Pages - -- YAML keys: {doc}`../reference/translate-config` -- FAITH tuning: {doc}`run-faith-evaluation` diff --git a/docs/translation/how-to/run-llm-translation.md b/docs/translation/how-to/run-llm-translation.md deleted file mode 100644 index ef47dda1e..000000000 --- a/docs/translation/how-to/run-llm-translation.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Use backend=llm with nemotron steps run translate/nemo_curator and NVIDIA_API_KEY." -topics: ["Translation", "LLM"] -tags: ["How-To", "Translation"] -content: - type: "How-To" - difficulty: "Beginner" - audience: ["ML Engineer", "Data Scientist"] ---- - -# Run LLM Translation - -Use this guide when `backend` must stay `llm` and you need to point `nemotron steps run translate/nemo_curator` at an OpenAI-compatible chat-completions endpoint and model. - -## Prerequisites - -- Set `NVIDIA_API_KEY` in your shell when relying on the default `server.api_key_env`, for example `export NVIDIA_API_KEY=""`. -- Confirm `server.url` matches your deployment. The `default.yaml` file targets the NVIDIA integrate API. - -## Procedure - -1. Start from `default.yaml` with `-c default`. -2. Override model and languages: - -```bash -uv run nemotron steps run translate/nemo_curator -c default \ - backend=llm \ - input_path=/path/to/chat.jsonl \ - output_dir=/path/to/out \ - source_language=en \ - target_language=de \ - server.model=YOUR_LLM_MODEL_ID -``` - -3. Adjust `max_concurrent_requests` upward only after verifying the endpoint tolerates parallel completions. - -## Hosted Model Hygiene - -Hosted catalogs retire models frequently. Pin to identifiers your tenant currently exposes before large batch jobs. - -## Related Pages - -- FAITH requirements when enabled: {doc}`run-faith-evaluation` -- Full YAML reference: {doc}`../reference/translate-config` diff --git a/docs/translation/how-to/run-nmt-translation.md b/docs/translation/how-to/run-nmt-translation.md deleted file mode 100644 index 47fb0a251..000000000 --- a/docs/translation/how-to/run-nmt-translation.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Use backend=nmt with nemotron steps run translate/nemo_curator and a local HTTP translation service." -topics: ["Translation", "NMT"] -tags: ["How-To", "Translation"] -content: - type: "How-To" - difficulty: "Intermediate" - audience: ["ML Engineer", "Data Scientist"] ---- - -# Run NMT Translation - -Use this guide when translation should run against `backend: nmt` and your own HTTP microservice that performs *neural machine translation (NMT)*. - -## Prerequisites - -- A running NMT service reachable at the URL you pass as `nmt.server_url`, implementing the contract in the next section. -- If `faith_eval.enabled` is `true`, LLM credentials for FAITH remain required; see {doc}`run-faith-evaluation`. - -## Service Contract - -Your service must implement one endpoint. - -`POST /translate` тАФ request body: - -```json -{ - "texts": ["Hello, world.", "How are you?"], - "src_lang": "en", - "tgt_lang": "hi" -} -``` - -`texts` is a list of strings (one per segment). `src_lang` and `tgt_lang` are BCP 47 / ISO 639-1 codes; Nemotron lowercases them before the call. - -Success response body: - -```json -{ - "translations": ["рдирдорд╕реНрддреЗ, рджреБрдирд┐рдпрд╛ред", "рдЖрдк рдХреИрд╕реЗ рд╣реИрдВ?"] -} -``` - -`translations` must contain exactly as many strings as `texts`. Curator raises a `RuntimeError` on a count mismatch. - -On error, return a non-2xx HTTP status with a JSON body containing an `"error"` field. Curator retries with exponential backoff and surfaces unrecoverable failures as an `aiohttp.ClientResponseError`. Streaming is not supported тАФ return the full batch in a single response. - -Curator also sends `GET /health` at startup as an optional liveness check. Return any 2xx to pass; if the endpoint is absent, Curator logs a warning and continues. - -Tune `nmt.batch_size`, `nmt.timeout`, and `nmt.max_concurrent_requests` once you understand your server's throughput. - -## Procedure - -```bash -uv run nemotron steps run translate/nemo_curator -c default \ - backend=nmt \ - nmt.server_url=http://localhost:5000 \ - input_path=/path/to/chat.jsonl \ - output_dir=/path/to/out \ - source_language=en \ - target_language=hi -``` - -## FAITH Considerations - -If `faith_eval.enabled` stays `true` as in the default `default.yaml`, you must still supply large language model (LLM) credentials through `server` because FAITH scoring uses that client even though translation runs on NMT. - -## Related Pages - -- Field wiring: {doc}`configure-fields-and-output` -- YAML reference for the `nmt` block: {doc}`../reference/translate-config` diff --git a/docs/translation/how-to/use-fine-segmentation.md b/docs/translation/how-to/use-fine-segmentation.md deleted file mode 100644 index 0df3d8928..000000000 --- a/docs/translation/how-to/use-fine-segmentation.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Switch segmentation_mode between coarse and fine modes for nemotron steps run translate/nemo_curator." -topics: ["Translation", "Segmentation"] -tags: ["How-To", "Translation"] -content: - type: "How-To" - difficulty: "Beginner" - audience: ["ML Engineer", "Data Scientist"] ---- - -# Use Fine Segmentation - -Use this guide when `segmentation_mode=coarse` mishandles long prose and you want to try `fine` on a sample before scaling. - -Conceptual background lives in {doc}`../explanation/segmentation`. - -## Procedure - -1. Reproduce an issue with `segmentation_mode=coarse`, which is the default in `default.yaml`. -2. Retry on a slice with `segmentation_mode=fine`: - -```bash -uv run nemotron steps run translate/nemo_curator -c default \ - segmentation_mode=fine \ - input_path=/path/to/sample.jsonl \ - output_dir=/path/to/out-fine \ - source_language=en \ - target_language=de \ - server.model=YOUR_LLM_MODEL_ID -``` - -3. Compare reconstruction fidelity against throughput cost. Fine mode increases segment counts. - -## Pair With `min_segment_chars` - -Raise `min_segment_chars` modestly to skip trivial whitespace-only fragments if fine mode becomes noisy. - -## Related Pages - -- Conceptual background: {doc}`../explanation/segmentation` -- YAML keys: {doc}`../reference/translate-config` diff --git a/docs/translation/index.md b/docs/translation/index.md deleted file mode 100644 index 90f3c9e75..000000000 --- a/docs/translation/index.md +++ /dev/null @@ -1,154 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Translate JSON Lines or Parquet corpora with nemotron steps run translate/nemo_curator, NeMo Curator backends, and optional FAITH scoring." -topics: ["Translation", "FAITH", "NeMo Curator"] -tags: ["Translation", "Documentation"] -content: - type: "Explanation" - difficulty: "Beginner" - audience: ["ML Engineer", "Data Scientist"] ---- - -(translation-index)= -# Translation With Nemotron - -The `nemotron steps run translate/nemo_curator` command translates selected fields in JSONL or Apache Parquet files. -You can use a large language model (LLM) with an OpenAI-compatible endpoint, a neural machine translation (NMT) HTTP server, Google Cloud Translation, or Amazon Translate. -Optionally, you can also run *FAITH* evaluation with an LLM after translation to score translation quality. - -:::{tip} -New here? Read {doc}`using-skills` if you plan to drive the work from a coding agent, then start {doc}`getting-started` and use this page as the map to deeper topics. -::: - -## When to Use - -Use `nemotron steps run translate/nemo_curator` when you need: - -- Localized training or synthetic corpora from translating natural-language fields while preserving structured payloads such as chat turns, tool payloads, and fenced code blocks. - Field paths, `output_mode`, and segmentation interact with that behavior; see {doc}`how-to/configure-fields-and-output` and {doc}`explanation/segmentation`. -- Optional FAITH evaluation with configurable thresholds and filtering, without a separate evaluation CLI. -- Repeatable configuration by using the checked-in `default.yaml` plus CLI overrides. - -## Pipeline Summary - -```{mermaid} -flowchart LR - A[Input JSONL or Parquet] --> B[Curator reader] - B --> C[TranslationStage] - C --> D[Curator writer] - D --> E[Output shards under output_dir] - C --> F{FAITH enabled?} - F -->|yes| G[LLM scores segments] - F -->|no| E - G --> E -``` - -## Documentation Series - -::::{grid} 1 2 2 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} {octicon}`book;1.5em;sd-mr-1` Tutorial -:link: getting-started -:link-type: doc -Run `nemotron steps run translate/nemo_curator` end-to-end using `default.yaml` and a sample chat JSONL file. -+++ -{bdg-secondary}`hands-on` -::: - -:::{grid-item-card} {octicon}`comment-discussion;1.5em;sd-mr-1` Use translation with an agent -:link: using-skills -:link-type: doc -Copy-paste session prompts for supervised fine-tuning (SFT) data or exploratory FAITH scoring, plus habits for a short chat. -+++ -{bdg-secondary}`newcomer` -::: - -:::{grid-item-card} {octicon}`tools;1.5em;sd-mr-1` How-to guides -:link: how-to/index -:link-type: doc -Backends, fields and outputs, segmentation, FAITH tuning. -+++ -{bdg-secondary}`task-based` -::: - -:::{grid-item-card} {octicon}`light-bulb;1.5em;sd-mr-1` Concepts -:link: explanation/index -:link-type: doc -Pipeline architecture, segmentation, FAITH behavior. -+++ -{bdg-secondary}`learn` -::: - -:::{grid-item-card} {octicon}`list-unordered;1.5em;sd-mr-1` Reference -:link: reference/index -:link-type: doc -YAML parameters and `nemotron steps run translate/nemo_curator` CLI. -+++ -{bdg-secondary}`lookup` -::: - -:::: - -## All Documentation - -````{tab-set} - -```{tab-item} Tutorial - -| Guide | What you do | -|-------|-------------| -| {doc}`using-skills` | Paste starter prompts for an agent and keep a translation session on the rails | -| {doc}`getting-started` | Run translation and FAITH using `default.yaml` and sample JSONL | - -``` - -```{tab-item} How-to guides - -| Guide | Focus | -|-------|-------| -| {doc}`how-to/run-llm-translation` | `backend: llm` | -| {doc}`how-to/run-nmt-translation` | `backend: nmt` | -| {doc}`how-to/run-google-aws-translation` | `backend: google` / `aws` | -| {doc}`how-to/configure-fields-and-output` | Field paths and `output_mode` | -| {doc}`how-to/use-fine-segmentation` | `segmentation_mode` | -| {doc}`how-to/run-faith-evaluation` | `faith_eval` block | - -``` - -```{tab-item} Concepts - -| Guide | Topic | -|-------|-------| -| {doc}`explanation/pipeline-overview` | End-to-end flow | -| {doc}`explanation/segmentation` | Coarse versus fine | -| {doc}`explanation/faith-evaluation` | FAITH semantics | - -``` - -```{tab-item} Reference - -| Guide | Content | -|-------|---------| -| {doc}`reference/translate-config` | `default.yaml` field reference | -| {doc}`reference/cli-translation` | `nemotron steps run translate/nemo_curator` syntax | -| {doc}`reference/io-format` | Input and output shapes | - -``` - -```` - -## Limitations and Considerations - -- Cost and rate limits: Hosted and cloud LLM backends incur usage; throttle with `max_concurrent_requests` and your providerтАЩs guidance. -- Remote execution: use `--run ` or `--batch ` with an environment profile such as `lepton_translate`. -- Overrides: Use `key=value` dotlist syntax after global flags, not passthrough script arguments. -- Mixed folders: Do not point `input_path` at one directory that contains both `.jsonl` and `.parquet` shards unless you split formats first. - -## Quick Paths - -1. Agent-first prompts: {doc}`using-skills` -2. First run: {doc}`getting-started` -3. Swap backend: {doc}`how-to/index` -4. Lookup flags: {doc}`reference/cli-translation` diff --git a/docs/translation/reference/cli-translation.md b/docs/translation/reference/cli-translation.md deleted file mode 100644 index 286d96173..000000000 --- a/docs/translation/reference/cli-translation.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "CLI reference for nemotron steps run translate/nemo_curator." -topics: ["Translation", "CLI"] -tags: ["Reference", "CLI"] -content: - type: "Reference" - difficulty: "Beginner" - audience: ["ML Engineer", "Data Scientist"] ---- - -# CLI Reference for Translation - -Syntax, global flags, and merge rules for `nemotron steps run translate/nemo_curator`. Pair this page with {doc}`translate-config` for YAML field meanings. - -## Synopsis - -```bash -uv run nemotron steps run translate/nemo_curator [GLOBAL OPTIONS] [-c CONFIG] [DOTLIST_OVERRIDES...] -``` - -## Global Options - -These flags mirror other Nemotron commands: - -| Flag | Purpose | -|------|---------| -| `-c NAME`, `--config NAME` | Select `NAME.yaml` inside `src/nemotron/steps/translate/nemo_curator/config/` or pass an explicit `*.yaml` path. | -| `-d`, `--dry-run` | Print the merged OmegaConf YAML without executing `TranslationStage`. | -| `-r`, `--run PROFILE` | Run attached through an environment profile such as `lepton_translate` or a Slurm profile. | -| `-b`, `--batch PROFILE` | Submit detached through an environment profile such as `lepton_translate` or a Slurm profile. | - -Invocation without `-c` loads `default` automatically through `parse_config`. - -For local Curator execution through `uv run`, set: - -```bash -export RAY_ENABLE_UV_RUN_RUNTIME_ENV=0 -``` - -This keeps Ray workers on the synchronized project environment instead of -letting Ray ask uv to create a separate worker environment. - -## Dotlist Overrides - -Anything after the global flags that matches `key=value` merges into the YAML dictionary loaded from `default.yaml`. Nested keys use dotted paths: - -```bash -uv run nemotron steps run translate/nemo_curator -c default \ - faith_eval.threshold=3.1 \ - server.model=YOUR_MODEL \ - input_path=/data/text.jsonl \ - output_dir=/data/translated \ - source_language=en \ - target_language=ar -``` - -## Restrictions Specific to Translation - -- Passthrough arguments are not supported. -- For remote execution, use a normal Nemotron env profile with `-r` or `-b`, such as `lepton_translate`. - -## Artifact Overrides - -The current translation step reads `input_path` directly from YAML and dotlist overrides. - -## Exit Codes - -| Code | Meaning | -|------|---------| -| `0` | Dry-run printed or translation finished successfully. | -| `1` | Validation failures such as missing languages, illegal backend configuration, unsupported CLI mode, or missing API keys. | - -## Related Pages - -- YAML keys: {doc}`translate-config` -- Tutorial invocation: {doc}`../getting-started` diff --git a/docs/translation/reference/index.md b/docs/translation/reference/index.md deleted file mode 100644 index 9c407fdfa..000000000 --- a/docs/translation/reference/index.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Reference index for nemotron steps run translate/nemo_curator YAML, CLI, and input and output shapes." -topics: ["Translation", "Reference"] -tags: ["Reference", "Translation"] -content: - type: "Reference" - difficulty: "Beginner" - audience: ["ML Engineer", "Data Scientist"] ---- - -# Reference for Translation - -Lookup pages for YAML keys, CLI flags, and file shapes. Prefer the tutorial and how-to guides for procedures; use this section when you need exact parameters or syntax. - -```{toctree} -:maxdepth: 1 -:hidden: - -translate-config -cli-translation -io-format -troubleshooting -``` - -Specifications for `nemotron steps run translate/nemo_curator`. - -::::{grid} 1 1 1 2 -:gutter: 1 1 1 2 - -:::{grid-item-card} {octicon}`gear;1.5em;sd-mr-1` Translation YAML -:link: translate-config -:link-type: doc -Anchored on `config/default.yaml` plus FAITH semantics. -+++ -{bdg-secondary}`yaml` -::: - -:::{grid-item-card} {octicon}`terminal;1.5em;sd-mr-1` CLI syntax -:link: cli-translation -:link-type: doc -Global recipe flags and translation-specific constraints. -+++ -{bdg-secondary}`cli` -::: - -:::{grid-item-card} {octicon}`file-code;1.5em;sd-mr-1` I/O format -:link: io-format -:link-type: doc -How `input_path` layouts map to `output_dir` shards. -+++ -{bdg-secondary}`jsonl` -::: - -:::: diff --git a/docs/translation/reference/io-format.md b/docs/translation/reference/io-format.md deleted file mode 100644 index 395afcbe6..000000000 --- a/docs/translation/reference/io-format.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Input and output expectations for nemotron steps run translate/nemo_curator." -topics: ["Translation", "Schema"] -tags: ["Reference", "JSONL"] -content: - type: "Reference" - difficulty: "Beginner" - audience: ["ML Engineer", "Data Scientist"] ---- - -# Input and Output Format - -Expectations for `input_path` layouts, shard layout under `output_dir`, `output_mode`, chat reconstruction, and FAITH columns. - -## Inputs - -Supported layouts include JSON Lines (JSONL), with one JSON object per line, or Apache Parquet columnar files. - -- JSONL records contain arbitrary JSON objects per line. The `text_field` setting selects which strings `TranslationStage` visits. Wildcards expand across arrays such as `messages` items. -- Parquet inputs share the same logical schema. The Curator `ParquetReader` partitions row groups according to `files_per_partition` and `blocksize` overrides. - -Avoid pointing `input_path` at directories that mix `.jsonl` and `.parquet` shards when `input_format=auto`. The reader raises an error instead of guessing. - -## Outputs - -The `JsonlWriter` and `ParquetWriter` emit multiple shards under `output_dir` because Curator pipelines partition work for parallelism. Downstream steps should treat `output_dir` as the artifact, not individual filenames. - -### `output_mode` - -| Mode | Producer behavior | -|------|-------------------| -| `replaced` | Source strings at `text_field` are overwritten with translations suitable for immediate training. | -| `raw` | Original strings remain. Translations and metadata appear in auxiliary columns defined by `TranslationStage`. | -| `both` | Emits replaced views and retains intermediate structures. This is the starter default for auditing. | - -### Chat Reconstruction - -When `reconstruct_messages=true`, expect parallel arrays such as `translated_messages` mirroring the `messages` layout but with translated `content` entries. This simplifies quality assurance review without sacrificing structured tool-call payloads. - -### FAITH Annotations - -When `faith_eval.enabled=true` and `merge_scores=true`, each record carries score blobs aligned with segment boundaries. When `filter_enabled=true`, low-trust rows disappear entirely from `output_dir` shards. - -## Sampling Outputs - -Use `find`, `head`, and `python3 -m json.tool` on any emitted shard to inspect one translated row: - -```bash -find ./output_dir -name '*.jsonl' | head -n 1 | xargs head -n 1 | python3 -m json.tool --no-ensure-ascii -``` - -## Related Pages - -- Field tuning guide: {doc}`../how-to/configure-fields-and-output` -- YAML defaults: {doc}`translate-config` diff --git a/docs/translation/reference/translate-config.md b/docs/translation/reference/translate-config.md deleted file mode 100644 index 77a348390..000000000 --- a/docs/translation/reference/translate-config.md +++ /dev/null @@ -1,102 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "YAML reference for translate/nemo_curator aligned with config/default.yaml." -topics: ["Translation", "Configuration"] -tags: ["Reference", "YAML"] -content: - type: "Reference" - difficulty: "Intermediate" - audience: ["ML Engineer", "Data Scientist"] ---- - -# Translation YAML Reference - -The `translate/nemo_curator` step ships `src/nemotron/steps/translate/nemo_curator/config/default.yaml` as the canonical starter profile. This page lists top-level keys you can override with `nemotron steps run translate/nemo_curator key=value` dotlists, grouped by concern, with the full baseline file inlined below. - -## Default Configuration File - -```{literalinclude} ../../../src/nemotron/steps/translate/nemo_curator/config/default.yaml -:language: yaml -:class: scrollable -``` - -## Keys Grouped by Concern - -### Paths and Formats - -| Key | Description | -|-----|-------------| -| `input_path` | File, glob, or homogeneous directory consumed by `JsonlReader` or `ParquetReader`. | -| `output_dir` | Directory passed to `JsonlWriter` or `ParquetWriter` in overwrite mode. | -| `input_format` | `auto`, `jsonl`, or `parquet`. | -| `output_format` | `jsonl` or `parquet`. | - -### Languages and Backend - -| Key | Description | -|-----|-------------| -| `source_language` / `target_language` | Required ISO 639-1 codes. Empty placeholders remind operators to set values explicitly. | -| `backend` | `llm`, `nmt`, `google`, or `aws`. | - -### Translation Semantics - -| Key | Description | -|-----|-------------| -| `text_field` | Dot or wildcard path describing strings to translate. The default is `messages.*.content`. | -| `output_field`, `translation_column` | Destination columns for translated text and downstream merges. | -| `output_mode` | `replaced`, `raw`, or `both`. | -| `merge_scores` | Attach FAITH outputs adjacent to translations when enabled. | -| `reconstruct_messages`, `messages_field`, `messages_content_field` | Chat reconstruction switches. | -| `segmentation_mode`, `min_segment_chars` | Segmenter behavior. Values include `coarse` and `fine`. | -| `max_concurrent_requests`, `skip_translated`, `files_per_partition`, `blocksize` | Throughput and partitioning controls surfaced to Curator readers and clients. | - -### LLM Fields - -Used whenever `backend=llm` or FAITH needs an OpenAI-compatible judge. - -| Key | Description | -|-----|-------------| -| `server.url` | Chat-completions compatible base URL. | -| `server.model` | Model identifier. Required for `llm` translation and for FAITH unless you override the scorer model. | -| `server.api_key_env` | Environment variable housing the API secret. The default is `NVIDIA_API_KEY`. | -| `server.api_key` | Inline secret. Discouraged for shared repositories. | - -### FAITH Evaluation - -| Key | Description | -|-----|-------------| -| `enabled` | Turns FAITH scoring on. The starter YAML sets this to `true`. | -| `threshold` | Minimum acceptable `faith_avg` on a one-to-five scale. The starter default `2.5` is a permissive noisy-data floor. See {doc}`../explanation/faith-evaluation` for the full rubric. | -| `model_name` | Optional scorer-only model. Defaults to `server.model`. | -| `filter_enabled` | Drop failing rows when `true`. | -| `max_concurrent_requests` | Optional scorer-side concurrency limit. | -| `generation_config` | Optional OpenAI-compatible generation settings for the scorer. | - -### Backend-Specific Blocks - -| Block | When needed | -|-------|-------------| -| `nmt` | HTTP microservice URL, batching, timeouts. | -| `google` | Project metadata and API version. Version `v3` requires `project_id`. | -| `aws` | Region plus concurrency limits. | - -## Overrides - -OmegaConf dotlists merge last: - -```bash -uv run nemotron steps run translate/nemo_curator -c default \ - backend=nmt \ - nmt.server_url=http://localhost:5000 \ - faith_eval.enabled=false \ - input_path=/data/chat.jsonl \ - output_dir=/data/out \ - source_language=en \ - target_language=hi -``` - -## Related Pages - -- CLI merge rules and flags: {doc}`cli-translation` -- Record shapes and writers: {doc}`io-format` diff --git a/docs/translation/reference/troubleshooting.md b/docs/translation/reference/troubleshooting.md deleted file mode 100644 index 93a2350f7..000000000 --- a/docs/translation/reference/troubleshooting.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Symptom-to-remedy tables for nemotron steps run translate/nemo_curator across the LLM, NMT, Google, and AWS backends." -topics: ["Translation", "Reference"] -tags: ["Reference", "Translation", "Troubleshooting"] -content: - type: "Reference" - difficulty: "Beginner" - audience: ["ML Engineer", "Data Scientist"] ---- - - - -# Troubleshooting - -This page lists common symptoms when you run `nemotron steps run translate/nemo_curator` and shows the field, flag, or environment variable to inspect first. -Each table pairs a symptom with a concrete remedy. -For stage flow and design rationale, see the explanation pages linked from {doc}`../explanation/index`. - -## Authentication and Credentials - -| Symptom | What to do | -| --- | --- | -| HTTP 401 or 403 from the chat-completions endpoint, or a Curator log line about a missing API key | Confirm the variable named in `server.api_key_env` is exported in the shell that launches the run. The starter `default.yaml` expects `NVIDIA_API_KEY`; export it with `export NVIDIA_API_KEY=""` and rerun. See {doc}`../how-to/run-llm-translation`. | -| FAITH scoring fails with a credentials error even though `backend` is `nmt`, `google`, or `aws` | FAITH always uses the large language model (LLM) client under `server`. Keep `server.api_key_env` populated whenever `faith_eval.enabled` is `true`, or set `faith_eval.enabled=false` for a diagnostic run. See {doc}`../how-to/run-faith-evaluation`. | -| Google backend rejects the request with a permission or project error | Confirm application default credentials are present in the environment that runs the step. Do not paste secrets into `default.yaml`. See {doc}`../how-to/run-google-aws-translation`. | - -## Model and Endpoint Configuration - -| Symptom | What to do | -| --- | --- | -| HTTP 404 or a "model not found" message from the LLM endpoint | Hosted catalogs retire identifiers frequently. List the models your tenant currently exposes and pin `server.model` to one of them before large batch jobs. See {doc}`../how-to/run-llm-translation`. | -| Google translation rejects the request because `project_id` is missing | API version `v3` requires project metadata. Set both `google.project_id` and `google.api_version=v3`, or downgrade `google.api_version` to a release that does not require the project. See {doc}`../how-to/run-google-aws-translation`. | -| NMT requests time out before the service responds | Raise `nmt.timeout` to match observed server latency, lower `nmt.batch_size` so each request returns sooner, and confirm `nmt.server_url` resolves from the host that runs the step. See {doc}`../how-to/run-nmt-translation`. | - -## Throttling and Concurrency - -| Symptom | What to do | -| --- | --- | -| HTTP 429 responses, bursty failures, or sustained slowdowns from a hosted LLM endpoint | Lower `max_concurrent_requests` in your YAML and rerun on a smaller slice of data. Confirm your tenant quota covers the planned batch size. See {doc}`translate-config`. | -| A self-hosted NMT service returns errors under load | Reduce `nmt.max_concurrent_requests` and `nmt.batch_size` together, then raise them only after the service reports healthy throughput. See {doc}`../how-to/run-nmt-translation`. | - -## Inputs and Output Layout - -| Symptom | What to do | -| --- | --- | -| Reader errors about mixed file types when `input_path` points at a directory containing both JSONL and Parquet files | Curator readers expect one record format per directory. Split the inputs into separate directories for JSON Lines (JSONL) and Parquet, or set `input_path` to a single file. See {doc}`io-format`. | -| Ray worker logs show `Creating virtual environment at: .venv` followed by `ModuleNotFoundError: No module named 'ray'` | Export `RAY_ENABLE_UV_RUN_RUNTIME_ENV=0` before running local `uv run --no-sync nemotron steps run translate/nemo_curator ...`. This keeps Ray workers in the synchronized Nemotron environment. | -| Empty JSONL input fails with `No data read from files in task file_group_0` | The reader found no records. Treat the run as an empty-input validation failure, confirm the input path is correct, and rerun with a non-empty file or directory. | -| Output shards do not appear under `output_dir` after the run reports success | The writer emits partitioned files, not a single merged file. Inspect the shard pattern under `output_dir` and confirm `output_format` matches what downstream consumers expect. See {doc}`io-format`. | - -## FAITH Evaluation - -| Symptom | What to do | -| --- | --- | -| Every translated row is dropped after FAITH runs | The `faith_eval.threshold` value may be too strict for the chosen scorer model. Lower the threshold, set `faith_eval.filter_enabled=false` while you tune, or override the scorer with `faith_eval.model_name`. See {doc}`../how-to/run-faith-evaluation`. | -| FAITH scores look inconsistent across runs of the same data | Pin both `server.model` and `faith_eval.model_name` to specific identifiers so scorer drift does not move the threshold under you. See {doc}`../explanation/faith-evaluation`. | - -## Related Reference - -- Translation YAML fields: {doc}`translate-config` -- CLI syntax: {doc}`cli-translation` -- Input and output shapes: {doc}`io-format` diff --git a/docs/translation/using-skills.md b/docs/translation/using-skills.md deleted file mode 100644 index f57817279..000000000 --- a/docs/translation/using-skills.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -license: Apache-2.0 -copyright: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -description: "Sample prompts and a short guide for productive agent-assisted sessions with nemotron steps run translate/nemo_curator." -topics: ["Translation", "FAITH", "NeMo Curator"] -tags: ["Translation", "Documentation"] -content: - type: "How-To" - difficulty: "Beginner" - audience: ["ML Engineer", "Data Scientist"] ---- - -(translation-using-skills)= -# Tips for Translation With Agents - -This page is for you if you want a productive session with a coding agent without a long back-and-forth. -The mechanics of the `nemotron steps run translate/nemo_curator` are shown in {doc}`getting-started` and the how-to guides. - -## Sample Prompts You Can Paste - -Paste one block as the first message in a new session. -Fill in bracketed parts or paths before you send. - -### Example: Small Bilingual for SFT and FAITH Filtering - -```text -I need help running nemotron steps run translate/nemo_curator for a multilingual supervised fine-tuning experiment. - -Context: -- Repo: Nemotron at the machine root where I run commands. -- Input: [SOURCE-JSONL] -- Target language: ISO 639-1 code [TARGET], for example hi or de. -- I want translated shards I can inspect before scaling up. - -Constraints: -- Use the checked-in config at src/nemotron/steps/translate/nemo_curator/config/default.yaml with -c default and CLI dotlist overrides only. -- Keep FAITH enabled with sensible training defaults from that tutorial unless you see a conflict; I want low-quality rows filtered, not every row kept. -- output_dir: [MY_OUTPUT_DIR] under the repo, for example ./output/translation-agent-1. - -Please: -- Give me the exact uv run nemotron steps run translate/nemo_curator command with input_path, output_dir, source_language=en, target_language=[TARGET], and server.model filled in. -- Point me to the next doc page if I need to change text_field, output_mode, or segmentation. -``` - -## Next Steps - -- First hands-on run: {doc}`getting-started` -- Field paths and `output_mode`: {doc}`how-to/configure-fields-and-output` -- FAITH tuning after exploration: {doc}`how-to/run-faith-evaluation` -- Full CLI: {doc}`reference/cli-translation` \ No newline at end of file diff --git a/docs/versions1.json b/docs/versions1.json deleted file mode 100644 index 446491702..000000000 --- a/docs/versions1.json +++ /dev/null @@ -1,12 +0,0 @@ -[ - { - "version": "nightly", - "url": "https://docs.nvidia.com/nemotron/nightly/" - }, - { - "name": "0.1.0 (latest)", - "version": "0.1.0", - "url": "https://docs.nvidia.com/nemotron/latest/", - "preferred": true - } -]
  • `rZB`@9{3x;|Symld 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 z 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

    pBI`P}@zm*u+;mhOrq)jQ4hTJ&t09V} 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
    cd%Sl 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

  • `rZB`@9{3x;|Symld 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 z z9Q!0eX*4~UEY}r;Rm&L*$lD@{ptf3YA`43801otyVSQ#TX5R}rR`OYQ9v*xm7hmJd z-X+ut9QYEYN&Ch8W3B{0V+e%g{UPj>uaL4Wan(_hH;|7{@O1((gzaRm1SLfBnZB-G zbJ__Y2z^@OM4p5YoCU+`-Hpqq8A^nS-q#0~6~+$6!$~EIOh%Inmn3-w`d_J9{Ajrz zpDCS2TXj}-H=UZto%Hu7C12)>nMrD@iK4_Hj~VT5C62Y4&O%waJy7-g9t(=0 zveVnWEkuYp`R?lR%&;&p-vwP;4a&)a9M699dErXhb$C1TLOY1NeG))3H?p5!85Ur%O&!8t$43{{%G8$4ZjKDTa zxP^rLLR#Wb7`3LrO-?>~=zxk$I9pGRNQ;GbF<5e4lsk5CEdNH!GG2P~G=I7@s}2?r zAZ%=Pn#5o*mD6%}X|ZDWq@~3&j~gIl&tOH3j4iX>ZprT^Ob0YU|D^wi6er7mOSt4kNLANITyP#;qa`wB+hIkGY{hJniP(oF{*QSI> z7T-Oo%&2gFZPcA@gBZ8%s+CQz;nC=DI1AdPfT6` zo$UC^IK7wJQ&&-s>Tv2sPJB7gCz>daju*F8E~&JM#k2Ko}Q6Oxdimq&=L2e8#%@gIh)e zs4`rh*JzwY2GNiw!>KWR#yRc){D$M~u9+fP7@*(|npyApD|8>%je%5_;0)QIT@X*}+MV!sX)U3gDi@X@3`?r3>6|CQ40 zeb*#&5>pg-`3@qT>&jSrs!B+nY8niA6h8=^?Va$TI2QDuT6%_Fy8ha4v-2tufIq7) z%5h3Is9)(PE(s^01{1C;{198{mubH!2X!tce;~05k}9e`Vi?!75`zhtb>2*Pzt8*- z%{+X2LD=lW(D9#d9vR%!)cyyL?-%}Uun(Yx`x#e2Rt6%r2_e$&-@8T5SJKS6EAd)H z;0~>cJV408AX)CcvBjU1sgIy;?fU)GA-RM}rGywKgymMyx<8x8@BvYIcCH2pSkGUT z@*5j5K{h*m-2re6;T9{Pp^!@$01w#Na$XL7-6yg>Bz>fPJX|$sY4|jNv5S@@@Y*y& zv(&BtXv`LkLR`sge=Xoo2qHiG|?s5*~joIX?^>9BS3JN_+UZ*$iO3I%42sw zn?g$GOZe?1813w9qWKujFGCU({+Yz-gPEn@vhI7k)v{oR0gbKLjVr~97emj1+??2< z9mpjlB+P3ygfGIZ+n85O1?k!!^;_~a!*SpLHo(}*U~CX8%zkUN7~Oc43Q@LY9pl$& z64eKeegFMk=m#<7QXH+74VWHG9wnvnQuDFpnOSbKKXooF8Xs-tPCRKQbwU}T@f;?H z!}p&G3S*+5dOBbXHJKNn9X|yOW4$(6!?>XmeJOxk2^}^-Ad8l?(Qx;glX6H2vDZ(X zzp=nB*#pAniAyce2~%PQ!;4YmC*LYa%rp^yCPR{ykrn|aR7lJY{5GYWjR7I{^O3(P zvdTVi8*1_0ke8>&RZ#{t|aHL0#hd? zG2%9=F|N#B_#absJ1|o@mk_j)Bvsa zN??9dbyu_R3w&7vbDaHRW4nJnW1CjC zDOlD6?60p=R7{L72>!#$cv(G|Y;$-1wN%|V3a{j4y*=e{Fwih7f&}xeKL>j5oUPH3 z9&%^ZOUrCHXY*Rb+S2^=c0L_FT=?)&Y#pgp=DNx325J`rZ(!r11seL>S&eBUBZu9~ z)XIE>hTscDD##JaZh(c^$&G&O?4|6#U;?0qXl1vm;lMM|#!TKEPiBH%(6ooQYT84W z0s>%H8mw8dCt*>@H+u-)>C4;h)ww{@N}#?UI*aA9|JBYwhHF$FB z@pgf8(E#co_FqlbTds7E)PgkVH?u=&yO&HdEV=fEKL=G7dW_Z z@CJ|+Xi!Vp(U*>wwF{d8Jm(~4?RY}Q<6u)v;*K5A2mkIc{%03^O>ZQBB*bW3mS0I~ z-~die&eNy*?CkEZ*|m{J*~u4FW{eV_@Rdo)9x} zJ9+lHXnO!2ebI(HM!fo8zx!|Kza$0t25gi-eul3^1tf*wn>NvX)S=!@{kyD6#FYjE z-?(lk1&uibD*et$)BA{&~;-`&M0~OVU{#*o#m;kf^k+*zP_zyM4_A%^}l2 zJLRMNr!$63@-l$Vqs!$>;=O`)w~oseqyYoSLBgUo+iukf#Bf&=OEUs;rFuu-Am-tthfg_ujDh3nKXbPWMyKr=p>Or=+Be_Mc35 zmjMwO@D=i<_{GJ8)w+khTRA^d5p4bUMV6SKWd&9)hbpWW{OkqZ_=?*LpFBX%z-J-Y zi6lj%muHg2smvQ26O+j-uqMjcM;SR-{6F03?~j=k0v!#Y%VQ2EjHz5+m!gdg8c9mz zzpGbWWt$U(tkzPE>>_;U^U1 z@@q>VudT1u<@s;d$05L;`SL-c>}jyKo+(v`my)%;0(}E>e1xVE8YEo={~rHHkR2xc z=_=oZh0t5T{~i$EXBp`dIJsPPMM(rfMMX85PN4WC+5OK-_6lSI$Ah-VWYL?EsMn6= z_Wvwdl}_`F|MN!x8rZp?nnK;d$`#CPAZWSkh<0{*UMaj*VLt(Ee&1;&@JhfAN6o1LIM)! z01&@FLO_5B{wRc3NccWX{=WymLQib7Z8139Za#kvMjvbO)n`*P*pmmI$d=yfa*sLi z%G{I|qsVCqM>Z*4k!DBR>(^$(pC$ItD0kqfo0K+Z@95WQsJK^Mi!LnvikOQ=C$p*H zABUUfKtzPSvlrADX!>>321-WqGP=lPHd3}(kS5!)BKbgf@ueo21q2fAx9pysLzu0i zI#UHw2yqG3`oci1^yTTC>V_o2n8~MTTL_?(bE0cDIQQzb=az_53Nx9d>U}| z&+gudfR2Nk;9Nb^@klc3mg&mE?+ecv61i}y_Z>|^W-X;59ZGLfHo#LU>DE*v(zCq? zct;6Iuq1nvoMr!0oI2;L^(+LJ1^LLfZ^n*$96{7cSZ`){AD`OhTaj+wJ) z4*gx_H6X#VGg@y3S=lcusB(}Uc;hpJnkE`0BwLY_dnW`>EAZq(i6MgKi5(LV)rk*H zQ$8`886Tj|h`r8QVZp`{MZe~F|0yB#Oh~3WDUh>8%>{GYV{;Xji0^NT3yc3%Eb1+6 zeuvT&?U1h>i+)U#Ax>OTJe-e&5Uo0&yEDwTB9oh1z06S}c2sgFKQ_7sh%d%|_jl1U zJB44V6&jT&p1#V*wdo4zq4$_f!{mEUR&C_Io{BJ{BDGLNWGT)I@r?WBF&JpCDl`=T z*wrJoFg?f@*e*xkWn*YQVV@xB5O9;hqREihTJ+IVCoG{m< z(PIu!EO1JqN#9LMvC$T$7Tax}p;Dur71bcsjEJzEYH@eIJz9=82}g#6$-`!@h8i|q zxEFBek15;vQ!1j1-^H=Bb1VjD!j;8-&rcw14i#jE*JqB-wj+x6 z%3_y_eS&;X0Vg)RyY!<3H`xD2=ke1q+m-vLhc;_< z2%!);c`5kA&w_j?LcfIe1$L!@EzJU2J;&-Zi@ihnSnQO4YBm*JgUd7EiG#w7`~eNb zKneT3Tm)2G1;bi=sx5!o;#{yH3wr5rDBtKlBlup6h1!u?F*`AySmV7YtlF|^rBN;_ zIlr?O?4+RT#Tz|JhPh1h5ZhHo4QcqSk{LsWq(yEcN5|%*@_}R$1L13f7 zU}Vv30QFR|CN$MIbGg@}pPey!YYfB;Z>Rk?OBFFrJfN^9lPB0TdF37WIy%yowqwC;F)n z^(+qydrkvgXGb!z5c?3Sm=0q~yV343{{1FUIQK93KFXoLRmf|X6;_Bj_r*;^xh$pW zYO!3*bPKvdMI`=B>U}>2^|RREn`#<)4UWe9ne+f$E^MiR`XbZv4cVLyJrA2@*lGDx znyD+zb`-J3Qr48xjisbBpLF7TDY7baAx0KTyYi(uZEq3N9&FmS;^H72M#uRp@Ym?A zUSV?c&8@VB(l_yQ1o>zpyGWhFWT_;WIptDuA1kDl7`Ul18d3hC+8XyZP0#00gN#BRF4W=Gb_8C6 zOV@r2CLxKUrfpb@tkvw;2}&TtcXti(S9DFAx)%BtU4}5CxnlMWzo8wF$Djw>yBBbd ziCLroeC4`}Ju*`v0LdNAKzoq##s4r3mcQdgmU8v)AzV+t-VPQYE=NfSj}4(O16H?i zSq!KOk*f9A#Mp(drQ*i$;#T**^*4DY?wi|PEwcb~CW2DTVb;UqZ%e%BfMDkq0g<)|6*X#k5iv(FnUqp1Xqmz8^Qtmg4D0Bqa zuacdPTnj-RsdT)TO797)+rtDuYww4VB)4-m!SNq=y4(&zqym%~)d)QAI$ZCwCxb&n z-AgC~ncfrHb`Dv}{hfh#KPSUqZi3lCk16ta*W3 zHNTr1=8}@IQ-TNEnk8|&e>NV|_9uFC->%7Mg}kDqB(1qxY(F4;zioJ7Fj?2XJzs-1 z=npqc2DCQlqMdsmntjFL_@wi6Z5bFf%pY-f9&92GA&XuYs4trKF&qN%y1(Gvukhi8 zr1o(^?GOj({7n&ZM2k1p5FUCESwFSneAXR0L6=!kVy@|a=9-km_63vx-(G6?Y-j6p z-AsG@(5gjO(RSsrYJU33X`(_5DJy??3;2K!NH`^jK_dPxZ7YnW##<5cxXaf(a?tQ! zVn3<+7wb?Re0KW>-{~wOL{u4_X5@sAOeLuc26>YXJ>8#gH|0N zxM;!vwZOsJANz1Fiy}8f;7#30Ny#%SD^cmVSW!AY-aH@I*Wn*;biBgX*P3y@`{%(& zWS;E!&9yZ@nwxV#HpASPFs=9dMZQ8qy3T!{+7qP7hqt0eJ%tYYJ5|2?bg(m*n20sA z5=xgA^7-vq!7tSiFqf$1hNWDw7PO$_25m49)*m+%TR3XOO>CuXIa=HUwruRsj%rkY zz8i4eD7fcvz&_32w~Qz=qo??GC$3O+=%&S<7vO7JC=^54xMoiYB2xWZOiBCj?T*c& zmOZhklY%jJ{hJA9Rw2>%=&!)QM(<;obI~kt8;>wcckfuhmkO>M;Aj*-&ss|<$47&i zLne2;-faNf*CKH$I`A_d7nu(e*1nx7tPoL`fmbtDGkB=#NTss<$!`=-_^mFH`9*+N z-sVA;361?EdLm1x{3QPpvozQ)x` zr-G0R;AO>z+?rqo)z#QWO1BA8$l5XmO7W+W`wa;Smt~yyn+@KNI2>|<7MjS(aAX48 zh6%V8MrO5f@Efm`0Ge@9Bv~o)`d&aXc@Y*2oJA}y|A2Q z2TPKp@}n?WK}|+sAjRq(F&IvVndmGT>m;^yFnVIb>k2N_^PY72k8XzV%aoR`nc4dw zrjUdM1U|W4JF${$Hfmt2Z~+E7`u3XhM%QkQD2UayDmAnA>vXjZ=Vn7~td!BGj&v+8 z2VLH{0*#bmKf@y8EovqmZXzROgpM6SqrrM0jCJ3xoSN**UbGVBf`P>j-I zojV3?qb_50&59@wX(3U9xP(;iV=zk8TsyV4m)W-nT-qMli+7Ut$E6I=d;9^(TsUE{ zac;0!e@FO!nId`_Pxtnv<7tn#(tUwvUMYkG^5v?9m*;mhNzhht37u}*Y$gs^`Fo`g zJr*lB+>J*X++9_O&*}-t;->8}3f3XcQ*AZqQ=n<-~nnh!714iJv_eO;K%|-5bhM zB?PH&Ku@O?q@?PSDEvm%&Ojx|6cm@;4ppH*DvMlJ(wZJKRxx_hrF5ea7W&)y03=34 zo>K)LkHcCXh~4#le_Ty^ESt)ZCuB3-kvO)$r?kG53U{JijKuv(=^&>%`%8;6F2D9V z!;}nl9Ff&AKXU{DUGF+~5Iq0cN(1#u9#rBHNFS(3u}zD^Q9#6vs@`fvh*&ECgj@Zj zekMn!QH#KDYaynlNE`Rz$kBLccX{Te(?i4~*>f5emY1hY_k5?pWwXNsv6fkCWhJ54 zV3W&Jc+0~lSv;PiT#i%4YSff}hP09Hq_AG}=a0ERt@JcixZCU=A{juEh>AS_l5@6! z7ux&j@F>JgN>d!hS!%1(I5=5f4hZG?sQwUPNnprjF8=0y_+OL@5BZ&evRrss-#%o$xp^PWfqc7-qR}~qbx7NAX_ah@8 zn_;qL!j1i&gGw}sZYx!+=~X-o6;c01lcl`Utqpcc^x1QJh+>kVgh>`{&!p*k8o9N> zA^xaR$_L&IF4%(jZXj+!1|}CZaPgM~vtooivkiYS z_JgsdJW#KB&L8D9;(vJbUjU4Syt&=#AJD-j2F8@{mzUM=@|;Udj#m4aIu=W(ntoDo z0kq_dKM_-Ab~szH^#uJtW4*7hL+D@1AZJ_g3=XKpe5s;k$~NH%p6FrY#bV7TC!pd> z@`p^>>!K_cthT1;es zHuT?)*oN<8VvsA1d!SldOevvmo4CN3Qy8zCL~`ntQZv;0o`4)GVw-L`q~_+b)7aAm zUNM&&v3E3+W zJ5$aUMHtKAj${v}T=|ue77n{Zk?H(U&H*5;ZOlwk-}3-*y;tJwz2m&}{~&6l7*ABJ zA;cpl={ab*c}^>aj$G82uMXuGwPaOO4R4x*474i#w+m>0cL8m>EEBKdvn3?OlyjCa zVWv+NkvfgTpVcz=a$7bBwn(9UIUeyt`Nw5AFy8b%O$?nXnm_wK+}bNe>Y?uBH*awaG)&(8RN0PjE$ zzf#jkxL8U=w7Lu{SFOjkox9MnQ%9^`x09Y}`T8S~95Z$p<}Y4Gv)7fl>XNC*$xdf` zrkIh~or~xThc1G!Y2yx)r#&^knVIe7KK5Nu)oORX^EL!*;Hmu)6xi_+|L=w((P+U-g z7oVGrC5u+#n(ME@`~|BicRBmN6{W0t$?{DYFmNe$?b?sO-tz=Ez?cmzBGjgEjPp^Xl)Z@?qq5%37qAAu8x z&~**o>tAnE<{UYC5PH*8b^ET}nDh2xT*swK#0QNsOoDJ<6k_gt5u7-T88a6D`<2@{ zuk*M`5D7|4O{GWHGDC{Ogv0O-i$`2#I*DXFI?>Z?mz)ZG^oA=9@p_a_d@ej^1g^O3 zLQ_mcw6wGsE0(W8PcD7(#V>sn-Mi)*VkPb6%GLXE=NG<(<;zxK%hsL99y^qhS%M?y zLgpXqh&~Hdab=kK=3GNQhYTM~Q`-zwI0rv2Hw$HxfDahd2dN~ZYu9W+L17U(WM{Gs z8&t29pxd`^Ls5PKCS5Rzo@zOtl^V-lJ-gxq7fqoPqWds+?jkH$w46)FTum)*5{Y{u zmMmO{mCH9^`|kTWoi%}^m*laez?dFC@ze|0xqUsp@|BO{CwG4aWo0xMW;@mKmFU!| zGbI#bW)B(1B}0w3Tcs(J@ULe3#+xpWjVD}_Vr4$LztPAAOE)x4bu_T7h-dgh49ep7 zJpvv9kAO#@DG~4_v?1gp7yPx*Zg{ah0xcH-In1fy@w2W0_?hXZox^H)4hdN@ zuKUo%c<;S+_{%-d;i`*9Aw4UXT0rW|_&lj5fuma@Jo}&J=+Xn2dd@^lo-~r&fF`s` z=Ra;}ic3$eE|4ghbv&z6s6EZ#K9>*CavN1iG&)VdK^uTz>fl)@g4wz4KD$_{vNq(iS&?vL&RH zVe&bnSnohQH|tH@a_f1>${Iw|;dIV}rF} z^jOYuZol;!eDvmNSg~vwKJ}Hmv10u;94$SLV%P+%>*JokI%x94rpN3?b#wH|? z5a~yaUP1!bq!bY}mQ& z-1W=