Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ModelZoo
GPT2_oneflow
Commits
a458cc62
Commit
a458cc62
authored
Sep 27, 2023
by
“yuguo”
Browse files
update readme
parent
dc9ff20b
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
5 additions
and
60 deletions
+5
-60
README.md
README.md
+2
-57
model.properties
model.properties
+2
-2
requirements.txt
requirements.txt
+1
-1
No files found.
README.md
View file @
a458cc62
...
@@ -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 |
## 应用场景
## 应用场景
### 算法类别
### 算法类别
...
...
model.properties
View file @
a458cc62
# 模型唯一标识
# 模型唯一标识
modelCode
=
62
modelCode
=
62
# 模型名称
# 模型名称
modelName
=
GPT
2_oneflow
modelName
=
gpt
2_oneflow
# 模型描述
# 模型描述
modelDescription
=
基于Oneflow框架的GPT2
modelDescription
=
基于Oneflow框架的GPT2
# 应用场景(多个标签以英文逗号分割)
# 应用场景(多个标签以英文逗号分割)
appScenario
=
训练,推理,
train,inference,
nlp,智能聊天助手
appScenario
=
训练,推理,nlp,智能聊天助手
,科研
# 框架类型(多个标签以英文逗号分割)
# 框架类型(多个标签以英文逗号分割)
frameType
=
OneFlow,Libai
frameType
=
OneFlow,Libai
requirements.txt
View file @
a458cc62
...
@@ -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.4b
2
black
==21.4b
autoflake
autoflake
tensorboardX
tensorboardX
pytest
pytest
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment