8xH100 训练 Qwen3-30B-A3B#
环境准备#
搭建环境、下载模型、数据与 ckpt 转换均与 Qwen3-4B 模型相同,可以参考 示例:Qwen3-4B,将文中 Qwen3-4B 的部分转换为 Qwen3-30B-A3B 即可。
可以用如下方法把 huggingface checkpoint 转化为 torch_dist 格式:
cd slime/
pip install -e .
source scripts/models/qwen3-30B-A3B.sh
PYTHONPATH=/root/Megatron-LM/ torchrun --nproc-per-node 8 \
tools/convert_hf_to_torch_dist.py \
${MODEL_ARGS[@]} \
--hf-checkpoint /root/Qwen3-30B-A3B/ \
--save /root/Qwen3-30B-A3B_torch_dist/
执行训练#
执行训练:
cd /root/slime
bash scripts/run-qwen3-30B-A3B.sh
参数简介#
这里我们简单介绍一下脚本 run-qwen3-30B-A3B.sh 中与 MoE 相关的部分。
为了支持在 8xH800 环境中运行 Qwen3-30B-A3B,我们需要开启 megatron 的 CPU Adam 以节省显存,对应配置为:
OPTIMIZER_ARGS=( ... --optimizer-cpu-offload --overlap-cpu-optimizer-d2h-h2d --use-precision-aware-optimizer )
开启 megatron 支持的 moe 优化,当前配置为 tp4, ep8:
PERF_ARGS=( --tensor-model-parallel-size 4 --sequence-parallel --pipeline-model-parallel-size 1 --context-parallel-size 1 --expert-model-parallel-size 8 --expert-tensor-parallel-size 1 ... )
开启 sglang 支持的 moe 优化,当前配置为 ep8:
SGLANG_ARGS=( --rollout-num-gpus-per-engine 8 --sglang-mem-fraction-static 0.7 --sglang-enable-ep-moe --sglang-cuda-graph-bs 1 2 4 8 $(seq 16 8 256) )
类似地,也可以加入 dp attention,例如配置上:
--sglang-enable-dp-attention --sglang-dp-size 8
bf16 训练 fp8 推理#
slime 还支持 bf16 训练,fp8 推理。对于 Qwen3-30B-A3B 模型,只需要下载如下模型:
hf download Qwen/Qwen3-30B-A3B-FP8 --local-dir /root/Qwen3-30B-A3B-FP8
并将 --hf-checkpoint 替换为:
#--hf-checkpoint /root/Qwen3-30B-A3B
--hf-checkpoint /root/Qwen3-30B-A3B-FP8
即可触发 fp8 训练。目前我们会将 bf16 权重直接 cast 为 fp8,后续会逐渐添加对精度影响更小的量化方案。
⚠️ 训练的 megatron checkpoint 还需要是最开始用 bf16 的 huggingface 转换的。
多机支持#
对于多机环境,需要进行如下的几点修改:
将训练模型,数据放在所有机器都可以访问到的路径上;
设置各台机器都可以访问到的
MASTER_ADDR之外;去掉 CPU adam 相关的配置,因为使用了 distributed optimizer,所以多机环境下 optimizer 的显存占比会明显下降。
除此之外,还可以进行如下的修改:
当总卡数并不能被 expert 总数乘除时,可以使用
--sglang-ep-num-redundant-experts来增加冗余的 expert,例如对于 24 卡的场景,可以配置:SGLANG_ARGS=( --rollout-num-gpus-per-engine 24 --sglang-mem-fraction-static 0.7 --sglang-enable-ep-moe --sglang-enable-dp-attention --sglang-dp-size 3 --sglang-moe-dense-tp-size 1 --sglang-enable-dp-lm-head --sglang-ep-num-redundant-experts 16 )