This commit is contained in:
anrongqiao 2024-10-10 16:27:00 +08:00
commit d0e90e99ff
5 changed files with 64 additions and 40 deletions

View File

@ -51,3 +51,4 @@
<video src="https://qy-obs-6d58.obs.cn-north-4.myhuaweicloud.com/%E8%AF%BE%E7%A8%8B%E8%A7%86%E9%A2%91/400_0121.mp4
" width="800px" height="600px" controls="controls"></video>
[大语言模型驱动的多智能体协作与演化-PPT](https://qy-obs-6d58.obs.cn-north-4.myhuaweicloud.com/%E8%AF%BE%E7%A8%8B%E8%A7%86%E9%A2%91/9.%E5%A4%A7%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B%E9%A9%B1%E5%8A%A8%E7%9A%84%E5%A4%9A%E6%99%BA%E8%83%BD%E4%BD%93%E5%8D%8F%E4%BD%9C%E4%B8%8E%E6%BC%94%E5%8C%96-PPT.pdf)

View File

@ -1,18 +1,22 @@
# 九格大模型使用文档
## 目录
- [环境配置](https://www.osredm.com/jiuyuan/CPM-9G-8B/tree/master/quick_start_clean/readmes/README_ALL.md?tab=readme-ov-file#环境配置)
- [开源模型](https://www.osredm.com/jiuyuan/CPM-9G-8B/tree/master/quick_start_clean/readmes/README_ALL.md?tab=readme-ov-file#开源模型)
- [数据构建](https://www.osredm.com/jiuyuan/CPM-9G-8B/tree/master/quick_start_clean/readmes/README_ALL.md?tab=readme-ov-file#数据构建)
- [模型训练](https://www.osredm.com/jiuyuan/CPM-9G-8B/tree/master/quick_start_clean/readmes/README_ALL.md?tab=readme-ov-file#模型训练)
- [模型推理](https://www.osredm.com/jiuyuan/CPM-9G-8B/tree/master/quick_start_clean/readmes/README_ALL.md?tab=readme-ov-file#模型推理)
- [多机训练](https://www.osredm.com/jiuyuan/CPM-9G-8B/tree/master/quick_start_clean/readmes/README_DISTRIBUTED.md)
- [FAQs](https://www.osredm.com/jiuyuan/CPM-9G-8B/tree/master/quick_start_clean/readmes/README_ALL.md?tab=readme-ov-file#FAQs)
帮助您快速了解CPM-9G的使用我们准备了一个快速入门教程目标是基于CPM-9G基座模型通过指令微调的方式构建一个Chat模型。
## 环境配置:
[环境配置、硬件信息](https://www.osredm.com/jiuyuan/CPM-9G-8B/tree/master/quick_start_clean/readmes/README_ENV.md)
[环境配置、算力资源](https://www.osredm.com/jiuyuan/CPM-9G-8B/tree/master/quick_start_clean/readmes/README_ENV.md)
## 开源模型
1 目前启元开源了80B的百亿SFT模型模型的路径[百亿SFT开源模型](https://qy-obs-6d58.obs.cn-north-4.myhuaweicloud.com/checkpoints-epoch-1.tar.gz)
1 目前启元开源了80B的百亿SFT模型v2版本是在v1基础上精度和对话能力的优化模型下载链接
[8b_v1版本](https://qy-obs-6d58.obs.cn-north-4.myhuaweicloud.com/checkpoints-epoch-1.tar.gz), [8b_v2版本](https://qy-obs-6d58.obs.cn-north-4.myhuaweicloud.com/sft_8b_v2.zip)
## 使用教程
为了帮助您快速了解CPM-9G的使用我们准备了一个快速入门教程目标是基于CPM-9G基座模型通过指令微调的方式构建一个Chat模型。
## 数据
## 数据构建
本教程使用的数据是Alpaca Zh一个开源中文指令微调数据集。[数据集](https://github.com/Instruction-Tuning-with-GPT-4/GPT-4-LLM/blob/main/data/alpaca_gpt4_data_zh.json)
@ -105,7 +109,12 @@ def transform(data, num_sample: int, r: random.Random):
- 我们在此文件中指定了数据文件的路径、转换脚本路径等信息,后续训练仅需要系统该文件的路径即可。
## 模型训练
模型训练列举了三种训练
- [pretrain训练](https://www.osredm.com/jiuyuan/CPM-9G-8B/tree/master/quick_start_clean/readmes/README_ALL.md?tab=readme-ov-file#pretrain训练)
- [SFT全参数微调训练](https://www.osredm.com/jiuyuan/CPM-9G-8B/tree/master/quick_start_clean/readmes/README_ALL.md?tab=readme-ov-file#SFT全参数微调训练)
- [LoRA微调训练](https://www.osredm.com/jiuyuan/CPM-9G-8B/tree/master/quick_start_clean/readmes/README_LORA.md)
### pretrain训练
模型训练代码的位置9G-Train/apps/cpm9g/pretrain_cpm9g.py
需要将代码中环境变量设置为您的代码路径:
``` python
@ -113,7 +122,6 @@ def transform(data, num_sample: int, r: random.Random):
sys.path.insert(0, "/data/public/CPM-9G/9G-Train")
```
### pretrain shell脚本
```shell
#! /bin/bash
@ -170,9 +178,8 @@ echo "${CMD}"
$CMD
```
### sft 训练shell 脚本
### SFT全参数微调训练
``` shell
export MASTER_ADDR=`hostname`
export MASTER_PORT=12345
@ -218,12 +225,8 @@ OPTS+=" $@"
CMD="torchrun --nnodes=1 --nproc_per_node=8 --rdzv_id=1 --rdzv_backend=c10d --rdzv_endpoint=${MASTER_ADDR}:${MASTER_PORT} ${CPM_PATH}/apps/cpm9g/sft_cpm9g.py ${OPTS}"
echo "${CMD}"
$CMD
```
### lora 训练
[lora 训练](https://www.osredm.com/jiuyuan/CPM-9G-8B/tree/master/quick_start_clean/readmes/README_LORA.md)
## 模型推理
```python
import os
@ -266,9 +269,6 @@ if __name__ == "__main__":
main()
```
## 分布式多机训练
[分布式多机训练](https://www.osredm.com/jiuyuan/CPM-9G-8B/tree/master/quick_start_clean/readmes/README_DISTRIBUTED.md)
## FAQs
常见问题汇总持续补充ing
@ -279,12 +279,12 @@ if __name__ == "__main__":
3 尽量避免在window机器下修改脚本window中的编码和格式linux是有差别的容易在脚本执行中报错
4 SFT如何调参训练
```
回答如果数据量少于10w条多训练几个epoch把学习率调低一些比如说5e-6等
数据量很多呢训练最多2个epoch足够注意过拟合的问题
回答如果数据量少于10w条全参数微调的时候多训练几个epoch把学习率调低一些比如说5e-6等更建议使用lora 微调的方式
数据量很多呢,比如说达到百万级别,那可以选择全参数微调,但训练最多2个epoch足够注意过拟合的问题
```
5 微调训练中train_iters如何计算
```
回答因为模型上下文是4096的token数目通常情况存在训练数据不足4096的长度所以会对多条数据进行merge送入模型的数据量会少于1000条
回答因为模型上下文是4096的token数目通常情况存在训练数据不足4096的长度所以会对多条数据进行merge因此送入模型条数要少于实际的数据条数
```
6 打印出来的Iter信息有缺失
```
@ -294,10 +294,12 @@ if __name__ == "__main__":
```
回答不需要参数中出现的val_datasets忽略即可
```
8 Lora 推理需要进行merge 模型后预测五一后release该代码
9 加载模型遇到invalid header or archive is carrupted这种一般是模型没有下载完导致的目前红山上的模型确定是完整的首先自查自己的模型是否下载成功。
10 存储模型的时候遇到failed write file data ,一般先检查下文件路径和权限、磁盘空间吧,存储模型基本不会报错
8 加载模型遇到invalid header or archive is carrupted这种一般是模型没有下载完导致的目前红山上的模型确定是完整的首先自查自己的模型是否下载成功。
9 存储模型的时候遇到failed write file data ,一般先检查下文件路径和权限、磁盘空间吧,存储模型基本不会报错
10 是否支持图像模态:
```
回答:不支持图像模态,仅支持文本模态
```
### 数据相关
1 历史对话的传入:
``` json
@ -308,5 +310,4 @@ datas = [
## TODO
1 发布最新训练的80B SFT模型
2 Lora相关的代码更新
1 发布8B-32k上下文的模型

View File

@ -20,7 +20,7 @@ CMD="torchrun --nnodes=2 --nproc_per_node=8 --rdzv_id=1 --rdzv_backend=c10d --rd
接下来在这两个机器中都执行bash sft_cpm9g_8b.sh这样就完成一次最简单的多机训练
不过机器多了之后不推荐这种方式
### slurm 集群多机任务提交
## slurm 集群多机任务提交
算力平台使用Slurm调度常用Slurm命令包括
``` shell
@ -114,6 +114,11 @@ for i in {1..3};do
done
```
## dockers上的多机提交任务
dockers 容器上的多机任务和在主机上是相同的,只需要再其基础上满足两个要求
- 在每个机器上拉取同样的docker和激活同样的训练环境在docker共享的路径、数据、代码都一致
- 在docker启动的时候保障 --network=host和主机共享网络通信只要机器之间能通信在dockers中也可以通信和训练
#### TODOs
1 完善dockers、K8s集群的分布式多机任务训练
1 完善K8s集群的分布式多机任务训练

View File

@ -1,3 +1,6 @@
#环境配置、算力资源
# Docker使用
我们提供可以运行模型训练和推理的docker便于在新环境下快速使用九格大模型。您也可以使用Conda配置运行环境。Conda配置方式请见下一节。
#### [docker 路径](https://qy-obs-6d58.obs.cn-north-4.myhuaweicloud.com/cpmlive-flash-0.0.4.tar)
@ -7,10 +10,11 @@
```shell
srun -p gpu1 --nodelist=g2001 -N 1 -n 8 -c 8 --gres=gpu:8 --pty bash
module load rootless-docker/default
start_rootless_docker.sh
```
**注意使用bash不能用zsh**
start_rootless_docker.sh运行成功的话此时执行docker ps可以看到当前没有正在运行的容器如果有正在运行的容器说明rootless模式没有启动成功请联系管理员。
运行成功的话此时执行docker ps可以看到当前没有正在运行的容器如果有正在运行的容器说明rootless模式没有启动成功请联系管理员。
### 加载镜像
```shell
@ -22,7 +26,7 @@ docker tag [IMAGE_ID] cpmlive-flash:0.0.4
### 启动容器
```
docker run -it -d -v [HOST_PATH1]:[DOCKER_PATH1] -v [HOST_PATH2]:[DOCKER_PATH2] --gpus all --shm-size=4g --sh cpmlive-flash:0.0.4 bash
docker run -it -d -v [HOST_PATH1]:[DOCKER_PATH1] -v [HOST_PATH2]:[DOCKER_PATH2] --gpus all --shm-size=4g cpmlive-flash:0.0.4 bash
```
如果有docker权限、且rootless执行错误的情况下可以尝试下非rootless启动
@ -53,6 +57,10 @@ docker stop [CONTAINER_ID]
```shell
docker ps
```
### 环境安装
```shell
pip install tensorboardX
```
## Conda环境配置
### 训练环境配置
@ -90,7 +98,19 @@ echo $LD_LIBRARY_PATH2. 安装LibCPM
pip installlibcpm-1.0.0-cp38-cp38-linux_x86_64.whl
```
# 硬件资源
# 算力资源
## 推荐配置:
### 千亿大模型
- 预训练、全参数微调8 * 512G以上内存64 * 80G以上显存
- 高效微调LoRA与推理: 512G 以上内存8 * 80G以上显存
### 百亿大模型
- 预训练、全参数微调2 * 512G以上内存16 * 80G以上显存
- 高效微调LoRA与推理: 128G 以上内存2 * 80G以上显存
## 极限配置
最极限的资源配置,仅供参考,在大模型训练中其实并不推荐,因为其效果一般不佳,训练时长也比较久
| 模型 | 资源 | 最小算力 |
| :-------- | :----- | :----: |
| 百亿模型 |内存 |训练:140G, 推理:1G|
@ -98,7 +118,6 @@ pip installlibcpm-1.0.0-cp38-cp38-linux_x86_64.whl
| 千亿模型 |内存 |训练: 200G, 推理:2G|
| 千亿模型 |显存 |训练: 8*80G , 推理:4 * 50G|
另外
- 该表格是百亿、千亿模型需要的最小的资源batch size为1.
- 百亿模型是在单卡A100上测试

View File

@ -60,19 +60,17 @@ OPTS+=" --save-origin-model"
OPTS+=" $@"
CMD="torchrun --nnodes=1 --nproc_per_node=2 --rdzv_id=1 --rdzv_backend=c10d --rdzv_endpoint=${MASTER_ADDR}:${MASTER_PORT} ${CPM_PATH}/apps/cpm9g/sft_cpm9g.py ${OPTS}"
CMD="torchrun --nnodes=1 --nproc_per_node=2 --rdzv_id=1 --rdzv_backend=c10d --rdzv_endpoint=${MASTER_ADDR}:${MASTER_PORT} ${CPM_PATH}/apps/cpm9g/sft_cpm9g_delta.py ${OPTS}"
echo "${CMD}"
$CMD
```
## 合并模型
训练好的lora delta model一般有两种方式
- 在直接含有lora的推理代码进行推理
- 将lora delta model参数和original model merge在一起 作为新的模型,但是模型的参数数量并没有增多
```python
python merge_lora_delta.py --base_path cpm9g-8b-sft.pt --delta_path cpm9g-lora.pt --merge_path cpm9g-8b-sft_with_lora.pt
```
# lora 推理