东方智慧AI 算力
AI算力 · 昇腾部署课件 F5

F5 国产算力适配:换到客户机房哪里不一样

2026-10-05

编制:观澜|日期: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)。 凡官方文档没给的,正文里明写「官方未给出,需现场确认」,不编。


第二段 学习目标

学完这一课,你应该能:

  1. ✅ 说出信创环境与通用环境差的三个地方(CPU 架构 / OS 与内核 / 部署形态)
  2. ✅ 用两条命令一次查出「架构、OS 版本、内核版本」三个事实
  3. ✅ 知道去查官方的三张表:物理机(兼容性查询助手)、虚拟机、容器
  4. ✅ 分清驱动安装的三种情况:能直接装 / 要改驱动包 / 要先降内核
  5. ✅ 说出虚拟化场景为什么必须先查配对表(配错了要重装系统,不是改配置)
  6. ✅ 记住依赖包按 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 都不知道。

我会先跑这三条(命令在第五段有逐条拆解):

  1. uname -m && cat /etc/*release —— 出架构 + OS 版本
  2. uname -r —— 出内核版本
  3. 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)。


第九段 小结与下一课

这一课要带走的三句话:

  1. 信创环境变的是「外围三样」——CPU 架构、OS 与内核、部署形态; 中间四层(驱动 / CANN / 框架 / 服务)的装法不变。
  2. 动手前先对表:物理机查兼容性查询助手、虚拟化查《OS兼容性列表》配对表、容器查容器表—— 虚拟化配对错了要重装系统,这是一切的理由。
  3. 「装不上」在信创环境里是一个分支,不是终点: 直接装 → 改驱动包 → 降内核 → 换 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(本课不涉及)

这张表的价值:信创环境里报错五花八门,但归类只有这六行。先归类,再动手。

选修 · 昇腾 AI 部署实操 本机读完 0/51
选修 C · 昇腾 AI 部署实操
从零把昇腾 AI 部署学一遍:先看懂分几层,再逐层装起来,最后出问题能自己定位到哪一层。不需要先有卡就能开始。
看完整学习路径(6 站 + 3 门选修) · 进度只存在你这台设备的浏览器里,不用登录
辽ICP备2026019944号-1