MiniCPM适配昇腾开源验证任务开发心得

举报
sunp 发表于 2024/12/13 11:38:43 2024/12/13
【摘要】      由任务计划书(https://onebox.huawei.com/v/8ba5735992eb1a328f6e246f972d09ff?type=1 )了解任务内容,任务主要目的是将MiniCPM大模型适配至华为的Ascend Npu(昇腾)上,基于昇腾硬件验证模型推理情况。本次开发过程选择MiniCPM-2B模型。1        开发过程1.1       拉取仓库安装依赖:g...

     由任务计划书(https://onebox.huawei.com/v/8ba5735992eb1a328f6e246f972d09ff?type=1 )了解任务内容,任务主要目的是将MiniCPM大模型适配至华为的Ascend Npu(昇腾)上,基于昇腾硬件验证模型推理情况。本次开发过程选择MiniCPM-2B模型。

1        开发过程

1.1       拉取仓库安装依赖:

git clone https://gitee.com/ascend/MindSpeed-LLM.git

git clone https://github.com/NVIDIA/Megatron-LM.git

cd Megatron-LM

git checkout core_r0.6.0

cp -r megatron ../MindSpeed-LLM/

cd ..

cd MindSpeed-LLM

git checkout 1.0.0

mkdir logs

mkdir model_from_hf

mkdir dataset

mkdir ckpt

 

安装pytorchtorch_npu

wget   https://download.pytorch.org/whl/cpu/torch-2.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

wget   https://gitee.com/ascend/pytorch/releases/download/v6.0.rc2-pytorch2.1.0/torch_npu-2.1.0.post6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

 

pip3 install torch-2.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

pip3 install torch_npu-2.1.0.post6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

 

其他依赖:

pip install torchvision==0.16.0

pip install apex-0.1_ascend*-cp38-cp38m-linux_aarch64.whl

 

source /usr/local/Ascend/ascend-toolkit/set_env.sh

source /usr/local/Ascend/nnal/atb/set_env.sh

 

# 安装加速库

cd ModelLink

git clone https://gitee.com/ascend/MindSpeed.git

cd MindSpeed

git checkout 969686ff

pip install -r requirements.txt

pip3 install -e .

cd ..

 

# 安装其余依赖库

pip install -r requirements.txt                        

1.2       下载权重并转换

hunggingface找到MiniCPM-2B的模型权重地址:https://huggingface.co/openbmb/MiniCPM-2B-sft-bf16/tree/main ,利用huggingface_hub下载权重。

mkdir ./model_from_hf/mincpm/

pip install -U huggingface_hub

export HF_ENDPOINT=https://hf-mirror.com

huggingface-cli download --resume-download openbmb/MiniCPM-2B-sft-bf16 --local-dir ./model_from_hf/mincpm/

 

ModelLink文件目录下运行脚本完成权重转换:

python convert_ckpt.py \
--model-type GPT \
--load-model-type hf \
--save-model-type mg \
--target-tensor-parallel-size 1 \
--target-pipeline-parallel-size 1 \
--load-dir ./model_from_hf/mincpm/ \
--save-dir ./model_from_hf/mincpm-v1/ \
--tokenizer-model ./model_from_hf/mincpm/tokenizer.model \
--use-mcore-models \
--model-type-hf minicpm

 

运行转换脚本会报flash_attn的库错误,需要将权重配置文件中的modeling_minicpm.pyconfiguration_minicpm.py文件中导入flash_attn包的代码注释掉:

图片5.png

configuration_minicpm.py

图片6.png


注释后权重转换可顺利完成。

1.3       脚本推理

采用Transformer库推理方式,逐步运行下面脚本:

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
import torch_npu #
引入NPU支持的torch_npu
torch.manual_seed(0)
tokenizer_path = '/dev/shm/sunpeng/master/MindSpeed-LLM/model_from_hf/mincpm'
tokenizer = AutoTokenizer.from_pretrained(tokenizer_path)
#
将设备映射设置为NPU并设置数据类型为float32
model = AutoModelForCausalLM.from_pretrained(
tokenizer_path,
torch_dtype=torch.float32, #
使用float32
device_map={'': 'npu'}, #
设备映射为NPU
trust_remote_code=True
)
#
确保模型和张量在NPU
model = model.to('npu')
#
使用模型生成响应
responds, history = model.chat(
tokenizer,
"
请写一篇关于人工智能的文章,详细介绍人工智能的未来发展和隐患。",
temperature=0.7,
top_p=0.7
)
print(responds)

1.4       分布式推理

配置推理脚本examples/mcore/minicpm/generate_minicpm_2b.sh:

       CHECKPOINT = “./model_from_hf/mincpm-v1”

       TOKENIZER_PATH=”./model_from_hf/mincpm/

并将脚本中的参数--tensor-model-parallel-size --pipeline-model-parallel-size 分别设置为11,同权重转换的TPPP切分大小保持一致。

完成后运行:bash examples/mcore/minicpm/generate_minicpm_2b.sh即可开启推理。

2    验收材料

2.1 验收说明

本文提供的验收材料按照《MiniCPM适配昇腾开源验证任务》任务计划书的要求提供,没有偏离。

2.2 资源清单

产品名称

芯片类型

CANN版本

驱动版本

操作系统

堡垒机

昇腾910B3

CANN 8.0.RC2

23.0.6

Huawei Cloud EulerOS 2.0

 

2.3 验证截图

(1)权重转换

图片1.png

(2)脚本推理

图片2.png

(3)分布式推理

图片9.png

NPU运行前:

图片3.png

NPU运行后:

图片4.png

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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