Atlas 800I A2 双机直连部署DeepSeek-R1-w8a8

news/2025/3/29 13:01:05/

一、环境信息

1.1、硬件信息

Atlas 800I A2 * 2

1.2、环境信息

操作系统:openEuler 22.03 LTS
NPU驱动:Ascend-hdk-910b-npu-driver 24.1.0 linux-aarch64.run
NPU固件:Ascend-hdk-910b-npu-firware 7.5.0.3.220.run
MindIE镜像:2.0.T3-800I-A2-py311-openeuler24.03-lts

1.3、组网信息

  • 一台服务器的NPU-0口对应另一个服务器的NPU-0,然后剩下的依次使用光纤连接;
  • NPU侧IP最好在同一个网段里。

二、安装驱动固件

2.1、创建运行用户和所属组

groupadd HwHiAiUser
useradd -g HwHiAiUser -d /home/HwHiAiUser -m HwHiAiUser -s /bin/bash

2.2、安装驱动(根据提示选择是否重启)

./Ascend-hdk-910b-npu-driver_24.1.0_linux-aarch64.run --full --install-for-all

2.3、安装固件(根据提示选择是否重启)

./Ascend-hdk-910b-npu-firmware_7.5.0.3.220.run --full

三、配置参数面(NPU)网络

3.1、配置IP和掩码

# 配置master节点上NPU的IP和掩码
hccn_tool -i 0 -ip -s address 修改成自己规划的IP netmask 255.255.255.0 
hccn_tool -i 1 -ip -s address 修改成自己规划的IP netmask 255.255.255.0 
hccn_tool -i 2 -ip -s address 修改成自己规划的IP netmask 255.255.255.0 
hccn_tool -i 3 -ip -s address 修改成自己规划的IP netmask 255.255.255.0 
hccn_tool -i 4 -ip -s address 修改成自己规划的IP netmask 255.255.255.0 
hccn_tool -i 5 -ip -s address 修改成自己规划的IP netmask 255.255.255.0 
hccn_tool -i 6 -ip -s address 修改成自己规划的IP netmask 255.255.255.0 
hccn_tool -i 7 -ip -s address 修改成自己规划的IP netmask 255.255.255.0# 配置node节点上的NPU的IP和掩码
hccn_tool -i 0 -ip -s address 修改成自己规划的IP netmask 255.255.255.0 
hccn_tool -i 1 -ip -s address 修改成自己规划的IP netmask 255.255.255.0 
hccn_tool -i 2 -ip -s address 修改成自己规划的IP netmask 255.255.255.0 
hccn_tool -i 3 -ip -s address 修改成自己规划的IP netmask 255.255.255.0 
hccn_tool -i 4 -ip -s address 修改成自己规划的IP netmask 255.255.255.0 
hccn_tool -i 5 -ip -s address 修改成自己规划的IP netmask 255.255.255.0 
hccn_tool -i 6 -ip -s address 修改成自己规划的IP netmask 255.255.255.0 
hccn_tool -i 7 -ip -s address 修改成自己规划的IP netmask 255.255.255.0

3.2、配置检测IP

检测IP配置成对端NPU口的IP,比如说机器1的IP是: 192.168.10.11,机器2的IP是:192.168.10.19。那机器1的检测IP就是:192.168.10.19,机器2的检测IP就是:192.168.10.11。

# 配置master节点上NPU的侦测IP
hccn_tool -i 0 -netdetect -s address 修改成自己规划的IP
hccn_tool -i 1 -netdetect -s address 修改成自己规划的IP
hccn_tool -i 2 -netdetect -s address 修改成自己规划的IP
hccn_tool -i 3 -netdetect -s address 修改成自己规划的IP
hccn_tool -i 4 -netdetect -s address 修改成自己规划的IP
hccn_tool -i 5 -netdetect -s address 修改成自己规划的IP
hccn_tool -i 6 -netdetect -s address 修改成自己规划的IP
hccn_tool -i 7 -netdetect -s address 修改成自己规划的IP# 配置master节点上NPU的侦测IP
hccn_tool -i 0 -netdetect -s address 修改成自己规划的IP
hccn_tool -i 1 -netdetect -s address 修改成自己规划的IP
hccn_tool -i 2 -netdetect -s address 修改成自己规划的IP
hccn_tool -i 3 -netdetect -s address 修改成自己规划的IP
hccn_tool -i 4 -netdetect -s address 修改成自己规划的IP
hccn_tool -i 5 -netdetect -s address 修改成自己规划的IP
hccn_tool -i 6 -netdetect -s address 修改成自己规划的IP
hccn_tool -i 7 -netdetect -s address 修改成自己规划的IP

3.3、关闭TLS

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

3.4、检测配置是否正确

1.1、检查物理链接
for i in {0..7}; do hccn_tool -i $i -lldp -g | grep Ifname; done 1.2、检查链接情况
for i in {0..7}; do hccn_tool -i $i -link -g ; done1.3、检查网络健康情况
for i in {0..7}; do hccn_tool -i $i -net_health -g ; done1.4、查看侦测ip的配置是否正确
for i in {0..7}; do hccn_tool -i $i -netdetect -g ; done1.5、获取每张卡的ip地址
for i in {0..7};do hccn_tool -i $i -ip -g; done1.6、检测NPU底层TLS行为一致性,每台机器需要是一样的值,建议全0
for i in {0..7}; do hccn_tool -i $i -tls -g ; done | grep switch1.7、NPU底层tls校验行为置0操作 
for i in {0..7};do hccn_tool -i $i -tls -s enable 0;done1.8、检测机器间NPU互联情况
hccn_tool -i NPU节点 -ping -g address 另一台机器NPU的IP

四、编辑rank_table_file.json文件

{"server_count": "2","server_list": [{"device": [{"device_id": "0","device_ip": "参数面IP-修改成自己规划的IP","rank_id": "0"},{"device_id": "1","device_ip": "参数面IP-修改成自己规划的IP","rank_id": "1"},{"device_id": "2","device_ip": "参数面IP-修改成自己规划的IP","rank_id": "2"},{"device_id": "3","device_ip": "参数面IP-修改成自己规划的IP","rank_id": "3"},{"device_id": "4","device_ip": "参数面IP-修改成自己规划的IP","rank_id": "4"},{"device_id": "5","device_ip": "参数面IP-修改成自己规划的IP","rank_id": "5"},{"device_id": "6","device_ip": "参数面IP-修改成自己规划的IP","rank_id": "6"},{"device_id": "7","device_ip": "参数面IP-修改成自己规划的IP","rank_id": "7"}],"server_id": "master-业务IP","container_ip": "master-业务IP"},{"device": [{"device_id": "0","device_ip": "参数面IP-修改成自己规划的IP","rank_id": "8"},{"device_id": "1","device_ip": "参数面IP-修改成自己规划的IP","rank_id": "9"},{"device_id": "2","device_ip": "参数面IP-修改成自己规划的IP","rank_id": "10"},{"device_id": "3","device_ip": "参数面IP-修改成自己规划的IP","rank_id": "11"},{"device_id": "4","device_ip": "参数面IP-修改成自己规划的IP","rank_id": "12"},{"device_id": "5","device_ip": "参数面IP-修改成自己规划的IP","rank_id": "13"},{"device_id": "6","device_ip": "参数面IP-修改成自己规划的IP","rank_id": "14"},{"device_id": "7","device_ip": "参数面IP-修改成自己规划的IP","rank_id": "15"}],"server_id": "node-业务IP","container_ip": "node-业务IP"}],"status": "completed","version": "1.0"
}

五、启动容器

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 物理机权重路径:容器权重路径 \容器镜像名称或ID \bash

六、设置容器环境变量

vim ~/.bashrcsource /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 MIES_CONTAINER_IP=容器IP
export RANKTABLEFILE=rank_table_file.json文件路径# 日志打印(默认Error级别)
export MINDIE_LOG_TO_STDOUT=1# 虚拟内存
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True# ATB WorkSpace 使能
export ATB_WORKSPACE_MEM_ALLOC_ALG_TYPE=3
export ATB_WORKSPACE_MEM_ALLOC_GLOBAL=1 # 单线程加速权重加载
export OMP_NUM_THREADS=1# 设置显存占比
export NPU_MEMORY_FRACTION=0.96# 设置精度饱和模式,防止fp16引起的上下溢出
export INF_NAN_MODE_ENABLE=0# 关闭确定性计算
export HCCL_DETERMINISTIC=false# 使能AIV,暂时还有问题性问题,不建议线上业务使用,性能复现必须开启
export HCCL_OP_EXPANSION_MODE="AIV"# 使能内存复用
export ATB_LAYER_INTERNAL_TENSOR_REUSE=1
export ATB_OPERATION_EXECUTE_ASYNC=1
export ATB_CONVERT_NCHW_TO_ND=1
export ATB_WORKSPACE_MEM_ALLOC_GLOBAL=1
export ATB_WORKSPACE_MEM_ALLOC_ALG_TYPE=3
export ATB_CONTEXT_WORKSPACE_SIZE=0
export ATB_LAUNCH_KERNEL_WITH_TILING=1
export ATB_LLM_ENABLE_AUTO_TRANSPOSE=0# CPU亲和性调度
export CPU_AFFINITY_CONF=1
export TASK_QUEUE_ENABLE=1
unset ASCEND_LAUNCH_BLOCKING

七、拉起服务

# 修改MindIE配置文件
cd /usr/local/Ascend/mindie/latest/mindie-service/
vim conf/config.json# 修改如下配置:
"ipAddress" : "改成主节点IP""managementIpAddress" : "改成主节点IP"
"httpsEnabled" : false
"multiNodesInferEnabled" : true
"interCommTLSEnabled" : false
"interNodeTLSEnabled" : false
"npudeviceIds" : [[0,1,2,3,4,5,6,7]]
"modelName" : "模型名称"
"modelWeightPath" : "权重路径"
"worldSize":8# 配置文件权限
chmod -R 640 {rank_table_file.json路径}
chmod -R 750 {/path-to-weights}# 拉起服务
nohup ./bin/mindieservice_daemon > output.log 2>&1 &# 停止服务
ps -ef | grep mindieservice
pkill -9 mindieservice

八、测试

curl http://IP:1025/v1/chat/completions -d '{"model": "改为mindie配置文件中设置的名称","messages": [{"role": "user", "content": "请告诉我关于人工智能的一些信息。"}],"stream": true}'

http://www.ppmy.cn/news/1583134.html

相关文章

Excel第41套全国人口普查

2. 导入网页中的表格:数据-现有链接-考生文件夹:网页-找到表格-点击→变为√-导入删除外部链接关系:数据-点击链接-选中连接-删除-确定(套用表格格式-也会是删除外部链接)数值缩小10000倍(除以10000即可&am…

[MySQL#1] database概述 常见的操作指令 MySQL架构 存储引擎

#1024程序员节|征文# 目录 一. 数据库概念 0.连接服务器 1. 什么是数据库 口语中的数据库 为什么数据不直接以文件形式存储,而需要使用数据库呢? 总结 二. ??基础操作 三. 主流数据库 四. 基础知识 服务器,数据库&…

Java 项目 IntelliJ IDEA 多环境配置详解

目录 一、使用 Maven Profiles 实现多环境配置1. 在 `pom.xml` 中配置 Profiles2. 创建多环境配置文件3. 配置文件内容示例`application.properties``application-dev.properties``application-test.properties``application-prod.properties`4. 在代码中获取配置5. 激活 Maven…

数据结构-----树

一、树的基本概念 1. 树的结构定义 递归定义: 空树(n0)非空树(n≥1): 唯一根结点m个互不相交的子树(m≥0) 2. 核心术语 术语说明图示示例结点的度结点的子树个数树的度树中所有…

LeetCode 热题 100----2.移动零

LeetCode 热题 100----2.移动零 题目描述 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。示例 1:输入: nums [0,1,0,3,12] 输出: [1,3,12,…

requestAnimationFrame和requestIdleCallback分别是什么,是用在什么场景下

深入解析 requestAnimationFrame 和 requestIdleCallback requestAnimationFrame (rAF) 和 requestIdleCallback (rIC) 都是浏览器提供的 异步调度 API,但它们的执行时机和用途完全不同。 API主要用途何时执行是否保证执行适合场景requestAnimationFrame高优先级 U…

如何使用go的template模版

tmpl, err tmpl.New("page_content").Parse(fmt.Sprintf({{template "%s" .}}, contentBlockName)) 创建新块: tmpl.New("page_content"):在模板对象tmpl中定义一个新的、名为"page_content"的块。这个块是动…

深入剖析Java虚拟机(JVM):从零开始掌握Java核心引擎

📌 引言:为什么每个Java开发者都要懂JVM? 想象你是一名赛车手,Java是你的赛车,而JVM就是赛车的引擎。 虽然你可以不关心引擎内部构造就能开车,但要想在比赛中获胜,必须了解引擎如何工作&#…