1. NPU与DPU异构环境搭建

任务目标

在一台x86服务器上搭建同时包含NPU(以寒武纪MLU370为例)与DPU(以NVIDIA BlueField-2为例)的异构计算环境,完成驱动安装、固件确认及基础软件栈(运行时与开发工具)配置,使两类加速设备均能被系统正确识别并可供上层调用。

环境与依赖

  • 操作系统:Ubuntu 20.04 LTS(内核≥5.4)
  • NPU:寒武纪MLU370-X8加速卡,需配套cambricon-npu-driver与cambricon-mlu运行时
  • DPU:NVIDIA BlueField-2,需MLNX_OFED驱动及DOCA工具链
  • BIOS已开启SR-IOV与Above 4G Decoding

实施步骤

1. 安装NPU驱动与运行时

从寒武纪官网获取匹配内核版本的驱动包,执行安装并验证设备节点。

# 安装NPU驱动(以cambricon-npu-driver-6.2.1为例)
sudo dpkg -i cambricon-npu-driver_6.2.1_amd64.deb
sudo modprobe mlu

# 安装CNToolkit运行时(包含cnmon、cnrt等工具)
sudo dpkg -i cntoolkit_3.5.0_ubuntu20.04.deb

# 验证NPU设备是否被识别
ls /dev/mlu*

预期输出:/dev/mlu0设备节点存在,执行cnmon可显示板卡温度、显存及算力状态。

2. 安装DPU驱动与DOCA

# 安装MLNX_OFED驱动(需与内核版本匹配)
sudo ./mlnxofedinstall --dpdk --upstream-libs
sudo /etc/init.d/openibd restart

# 安装DOCA SDK(用于DPU主机侧管理)
sudo apt install ./doca-sdk_2.2.0_amd64.deb

# 验证DPU设备
ibv_devinfo | grep -A2 "hca_id:"

预期输出:显示hca_id: mlx5_0及BlueField-2设备名称,端口状态为PORT_ACTIVE。

3. 配置异构协同基础软件栈

安装异构通信中间件,使NPU与DPU可共享数据通路。

# 安装CNRT的DPU扩展库(用于NPU-DPU直接内存访问)
sudo dpkg -i cnrt-dpu-ext_1.2.0_amd64.deb

# 设置环境变量
echo 'export LD_LIBRARY_PATH=/usr/local/cnrt/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
echo 'export DOCA_PATH=/opt/mellanox/doca' >> ~/.bashrc
source ~/.bashrc

验证方法

运行以下综合检测脚本,确认两类设备均处于可用状态:

#!/bin/bash
# 验证NPU
if [ -e /dev/mlu0 ]; then
    echo "NPU设备: 已识别"
    cnmon info | grep "Device Name"
else
    echo "NPU设备: 未找到"
fi

# 验证DPU
if ibv_devinfo | grep -q "BlueField-2"; then
    echo "DPU设备: 已识别"
    ibv_devinfo | grep "state:"
else
    echo "DPU设备: 未找到"
fi

# 验证异构通信库
if ldconfig -p | grep -q "libcnrt_dpu"; then
    echo "异构通信库: 已安装"
else
    echo "异构通信库: 缺失"
fi

通过条件:脚本输出中NPU与DPU均显示“已识别”,且异构通信库显示“已安装”。若任一设备未识别,检查PCIe插槽供电及内核模块加载状态(dmesg | grep -i mlu或dmesg | grep -i mlx5)。

常见问题

  • NPU驱动编译失败:确认内核头文件已安装(sudo apt install linux-headers-$(uname -r))
  • DPU端口未激活:执行sudo mlxconfig -d /dev/mst/mt41686_pciconf0 set LINK_TYPE_P1=2并重启
  • 设备冲突:若NPU与DPU中断号冲突,在BIOS中调整PCIe ACS开关或更换插槽位置
x86 主机 CPU PCIe Gen4 x16 总线 寒武纪 MLU370 NPU 加速卡 /dev/mlu0 BlueField-2 DPU 智能网卡 mlx5_0 异构软件栈 CNToolkit (CNRT) + DOCA SDK + cnrt-dpu-ext 通信库 驱动层: cambricon-npu-driver + MLNX_OFED 驱动接口 驱动接口