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开关或更换插槽位置