部署推理服务(DeepSeek V3/R1)
- 按照1下载相应的模型文件。
- 模型转换。由于昇腾硬件不支持FP8,因此需先权重转换为BF16;根据需求继续将BF16转换为INT8。
- FP8转换BF16步骤请参见模型库-DeepSeek-V3-模型使用。
- BF16转换INT8(单卡时转换时间需要7~8h,8卡时转换时间需要1h)步骤如下:
- 下载msit并安装。
git clone -b br_noncom_MindStudio_8.0.0_POC_20251231 https://gitee.com/ascend/msit.git cd msit/msmodelslim bash install.sh
- 从昇腾社区下载ascend-toolkit和ascend-cann-kernels。
- 检查ascend-toolkit包完整性,并安装ascend-toolkit。
Ascend-cann-toolkit_8.2.RC1.alpha002_linux-aarch64.run --check Ascend-cann-toolkit_8.2.RC1.alpha002_linux-aarch64.run --install
- 配置ascend-toolkit环境变量。
source /usr/local/Ascend/ascend-toolkit/set_env.sh
- 安装ascend-cann-kernels。
Ascend-cann-kernels-910b_8.2.RC1.alpha002_linux-aarch64.run --check Ascend-cann-kernels-910b_8.2.RC1.alpha002_linux-aarch64.run --install
- 升级transformers。
pip install transformers==4.48.2
- 修改模型权重的modeling_deepseek.py,注释掉“is_flash_attn_2_available”相关内容。
vim /home/openlab/deepseek-v3-bf16/modeling_deepseek.py
- 修改模型config.json,删除“quantization_config”。
vim /home/openlab/deepseek-v3-bf16/config.json
- 配置环境变量并进行转换。
cd example/DeepSeek/ export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 export PYTORCH_NPU_ALLOC_CONF=expandable_segments:False python3 quant_deepseek_w8a8.py --model_path /home/openlab/deepseek-v3-bf16/ --save_path /home/openlab/deepseek-v3-w8a8
- 下载msit并安装。
- 修改模型权重目录下的config.json文件。将“model_type”更改为“deepseekv2”(全小写且无空格)。
"model_type":"deepseekv2"
- 将模型权重目录拷贝到其他节点上。
- 配置机器NPU网卡信息(双机直连场景)。
- 配置设备IP地址和掩码信息。
- 配置机器A的NPU网卡IP地址和掩码信息。配置举例:
hccn_tool -i 0 -ip -s address 192.168.190.101 netmask 255.255.255.0 hccn_tool -i 1 -ip -s address 192.168.190.102 netmask 255.255.255.0 hccn_tool -i 2 -ip -s address 192.168.190.103 netmask 255.255.255.0 hccn_tool -i 3 -ip -s address 192.168.190.104 netmask 255.255.255.0 hccn_tool -i 4 -ip -s address 192.168.190.105 netmask 255.255.255.0 hccn_tool -i 5 -ip -s address 192.168.190.106 netmask 255.255.255.0 hccn_tool -i 6 -ip -s address 192.168.190.107 netmask 255.255.255.0 hccn_tool -i 7 -ip -s address 192.168.190.108 netmask 255.255.255.0
- -i:指定NPU device的编号。
- address 192.168.190.101:为指定NPU device规划的IP地址,按实际规划修改。
- netmask 255.255.255.0:为服务器NPU规划的掩码,按实际规划修改。
- 配置机器B的NPU网卡IP地址和掩码信息。配置举例:
hccn_tool -i 0 -ip -s address 192.168.190.109 netmask 255.255.255.0 hccn_tool -i 1 -ip -s address 192.168.190.110 netmask 255.255.255.0 hccn_tool -i 2 -ip -s address 192.168.190.111 netmask 255.255.255.0 hccn_tool -i 3 -ip -s address 192.168.190.112 netmask 255.255.255.0 hccn_tool -i 4 -ip -s address 192.168.190.113 netmask 255.255.255.0 hccn_tool -i 5 -ip -s address 192.168.190.114 netmask 255.255.255.0 hccn_tool -i 6 -ip -s address 192.168.190.115 netmask 255.255.255.0 hccn_tool -i 7 -ip -s address 192.168.190.116 netmask 255.255.255.0
- 配置机器A的NPU网卡IP地址和掩码信息。
- 配置检测对象IP地址信息。
- 配置机器A的检测对象IP地址。
双机直连场景下,每个NPU device的检测对象为其对端NPU device的IP地址。
配置举例:hccn_tool -i 0 -netdetect -s address 192.168.190.109 hccn_tool -i 1 -netdetect -s address 192.168.190.110 hccn_tool -i 2 -netdetect -s address 192.168.190.111 hccn_tool -i 3 -netdetect -s address 192.168.190.112 hccn_tool -i 4 -netdetect -s address 192.168.190.113 hccn_tool -i 5 -netdetect -s address 192.168.190.114 hccn_tool -i 6 -netdetect -s address 192.168.190.115 hccn_tool -i 7 -netdetect -s address 192.168.190.116
- 配置机器B的检测对象IP地址。配置举例:
hccn_tool -i 0 -netdetect -s address 192.168.190.101 hccn_tool -i 1 -netdetect -s address 192.168.190.102 hccn_tool -i 2 -netdetect -s address 192.168.190.103 hccn_tool -i 3 -netdetect -s address 192.168.190.104 hccn_tool -i 4 -netdetect -s address 192.168.190.105 hccn_tool -i 5 -netdetect -s address 192.168.190.106 hccn_tool -i 6 -netdetect -s address 192.168.190.107 hccn_tool -i 7 -netdetect -s address 192.168.190.108
斜体部分按实际规划修改。
- 配置机器A的检测对象IP地址。
- 配置设备IP地址和掩码信息。
- 检查机器网络状况及机器间互联情况。
- 检查机器网络状况。
- 检查物理链接(双机直连场景无需检查)。
for i in {0..7}; do hccn_tool -i $i -lldp -g | grep Ifname; done
- 检查链接。
for i in {0..7}; do hccn_tool -i $i -link -g ; done
- 检查网络健康情况。
for i in {0..7}; do hccn_tool -i $i -net_health -g ; done
- 查看监测的IP地址配置是否正确,即监测IP地址为npu device ip。
for i in {0..7}; do hccn_tool -i $i -netdetect -g ; done
- 查看网关是否配置正确(双机直连场景下,不设置网关)。
for i in {0..7}; do hccn_tool -i $i -gateway -g ; done
- 获取每张卡的IP地址。
for i in {0..7};do hccn_tool -i $i -ip -g; done
- 检测NPU底层TLS行为一致性,每台机器需要是一样的值,建议全0。
for i in {0..7}; do hccn_tool -i $i -tls -g ; done | grep switch
- NPU底层TLS校验行为置0操作。
for i in {0..7};do hccn_tool -i $i -tls -s enable 0;done
- 检查物理链接(双机直连场景无需检查)。
- 检查机器间互联情况。
- 先获取各机器每张卡的IP地址。
- 机器A各卡与机器B的每张卡通过ping命令进行连接检查。
for j in {0..7}; do for i in {90..97}; do hccn_tool -i ${j} -ping -g address 10.30.4.${i}; 【机器B各个卡的IP地址】 done; done
斜体内容可根据实际情况进行配置。
双机直连场景下,检查机器A和机器B中互为对端的NPU device互连情况即可:
hccn_tool -i {机器A的npu device的id} -ping -g address {机器B的npu device的IP地址} - 机器B各卡与机器A的每张卡通过ping命令进行连接检查,与上述操作一致。
- 检查机器网络状况。
- 自行创建rank_table_file.json。
- 使用多机推理时,需要将包含设备IP地址,服务器IP地址等信息的json文件地址传递给底层通信算子。参考如下格式,配置rank_table_file.json ,参考:
{ "server_count": "...", # 总节点数 # server_list中第一个server为主节点 "server_list": [ { "device": [ { "device_id": "...", # 当前卡的本机编号,取值范围[0,本机卡数) "device_ip": "...", # 当前卡的IP地址,可通过hccn_tool命令获取 "rank_id": "..." # 当前卡的全局编号,取值范围[0,总卡数) }, ... ], "server_id": "...", # 当前节点的IP地址 "container_ip": "..." # 容器IP地址,所有机器的容器IP保持一致 }, ... ], "status": "completed", "version": "1.0" }
- rank_table_file.json配置完成后,需要执行命令修改权限为640。
chmod -R 640 {rank_table_file.json路径}
需要在所有部署节点上创建rank_table_file.json文件,并确保各节点上的rank_table_file.json内容文件保持一致,除了“server_id”应为该机器的IP地址。
- 使用多机推理时,需要将包含设备IP地址,服务器IP地址等信息的json文件地址传递给底层通信算子。参考如下格式,配置rank_table_file.json ,参考:
- 下载并安装驱动和固件。
- 访问昇腾社区并下载镜像文件。下载前需要根据链接中的指导申请下载权限。

- 启动容器。启动容器前,需修改权重路径的执行权限,例如:chmod -R 750 /home/data/deepseekv3。
docker run -itd --privileged --name= {容器名称} --net=host --shm-size 500g \ --device=/dev/davinci0 \ --device=/dev/davinci1 \ --device=/dev/davinci2 \ --device=/dev/davinci3 \ --device=/dev/davinci4 \ --device=/dev/davinci5 \ --device=/dev/davinci6 \ --device=/dev/davinci7 \ --device=/dev/davinci_manager \ --device=/dev/hisi_hdc \ --device /dev/devmm_svm \ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \ -v /usr/local/Ascend/firmware:/usr/local/Ascend/firmware \ -v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \ -v /usr/local/sbin:/usr/local/sbin \ -v /etc/hccn.conf:/etc/hccn.conf \ -v {/权重路径:/权重路径} \ -v {/rank_table_file.json路径:/rank_table_file.json路径} \ {根据加载的镜像名称修改} \ bash
需要在所有部署节点上启动容器。
- 配置环境。
- 进入容器。
docker exec -it {容器名称} bash - 设置基础环境变量。
source /usr/local/Ascend/ascend-toolkit/set_env.sh source /usr/local/Ascend/nnal/atb/set_env.sh source /usr/local/Ascend/atb-models/set_env.sh source /usr/local/Ascend/mindie/set_env.sh
- 开启通信环境变量。
export ATB_LLM_HCCL_ENABLE=1 export ATB_LLM_COMM_BACKEND="hccl" export HCCL_CONNECT_TIMEOUT=7200
双机:export WORLD_SIZE=16
- 配置服务化环境变量“expandable_segments”,使能内存池扩展段功能,即虚拟内存特性。
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
服务化需要在rank_table_file.json中配置“container_ip”字段。 所有使用机器的配置应该保持一致,除了环境变量的“MIES_CONTAINER_IP”为本机IP地址。export MIES_CONTAINER_IP= {容器IP地址} export RANK_TABLE_FILE= {rank_table_file.json路径} - 修改服务化参数。
vim /usr/local/Ascend/mindie/latest/mindie-service/conf/config.json
按照以下内容修改。# 如果网络环境不安全,不开启HTTPS通信,即“httpsEnabled”=“false”时,会存在较高的网络安全风险 "httpsEnabled" : false, ... # 开启多机推理 ... # 若不需要安全认证,则将以下两个参数设为false "multiNodesInferEnabled" : true, "interCommTLSEnabled" : false, "interNodeTLSEnabled" : false, ... "npudeviceIds" : [[0,1,2,3,4,5,6,7]], ... "modelName" : "DeepSeek-R1" # 不影响服务化拉起 "modelWeightPath" : "权重路径", "worldSize":8,
- 进入容器。
- 启动service服务。以下命令需在所有机器上同时执行。
- 解决权重加载过慢问题。
export OMP_NUM_THREADS=1
- 设置显存比。
export NPU_MEMORY_FRACTION=0.95
- 拉起服务化,先拉起主节点服务化,再拉起其他副节点的服务化。
cd /usr/local/Ascend/mindie/latest/mindie-service/ ./bin/mindieservice_daemon
执行命令后,首先会打印本次启动所用的所有参数,然后直到出现以下输出,则认为服务启动成功。Daemon start success!
- 新建窗口进行接口测试。
curl -X POST -d '{ "model":"Deepseek-R1", "messages": [{ "role": "system", "content": "你是谁?" }], "max_tokens": 20, "stream": false }' http://ip:port/v1/chat/completions
- 解决权重加载过慢问题。
父主题: 部署AI服务