MiniCPM适配昇腾开源验证任务开发心得
由任务计划书(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
安装pytorch、torch_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.py和configuration_minicpm.py文件中导入flash_attn包的代码注释掉:
configuration_minicpm.py:
注释后权重转换可顺利完成。
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 分别设置为1和1,同权重转换的TP、PP切分大小保持一致。
完成后运行: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)权重转换
(2)脚本推理
(3)分布式推理
NPU运行前:
NPU运行后:
- 点赞
- 收藏
- 关注作者
评论(0)