Context
PR #15 stands up a NeMo Framework pod on NERC as nemo-training (scale-to-zero, H100, mounts vllm-model-cache + nemo-training-data). What it does not cover: the actual training workflow. After merging #15 you'll have an interactive sleep infinity pod — but no documented commands for how to use it.
This issue is a runbook follow-up. It should be completed after at least one successful training run on NERC so the commands are validated, not guessed.
What to document
1. Data upload
oc rsync ./data/synthetic/ <pod>:/data/synthetic/ for local corpora.
huggingface-cli download <dataset-repo> --repo-type=dataset --local-dir /data/external-accented for HF-hosted datasets.
- NeMo manifest format conversion: the repo already writes
manifest.json in its own schema (fields: voice, accent, native_lang, model, scenario, sentence_id, text, file, generation_time_s, file_size_kb). NeMo expects {audio_filepath, duration, text} per line. Document the conversion script (could go in src/training/convert_manifest.py).
2. LoRA training command
- Base model path:
/models/nemo/nemotron-speech-streaming-en-0.6b.nemo (after huggingface-cli download nvidia/nemotron-speech-streaming-en-0.6b).
- NeMo adapter training recipe:
train_asr_adapter.py (path on NeMo 25.04 image to be verified).
- Exact flags and config overrides for LoRA rank, alpha, learning rate.
- Validation split strategy.
3. Checkpoint layout
exp_manager.exp_dir=/data/experiments/<run_id>/ — survives pod restart because /data is the PVC.
checkpoints/last.ckpt and per-epoch epoch=*-step=*.ckpt files.
- How to reason about disk usage (a single LoRA run: ~500MB-2GB of checkpoints).
4. Restart / resume
+init_from_ptl_ckpt=/data/experiments/<run_id>/checkpoints/last.ckpt (syntax may differ between NeMo versions; verify).
- How to inspect the checkpoint to know which epoch/step it was saved at.
5. nemo2riva handoff
Acceptance
Part of #5. Surfaced during PR #15 review — PR author asked "where I should upload the audio data and transcript for training? What is the training command?" and the answer was "nothing documents this yet."
Context
PR #15 stands up a NeMo Framework pod on NERC as
nemo-training(scale-to-zero, H100, mountsvllm-model-cache+nemo-training-data). What it does not cover: the actual training workflow. After merging #15 you'll have an interactivesleep infinitypod — but no documented commands for how to use it.This issue is a runbook follow-up. It should be completed after at least one successful training run on NERC so the commands are validated, not guessed.
What to document
1. Data upload
oc rsync ./data/synthetic/ <pod>:/data/synthetic/for local corpora.huggingface-cli download <dataset-repo> --repo-type=dataset --local-dir /data/external-accentedfor HF-hosted datasets.manifest.jsonin its own schema (fields:voice, accent, native_lang, model, scenario, sentence_id, text, file, generation_time_s, file_size_kb). NeMo expects{audio_filepath, duration, text}per line. Document the conversion script (could go insrc/training/convert_manifest.py).2. LoRA training command
/models/nemo/nemotron-speech-streaming-en-0.6b.nemo(afterhuggingface-cli download nvidia/nemotron-speech-streaming-en-0.6b).train_asr_adapter.py(path on NeMo 25.04 image to be verified).3. Checkpoint layout
exp_manager.exp_dir=/data/experiments/<run_id>/— survives pod restart because/datais the PVC.checkpoints/last.ckptand per-epochepoch=*-step=*.ckptfiles.4. Restart / resume
+init_from_ptl_ckpt=/data/experiments/<run_id>/checkpoints/last.ckpt(syntax may differ between NeMo versions; verify).5. nemo2riva handoff
nemo2rivaconverts.nemo→.rivafor the Riva serving deployment (Add k8s/riva-stt-deployment.yaml (Riva 2.19 serving Nemotron-Streaming) #9)..rivafile soriva-sttpicks it up (/models/riva/<name>.riva).Acceptance
docs/training-runbook.mdcommitted.Part of #5. Surfaced during PR #15 review — PR author asked "where I should upload the audio data and transcript for training? What is the training command?" and the answer was "nothing documents this yet."