用途:这是 NVIDIA Megatron-LM 仓库的测试指南,说明其测试体系如何组织、编写与运行,面向需要新增或调试测试的开发者。
测试布局:tests/ 下分 unit_tests/(pytest,1 节点 × 8 GPU,torch.distributed 运行器)、functional_tests/(端到端 shell 与训练脚本,用例位于 test_cases/{model}/{test_case}/,含 model_config.yaml 与 golden_values_{env}_{platform}.json)以及 test_utils/(recipes/h100、recipes/gb200 的 YAML recipe 与 python_scripts 辅助脚本)。
执行方式:GitHub Actions 调用 launch_nemo_run_workload.py,经 nemo-run 启动 DockerExecutor 容器,仓库挂载到 /opt/megatron-lm,训练数据挂载到 /mnt/artifacts。单元测试通过 torch.distributed.run 分发,rank 0 与 3 输出到 stdout,其余仅写日志,日志位于 {assets_dir}/logs/1/ 并作为 artifact 上传。功能测试由 run_ci_test.sh 驱动,仅 rank 0 执行 pytest 校验。脚本对 NCCL 超时、ECC 错误、段错误、HuggingFace 连接等已知瞬时故障最多自动重试 3 次。
Recipe YAML:位于 tests/test_utils/recipes/,由 recipe_parser.py 解析,通过 cartesian products 块展开为多个 workload spec,含 name、model、build、nodes、gpus、n_repeat、platforms、time_limit、script 等字段,支持 {assets_dir}、{artifacts_dir}、{test_case}、{environment}、{platforms}、{n_repeat} 等占位符。临时禁用测试时在 scope 值后加 -broken,而非删除条目。
本地运行单元测试:所有单元测试都会初始化 torch.distributed 组,必须经 torch.distributed.run 并具备 GPU。示例:uv run python -m torch.distributed.run --nproc-per-node 8 -m pytest -q tests/unit_tests;可指定单文件、单个测试或 -k 名称过滤;用 -m "not flaky and not flaky_in_dev" 排除不稳定测试,--experimental 包含实验性测试。可用 tests/unit_tests/run_ci_test.sh 复现 CI 失败。
注意事项:pyproject.toml 设置 addopts = --durations=15 -s -rA,stdout 不被捕获,多 rank 输出会交错,调试单 rank 时可用 --capture=fd。conftest.py 在 /opt/data 查找测试数据,缺失时尝试下载,容器外运行需手动提供或跳过依赖数据的测试。
新增测试:单元测试放在 tests/unit_tests/<category>/test_<name>.py,使用 conftest.py 的 fixture,并按需加 marker(internal、flaky_in_dev、flaky、experimental),如需独立 CI bucket 则在 recipes/h100/unit-tests.yaml 添加条目。功能测试在 test_cases/<model>/<test_name>/ 下写 model_config.yaml(含 MODEL_ARGS、ENV_VARS、TEST_TYPE),在 recipes/h100/(必要时 gb200/)添加 recipe,PR 打上 "Run functional tests" 标签触发,成功后用 download_golden_values.py 下载并提交 golden values。
常见问题:本地通过但 CI 失败多因环境或数据路径不同,需检查 DATA_PATH、DATA_CACHE_PATH 与环境标签;代码改动后 golden value 不匹配属数值回归,需重新下载;GB200 任务需维护者权限触发。
限制:资料未提供具体收费、平台支持范围或性能数据。