[AIGC最佳实践] NPU Snt9B裸金属服务器训练并推理Baichuan2-7B模型

举报
modelarts-dev-server 发表于 2023/10/28 17:53:06 2023/10/28
【摘要】 1. 背景内容Baichuan2-7B 是由百川智能开发的一个开源可商用的大规模预训练语言模型,基于 Transformer 结构,在大约 1.2 万亿 tokens 上训练的 70 亿参数模型,支持中英双语,上下文窗口长度为 4096。本文主要介绍如何在单机8卡Snt9B裸金属服务器中对该模型进行微调训练。2. 环境准备模型支持的当前版本和主要库依赖如下表所示。python3.7torch...

1. 背景内容

Baichuan2-7B 是由百川智能开发的一个开源可商用的大规模预训练语言模型,基于 Transformer 结构,在大约 1.2 万亿 tokens 上训练的 70 亿参数模型,支持中英双语,上下文窗口长度为 4096。本文主要介绍如何在单机8卡Snt9B裸金属服务器中对该模型进行微调训练。

2. 环境准备

当前Snt9B裸金属服务器的最新规格如下表所示。

firmware 6.4.12.1.241
software 23.0.rc2.2

若当前Snt9B裸金属服务器预装的版本不是最新的发布版本,建议参考:Atlas800(鲲鹏920+昇腾Snt9处理器)环境配置指导的2.2节升级固件驱动版本到最新版本。

模型支持的当前版本和主要库依赖如下表所示。

python 3.7
torch 1.11.0
torch-npu 1.11.0
CANN 7.0.RC1
deepspeed 0.9.2

2.1 pyhton环境安装

通过conda管理python环境。

下载链接:https://repo.anaconda.com/miniconda/Miniconda3-py37_23.1.0-1-Linux-aarch64.sh

安装相关依赖:

pip3 install --upgrade pip
pip3 install einops sympy regex decorator scipy pandas rich setuptools-scm prompt-toolkit attrs accelerate sentencepiece transformers==4.28.1

2.2 安装deepspeed_npu

git clone https://gitee.com/ascend/DeepSpeed.git -b v0.9.2 deepspeed_npu
cd deepspeed_npu
pip3 install .

如果没有安装git,需要先安装:

yum -y install git-core
git config --global http.sslVerify false

2.3 安装昇腾torch及对应torch_npu插件

torch下载链接:https://gitee.com/link?target=https%3A%2F%2Frepo.huaweicloud.com%2Fkunpeng%2Farchive%2FAscend%2FPyTorch%2Ftorch-1.11.0-cp37-cp37m-linux_aarch64.whl

torch-npu下载链接:https://gitee.com/ascend/pytorch/releases/download/v5.0.rc3-pytorch1.11.0/torch_npu-1.11.0.post4_for_kunpeng.zip

安装:

pip3 install torch-1.11.0-cp37-cp37m-linux_aarch64.whl
pip3 install torch_npu-1.11.0.post4-cp37-cp37m-linux_aarch64.whl

2.4 安装指定版本的CANN

CANN需要满足支持BF16的条件这里选择7.0.RC1版本进行安装。

下载路径:https://support.huawei.com/enterprise/zh/ascend-computing/cann-pid-251168373/software/260809541

选择Ascend-cann-kernels-910b_7.0.RC1_linux.run和Ascend-cann-toolkit_7.0.RC1_linux-aarch64.run两个版本进行下载。

如果当前已经有CANN版本,先执行如下命令删除:

cd /usr/local/Ascend/ascend-toolkit/latest/aarch64-linux/script
./uninstall.sh

执行如下命令安装CANN:

bash ./Ascend-cann-toolkit_7.0.RC1_linux-aarch64.run --full
bash ./Ascend-cann-kernels-910b_7.0.RC1_linux.run --install

全部选择yes即可。

3. 模型准备

3.1  ModelZoo-pytorch源码下载

git clone --depth 1 https://gitee.com/ascend/ModelZoo-PyTorch.git

Baichuan2-7B所在的目录为:./ModelZoo-PyTorch/PyTorch/built-in/foundation/Baichuan2/7B,也即下文所指的源码包根目录。

3.2  替换transformers库中相关文件

将源码包根目录下transformers_modify文件夹中的各个文件分别替换到transformers库安装目录下的对应位置(基于transformers 4.28.1版本):

training_args.py -> transformers/training_args.py
trainer.py -> transformers/trainer.py
versions.py -> utils/versions.py

3.3  下载预训练模型

下载 Baichuan2-7B-Base的模型权重文件,用源码包根目录下的`Baichuan2-7B/modeling_baichuan.py`替换下载下来的模型权重文件夹中的`modeling_baichuan.py`文件。

3.4  下载训练数据集

下载外卖评论情感识别数据集waimai_10k

4. 训练

下面以外卖评论情感识别的任务为例,演示如何基于Baichuan2-7B模型完成全参微调。

4.1  训练数据预处理

将3.4节下载的数据集放在3.1节下载的源码包根目录下,运行源码包根目录下的make_data.py脚本将原始数据处理成处理成json格式,提取前10000条作为训练集train.jsonl,剩余样本作为验证集eval.jsonl,脚本生成的样本格式如下:

{"review": "11:30,的餐,下午三点才送到.,还是打百度投诉的结婚!", "label": "消极"}
{"review": "还不错,送货很快味道也还好", "label": "积极"}
{"review": "等了五十分钟,受不了的龟速", "label": "消极"}
{"review": "很快,很好", "label": "积极"}
{"review": "超级好超级好超级好啊", "label": "积极"}

4.2  修改训练脚本

模型训练脚本ds_run_bf16.sh参数说明如下:

 --model_name_or_path                       // 预训练参数路径 
 --train_data                               // 训练数据集路径 
 --eval_data                                // 验证数据集路径
 --bf16                                     // 参数使用bf16保存
 --output_dir                               // ckpt保存位置
 --num_train_epochs                         // 训练epoch数
 --per_device_train_batch_size              // 每张卡上的训练batch size
 --gradient_accumulation_steps              // 梯度累积的步数
 --gradient_checkpointing                   // 是否开启重计算 
 --save_strategy                            // ckpt保存策略
 --learning_rate                            // 学习率
 --weight_decay                             // weight decay策略 
 --warmup_ratio                             // warmup步数的比例
 --lr_scheduler_type                        // 学习率衰减方式
 --logging_steps                            // 训练日志打印间隔步数
 --tf32 False                               // 使用tf32训练,npu暂不支持  
 --model_max_length                         // 模型训练的sequence length
 --deepspeed                                // deepspeed配置脚本路径

其中,deepspeed参数说明如下:

 --bf16                                     // bf16训练相关配置 
 --optimizer                                // 优化器相关配置
 --zero_optimization                        // zero优化器相关配置
 --gradient_accumulation_steps              // 梯度累积步数
 --gradient_clipping                        // 梯度裁剪
 --train_batch_size                         // 训练batch size
 --train_micro_batch_size_per_gpu           // 训练micro batch size

需要将model_name_or_path参数指向3.3节下载的模型权重文件目录,并确保数据集在源码包根目录下的data目录内。

4.3  执行训练

 bash ./ds_run_bf16.sh    

如果一切正常,命令行会打印训练进度,并在训练完成后显示success:

训练完成后,权重文件默认保存在源码包根目录下的outputs目录下。

注:如果训练时出现如下报错,显示缺少libblas.so.3动态库:

说明缺少blas和lapack动态库, 这两个数学库是linux科学计算软件所需调用的,使用yum install安装。

5. 推理

5.1 修改推理脚本

修改test.py脚本,将原对话模型的路径指向指向3.3节下载的模型权重文件目录。

5.2 执行推理脚本

bash ./run_test.sh 

如果微调成功,可以看到类似下图的结果:


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。