Reproducibility
May 18, 2026 ยท View on GitHub
Hardware and validated stack
The cascade is validated on a single 40 GB A100 (Linux, CUDA 12.9, Python 3.13, uv). The ASR and MT engines run side by side on that one GPU.
Two vLLM stacks are known-good:
- Pinned (paper stack):
vllm==0.22.1rc1.dev316+g3d119f78f.cu129, installed by the bootstrap script from vLLM's per-commit wheel index (the nightly index rotates old builds out; the per-commit index does not). This is the stack behind the published results. - vLLM 0.23.1rc: works, but its CUDA-graph memory profiler reserves extra
memory, so the second engine can fail with
No available memory for the cache blocks. If that happens, setVLLM_MEMORY_PROFILER_ESTIMATE_CUDAGRAPHS=0and/or raise--mt-vllm-gpu-memory-utilization(validated on a 40 GB A100 at--mt-vllm-gpu-memory-utilization 0.72).
See limitations.md for why the MT engine always runs
eagerly (mt_vllm_enforce_eager=True).
Environments
Use separate environments for inference and evaluation (their dependency
sets conflict; both are declared as uv dependency groups in
pyproject.toml):
tools/bootstrap/setup_inference_qwen_asr_vllm.sh
uv venv .venv-evaluation --python 3.13
UV_PROJECT_ENVIRONMENT=.venv-evaluation uv sync --group evaluation
The inference bootstrap pins the vLLM/CUDA stack used by this project and patches the Qwen ASR package for the validated Transformers version.
Model downloads
The runtime resolves pinned model snapshots from the local Hugging Face cache and does not download them automatically. Pre-download the models for the routes you run:
# ASR route (qwen_forced, the default)
huggingface-cli download Qwen/Qwen3-ASR-1.7B --revision 7278e1e70fe206f11671096ffdd38061171dd6e5
huggingface-cli download Qwen/Qwen3-ForcedAligner-0.6B --revision c7cbfc2048c462b0d63a45797104fc9db3ad62b7
# Stable MT route (gemma_vllm_alignatt) - gated: accept the license on
# huggingface.co and `huggingface-cli login` first
huggingface-cli download google/gemma-4-E4B-it --revision 83df0a889143b1dbfc61b591bbc639540fd9ce4c
# EN->ZH research MT route (milmmt_vllm_alignatt)
huggingface-cli download xiaomi-research/MiLMMT-46-4B-v0.1 --revision 1341209df846d7b2f6a077090ca957e28656e3de
The reference bring-your-own-LLM route (qwen_vllm_alignatt) uses the plain
HF id Qwen/Qwen3-1.7B, which vLLM downloads on first use.
To point a route at a different local snapshot, set the matching
CASCADE_QWEN_ASR_SNAPSHOT, CASCADE_QWEN_ALIGNER_SNAPSHOT,
CASCADE_GEMMA_SNAPSHOT, CASCADE_MILMMT_SNAPSHOT, or
CASCADE_QWEN_MT_SNAPSHOT environment variable.
Data paths
Calibrated attention-head payloads ship in data/alignatt_heads/ and are
resolved relative to the repository checkout, so commands work from any
working directory. If the package is installed away from its data/ tree,
set ALIGNATT4LLM_DATA_ROOT to the checkout path. Development audio is not
redistributed with the repo; see data.md.
Smoke Run
.venv-inference/bin/alignatt-compare --wav <local.wav>
Batch Run
.venv-inference/bin/alignatt-batch \
--inputs <local.wav> \
--target zh \
--mt-backend-name milmmt_vllm_alignatt \
--output-dir outputs/milmmt_zh_smoke
Scoring
.venv-evaluation/bin/alignatt-eval \
--output-dir outputs/milmmt_zh_smoke
Claims should cite the output directory, manifest.json, evaluation.json,
and the exact command used to produce them. The historical anchors behind
the paper's numbers are recorded in results.md, the parsed
official baseline scores in baselines/, and the speed-figure
artifact in benchmarks/.
GPU-free verification
The policy/decision layer is fully exercisable without a GPU: 216 pytest tests run in about one second against tiny synthetic tensors and recorded run events.
UV_PROJECT_ENVIRONMENT=.venv-evaluation uv sync --group evaluation --group dev
.venv-evaluation/bin/python -m pytest -q