Commit a458cc62 authored by “yuguo”'s avatar “yuguo”
Browse files

update readme

parent dc9ff20b
...@@ -73,10 +73,9 @@ train.dist.pipeline_parallel_size = 1 ...@@ -73,10 +73,9 @@ train.dist.pipeline_parallel_size = 1
预训练命令: 预训练命令:
cd libai
bash tools/train.sh tools/train_net.py configs/gpt2_pretrain.py 4 bash tools/train.sh tools/train_net.py configs/gpt2_pretrain.py 4
### 模型精度 ### 精度
训练数据:[https://oneflow-static.oss-cn-beijing.aliyuncs.com/ci-files/dataset/libai/gpt_dataset](链接) 训练数据:[https://oneflow-static.oss-cn-beijing.aliyuncs.com/ci-files/dataset/libai/gpt_dataset](链接)
...@@ -88,25 +87,6 @@ train.dist.pipeline_parallel_size = 1 ...@@ -88,25 +87,6 @@ train.dist.pipeline_parallel_size = 1
| :--: | :--------: | :---------------------------: | | :--: | :--------: | :---------------------------: |
| 4 | Libai-main | total_loss: 4.336/10000 iters | | 4 | Libai-main | total_loss: 4.336/10000 iters |
## GPT2-13B预训练
### 环境配置
要求DCU集群Slurm环境正常。
推荐用户使用预编译好的python3.9包来快速建立python3虚拟环境:
cd libai
export PYTHON3_LIB_PATH=/python_lib_path
virtualenv -p /python_bin_path/python3 --system-site-packages venv_oneflow
source env.sh #进入venv_oneflow虚拟环境
pip3 install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple #更新pip
pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple
pip3 install pybind11 -i https://mirrors.aliyun.com/pypi/simple
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可以减少,继而可以减少流水线中的气泡;所以一般可以节点内所有设备作为一个模型并行组。 首先,可以在一个节点内的多卡上做模型并行切分。因为模型并行通信开销大(前后向可能都需要all-reduce通信),而节点内设备间带宽高;另外模型并行组大小越大,流水线Stage可以减少,继而可以减少流水线中的气泡;所以一般可以节点内所有设备作为一个模型并行组。
...@@ -117,43 +97,8 @@ train.dist.pipeline_parallel_size = 1 ...@@ -117,43 +97,8 @@ train.dist.pipeline_parallel_size = 1
值得注意的是,在采用以上策略时,核心要素有几点。首先保证流水并行stage数量小,气泡尽可能少,所以有时可能会再扩大模型并行至2节点。其次,可以同时采用zero策略来不增加通信量的前提下减少显存占用,一般zero 1就可以最多减少75%左右的模型状态(下放的是优化器状态),当然使用zero 2也可以,但是需要注意是否会在真实训练场景中造成性能下降。然后,配合设置Gradient Accumulation Step以及Activation Checkpointing技术来进一步减少模型中间状态对显存的占用,一般Gradient Accumulation Step设置为流水并行度的1-2倍。最后,当显存占用优化明显后,就可以在相同规模的节点上放下更大的macro bs,尽量挤满显存,最终带来可观的性能提升。 值得注意的是,在采用以上策略时,核心要素有几点。首先保证流水并行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中,使用自动混合精度:
```
train.amp.enabled = True
train.train_micro_batch_size = 2
train.num_accumulation_steps = 4
train.activation_checkpoint.enabled = True
train.zero_optimization.enabled = True
train.zero_optimization.stage = 1
train.dist.data_parallel_size = 6
train.dist.tensor_parallel_size = 4
train.dist.pipeline_parallel_size = 4
```
进入登陆节点,预训练命令:
cd libai
source submit_job.sh
tail -f log/xxx.out.log #查看输出log
tail -f log/xxx.err.log #查看错误log
### 模型精度
训练数据:[https://oneflow-static.oss-cn-beijing.aliyuncs.com/ci-files/dataset/libai/gpt_dataset](链接)
使用的GPGPU:96张DCU-Z100-16G。
模型精度:
| 卡数 | 分布式工具 | 收敛性 |
| :------: | :------: |:------: |
| 96 | Libai-main | total_loss: 5.56/1299 iters |
## 应用场景 ## 应用场景
### 算法类别 ### 算法类别
......
# 模型唯一标识 # 模型唯一标识
modelCode=62 modelCode=62
# 模型名称 # 模型名称
modelName=GPT2_oneflow modelName=gpt2_oneflow
# 模型描述 # 模型描述
modelDescription=基于Oneflow框架的GPT2 modelDescription=基于Oneflow框架的GPT2
# 应用场景(多个标签以英文逗号分割) # 应用场景(多个标签以英文逗号分割)
appScenario=训练,推理,train,inference,nlp,智能聊天助手 appScenario=训练,推理,nlp,智能聊天助手,科研
# 框架类型(多个标签以英文逗号分割) # 框架类型(多个标签以英文逗号分割)
frameType=OneFlow,Libai frameType=OneFlow,Libai
...@@ -22,7 +22,7 @@ portalocker ...@@ -22,7 +22,7 @@ portalocker
dill dill
flake8==3.8.1 flake8==3.8.1
isort==5.10.1 isort==5.10.1
black==21.4b2 black==21.4b
autoflake autoflake
tensorboardX tensorboardX
pytest pytest
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