Commit 9596bb1b authored by yuguo960516's avatar yuguo960516
Browse files

readme

parent 24266ebc
Pipeline #147 failed with stages
in 0 seconds
......@@ -93,7 +93,20 @@ train.dist.pipeline_parallel_size = 1
pip3 install -e . -i https://mirrors.aliyun.com/pypi/simple
pip3 install oneflow-0.9.1+dtk2210.git.8ea46d6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
### 混合并行配置指南
首先,可以在一个节点内的多卡上做模型并行切分。因为模型并行通信开销大(前后向可能都需要all-reduce通信),而节点内设备间带宽高;另外模型并行组大小越大,流水线Stage可以减少,继而可以减少流水线中的气泡;所以一般可以节点内所有设备作为一个模型并行组。
然后,在模型并行组大小确定后,单节点的可以容纳的模型大小基本确定,就可以据此再依次把多层 Layer 的模型分布到多个节点上,形成流水线并行。在实际中,先固定数据并行是1,参考上面总结固定模型并行大小,再加流水线并行的stage,直到模型可以放的下,不出现oom。
最后,情况就变得简单了,继续加节点,使用更高的数据并行规模,把一个模型并行组的模型复制出多个数据并行组的模型,对数据切分,形成更多的数据并行组,如此就可以形成一个3D并行的切分结果。
值得注意的是,在采用以上策略时,核心要素有几点。首先保证流水并行stage数量小,气泡尽可能少,所以有时可能会再扩大模型并行至2节点。其次,可以同时采用zero策略来不增加通信量的前提下减少显存占用,一般zero 1就可以最多减少75%左右的模型状态(下放的是优化器状态),当然使用zero 2也可以,但是需要注意是否会在真实训练场景中造成性能下降。然后,配合设置Gradient Accumulation Step以及Activation Checkpointing技术来进一步减少模型中间状态对显存的占用,一般Gradient Accumulation Step设置为流水并行度的1-2倍。最后,当显存占用优化明显后,就可以在相同规模的节点上放下更大的macro bs,尽量挤满显存,最终带来可观的性能提升。
当然,在不同参数量的网络下,以上配置需要进行调整,但是思路类似
### 训练
该预训练脚本需要24个节点,每节点4张DCU-Z100-16G。
混合并行配置策略在configs/gpt2-13B_pretrain.py中,使用自动混合精度:
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment