华为npu卡docker部署大语言模型
1.安装docker
yum install docker
2.下载镜像
https://www.hiascend.com/developer/ascendhub/detail/af85b724a7e5469ebd7ea13c3439d48f
该镜像已具备模型运行所需的基础环境,包括:CANN、FrameworkPTAdapter、MindIE与ATB-Models,可实现模型快速上手推理。 为方便使用,该镜像中内置了ATB-Models压缩包,并放置于/opt/package之下,如需使用,可从镜像中获取。
根据实际环境下载镜像如:
docker pull swr.cn-south-1.myhuaweicloud.com/ascendhub/mindie:1.0.RC3-300I-Duo-arm64
3.参考文档进行容器运行和部署
运行容器可以添加 -p 和-v 进行端口映射和目录挂载
支持的模型:https://www.hiascend.com/document/detail/zh/mindie/10RC3/whatismindie/mindie_what_0003.html
到huggingface或modelscope下载支持的模型文件(safetensors格式)上传到服务器 模型文件中有个config.json,配置项:torch_dtype 默认是bfloat16, 改成float16
运行容器,示例命令(–net 根据需要改成自己的):
docker run -it -d --net=host --shm-size=1g \
--name mindie \ # 容器名称
--device=/dev/davinci_manager \
--device=/dev/hisi_hdc \
--device=/dev/devmm_svm \
--device=/dev/davinci0 \
--device=/dev/davinci1 \
--device=/dev/davinci2 \
--device=/dev/davinci3 \
--device=/dev/davinci4 \
--device=/dev/davinci5 \
--device=/dev/davinci6 \
--device=/dev/davinci7 \
-v /etc/localtime:/etc/localtime:ro\
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro \
-v /usr/local/sbin:/usr/local/sbin:ro \
-v /root/model_data:/model_data:ro \ # 模型文件路径挂载,加ro 只读
-p 8102:8102 \
bf6b7812c595 bash # 镜像id
docker run -it -d --net=my-net --shm-size=1g \
--privileged \ # 新版加个这个参数
--name mindie-llm2 \
--device=/dev/davinci_manager \
--device=/dev/hisi_hdc \
--device=/dev/devmm_svm \
--device=/dev/davinci0 \
--device=/dev/davinci1 \
--device=/dev/davinci2 \
--device=/dev/davinci3 \
--device=/dev/davinci4 \
--device=/dev/davinci5 \
--device=/dev/davinci6 \
--device=/dev/davinci7 \
-v /etc/localtime:/etc/localtime:ro\
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro \
-v /usr/local/sbin:/usr/local/sbin:ro \
-v /root/model_data:/model_data:ro \
-p 8103:8103 \
3a7f38bed48b bash
进入容器可以执行 npu-smi info 查看
echo $ATB_SPEED_HOME_PATH 显示模型路径
支持模型:/usr/local/Ascend/llm_model/examples/models
4.执行推理
- 1.测试: 进入容器:
cd $ATB_SPEED_HOME_PATH
python examples/run_pa.py --model_path /path-to-weights # 改成实际使用的模型文件所在文件夹路径
- 2.启动web服务
修改配置文件(端口号,模型文件路径): $MIES_INSTALL_PATH/conf/config.json 模型文件配置在 ModelConfig下,只能配置一个
修改参数配置,参考: https://blog.csdn.net/weixin_50005386/article/details/142389458?spm=1001.2014.3001.5502
主要改:
ServerConfig.ipAddress: # 默认127.0.0.1 只能在本容器中访问,可以改成容器内的ip地址(ifconfig查看)
ServerConfig.port: 2323 服务端口号
httpsEnabled: false 改成false
BackendConfig.npuDeviceIds: [[0,1,2,3,4,5,6,7]] , 8个gpu芯片 (4张卡,每张卡2个芯片)
ModelConfig.worldSize: 8, 芯片数和上一行一致
ModelConfig.modelName: 模型名称自定义,请求接口时填该名称
ModelConfig.modelWeightPath: 模型文件夹路径
maxSeqLen: 默认值:2560 最大序列长度。请根据推理场景选择合适的maxSeqLen
maxInputTokenLen:默认2048比较小,可以调大一点
maxPrefillTokens: 不能小于maxInputTokenLen
maxIterTimes: 模型全局最大输出长度。与请求级最大输出token个数max_tokens(或max_new_tokens)取较小值作为最大可生成长度。必填,默认值:512。
配置解释: https://www.hiascend.com/document/detail/zh/mindie/10RC3/mindieservice/servicedev/mindie_service0285.html#ZH-CN_TOPIC_0000002099896552__section3735173205413
使用后台进程方式启动服务:
cd $MIES_INSTALL_PATH
nohup ./bin/mindieservice_daemon > output.log 2>&1 &
或控制台启动 ./bin/mindieservice_daemon
有Daemon start success! 表示启动成功
报模型文件的config.json权限错误,修改该文件权限: chmod o= /model_data/xxx/config.json
- 3.访问问答接口:
示例1
curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{
"prompt": "hello, who are you",
"max_tokens": 512,
"repetition_penalty": 1.03,
"presence_penalty": 1.2,
"frequency_penalty": 1.2,
"temperature": 0.5,
"top_k": 10,
"top_p": 0.95,
"stream": false
}' http://127.0.0.1:8102/generate # 以实际端口为准
示例2:
time curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{
"model": "llama3_8b",
"messages": [{
"role": "user",
"content": "我有五天假期,我想去海南玩,请给我一个攻略"
}],
"max_tokens": 512,
"presence_penalty": 1.03,
"frequency_penalty": 1.0,
"seed": null,
"temperature": 0.5,
"top_p": 0.95,
"stream": false
}' http://127.0.0.1:8102/v1/chat/completions #其中127.0.0.1以实际ip地址为准
示例3(流式):
curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{
"model": "llama3_8b",
"messages": [{
"role": "system",
"content": "You are a student who is good at math."
},
{
"role": "user",
"content": "事业单位职工食堂食材采购资金部分来自职工福利基金补助,适用《政府采购法》吗?"
}],
"max_tokens": 512,
"presence_penalty": 1.03,
"frequency_penalty": 1.0,
"seed": null,
"temperature": 0.5,
"top_p": 0.95,
"stream": true
}' http://127.0.0.1:8102/v1/chat/completions #其中127.0.0.1以实际ip地址为准