---
title: 部署推理服务（DeepSeek V3/R1）
description: "1. 按照1下载相应的模型文件。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengrag/bestpractice/kunpengrag_21_0013.html
sourcePath: /source/zh/kunpengrag/bestpractice/kunpengrag_21_0013.html
indexId: 6a205fcef70751520c45515fcfca4ff8ed8a7ac673f9a0e6a66e8433f5c62bf658
---
# 部署推理服务（DeepSeek V3/R1）

1. 按照1下载相应的模型文件。
2. 模型转换。由于昇腾硬件不支持FP8，因此需先权重转换为BF16；根据需求继续将BF16转换为INT8。

  - FP8转换BF16步骤请参见    模型库-DeepSeek-V3-模型使用(https://www.hiascend.com/software/modelzoo/models/detail/678bdeb4e1a64c9dae51d353d84ddd15)
。
  - BF16转换INT8（单卡时转换时间需要7~8h，8卡时转换时间需要1h）步骤如下：

    a. 下载msit并安装。

```
git clone -b br_noncom_MindStudio_8.0.0_POC_20251231 https://gitcode.com/Ascend/msit.git
cd msit/msmodelslim
bash install.sh
```


    b. 从      昇腾社区(https://www.hiascend.com/developer/download/community/result?module=cann)
下载ascend-toolkit和ascend-cann-kernels。
    c. 检查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
```


    d. 配置ascend-toolkit环境变量。

```
source /usr/local/Ascend/ascend-toolkit/set_env.sh
```


    e. 安装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
```


    f. 升级transformers。

```
pip install transformers==4.48.2
```


    g. 修改模型权重的modeling_deepseek.py，注释掉“is_flash_attn_2_available”相关内容。

```
vim /home/openlab/deepseek-v3-bf16/modeling_deepseek.py
```


    h. 修改模型config.json，删除“quantization_config”。

```
vim /home/openlab/deepseek-v3-bf16/config.json
```


    i. 配置环境变量并进行转换。

```
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
```


3. 修改模型权重目录下的config.json文件。将“model_type”更改为“deepseekv2”（全小写且无空格）。

```
"model_type":"deepseekv2"
```


4. 将模型权重目录拷贝到其他节点上。
5. 配置机器NPU网卡信息（双机直连场景）。

  - 配置设备IP地址和掩码信息。

    a. 配置机器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. 配置机器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
```


  - 配置检测对象IP地址信息。

    a. 配置机器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. 配置机器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
```


      斜体部分按实际规划修改。

6. 检查机器网络状况及机器间互联情况。

  - 检查机器网络状况。

    a. 检查物理链接（双机直连场景无需检查）。

```
for i in {0..7}; do hccn_tool -i $i -lldp -g | grep Ifname; done
```


    b. 检查链接。

```
for i in {0..7}; do hccn_tool -i $i -link -g ; done
```


    c. 检查网络健康情况。

```
for i in {0..7}; do hccn_tool -i $i -net_health -g ; done
```


    d. 查看监测的IP地址配置是否正确，即监测IP地址为npu device ip。

```
for i in {0..7}; do hccn_tool -i $i -netdetect -g ; done
```


    e. 查看网关是否配置正确（双机直连场景下，不设置网关）。

```
for i in {0..7}; do hccn_tool -i $i -gateway -g ; done
```


    f. 获取每张卡的IP地址。

```
for i in {0..7};do hccn_tool -i $i -ip -g; done
```


    g. 检测NPU底层TLS行为一致性，每台机器需要是一样的值，建议全0。

```
for i in {0..7}; do hccn_tool -i $i -tls -g ; done | grep switch
```


    h. NPU底层TLS校验行为置0操作。

```
for i in {0..7};do hccn_tool -i $i -tls -s enable 0;done
```


  - 检查机器间互联情况。

    a. 先获取各机器每张卡的IP地址。
    b. 机器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地址}

    c. 机器B各卡与机器A的每张卡通过ping命令进行连接检查，与上述操作一致。
7. 自行创建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地址。

8. 下载并安装驱动和固件。
  请参见2~3查看Atlas 800I A2推理产品如何安装NPU的驱动和固件。

9. 访问昇腾社区(https://www.hiascend.com/developer/ascendhub/detail/af85b724a7e5469ebd7ea13c3439d48f)并下载镜像文件。下载前需要根据链接中的指导申请下载权限。
10. 启动容器。
  启动容器前，需修改权重路径的执行权限，例如：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
```


  需要在所有部署节点上启动容器。

11. 配置环境。

  a. 进入容器。

```
docker exec -it {容器名称} bash
```


  b. 设置基础环境变量。

```
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
```


  c. 开启通信环境变量。

```
export ATB_LLM_HCCL_ENABLE=1
export ATB_LLM_COMM_BACKEND="hccl"
export HCCL_CONNECT_TIMEOUT=7200
```


    双机：

```
export WORLD_SIZE=16
```


  d. 配置服务化环境变量“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路径}
```


  e. 修改服务化参数。

```
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,
```


12. 启动service服务。以下命令需在所有机器上同时执行。

  a. 解决权重加载过慢问题。

```
export OMP_NUM_THREADS=1
```


  b. 设置显存比。

```
export NPU_MEMORY_FRACTION=0.95
```


  c. 拉起服务化，先拉起主节点服务化，再拉起其他副节点的服务化。

```
cd /usr/local/Ascend/mindie/latest/mindie-service/
./bin/mindieservice_daemon
```


    执行命令后，首先会打印本次启动所用的所有参数，然后直到出现以下输出，则认为服务启动成功。

```
Daemon start success!
```


  d. 新建窗口进行接口测试。

```
curl -X POST -d '{
"model":"Deepseek-R1",
"messages": [{
"role": "system",
"content": "你是谁？"
}],
"max_tokens": 20,
"stream": false
}' http://ip:port/v1/chat/completions
```
