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

您所在的位置:网站首页 docker网站没有https镜像 Windows环境使用Docker本地部署和微调CPM

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

2023-07-02 14:21| 来源: 网络整理| 查看: 265

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

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

拉取pytorch镜像

CPM-Bee要求torch版本为torch>=1.10,>> 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": "蜀道难:", "": {"": ""}}, ]

重新运行text_generation.py

image-20230626185227395

微调 准备数据集

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

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

数据如下:

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

image-20230626195509298

处理数据集 python preprocess_dataset.py --input data --output_path bin_data --output_name ccpm_data

处理后的数据如下:

image-20230626195530262

进行微调

修改微调脚本

#! /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

理论上来说,这里等微调结束就好了,但我这次跑了十多个小时,跑到100个epoch损失率下降开始变得超级慢,因为参数里指定了只跑100个epoch,所以直接停了啥都没输出,下一步准备还是在服务器上再试试,且听下回分解吧..



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3