修改一些格式问题

This commit is contained in:
chaoyu@qiyuanlab.com 2024-07-16 18:56:53 +08:00
parent e0bb66c34d
commit f6825751a3
1 changed files with 22 additions and 3 deletions

View File

@ -157,9 +157,9 @@ python convert_json2index.py \
--hdfs_name index #index文件的文件名 --hdfs_name index #index文件的文件名
``` ```
脚本运行成功时会有如下显示不需要用hadoop所以不用管hadoop: not found的警告信息 <!-- 脚本运行成功时会有如下显示不需要用hadoop所以不用管hadoop: not found的警告信息
![脚本运行成功后的显示](./055bf7ce-faab-403b-a7ee-896279bee11f.png) ![脚本运行成功后的显示](./055bf7ce-faab-403b-a7ee-896279bee11f.png) -->
转完后在index的目录下会生成四个文件data.jsonl原先的jsonl数据、index、index.h5、meta.json记录数据集信息包含 "language", "nlines", "nbytes", "length_distribute", "avg_token_per_line", "hdfs_path", "data_sample"字段)。 转完后在index的目录下会生成四个文件data.jsonl原先的jsonl数据、index、index.h5、meta.json记录数据集信息包含 "language", "nlines", "nbytes", "length_distribute", "avg_token_per_line", "hdfs_path", "data_sample"字段)。
这里有一个meta.json的例子 这里有一个meta.json的例子
@ -195,6 +195,7 @@ python convert_json2index.py \
} }
] ]
``` ```
其中abs_weight需要自行设计path、nlines、ave_tokens_per_line可以参考生成index时的meta.json进行填写allow_repeat为数据集是否需要复制total_tokens为估计的数据集token总数以b十亿为单位例如0.1代表0.1b个tokentransforms为读入训练数据的脚本路径该脚本可以参考以下代码 其中abs_weight需要自行设计path、nlines、ave_tokens_per_line可以参考生成index时的meta.json进行填写allow_repeat为数据集是否需要复制total_tokens为估计的数据集token总数以b十亿为单位例如0.1代表0.1b个tokentransforms为读入训练数据的脚本路径该脚本可以参考以下代码
```python ```python
# script_cpmc.py # script_cpmc.py
@ -217,6 +218,7 @@ def transform(data, num_sample: int, r: random.Random):
"output": _output, "output": _output,
} }
``` ```
## 单机训练 ## 单机训练
1. 修改/apps/fm9g_2b/train_configs/2.4b.json中的训练参数这一部分的参数设置会覆盖掉shell脚本中的相应部分。 1. 修改/apps/fm9g_2b/train_configs/2.4b.json中的训练参数这一部分的参数设置会覆盖掉shell脚本中的相应部分。
2. 修改FM_9G-master/FM_9G-master/apps/fm9g_2b/pretrain_dragonfly.sh中最后部分的训练参数如下所示 2. 修改FM_9G-master/FM_9G-master/apps/fm9g_2b/pretrain_dragonfly.sh中最后部分的训练参数如下所示
@ -227,19 +229,23 @@ RANK=0 #单机训练无需修改这个参数
MASTER_ENDPOINT=g3006 #该节点名称 MASTER_ENDPOINT=g3006 #该节点名称
MASTER_PORT=12345 #该节点端口,注意避免端口冲突 MASTER_PORT=12345 #该节点端口,注意避免端口冲突
``` ```
3. 激活自己的训练环境: 3. 激活自己的训练环境:
```shell ```shell
conda activate fm-9g conda activate fm-9g
``` ```
4. 指定要用的GPU 4. 指定要用的GPU
```shell ```shell
export CUDA_VISIBLE_DEVICES=0,1 export CUDA_VISIBLE_DEVICES=0,1
``` ```
5. 切换到fm9g_2b目录下运行训练脚本 5. 切换到fm9g_2b目录下运行训练脚本
```shell ```shell
cd FM_9G-master/FM_9G-master/apps/fm9g_2b cd FM_9G-master/FM_9G-master/apps/fm9g_2b
bash pretrain_dragonfly.sh bash pretrain_dragonfly.sh
``` ```
## 多机训练 ## 多机训练
需要保证机器之间能够通信且每台机器上的训练环境、代码、数据等一致。以下教程以使用slurm调度的算力平台为例。 需要保证机器之间能够通信且每台机器上的训练环境、代码、数据等一致。以下教程以使用slurm调度的算力平台为例。
常用的slurm命令包括 常用的slurm命令包括
@ -254,7 +260,9 @@ scancel 取消作业
scontrol 查看和修改作业参数 scontrol 查看和修改作业参数
sacct 查看已完成作业 sacct 查看已完成作业
``` ```
注意:#slurm的多节点通信与bmtrain的环境变量有冲突且srun不稳定推荐采用slurm提交多个单节点任务用torchrun的方式实现多节点通信。 注意:#slurm的多节点通信与bmtrain的环境变量有冲突且srun不稳定推荐采用slurm提交多个单节点任务用torchrun的方式实现多节点通信。
1. 参考以下代码编写主节点启动脚本run_master.sh 1. 参考以下代码编写主节点启动脚本run_master.sh
```shell ```shell
#!/bin/bash #!/bin/bash
@ -269,16 +277,19 @@ echo $MASTER_ADDR #可以在slurm-xxx.out中查看申请的主节点名称
while true;do while true;do
sleep 5s # sleep 5s #
``` ```
2. 启动主节点: 2. 启动主节点:
```shell ```shell
sbatch --nodelist g3002 run_master.sh sbatch --nodelist g3002 run_master.sh
``` ```
3. 登录主节点,激活训练环境: 3. 登录主节点,激活训练环境:
```shell ```shell
ssh g3002 #登录节点 ssh g3002 #登录节点
conda activate fm-9g #激活训练环境 conda activate fm-9g #激活训练环境
export CUDA_VISIBLE_DEVICES=0,1 #指定要用的GPU export CUDA_VISIBLE_DEVICES=0,1 #指定要用的GPU
``` ```
4. 修改主节点训练脚本:在/apps/fm9g_2b/pretrain_dragonfly.sh的最后修改主节点名称、端口、机器数量、GPU数量并将脚本重命名为pretrain_dragonfly_master.sh方便区分 4. 修改主节点训练脚本:在/apps/fm9g_2b/pretrain_dragonfly.sh的最后修改主节点名称、端口、机器数量、GPU数量并将脚本重命名为pretrain_dragonfly_master.sh方便区分
```shell ```shell
GPUS_PER_NODE=2 #本节点上要用的GPU数量 GPUS_PER_NODE=2 #本节点上要用的GPU数量
@ -287,12 +298,15 @@ export CUDA_VISIBLE_DEVICES=0,1 #指定要用的GPU
MASTER_ENDPOINT=g3002 #主节点名称 MASTER_ENDPOINT=g3002 #主节点名称
MASTER_PORT=12345 #主节点端口号,注意避免端口冲突 MASTER_PORT=12345 #主节点端口号,注意避免端口冲突
``` ```
5. 提交主节点训练脚本: 5. 提交主节点训练脚本:
```shell ```shell
cd FM_9G-master/FM_9G-master/apps/fm9g_2b cd FM_9G-master/FM_9G-master/apps/fm9g_2b
bash pretrain_dragonfly_master.sh bash pretrain_dragonfly_master.sh
``` ```
6. 启动从节点、激活训练环境,指定要用的卡,方法与主节点一样。 6. 启动从节点、激活训练环境,指定要用的卡,方法与主节点一样。
7. 修改从节点训练脚本将单机多卡的训练脚本重命名为pretrain_dragonfly_slave.sh在末尾修改主节点名称、端口、机器数量、GPU数量 7. 修改从节点训练脚本将单机多卡的训练脚本重命名为pretrain_dragonfly_slave.sh在末尾修改主节点名称、端口、机器数量、GPU数量
```shell ```shell
GPUS_PER_NODE=2 #本节点上要用的GPU数量 GPUS_PER_NODE=2 #本节点上要用的GPU数量
@ -301,13 +315,15 @@ bash pretrain_dragonfly_master.sh
MASTER_ENDPOINT=g3002 #主节点名称 MASTER_ENDPOINT=g3002 #主节点名称
MASTER_PORT=12345 #主节点端口号,注意避免端口冲突 MASTER_PORT=12345 #主节点端口号,注意避免端口冲突
``` ```
8. 提交从节点训练脚本: 8. 提交从节点训练脚本:
```shell ```shell
cd FM_9G-master/FM_9G-master/apps/fm9g_2b cd FM_9G-master/FM_9G-master/apps/fm9g_2b
bash pretrain_dragonfly_slave.sh bash pretrain_dragonfly_slave.sh
``` ```
9. 如果有三台及以上的机器重复6-8注意修改RANK编号 9. 如果有三台及以上的机器重复6-8注意修改RANK编号
10. 开始训练后每个iter的loss、lr等信息将在从节点上显示 10. 开始训练后每个iter的loss、lr等信息将在从节点上显示
## 参数详细介绍 ## 参数详细介绍
``` python ``` python
@ -390,6 +406,7 @@ args["use_checkpoint"]="0"
```shell ```shell
tensorboard -logdir /apps/fm9g_2b/data/tensorboard/2b_0701 #存放.events文件的路径 tensorboard -logdir /apps/fm9g_2b/data/tensorboard/2b_0701 #存放.events文件的路径
``` ```
2. 出现以下报错信息时说明protobuf版本过高重新装一个低版本的即可 2. 出现以下报错信息时说明protobuf版本过高重新装一个低版本的即可
```shell ```shell
TypeError: MessageToJson() got an unexpected keyword argument 'including_default_value_fields' TypeError: MessageToJson() got an unexpected keyword argument 'including_default_value_fields'
@ -445,6 +462,7 @@ if __name__ == "__main__":
import torch import torch
print(torch._C._GLIBCXX_USE_CXX11_ABI) print(torch._C._GLIBCXX_USE_CXX11_ABI)
``` ```
如果打印出来的结果是False则选择文件名中带有abiFALSE的版本否则选带有abiTRUE的版本。随后pip install +.whl文件名 即可。 如果打印出来的结果是False则选择文件名中带有abiFALSE的版本否则选带有abiTRUE的版本。随后pip install +.whl文件名 即可。
4. 导入flash-attn时报错undefined symbol: _ZN3c104cuda9SetDeviceEi。 4. 导入flash-attn时报错undefined symbol: _ZN3c104cuda9SetDeviceEi。
@ -454,6 +472,7 @@ if __name__ == "__main__":
```shell ```shell
error: Couldn't find a setup script in /tmp/easy_install-bgpiop4j/pandas-2.2.2.tar.gz error: Couldn't find a setup script in /tmp/easy_install-bgpiop4j/pandas-2.2.2.tar.gz
``` ```
这是因为pandas 2.2.2需要python3.9及以上的版本。在python3.8的环境下我们只需安装pandas 2.0.3版本即可。 这是因为pandas 2.2.2需要python3.9及以上的版本。在python3.8的环境下我们只需安装pandas 2.0.3版本即可。
6. 通过setup.py安装OpenDelta时报错 6. 通过setup.py安装OpenDelta时报错