4. 驱动与固件安装:让NPU真正跑起来
说实话,很多同学在NPU开发板上卡住,十有八九是驱动和固件没装对。我刚开始接触NPU时也踩过这个坑——硬件插上了,灯也亮了,但npu-smi就是死活认不到设备。后来才发现,驱动版本和固件不匹配。
这一章,我们就来搞定驱动下载、安装、固件升级,最后用命令验证是否加载成功。嗯,跟着我的节奏来,不会错。
4.1 驱动下载:别下错了版本
驱动下载是第一步,也是最容易出错的一步。我个人习惯是直接去芯片厂商的官方支持页面下载,而不是用第三方链接。你想想看,驱动这种底层软件,一旦版本不对,轻则功能异常,重则系统崩溃。
以我常用的华为Ascend系列为例,下载路径一般是:
# 官方驱动下载地址(示例)
https://support.huawei.com/enterprise/zh/ascend-computing/category/ascend-computing-pid-251738910
# 或者使用wget直接拉取
wget https://ascend-repo.obs.cn-north-4.myhuaweicloud.com/Ascend%20Driver/23.0.rc1/Ascend-hdk-310p3-npu-driver_23.0.rc1_linux-aarch64.run
⚠️ 注意: 一定要根据你的NPU芯片型号和操作系统架构(x86_64还是aarch64)选择对应的驱动包。我曾经帮一个同事排查问题,搞了半天才发现他下载的是x86版本,但板子是ARM架构的。
下载完成后,建议先校验一下文件的完整性:
# 计算MD5值
md5sum Ascend-hdk-310p3-npu-driver_23.0.rc1_linux-aarch64.run
# 和官方提供的MD5值对比
# 如果一致,说明文件没损坏
4.2 驱动安装步骤:一步步来
驱动安装其实不复杂,但有几个关键点要注意。我一般按这个流程走:
- 确认系统环境——检查内核版本、gcc版本、是否安装了依赖库
- 赋予执行权限——下载的.run文件默认没有执行权限
- 执行安装——用root权限运行
- 检查安装日志——看有没有报错
具体命令如下:
# 1. 检查系统环境
uname -a
cat /etc/os-release
gcc --version
# 2. 赋予执行权限
chmod +x Ascend-hdk-310p3-npu-driver_23.0.rc1_linux-aarch64.run
# 3. 执行安装(需要root权限)
sudo ./Ascend-hdk-310p3-npu-driver_23.0.rc1_linux-aarch64.run --full
# 4. 查看安装日志(默认路径)
tail -100 /var/log/ascend_seclog/ascend_install.log
💡 小技巧: 安装过程中如果提示缺少依赖,比如libcrypto.so.1.1之类的,别慌。用apt或yum装一下对应的库就行。我习惯在安装驱动前先跑一遍:
sudo apt-get update && sudo apt-get install -y build-essential libssl-dev
4.3 固件升级:别跳过这一步
驱动装好了,但NPU可能还是不能正常工作。为什么?因为固件版本可能太旧了。驱动和固件是配套的,就像钥匙和锁的关系。我遇到过好几次,驱动装完但npu-smi报错,一查日志发现是固件版本不匹配。
固件升级的步骤:
# 1. 下载固件包(同样从官方渠道)
wget https://ascend-repo.obs.cn-north-4.myhuaweicloud.com/Ascend%20Firmware/23.0.rc1/Ascend-hdk-310p3-npu-firmware_23.0.rc1_linux-aarch64.run
# 2. 安装固件
sudo ./Ascend-hdk-310p3-npu-firmware_23.0.rc1_linux-aarch64.run --full
# 3. 升级完成后,必须重启系统
sudo reboot
⚠️ 重要: 固件升级过程中绝对不能断电!我曾经在客户现场升级固件时,突然跳闸了...结果NPU变砖了,只能返厂维修。所以,升级前请确保有稳定的电源,最好接上UPS。
4.4 验证驱动是否加载成功
驱动和固件都装好了,怎么知道NPU是不是真的在工作?最直接的方法就是用npu-smi命令。这个命令相当于GPU的nvidia-smi,是NPU的监控利器。
先看看基本用法:
# 查看NPU设备列表
npu-smi info
# 查看某个芯片的详细信息
npu-smi info -t board -i 0
# 实时监控NPU使用率
npu-smi monitor
如果npu-smi能正常输出信息,说明驱动加载成功了。输出大概长这样:
+----------------------------------------------------------------------------+
| npu-smi 23.0.rc1 Version: 23.0.rc1 |
+----------------------+---------------+--------------------------------------+
| NPU Name | Health | Power(W) Temp(C) |
+----------------------+---------------+--------------------------------------+
| 0 Ascend310P3 | OK | 15.8 45 |
+----------------------+---------------+--------------------------------------+
除了npu-smi,还可以用这些命令验证:
# 检查内核模块是否加载
lsmod | grep npu
# 查看设备文件是否存在
ls -l /dev/davinci*
# 查看NPU进程
ps -ef | grep npu
🔍 排错思路: 如果npu-smi报错,先看这几个地方:
- 驱动是否安装成功——检查/var/log/ascend_seclog/下的日志
- 固件版本是否匹配——用
npu-smi info -t firmware -i 0查看 - 设备权限是否正确——确保当前用户属于HwHiAiUser组
4.5 一张图看懂驱动与固件安装流程
说了这么多,我画了一张流程图,把整个安装验证过程串起来。你跟着这个流程走,基本不会出问题。
4.6 常见问题与避坑指南
最后,分享几个我实际项目中遇到的坑,你遇到了可以直接对照解决:
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| npu-smi报"Device not found" | 驱动未加载或固件不匹配 | 检查dmesg日志,重新安装匹配的固件 |
| 安装时报"Permission denied" | 没有root权限 | 使用sudo执行安装命令 |
| npu-smi输出全是0 | NPU芯片未被正确初始化 | 重启系统,检查电源连接 |
| 升级固件后系统无法启动 | 固件与硬件不兼容 | 进入恢复模式,回退固件版本 |
💡 我的经验: 如果你在安装过程中遇到任何奇怪的问题,第一件事就是去看日志。日志路径一般在
/var/log/ascend_seclog/下。我曾经花了两小时排查一个驱动问题,最后发现是内核版本太新,驱动不支持。换了个LTS内核就好了。
好了,驱动和固件安装就讲到这里。你按照上面的步骤操作,应该能顺利让NPU跑起来。记住,遇到问题别慌,先看日志,再查版本匹配,最后检查硬件连接。这三板斧能解决90%的问题。
想要更多资料,联系可可