ASC_CPU_LOG
产 品 支 持 情 况
| 产 品 | 是 否 支 持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
| Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品 | √ |
| Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品 | √ |
| Atlas 200I/500 A2 推 理 产 品 | √ |
| Atlas 推 理 系 列 产 品 AI Core | √ |
| Atlas 推 理 系 列 产 品 Vector Core | x |
| Atlas 训 练 系 列 产 品 | √ |
功 能 说 明
提 供Host侧 打 印Log的 功 能。开 发 者 可 以 在 算 子 的TilingFunc代 码 中 使 用ASC_CPU_LOG_XXX接 口 来 输 出 相 关 内 容。一 般 情 况 下,开 发 者 也 可 以 选 择 使 用printf等Host侧 通 用 的 打 印 方 式 进 行 调 试。然 而,在Tiling下 沉 场 景 中,由 于Tiling函 数 运 行 在AI CPU上,必 须 使 用 本 接 口 进 行 打 印。
非Tiling下 沉 场 景,日 志 输 出 到plog中。比 如,debug级 别 的 日 志 输 出 到/root/ascend/log/debug/plog中,日 志 级 别 通 过 环 境 变 量ASCEND_GLOBAL_LOG_LEVEL控 制。会 打 印 日 志 级 别、时 间 戳、日 志 所 在 代 码 行 和 日 志 所 在 函 数 名。
Tiling下 沉 场 景,日 志 不 会 输 出 到plog中,而 是 需 要 落 盘 并 进 行 解 析。算 子 运 行 之 前 需 要 开 启Dump功 能,使 得 日 志Dump功 能 生 效。如 何 开 启Dump功 能 依 赖 于 具 体 的 网 络 运 行 方 式。以TorchAir图 模 式 为 例,需 要 配 置enable_dump、dump_path、dump_mode等Dump参 数。详 细 说 明 可 参 考《Ascend Extension for PyTorch》 中 的“《Pytorch图 模 式 使 用(TorchAir)》 >GE图 模 式 > GE图 模 式 功 能 > 算 子data dump功 能”章 节。示 例 如 下:
Textimport torch_npu, torchair config = torchair.CompilerConfig() # data dump开 关:[必 选] config.dump_config.enable_dump = True # dump类 型:[可 选],all代 表dump所 有 数 据 config.dump_config.dump_mode = "all" # dump路 径:[可 选],缺 省 为 当 前 目 录 config.dump_config.dump_path = '/home/dump' ...算 子 运 行 完 成 后,在Dump数 据 存 放 路 径 下 会 有 日 志Dump文 件 生 成,文 件 名 命 名 规 则 格 式 为_{op_type}.{op_name}.{taskid}.{stream_id}.{timestamp},其 中{op_type}表 示 算 子 类 型,{op_name}表 示 算 子 名 称,{taskid}表 示 调 用 算 子 计 算 接 口 的taskId,{stream_id}表 示 算 子 具 体 执 行 的 流Id,{timestamp}_表 示 时 间 戳。
需 要 包 含 的 头 文 件
#include "utils/log/asc_cpu_log.h"
函 数 原 型
#define ASC_CPU_LOG_ERROR(format, ...)
#define ASC_CPU_LOG_INFO(format, ...)
#define ASC_CPU_LOG_WARNING(format, ...)
#define ASC_CPU_LOG_DEBUG(format, ...)
参 数 说 明
表 1 参 数 说 明
| 参 数 名 | 输 入/输 出 | 描 述 |
|---|---|---|
| format | 输 入 | 格 式 控 制 字 符 串,包 含 两 种 类 型:普 通 字 符 和 转 换 说 明。 - 普 通 字 符 将 直 接 输 出。 - 转 换 说 明 用 于 控 制 参 数 的 格 式 化 输 出。每 个 转 换 说 明 以 百 分 号(%)开 始,后 跟 类 型 说 明 符,用 于 指 定 输 出 数 据 的 类 型。支 持 的 数 据 类 型 和C/C++规 范 保 持 一 致。 |
| ... | 输 入 | 附 加 参 数,数 量 和 类 型 可 变 的 参 数 列 表。其 数 量 和 类 型 需 与 格 式 控 制 字 符 串 中 的%标 签 数 量 和 类 型 匹 配。每 个 参 数 将 替 换 格 式 字 符 串 中 的 相 应%标 签,以 实 现 预 期 的 输 出 效 果。 |
返 回 值 说 明
无
约 束 说 明
Tiling下 沉 场 景 下,若 使 用 旧 版 本CANN包(不 支 持ASC_CPU_LOG接 口)生 成 的 自 定 义 算 子 工 程,需 特 别 注 意 兼 容 性 问 题,此 时 调 用 该 接 口 无 法 输 出 日 志。您 可 以 通 过 查 看 自 定 义 算 子 工 程 下cmake/device_task.cmake中 有 无DEVICE_OP_LOG_BY_DUMP字 段 来 确 认 当 前 工 程 是 否 支 持 日 志Dump功 能,如 果 未 找 到 该 字 段,则 需 要 重 新 生 成 自 定 义 算 子 工 程。
调 用 示 例
#include "utils/log/asc_cpu_log.h"
namespace optiling {
static ge::graphStatus TilingFunc(gert::TilingContext *context)
{
TilingData tiling;
uint32_t totalLength = context->GetInputShape(0)->GetOriginShape().GetShapeSize();
...
ASC_CPU_LOG_ERROR("I am ERROR log: %d\n", 0x123);
ASC_CPU_LOG_INFO("I am INFO log: %d\n", 0x123);
ASC_CPU_LOG_WARNING("I am WARNING log: %d\n", 0x123);
ASC_CPU_LOG_DEBUG("I am DEBUG log: %d\n", 0x123);
...
}
} // namespace optiling
非Tiling下 沉 场 景,打 印 会 输 出 至xxxxxxx_2025xxxxxxxxxxxxx.log中,结 果 示 例 如 下:
[ERROR] ASCENDCKERNEL(xxx,execute_add_op):2025-xx-xx-xx:xx:xx.xxx.xxx [/xxx/xxx.cpp:xx][TilingFunc] I am ERROR log: 291
[INFO] ASCENDCKERNEL(xxx,execute_add_op):2025-xx-xx-xx:xx:xx.xxx.xxx [/xxx/xxx.cpp:xx][TilingFunc] I am INFO log: 291
[WARNING] ASCENDCKERNEL(xxx,execute_add_op):2025-xx-xx-xx:xx:xx.xxx.xxx [/xxx/xxx.cpp:xx][TilingFunc] I am WARNING log: 291
[DEBUG] ASCENDCKERNEL(xxx,execute_add_op):2025-xx-xx-xx:xx:xx.xxx.xxx [/xxx/xxx.cpp:xx][TilingFunc] I am DEBUG log: 291