昇腾部署第 A1 课:驱动与固件——卡是怎么被系统认出来的
课件编号:A1(L0 硬件与驱动层 第 1 课) 编制:观澜|日期:2026-10-04 难度:入门 时长:约 45 分钟 是否需要硬件:❌ 不需要(本课讲原理和命令,不依赖真卡) 前置:第 0 课(A0 一张地图) 本课目标:说清驱动和固件各自是什么、各自在哪、各自怎么查,并会用
npu-smi命令族做一次设备体检
第一段 · 章前定位
A0 给了你地图,第一层(L0)写的是:卡 / 服务器 + 驱动 + 固件。
但这里藏着三个几乎每个新手都会卡住的问题:
- 驱动和固件有什么区别? 它们是不是一回事?为什么官方要分成两个包装?
- 为什么装了驱动,才有
npu-smi这个命令? - 为什么官方反复强调"装的时候顺序不能反"?
这三个问题的答案,这一课全给你。
本课的一句话:驱动是"系统认识卡"的桥,固件是"卡自己会干活"的底子。两个都要,缺一不可。
第二段 · 学习目标
学完这一课,你应该能:
- ✅ 说清驱动和固件各自装在哪、各自干什么
- ✅ 看懂驱动包和固件包的文件名,说出里面每一段是什么意思
- ✅ 知道首次安装和升级的顺序为什么不一样
- ✅ 用
npu-smi命令族完成一次设备体检(列出设备 → 看型号 → 看驱动/固件版本 → 看温度) - ✅ 看懂一条
npu-smi输出里的每个字段
第三段 · 先说清一件事:卡不止一种形态
昇腾的硬件不是只有"插在服务器里的卡"一种。官方产品线里,形态差得很远:
| 形态 | 代表型号 | 大致定位 |
|---|---|---|
| 开发者套件 | Atlas 200I DK A2 开发者套件 | 入门动手用,门槛最低 |
| 加速模块 | Atlas 200I A2 加速模块 | 给设备厂商集成的模组 |
| 推理卡 | Atlas 300I Pro / 300I Duo 推理卡、A300I A2 推理卡 | 插在服务器里做推理 |
| 视频解析卡 | Atlas 300V / 300V Pro 视频解析卡 | 偏视频分析场景 |
| 智能小站 / 边缘 | Atlas 500 A2 智能小站、Atlas 500 Pro 智能边缘服务器 | 边缘部署 |
| 训练服务器 | Atlas 800 训练服务器、Atlas 800T A2 训练服务器 | 训练 |
| 推理服务器 | Atlas 800 推理服务器、Atlas 800I A2 推理服务器 | 推理 |
| 超节点 / PoD | Atlas 800T A3 / 800I A3 超节点、Atlas 900 A3 SuperPoD、Atlas 900 A2 PoD | 大规模集群 |
⭐ 这一块对你有用的地方:
后面所有课讲的"装驱动""查设备"的操作,各种形态基本一致 —— 所以你学的时候不需要手上有哪一款。命令是一样的,差别只在参数和规模。
唯一要注意的是:有些型号分 RC 场景 和 EP 场景(两种工作模式,支持的场景和命令能力不同)。 到具体型号的课时我们再展开。
第四段 · 核心:驱动和固件,各是什么、各在哪
用一句话分清
| 驱动(Driver) | 固件(Firmware) | |
|---|---|---|
| 住在哪 | Host 服务器的操作系统里 | 卡自己里面 |
| 干什么 | 让操作系统和程序认得并使用这张卡 | 卡自己内部的运行程序,管卡的基础功能 |
| 谁在用它 | 你的程序、CANN、框架都通过它访问卡 | 卡自己启动和运行时用 |
| 版本怎么查 | npu-smi info -t board -i <设备ID> 的 Software Version 字段 |
同一条命令的 Firmware Version 字段 |
| 没装会怎样 | 系统根本看不到这张卡 | 卡能认到,但可能行为异常 |
⭐ 一个能解开常见困惑的官方事实
驱动包的官方全名是:「驱动 & npu-smi 工具包」。
包名:
Ascend-hdk-310b-npu-driver_x.x.x_linux-{arch}.run
注意看这个名字——它不只是驱动,它还包含了 npu-smi 这个工具。
所以"为什么装了驱动才有
npu-smi命令"这个问题,答案很简单: 因为npu-smi就在这个包里。没装驱动 = 没装 npu-smi。
这是一个很小的事实,但它能省掉很多"为什么我的机器上没有这个命令"的困惑。
看懂包名(官方说明)
Ascend-hdk-310b-npu-driver_x.x.x_linux-{arch}.run
└──┬──┘ └┬┘ └─┬─┘ └──┬──┘ └─┬─┘ └──┬──┘ └─┬─┘
│ │ │ │ │ │ └─ arch:系统架构(aarch64 / x86_64)
│ │ │ │ │ └─ linux:操作系统
│ │ │ │ └─ x.x.x:驱动包版本号
│ │ │ └─ npu-driver:这是驱动包
│ │ └─ 310b:芯片型号标识
│ └─ hdk:Hardware Development Kit
└─ Ascend:昇腾
固件包长得很像,只是那段变了:
Ascend-hdk-310b-npu-firmware_x.x.x.x.X.run
└────┬────┘
固件包版本号(比驱动多几段)
官方说明:
x.x.x表示 NPU 驱动包版本号;x.x.x.x.X表示 NPU 固件包版本号。 两者版本号格式不同,别把它们当成同一个东西的两种写法。
第五段 · 怎么装:顺序不能反
⭐ 装配顺序(官方原文,最重要的一条)
| 场景 | 顺序 |
|---|---|
| 首次安装 | 先装驱动,再装固件 |
| 覆盖安装 / 升级 | 先装固件,再装驱动 |
一句话记法:
第一次:驱动在前。之后每次:固件在前。
为什么要反着来? 可以这样理解:首次安装时,是"从无到有"——系统得先认识卡,卡才有机会被更新固件。 而升级时,是"从有到新"——先让卡自己的底子(固件)升上去,再让系统侧的桥(驱动)跟着升级,两者才能对上。
⚠️ 这一条务必记牢。顺序反了是新手最常踩的坑之一,而且症状往往不是"装失败",而是各种奇怪的行为异常——最难查。
三种部署场景,装的位置不一样
官方说明的场景表:
| 你的服务部署在 | 要装什么 |
|---|---|
| 物理机 | 在物理机装驱动和固件即可 |
| 虚拟机 | 先在物理机装驱动和固件,再在虚拟机内装驱动(多一层) |
| 容器 | 先在物理机装驱动和固件,再在容器内装驱动(多一层) |
⭐ 这张表解释了一个高频现象:
"我在容器里跑不起来,报找不到设备" —— 十有八九是只装了物理机的,没在容器里再装一层驱动。
安装命令(官方原文)
# 1. 加可执行权限
chmod +x Ascend-hdk-310b-npu-driver_x.x.x_linux-aarch64.run
# 2. 校验安装包的一致性和完整性(SHA256 校验)
./Ascend-hdk-310b-npu-driver_x.x.x_linux-aarch64.run --check
# 3. 安装
./Ascend-hdk-310b-npu-driver_x.x.x_linux-aarch64.run --full
# 3b. 需要指定安装路径时
./Ascend-hdk-310b-npu-driver_x.x.x_linux-aarch64.run --full --install-path=/test/HiAI/
- 默认安装路径:
/usr/local/Ascend - 安装日志:
/var/log/ascend_seclog/ascend_install.log
⚠️ --install-for-all 参数:用了就一直用
官方原文:首次安装过程中如果使用了
--install-for-all参数,建议覆盖安装中也保留, 否则会导致 NPU 设备权限变更。
用大白话讲:这个参数决定"这张卡是只有 root 能用,还是所有人都能用"。 - 首次装的时候你让所有人都能用 - 后来升级时忘了加,卡就变回"只有 root 能用"了 - 结果:普通用户突然跑不动了 —— 而你会以为是别的问题
所以:这个参数要么一直用,要么一直不用,别中途变。
第六段 · 怎么验证:npu-smi 命令族
这是本课要你动手的部分。
先看懂命令的结构
npu-smi 的命令基本都是这个骨架:
npu-smi info -t <查什么> -i <查哪台>
└──┬──┘ └─┬─┘ └────┬────┘ └───┬───┘
│ │ │ └─ id:设备编号
│ │ └─ type:查询类型(product / board / temp / power ...)
│ └─ 大类:信息查询(info)
└─ 工具名
关键点:-i 后面跟的"设备编号"从哪来?答案是用 npu-smi info -l 查出来的。
体检三步(官方命令)
第 1 步:列出所有设备,拿到设备编号
npu-smi info -l
官方说明:npu-smi info -l 用于查询所有 NPU 设备,查出的 NPU ID 即为设备 ID。
- 期望:列出设备列表和各设备的
NPU ID - 不过会怎样:命令不存在 → 驱动没装(回到第五段)
第 2 步:看这是什么产品
npu-smi info -t product -i 0
-t product= type 是 product,查产品类型-i 0= 查设备 0
官方给的真实输出示例:
NPU ID : 0
Chip Count : 1
Chip ID : 0
Product Type : Atlas 500 A2
输出字段官方说明:
| 字段 | 官方解释 |
|---|---|
NPU ID |
设备 ID |
Chip Count |
芯片个数 |
Chip ID |
芯片 ID |
Product Type |
产品类型 |
⭐ 注意
Chip Count这一行:一台"设备"里可能有多颗芯片。 所以"设备编号"和"芯片编号"是两个概念,别混。
第 3 步:看驱动版本和固件版本
npu-smi info -t board -i 0
官方说明:这个命令可查 NPU 驱动和固件版本 ——
- Software Version 字段 → NPU 驱动版本
- Firmware Version 字段 → NPU 固件版本
- 期望:两个字段都有值,且和你装的版本对得上
- 不过会怎样:字段为空或版本不对 → 装的时候顺序可能反了,或者只装了一个
还有哪些能查(官方目录里的完整清单)
npu-smi 的 info 大类能查的东西很多,常用的几个:
| 想查什么 | 命令 |
|---|---|
| 所有设备 | npu-smi info -l |
| 产品类型 | npu-smi info -t product -i <ID> |
| 主板信息(含驱动/固件版本) | npu-smi info -t board -i <ID> |
| 温度 | npu-smi info -t temp -i <ID> |
| 功率 | npu-smi info -t power -i <ID> |
| 内存信息 | 对应 info 子命令(按官方文档) |
| 闪存信息 | 同上 |
| 工具自身版本 | npu-smi -v |
⚠️ 官方提示:
npu-smi不支持多线程并发使用 —— 别在脚本里并发调它。
一分钟体检脚本(把上面串起来)
npu-smi info -l # 1. 有哪些设备
npu-smi info -t product -i 0 # 2. 是什么型号
npu-smi info -t board -i 0 # 3. 驱动版本 + 固件版本
npu-smi info -t temp -i 0 # 4. 温度
四条都有正常输出 = L0 这一层没问题。
第七段 · 出问题了怎么查
按现象定位
| 你看到的现象 | 大概率问题 | 第一步做什么 |
|---|---|---|
npu-smi: command not found |
驱动没装(npu-smi 在驱动包里) |
ls /usr/local/Ascend 看有没有装过 |
| 命令能跑,但列不出任何设备 | 卡没被识别 / 权限不足 | 看是不是非 root 装的、--install-for-all 有没有用 |
| 装驱动时报 权限类错误 | 用户或安装信息文件的问题 | 对照官方案例 case_92819(username not permission for root) |
| 装 CANN 时提示驱动不兼容 | 驱动与 CANN 版本配套关系 | 对照官方案例 canncase_0022 |
| 容器里找不到设备 | 只装了物理机,没在容器里再装一层 | 回看第五段的场景表 |
| 升级后普通用户突然不能用 | --install-for-all 中途丢了 |
重新装时把这个参数加上 |
| 昨天好、今天新开终端不对 | 环境变量(那是 L1 的事,不是 L0) | 见 A0 课第五段 |
一个判断技巧
报错里出现 device、device 0、Permission、driver、HDK → 先查 L0。
第八段 · 常见报错清单(真实案例,官方可查)
| 报错原文(片段) | 说明 | 官方案例编号 |
|---|---|---|
[ERROR]ERR_NO:0x0091;ERR_DES:username not permission for root, check /etc/ascend_install.info |
装驱动时的权限/安装信息问题 | case_92819 |
msdebug failed to initialize. please install HDK with --debug before debugging. |
缺调试版驱动包(HDK 有 --debug 变体) |
atlasopdev_0006 |
新容器里执行 npu-smi / hccn_tool 提示设备被占用 |
容器与设备映射的问题 | topic_0000002238354198 |
check driver compatibility failed(装 CANN 时) |
驱动版本与 CANN 不配套 | canncase_0022 |
查案例的链接格式:
https://www.hiascend.com/document/caselibrary/detail/<案例编号>
搜案例的技巧:把你的报错去掉路径、设备号、时间戳,只留稳定特征词(如 username not permission for root)再去搜。
第九段 · 小结与下一课
三句话带走
- 驱动装在 Host,固件跑在卡里;驱动让系统认识卡,固件管卡自己的底子。查版本都用
npu-smi info -t board -i <ID>。 - 首次装:驱动在前;升级:固件在前。
--install-for-all用了就别中途丢。 npu-smi就在驱动包里 —— 所以"没这个命令"= "驱动没装"。
钩子(后续课)
| 课 | 要回答的问题 |
|---|---|
| A2 | HDK 是什么? 它和驱动包、固件包是什么关系?--debug 变体是干什么的? |
| A3 | 卡有哪几种工作模式(RC / EP)?分别影响什么? |
| A4 | 硬件健康检查怎么做?ascend-dmi 能查出什么? |
课后自测(3 题)
- 同事说他机器上"没有
npu-smi这个命令"。你能立刻判断出什么? - 你要把驱动从 A 版本升到 B 版本。先装驱动还是先装固件?为什么和首次安装不一样?
npu-smi info -t product -i 0的输出里有Chip Count : 1和Chip ID : 0。这说明什么?
附录 A · 本课引用的官方出处
| 内容 | 官方来源 |
|---|---|
驱动/固件包名与版本号格式、Software Version / Firmware Version 字段、npu-smi info -l 查 NPU ID |
《NPU 驱动和固件安装指南 · 用户必读》(驱动与固件 EP 场景) |
| 三种部署场景(物理机/虚拟机/容器) | 同上(安装场景说明表) |
驱动/固件安装顺序、--install-for-all 注意事项、安装命令、安装日志路径 |
《NPU 驱动和固件安装指南 · 物理机安装与卸载》 |
npu-smi info -t product -i <ID> 命令格式与输出字段说明 |
Atlas 200I A2《查询产品类型》(npu-smi 命令参考) |
| npu-smi info 大类可查项(设备/芯片/温度/功率/内存/闪存等) | HDK 26.1.x 目录树 · 信息查询(info) |
| 硬件产品形态清单 | 昇腾官方产品全景(list_products) |
| 4 条故障案例 | 昇腾官方故障案例库 |
⚠️ 数据说明:
- 本课所有命令、字段名、注意事项均来自官方文档原文,未做推测性补充。
- 包名中的 310b、x.x.x、{arch} 是官方示例中的占位,实际以你的产品型号和版本为准。
- 「驱动为什么装在 Host、固件为什么在卡里」的补充解释(如本课的"桥"和"底子"比喻)是我为教学加的,官方文档只给了事实陈述,未使用这些比喻 —— 引用时请注意区分。
附录 B · 本课出现的命令详解
按你要求:每条命令都拆开讲清楚含义、怎么拆、怎么用、期望、不过会怎样。
chmod +x 文件
- 含义:给文件加上"可执行"权限。
chmod= change mode(改权限),+x= 加上 execute(执行)权限。 - 拆解:
chmod(命令)++x(加执行权限)+ 文件名 - 用法:
chmod +x Ascend-hdk-310b-npu-driver_x.x.x_linux-aarch64.run
- 期望:没有任何输出(Linux 命令无输出通常就等于成功,这个习惯要养)
- 不过会怎样:跳过这步直接运行,会报
Permission denied(权限不够)
./文件 --check
- 含义:运行当前目录下的文件,带上
--check参数,用来校验安装包的一致性和完整性(官方说明使用 SHA256 校验)。 - 拆解:
./+ 文件名 +--check⭐
./是什么:它表示"当前目录下的这个文件"。不加./时,系统会去PATH环境变量列的那些目录里找这个命令——而你下载的包不在那些目录,所以会报command not found。加了./,才是明确告诉系统"就在当前目录找"。 - 用法:
./Ascend-hdk-310b-npu-driver_x.x.x_linux-aarch64.run --check
- 期望:提示校验通过
- 不过会怎样:出现 MD5/SHA256 相关警告 → 包可能下载不完整,重新下载
./文件 --full
- 含义:完整安装。
- 拆解:
--full是安装参数(完整安装模式),不是文件名的一部分 - 用法:
./Ascend-hdk-310b-npu-driver_x.x.x_linux-aarch64.run --full
./Ascend-hdk-310b-npu-driver_x.x.x_linux-aarch64.run --full --install-path=/test/HiAI/
- 期望:有安装过程输出,最后提示成功
- 不过会怎样:对照第八段的报错清单去查
- 日志在哪:
/var/log/ascend_seclog/ascend_install.log
npu-smi info -l
- 含义:
npu-smi是昇腾的设备管理工具;info是它的一个大类(信息查询);-l表示列出所有 NPU 设备。 - 拆解:
npu-smi(工具名)+info(大类)+-l(list,列出) - 用法:
npu-smi info -l
- 期望:列出设备列表,给出每个设备的
NPU ID(这个 ID 就是后面-i要填的值) - 不过会怎样:命令不存在 → 驱动没装(
npu-smi在驱动包里);能跑但空 → 卡没被识别或权限不足
npu-smi info -t <类型> -i <设备ID>
- 含义:查某个设备的某一类信息。
- 拆解:
-t= type,指定查什么(product产品类型 /board主板信息 /temp温度 /power功率 ……)-i= id,指定查哪一台(填npu-smi info -l查出来的 NPU ID)- 用法:
npu-smi info -t product -i 0 # 查设备 0 的产品类型
npu-smi info -t board -i 0 # 查设备 0 的主板信息(含驱动/固件版本)
npu-smi info -t temp -i 0 # 查设备 0 的温度
npu-smi info -t power -i 0 # 查设备 0 的功率
- 期望:打印出对应的字段表
- 不过会怎样:报"参数错误" → 检查
-t后面跟的类型名拼写;报"设备不存在" → 先用-l确认设备 ID
⚠️ 官方提示:
npu-smi不支持多线程并发使用。
npu-smi -v
- 含义:查
npu-smi这个工具自己的版本。 - 拆解:
-v= version,版本 - ⚠️ 注意区分:查的是工具的版本,不是驱动版本,也不是固件版本。三个概念别混。
- 用法:
npu-smi -v
- 期望:打印工具版本号
- 不过会怎样:命令不存在 → 驱动没装
输出字段速查(npu-smi info -t product)
| 字段 | 官方解释 | 通俗理解 |
|---|---|---|
NPU ID |
设备 ID | "这是第几台设备" |
Chip Count |
芯片个数 | "这台设备里有几颗芯片" |
Chip ID |
芯片 ID | "这是第几颗芯片" |
Product Type |
产品类型 | "具体是什么型号" |
参数速查表
| 参数 | 含义 |
|---|---|
chmod +x |
加可执行权限 |
--check |
只校验,不安装 |
--full |
完整安装 |
--install-path=路径 |
指定安装到哪个目录 |
--install-for-all |
让所有用户都能用;⚠️ 首次用了,覆盖安装也要保留 |
-l |
list,列出 |
-t 类型 |
type,指定查询类型 |
-i 编号 |
id,指定设备编号 |
-v |
version,查版本 |