ColossalMoE 怎么配置 hostfile 并在多节点 H100 集群上训练 Mixtral?
【免费下载链接】ColossalAIMaking large AI models cheaper, faster and more accessible项目地址: https://gitcode.com/GitHub_Trending/co/ColossalAI
用 ColossalAI 的 ColossalMoE 应用在多机集群上训练 Mixtral-8x7B-v0.1 时,首先要解决的是多节点启动问题:colossalai run需要一个 hostfile 来列出集群里的所有机器,然后以 hybrid 并行插件(流水线并行 + 专家并行)启动train.py。下面按 applications/ColossalMoE/README.md 给出从环境安装、创建 hostfile、启动训练到核对输出的完整路径。文档明确给出的资源要求是:训练需要 16 张 H100(80G),GPU 总数必须能被 8 整除。
准备:硬件与版本要求
开始之前先对照文档检查两点:
- 硬件:16 张 H100(80G),GPU 总数需能被 8 整除(对应 train.sh 中的
--ep_size 8)。 - 版本:requirements.txt 要求
colossalai >= 0.3.3、torch >= 1.8.1、transformers == 4.36.0、sentencepiece、datasets;README 另外明确建议使用torch 1.13.1,并说明该版本已测试过兼容性。
安装 ColossalAI 与 ColossalMoE
README 要求先安装最新的 ColossalAI 源码包,并用CUDA_EXT=1启用 CUDA 扩展:
CUDA_EXT=1 pip install -U git+https://github.com/hpcaitech/ColossalAI然后在 ColossalAI 源码目录内以 editable 方式安装 ColossalMoE:
cd ColossalAI/applications/ColossalMoE pip install -e .后续步骤都在ColossalAI/applications/ColossalMoE目录下进行。README 中还提到可用bash infer.sh启动单节点推理,本文只覆盖多节点训练这一任务。
创建 hostfile
在ColossalAI/applications/ColossalMoE目录下创建名为hostfile的文件(即 README 所说的./hostfile),把集群中每台机器的 IP 地址逐行列入。README 给出的示例(文档示例,请替换为你实际的节点 IP):
111.111.111.110 111.111.111.111按 16 张 H100、每机 8 张的规模,这里对应写入 2 个节点的 IP。train.sh 中以--hostfile "hostfile"引用该文件,路径相对于 ColossalMoE 目录解析,所以文件要放在该目录下。
用 train.sh 启动多节点训练
训练入口是一条命令:
bash train.shtrain.sh 的完整内容如下:
NUM_GPU=8 MODEL="mistralai/Mixtral-8x7B-v0.1" SEQ_LENGTH=2048 BATCH_SIZE=1 LR=0.00001 # hybrid # torchrun --standalone --nproc_per_node $NUM_GPU \ colossalai run --nproc_per_node $NUM_GPU --hostfile "hostfile" \ train.py \ --num_epoch 1 \ --model_name $MODEL \ --plugin "hybrid" \ --batch_size $BATCH_SIZE \ --lr $LR \ --zero_stage 1 \ --pp_size 2 \ --dp_size 1 \ --ep_size 8关键参数(取值与含义均来自 train.py 的参数定义):
| 参数 | 取值 | 用途 |
|---|---|---|
--nproc_per_node | 8(NUM_GPU) | 每节点 GPU 数,结合 README 的 16 卡要求对应 2 个节点 |
--hostfile | "hostfile" | colossalai run多节点启动所用的机器列表 |
--model_name | mistralai/Mixtral-8x7B-v0.1 | 预训练模型名;train.py 中该参数支持本地路径 |
--plugin | hybrid | train.py 当前仅支持hybrid,对应构造MoeHybridParallelPlugin |
--batch_size | 1 | 每个 dp group 的训练 batch size |
--lr | 0.00001 | 学习率 |
--zero_stage | 1 | Zero 优化阶段 |
--pp_size | 2 | 流水线并行大小 |
--dp_size | 1 | 数据并行大小 |
--ep_size | 8 | 专家并行大小,对应“GPU 总数需被 8 整除”的要求 |
--num_epoch | 1 | 训练轮数 |
说明两点:脚本里定义了SEQ_LENGTH=2048,但它没有传给 train.py,train.py 中对应的参数是--max_length(默认 2048);如果你已经自行下载了模型权重,README 说明可以直接把 train.sh 中的MODEL改成你本地权重的位置。
可选:多节点通信开关
train.py 还提供了两个开关,其帮助文本明确写着 “Recommended to enable for multi-node training”:
--comm_overlap:Use communication overlap for MoE.--hierarchical_alltoall:Use hierarchical all-to-all for MoE.
train.sh 默认没有带上它们。如需启用,在colossalai run命令后追加这两个参数即可。
确认训练是否正常推进
train.py 会在 master 进程上按顺序打印以下里程碑(以下为源码中的原始输出文案,属文档示例):
Set plugin as MoeHybridParallelPluginFinish init modelFinish init boosterStart finetuning
默认配置下pp_size 2 > 1,训练走流水线分支:进度条只在最后一个流水线阶段显示,其中Loss由该阶段 local rank 0 的进程写入,数值是对 dp group 做 all-reduce 求和后按dp_size平均得到的全局 loss。训练结束时 master 进程打印Finish training。
checkpoint 的保存逻辑同样在 train.py 中:
- 训练过程中每
--save_interval步(默认 1000)保存一次; - 每个 epoch 结束时通过
booster.save_model保存分片权重,size_per_shard=5120; - 保存路径为
--output_path,默认./outputs,即 ColossalMoE 目录下的outputs。
结合这些日志与outputs目录中是否生成新文件,就可以判断一轮训练是否完整跑完。
限制说明
- 16 张 H100(80G)与“GPU 总数需被 8 整除”是 README 明确给出的资源边界,规模更小的集群无法直接跑这份训练脚本。
- train.py 使用的数据集是
RandomDataset(随机 input_ids,100 条样本),因此这份脚本适合跑通分布式训练流程本身;若要训练真实数据,需要自行修改 train.py 中的 dataset。 - 版本口径上,README 推荐 torch 1.13.1,requirements.txt 写的是
torch >= 1.8.1,文档同时给出两者;其中 torch 1.13.1 是作者声明测试过兼容的版本。
相关仓库文件:applications/ColossalMoE/README.md、applications/ColossalMoE/train.sh、applications/ColossalMoE/train.py、applications/ColossalMoE/requirements.txt。
【免费下载链接】ColossalAIMaking large AI models cheaper, faster and more accessible项目地址: https://gitcode.com/GitHub_Trending/co/ColossalAI
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考