triton-inference-server-ge-backend 排障指南:开启 Plog 日志定位 NPU 推理错误
【免费下载链接】triton-inference-server-ge-backendge-backend基于triton inference server框架实现对接NPU生态,快速实现传统CV\NLP等模型的服务化。项目地址: https://gitcode.com/cann/triton-inference-server-ge-backend
本指南面向使用 CANN 开源仓库 triton-inference-server-ge-backend 在昇腾 NPU 上完成模型服务化的开发者。当 Triton Server 自身日志无法定位模型解析、编译或推理失败原因时,可通过本指南开启 CANN 的 Plog(算子/GE 侧详细日志),将日志落盘并检索ERROR字段,从而拿到报错的深层根因。读完本文,你将掌握 Plog 的核心概念、启动参数、标准输出重定向方法与 ERROR 检索排障流程。
一、什么时候需要 Plog:两层日志体系与排障场景
ge-backend 运行时的日志分为两层:
- Triton Server / backend 自身日志:由 backend 源码中的
LOG_MESSAGE(TRITONSERVER_LOG_*)输出,负责记录 ACL 初始化、GE 初始化、图会话创建、模型加载、请求推理等框架侧事件(见 src/inference.cpp、src/model_instance_state.cpp、src/model_state.cpp)。 - CANN Plog 日志:来自昇腾 CANN 的 ACL/GE 等底层组件,信息粒度更细,包含算子构建、图融合(Fusion pass)、设备侧执行等过程,是判断“框架调用是否成功、底层为何失败”的关键证据。
当出现以下典型错误时,仅凭框架日志往往只能看到“失败的结果”,看不到“失败的原因”,此时就应打开 Plog 查看详细原因。这些场景在仓库的问题定位.md 中均有明确描述:
| 场景 | 框架日志特征 | 对应阶段 |
|---|---|---|
| 图解析问题 | aclgrphParseONNX execute failed, ret is: xxxxx | ONNX 图解析(常见原因为未自行导出、使用官方镜像、输入输出字段不一致) |
| 编译问题 | session_->CompileGraph failed, ret is: xxxxx | GE 图编译 |
| 推理问题 | execute model failed, ret is: xxxxx | 模型执行推理 |
这三类错误的日志文案在源码中均有对应实现,例如:
- model_instance_state.cpp 中
aclInit失败会输出aclInit failed, ret is: ...; - model_instance_state.cpp 中
ge::GEInitialize失败会输出GEInitialize failed.; - model_instance_state.cpp 中会话创建失败会输出
Create session failed.。
框架日志给出的是“哪一步失败、返回码是多少”,而 Plog 会继续向下钻取,给出底层算子/图引擎的具体报错。
二、Plog 是什么:功能定位与默认存储路径
Plog 日志主要用于记录系统运行过程及异常信息,帮助用户快速定位系统运行过程中出现的问题,以及开发过程中的程序调试问题。开发者可通过环境变量控制日志的落盘路径以及日志级别等信息。
默认情况下,Plog 日志会写入默认存储路径$HOME/ascend/log。其中:
$HOME为运行 tritonserver 进程的用户的 home 目录;- 日志按模块、进程与时间组织落盘,便于留存与回溯。
Plog 日志内容量大、信息细,默认落盘后不方便实时观察;为了方便调试,官方推荐将 Plog 打印到标准输出(stdout)中,再配合 shell 重定向将输出保存到文件,即可兼顾“实时可见”与“持久化留存”。详细的官方参数说明可参见昇腾官方文档中关于环境变量的章节(原文档中给出的链接)。
三、启动方法:两个环境变量 + 输出重定向
3.1 通过环境变量开启 Plog
在启动 tritonserver 之前,先通过环境变量完成两件事:将 Plog 重定向到标准输出、调整日志级别:
export ASCEND_SLOG_PRINT_TO_STDOUT=1 export ASCEND_GLOBAL_LOG_LEVEL=1参数含义如下:
| 环境变量 | 取值 | 作用 |
|---|---|---|
ASCEND_SLOG_PRINT_TO_STDOUT | 1表示开启,0表示关闭 | 将 CANN Plog 日志输出到标准输出(stdout),便于与 Triton 日志一同捕获 |
ASCEND_GLOBAL_LOG_LEVEL | 0~3,级别从低到高 | 控制 Plog 日志级别:级别越低输出越详细,1为 INFO 级别,可覆盖正常启动信息与异常信息 |
提示:级别
0(DEBUG)输出最为详尽,但数据量极大,通常用于深挖算子级细节;日常排障使用1(INFO)即可看到足够多的上下文。更完整的取值与级别定义请以昇腾官方文档为准。
3.2 启动 tritonserver 并重定向日志
在启动脚本后添加重定向,将标准输出写入plog.log文件:
/opt/tritonserver/bin/tritonserver --model-repository {/path/to/models} >plog.log其中:
/opt/tritonserver/bin/tritonserver为 Triton Server 可执行文件路径(AscendHub 镜像中已预置,参考快速入门.md 的说明);--model-repository {/path/to/models}指定模型仓库目录,需替换为实际路径,例如仓库示例模型目录 example/resnet;>plog.log将 stdout(含 Plog)重定向到当前目录下的plog.log文件。
执行后,Plog 日志会与 Triton 日志一并写入plog.log。由于 Plog 日志量较大,建议启动主进程时务必把输出重定向至文件,避免终端刷屏导致关键信息丢失。
四、成功启动结果:认识 Plog 日志格式
打开 Plog 后,若服务正常启动,输出中会包含类似下图的 Plog 日志:
从上图可以直观认识 Plog 日志的典型格式,一条日志通常包含以下字段:
- 时间戳:精确到毫秒,例如
2025-10-23 03:36:34.747,用于对齐事件时序; - 进程信息:
PID=32328与进程类型(如python),用于区分日志来源进程; - 日志级别:如
INFO(正常启动/注册信息)、ERROR(异常信息); - 模块/阶段:如
type:[...] stage:[STAGE_BUILD],表明当前处于 GE 的哪个构建阶段; - 核心内容:如
Fusion pass[trans_matmul_bias] has been registered,说明对应融合算子已在构建阶段成功注册。
这类INFO级别的 Fusion pass 注册日志属于正常启动信息,表明 GE 已完成图优化算子的注册,可以据此判断底层 GE 初始化、建图流程已正常推进。
五、在 plog.log 中查找 ERROR:定位根因的标准动作
服务启动或推理失败后,在保存好的plog.log中检索ERROR字段,即可快速定位具体报错原因:
grep -n "ERROR" plog.log也可配合上下文查看报错前后的相关日志,帮助还原出错现场:
grep -n -C 5 "ERROR" plog.log结合问题定位.md 的定位思路,完整排障动作如下:
- 开启 Plog 环境变量并重定向启动 tritonserver,复现问题;
- 在
plog.log中搜索ERROR,拿到底层具体报错; - 对照错误所属阶段判断问题类型:
- 图解析阶段报错(对应框架日志
aclgrphParseONNX execute failed),重点排查 ONNX 文件是否自行导出、输入输出字段是否与模型一致; - 编译阶段报错(对应
session_->CompileGraph failed),重点排查图编译相关配置; - 推理阶段报错(对应
execute model failed),需进一步结合 client 端日志核对模型名称、版本、input/output 配置(参考 example/client.py)。
- 图解析阶段报错(对应框架日志
- 若精度异常而非进程报错,可尝试
--backend-config=npu_ge,session.ge.exec.precision_mode_v2="origin"对比精度(默认插件使用 fp16 推理),详见问题定位.md。
六、注意事项与配套工具
6.1 使用建议
- 日志量大:Plog 日志较多,建议启动主进程时将输出重定向至文件(如
>plog.log),避免终端缓冲丢失早期日志; - 及时关闭:排障完成后,建议取消
ASCEND_SLOG_PRINT_TO_STDOUT=1与较低日志级别,恢复默认落盘行为,避免持续产生大体积日志拖累推理性能; - 版本对齐:不同 CANN 版本的环境变量行为与日志内容可能存在差异,具体取值范围以当前环境的昇腾官方文档为准。
6.2 与其它定位工具的分工
Plog 侧重于“日志级”根因定位,仓库中还提供了两个与之配套的底层诊断工具,遇到不同问题时可按需组合使用:
- DumpGE 使用方法:通过
--backend-config=npu_ge,dump_graph="1"导出 GE 图,查看每一步融合/优化过程,用于排查成图阶段问题; - Profiling 使用方法:通过 profiling 采集算子执行情况,用于性能瓶颈分析。
典型流程是:先用 Plog 定位“哪里报错、为什么报错”,再用 DumpGE 分析图结构与融合过程,最后用 Profiling 评估算子执行效率——三者共同构成完整的问题定位 与性能调优方法论 工具链。
七、小结
Plog 是 triton-inference-server-ge-backend 对接 CANN 生态后排障的关键手段。核心操作只需三步:
export ASCEND_SLOG_PRINT_TO_STDOUT=1 export ASCEND_GLOBAL_LOG_LEVEL=1 /opt/tritonserver/bin/tritonserver --model-repository {/path/to/models} >plog.log grep -n "ERROR" plog.log通过将 Plog 重定向到标准输出并落盘、检索ERROR字段,即可穿透框架层日志,直达 GE/ACL 底层根因,配合仓库中的问题定位.md 流程即可完成绝大多数 NPU 推理场景的错误定位。
【免费下载链接】triton-inference-server-ge-backendge-backend基于triton inference server框架实现对接NPU生态,快速实现传统CV\NLP等模型的服务化。项目地址: https://gitcode.com/cann/triton-inference-server-ge-backend
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考