ai

华为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地址为准
 

关于作者

程序员,软件工程师,java, golang, rust, c, python,vue, Springboot, mybatis, mysql,elasticsearch, docker, maven, gcc, linux, ubuntu, centos, axum,llm, paddlepaddle, onlyoffice,minio,银河麒麟,中科方德,rpm