From 441c79f807b8c5754bcc897d1684c92ebbe58a2b Mon Sep 17 00:00:00 2001 From: anrongqiao <17710054230@163.com> Date: Thu, 1 Aug 2024 10:34:47 +0800 Subject: [PATCH] fix single dataset error with exhaust --- .../training_tasks/pretrain_indexed.py | 3 + .../training_tasks/pretrain_indexed_9g.py | 5 +- .../055bf7ce-faab-403b-a7ee-896279bee11f.png | Bin 26507 -> 0 bytes quick_start_clean/readmes/README_ALL.md | 317 ------------------ .../readmes/README_DISTRIBUTED.md | 124 ------- quick_start_clean/readmes/README_ENV.md | 125 ------- quick_start_clean/readmes/README_LORA.md | 80 ----- quick_start_clean/readmes/quick_start.md | 22 ++ 8 files changed, 28 insertions(+), 648 deletions(-) delete mode 100644 quick_start_clean/readmes/055bf7ce-faab-403b-a7ee-896279bee11f.png delete mode 100644 quick_start_clean/readmes/README_ALL.md delete mode 100644 quick_start_clean/readmes/README_DISTRIBUTED.md delete mode 100644 quick_start_clean/readmes/README_ENV.md delete mode 100644 quick_start_clean/readmes/README_LORA.md diff --git a/FM_9G/fm9g/dragonfly/training_tasks/pretrain_indexed.py b/FM_9G/fm9g/dragonfly/training_tasks/pretrain_indexed.py index 8090896..afee738 100644 --- a/FM_9G/fm9g/dragonfly/training_tasks/pretrain_indexed.py +++ b/FM_9G/fm9g/dragonfly/training_tasks/pretrain_indexed.py @@ -618,6 +618,9 @@ class MixedIndexedDataset(torch.utils.data.IterableDataset): self.tasks[idx].exhaust = True self.remain -= 1 continue + + if step % self.update_weights_frequency == 0: + self.update_weights() step += 1 return dict( task_id=idx, diff --git a/FM_9G/fm9g/dragonfly/training_tasks/pretrain_indexed_9g.py b/FM_9G/fm9g/dragonfly/training_tasks/pretrain_indexed_9g.py index ca3e926..c097495 100644 --- a/FM_9G/fm9g/dragonfly/training_tasks/pretrain_indexed_9g.py +++ b/FM_9G/fm9g/dragonfly/training_tasks/pretrain_indexed_9g.py @@ -603,8 +603,6 @@ class MixedIndexedDataset(torch.utils.data.IterableDataset): idx = np.random.choice(len(self.weights), p=self.weights) data = next(self.tasks[idx]) - if step % self.update_weights_frequency == 0: - self.update_weights() if data is None: if self.tasks[idx].allow_repeat: # _runtime_ave = self.tasks[idx].ave_tokens @@ -619,6 +617,9 @@ class MixedIndexedDataset(torch.utils.data.IterableDataset): self.tasks[idx].exhaust = True self.remain -= 1 continue + + if step % self.update_weights_frequency == 0: + self.update_weights() step += 1 return dict( diff --git a/quick_start_clean/readmes/055bf7ce-faab-403b-a7ee-896279bee11f.png b/quick_start_clean/readmes/055bf7ce-faab-403b-a7ee-896279bee11f.png deleted file mode 100644 index 464691245e706b50f76c0c7c49541eaeb58fcaef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26507 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 pretrain.jsonl -``` -在本Quick Start教程中,已准备好jsonl数据,路径为raw_data/alpaca_zh.jsonl,示例如下: -```json -{"input": "<用户>保持健康的三个提示。", "output": "以下是保持健康的三个提示:\n\n1. 保持身体活动。每天做适当的身体运动,如散步、跑步或游泳,能促进心血管健康,增强肌肉力量,并有助于减少体重。\n\n2. 均衡饮食。每天食用新鲜的蔬菜、水果、全谷物和脂肪含量低的蛋白质食物,避免高糖、高脂肪和加工食品,以保持健康的饮食习惯。\n\n3. 睡眠充足。睡眠对人体健康至关重要,成年人每天应保证 7-8 小时的睡眠。良好的睡眠有助于减轻压力,促进身体恢复,并提高注意力和记忆力。"} -{"input": "<用户>三原色是什么?", "output": "三原色通常指的是红色、绿色和蓝色(RGB)。它们是通过加色混合原理创建色彩的三种基础颜色。在以发光为基础的显示设备中(如电视、计算机显示器、智能手机和平板电脑显示屏), 三原色可混合产生大量色彩。其中红色和绿色可以混合生成黄色,红色和蓝色可以混合生成品红色,蓝色和绿色可以混合生成青色。当红色、绿色和蓝色按相等比例混合时,可以产生白色或灰色。\n\n此外,在印刷和绘画中,三原色指的是以颜料为基础的红、黄和蓝颜色(RYB)。这三种颜色用以通过减色混合原理来创建色彩。不过,三原色的具体定义并不唯一,不同的颜色系统可能会采用不同的三原色。"} -``` - -#### 2. 数据二进制化 -为了提升数据读取的效率,方便进行大规模分布式预训练,我们以二进制的形式读取训练数据。因此,在训练开始前,需要将上一步准备好的jsonl格式的数据文件二进制化,需要的代码路径为quick_start/data_binarize.py,使用前需要将环境变量设置为您的本地路径: -```js -sys.path.insert(0, "/data/public/CPM-9G/9G-Train") -``` -以下是一个使用示例: -假设当前的数据在raw_data路径下:raw_data/alpaca_zh.jsonl -```js -python data_binarize.py --input [PATH to raw_data] --data_type json --output_path [PATH to raw_data_bin] --output_name data -``` -处理完成后,在输出路径(即OUTPUT PATH)下会生成data和meta.bin两个文件,其中data是二进制后的数据文件,meta.bin则记录了这份数据的规模、大小等信息,示例如下: -```js -{"file_name": "data", "block_begin": 0, "block_end": 45, "nbytes": 738321350, "nlines": 4432310, "mask": false, "block_size": 16777216} -``` -**请注意,当前的框架需要保证block_end数大于所用的GPU总数。** -例如,用32卡训练时,需满足block_end>32,如果文件较小,可以在二进制化之前对多个小文件进行拼接,以满足大规模训练的需求。 - -在本Quick Start中,我们为jsonl数据到二进制数据的转换过程准备了脚本: -``` python -for i in {1..10};do -cat raw_data/alpaca_zh.jsonl >> raw_data/alpaca_zh_repeat.jsonl -done -``` -``` shell -mkdir raw_data_repeat -mv raw_data/alpaca_zh_repeat.jsonl raw_data_repeat/data.jsonl - -python data_binarize.py --input raw_data_repeat --data_type json --output_path bin_data_repeat --output_name data -``` -#### 3. 准备数据读取脚本 -鉴于不同的预训练数据所包含的字段可能有所差别,我们还兼容了字段转换的环节,如果按照上述标准流程做的数据预处理,那么转换方式将十分简单,代码如下: -```js -# transform_script.py -import random - -def rand(n: int, r: random.Random): - return int(r.random() * n) - -def transform(data, num_sample: int, r: random.Random): - return {"input": data["input"], "output": data["output"]}我们还支持多个数据集的混合读入,并设置不同数据集的比例。为此,需要准备一个数据混合的json文件,来指导训练过程中的数据读取策略,示例如下: -[ - { - "dataset_name": "alpaca_zh", - "task_name": "alpaca_zh", - "weight": 1.0, - "path": "/data/public/CPM-9G/quick_start/bin_data_repeat", - "incontext_weight": [ - 1.0 - ], - "transforms": "/data/public/CPM-9G/quick_start/transform_data.py" - } -] -``` -该文件中各字段的解释如下: -- dataset_name:数据集名称; -- task_name:数据集所属任务,task_name+dataset_name 将作为训练过程中识别数据集的标签,task_name 则可用于训练过程中针对任务分别汇总 loss 信息、token 吞吐量等; -- weight:浮点数,采样权重;(注意此权重仅代表每个数据集的样本数配比,实际 token 吞吐量的配比还与每个样本的平均 token数量有关) -- path:meta.bin、二进制数据的父目录,即前文所述的 raw_data_bin; -- transforms:数据转换脚本对应的路径; -- incontext_weight: 训练样本叠加方式,[1.0] 表示 100% 的概率采样一个样本,[0.8, 0.2] 表示 80% 的概率采样一个样本, 20% 概率采样两个样本进行拼接,[0.75, 0.1, 0.15] 表示 15% 概率采样三个样本、 10% 的概率采样两个样本进行拼接、75% 采样一个样本; -- 数据集的配比(即 weight 参数)需要重点调整,对于模型的训练稳定性和最终在各类数据上的能力表现有重大影响; -- 我们在此文件中指定了数据文件的路径、转换脚本路径等信息,后续训练仅需要系统该文件的路径即可。 - -## 模型训练 -模型训练列举了三种训练 -- [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 -#9G-Train/apps/cpm9g/pretrain_cpm9g.py:17 -sys.path.insert(0, "/data/public/CPM-9G/9G-Train") -``` - -```shell -#! /bin/bash - -# use 8 GPU for example, pretrain may need 32 GPU -export MASTER_ADDR=`hostname` -export MASTER_PORT=12345 - -EXP_PATH=. # 修改为您的实验路径,用于存储训练日志和模型 -CODE_PATH=/data/public/CPM-9G/9G-Train # 修改为您的代码路径 -DATA_PATH=/data/public/CPM-9G/quick_start/datasets.json # 修改为您的datasets.json路径 -CHECKPOINT=/data/public/CPM-9G/models/model.pt # 修改为您的基座模型路径 - -mkdir -p ${EXP_PATH}/logs/debug -mkdir -p ${EXP_PATH}/logs/tensorboard/cpm9g/ -CONFIG_NAME="${CODE_PATH}/apps/cpm9g/config/" -# --------------- 运行参数 --------------- -OPTS="" -OPTS+=" --model-config ${CONFIG_NAME}/config.json" -OPTS+=" --vocab ${CONFIG_NAME}/vocab.txt" -OPTS+=" --batch-size 12" -OPTS+=" --train-iters 2000" # 训练步数,达到此步数后,学习率降到最小值 -OPTS+=" --save-iters 100" # 存储步数,每隔此步数,存储一个模型文件 -OPTS+=" --save-name cpm9g_checkpoint" # 模型名称前缀 -OPTS+=" --max-length 4096" # 最多token数量 -OPTS+=" --lr 1.5e-5" # 峰值学习率 -OPTS+=" --inspect-iters 100" # 检查步数,每隔此步数,输出一次模型梯度的详细信息 -OPTS+=" --warmup-iters 50" # 热启动步数 -OPTS+=" --lr-decay-style noam" # 学习率变化策略 -OPTS+=" --weight-decay 0.1" # 正则化参数 -OPTS+=" --clip-grad 1.0" # 正则化参数 -OPTS+=" --loss-scale 1048576" # 和训练稳定性相关,一般情况下不需修改 -OPTS+=" --loss-scale-steps 32" # 和训练稳定性相关,一般情况下不需修改 -OPTS+=" --offload" # 使用cpu offload将优化器参数转移到cpu,一般情况下无需修改 -OPTS+=" --flash cuda" - -# --------------- 写文件路径 --------------- -OPTS+=" --save ${EXP_PATH}/checkpoints/cpm9g/" -OPTS+=" --save-model ${EXP_PATH}/models/cpm9g/" - -OPTS+=" --log-dir ${EXP_PATH}/logs/train/" -OPTS+=" --tensorboard ${EXP_PATH}/tensorboard/cpm9g/"`date +"%Y%m%d%H%M%S"` - -# --------------- 读文件路径 --------------- -OPTS+=" --dataset ${DATA_PATH}" -OPTS+=" --load ${CHECKPOINT}" -OPTS+=" --start-step 1" - -# --------------- 透传参数 --------------- -OPTS+=" $@" - -# --------------- 最终指令 --------------- -CMD="torchrun --nnodes=1 --nproc_per_node=8 --rdzv_id=1 --rdzv_backend=c10d --rdzv_endpoint=${MASTER_ADDR}:${MASTER_PORT} ${CODE_PATH}/apps/cpm9g/pretrain_cpm9g.py ${OPTS}" -echo "${CMD}" -$CMD -``` - -### SFT全参数微调训练 -``` shell -export MASTER_ADDR=`hostname` -export MASTER_PORT=12345 - -CPM_PATH="/data/groups/QY_LLM_Core/arq_project/code/9G-Train" -CKPT_NAME="/data/public/anrongqiao/models/" -EXP_PATH=./exp/8b/ - -mkdir -p $EXP_PATH -MODEL_NAME="cpm9g-8b-sft" - -OPTS="" -OPTS+=" --model-config ${CKPT_NAME}/config.json" -OPTS+=" --vocab ${CKPT_NAME}/vocab.txt" - -OPTS+=" --train-iters 10000" # 训练步数,达到此步数后,学习率降到最小值 -OPTS+=" --inspect-iters 200" # 存储步数,每隔此步数,存储一个模型文件 -OPTS+=" --warmup-iters 20" # 热启动步数 - -OPTS+=" --lr-decay-style cosine" # 学习率变化策略 -OPTS+=" --weight-decay 0.1" # 正则化参数 -OPTS+=" --clip-grad 1.0" # 正则化参数 -OPTS+=" --loss-scale 1048576" # 和训练稳定性相关,一般情况下不需修改 -OPTS+=" --max-loss-scale 33554432" #和训练稳定性相关,一般情况下不需修改 -OPTS+=" --min-loss-scale 1" #和训练稳定性相关,一般情况下不需修改 -OPTS+=" --loss-scale-steps 32" # 和训练稳定性相关,一般情况下不需修改 - -OPTS+=" --offload" # 使用cpu offload将优化器参数转移到cpu,一般情况下无需修改 -OPTS+=" --batch-size 1" -OPTS+=" --max-length 4096" #上下文长度 -OPTS+=" --lr 1e-5" #学习率 -OPTS+=" --start-step 0" #初始steps -OPTS+=" --epoch 1" # 训练多少个epoch - -OPTS+=" --load ${CKPT_NAME}/model.pt" # 修改成自己的预训练模型 -OPTS+=" --dataset ../dataset/qy_sft_20230129_bin/" # 和pretrain脚本不同,sft数据量少,直接输入bin文件即可 -OPTS+=" --save ${EXP_PATH}/checkpoints" # 模型存储 -OPTS+=" --save-name ${MODEL_NAME}" #待存储模型的前缀 -OPTS+=" --tensorboard /data/logs/tensorboard/${MODEL_NAME}/${CUR_DATE}/" # -OPTS+=" --gradient-accumulation-steps 4" # 梯度累积更新步数 -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 -``` - -## 模型推理 -```python -import os - -from libcpm import CPM9G - -import argparse, json, os - -def main(): - parser = argparse.ArgumentParser() - parser.add_argument("--pt", type=str, help="the path of ckpt") - parser.add_argument("--config", type=str, help="the path of config file") - parser.add_argument("--vocab", type=str, help="the path of vocab file") - args = parser.parse_args() - - model_config = json.load(open(args.config, 'r')) - model_config["new_vocab"] = True - - model = CPM9G( - "", - args.vocab, - -1, - memory_limit = 30 << 30,#memory limit 左边的参数根据gpu的显存设置,如果是A100,可以设置为 72 << 30,这样的话就可以用到更多的显存 - model_config=model_config, - load_model=False, - ) - model.load_model_pt(args.pt) - - datas = [ - '''<用户>马化腾是谁?''', - '''<用户>你是谁?''', - '''<用户>我要参加一个高性能会议,请帮我写一个致辞。''', - ] - - for data in datas: - res = model.inference(data, max_length=4096) - print(res['result']) - -if __name__ == "__main__": - main() -``` - -## FAQs - -常见问题汇总,持续补充ing - -### 训练相关 -1 推荐大家使用docker,避免大家在conda 环境安装时候遇到的问题 -2 pretrain训练的脚本和sft训练的脚本基本类似,在apps/cpm_9g目录下 -3 尽量避免在window机器下修改脚本,window中的编码和格式linux是有差别的,容易在脚本执行中报错 -4 SFT如何调参训练 - ``` - 回答:如果数据量少于10w条,全参数微调的时候多训练几个epoch,把学习率调低一些,比如说5e-6等;更建议使用lora 微调的方式 - 数据量很多呢,比如说达到百万级别,那可以选择全参数微调,但训练最多2个epoch足够,注意过拟合的问题 - ``` -5 微调训练中,train_iters如何计算? - ``` - 回答:因为模型上下文是4096的token数目,通常情况存在训练数据不足4096的长度,所以会对多条数据进行merge,因此送入模型条数要少于实际的数据条数 - ``` -6 打印出来的Iter信息有缺失 - ``` - 回答:debug下看看是否是出现drop_last的情况 - ``` -7 现有代码是否需要验证集合? - ``` - 回答:不需要,参数中出现的val_datasets忽略即可 - ``` -8 加载模型遇到:invalid header or archive is carrupted,这种一般是模型没有下载完导致的,目前红山上的模型确定是完整的,首先自查自己的模型是否下载成功。 -9 存储模型的时候遇到failed write file data ,一般先检查下文件路径和权限、磁盘空间吧,存储模型基本不会报错 -10 是否支持图像模态: -``` - 回答:不支持图像模态,仅支持文本模态 -``` -### 数据相关 -1 历史对话的传入: -``` json -datas = [ - '''<用户>问题1答案1<用户>问题2答案2<用户>问题2''' - ] -``` - - -## TODO -1 发布8B-32k上下文的模型 \ No newline at end of file diff --git a/quick_start_clean/readmes/README_DISTRIBUTED.md b/quick_start_clean/readmes/README_DISTRIBUTED.md deleted file mode 100644 index 4043184..0000000 --- a/quick_start_clean/readmes/README_DISTRIBUTED.md +++ /dev/null @@ -1,124 +0,0 @@ -# 分布式多机训练 - - -- 首先保证机器之间能够通信 -- 每台机器上的训练环境、代码、数据等一致 - -## 简单模式 -这种方式只适用于机器很少的提交方法,比如说两台机器debug调试的时候可以如下操作 -以sft_cpm9g_8b.sh举例 -```shell -# 这儿指定主节点的IP值 -export MASTER_ADDR=g3002 - -#中间省略各种参数配置 - -#--nnodes 指定用几台机器,提交任务后主节点会一直等待通信满足4台机器,直到time out -#--nproc_per_node 每张机器多少张卡 -CMD="torchrun --nnodes=2 --nproc_per_node=8 --rdzv_id=1 --rdzv_backend=c10d --rdzv_endpoint=${MASTER_ADDR}:${MASTER_PORT} ${CPM_PATH}/apps/cpm9g/sft_cpm9g.py ${OPTS}" -``` -接下来,在这两个机器中都执行bash sft_cpm9g_8b.sh,这样就完成一次最简单的多机训练 -不过机器多了之后不推荐这种方式 - -## slurm 集群多机任务提交 - -算力平台使用Slurm调度,常用Slurm命令包括: -``` shell -Slurm命令 功能 -sinfo 查看集群分区状态 -squeue 查看作业队列 -srun, salloc 交互式运行作业 -sbatch 提交作业 -scancel 取消作业 -scontrol 查看和修改作业参数 -sacct 查看已完成作业 -``` - -### 单机任务 -参考脚本 -前面"#SBATCH"是Slurm配置参数,解释如下: -``` shell -●--partition: 使用的队列名称 -●--nodes: 节点数量,用多少台机器 -●--ntasks-per-node:每个节点的进程数,和每节点的GPU数量保持一致 -●--gres=gpu:8:每个节点分配的GPU数量 -●--cpus-per-task:每个任务分配的CPU数量(建议不要修改),该节点的cpu总数为任务数乘以每个任务的cpu数,这个示例脚本中的cpu总数为8x8=64 -``` - -#### 具体示例: - -train.sh: -``` -#!/bin/bash -#SBATCH --partition=gpu1 -#SBATCH --nodelist=g1001 -#SBATCH --nodes=1 -#SBATCH --ntasks-per-node=8 -#SBATCH --gres=gpu:8 -#SBATCH --cpus-per-task=8 - -python main.py -``` - -提交任务 -``` -sbatch train.sh -``` - -### 多机任务 -已测试通过torchrun的方式多机训练,需要设置"MASTER_ADDR"和"MASTER_PORT"两个环境变量,先提交一个主节点的任务,获取"MASTER_ADDR",在提交从节点任务。一个4台机器的多机任务的操作示例如下: - -注意:#SBATCH的nodes参数设置为1,slurm的多节点通信与bmtrain的环境变量有冲突,且srun不稳定,推荐采用slurm提交多个单节点任务,用torchrun的方式实现多节点通信。 - -##### 第一步:启动主节点 -train_master.sh: -``` -#!/bin/bash -#SBATCH --partition=gpu1 -#SBATCH --nodes=1 -#SBATCH --ntasks-per-node=8 -#SBATCH --gres=gpu:8 -#SBATCH --cpus-per-task=8 -MASTER_ADDR=`hostname` -MASTER_PORT=12345 -echo $MASTER_ADDR -torchrun --nnodes=4 --nproc_per_node=8 --rdzv_id=1 --rdzv_backend=c10d --rdzv_endpoint=${MASTER_ADDR}:${MASTER_PORT} train.py -``` - -提交主节点: -``` -sbatch train_master.sh -``` - -在输出的log(slurm-xxx.log)中查看主节点的名称,例如此时查到主节点是"g1001" - -##### 第二步:启动从节点 -train_slave.sh: -``` -#!/bin/bash -#SBATCH --partition=gpu1 -#SBATCH --nodes=1 -#SBATCH --ntasks-per-node=8 -#SBATCH --gres=gpu:8 -#SBATCH --cpus-per-task=8 -MASTER_ADDR=g1001 -MASTER_PORT=12345 -echo $MASTER_ADDR -torchrun --nnodes=4 --nproc_per_node=8 --rdzv_id=1 --rdzv_backend=c10d --rdzv_endpoint=${MASTER_ADDR}:${MASTER_PORT} train.py -``` - -提交从节点,示例是一个4台机器的任务,因此再提交3个从节点程序 -``` -for i in {1..3};do - sbatch train_slave.sh -done -``` - -## dockers上的多机提交任务 -dockers 容器上的多机任务和在主机上是相同的,只需要再其基础上满足两个要求 -- 在每个机器上拉取同样的docker和激活同样的训练环境,在docker共享的路径、数据、代码都一致 -- 在docker启动的时候保障 --network=host,和主机共享网络通信,只要机器之间能通信,在dockers中也可以通信和训练 - - -#### TODOs -1 完善K8s集群的分布式多机任务训练 \ No newline at end of file diff --git a/quick_start_clean/readmes/README_ENV.md b/quick_start_clean/readmes/README_ENV.md deleted file mode 100644 index 00457e4..0000000 --- a/quick_start_clean/readmes/README_ENV.md +++ /dev/null @@ -1,125 +0,0 @@ -#环境配置、算力资源 - - -# Docker使用 -我们提供可以运行模型训练和推理的docker,便于在新环境下快速使用九格大模型。您也可以使用Conda配置运行环境。Conda配置方式请见下一节。 -#### [docker 路径](https://qy-obs-6d58.obs.cn-north-4.myhuaweicloud.com/cpmlive-flash-0.0.4.tar) -## 镜像加载 -### rootless 启动 -允许用户在不影响主机系统的情况下运行应用程序和服务,并且可以轻松地共享和分发环境 -```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)** -运行成功的话,此时执行docker ps可以看到当前没有正在运行的容器,如果有正在运行的容器,说明rootless模式没有启动成功,请联系管理员。 - -### 加载镜像 -```shell -docker load -i cpmlive-flash-0.0.4.tar -docker tag [IMAGE_ID] cpmlive-flash:0.0.4 -``` - -如果加载镜像遇到:archive/tar invailid tar header的问题,是因为docker下载不全,check下docker下载结果。以红山上上传的docker为准 - -### 启动容器 -``` -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权限、且rootless执行错误的情况下,可以尝试下非rootless启动 - -## 非rootless 启动 -### 启动容器 -``` -docker run -it -d -v [HOST_PATH1]:[DOCKER_PATH1] -v [HOST_PATH2]:[DOCKER_PATH2] --gpus all --network host --shm-size=4g cpmlive-flash:0.0.4 bash -``` - -参数解释如下: -- -v [HOST_PATH1]:[DOCKER_PATH1]: 这个选项用于将主机(宿主机)文件系统中的目录或文件挂载到容器中的目录。[HOST_PATH1] 是主机路径,[DOCKER_PATH1] 是容器中对应的路径; -- --gpus all: 这个选项用于在容器中启用 GPU 支持,并将所有可用的 GPU 分配给容器。需要在 Docker 守护程序中启用 NVIDIA Container Toolkit 才能使用此选项; -- --network host: 这个选项用于让容器共享主机网络命名空间,使容器可以直接访问主机上的网络接口和服务; -- --shm-size 容器的share memory,根据主机的情况设置,如果训练推理需要的内存比较多,可以增大share memory值; -### 进入容器 -```shell -docker exec -it [CONTAINER_ID] bash -``` -### 退出容器 -```shell -Ctrl+d -``` -### 删除容器 -```shell -docker stop [CONTAINER_ID] -``` -### 查看正在运行容器 -```shell -docker ps -``` -### 环境安装 -```shell -pip install tensorboardX -``` - -## Conda环境配置 -### 训练环境配置 -```shell -1. 使用python 3.8.10创建conda环境 -conda create -n cpm-9g python=3.8.10 - -2.安装Pytorch -conda install pytorch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 pytorch-cuda=11.6 -c pytorch -c nvidia - -3. 安装BMTrain -pip install bmtrain==0.2.3.post2 - -4. 安装flash-attn -pip install flash-attn==2.0.8 - -5. 安装其他依赖包 -pip install einops -pip install pytrie -``` - -如果需要自己配置conda的训练,供参考的配置: -驱动版本:Driver Version: 470.57.02 -cuda:11.4-11.6之间都可以 - -### 推理环境配置 -```js -1. 安装nvidia-nccl -pip install nvidia-nccl-cu11==2.19.3 - -2. 配置环境变量 -nccl_root=`python -c "import nvidia.nccl;import os; print(os.path.dirname(nvidia.nccl.__file__))"` -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$nccl_root/lib -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| -| 百亿模型 |显存 |训练:49G, 推理:20G| -| 千亿模型 |内存 |训练: 200G, 推理:2G| -| 千亿模型 |显存 |训练: 8*80G , 推理:4 * 50G| - -另外 -- 该表格是百亿、千亿模型需要的最小的资源,batch size为1. -- 百亿模型是在单卡A100上测试 -- 千亿的训练是用8卡A100,但是训到过程中out of memory,所以建议至少用2台A100或者至少两台 -- 千亿的推理是用4卡A100训练 diff --git a/quick_start_clean/readmes/README_LORA.md b/quick_start_clean/readmes/README_LORA.md deleted file mode 100644 index 7e228a2..0000000 --- a/quick_start_clean/readmes/README_LORA.md +++ /dev/null @@ -1,80 +0,0 @@ -# Lora 训练 - -## lora 训练脚本 - -``` shell -#! /bin/bash - -#!/bin/bash -#SBATCH --partition=gpu3 -#SBATCH --nodes=1 -#SBATCH --nodelist=g3005 -#SBATCH --ntasks-per-node=4 -#SBATCH --gres=gpu:4 -#SBATCH --cpus-per-task=4 -#SBATCH --mem=512GB - -export MASTER_ADDR="localhost" -export MASTER_PORT=12347 - -CPM_PATH="/home/wangxvjia/CPM-onlyllama" -EXP_PATH=/home/wangxvjia/9g_models/cpm_fin_new_1e4 -MODEL_NAME="9g-finance-sft" - -OPTS="" -OPTS+=" --vocab /home/wangxvjia/9g_models/vocab.txt" -OPTS+=" --model-config /home/wangxvjia/9g_models/config.json" - -OPTS+=" --train-iters 695" -OPTS+=" --inspect-iters 2000" -OPTS+=" --warmup-iters 20" - -OPTS+=" --lr-decay-style cosine" -OPTS+=" --weight-decay 0.01" -OPTS+=" --clip-grad 1.0" -OPTS+=" --loss-scale 1048576" -OPTS+=" --max-loss-scale 33554432" -OPTS+=" --min-loss-scale 1" -OPTS+=" --loss-scale-steps 32" - -OPTS+=" --offload" -OPTS+=" --batch-size 2" -OPTS+=" --max-length 4096" -OPTS+=" --lr 3e-4" -OPTS+=" --start-step 0" -OPTS+=" --epoch 4" -OPTS+=" --load /data/groups/QY_LLM_Other/anrongqiao/UltraEval/caterpillar_8b_checkpoint-22000-float16.pt" -OPTS+=" --dataset /home/wangxvjia/molora/data_process/fin_9g/train_data_30000" -# TODO 这些 /data 在启元机器上需要改成 /home 下的路径 -OPTS+=" --save ${EXP_PATH}/checkpoints" -OPTS+=" --save-name ${MODEL_NAME}" - -OPTS+=" --delta-tuning" -OPTS+=" --delta-type lora" -OPTS+=" --lora-r 64" # 常用的lora 参数 -OPTS+=" --lora-dropout 0.05" -OPTS+=" --lora-alpha 64" # 常用的lora alpha 参数 -OPTS+=" --lora-layer project_q project_v project_k w_0 w_1 w_out" -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_delta.py ${OPTS}" - -echo "${CMD}" -$CMD -``` - -## 合并模型 -- 将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 推理 - -合并后的lora模型可以直接采用基础模型推理代码 -见[quick start](https://www.osredm.com/jiuyuan/CPM-9G-8B/tree/master/quick_start_clean/readmes/README_ALL.md) - - diff --git a/quick_start_clean/readmes/quick_start.md b/quick_start_clean/readmes/quick_start.md index ac742e6..1d312ab 100644 --- a/quick_start_clean/readmes/quick_start.md +++ b/quick_start_clean/readmes/quick_start.md @@ -70,6 +70,7 @@ ``` --> ## 环境配置 +### conda 环境安装 ```shell 1. 使用python 3.8.10创建conda环境 conda create -n fm-9g python=3.8.10 @@ -112,6 +113,27 @@ pip install tensorboardX [vllm-0.5.0.dev0+cu122-cp310-cp310-linux_x86_64.whl](https://qy-obs-6d58.obs.cn-north-4.myhuaweicloud.com/vllm-0.5.0.dev0%2Bcu122-cp310-cp310-linux_x86_64.whl) 同时,我们也提供了vllm源码,位于/quick_start_clean/tools/vllm-0.5.0.dev0.tar ``` +### docker环境 + +我们提供了打包好的镜像,[镜像下载](https://qy-obs-6d58.obs.cn-north-4.myhuaweicloud.com/9g.0.0.13.tar) +镜像使用方法: +``` shell +1 启动镜像权限,有root权限 +systemctl start docker + +2 加载镜像 +dockr load -i 9g.0.0.13.tar +docker tag 【IMAGE ID】9g:0.0.13 + +3 启动镜像 +docker run -it -d -v [HOST_PATH1]:[DOCKER_PATH1] -v [HOST_PATH2]:[DOCKER_PATH2] --gpus all --shm-size=50g --network host cpmlive-flash:0.0.4 bash + +4 进入镜像: +docker exec -it 【CONTAINER ID】 /bin/bash + +5 退出镜像 +CTRP + d +``` ## 开源模型 1. 8B的百亿SFT模型,v2版本是在v1基础上精度和对话能力的优化模型,下载链接: