Windows环境使用Docker本地部署和微调CPM-Bee

Windows环境使用Docker本地部署和微调CPM-Bee

这几天想尝试下OPENBMB的CPM-Bee模型,本来打算在临时买的腾讯云GPU服务器上跑一下,但是安装依赖的时候发现一堆奇怪的问题,看了下github的issue,大部分都是bmtrain安装出现问题,且由于他使用的torch版本比较旧,不支持2.0.0+,所以只能改为尝试在本地docker隔离环境跑通再说.

拉取pytorch镜像

CPM-Bee要求torch版本为torch>=1.10,<2.0.0,所以我们选用pytorch/pytorch:1.13.1-cuda11.6-cudnn8-devel这个镜像,容器有8.69GB比较大,下载需要不少时间。

docker pull pytorch/pytorch:1.13.1-cuda11.6-cudnn8-devel

运行容器

# 这里我把下载好的模型挂载上去了
docker run --gpus all -it --name cpm_bee -d -v .\cpm-bee\:/root/models/cpm-bee/ -p 7860:7860 pytorch/pytorch:1.13.1-cuda11.6-cudnn8-devel

准备环境

安装必要的一些工具

# 更换软件源
sed -i 's/security.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
apt update
# 安装ninjia-build是因为镜像没有自带这个,但是有这个pip install会快一些
apt install -y git curl wget vim ninjia-build
# 设置国内pip源
pip config set global.index-url https://mirrors.cloud.tencent.com/pypi/simple

验证环境可用

  1. 验证CUDA可用
nvcc -V

输出如下说明可用

image-20230626171525708

  1. 验证显卡挂载情况
nvidia-smi

image-20230626171633139

  1. 跑一下代码看看
root@d77e1bb69e71:~# python
Python 3.10.8 (main, Nov  4 2022, 13:48:29) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.cuda.is_available()
True

下载代码

这里我用了github的代理

git clone https://ghproxy.com/https://github.com/OpenBMB/CPM-Bee.git

安装依赖

cd src
pip install -r requirements.txt

这里可能会遇到如下报错:

image-20230626173742289

这是因为没有指定CUDA_HOME环境变量,修改.bashrc配置文件,添加这个配置即可

export CUDA_HOME="/usr/local/cuda"

测试文本生成任务

修改text_generation.py的模型路径配置,这里我是修改使用了2b的模型

config = CPMBeeConfig.from_json_file("config/cpm-bee-2b.json")
ckpt_path = "/root/models/cpm-bee/2b/cpm-bee-2b-ckpt.pt"

运行text_generation.py

python text_generation.py

可以看到输出

image-20230626185111671

修改文本输入

data_list = [
    {"document": "蜀道难:<mask_0>", "<ans>": {"<mask_0>": ""}},
]

重新运行text_generation.py

image-20230626185227395

微调

准备数据集

以下是提供的整理好的数据集示例,我们将所有的json数据集放到data目录

{"input": "人常会不自觉地记下对自己有利的部分,这是形成委屈的重要原因。", "prompt":"问答", "question": "人们为何常常感到委屈?", "<ans>":"人常会不自觉地记下对自己有利的部分,这是形成委屈的重要原因。"}

数据如下:

原始数据为54条,我将其分隔为46条训练数据和8条验证数据,分别放到bin_data/trainbin_data/eval文件夹

image-20230626195509298

处理数据集

python preprocess_dataset.py --input data --output_path bin_data --output_name ccpm_data

处理后的数据如下:

image-20230626195530262

进行微调

  1. 修改微调脚本

    #! /bin/bash
    # 使用哪些gpu训练
    export CUDA_VISIBLE_DEVICES=0
    # export CUDA_VISIBLE_DEVICES=0,1,2,3
    # 每个节点多少个gpu
    GPUS_PER_NODE=4
    
    NNODES=1
    MASTER_ADDR="localhost"
    MASTER_PORT=12345
    
    OPTS=""
    # 增量微调
    OPTS+=" --use-delta"
    # 模型配置
    OPTS+=" --model-config config/cpm-bee-2b.json"
    # 训练集位置
    OPTS+=" --dataset /root/CPM-Bee/src/bin_data/train"
    # 验证集位置
    OPTS+=" --eval_dataset /root/CPM-Bee/src/bin_data/eval"
    # 训练epoch数
    OPTS+=" --epoch 1000"
    # 数据批次大小
    OPTS+=" --batch-size 5"
    # 用于lr_schedular
    OPTS+=" --train-iters 100"
    # 保存名称
    OPTS+=" --save-name cpm_bee_2b_finetune"
    # 最大长度
    OPTS+=" --max-length 2048"
    # 保存路径
    OPTS+=" --save results/"
    # 学习率
    OPTS+=" --lr 0.0001"
    # 每100个step进行一次检查(bmtrain inspect)
    OPTS+=" --inspect-iters 100"
    # 预热学习率的步数为1
    OPTS+=" --warmup-iters 1"
    # 每50步验证一次
    OPTS+=" --eval-interval 1000"
    # 如果验证集loss连续5次不降,停止微调
    OPTS+=" --early-stop-patience 5"
    # 选择noam方式调度学习率
    OPTS+=" --lr-decay-style noam"
    # 优化器权重衰减率为0.01
    OPTS+=" --weight-decay 0.01"
    # 半精度训练的grad clip
    OPTS+=" --clip-grad 1.0"
    # 半精度训练的loss scale
    OPTS+=" --loss-scale 32768"
     # 用于加载lr_schedular的中间状态
    OPTS+=" --start-step 0"
    # 模型参数文件
    OPTS+=" --load /root/models/cpm-bee/2b/cpm-bee-2b-ckpt.pt"
    
    CMD="torchrun --nnodes=${NNODES} --nproc_per_node=${GPUS_PER_NODE} --rdzv_id=1 --rdzv_backend=c10d --rdzv_endpoint=${MASTER_ADDR}:${MASTER_PORT} finetune_cpm_bee.py ${OPTS}"
    
    echo ${CMD}
    $CMD
    
  2. 理论上来说,这里等微调结束就好了,但我这次跑了十多个小时,跑到100个epoch损失率下降开始变得超级慢,因为参数里指定了只跑100个epoch,所以直接停了啥都没输出,下一步准备还是在服务器上再试试,且听下回分解吧..

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYAP5cBa' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片