F5 国产算力适配:换到客户机房哪里不一样
编制:观澜|日期:2026-10-06|级别:T2 标准级 层级:F 层 · 场景实战(F 层第 5 课;前接 A–D 全部零件课与 F1) 素材来源:昇腾官方《NPU 驱动和固件安装指南》(Atlas 200I A2 26.0.RC1)、《CANN 软件安装》(9.2.0-beta.2)、《虚拟机配置指南》、《Atlas 300V 视频解析卡用户指南(开发者场景)》 本课定位:A–F1 前面的课,默认环境是「x86_64 + Ubuntu / CentOS」。 真实项目里,客户机房经常是一整套国产化设备——国产 CPU + 国产 OS + 昇腾卡。 这一课回答的不是「怎么再装一遍」,而是「换到那个环境,前面哪几步会不一样、哪里最容易卡」。
第一段 章前定位
前面每一课,默认环境都长这样:x86_64 服务器 + Ubuntu 或 CentOS。
真实项目里,客户机房常常不是这套:
- CPU 是国产的(如鲲鹏);
- 操作系统是国产的(openEuler、麒麟 Kylin、统信 UOS、BCLinux、CULinux、CTyunOS……);
- 加速卡是昇腾。
这套组合,行业里叫信创(信息技术应用创新)环境。
本课不教你:驱动怎么装(A1 讲过)、CANN 是什么(B1)、模型怎么迁(F1)—— 这些东西在信创环境里一样不变,重讲一遍是浪费你的时间。
本课只回答一个问题:
同一套安装步骤,换到一个信创机房,哪几步会不一样?哪里最容易卡住?
为什么值得单独开一课:那些「不一样」的地方,恰恰是通用安装教程里不会写、也不会提醒的—— 它们默认你站在 x86 + Ubuntu 上。等你到了客户现场才撞上,通常已经卡掉半天了。
数据纪律声明:本课所有命令、参数、路径、表内容均取自昇腾官方文档(逐条列在附录 A)。 凡官方文档没给的,正文里明写「官方未给出,需现场确认」,不编。
第二段 学习目标
学完这一课,你应该能:
- ✅ 说出信创环境与通用环境差的三个地方(CPU 架构 / OS 与内核 / 部署形态)
- ✅ 用两条命令一次查出「架构、OS 版本、内核版本」三个事实
- ✅ 知道去查官方的三张表:物理机(兼容性查询助手)、虚拟机、容器
- ✅ 分清驱动安装的三种情况:能直接装 / 要改驱动包 / 要先降内核
- ✅ 说出虚拟化场景为什么必须先查配对表(配错了要重装系统,不是改配置)
- ✅ 记住依赖包按 OS 家族分两条命令(apt 一族 / yum 一族),并能说出信创 OS 大多走哪条
第三段 全景:信创环境的三处不一样
先给这课的地图——变的是外围三样,不变的是中间四层:
【变的外围】 通用环境 信创环境(客户机房)
────────────────────────────────────────────────────────────────────────────────
① CPU 架构 x86_64 → aarch64(国产 CPU 多为 ARM64)
② OS 家族 Ubuntu / CentOS → openEuler / 麒麟 / 统信 / BCLinux …
内核版本 常见、多数包里带编 → 常落在「要改驱动包」那一档
③ 部署形态 物理机为主 → 常上虚拟化 / 容器(先查配对表)
────────────────────────────────────────────────────────────────────────────────
【不变的中间】 驱动→固件顺序 / CANN 三个包 / 环境变量 / 框架 / 服务层
一句话记住:变的是「外围」(架构、OS、部署形态),不变的是「中间」(驱动、CANN、框架、服务的装法)。
3.1 差异一:架构(aarch64 还是 x86_64)
昇腾的每一个安装包,文件名里都带架构。官方给的包名规律是:
驱动 Ascend-hdk-<型号>-npu-driver_{version}_linux-{arch}.run
固件 Ascend-hdk-<型号>-npu-firmware_x.x.x.x.X.run
CANN Ascend-cann-toolkit_{version}_linux-{arch}.run
那个 {arch} 就是 uname -m 的输出:aarch64 或 x86_64。
区别在哪:国产 CPU(鲲鹏等)大多是 aarch64,通用 x86 服务器是 x86_64。
下错包的后果:包装不上——而且,报错往往不会直接告诉你「你下错架构了」 ✗。
⚠️ 诚实标注:这一条(「报错不直接说是架构问题」)是现场实践的归纳,不是官方原文。 官方文档给的是包名规律(上表),没有给「下错架构时驱动安装器的具体报错原文」—— 这部分官方未给出,以现场实测为准。
3.2 差异二:OS 与内核(驱动是「按内核编的」)
官方《安装NPU驱动固件》的第一步不是装,是「确认操作系统和内核版本」。
为什么:驱动包在安装时要就地编译内核模块(走 dkms,或直接调用本机内核源码)。
所以驱动包和你现场的内核版本必须对得上。对不上,官方给的处置是三类:
| 情况 | 官方给的处置 |
|---|---|
| 内核版本在适配表里 | 直接安装 |
| 内核版本需要适配 | 修改驱动包后再安装 |
| OS 不在适配表里 | 重新安装 OS(官方指向「安装OS(可选)」) |
信创环境为什么更容易撞上这类问题:国产 OS 的发行版多、内核版本杂。 官方在《检查环境》一节里就专门点名了 Kylin Linux Advanced Server V10 SP1。 同一个「麒麟 V10」,SP1 / SP2 / SP3 的内核版本都可能不同——装之前必须查。
3.3 差异三:部署形态(虚拟化 / 容器要先查配对表)
通用环境多讲物理机。信创项目里,多租户和资源切分是常见诉求,于是常会上虚拟化或容器。
这里有一张必须先看的表——官方《OS兼容性列表》,以及它在 CANN 文档里的对应章节:
| 部署场景 | 官方表在哪 | 为什么必须先查 |
|---|---|---|
| 物理机 | 官方兼容性查询助手 | 决定这个 OS + 内核能不能装驱动 |
| NPU 直通到虚拟机 | 《OS兼容性列表》· NPU直通到虚拟机场景OS兼容性 | 物理机 OS × 虚拟机 OS 要配对 |
| 物理机 + 虚拟机 AVI | 《OS兼容性列表》· 物理机+虚拟机AVI场景OS兼容性 | 同上 |
| 容器 | 《CANN 软件安装》· 操作系统兼容性说明(表 2) | 容器 OS 与宿主 OS 有兼容关系 |
⭐ 为什么「虚拟化」这条最容易出事:操作系统装在虚拟机上,一旦配错,往往要重装系统才能救 ✗—— 不是改个配置的事。所以要在建虚拟机之前就查配对表,不是等起不来再查。
官方配对表长什么样(摘《物理机+虚拟机AVI场景OS兼容性》,完整表以官方页面为准):
| 硬件形态 | 物理机操作系统 | 虚拟机操作系统(可选) |
|---|---|---|
| Atlas 800 训练服务器(9000) | openEuler 20.03 LTS | Ubuntu 20.04 / openEuler 20.03 LTS / CentOS 8.2 |
| Atlas 800 训练服务器(9010) | openEuler 20.03 LTS | Ubuntu 20.04 / openEuler 20.03 LTS / CentOS 8.2 |
| Atlas 800 推理服务器(3000)+ Atlas 300V Pro | UOS V20(1050e) | UOS V20(1050e) |
| Atlas 800 推理服务器(3000)+ Atlas 300I Pro | Debian 10.8 | Debian 10.8 |
| Atlas 800 推理服务器(3000)+ Atlas 300I Pro | BC Linux 21.10 | BC Linux 21.10 |
这张表怎么读:左边找你的硬件形态 → 中间是物理机 OS → 右边是可以装的虚拟机 OS 列表。 只有出现在右边的 OS,才能装在这台机器的虚拟机里。(这里已经能看到信创 OS:UOS V20、BC Linux 21.10。)
再看 NPU 直通场景(摘《NPU直通到虚拟机场景OS兼容性》):
| 硬件形态 | 物理机操作系统 | 虚拟机操作系统(可选) |
|---|---|---|
| Atlas 800 推理服务器(3000)+ Atlas 300I Pro | Kylin V10 SP2 | CentOS 8.2 / Ubuntu 20.04 / openEuler 20.03 LTS / Kylin V10 SP2 |
| 同上 | Kylin V10 SP3 | Kylin V10 SP3 |
| 同上 | CULinux 3.0 | CULinux 3.0 |
| 同上 | UOS V20(1050e) | UOS V20(1050e) |
| 同上 | BC Linux 21.10 | BC Linux 21.10 |
⭐ 从这两张表能看出一个规律(本课归纳,非官方表述):越是国产 OS,越常常只能「自己配自己」—— Kylin↔Kylin、UOS↔UOS、CULinux↔CULinux、BC Linux↔BC Linux,一个萝卜一个坑。 原因不难想:内核、驱动签名这些底层差异还没打通。所以信创虚拟化场景,物理机和虚拟机最好用同一套 OS。
3.4 差异三的附注:虚拟机和容器还要装「两层的驱动」
这条 A1 讲过一次,但信创环境里更容易被忘:
- 虚拟机场景:物理机装驱动 + 固件,虚拟机内只装驱动。 官方原文:「固件包不支持在虚拟机安装和卸载。」
- 容器场景:官方原文:「容器内安装的驱动包版本需要与宿主机安装的驱动包版本保持一致,不支持独立升级。」
第四段 【如果我来做】——从「站在客户机房门口」到「卡能被认得」
这一节是本课的核心。 前三段讲的是「信创环境差在哪」,这一节讲的是:如果现在把这台国产服务器交给我,我从哪里开始、按什么顺序做、每一步凭什么判断。
4.0 先亮结论:我会按这个顺序做
为什么顺序不能反:信创环境最容易犯的错,是先下包、后对表——
- 包一下就是好几 GB,下错架构或下错内核档位,全废;
- 更贵的错是虚拟机的 OS 先装了、再查配对表——配错了是重装系统,不是重下一个包。
我会按这个顺序做(顺序 = 我「手伸进去」的顺序,不是文档目录的顺序):
① 摸底(不装任何东西,先查三个事实):架构 / OS 版本 / 内核版本——一条命令出 ② 对表(拿三个事实去比官方表):物理机查兼容性查询助手;虚拟化查配对表;容器查容器表 ③ 定包(架构 + 版本):按
uname -m选架构,按现场驱动版本反查该装哪个 CANN(B3 那条铁律) ④ 装依赖(按 OS 家族走两条命令之一):信创 OS 大多走 yum 那条 ⑤ 装驱动 + 固件(先分首次还是覆盖):首次「驱动 > 固件」,覆盖「固件 > 驱动」 ⑥ 卡住就换道(这是信创特有的一步):直接装不了 → 改驱动包;改包也不行 → 看要不要降内核 ⑦ 收口(用「卡被认得」当验收):npu-smi info出表才算过,不是「安装脚本没报错」才算过 ⑧ 诚实(官方没给的地方明说):具体的内核→改包对应关系、下错架构的报错原文,官方没给全——这里要自己查、自己试,我不编
下面把每一步展开。
4.1 第 0 步:到场先摸底(三条命令,一个包都不下)
目的:在下载任何东西之前,先把「这台机器是什么」查清楚。 信创环境尤其要做这一步——因为你连它是 ARM 还是 x86 都不知道。
我会先跑这三条(命令在第五段有逐条拆解):
uname -m && cat /etc/*release—— 出架构 + OS 版本uname -r—— 出内核版本npu-smi info—— 看卡认没认(认了说明驱动在,我可能什么都不用装)
为什么先做这一步:这三条命令的输出,直接决定下哪个包、装哪些依赖、要不要改包。 跳过它,后面每一步都是在赌。
⭐ 顺便把「不可返工的事」也在这一步查掉:如果客户说这台机器要上虚拟化, 现在就要问清「物理机装什么 OS、虚拟机打算装什么 OS」—— 因为虚拟机 OS 一旦装了,配错就是重装系统。
4.2 第 1 步:拿三个事实去对三张官方表
对表是「查事实」,不是「凭经验猜」。 按部署形态找对应的表:
| 我的部署形态 | 我去查哪张表 | 查到什么才算过 |
|---|---|---|
| 物理机 | 官方兼容性查询助手(https://www.hiascend.com/hardware/compatibility) |
我的产品型号 + OS + 内核,在支持范围内 |
| NPU 直通虚拟机 | 《OS兼容性列表》·NPU直通到虚拟机场景 | 物理机 OS 这一行里,能找到我打算用的虚拟机 OS |
| 物理机 + AVI | 《OS兼容性列表》·物理机+虚拟机AVI场景 | 同上 |
| 容器 | 《CANN 软件安装》·操作系统兼容性说明表 2 | 宿主机 OS 与容器 OS 的兼容关系成立 |
为什么先对表再动手:对表花 5 分钟,能省掉「装到一半发现 OS 不在支持列表」的一整天。 官方对不在表里的 OS,给的处置是「重新安装 OS」——这就是它必须先查的理由。
4.3 第 2 步:定包(架构 + 版本,两个都要选对)
两个选择,任一选错都白下:
架构怎么选: 看 uname -m → aarch64 选 linux-aarch64.run;x86_64 选 linux-x86-64.run
版本怎么选: 先查现场驱动版本 → 再按版本配套表反查该装哪个 CANN
⚠️ 版本选择那条顺序不能反(B3 讲过,信创环境里更要守): 驱动往往是客户 / 平台预装的,不是你选的—— 所以是「先查现场驱动版本(
npu-smi info -t board -i <设备ID>)→ 再反查配套的 CANN」, 不是「先下最新 CANN → 再想办法让驱动配它」。
下载页地址(写全,别去搜二手教程):
| 要下什么 | 下载页 |
|---|---|
| NPU 驱动 / 固件 | https://www.hiascend.com/hardware/firmware-drivers |
| CANN(Toolkit / Kernels) | https://www.hiascend.com/cann/download |
| 兼容性查询助手(对表用) | https://www.hiascend.com/hardware/compatibility |
4.4 第 3 步:装依赖(信创 OS 大多走 yum 那条)
官方把「驱动源码编译所需依赖」按 OS 家族分成了两套命令:
- Debian 一族(Debian / Ubuntu / veLinux)→ 用
apt-get - openEuler 一族(openEuler、CentOS、Kylin、BC-Linux、UOS、AntOS、CTyunOS、CULinux、Tlinux、MTOS、vesselOS)→ 用
yum
信创 OS 基本都落在第二套(yum)里。
为什么必须先装依赖:驱动安装时要编译内核模块。
少了 make / gcc / dkms / 内核头文件,编译就失败——而且报错发生在驱动安装脚本里,不在依赖检查里,
很容易被误判成「驱动包有问题」。
⭐ 一个官方给的判断顺序(《检查环境》):先看装没装过(
lsmod | grep drv_pcie_host), 再看依赖齐不齐,最后才动手装。
4.5 第 4 步:装驱动 + 固件(先分「首次」还是「覆盖」)
这一步的核心不是命令,是判断场景(A1 讲过、信创环境一样成立):
| 场景 | 怎么判断 | 顺序 |
|---|---|---|
| 首次安装 | 刚出厂的机器,或已卸载过 | 驱动 > 固件 |
| 覆盖安装 | 机器已经装着驱动固件,现在要换版本 | 固件 > 驱动 |
信创客户机房里,我遇到的多数是「覆盖安装」——因为客户 / 集成商常常已经预装过一套。
判断依据就是第 0 步那条 npu-smi info:它出表 = 已经装过 = 覆盖场景。
⚠️ 顺序反了的后果:官方明确不建议顺序颠倒。先跑一遍
npu-smi info把场景判断清楚再动手, 比事后补救省事得多。
4.6 第 5 步:卡住了怎么办(信创特有的一步:改包 / 降内核)
这一步是通用环境教程里几乎不会出现的——因为它在通用 OS 上很少发生。
如果驱动装到一半报错(典型是 Dkms install failed / Driver_ko_install failed),官方 FAQ 给的排查链是:
① 看安装日志 cat /var/log/ascend_seclog/ascend_install.log
② 看编译日志 cat /var/lib/dkms/davinci_ascend/1.0/build/make.log
③ 判定根因:内核不适配(make.log 里是内核相关的编译 error)
④ 处置三选一:
· 改驱动包(官方给了具体做法:解包→改 run_driver_install.sh→重装→重新打包)
· 先降内核版本,再改驱动包
· 退出改包路线,换一个在适配表里的 OS
⭐ 我会怎么选:先试「改驱动包」(官方有完整步骤,见第七段);改包也不行, 再看官方提到的「升降内核」;两条都走不通,我会建议客户换 OS—— 因为信创项目里,OS 是客户定的,我不能随便改,但可以把这个结论明确写进交付报告。
4.7 第 6 步:收口(验收口径 = 卡被认得,不是「脚本没报错」)
这一步最容易糊弄过去。我坚持的验收口径是:
❌ 不算过:安装脚本跑完、结尾没有红字
✅ 才算过:npu-smi info 出表,列出卡型号、温度、显存
为什么:信创环境里,安装脚本「看起来成功」但驱动没加载的情况是存在的——
只有 npu-smi info 出表,才说明内核模块真的加载进去了。
4.8 这一节的方法论(它比具体命令更耐用)
把上面六步抽象出来,就是一条通用做法:
① 先摸底:不装任何东西,先查「架构 / OS / 内核」三个事实 ② 先对表:拿事实去比官方表(物理机 / 虚拟机 / 容器三张),再决定动手 ③ 定包:架构按
uname -m,版本按「先查现场驱动、再反查 CANN」的顺序 ④ 装依赖:按 OS 家族选命令(信创大多是 yum 那条) ⑤ 装驱动:先判断「首次 / 覆盖」,因为顺序相反 ⑥ 卡住换道:直接装 → 改驱动包 → 降内核 → 换 OS,一级一级退 ⑦ 收口:拿npu-smi info出表当验收,不拿「没报错」当验收 ⑧ 诚实:官方没给全的(内核→改包的完整对应关系、下错架构的报错原文),明说「这里要自己查」,不编第 ② 条和第 ⑥ 条是本课最容易被跳过的两条: 第 ② 条——跳过表的代价,在虚拟化场景里是重装系统; 第 ⑥ 条——「装不上」在信创环境里不是终点,是一个有官方步骤可走的分支。
第五段 怎么确认就位(命令 + 期望输出)
下面每条命令都用 行内码 + 引用块给出,逐条带「含义 / 拆解 / 用法 / 期望 / 不过会怎样」五项。 所有命令均取自官方文档,出处见附录 A。
5.1 一条命令查出「架构 + OS 版本」
命令 uname -m && cat /etc/*release
含义:先打印 CPU 架构,再打印操作系统版本信息——一次拿到两个事实 拆解:
uname -m(machine,打印机器硬件架构)+&&(前一条成功才执行后一条)+cat /etc/*release(打印所有 release 文件内容,里面有发行版名和版本号) 用法:直接在目标服务器上敲;官方《确认操作系统》原文用的就是这一条 期望:官方示例输出是——第一行aarch64,后面是Kylin Linux Advanced Server release V10、DISTRIB_ID=Kylin、VERSION_ID="V10"、PRETTY_NAME="Kylin Linux Advanced Server V10"等字段 不过会怎样:cat报No such file or directory→ 这个 OS 没有*release文件,改用cat /etc/os-release;输出里架构是x86_64→ 说明这不是 ARM 信创机,包要选linux-x86-64
5.2 第二条:查内核版本
命令 uname -r
含义:打印当前运行的内核版本——这一条是信创适配里最关键的一条 拆解:
uname(系统信息)+-r(release,内核版本号) 用法:官方《安装NPU驱动固件》「确认OS和内核版本」一节给的就是uname -m && cat /etc/*release加uname -r两条 期望:输出形如5.10.0-60.18.0.50.oe2203(openEuler 22.03 LTS 的内核) 不过会怎样:输出为空或命令不存在 → 不是正常 Linux 环境,先解决系统本身;拿到版本后必须去对适配表,对不上就是「改包」或「重装 OS」那条分支
5.3 查装没装过(在装之前先判断场景)
命令 lsmod | grep drv_pcie_host
含义:查内核里有没有加载昇腾的主机侧驱动模块——用来判断这台机器装没装过驱动 拆解:
lsmod(list modules,列出已加载的内核模块)+ 管道|+grep drv_pcie_host(筛出含这个模块名的行) 用法:官方《检查环境》原文命令;装之前跑,别装完再跑 期望:无输出 = 没装过 → 可以按「首次安装」走;有输出 = 装过 → 必须先卸载旧驱动,再按「覆盖安装」走 不过会怎样:有输出却直接装新版本 → 官方明确要先卸载;另外官方提示:若之前装过 run 包、之后又升级过系统内核,会出现 run 包启动异常(官方 FAQ 有专条)
5.4 查依赖齐不齐(RPM 一族,信创 OS 用这条)
命令 rpm -qa | grep dkms
含义:查系统里装没装 dkms 这个包——驱动安装要用它编译内核模块 拆解:
rpm -qa(query all,列出所有已安装的 rpm 包)+grep dkms(筛 dkms) 用法:官方《检查环境》里对 Kylin Linux Advanced Server V10 SP1 给的是一组三条,替换关键词即可:rpm -qa | grep dkms/rpm -qa | grep gcc/rpm -qa | grep kernel-devel-$(uname -r)期望:回显版本号=已安装;无回显=没装,需要装 不过会怎样:报command not found→ 这台机器没有 rpm 体系(可能是 Debian 一族),改用第四节 4.4 的 apt 那套;没查就装驱动 → 大概率在编译内核模块时失败
5.5 查默认内核源码路径在不在
命令 ls /lib/modules/$(uname -r)/build
含义:查本机有没有当前内核的源码 / 头文件目录——驱动就地编译要用它 拆解:
ls(列出目录内容)+/lib/modules/(内核模块目录)+$(uname -r)(把当前内核版本插进来)+/build(指向内核源码/头文件的软链接) 用法:官方《检查环境》原文用的是反引号写法ls /lib/modules/uname -r/build,$(...)是等价写法 期望:列出目录 = 存在,安装驱动时会自动用它编译;报 No such file = 不存在,要在安装时显式提供内核源码路径 不过会怎样:不存在又没提供源码路径 → 驱动编译失败(回到 5.4 补装kernel-devel-$(uname -r))
5.6 装依赖(openEuler 一族,信创 OS 用这条)
命令 yum install -y make dkms gcc kernel-headers-$(uname -r) kernel-devel-$(uname -r)
含义:一次装齐驱动源码编译需要的五个依赖 拆解:
yum(RPM 系包管理器)+install -y(装,-y表示全部自动确认)+make(构建工具)+dkms(动态内核模块支持,用来把驱动编进内核)+gcc(C 编译器)+kernel-headers-$(uname -r)(当前内核的头文件)+kernel-devel-$(uname -r)(当前内核的开发包) 用法:官方《安装NPU驱动固件》给的 openEuler / CentOS / Kylin / BC-Linux / UOS / AntOS / CTyunOS / CULinux / Tlinux / MTOS / vesselOS 统一用这条;注意两个 kernel 包必须带-$(uname -r)期望:报告安装完成、无缺包 不过会怎样:报找不到源或超时 → 官方指引改/etc/yum.repos.d/xxxx.repo为可用源(可参考华为开源镜像站);报某个包不存在 → 官方指向《安装驱动源码编译所需依赖》一章;不装就装驱动 → 撞上 5.4 那个编译失败
5.7 装依赖(Debian / Ubuntu 一族,备份路线用这条)
命令 apt-get install -y make dkms gcc linux-headers-$(uname -r)
含义:Debian 一族版本的依赖安装命令(本课里当对照用;客户要是 Ubuntu 就说这条) 拆解:
apt-get install -y(Debian 系包管理器装包,自动确认)+ 前三个依赖同 5.6 +linux-headers-$(uname -r)(注意包名是 linux-headers,不是 kernel-devel) 用法:官方《安装NPU驱动固件》里 Debian / Ubuntu / veLinux 用的这一条;官方给的检查命令是make -v、dpkg-query -s dkms、dpkg-query -s gcc、dpkg-query -s linux-headers-$(uname -r)期望:四条检查命令都能回显软件包版本信息 不过会怎样:报E: Unable to locate package→ 源没配好,官方指引改/etc/apt/sources.list;把这一条错用到 openEuler 族机器上 → 命令直接不存在
5.8 最终验收:卡到底认不认得
命令 npu-smi info
含义:查昇腾设备信息——这一步过了,才算「卡被认得」 拆解:
npu-smi(昇腾设备管理工具,驱动包的组成部分)+info(子命令,显示设备信息) 用法:装完驱动后跑;官方原文:「若返回驱动相关信息说明已安装」「若返回驱动相关信息说明加载成功」 期望:一张表,列出每张卡的型号、温度、功耗、显存、进程(Name/Health/Power(W)/Temp(C)/Memory-Usage(MB)/HBM-Usage(MB)等字段) 不过会怎样:报command not found→ 驱动没装上(回 4.5 / 4.6);有命令但列不出卡 → 硬件或权限问题,官方指引去技术支持 / 论坛求助或提工单;⚠️ 官方提示npu-smi不支持多线程并发使用
第六段 判据与验收
「信创环境适配完成」跟「通用环境部署完成」的判据不一样——多了「对过表」这一层。
| # | 判据 | 验证方式 | 不过说明问题在 |
|---|---|---|---|
| ① | 架构认对 | uname -m 的输出 = 下载包名里的 {arch} |
下错包(回第五段 5.1) |
| ② | OS 在支持范围 | 拿 OS + 版本去兼容性查询助手比对 | OS 选型(可能要换 OS) |
| ③ | 内核对得上 | uname -r 结果落在适配表里 |
装依赖 / 改驱动包 / 降内核(三选一) |
| ④ | 虚拟化配对成立 | 虚拟机 OS 出现在配对表的右列 | 虚拟机 OS 选错(要重装系统) |
| ⑤ | 依赖齐 | 5.4 / 5.6 的检查命令都有回显 | 缺 make/dkms/gcc/内核头文件 |
| ⑥ | 驱动加载成功 | npu-smi info 出表 |
L0 层问题(回 A1) |
| ⑦ | 能定位到层 | 给一个报错,能判断属于「架构 / OS 内核 / 依赖 / 驱动」哪一类 | 本课的核心能力 |
第 ⑦ 条是本课的差异化所在:信创环境里的报错,最常见的不是「卡坏了」, 而是「包错了 / OS 内核不对 / 依赖缺了」——先归类,再动手,别一上来就怀疑硬件。
一句验收口径:
「驱动装上了」不算完,
「架构、OS、内核三样都对上官方表,且 npu-smi info 出表」才算完。
第七段 出问题怎么查
排障原则:先把问题归到「外围三样」里的哪一样,再谈技术细节。 信创环境的故障,绝大多数能归到下面四类:
| 现象 | 大概是什么 | 先查什么 |
|---|---|---|
| 包装不上,报错又不说原因 | 架构不对(下了 x86-64 装到 aarch64 机器上) |
uname -m,跟包名里的 {arch} 对一遍 |
Dkms install failed / Driver_ko_install failed |
内核不适配,或依赖没齐 | 先 cat /var/log/ascend_seclog/ascend_install.log,再 cat /var/lib/dkms/davinci_ascend/1.0/build/make.log |
| 虚拟机里报找不到设备 | 配对表没对,或虚拟机内没装驱动 | 查《OS兼容性列表》配对表;确认虚拟机内只装驱动(固件不装) |
| 容器里驱动版本不对 | 容器驱动与宿主机不一致 | 回 A1 / B5:容器驱动的版本必须与宿主机一致 |
⭐ 一个判断法(按「外围三样」归类):
报错里出现架构字样、或包名对不上 → ① CPU 架构问题
报错发生在「编译内核模块」阶段 → ② OS / 内核问题
报错说找不到 make / gcc / 头文件 → ② 的依赖子类
npu-smi 能用、但虚拟机/容器里看不到卡 → ③ 部署形态问题
⭐ 信创特有的「装不上」排查顺序(这是本课的重点):
① 先确认架构:uname -m vs 包名里的 {arch}
② 再确认 OS + 内核:uname -r vs 官方适配表
③ 再确认依赖:make / dkms / gcc / 内核头文件 齐不齐
④ 还不行 → 走官方「修改驱动包」路径(本段末有官方步骤)
⑤ 改包也不行 → 看官方「升降内核」;再不行 → 换一个在表里的 OS
官方给的「修改驱动包」步骤(摘自 FAQ《修改驱动包(内核 5.13.0)》,内核版本仅为示例):
① 看日志: cat /var/log/ascend_seclog/ascend_install.log
② 看编译日志: cat /var/lib/dkms/davinci_ascend/1.0/build/make.log
③ 确认根因: 内核不适配(make.log 里是内核相关的编译 error)
④ 解压 run 包: ./Ascend-hdk-<型号>-npu-driver_<版本>_linux-aarch64.run --noexec --extract=./tmp
(x86 机器用 ..._linux-x86-64.run)
⑤ 改脚本: cd tmp/driver/script && vi run_driver_install.sh
查 "set_os_custom_compile" 函数,在函数末尾按实际内核版本增补 sed 替换行
⑥ 卸载旧驱动: /usr/local/Ascend/driver/script/uninstall.sh
⑦ 重新安装: ./driver/script/install.sh -- -- --full
⑧ 重新打包: ./Ascend-hdk-<型号>-npu-driver_<版本>_linux-aarch64.run --repack-path=./tmp new_driver_<内核版本>.run
⑨ 打包报错看: cat /var/log/ascend_seclog/ascend_rebuild.log
⚠️ 官方只给了三个示例内核(5.13.0 / 5.4.0-198 / 5.15.0), 没有给「内核版本 → 改哪一行」的完整对应表——这部分官方未给出,需按现场实际内核版本,参照示例改写并实测。
第八段 常见报错清单
下表按现象给排查方向。报错原文与稳定特征词请到官方案例库检索:
https://www.hiascend.com/document/caselibrary—— 按报错里的稳定特征词检索,不要按「信创」检索。
| 报错 / 现象 | 大概属于 | 先查什么 |
|---|---|---|
| 驱动包运行报「格式错误 / 无法执行」 | ① 架构不对 | uname -m 与包名里的 {arch} 对一遍(aarch64 对应 linux-aarch64) |
[ERROR]Dkms install failed, details in : /var/log/ascend_seclog/ascend_install.log |
② 内核 / 依赖 | 先看安装日志,再看 make.log(本课第七段的排查链) |
[ERROR]Driver_ko_install failed, details in : /var/log/ascend_seclog/ascend_install.log |
② 内核 / 依赖 | 同上;根因多为内核不适配 |
make.log 里是内核相关的编译 error |
② 内核不适配 | 走官方「修改驱动包」路径;或考虑降内核 |
依赖检查时 make -v / gcc / kernel-devel-$(uname -r) 无回显 |
② 依赖缺 | 按 OS 家族补装(5.6 / 5.7) |
| 升级系统内核后,原 run 包启动异常 | ② 内核变化 | 官方 FAQ 有专条:《升级系统内核版本时未卸载 run 包导致 run 包不可用》 |
虚拟机里 npu-smi info 找不到设备 |
③ 部署形态 | 查配对表;确认虚拟机内只装了驱动;物理机侧驱动固件是否就位 |
| 容器里驱动版本与宿主机不一致 | ③ 部署形态 | 容器内驱动版本必须与宿主机一致,不支持独立升级 |
| OS 不在官方支持列表 | ② OS 选型 | 官方给的处置是重新安装 OS(本课 4.2 的表) |
装完 npu-smi info 无输出 / 列不出卡 |
⑥ 驱动未加载 | 回 A1 查驱动;官方指引去技术支持或提工单 |
⚠️ 诚实标注:上面「架构不对时的具体报错原文」这一条,官方文档未给出—— 官方给的是包名规律,没有给「下错架构」的报错条目。本表这一行是现场现象的描述,非官方原文。
⭐ 检索技巧(E1 讲过,这里再用一次):去掉具体化信息。
不要搜「信创环境驱动装不上」,要搜报错原文里的稳定特征词(drv_pcie_host、Dkms install failed、davinci_ascend)。
第九段 小结与下一课
这一课要带走的三句话:
- 信创环境变的是「外围三样」——CPU 架构、OS 与内核、部署形态; 中间四层(驱动 / CANN / 框架 / 服务)的装法不变。
- 动手前先对表:物理机查兼容性查询助手、虚拟化查《OS兼容性列表》配对表、容器查容器表—— 虚拟化配对错了要重装系统,这是一切的理由。
- 「装不上」在信创环境里是一个分支,不是终点: 直接装 → 改驱动包 → 降内核 → 换 OS,官方每一步都有页面。
本课的选择顺序(串联全课):
到场摸底:uname -m && cat /etc/*release + uname -r + npu-smi info
│
├─ 拿三个事实对三张官方表
│ ├─ 物理机 → 兼容性查询助手
│ ├─ 虚拟化 → 《OS兼容性列表》配对表(错了要重装系统)
│ └─ 容器 → 《CANN 软件安装》操作系统兼容性说明
│
├─ 定包:架构按 uname -m / 版本按「先查现场驱动,再反查 CANN」
│
├─ 装依赖:信创 OS 大多走 yum 那条
│
└─ 装驱动:先分「首次(驱动>固件) / 覆盖(固件>驱动)」
├─ 直接装不上 → 改驱动包(官方有完整步骤)
│ └─ 改包也不行 → 降内核 → 再不行 → 换 OS
└─ 验收:npu-smi info 出表 = 卡被认得
下一课预告(F 层继续): 本课解决的是「环境换了一套,怎么把卡认出来」。 再往后,F 层还有多卡与分布式(把单卡跑通的东西铺到多张卡上)与性能调优(采集 Profiling 数据看瓶颈在哪)。 它们和本课的关系是:本课把「地基」在国产环境里重新踩实了,后面才谈得上往上盖。
附录 A · 本课引用的官方出处
| 内容 | 来源文档 |
|---|---|
「确认操作系统」命令(uname -m && cat /etc/*release)与 Kylin V10 SP1 示例输出 |
《NPU 驱动和固件安装指南》·驱动与固件(EP场景)·物理机安装与卸载·确认操作系统 |
「检查环境」三项(lsmod \| grep drv_pcie_host、Linux 工具、依赖检查 make -v/rpm -qa \| grep dkms/gcc/kernel-devel-$(uname -r)、ls /lib/modules/$(uname -r)/build) |
同上·物理机安装与卸载·检查环境 |
首次/覆盖安装顺序(驱动>固件 / 固件>驱动)、npu-smi info 判驱动、HwHiAiUser、依赖两条命令(apt 一族 / yum 一族)、--full --install-for-all、--install-username/--install-usergroup、安装成功回显 |
《CANN 软件安装》·发行与安装·安装NPU驱动和固件 |
| OS 兼容性三张表的入口与内容(兼容性查询助手 / 虚拟机支持的操作系统 / 容器支持的操作系统) | 《CANN 软件安装》·附录A:参考信息·操作系统兼容性说明 |
各 OS 族所需依赖与检查/安装命令(Debian 一族 apt-get;openEuler 一族 yum,含 Kylin/CentOS/BCLinux/CULinux/CTyunOS/UOS/Tlinux) |
《CANN 软件安装》·安装驱动源码编译所需依赖 |
| 「NPU直通到虚拟机场景OS兼容性」「物理机+虚拟机AVI场景OS兼容性」两张配对表、OS兼容性列表目录 | 《Atlas 系列硬件产品 虚拟机配置指南》·安装前必读·OS兼容性列表 |
| 虚拟机安装限制(固件包不支持在虚拟机安装/卸载;虚拟机内驱动的版本需与物理机固件配套)、虚拟机内 OS 兼容性表 | 《NPU 驱动和固件安装指南》·虚拟机安装与卸载·安装前必读 |
容器安装限制(驱动版本需与宿主机一致、不支持独立升级;.so 用户态;宿主机目录挂载/不挂载两种方式)与「宿主机与容器操作系统兼容性关系」表 |
《NPU 驱动和固件安装指南》·容器内安装与卸载·安装前必读 |
| 首次安装/覆盖安装/虚拟机/容器四种场景的章节对照 | 《NPU 驱动和固件安装指南》·用户必读 |
| 「修改驱动包(内核 5.13.0)」「修改驱动包(内核5.4.0-198)」完整步骤与报错原文 | 《Atlas 300V 视频解析卡用户指南(开发者场景)》·FAQ |
| 「适配的 OS 和内核版本」表(直接安装 / 修改驱动包可安装 / 先降内核再改包 三档) | 同上·安装OS(可选)·OS安装说明 与 ·软件安装·安装NPU驱动固件 |
| 驱动/固件下载页、CANN 下载页、兼容性查询助手地址 | 官方 hiascend.com/hardware/firmware-drivers / /cann/download / /hardware/compatibility |
本课未做的事(数据纪律):
- 未给任何性能数字(信创环境与通用环境的性能差异)——官方未给出,故不编造。
- 未给「内核版本 → 该改驱动包哪一行」的完整对应关系——官方只给了三个示例内核 (5.13.0 / 5.4.0-198 / 5.15.0),完整表官方未给出,需现场按实际内核版本参照示例处理。
- 未给「下错架构时的具体报错原文」——官方给的是包名规律,报错条目官方未给出(正文已标注)。
- 未给「哪个国产 CPU 型号 × 哪个昇腾卡」的独立组合清单——官方未给出, 请以兼容性查询助手按产品型号查询为准。
- 「信创」一词的官方定义——官方文档中使用的是具体 OS 名单 (openEuler、Kylin、UOS、BC-Linux、CULinux、CTyunOS、AntOS、Tlinux、MTOS、vesselOS 等), 没有给「信创」的统一定义;本课开头的定义是行业通行说法,非官方表述。
- 「越是国产 OS,越常常只能自己配自己」的规律——本课对官方配对表内容的归纳,非官方表述。
- 「升降内核」的具体步骤官方有页面(《升降内核》),本课未展开,需按官方页面操作。
- 本课未覆盖 MindCluster / 集群调度侧的 OS 支持清单(那是另一套文档的表), 只引用它与本课相关的「支持的产品形态和 OS 清单」作为线索。
附录 B · 命令逐条详解
B.1 摸底三连(到场第一件事)
| 命令 | 验什么 | 判定 |
|---|---|---|
uname -m && cat /etc/*release |
CPU 架构 + OS 版本 | 架构定包名;OS 定支持范围 |
uname -r |
内核版本 | 定「直接装 / 改包 / 降内核」哪一档 |
npu-smi info |
卡认没认 | 出表 = 已装过(覆盖场景);不出 = 首次场景 |
为什么先跑这三条:它们不装、不改、不产生副作用,却能决定后面每一步往哪走。
B.2 依赖检查命令对照
| OS 家族 | 检查命令 | 安装命令 |
|---|---|---|
| Debian / Ubuntu / veLinux | make -v / dpkg-query -s dkms / dpkg-query -s gcc / dpkg-query -s linux-headers-$(uname -r) |
apt-get install -y make dkms gcc linux-headers-$(uname -r) |
| openEuler 一族(openEuler / CentOS / Kylin / BC-Linux / UOS / AntOS / CTyunOS / CULinux / Tlinux / MTOS / vesselOS) | make -v / rpm -qa \| grep dkms / rpm -qa \| grep gcc / rpm -qa \| grep kernel-devel-$(uname -r) |
yum install -y make dkms gcc kernel-headers-$(uname -r) kernel-devel-$(uname -r) |
两个要背下来的点:
1. 信创 OS 基本都在第二行(走 yum)。
2. 两个 kernel 包必须带 -$(uname -r) —— 不带就会装成「别的主机内核的」开发包,编译时照样失败。
官方补充:Kylin 的依赖是
make/dkms/gcc/kernel-devel(比通用 openEuler 一族少一个kernel-headers)。 这是官方《安装驱动源码编译所需依赖》表里单独列的一行——按你实际 OS 那一行抄,别跨行抄。
B.3 驱动/固件安装命令
首次安装场景(顺序:驱动 > 固件):
chmod +x Ascend-hdk-<chip_type>-npu-driver_<version>_linux-<arch>.run
chmod +x Ascend-hdk-<chip_type>-npu-firmware_<version>.run
./Ascend-hdk-<chip_type>-npu-driver_<version>_linux-<arch>.run --full --install-for-all
./Ascend-hdk-<chip_type>-npu-firmware_<version>.run --full
覆盖安装场景:把上面两行安装命令的顺序对调(固件先、驱动后)。
关键回显(官方原文):
| 装什么 | 成功回显 |
|---|---|
| 驱动 | Driver package installed successfully! |
| 固件 | Firmware package installed successfully! Reboot now or after driver installation for the installation/upgrade to take effect |
参数含义:
| 参数 | 含义 |
|---|---|
--full |
完整安装(安装全部组件) |
--install-for-all |
为所有用户安装;官方提示:若安装驱动时未使用该参数,CANN 软件包的运行用户需与驱动固件的运行用户同属一个用户组 |
--install-username=<username> |
指定运行用户(运行用户不是 HwHiAiUser 时必须指定) |
--install-usergroup=<usergroup> |
指定运行用户组 |
--check |
校验安装包的一致性与完整性(A1 讲过,建议装前先跑) |
--noexec --extract=./tmp |
只解包不执行(改驱动包时用,见第七段) |
--repack-path=./tmp new_driver_<内核>.run |
把改过的包重新打包(改驱动包时用) |
创建运行用户(官方示例,装之前做):
groupadd HwHiAiUser
useradd -g HwHiAiUser -d /home/HwHiAiUser -m HwHiAiUser -s /bin/bash
官方原文:安装驱动固件时,运行用户和用户组默认指定为
HwHiAiUser,需在装包前自行创建。
B.4 卡在哪一层 —— 一张对照表
| 你看到的 | 属于外围第几样 | 第一动作 |
|---|---|---|
| 包装不上、报错不提架构 | ① 架构 | uname -m 对包名 {arch} |
Dkms install failed |
② 内核/依赖 | 看 ascend_install.log → make.log |
make -v / gcc 无回显 |
② 依赖 | 按 OS 家族补装 |
| 虚拟机 / 容器里看不到卡 | ③ 部署形态 | 对配对表 / 查容器驱动版本一致 |
npu-smi info 出不了表 |
驱动(L0) | 回 A1 |
| 驱动出表但框架报错 | L1 / L2 | 回 B1 / C1(本课不涉及) |
这张表的价值:信创环境里报错五花八门,但归类只有这六行。先归类,再动手。