链载Ai

标题: 大模型国产化适配8-基于昇腾MindIE推理工具部署Qwen-72B实战(推理引擎、推理服务化) [打印本页]

作者: 链载Ai    时间: 1 小时前
标题: 大模型国产化适配8-基于昇腾MindIE推理工具部署Qwen-72B实战(推理引擎、推理服务化)

随着 ChatGPT 的现象级走红,引领了AI大模型时代的变革,从而导致 AI 算力日益紧缺。与此同时,中美贸易战以及美国对华进行AI芯片相关的制裁导致 AI 算力的国产化适配势在必行。之前也分享过一些国产 AI 芯片 和 AI 框架。

另外,我撰写的大模型相关的博客及配套代码均整理放置在Github:llm-action,有需要的朋友自取。

在华为昇腾LLM落地可选解决方案中,我们曾介绍过MindIE,并且前段时间MindIE 1.0.RC1已经发布,本文主要将对其进行实战演练。

MindIE 简介

MindIE(Mind Inference Engine,昇腾推理引擎)是华为昇腾针对AI全场景业务的推理加速套件。通过分层开放AI能力,支撑用户多样化的AI业务需求,使能百模千态,释放昇腾硬件设备算力。向上支持多种主流AI框架,向下对接不同类型昇腾AI处理器,提供多层次编程接口,帮助用户快速构建基于昇腾平台的推理业务。主要包括模型推理引擎 MindIE 和模型服务化 MindIE-Service。

从算子、模型、应用三大维度,全面加速推理部署。

模型推理引擎:MindIE

MindIE 作为一个模型推理引擎,提供了针对大语言模型和SD模型特定的优化。

模型服务化:MindIE-Service

MindIE-Service 作为一个模型服务化框架,主要包含如下几个部分:

MindIE推理引擎之上,除了可以使用MindIE-Service,还支持第三方服务化框架,如TGI。

支持的模型

目前 1.0.RC1 版本支持的模型有 baichuan、bloom、deepseek、internlm、mixtral、qwen2、starcoder、aquila、chatglm、gpt_neox、llama、qwen、telechat。

可以看到,对主流大模型的支持还是挺全的。同时,目前接口层面提供了对于流式的支持,但是目前还不支持多轮对话,需要通过一些折衷方法进行处理。

华为 Atlas 推理卡形态

目前,华为 Atlas 推理系列硬件产品有三种形态:

环境准备

推理卡准备

目前 MindIE 1.0.RC1 推荐使用两种推理卡:

下载镜像

MindIE 已经提供了适配了 Atlas 800I A2 推理服务器、Atlas 300I Duo 推理卡的镜像,根据自己的卡型号找到对应的版本进行下载即可。

镜像版本CANN版本MindIE版本FrameworkPTAdapter版本HDK版本支持的推理芯片架构
1.0.RC1-800I-A2-aarch648.0.RC11.0.T526.0.RC124.1.RC1Atlas 800I A2aarch64
1.0.RC1-300I-Duo-aarch648.0.RC11.0.T526.0.RC124.1.RC1Atlas 300I Duoaarch64

下载地址:mindie

下载命令:

#获取登录访问权限,输入已设置的“镜像下载凭证”,如果未设置或凭证超过24小时过期,请点击登录用户名下拉设置镜像下载凭证
dockerlogin-u157xxxx4031ascendhub.huawei.com

#下载镜像
dockerpullascendhub.huawei.com/public-ascendhub/mindie:1.0.RC1-800I-A2-aarch64

下载模型

以 Qwen-72B-Chat 模型为例,从 HF 上下载 Qwen-72B-Chat 模型,其他 HF 上面的模型与之类似,就不一一演示了。

gitlfsinstall
gitclonehttps://huggingface.co/Qwen/Qwen-72B-Chat
cdQwen-72B-Chat
gitreset--hard6eb5569

如果网络不好,可以通过 HF 镜像站进行下载。

pipinstall-Uhuggingface_hub

exportHF_ENDPOINT=https://hf-mirror.com

#自行替换Token
nohuphuggingface-clidownload--tokenhf_yiDfdsiNVGoXdEUejfdffeatOEKiToQTVe--resume-downloadQwen/Qwen-72B-Chat--local-dirQwen-72B-Chat--local-dir-use-symlinksFalse>qwen-72b.log2>&1&

环境安装

创建并进入容器:

dockerrun--namemindie-dev-it-d--net=host--ipc=host\
--shm-size=50g\
--privileged=true\
-w/home\
--device=/dev/davinci0\
--device=/dev/davinci1\
--device=/dev/davinci2\
--device=/dev/davinci3\
--device=/dev/davinci_manager\
--device=/dev/hisi_hdc\
--device=/dev/devmm_svm\
--entrypoint=bash\
-v/usr/local/Ascend/driver:/usr/local/Ascend/driver\
-v/usr/local/dcmi:/usr/local/dcmi\
-v/usr/local/bin/npu-smi:/usr/local/bin/npu-smi\
-v/usr/local/sbin:/usr/local/sbin\
-v/home:/home\
-v/tmp:/tmp\
-v/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime\
ascendhub.huawei.com/public-ascendhub/mindie:1.0.RC1-800I-A2-aarch64

#进入容器
dockerexec-iturootmindie-devbash

安装昇腾CANN软件栈。

cd/opt/package
#安装CANN包
sourceinstall_and_enable_cann.sh

若退出后重新进入容器,则需要重新加载 CANN 环境变量,执行以下三行命令。

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

基于 MindIE 部署 Baichuan2-7B

第一步:修改配置

修改配置文件/usr/local/Ascend/mindie/latest/mindie-service/conf/config.json

对于 Baichuan2-7B ,使用四卡进行并行推理进行测试:

{
"OtherParam":
{
"ResourceParam":
{
"cacheBlockSize":128,
"preAllocBlocks":4
},
"LogParam":
{
"logLevel":"Info",
"logPath":"/logs/mindservice.log"
},
"ServeParam":
{
"ipAddress":"127.0.0.1",
"port":1025,
"maxLinkNum":300,
"httpsEnabled":false,
"tlsCaPath":"security/ca/",
"tlsCaFile":["ca.pem"],
"tlsCert":"security/certs/server.pem",
"tlsPk":"security/keys/server.key.pem",
"tlsPkPwd":"security/pass/mindie_server_key_pwd.txt",
"kmcKsfMaster":"tools/pmt/master/ksfa",
"kmcKsfStandby":"tools/pmt/standby/ksfb",
"tlsCrl":"security/certs/server_crl.pem"
}
},
"WorkFlowParam":
{
"TemplateParam":
{
"templateType":"Standard",
"templateName":"Standard_llama",
"pipelineNumber":1
}
},
"ModelDeployParam":
{
"maxSeqLen":2560,
"npuDeviceIds":[[0,1,2,3]],
"ModelParam":[
{
"modelInstanceType":"Standard",
"modelName":"baichuan2-7b",
"modelWeightPath":"/home/aicc/model_from_hf/Baichuan2-7B-Chat",
"worldSize":4,
"cpuMemSize":5,
"npuMemSize":16,
"backendType":"atb"
}
]
},
"ScheduleParam":
{
"maxPrefillBatchSize":50,
"maxPrefillTokens":8192,
"prefillTimeMsPerReq":150,
"prefillPolicyType":0,
"decodeTimeMsPerReq":50,
"decodePolicyType":0,
"maxBatchSize":200,
"maxIterTimes":512,
"maxPreemptCount":200,
"supportSelectBatch":false,
"maxQueueDelayMicroseconds":5000
}
}

常用参数说明:

第二步:启动服务

通过启动脚本部署模型服务:

exportPYTHONPATH=/usr/local/Ascend/llm_modelPYTHONPATH
cd/usr/local/Ascend/mindie/latest/mindie-service/bin
./mindieservice_daemon

第三步:发送HTTP请求

目前 MindIE-Service 的 API 接口兼容 OpenAI、vLLM、HuggingFace Text Generation Inference 、NVIDIA Triton Inference Server 推理框架。

OpenAI 格式接口请求:

curl"http://127.0.0.1:1025/v1/chat/completions"\
-H"Content-Type:application/json"\
-d'{
"model":"baichuan2-7b",
"messages":[
{
"role":"user",
"content":"如何养生?"
}
],
"max_tokens":128
}'

请求体的详细字段说明请参考OpenAI官网。

响应结果:

{
"id":"2",
"object":"chat.completion",
"created":1714293477,
"model":"baichuan2-7b",
"choices":[
{
"index":0,
"message":{
"role":"assistant",
"content":"\n养生是指通过调整饮食、锻炼、作息、心理等方面,达到预防疾病、延缓衰老、提高生活质量的目的。以下是一些建议:\n\n1. 均衡饮食:保持饮食多样化,摄入足够的蛋白质、脂肪、碳水化合物、维生素和矿物质。多吃蔬菜、水果、全谷类食物,适量摄入肉类、鱼类、蛋类和奶制品。\n\n2. 规律作息:保持充足的睡眠,每晚7-9小时为宜。避免熬夜,尽量保持规律的作息。\n\n3. 适量锻炼:每周至少进行150分钟的中等强度有氧运动,如快走、慢跑、游泳等。此外,"
},
"finish_reason":"length"
}
],
"usage":{
"prompt_tokens":3,
"completion_tokens":128,
"total_tokens":131
}
}

TGI 格式接口请求:

curl-H"Accept:application/json"-H"Content-type:application/json"-XPOST-d'{
"inputs":"如何才能拥有性感的身材?",
"parameters":{
"do_sample":true,
"frequency_penalty":0.1,
"temperature":0.5,
"top_k":10,
"top_n_tokens":5,
"max_new_tokens":256
}
}'http://127.0.0.1:1025/generate

请求体的详细字段说明请参考TGI官网。

响应结果:

{
"generated_text":"\n拥有性感的身材需要时间、毅力和计划。以下是一些建议,帮助你塑造性感的身材:\n\n1. 设定目标:确定你想要达到的体重和身材目标。确保目标具体、可衡量、可实现、相关和有时间限制(SMART)。\n\n2. 健康饮食:保持均衡的饮食,摄入足够的蛋白质、碳水化合物、脂肪、维生素和矿物质。避免过多摄入高热量、高脂肪和高糖的食物。\n\n3. 规律锻炼:每周至少进行150分钟的中等强度有氧运动,如快走、慢跑、游泳或骑自行车。此外,每周至少进行两次全身肌肉锻炼,如举重、俯卧撑、深蹲等。\n\n4. 保持水分:每天喝足够的水,以保持身体正常运作。避免过多摄入含糖饮料和咖啡因。\n\n5. 睡眠充足:每晚保证7-9小时的高质量睡眠。保持规律的作息时间,避免过度劳累。\n\n6. 减轻压力:学会应对压力,避免通过暴饮暴食或过度锻炼来应对压力。尝试进行冥想、瑜伽或深呼吸练习来减轻压力。\n\n7. 保持积极:保持积极的心态,相信自己能够达到目标。与他人分享你的进展,寻求支持和鼓励。\n\n8. 逐步改变:不要"
}

基于 MindIE 部署 ChatGLM3-6B

对于 ChatGLM3-6B, 使用两卡进行并行推理:

{
"ModelDeployParam":
{
"maxSeqLen":2560,
"npuDeviceIds":[[0,1]],
"ModelParam":[
{
"modelInstanceType":"Standard",
"modelName":"chatglm3-6b",
"modelWeightPath":"/workspace/aicc/model_from_hf/chatglm3-6b-chat-full",
"worldSize":2,
"cpuMemSize":5,
"npuMemSize":16,
"backendType":"atb"
}
]
}
}

基于 MindIE 部署 Qwen-72B

对于 Qwen-72B,直接使用8卡进行并行推理:

这里一定要注意,目前npuMemSize不可设置太大了。npuMemSize 表示 NPU中可以用来申请kv cache的size上限。单位:GB。快速计算公式:npuMemSize=(总空闲-权重/NPU卡数-后处理占用)*系数,其中系数取0.8。

假设权重保存为FP16,Atlas 800I A2 推理服务器单卡为32G,片上系统大约有2-3G。因此,Qwen-72B的npuMemSize大约为:(32G-3G-(722)/8--后处理占用)0.8 约等于 10G 。

{
"ModelDeployParam":
{
"maxSeqLen":2560,
"npuDeviceIds":[[0,1,2,3,4,5,6,7]],
"ModelParam":[
{
"modelInstanceType":"Standard",
"modelName":"qwen-72b",
"modelWeightPath":"/home/aicc/model_from_hf/qwen-72b-chat-hf",
"worldSize":8,
"cpuMemSize":5,
"npuMemSize":10,
"backendType":"atb"
}
]
}
}

结语

本文简要介绍了基于昇腾 MindIE 推理工具部署Baichuan2-7B、ChatGLM3-6B、Qwen-72B,可以看到基于 MindIE 进行推理部署是相当简单的。

参考文档:






欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5