minicpm_pytorch 对话问答算法模型

MiniCPM

2B小钢炮碾压Mistral-7B,消费级显卡可训练,超过或持平大部分7B规模模型,超越部分10B以上的模型,主体语言模型MiniCPM-2B仅有24亿(2.4B)的非词嵌入参数量, 总计2.7B参数量,整体性能超越 Llama2-13B、MPT-30B、Falcon-40B 等模型,以下步骤适于finetune及其推理。

论文

未发表论文

模型结构

minicpm基于原始transformer decoder结构进行魔改而成,细节请见代码,先对文本进行分词,并将每个词转换为词向量表示,然后通过多组attention和全连接层结构FeedForward提取特征,最后采用全连接层结构MLP改变输入张量的形状获得生成结果,为了进一步提供预测的准确率加入了强化学习DPO进行人类偏好对齐。

算法原理

minicpm算法主要将转换成向量的分词用qkv自相关和全连接层提取特征,然后利用全连接层输出监督训练结果,本算法进行大量细节上的魔改组合,具体算法原理可参考下图原始transformer模型结构右侧decoder部分进行初步理解。

环境配置

mv minicpm_pytorch MiniCPM # 去框架名后缀

Docker(方法一)

docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-centos7.6-dtk23.10-py38
# <your IMAGE ID>为以上拉取的docker的镜像ID替换,本镜像为:ffa1f63239fc
docker run -it --shm-size=32G -v $PWD/MiniCPM:/home/MiniCPM -v /opt/hyhal:/opt/hyhal --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name minicpm <your IMAGE ID> bash
cd /home/MiniCPM
pip install -r finetune/requirements.txt # finetune/requirements.txt
# deepspeed、flash_attn2、xformers可从whl.zip文件里获取安装:
pip install deepspeed-0.12.3+git299681e.abi0.dtk2310.torch2.1.0a0-cp38-cp38-linux_x86_64.whl
pip install flash_attn-2.0.4_torch2.1_dtk2310-cp38-cp38-linux_x86_64.whl
# xformers
tar -xvf xformers-0.0.23.tar
cd xformers-0.0.23
pip install xformers==0.0.23 --no-deps
bash patch_xformers.rocm.sh

Dockerfile(方法二)

cd MiniCPM/docker
docker build --no-cache -t minicpm:latest .
docker run --shm-size=32G --name minicpm -v /opt/hyhal:/opt/hyhal --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video -v $PWD/../../MiniCPM:/home/MiniCPM -it minicpm bash
# 若遇到Dockerfile启动的方式安装环境需要长时间等待,可注释掉里面的pip安装,启动容器后再安装python库:pip install -r requirements.txt。
# deepspeed、flash_attn2、xformers可从whl.zip文件里获取安装:
pip install deepspeed-0.12.3+git299681e.abi0.dtk2310.torch2.1.0a0-cp38-cp38-linux_x86_64.whl
pip install flash_attn-2.0.4_torch2.1_dtk2310-cp38-cp38-linux_x86_64.whl
# xformers
tar -xvf xformers-0.0.23.tar
cd xformers-0.0.23
pip install xformers==0.0.23 --no-deps
bash patch_xformers.rocm.sh

Anaconda(方法三)

1、关于本项目DCU显卡所需的特殊深度学习库可从光合开发者社区下载安装:

DTK驱动:dtk23.10
python:python3.8
torch:2.1.0
torchvision:0.16.0
triton:2.1.0
apex:0.1
deepspeed:0.12.3
flash_attn:2.0.4
xformers:0.0.23
# deepspeed、flash_attn2、xformers可从whl.zip文件里获取安装:
pip install deepspeed-0.12.3+git299681e.abi0.dtk2310.torch2.1.0a0-cp38-cp38-linux_x86_64.whl
pip install flash_attn-2.0.4_torch2.1_dtk2310-cp38-cp38-linux_x86_64.whl
# xformers
tar -xvf xformers-0.0.23.tar
cd xformers-0.0.23
pip install xformers==0.0.23 --no-deps
bash patch_xformers.rocm.sh

Tips:以上dtk驱动、python、torch等DCU相关工具版本需要严格一一对应。

2、其它非特殊库参照requirements.txt安装

pip install -r finetune/requirements.txt # finetune/requirements.txt

数据集

AdvertiseGen

# 校验文件完整性
md5sum data/AdvertiseGen.tar.gz 
# 解压数据集
tar xvf data/AdvertiseGen.tar.gz

数据预处理脚本脚本为:convert_data.py,数据目录结构如下:

data/AdvertiseGenChatML
    ├── train.json
    └── dev.json

更多资料可参考源项目的README_origin.md

训练

finetune所需预训练权重下载地址:魔搭社区

本步骤说明的预训练权重采用MiniCPM-2B-sft-bf16,请下载后放入目录checkpoint下面:checkpoint/miniCPM-bf16/

单机单卡(LoRA finetune)

cd MiniCPM
bash finetune/lora_finetune.sh # LoRA finetune,显存占用10619MiB。
# 受限于模型/数据规模,模型可能出现幻觉性问题,若仅仅采用LoRA finetune幻觉性问题较为严重。

单机多卡(全参数finetune)

bash finetune/sft_finetune.sh # 全参数finetune,显存占用30245MiB。

更多资料可参考源项目的finetune

推理

方法一:pytorch推理

python infer.py
# 若采用官方默认权重推理:代码里设置path = 'checkpoint/miniCPM-bf16'

方法二:vllm推理(更快)

1、vllm对环境有特殊要求,需要安装以下版本的库才可用,所需版本位于whl文件夹:

pip install vllm-0.2.2+git40eaf6d.abi0.dtk2310.torch2.1-cp38-cp38-linux_x86_64.whl
pip install transformers==4.35.2
# 安装xformers-0.0.22
tar -xvf xformers-0.0.22.tar
cd xformers
pip install xformers==0.0.22 --no-deps
bash patch_xformers-0.0.22.post7.rocm.sh

2、模型推理

cd MiniCPM
python inference/convert_hf_to_vllmcpm.py --load checkpoint/miniCPM-bf16 --save vllmcpm_repo_path
mv vllmcpm_repo_path inference/vllm/examples/infer_cpm/
python inference.py --model_path vllmcpm_repo_path --prompt_path prompts/prompt_demo.txt #目前不支持awq量化

方法三:fastllm推理

1、特殊环境配置方法:

pip install transformers==4.37.2
编译安装fastllm:https://developer.hpccube.com/codes/OpenDAS/fastllm

2、模型推理

python infer_fastllm.py

result

#问题
山东省最高的山是哪座山, 它比黄山高还是矮?差距多少?
#生成答案
山东省最高的山是泰山,海拔1545米。
相对于黄山(海拔1864米),泰山海拔较低,相差约319米。

精度

测试数据(LoRA finetune):AdvertiseGen,推理框架:pytorch。

devicetrain_loss
DCU Z100L5.1066
GPU V100S5.1052

应用场景

算法类别

对话问答

热点应用行业

制造,广媒,金融,能源,医疗,家居,教育

源码仓库及问题反馈

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术瘾君子1573

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值