Chapter 02
环境准备与安装
2.1 装之前要先承认的事
Megatron-LM 不是"装好就能跑"的工具,它对环境有非常具体的要求:
- 必须是 NVIDIA GPU:仓库的 ReadMe 顶部就写了 "GPU-optimized library"。Apple Silicon、AMD GPU、CPU 都不能跑(更准确说能勉强 import,但训练性能毫无意义)。
- 建议 CUDA ≥ 12.4 + PyTorch ≥ 2.4:仓库当前 commit 不再保留对老版本的官方测试。CI Dockerfile 在
docker/Dockerfile.ci.lts和Dockerfile.ci.dev。 - Python 3.10 即将被弃用:README 里有一条 News 写明 "Deprecating Python 3.10 support, the upcoming 0.17.0 release will require ≥ 3.12"。所以新装直接上 Python 3.12。
- fused kernel / apex / transformer-engine 是软依赖:装不上不会报错,但很多优化会 silently 关掉。
2.2 三条安装路线
仓库 README 给出的安装方式有三条,按"省心程度"由低到高:
路线 A:NGC 容器(NVIDIA 官方推荐,最省心)
NVIDIA 自己发的 PyTorch 容器里 CUDA、cuDNN、NCCL、apex、TransformerEngine 都已经装好了,进去 pip install megatron-core 就直接能用:
docker run --gpus all -it --rm \
-v $(pwd):/workspace \
nvcr.io/nvidia/pytorch:24.10-py3 bash
# 进容器后
pip install megatron-core
NGC 容器版本号要和你卡片的 CUDA 兼容(H100/A100 用 24.xx 系列没问题,老的 V100 可能要选更老 tag)。这是生产部署的标准做法。
路线 B:纯 pip / uv 安装(开发用)
仓库 README 推荐用 uv(比 pip 快很多):
# 装 uv(如果还没装)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 直接装 release 版
uv pip install megatron-core
# 或克隆 + editable 安装(要改 megatron 内部代码就走这条)
git clone https://github.com/NVIDIA/Megatron-LM.git
cd Megatron-LM
uv pip install -e .
注意
README 原话:"Building from source can use a lot of memory. If the build runs out of memory, limit parallel compilation jobs by setting
编译时容易内存炸,机器内存 < 32 GB 一定要带
MAX_JOBS (e.g. MAX_JOBS=4 uv pip install -e .)."编译时容易内存炸,机器内存 < 32 GB 一定要带
MAX_JOBS=4,否则会被 OOM kill。
路线 C:从你已克隆的 repos/megatron-lm 装
本仓库已经在 /Users/zjw/Documents/LLM/train/repos/megatron-lm/ 准备好了源码(commit 432d76b2b8bf)。如果你只是想读源码、不打算训东西,不需要装任何东西——文件已经在那儿,可以直接 grep / 读。
如果要真训练,路线选 A 或 B。
2.3 验证安装
不管走哪条路线,进 Python 跑这三行确认装好:
import megatron.core
print(megatron.core.__version__) # 应输出版本号
from megatron.core import parallel_state # 不能抛 ImportError
from megatron.core.transformer.transformer_config import TransformerConfig
print(TransformerConfig) # 不能抛 ImportError
任意一行报错都说明环境没准备好,重点查:
- PyTorch 版本是否 ≥ 2.4:
python -c "import torch; print(torch.__version__)" - CUDA 是否可用:
python -c "import torch; print(torch.cuda.is_available(), torch.cuda.device_count())" - NCCL 是否在:
python -c "import torch; print(torch.cuda.nccl.version())"
2.4 可选但强烈建议的额外组件
这些不装能跑,装上能显著加速:
| 组件 | 作用 | 安装 |
|---|---|---|
| TransformerEngine | FP8 训练、fused attention、fused LayerNorm | NGC 容器自带;外部 pip install transformer-engine[pytorch] |
| Apex | NVIDIA 的 fused optimizer / fused softmax | NGC 容器自带;外部要从源码装 |
| FlashAttention | 标准 flash-attn 替换 PyTorch SDPA | pip install flash-attn --no-build-isolation |
| fused kernel | 仓库自带的 C++ kernel,第一次跑会自动 JIT 编译 | 不用装,但要确保 nvcc 可用 |
提示
用 NGC 容器 = 上面这些全都不用管。
2.5 第一次跑出错怎么办
最常见的几种失败:
| # | 报错 / 现象 | 解决思路 |
|---|---|---|
| 1 | ImportError: cannot import name 'xxx' from 'megatron.core' | 八成是 megatron-core 版本和教程/代码不一致。pip show megatron-core 看版本,对照 README 的 CHANGELOG.md。 |
| 2 | NCCL hang / 卡在 init_process_group | 检查 MASTER_ADDR/MASTER_PORT/WORLD_SIZE/RANK 四个环境变量;防火墙 / 容器网络通常是真凶。 |
| 3 | CUDA out of memory 一启动就炸 | 不是你模型大,是 fused kernel JIT 编译占了显存。先 export TORCH_CUDA_ARCH_LIST=8.0+PTX(或你卡的 arch)限制编译范围。 |
| 4 | MAX_JOBS 没设、机器卡死 | 看 2.2 节 的警告。 |
完整调试手册留到第 11 章。