随着 ChatGPT 的现象级走红,引领了AI大模型时代的变革,从而导致 AI 算力日益紧缺。与此同时,中美贸易战以及美国对华进行AI芯片相关的制裁导致 AI 算力的国产化适配势在必行。之前也分享过一些国产 AI 芯片 和 AI 框架。
- 大模型国产化适配1-华为昇腾AI全栈软硬件平台总结
- 大模型国产化适配2-基于昇腾910使用ChatGLM-6B进行模型推理
- 大模型国产化适配3-基于昇腾910使用ChatGLM-6B进行模型训练
- 大模型国产化适配4-基于昇腾910使用LLaMA-13B进行多机多卡训练
- 大模型国产化适配5-百度飞浆PaddleNLP大语言模型工具链总结
- 大模型国产化适配6-基于昇腾910B快速验证ChatGLM3-6B/BaiChuan2-7B模型推理
- AI芯片技术原理剖析(一):国内外AI芯片概述
- 大模型国产化适配7-华为昇腾LLM落地可选解决方案(MindFormers、ModelLink、MindIE)
- MindIE 1.0.RC1 发布,华为昇腾终于推出了针对LLM的完整部署方案,结束小米加步枪时代
- 大模型国产化适配8-基于昇腾MindIE推理工具部署Qwen-72B实战(推理引擎、推理服务化)
在华为昇腾LLM落地可选解决方案中,我们曾介绍过MindIE,并且前段时间MindIE 1.0.RC1已经发布,本文主要将对其进行实战演练。
MindIE 简介
MindIE(Mind Inference Engine,昇腾推理引擎)是华为昇腾针对AI全场景业务的推理加速套件。通过分层开放AI能力,支撑用户多样化的AI业务需求,使能百模千态,释放昇腾硬件设备算力。向上支持多种主流AI框架,向下对接不同类型昇腾AI处理器,提供多层次编程接口,帮助用户快速构建基于昇腾平台的推理业务。主要包括模型推理引擎 MindIE 和模型服务化 MindIE-Service。
image.png
从算子、模型、应用三大维度,全面加速推理部署。
image.png
模型推理引擎:MindIE
MindIE 作为一个模型推理引擎,提供了针对大语言模型和SD模型特定的优化。
image.png
模型服务化:MindIE-Service
MindIE-Service 作为一个模型服务化框架,主要包含如下几个部分:
- MindIE-MS:服务策略管理,提供运维监控能力。
- MindIE-Server:推理服务端,提供模型服务化能力。
- MindIE-Client:提供推理客户端标准API,简化用户服务调用。
MindIE推理引擎之上,除了可以使用MindIE-Service,还支持第三方服务化框架,如TGI。
image.png
支持的模型
目前 1.0.RC1 版本支持的模型有 baichuan、bloom、deepseek、internlm、mixtral、qwen2、starcoder、aquila、chatglm、gpt_neox、llama、qwen、telechat。
可以看到,对主流大模型的支持还是挺全的。同时,目前接口层面提供了对于流式的支持,但是目前还不支持多轮对话,需要通过一些折衷方法进行处理。
华为 Atlas 推理卡形态
目前,华为 Atlas 推理系列硬件产品有三种形态:
- 边缘模块边缘盒子形态
- 标卡形态
- 服务器形态
image.png
image.png
image.png
环境准备
推理卡准备
目前 MindIE 1.0.RC1 推荐使用两种推理卡:
- Atlas 800I A2:适用于时延敏感及高吞吐需求场景
- Atlas 300I Duo:非时延敏感及低成本建设场景
AI工程化
专注于AI领域(大模型、MLOPS/LLMOPS 、AI应用开发、AI infra)前沿产品技术信息和实践经验分享。
190篇原创内容
公众号
下载镜像
MindIE 已经提供了适配了 Atlas 800I A2 推理服务器、Atlas 300I Duo 推理卡的镜像,根据自己的卡型号找到对应的版本进行下载即可。
镜像版本 | CANN版本 | MindIE版本 | FrameworkPTAdapter版本 | HDK版本 | 支持的推理芯片 | 架构 |
---|---|---|---|---|---|---|
1.0.RC1-800I-A2-aarch64 | 8.0.RC1 | 1.0.T52 | 6.0.RC1 | 24.1.RC1 | Atlas 800I A2 | aarch64 |
1.0.RC1-300I-Duo-aarch64 | 8.0.RC1 | 1.0.T52 | 6.0.RC1 | 24.1.RC1 | Atlas 300I Duo | aarch64 |
下载地址:mindie
下载命令:
# 获取登录访问权限,输入已设置的“镜像下载凭证”,如果未设置或凭证超过24小时过期,请点击登录用户名下拉设置镜像下载凭证docker login -u 157xxxx4031 ascendhub.huawei.com
# 下载镜像 docker pull ascendhub.huawei.com/public-ascendhub/mindie:1.0.RC1-800I-A2-aarch64
下载模型
以 Qwen-72B-Chat 模型为例,从 HF 上下载 Qwen-72B-Chat 模型,其他 HF 上面的模型与之类似,就不一一演示了
git lfs installgit clone https://huggingface.co/Qwen/Qwen-72B-Chatcd Qwen-72B-Chatgit reset –hard 6eb5569
如果网络不好,可以通过 HF 镜像站进行下载。
pip install -U huggingface_hub
export HF_ENDPOINT=https://hf-mirror.com
# 自行替换 Tokennohup huggingface-cli download –token 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 –resume-download Qwen/Qwen-72B-Chat –local-dir Qwen-72B-Chat –local-dir-use-symlinks False > qwen-72b.log 2>&1 &
环境安装
创建并进入容器:
docker run –name mindie-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
# 进入容器docker exec -itu root mindie-dev bash
安装昇腾CANN软件栈。
cd /opt/package# 安装CANN包source install_and_enable_cann.sh
若退出后重新进入容器,则需要重新加载 CANN 环境变量,执行以下三行命令。
source /usr/local/Ascend/ascend-toolkit/set_env.shsource /usr/local/Ascend/mindie/set_env.shsource /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 }}
常用参数说明:
-
资源参数:ResourceParam
- cacheBlockSize:kvcache block的size大小。建议取值128,其他值建议取为2的n次幂。
- preAllocBlocks:预分配策略:给请求分配好block数量。
-
日志参数:LogParam
- logLevel:日志级别
- logPath:日志保存路径。相对路径,代码中会取到工程的绝对路径,最后 拼接而成。目前只支持修改日志文件名,即logPath必须配置为”/logs/xxxx”,其中xxxx为日志。名称。
-
服务参数:ServeParam
- ipAddress:传给http服务启动TCP的参数,节点具有的IP地址。不建议绑定为0.0.0.0。
- port:传给http服务启动TCP的参数,端口号。保证端口号无冲突。
- maxLinkNum:http的请求并发数。EndPoint支持的最大并发请求数。
- httpsEnabled:是否开启https通信。建议值true,为false时,后续参数忽略。
-
ScheduleParam 参数
- prefillPolicyType:prefill阶段的调度策略。0:FCFS,先来先服务。1:STATE, prefill阶段优先执行未被抢占和换出的请求。3:MLFQ,多级反馈队列。其中, 3是0/1的组合。
- decode阶段的调度策略:0:FCFS,先来先服务。1:STATE, decode阶段优先执行未被抢占和换出的请求。3:MLFQ,多级反馈队列。其中, 3是0/1的组合。
- maxQueueDelayMicroseconds:队列等待时间,单位:us。
- maxBatchSize:最大decode batch size。
-
模型部署参数:ModelDeployParam
- modelName:模型名称
- maxSeqLen:最大序列长度。输入的长度+输出的长度<=maxSeqLen,用户根据自己的推理场景选择maxSeqLen。
- npuMemSize:NPU中可以用来申请kv cache的size上限。单位:GB。建议值:8。快速计算公式:npuMemSize=(总空闲-权重/NPU卡数-后处理占用)*系数,其中系数取0.8。
- cpuMemSize:CPU中可以用来申请kv cache的size上限。单位:GB。建议值:5。当“ supportSwapPolicy” =“false”,可以配置为0。
- worldSize:启用几张卡推理。目前llama-65b至少启用四张NPU卡。
- npuDeviceIds:启用哪几张卡。对于每个模型实例分配的npuIds。
- modelWeightPath:模型权重路径。路径必须存在。
- modelInstanceType:模型类型,普通推理:”Standard” ,假模型:”StandardMock”。
- backendType:当前对接后端类型,大小写不敏感。可选:”atb”、”mindformer”、”torchair”等。
第二步:启动服务
通过启动脚本部署模型服务:
export PYTHONPATH=/usr/local/Ascend/llm_model:$PYTHONPATHcd /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: /v1/chat/completions
- vLLM: /generate
- HuggingFace TGI: /generate、/generate_stream
-
NVIDIA Triton Inference Server:
- /v2/models/${MODEL_NAME}[/versions/${MODEL_VERSION}]/infer
- v2/models/${MODEL_NAME}[/versions/${MODEL_VERSION}]/generate
- v2/models/${MODEL_NAME}[/versions/${MODEL_VERSION}]/generate_stream
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” -X POST -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 进行推理部署是相当简单的。
暂无评论内容