用途:面向 Megatron Bridge 贡献者的开发指南,覆盖开发环境搭建、依赖管理、测试、提交与 CI 流程。
核心原则:在容器内开发,且始终使用 uv 管理包。项目依赖 CUDA、NCCL、GPU 版 PyTorch、Transformer Engine 及 TRT-LLM、vLLM、DeepEP 等可选组件,裸机安装难以复现,官方提供固定依赖的 Dockerfile。
环境搭建:可直接用预构建 NeMo Framework 容器(docker run --rm -it --gpus all --shm-size=24g nvcr.io/nvidia/nemo:latest bash),或从仓库根目录构建:docker build -f docker/Dockerfile.ci --target megatron_bridge -t megatron-bridge:latest .。Slurm 集群通过 Enroot/Pyxis 将容器传给 srun,仅 rank 0 执行 uv sync。
包管理:只用 uv,禁止 pip、conda 或裸 python。常用命令包括 uv sync --locked、uv run python script.py、uv add <package>、uv lock、uv run ruff check --fix . && uv run ruff format .。uv.lock 仅限 Linux 生成,不能在 macOS 重新生成。
测试:单元测试位于 tests/unit_tests/,功能测试位于 tests/functional_tests/,分 L0/L1/L2 层级,L0 每次 PR 运行,L1 夜间运行,L2 定时或手动触发。
提交与 CI:不直接提交 main,提交需签名(git commit -s),PR 标题格式为 [{areas}] {type}: {description},评论 /ok to test <commit-sha> 触发 CI。CI 定义在 .github/workflows/cicd-main.yml,含 lint、容器构建、单元与功能测试。
CI 排查:从 pull-request/<number> 分支提取 PR 号,用 gh pr checks、gh run view <run_id> --log-failed 获取日志,日志按约 200 行分块读取。
限制:uv.lock 无法在 macOS 生成;切换 MCore 分支后需用不带 --locked 的 uv sync;容器内需设置 UV_CACHE_DIR 避免缓存占满空间。更多细节见 CONTRIBUTING.md 与 docker/README.md。