写给新手的 driver:昇腾驱动到底是啥?
之前帮新装的兄弟配置环境,他问我:“哥,我装完 CANN,还要装啥?代码能跑,但 npu-smi 看不到设备。”
我说你驱动没装对。
好问题。今天一次说清楚。
driver 是啥?
driver 是昇腾的设备驱动。让操作系统能识别和管理昇腾硬件。
一句话说清楚:driver 是昇腾的硬件驱动,装了才能用npu-smi看设备、跑模型。
你说气人不气人,CANN 装了但驱动没装,代码跑不了,卡在设备初始化。
为什么要用 driver?
三个字:硬件认不出来。
没装 driver
# 装了 CANN,但没装驱动$ python-c"import torch; print(torch.backends.npu.is_available())"False# 找不到设备$ npu-smi info bash: npu-smi:commandnot found# 代码跑不了$ python train.py RuntimeError: Failed to initialize NPU device0装了 driver
# 装了驱动$ npu-smi info +-----------------------------------------------------------------------------+|NPU Driver Version:24.1.rc1||NPU Count:8||NPU ID:0, Name: Ascend910, Health: OK, Memory: 80GB||NPU ID:1, Name: Ascend910, Health: OK, Memory: 80GB||...|+-----------------------------------------------------------------------------+ $ python-c"import torch; print(torch.backends.npu.is_available())"True# 能找到设备了# 代码能跑了$ python train.py Training started...你说气人不气人,装了驱动一句话的事,没装折腾一下午。
核心概念就三个
1. 驱动版本
驱动版本要和 CANN 匹配:
# 查看驱动版本$ npu-smi info|grep"Driver Version"NPU Driver Version:24.1.rc1# 查看 CANN 版本$ canninfo CANN Version:8.0.0# 版本匹配表# CANN 8.0.0 ← 驱动 24.1.rc1# CANN 8.5.0 ← 驱动 24.5.rc1# CANN 9.0.0 ← 驱动 25.0.rc1关键点:驱动版本和 CANN 版本要匹配,不然会不兼容。
2. 设备文件
驱动会创建设备文件:
# 查看设备文件$ls-l/dev/davinci* crw-------1root root239,0May2209:00 /dev/davinci0 crw-------1root root239,1May2209:00 /dev/davinci1 crw-------1root root239,2May2209:00 /dev/davinci2 crw-------1root root239,3May2209:00 /dev/davinci3# 每个 NPU 对应一个设备文件# /dev/davinci0 ← NPU 0# /dev/davinci1 ← NPU 1关键点:如果没有设备文件,说明驱动没装好。
3. 用户权限
要用 NPU,用户要在HwHiAiUser组里:
# 查看用户组$groups$USERLENOVO:LENOVO LwHiAiUserdocker# 如果不在组里,加进去$sudousermod-aGLwHiAiUser$USER# 重新登录后生效$logout$ login关键点:权限不对,会报Permission denied。
为什么要用 driver?
三个理由:
1. 不装跑不了
这是硬性要求:
# 装了 CANN,但没装驱动$ python-c"import torch; x = torch.randn(1024, 1024).npu()"RuntimeError: ascend device0initialization failed# 装了驱动$ python-c"import torch; x = torch.randn(1024, 1024).npu()"# 成功!你说气人不气人,硬性要求,不装不行。
2. 版本要匹配
驱动和 CANN 版本不对,会有莫名其妙的问题:
# 驱动 24.1.rc1 + CANN 8.0.0 → 正常$ python train.py Training...# 驱动 24.1.rc1 + CANN 8.5.0 → 可能出问题$ python train.py RuntimeError: incompatible driver version# 解决:升级驱动或降级 CANN3. 管理工具
装了驱动才有npu-smi:
# 查看设备状态$ npu-smi info# 查看设备利用率$ npu-smi stats-i0NPU ID:0AI Core Usage:78% Memory Usage: 45GB / 80GB Temperature:65°C# 监控训练$watch-n1npu-smi stats-i0你说气人不气人,装了驱动才有管理工具。
怎么用?代码示例
示例 1:安装驱动
# 1. 下载驱动(从昇腾官网)$wgethttps://ascend.huawei.com/file/24.1.rc1/Ascend-driver_24.1.rc1_linux-x86_64.run# 2. 赋予执行权限$chmod+x Ascend-driver_24.1.rc1_linux-x86_64.run# 3. 安装(需要 root 权限)$sudo./Ascend-driver_24.1.rc1_linux-x86_64.run--full# 4. 重启$sudoreboot# 5. 验证$ npu-smi info示例 2:验证安装
# 1. 检查驱动版本$ npu-smi info|grep"Driver Version"NPU Driver Version:24.1.rc1# 2. 检查设备文件$ls/dev/davinci*|wc-l8# 8 张卡# 3. 检查用户权限$groups$USER|grepLwHiAiUser LENOVO:LENOVO LwHiAiUser# 有权限# 4. 检查 CANN 版本$ canninfo|grep"Version"CANN Version:8.0.0# 5. 测试代码$ python-c"import torch; print(torch.backends.npu.is_available())"True示例 3:常见问题排查
# 问题 1:找不到 npu-smi$ npu-smi info bash: npu-smi:commandnot found# 解决:驱动没装或环境变量没设$exportPATH=$PATH:/usr/local/Ascend/driver/tools $ npu-smi info# 问题 2:Permission denied$ python-c"import torch; x = torch.randn(1024, 1024).npu()"RuntimeError: Permission denied# 解决:加用户到组$sudousermod-aGLwHiAiUser$USER$logout&&login# 问题 3:设备初始化失败$ python-c"import torch; x = torch.randn(1024, 1024).npu()"RuntimeError: Failed to initialize NPU device0# 解决:检查驱动和 CANN 版本是否匹配$ npu-smi info|grep"Driver Version"$ canninfo|grep"Version"示例 4:多机环境
# 多机环境,每台机器都要装驱动# 机器 0$sshnode0 $ npu-smi info|grep"NPU Count"NPU Count:8$exit# 机器 1$sshnode1 $ npu-smi info|grep"NPU Count"NPU Count:8$exit# 机器 2$sshnode2 $ npu-smi info|grep"NPU Count"NPU Count:8$exit# 都装好了,才能做分布式训练性能数据
驱动版本对性能的影响:
| 驱动版本 | CANN 版本 | 推理延迟 | 说明 |
|---|---|---|---|
| 24.1.rc1 | 8.0.0 | 5.0ms | 匹配 |
| 24.1.rc1 | 8.5.0 | 可能不稳定 | 不匹配 |
| 24.5.rc1 | 8.5.0 | 4.8ms | 匹配 |
| 25.0.rc1 | 9.0.0 | 4.5ms | 匹配(最新) |
你说气人不气人,版本匹配性能好,不匹配可能出问题。
跟其他仓库的关系
driver 在 CANN 架构里属于第 5 层(昇腾计算基础层),是硬件和软件之间的桥梁。
依赖关系:
硬件(昇腾 NPU) ↑ 被调用 driver(设备驱动) ↑ 被调用 CANN(第 1-4 层) ↑ 被调用 你的代码解释一下:
- 硬件:昇腾 NPU(物理设备)
- driver:设备驱动(让系统能识别硬件)
- CANN:上层软件(算子库、编译器…)
- 你的代码:调用 CANN
简单说:driver是硬件和软件之间的桥梁。没有驱动,软件调用不了硬件。
driver 的核心能力
1. 设备识别
# 查看设备$ npu-smi info# 查看详细信息$ npu-smi info-tboard# 查看每个设备的利用率$ npu-smi stats-i02. 设备管理
# 重置设备$sudonpu-smi reset-i0# 设置设备模式$sudonpu-smiset-i0-p0-v1# 查看设备日志$sudonpu-smi log-i03. 性能监控
# 实时监控$watch-n1npu-smi stats-i0# 查看温度$ npu-smi info-ttemp# 查看功耗$ npu-smi info-tpower适用场景
什么情况下要装 driver:
- 新环境:第一次用昇腾 NPU
- 重装系统:系统重装了要重装驱动
- 升级 CANN:驱动版本也要跟着升
什么情况下不用:
- 已有环境:已经装好了不用动
- Docker 容器:容器里不用装驱动(用宿主机的)
总结
driver 就是昇腾的设备驱动:
- 设备识别:让系统能认出来 NPU
- 设备管理:重置、设置、查看日志
- 性能监控:实时监控利用率、温度、功耗
