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

E4 报错码速查:拿到一个码该干什么

2026-10-05

课件编号:E4(排障层)  编制:观澜|日期:2026-10-06 难度:入门偏中 时长:约 45 分钟 是否需要硬件:❌ 不需要 前置:第 E1 课(报错定位法) 本课目标:拿到任何一个昇腾错误码,先判断它属于哪一套码体系,再决定"自己能改"还是"只能收日志"


第一段 · 章前定位

E1 教的是方法:一条报错进来,怎么拆成 5 块、怎么判断它落在哪一层。

本课接着往下走一步。你手上已经拿到一个具体的码——507033、100001、207001、0x0091、EE1023……接下来该干什么?

这一步最容易犯的错,是拿一张表去套所有的码。昇腾的码表不止一张:AscendCL 一套、Runtime 一套、GE 图引擎一套、算子库 aclnn 又一套,安装器还是另一套。套错了表,就会把"应该反馈给技术支持的问题"当成"自己改改就行",反过来也一样。

本课不教:不改你的代码、不做性能调优、不教日志怎么导出(那是 E2 的事)、不教案例库怎么用(那是 E3 的事)。本课只回答一个问题:这个码,下一步该干什么。

一句话:E1 把报错翻译成"哪一层";E4 把那个码翻译成"下一步动作"。


第二段 · 学习目标

学完这一课,你应该能:

  1. ✅ 说出昇腾至少有 5 套并存的码体系,并认出每一套长什么样
  2. ✅ 拿到一个码,先判断它属于哪套,再去查对应的那张表
  3. ✅ 看懂一行日志里的 3 个码(ErrCode / InnerCode / 打屏码)各是什么,哪个才是根因
  4. ✅ 分清哪些码自己能改(1/2/3 类)、哪些只能收日志反馈(5 类)
  5. ✅ 会按码反查官方文档与故障案例库;查不到时知道该记下什么,而不是编一个解释

第三段 · 全景:错误码不是一套体系,是好几套并存

先立一个总认识:昇腾的码表是一组,不是一张。 下面这张表是本课的骨架:

体系 码长什么样(示例) 谁产生的 官方出处
AscendCL 通用返回码 ACL_ERROR_* 100000 / 200000 / 300000 / 500000 AscendCL 对外接口 CANN 9.2.0-beta.2《aclError — 数据类型及其操作接口》表1
Runtime 返回码 ACL_ERROR_RT_* 107000 / 207000 / 507000 Runtime 运行时(rt_error_codes.h) 同上(表1 后半段)
GE 图引擎返回码 ACL_ERROR_GE_* 145000 / 245000 / 345000 / 545000 Graph Engine 图引擎 同上
算子库 aclnn 返回码 ACLNN_* 161001 / 361001 / 561xxx 单算子 aclnn 接口 CANN 9.2.0-beta.2《aclnn返回码》
打屏资源码 / 内部码 EE1023 / retCode=0x7020023 / errType=0x1 Runtime→Driver 硬件调度、plog CANN《EE1023 资源不足问题》
安装器 / 驱动码 0x0091(十六进制) 驱动与 CANN 安装器 官方无成文总表(见本节末)

⭐ 关键结论:同一个物理故障,落在不同层,报出来的码不一样。

拿来举例——"设备起不来"这一件事:

  • 在 Runtime 层是 507033(ACL_ERROR_RT_DEV_SETUP_ERROR,Device 启动失败)
  • 在 AscendCL 顶层可能是 500004(Driver 模块的错误)
  • 在一行 plog 里还会带一个十六进制内部码,形如 InnerCode=0x7020023

所以"拿到一个码"的第一步,不是查它什么意思,而是先问:这是哪一层报的码? 这一步用的正是 E1 的方法。

官方对 AscendCL 返回码的定义规则(原文,共 5 条)

规则 官方原文 码段 你能自己解决吗
规则 1 开发人员的环境异常或者代码逻辑错误,可以通过优化环境或代码逻辑的方式解决 1XXXXX ✅ 能
规则 2 资源不足(Stream、内存等)、编程时使用的接口或参数与当前硬件不匹配,可以通过在编程时合理使用资源的方式解决 2XXXXX ✅ 能
规则 3 业务功能异常,比如队列满、队列空等 3XXXXX ✅ 能
规则 4 软硬件内部异常,包括软件内部错误、Device 执行失败等,用户无法解决问题,需要将问题反馈给技术支持 5XXXXX ❌ 收日志反馈
规则 5 无法识别的错误,当前都映射为 500000 500000 ❌ 同上

⚠️ 但这 5 条只对 AscendCL 那一套成立。 安装器的 0x0091 是十六进制、走它自己的体系;EE1023 是打屏码;aclnn 的 561xxx 是另一套编号。 先判断码的场合,再套规则 —— 这条如果记不住,本课就白学了。


第四段 · 五套码各管什么 —— 以及【如果我来做】

每一套码负责什么 / 不认它会怎样

体系 它管什么 不认它会怎样
AscendCL 通用 对外接口的"参数 / 环境 / 资源 / 内部"四大类 把 1XXXXX(自己环境问题)当成内部异常去反馈,白等一轮
Runtime 设备、Stream、Event、内存、任务执行 看到 507033 去改 Python 代码,方向全错
GE 图引擎 图编译、模型加载与执行、张量 把 545001(内部加载模型失败)当模型文件问题去反复重转模型
aclnn 算子库 单算子调用的参数与内部异常 把 561107(未检测到 ASCEND_OPP_PATH)当成算子本身的缺陷
打屏 / 内部码 硬件调度资源、Device 侧异常 只盯屏幕上的 EE1023,不去 plog 找那个真正指向根因的内部数字
安装器 / 驱动 装包、编内核模块、依赖缺失 拿 AscendCL 的 1/2/3/5 规则去套 0x0091,越套越糊涂

【如果我来做】—— 拿到一个码,我按这个顺序走

不按"码表顺序"排,按"手伸进去的顺序"排:

① 先看这一行的完整报错,不要只抠出那个数字。

一行里常常同时有三个码,例如官方日志原文里的这一行: rtModelExecute:ErrCode=207005, desc=[driver error:resource alloc fail], InnerCode=0x7020023 外层 ErrCode 告诉你"哪一类",内层 InnerCode 才指向根因。 只抄 207005 去查,会查到"资源申请失败"这种笼统结论;带上 0x7020023 才能查到是 Stream 资源不足。

② 判断这个码属于哪一套体系(对照第三段的表)。

判据: 1/2/3/5 开头、6 位十进制 → AscendCL 通用; 107xxx / 207xxx / 507xxx → Runtime; 145xxx / 245xxx / 345xxx / 545xxx → GE 图引擎; 161xxx / 361xxx / 561xxx → 算子库 aclnn; 0x 开头 → 安装器 / 驱动 / 内部码; EE 开头 → 打屏码。

③ 套对应那张表,读出"含义"和"官方给的原因与解决方向"。

官方表里每个码后面都写了"可能原因及解决方法"。照它写的方向查,不要自己发明方向。

④ 判断能不能自己修。

✅ 1/2/3 类(环境、代码、资源、业务)→ 自己能改:回环境变量、调用顺序、资源申请; ❌ 5 类(内部异常、Device 执行失败)→ 官方原话就是"用户无法解决问题,需要将问题反馈给技术支持",别死磕。

⑤ 动手改之前,先把证据留下来。

记下三样:码 + 那条完整日志原文 + 出问题的时间点。("怎么把日志导出来"是 E2 的事,但"先留证据"是本课就该养成的习惯。)

⑥ 查不到、对不上时,不要编解释。

如实记一句:"码 X 在官方表里查不到,现象是 Y,环境是 Z"。这句话本身就是有效线索,比一个自己脑补的原因强得多。


第五段 · 怎么查:可照抄的命令

⚠️ 下面每条命令都按"含义 / 拆解 / 用法 / 期望 / 不过会怎样"写全,直接照着敲。

命令 echo $ASCEND_HOME_PATH

含义:打印 CANN 环境变量 ASCEND_HOME_PATH 的当前值,确认 CANN 环境是否已在当前这个终端里生效。 拆解:echo 把内容打印到屏幕;$ = 取这个变量的值。这个变量由 CANN 的 set_env.sh 设置。 用法:切过终端、或用 sudo 另开窗口后,先敲这一条再查码;echo $ASCEND_HOME_PATH 一行即可。 期望:输出一个路径(非空)。 不过会怎样:输出为空 → 环境没加载。此时报的 100001(未初始化)、"找不到库"这类码,根因不在码本身,在环境没 source。

命令 grep -rn "ErrCode" $HOME/ascend/log/ | tail

含义:在 Host 应用类日志(官方默认根目录 ${HOME}/ascend/log)下,把所有带 ErrCode 的行挑出来,只看最后几条。 拆解:grep 筛关键词;-r 递归子目录、-n 显示行号;$HOME/ascend/log 是官方默认的应用类日志路径;tail 只看末尾;| 是管道,把左边结果交给右边处理。 用法:想只看某一个码,把关键词换掉,例如 grep -rn "507033" $HOME/ascend/log/。plog 的具体文件,官方写法是 $HOME/ascend/log/[run|debug]/plog/plog-pid_*.log(即 run/ 或 debug/ 子目录下)。 期望:打印出形如 ... [api_c.cc:1713] rtModelExecute:ErrCode=207005, desc=[driver error:resource alloc fail], InnerCode=0x7020023 的行 —— 外层 ErrCode 定类,InnerCode 指根因。 不过会怎样:什么都搜不到 → 日志没生成或日志级别不够;复现前先执行下面第 8 条把级别调成 DEBUG。

命令 npu-smi info -t memory

含义:查每张卡的显存(HBM)总量 / 已用 / 剩余 —— 排查 207001(内存申请失败)、207018(Device 侧内存耗尽)这类 2XXXXX 码时,先用它确认"卡上是不是真的没内存了"。 拆解:npu-smi 是昇腾设备管理工具;info 是子命令(查信息);-t memory 指定查"内存"这一项。 用法:npu-smi info -t memory(官方 FAQ 给出的写法)。要带卡号查询时的完整参数,以官方《npu-smi 用户指南》为准。 期望:输出里能看到 HBM Total / HBM Used / HBM Free(官方 FAQ 给的输出形态)。 不过会怎样:命令不存在 → 驱动没装(回 A1 课件);HBM Free 很小 → 码的原因就是内存真被占满,先释放再复现。

命令 cat /usr/local/Ascend/version.info

含义:看 CANN 安装版本,用来判断 207000(功能不支持)、100012(反序列化模型失败)这类"版本对不上"的码。 拆解:cat 打印文件内容(本意 concatenate,现今主要用来"看文件");/usr/local/Ascend/version.info 是官方 FAQ 给出的版本文件路径。 用法:cat /usr/local/Ascend/version.info;同一份 FAQ 还给了 ldd 命令看程序实际加载的库(见下一条)。 期望:打印出版本号,能和你的报错文档/模型要求对上。 不过会怎样:报 No such file or directory → 路径随安装方式而不同(非 root 安装在 ${HOME}/Ascend 下),或 CANN 没装。别拿"这个文件不存在"当"没装"的唯一判据,改用 echo $ASCEND_HOME_PATH。

命令 ldd ./your_program | grep ascendcl

含义:看程序运行时实际加载的 AscendCL 库是哪一个 —— 排查"编译用一个版本、运行用另一个版本"导致的 207000、undefined reference 等。 拆解:ldd 列出可执行文件依赖的动态库;| 管道把结果交给 grep,筛出含 ascendcl 的行。 用法:把 ./your_program 换成你自己的可执行文件(官方 FAQ 的原样写法是 ldd your_program | grep ascendcl)。 期望:打印出 libascendcl.so 的具体路径,且应指向你期望的那个 CANN 版本目录。 不过会怎样:路径指向旧版本目录,或显示 not found → 就是版本不匹配的根因,回头查 ASCEND_HOME_PATH / LD_LIBRARY_PATH。

命令 lsmod | grep ascend

含义:看内核里的昇腾驱动模块有没有加载 —— 排查 107001(无效 Device ID)时特别有用,官方 FAQ 明确写着"驱动未正确加载"也会返回这个码。 拆解:lsmod 列出已加载的内核模块;grep ascend 只看昇腾相关的行。 用法:lsmod | grep ascend(官方 FAQ 示例)。 期望:列出昇腾相关的内核模块行。 不过会怎样:什么都不输出 → 驱动没加载。此时 107001 的根因是驱动,不是你把 Device ID 填错了。

命令 cat /var/log/ascend_seclog/ascend_install.log

含义:看驱动 / CANN 安装过程的详细日志 —— 安装类报错(Dkms install failed、Driver_ko_install failed、0x0091 这类码)的正文答案基本都在这里。 拆解:cat 打印文件;/var/log/ascend_seclog/ascend_install.log 是官方安装文档与《附录C:安装故障处理》反复点名的安装日志路径。 用法:装驱动失败时,官方回显本身就提示 "details in : /var/log/ascend_seclog/ascend_install.log",照着 cat 或 grep 它。 期望:能看到失败那一步的真实原因(例如缺 lspci、ifconfig,或 dkms 编译失败)。 不过会怎样:文件不存在 → 这次失败根本没走到"写日志"阶段(例如安装包本身损坏),先用 ./xxx.run --check 验包。

命令 export ASCEND_GLOBAL_LOG_LEVEL=0

含义:把日志级别调到 DEBUG,让 plog 输出最详细的信息 —— 当默认级别下"只有码、没有过程"时用它。 拆解:export 定义环境变量并传给之后启动的子进程;值 0=DEBUG、1=INFO(默认)、2=WARNING、3=ERROR(官方《如何通过 plog 日志定位 Device 侧异常》给的级别说明)。 用法:先 export ASCEND_GLOBAL_LOG_LEVEL=0,再来一条 export ASCEND_SLOG_PRINT_TO_STDOUT=1 让它同时打到屏幕;然后重跑程序复现。 期望:复现时屏幕/plog 出现更详细的行(如 Task run failed、fault kernel_name)。 不过会怎样:日志量暴涨却没多出新线索 → 级别开太高会把有效信息淹没;定位到具体段落后记得调回去。


第六段 · 判据 / 验收

拿下面这张表自测。每一条都能"自己验",不靠感觉。

# 你做到了 怎么自己验
① 能背出至少 5 套码体系 合上课件,写下"体系名 + 一个示例码",≥5 组算过
② 拿到任意码能先归体系 随手给一个码(如 245001),能立刻说出"这是 GE 的"
③ 看懂一行三码 给你 ErrCode=207005 ... InnerCode=0x7020023,能指出根因是 0x7020023(Stream 资源)
④ 能判"自己修 / 反馈" 给 100001 说"自己修",给 507033 说"收日志反馈"
⑤ 会按码反查 能把码去具体化后,去官方《aclError》表和故障案例库各搜一次

验收证据:一条命令的输出 + 一条完整报错原文 + 时间点。三样齐了,才算"我查过这个码"。


第七段 · 出问题怎么查 —— 拿到码后的排查顺序

先看这一张表:按"你手里的码"去查,而不是按"层"去查。 现场的人是拿着码来找答案的。

你手里的码 属于哪套 先查什么(含命令) 自己能修吗
100000 AscendCL 接口入参是否为空/越界 ✅
100001 AscendCL echo $ASCEND_HOME_PATH + 代码里 aclInit 是否在其它接口之前 ✅
100002 AscendCL 是否重复 aclInit(官方说可忽略该错误继续业务) ✅
100011 / 100012 / 100014 AscendCL 模型文件是否存在、是否与当前版本匹配 → 官方方向是重新构建模型 ✅
107000 Runtime 接口入参 ✅
107001 Runtime 设备 ID 是否在 [0, deviceCount-1];再 lsmod \| grep ascend 看驱动 ✅(多为填错)
200000 / 207001 / 207018 AscendCL / Runtime npu-smi info -t memory 看 HBM Free;释放、复用、减小一次申请量 ✅
207000 Runtime cat /usr/local/Ascend/version.info + ldd ./prog \| grep ascendcl 版本是否一致 ✅
300000 AscendCL 存储是否写满 ✅
500000 AscendCL 无法识别的错误,官方即"联系技术支持" ❌ 收日志
507000 / 507015 / 507033 Runtime 别改代码,直接收日志:grep -rn "ErrCode" $HOME/ascend/log/ ❌ 反馈
EE1023 打屏码 去 plog 找 retCode(见下方对照)→ 再看是不是资源没释放/并发过多 ✅(多为资源)
0x 开头(如 0x0091) 安装器/驱动 cat /var/log/ascend_seclog/ascend_install.log 视情况

EE1023 的 plog retCode → 资源类型对照(官方《EE1023 资源不足问题》给的表):

plog 里的 retCode 典型关键词 是哪种资源不足
0x7020023 Alloc Stream resource failed Stream 资源
0x702001b Alloc Notify resource failed Notify 资源
0x7020019 Alloc Event resource failed Event 资源
0x7110019 async copy tasks reaches the maximum limit 异步拷贝任务队列资源

⭐ EE1023 这条最能说明本课的要点:屏幕只给你 EE1023,根因数字在 plog 里。官方给的定位思路三步 —— ① 从 plog 的 retCode 确认资源类型;② 检查资源的创建与销毁是否配对(不用了就 Destroy);③ 用 npu-smi info 看是否被别的进程占用。 注意:EE1023 在官方体系里不属于 1/2/3/5 分段,它是另一套"打屏码"。套错表就会去查 AscendCL 表,查不到。


第八段 · 常见报错清单(真实编号)

下表里的码与描述逐条来自官方文档;案例编号是昇腾官方故障案例库的真编号,可直接拼链接查看: https://www.hiascend.com/document/caselibrary/detail/<案例编号>

# 报错 / 码 官方名称 官方给的原因与方向 自己修?
1 100000 ACL_ERROR_INVALID_PARAM 参数校验失败 → 检查接口入参值是否正确 ✅
2 100001 ACL_ERROR_UNINITIALIZE 未初始化 → 确认已调用 aclInit,且在其它 acl 接口之前 ✅
3 100002 ACL_ERROR_REPEAT_INITIALIZE 重复初始化/重复加载 → 检查是否重复调用(官方:可忽略继续) ✅
4 100011 ACL_ERROR_INVALID_MODEL_ID 无效的模型 ID → 检查模型是否正确加载 ✅
5 100012 ACL_ERROR_DESERIALIZE_MODEL 反序列化模型失败 → 模型可能与当前版本不匹配,重新构建模型 ✅
6 100014 ACL_ERROR_READ_MODEL_FAILURE 读取模型失败 → 检查模型文件是否存在/可访问 ✅
7 107000 ACL_ERROR_RT_PARAM_INVALID 参数校验失败 → 检查接口入参 ✅
8 107001 ACL_ERROR_RT_INVALID_DEVICEID 无效的 Device ID。两种原因:① ID 超出范围;② 驱动未加载也会报它 ✅ / 驱动
9 207000 ACL_ERROR_RT_FEATURE_NOT_SUPPORT 特性不支持 → 多为Runtime 与 CANN 版本不匹配 ✅
10 207001 ACL_ERROR_RT_MEMORY_ALLOCATION 内存申请失败 → 检查硬件环境内存剩余;策略建议 HUGE_FIRST ✅
11 207018 ACL_ERROR_RT_DEVICE_OOM Device 侧内存耗尽 → 按 Device 内存规格合理规划 ✅
12 500004 ACL_ERROR_DRV_FAILURE Driver 模块的错误 → 收日志反馈 ❌
13 507000 ACL_ERROR_RT_INTERNAL_ERROR Runtime 模块内部错误 → 收日志反馈 ❌
14 507015 ACL_ERROR_RT_AICORE_EXCEPTION AI Core 执行异常 → 收日志反馈(配 plog 看 fault kernel_name) ❌
15 507033 ACL_ERROR_RT_DEV_SETUP_ERROR Device 启动失败 → 收日志反馈 ❌
16 500000 ACL_ERROR_INTERNAL_ERROR 未知内部错误 → 收日志反馈 ❌
17 161001 ACLNN_ERR_PARAM_NULLPTR 参数校验错误,参数中存在非法的 nullptr ✅
18 561107 ACLNN_ERR_INNER_OPP_PATH_NOT_FOUND 内部异常:没有检测到需要配置的环境变量 ASCEND_OPP_PATH ✅

18 个码里,几条真实世界的"原样报错"

报错原文(去具体化后) 特征词 官方案例编号 查看量
Acl open device 0 failed, errorCode is 507033 Acl open device topic_0000001633594041 10,585
EL0003,error code 507000 507000 case_95414 —
[ERROR]ERR_NO:0x0091;ERR_DES:username not permission for root username not permission for root case_92819 —
CentOS 7.6 内核升级后 npu-smi / 驱动安装失败 CentOS 7.6;npu-smi case_9286 1,983
虚拟机安全启动打开 → [ERROR]Driver_ko_install failed Driver_ko_install failed topic_0000002273354313 745
驱动安装中出现拷贝目录报错 — topic_0000002273193421 907

⭐ 看第 3 行那条 0x0091:它是十六进制、走安装器自己的体系,不属于 AscendCL 的 1/2/3/5 分段。这就是本课反复强调"先判断码的场合"的活例子。


第九段 · 小结与下一课

三句话带走

  1. 码表是一组,不是一张:AscendCL / Runtime / GE / aclnn / 打屏码 / 安装器,先认体系,再查表。
  2. 看整行,别只抠数字:ErrCode 定类,InnerCode(十六进制)指根因。
  3. 1/2/3 开头自己改;5 开头收日志 —— 官方原话:5 类是"用户无法解决,需反馈技术支持"。

钩子(E 层后续课)

课 要回答的问题
E2 日志三处怎么分?msnpureport 怎么把 Device 侧日志导出来?
E3 官方故障案例库到底怎么用?特征词怎么提?
E5 不报错但结果不对(精度问题)怎么查?

课后自测(3 题)

  1. 你看到 ErrCode=207005, desc=[driver error:resource alloc fail], InnerCode=0x7020023。先说这三个数各是什么,再说根因是哪个。
  2. 同事发来 ACL_ERROR_UNINITIALIZE (100001)。它属于哪套体系?你能自己修吗?先查什么?
  3. 安装驱动时报 [ERROR]ERR_NO:0x0091。你打算拿 AscendCL 的 1/2/3/5 规则套它吗?为什么?该去哪里找答案?

附录 A · 本课引用的官方出处

内容 官方来源
AscendCL 返回码 5 条定义规则(1/2/3/5XXXXX + 500000) CANN 9.2.0-beta.2《aclError — 数据类型及其操作接口》
ACL_ERROR_* / ACL_ERROR_RT_* / ACL_ERROR_GE_* 全部具体码 同上(同一页表1)
aclnn 返回码(161001 / 361001 / 561xxx)与 aclGetRecentErrMsg CANN 9.2.0-beta.2《aclnn返回码》
107001 两种原因、lsmod \| grep ascend、cat /usr/local/Ascend/version.info CANN《aclrtSetDevice调用失败》
aclInit 失败三种现象、107000 / 100002、json 层级 10 层 CANN《aclInit初始化失败常见原因排查》
207000 版本不匹配、ldd ... \| grep ascendcl CANN《Runtime版本与CANN版本不匹配导致的问题》
207001、npu-smi info -t memory、HUGE_FIRST 策略 CANN《aclrtMalloc内存申请失败常见原因》
异步错误延迟、aclrtSynchronizeStream、aclrtPeekAtLastError CANN《如何获取和解读Runtime异步错误码》
plog 路径、grep "fault kernel_name"、日志级别 0/1/2/3 CANN《如何通过plog日志定位Device侧异常》
EE1023 四类资源与 plog retCode 对照表 CANN《EE1023资源不足问题》
安装日志路径、Dkms install failed、缺 lspci/ifconfig CANN《附录C:安装故障处理》
--check 回显 Verifying archive integrity... 昇腾《安装驱动》(NPU 驱动和固件安装指南)
5 条真实报错案例编号与查看量 昇腾官方故障案例库

⚠️ 数据说明(官方未给出、或本课未写死的部分):

  • 安装器 / 驱动的十六进制码(如 0x0091):官方没有成文的错误码总表。 只能靠报错原文 + 现象去故障案例库搜,并查 /var/log/ascend_seclog/ascend_install.log。本课未编造任何安装器码表。
  • 码段 → 层的对照本课部分沿用 E1 的归纳,属教学用归类,非官方表述,仅用于快速判断,不作为判据。
  • EE1023 的 plog retCode 对照表只列了官方该页给出的 4 条,不是全部。
  • 具体码(如 100013、207012、507905 等)本课未逐一展开,请以官方《aclError》表1 为准。
  • 本课的 grep / lsmod / ldd 等都属通用 Linux 命令,非昇腾专用;昇腾专用的只有 npu-smi、msnpureport 等。

附录 B · 本课出现的命令详解

看图对照:本课的命令分三类 —— 看环境(echo)、捞码(grep / cat)、判版本与驱动(ldd / lsmod / version.info)。

grep —— 排障第一工具

命令 grep -rn "507033" $HOME/ascend/log/

含义:在日志目录里,把含某个特征词的行全找出来。 拆解:grep(搜索)+ -r(递归子目录)+ -n(显示行号)+ 关键词 + 目录。 用法:grep -rn "ErrCode" $HOME/ascend/log/(找所有带码的行);grep -rn "fault kernel_name" $HOME/ascend/log/(找失败算子名,官方写法)。 期望:打印出所有匹配的行(含文件路径与行号)。 不过会怎样:什么都不输出 → 关键词不在日志里(换个词试)或日志没生成(先开 DEBUG 复现)。

tail —— 只看最后几条

命令 grep -rn "ErrCode" $HOME/ascend/log/ | tail

含义:配合前面的命令,只显示结果的最后若干行,避免刷屏。 拆解:|(管道,把左边输出交给右边)+ tail(显示末尾,默认 10 行)。 用法:tail -n 20 可以指定行数。 期望:只输出末尾的几行。 不过会怎样:输出为空 → 前面那条 grep 没匹配到任何内容,问题在前一步不在 tail。

export —— 让设置传给子进程

命令 export ASCEND_SLOG_PRINT_TO_STDOUT=1

含义:把日志同时打到标准输出(屏幕),方便一边跑一边看。 拆解:export 定义环境变量并传给之后启动的子进程;不加 export 只在当前 shell 有值,程序读不到。 用法:常和 export ASCEND_GLOBAL_LOG_LEVEL=0 配对使用;只在当前窗口有效,重开窗口要再来一遍。 期望:程序运行时的日志会同时出现在屏幕上。 不过会怎样:屏幕没有额外输出 → 变量没在这一层生效(比如程序是另一个用户/no export 启动的)。

一条能一次看全的对比:source 与直接改文件

含义:source set_env.sh 是在当前窗口执行脚本,脚本里设的环境变量会留在当前终端——这是"装完为什么要 source"的根本原因。 拆解:source 脚本(在当前进程里执行) vs bash 脚本(另起一个进程执行,变量不会留下)。 用法:source /usr/local/Ascend/cann/set_env.sh(root);非 root 在 ${HOME}/Ascend/cann/set_env.sh。 期望:source 之后 echo $ASCEND_HOME_PATH 有值。 不过会怎样:source 完还是空 → 路径写错,或该版本的 set_env.sh 不在这个位置(以实际安装路径为准)。


下一站:E5 精度问题排查 —— 程序不报错、结果是错的,该怎么查。

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