Generated banner for Nemotron Asr Finetune
Generated logo for Nemotron Asr Finetune

Nemotron Asr Finetune

NVIDIAOfficialCreated by Nemotron Speech TeamDistributed by NVIDIA

  • Skill
  • Workflow
  • Data and AI
  • Apache-2.0
  • Medium risk
  • Has scripts

From the author

Orchestration skill for NVIDIA Nemotron Speech (Riva) / NeMo ASR domain and language adaptation. Given a goal like "improve/fine-tune ASR for my domain or language", it scopes the task, picks the cheapest sufficient path (word boosting → n-gram LM → fine-tuning), delegates each stage to the right sub-skill (data generation, training, evaluation, deployment), and answers cost/time/data questions along the way.
— the description by Nemotron Speech Team

AutoGineer summary

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

This skill acts as an intelligent orchestrator for adapting NVIDIA Nemotron Speech (Riva) ASR models to specific domains or languages. Rather than jumping straight to training, it guides users through a cost-effective ladder of customization techniques, starting with word boosting and n-gram language models before escalating to full acoustic fine-tuning. It manages the end-to-end lifecycle by scoping requirements, delegating tasks to specialized sub-skills for data generation, training, evaluation, and deployment, and providing data-driven estimates for time, cost, and hardware requirements.

What it does

  • Scopes ASR customization goals based on domain, language, and performance targets.
  • Identifies the cheapest sufficient path for improvement, from word boosting to full fine-tuning.
  • Delegates execution to specialized sub-skills for data, training, evaluation, and deployment.
  • Performs pre-flight checks for dataset quality and environment compatibility.
  • Provides estimates for data volume, GPU requirements, and expected costs.
  • Maintains a structured workflow to ensure efficient, measurable model adaptation.

When to use it

  • When you need to improve ASR accuracy for a specific industry domain or jargon.
  • When you need to adapt an ASR model to a new language.
  • When you want to reduce Word Error Rate (WER) in noisy environments like call centers.
  • When you need to plan a cost-effective ASR customization strategy.
  • When you are unsure whether to use word boosting, language models, or full fine-tuning.

Advantages

  • Prevents unnecessary, expensive training by prioritizing cheaper, effective methods first.
  • Ensures a structured, repeatable approach to model adaptation.
  • Provides clear guidance on hardware selection and data requirements.
  • Reduces risk of catastrophic forgetting by enforcing data volume and mixing best practices.
  • Centralizes planning while leveraging specialized sub-skills for execution.

Usage examples

“I need to improve ASR accuracy for my medical domain, it gets jargon wrong.”
The agent will scope the jargon issues, suggest a word-boosting pilot to test offline, and outline the data requirements for potential fine-tuning if boosting is insufficient.
“How much data do I need to fine-tune an ASR model for a new language?”
The agent will explain the requirements for cross-language transfer versus training from scratch, emphasizing the need for real audio and providing a data-volume estimate.
“What is the cheapest way to improve my ASR model's performance?”
The agent will initiate a diagnostic process to measure the baseline WER and recommend the lowest-cost rung on the customization ladder, such as word boosting or n-gram LM.

Install

  1. Download the skill as a ZIP:

    https://autogineer.com/agent-skills/nvidia/nemotron-asr-finetune/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip nemotron-asr-finetune.zip -d .agents/skills

Documentation by Nemotron Speech Team

Nemotron Speech ASR Customization — Orchestration Skill

Note: "Nemotron Speech" is the public-facing name for what NVIDIA documents today as Riva / Riva NIM; the acoustic models are trained and fine-tuned with NVIDIA NeMo. Commands, config paths, imports, and doc URLs still use "Riva" / "NeMo" — the rename is brand-only. Do not rename them.

What This Skill Is

This is a high-level orchestration skill, not a step-by-step training manual. Its job, given a goal such as "I want to fine-tune ASR for my domain/language", is to:

  1. Scope the problem (how much real audio, target eval set, latency/hardware budget, language/domain).

  2. Choose the cheapest sufficient path — word boosting, n-gram LM fusion, or fine-tuning — and escalate only when quality falls short.

  3. Delegate each stage to the right sub-skill (data generation, training, evaluation, deployment/optimization).

  4. Answer cost/time/data questions along the way (how many hours to hit X% WER, synthetic vs real, L40S vs H100, expected cost).

It owns the plan and the routing; the sub-skills own the execution. When a needed sub-skill does not exist yet, this skill names it as a placeholder and gives interim guidance.

When to Use

Use for any request to make a Nemotron Speech / Riva ASR model work better on a specific domain or language — improving accuracy, reducing WER, adding a language, or planning a fine-tune. Start here even when the user names a specific technique: treat it as a candidate until the orchestration step confirms it is the cheapest sufficient path, then sequence the right sub-skills.

Orchestration Workflow

Run the loop below; each stage names the sub-skill it invokes. Full detail in references/workflow.md.

#StageWhat happensSub-skill
1State the goalCapture the target: domain/language, the errors, the metric.Orchestration (this skill)
2Clarify & scopeAsk the discovery questions: how much real audio? target eval set? latency/HW budget? deployment target?Orchestration
3Choose the pathPick the cheapest sufficient rung (boosting → n-gram LM → fine-tune). Escalate only if quality is short; experiment while proposing the full plan.Orchestration → Research/Training
4Get the data rightIf data is scarce/noisy: synthetic (TTS), TTS-friendly formatting, noise profiling/harvest, blend, score vendor samples; align customer data to training format; flag missing real data.SDG / Data
5TrainApply the recipe (configs, hyperparameters, replay/curriculum, GPU/OOM preflight) and run.Research / Training
6EvaluateNormalized WER on the domain set + A/B forgetting check on a general set; error-driven analysis to find the next lever.Evaluation
7Loop or shipIf short of target, loop to 4/5 with targeted data; else select/average checkpoints. Consult the user before more cycles.Orchestration
8DeployExport to NIM/HF, hot-swap the checkpoint, serve.Deployment / Optimization

Stages 4–8 are the fine-tune path (data → NeMo train → NeMo eval → Riva deploy). Cheaper rungs (boosting, custom vocab, n-gram LM) take a shorter branch owned by a single sub-skill — don't force them through the full loop. See the branch-by-rung table in references/workflow.md (§3b).

Before training (Stage 5), run the pre-flight dataset quality check (§4a): verify/convert audio to 16 kHz, and, on user request, audit transcript quality by running a reference pretrained model and checking WER against the provided ground truth. See references/workflow.md §4a.

Also before training (Stage 5), run the pre-flight environment/dependency check (§4b): if no NeMo is provided, pull the latest main (local execution) or the latest published container tag (container execution). If a NeMo checkout/install is already provided, check its version, but still recommend switching to latest main (staleness risk) and ask the user — if they insist on the provided one, proceed with it and only revisit once a concrete version issue (e.g. unsupported functionality) is actually hit. See references/workflow.md §4b.

Throughout, answer the "along the way" questions (data volume, synthetic vs real, hours to reach a WER target, cost, GPU choice) — see references/planning-answers.md.

Sub-Skills This Skill Calls

Detailed registry, invocation, and handoff contracts in references/sub-skills.md.

Role (per the architecture)PurposeSub-skill to invoke
Research / TrainingNeMo configs, recipes, fine-tuning, checkpoint averaging; also owns the NeMo-side word-boosting and n-gram LM pilotsnemo-speech-asr-finetune
SDG / Data DesignerSynthetic transcripts/text, noise profiling, vendor-data impact, blendsdata-designer (synthetic text; audio via TTS in nemotron-speech); placeholder: asr-data-profiling
EvaluationNormalized WER, A/B forgetting, error analysisOffline file WER → nemo-speech-asr-finetune; served-endpoint WER → nemotron-speech
Deployment / OptimizationNIM/Riva export, checkpoint swap, NIM-build optimization, servingnemotron-speech

If a sub-skill is unavailable, say so, give the interim guidance from the reference, and continue the plan.

Choosing The Path (cheapest first)

The scoping in Stage 3 selects the lowest-cost rung that can meet the target. Summary; full docs-grounded ladder in references/path-selection.md.

  • Word boosting — a bounded set of known words/names/jargon. Two realizations that are different artifacts: pilot (NeMo) to prove lift offline via GPU-PB context biasing (nemo-speech-asr-finetune), or deploy (Riva) to ship it via runtime boosted_lm_score (nemotron-speech) — different score systems, don't reuse one for the other. Runtime, no training either way. See references/path-selection.md.

  • Custom vocabulary / pronunciation — OOV or consistently mispronounced terms. Deploy-time. → Deployment sub-skill.

  • N-gram (KenLM) LM — domain phrasing/word-sequences when you have text but little audio. Two realizations, built the same way but deployed differently by architecture: pilot (NeMo, NGPU-LM) to prove lift offline (nemo-speech-asr-finetune), or deploy (Riva) to ship it (nemotron-speech). For CTC, rebuild the pilot corpus into a Riva word-level LM — don't ship the pilot artifact as-is. For RNN-T/TDT, the opposite: hand the pilot's .nemo artifact to Riva unchanged, no rebuild. See references/path-selection.md.

  • Fine-tune — real acoustic gaps (accents, noise, channel) with enough transcribed audio (NIM guide: 100+ h; ~10 h floor only if mixed to avoid catastrophic forgetting). Below ~10 h, do not recommend fine-tuning — recommend word boosting instead (severe catastrophic-forgetting/overfitting risk). → Research/Training.

  • Train from scratch / cross-language transfer — a new language with no suitable checkpoint (last resort). → Research/Training.

Ordering and per-model support follow the NVIDIA Speech NIM ASR customization guide: https://docs.nvidia.com/nim/speech/latest/asr/customization/customization.html.

Key Principles

  • Scope before you pick. Don't recommend fine-tuning before the discovery questions and a measured baseline.

  • Cheapest sufficient path. Escalate rungs only when the current one provably can't hit the target; you may experiment on a cheap rung while presenting the full fine-tuning plan.

  • Measure with a contract. Report normalized WER on the domain set plus an A/B forgetting check on a general set — never in-training logs alone.

  • Verify before you train. Run the pre-flight dataset quality check before Stage 5: verify/convert audio to 16 kHz, and, when the user asks, audit ground-truth transcripts by comparing them to a reference model's WER. Don't train on an unresampled or unaudited-on-request dataset. See references/workflow.md §4a.

  • Know your environment before you train. If no NeMo is provided, pull the latest main (or latest published container tag). If one is provided, check its version but still recommend latest main and ask the user first — a provided checkout always carries staleness risk. If they insist on keeping it, don't pull preemptively; only revisit once a concrete version issue (e.g. unsupported functionality) is actually hit. Record what was resolved in the ledger. See references/workflow.md §4b.

  • Delegate, don't reimplement. Route execution to the sub-skills; keep this skill focused on the plan, sequencing, and cost/time/data answers.

  • Real target-domain audio is the usual bottleneck. Prefer real data; use synthetic to fill measured gaps, kept separately weighted so it can be ablated.

  • Consult the user before extra tuning cycles, and when a needed sub-skill is a placeholder.

Source of Truth

TopicLocation
NIM Speech docs homehttps://docs.nvidia.com/nim/speech/latest/index.html
ASR customization guide (methods, per-model support)https://docs.nvidia.com/nim/speech/latest/asr/customization/customization.html
ASR support matrix (models & features)https://docs.nvidia.com/nim/speech/latest/reference/support-matrix/asr.html
NeMo fine-tuning (flags/config)docs/source/asr/fine_tuning.rst, and the nemo-speech-asr-finetune sub-skill
Riva ASR tutorials (boosting, LM, fine-tune)https://github.com/nvidia-riva/tutorials
Tokenizer extension to new language + acoustic fine-tunehttps://github.com/nvidia-riva/tutorials/blob/main/asr-extend-tokenizer-to-newlang-ft-acoustic-model.ipynb

Limitations

  • Orchestration only — execution happens in the sub-skills. Where a sub-skill is a placeholder, guidance is interim until it exists.

  • GPU required for the training rungs; deployment/serving is owned by the nemotron-speech sub-skill.

  • Model names, config paths, flags, and per-model feature support drift across NeMo/Riva releases — verify against the support matrix and the current checkout.

  • Public branding is "Nemotron Speech"; commands, imports, config paths, and doc URLs still use "Riva" / "NeMo" — do not rename.

Files

references/workflow.md

Orchestration Workflow

The end-to-end loop for "improve/fine-tune ASR for my domain/language." Each stage says who runs it and which sub-skill it invokes. Announce each step to the user (Step N/8 — Title). Sub-skill details are in sub-skills.md; path choice is in path-selection.md; cost/data answers are in planning-answers.md.

1. State the goal — Orchestration

Capture, in the user's words: the domain or target language, concrete examples of what's wrong (e.g. "German medical jargon wrong", "add Farsi", "noisy call-center audio, improve WER"), and the metric that defines success.

2. Clarify & scope — Orchestration

Ask the discovery questions before recommending anything:

  • Data: how many hours of real, transcribed target-domain audio exist? Is there domain text (for an LM)? Any vendor/customer data, and in what format?

  • Target: what eval set and WER target define "done"? Is there a general set to guard against regressions?

  • Constraints: latency (streaming vs offline), hardware/serving budget, deployment target (NIM/HF), timeline.

  • Model: current model/language, and whether it must stay the same for deployment.

Record answers; they drive both the path choice and the cost/time/data answers.

3. Choose the path — Orchestration → Research/Training

Pick the cheapest sufficient rung from path-selection.md: word boosting → custom vocab/pronunciation / n-gram LM → fine-tune → (last resort) train from scratch. Escalate the tuning method only if quality is short of target. You may run a cheap-rung experiment now while presenting the full fine-tuning plan so the user sees the trade-off. State which sub-skills the chosen path will use.

Hard guardrail on the Stage 2 data answer: if real transcribed target-domain audio is below ~10 hours, do not present fine-tuning as the plan — the catastrophic-forgetting and overfitting risk is severe at that volume (see path-selection.md). Recommend word boosting instead. Only revisit fine-tuning once more real data is available, or if the user explicitly accepts the risk after being told it.

3b. Branch by rung — Orchestration

Stages 4–8 below are the fine-tune–shaped loop (data → NeMo train → NeMo eval → Riva deploy). Do not force a cheaper rung through it — each rung has its own shorter shape, owned end-to-end by one sub-skill. Pick the branch, then announce steps for that branch (the "Step N/8" count only applies to the full fine-tune path):

Chosen rungFlowOwner(s)Eval surface
Word boosting — pilot (NeMo)GPU-PB boosting_tree decode-time eval; no deploynemo-speech-asr-finetuneoffline file WER
Word boosting — deploy (Riva)runtime word list → serve (no build)nemotron-speechserved-endpoint WER
Custom vocab / pronunciationriva-build vocab/lexicon → servenemotron-speechserved-endpoint WER
N-gram LM — pilot (NeMo)build KenLM → NGPU-LM shallow-fusion eval; no deploynemo-speech-asr-finetuneoffline file WER
N-gram LM — deploy (Riva)CTC: rebuild word-level LM → serve. RNNT: reuse pilot .nemo directly → serve (exact flags in pipelines.md)nemotron-speechserved-endpoint WER
Fine-tune / from-scratchfull Stages 4–8Data → nemo-speech-asr-finetune → nemotron-speechoffline WER (train) and served WER (post-deploy)

Key consequences: neither word boosting nor the n-gram LM follows train(NeMo) → eval(NeMo) → deploy(Riva) — each has pilot and deploy realizations, and whether the pilot artifact carries into Riva unchanged is not a blanket rule (see path-selection.md): word boosting never carries over (different score systems entirely); the n-gram LM depends on architecture — CTC needs a rebuild, RNNT reuses the pilot .nemo verbatim. A customer working a NeMo pilot only never needs to touch Riva — it is a complete, self-contained loop. If the user wants to ship, route straight to nemotron-speech and build (or reuse, for RNNT LM) the Riva-side artifact there, optionally after a NeMo pilot. Anything served is evaluated on the running NIM (served-endpoint WER, owned by nemotron-speech), not via the offline NeMo eval.

4. Get the data right — SDG / Data

Only when the path needs training data and it is scarce or noisy. Delegate to the data sub-skill(s):

  • Generate synthetic text (domain terms, target-style transcripts, TTS-friendly formatting) with data-designer.

  • If synthetic audio is genuinely needed, synthesize it with a TTS model — nemotron-speech can run TTS inference (e.g. Magpie). Scope whether audio synthesis is worth it before committing; text-only rungs (LM) may suffice.

  • Profile and harvest in-domain noise; blend it in at realistic levels.

  • Score vendor/customer samples and align their format (sample rate, channels, transcript style) to training needs.

  • Explore existing customer data; flag when real target-domain data is missing and recommend collecting it.

  • Keep synthetic/augmented sources separately weighted so they can be ablated.

Invoke: data-designer (synthetic text, not audio), nemotron-speech (TTS audio inference if needed), placeholder asr-data-profiling (noise profiling / vendor-data impact / manifest assembly). Hand the assembled manifests to the pre-flight dataset quality check (§4a) before Stage 5.

4a. Pre-flight dataset quality check — Orchestration → SDG/Data / Evaluation

A safeguard gate between data assembly and training. Two independent checks; run whichever the user asks for. Recommend both whenever new (unaudited) data is about to be trained on for the first time, but only execute a check once the user confirms — the text-side check spends GPU/API budget on inference. Record results in the run ledger (../assets/experiment-ledger-template.md, §4a).

Audio — sample rate. 16 kHz is the default target — the fine-tune rung's floor (see path-selection.md) and nemo-speech-asr-finetune's own default ("prefer 16 kHz mono audio unless the model card/config says otherwise"). Confirm the target rate against the chosen checkpoint's model card/config before assuming 16 kHz — a small number of checkpoints are configured for a different rate. Probe every file's sample rate (soxi -r file.wav, ffprobe -show_streams, or read it while building the manifest) and bucket by rate. Any file that does not match the target rate must be resampled offline before training — do not rely on online resampling inside the training data loader; it is slow at scale, and NeMo's own telephony-audio guidance is to convert once, offline:

sox in.wav -r 16000 out_16k.wav
# or
ffmpeg -i in.wav -ar 16000 out_16k.wav

(Substitute the checkpoint's actual target rate for 16000 if it differs.) This applies in both directions — upsample 8 kHz telephony audio and downsample 22.05/44.1/48 kHz audio, all to the target rate. Upsampling does not recover bandwidth the source never had: if the underlying data is native 8 kHz (e.g. telephony), note that provenance in the ledger — a model trained on upsampled-8kHz audio has a different acoustic gap profile than one trained on native-16kHz wideband audio, which matters for the Stage 6 error-driven analysis. Re-verify sample rates on the converted files; do not hand an unresampled manifest to Stage 5.

If the user insists on feeding the 8 kHz files as-is (declining the offline conversion step): this is not recommended, but not for an accuracy reason — the fix is not to change model.sample_rate. Do not set model.sample_rate=8000 to "match" the raw files; that reconfigures the preprocessor's mel-spectrogram frontend into a genuinely different, 8 kHz-native architecture than the pretrained checkpoint's — a materially different model than the one being fine-tuned, not a convenience shortcut. Instead:

  • Leave model.sample_rate at the value the target checkpoint actually expects — typically 16000 — unchanged. This is "the model's expectation" the checkpoint was built for; do not silently apply the default 16 kHz audio conversion, but do keep the 16 kHz config target.

  • NeMo's audio loader resamples every sample to model.sample_rate at load time, so leaving the files at 8 kHz still produces 16 kHz features — just resampled online, per sample, every epoch instead of once offline. This is what makes it "not recommended": per NeMo's own telephony guidance, online upsampling during training "is very time consuming and may slow down training significantly," even though the end result is the same model.

  • Confirm with the user that the trade-off being accepted is training throughput, not model quality — ask them to confirm before proceeding, and record the decision in the ledger. If training throughput later becomes the bottleneck, that's the signal to fall back to the offline sox/ffmpeg conversion above rather than continuing on the slow path — not a signal to switch to model.sample_rate=8000.

  • Reserve model.sample_rate=8000 (a genuinely 8 kHz-native model, still worth initializing from a 16 kHz checkpoint via +init_from_pretrained_model per NeMo's guidance) for the distinct, rarer case where the user explicitly wants a model that expects 8 kHz end-to-end, including at deployment/serving — not as a response to "I don't want to upsample."

Text — transcript quality. Only on user request. This is a different check from nemo-speech-asr-finetune's own transcript-style preflight (casing/punctuation/ITN/symbol consistency, run inside that sub-skill once it has the data) — this one audits whether the transcript words are correct, before the data is even handed off. It does not evaluate the model being fine-tuned; it sanity-checks whether the provided ground truth can be trusted before a training run is spent on it. Pull a strong off-the-shelf pretrained checkpoint (not the one being fine-tuned — a clean reference), run inference on a sample of (or the whole) manifest, and compute per-utterance normalized WER (same contract as Stage 6: lowercased, punctuation removed) between the reference model's hypothesis and the provided transcript:

  • Cheapest path: cloud-hosted inference via nemotron-speech (build.nvidia.com, no GPU needed) with a matching-language Parakeet/Canary checkpoint — transcribe each file and diff against the manifest transcript.

  • If a local GPU/checkpoint is already in play: offline batch inference + WER via nemo-speech-asr-finetune's evaluation stage (speech_to_text_eval.py) using a stock pretrained .nemo, not the target fine-tune checkpoint.

  • There is no universal WER cutoff for "bad transcript" — look at the distribution across the sample and flag the upper tail (utterances far worse than the bulk, or worse than the reference model's typical WER on a comparable public benchmark for that language). A tail spike usually means bad transcription, misalignment, wrong language/channel, or truncated audio — not necessarily model error.

  • Do not silently drop flagged utterances. Report the count/rate to the user and let them decide (drop, re-transcribe, or keep after a manual spot-check shows the reference model — not the transcript — was wrong). A high flagged rate (e.g. a clear double-digit percentage of the sample) is itself a finding: it means the vendor/customer data needs a transcription-quality fix, not just a training-recipe fix, and should be raised before Stage 5 rather than discovered after a wasted training run.

Do not proceed to Stage 5 with unresolved sample-rate mismatches. The transcript check is advisory — the user decides what to do with flagged utterances — but its results must be surfaced, not skipped, whenever it was requested.

4b. Pre-flight environment / dependency check — Orchestration → Research/Training

A safeguard gate alongside §4a, run before Stage 5. Confirms the training environment is on a known, checked NeMo version rather than an unverified or missing one — nemo-speech-asr-finetune's own docs repeatedly flag version-sensitive breakage (e.g. the deprecated checkpoint-averaging utility fails on PyTorch 2.6+ because torch.load defaults to weights_only=True; some checkpoint-averaging scripts are marked deprecated and need verifying against the current checkout), so this is a real, not hypothetical, risk.

NeMo:

  • If no NeMo is provided or found (no checkout path given, import nemo fails, no container tag specified): pull the latest main — mandatory, there is nothing to check otherwise.

    • Local/source execution: the canonical repo is https://github.com/NVIDIA-NeMo/Speech.git — NeMo's ASR/TTS/speech functionality moved there in a 2026 repository split from the original NVIDIA-NeMo/NeMo; verify this is still current (check the repo's own README "Updates" section) before treating it as permanent, since org/repo names can move again.

      git clone https://github.com/NVIDIA-NeMo/Speech.git
      cd Speech && uv sync --extra all --extra cu13   # or --extra cu12 for CUDA 12.x
    • Container execution (nemo-speech-asr-finetune's own default posture): pull the latest published NGC container tag rather than hardcoding one — fetch the current tag from the NGC catalog/support docs, the same "don't hardcode, verify current" pattern used throughout this skill set for container tags and function IDs.

    • Either way, this gate's job is only to make sure some version is actually resolved and recorded before Stage 5, not to reimplement nemo-speech-asr-finetune's Stage 1 (setup-checkpoints.md), which owns the exact setup/checkpoint-selection commands.

  • If a NeMo checkout/install is already provided (a mounted source checkout, an installed nemo-toolkit package, or a pinned container tag) — check its version first, don't assume it's current:

    python -c "import nemo; print(nemo.__version__)"
    git -C <checkout_path> log -1 --format='%H %ci'   # if it's a source checkout: exact commit + date
    git -C <checkout_path> branch --show-current

    Still recommend pulling latest main instead, and ask the user before proceeding — a provided checkout always carries staleness risk: it may predate a feature the chosen technique needs. This is not hypothetical — e.g. NeMo's GPU-PB word boosting (rnnt_decoding.*.boosting_tree) was added after mid-2025, so a checkout from before then silently lacks it with no error until you try to use it. Do not silently proceed on the provided checkout, and do not silently switch to latest main either — ask, and follow what the user decides:

    • User accepts switching to latest main: pull it as in the "not provided" branch above.

    • User insists on the provided checkout: proceed with it as-is — do not pull preemptively. Record the version/commit in the ledger and continue to Stage 5. Only recommend pulling latest main again if a concrete version-specific issue is actually hit later (a config key doesn't exist, a script errors on an unsupported feature, a needed capability turns out to be missing) — treat that as new evidence justifying the recommendation, not as overriding the user's earlier choice.

Make the sub-skill reachable, then operate from inside it. Resolving a NeMo checkout (above) is necessary but not sufficient — nemo-speech-asr-finetune is a project-local skill (lives in that repo's own .claude/skills/), not a catalog entry, so it only activates when Claude Code's working context is actually inside that checkout:

  1. Make it discoverable: try npx skills add NVIDIA-NeMo/Speech --skill nemo-speech-asr-finetune --agent claude-code --global --yes first; if that doesn't work, run the bundled ../scripts/link-nemo-subskill.sh <checkout_path> (validates the source, won't clobber a real directory, records the real repo root).

  2. Before Stage 5 runs any of its commands, change the actual working context into that checkout — cd there directly, or spawn a sub-agent/session scoped to that path — since every command in that sub-skill (examples/asr/speech_to_text_finetune.py, scripts/checkpoint_averaging/checkpoint_averaging.py, etc.) is a path relative to the repo root, not to wherever the orchestrator happened to start. A symlink under ~/.claude/skills/ only makes the skill discoverable; it does not change what directory a command actually runs in.

Do not assume nemo-speech-asr-finetune is invocable just because it was named in Stage 5 — verify it is actually reachable and that the working context is correct first.

Other packages (lighter touch): at minimum record torch.__version__ and torch.cuda.is_available() (already checked in nemo-speech-asr-finetune's Stage 1) and flag known version-sensitive gotchas before they surface mid-run — e.g. the PyTorch 2.6+/weights_only=True checkpoint-averaging failure above.

5. Train — Research / Training

Before starting, confirm the pre-flight checks (§4a data quality, §4b environment/dependency) have passed or were explicitly waived by the user. Delegate execution to nemo-speech-asr-finetune: apply the recipe (checkpoint choice, configs, hyperparameters, replay/curriculum to limit forgetting, GPU/OOM preflight) and run. The orchestrator supplies the path decision, data, and constraints; the sub-skill owns the flags/config. Key facts the orchestrator should carry:

  • Prefer the generic speech_to_text_finetune.py; it covers CTC/RNNT/TDT/hybrid/AED and both cache-aware streaming families (plain English vs prompted multilingual — different architectures).

  • Data gate: NIM guide recommends 100+ h; ~10 h is a floor only when mixed with a larger set to avoid catastrophic forgetting.

6. Evaluate — Evaluation

Delegate to nemo-speech-asr-finetune and use its evaluation stage:

  • Normalized WER on the domain set (default: lowercased, punctuation removed) — the success metric.

  • A/B forgetting check on a general set to catch regressions from adaptation.

  • Error-driven analysis (numbers, entities, jargon, accents, noise, long audio) to identify the next lever.

  • For streaming models, evaluate with the cache-aware streaming inference path at a trained att_context_size.

Two eval surfaces — use the one that matches the branch (see sub-skills.md): offline file WER on a .nemo/.riva (speech_to_text_eval.py / beam_batch) is owned by nemo-speech-asr-finetune; served-endpoint WER (a client scoring the running NIM) is owned by nemotron-speech. For any served rung (boosting, custom vocab, n-gram LM deploy, or a fine-tune after deploy), measure on the served endpoint — in-NeMo numbers can differ from what the deployed decoder actually produces.

7. Loop or ship — Orchestration

Compare against the target. If short: loop to Stage 4/5 with targeted data addressing the worst error categories — change one lever at a time. If met: select/average the best checkpoints (keep the averaged model only if it wins). Do not train on the eval set; keep a blind holdout for final claims. Consult the user before starting another tuning cycle.

8. Deploy — Deployment / Optimization

Delegate to nemotron-speech: export to NIM/HF, hot-swap the checkpoint, serve, and apply any NIM build-time optimization there if the latency/HW budget requires it. Re-run the runtime pipeline checks after swap. (Do not route this to nemotron-customize — that is Nemotron LLM customization, not speech.)

Answer along the way — Orchestration

At any stage, expect and answer planning questions: how much data was/will be used, synthetic vs real mix, hours needed to hit an X% WER target, cost to run, and whether L40S or H100 is more efficient. See planning-answers.md.

Requirements and compatibility

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

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

Needs: Needs Python

Security

What our scanner noticed· Medium risk

  • Large base64-encoded blobs
  • Scripts that your agent may run

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

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

Attribution and licence

Created by
Nemotron Speech Team
Publisher
NVIDIA (Official)
Distributed by
NVIDIA
Source
NVIDIA/skills · skills/nemotron-asr-finetune · commit fce3cca
Licence
Apache License 2.0 (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE-APACHE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by Nemotron Speech Team or NVIDIA.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download nemotron-asr-finetune.zip