Skip to content

refactor: replace private CANN logging interfaces - #36

Open
jarvis666666 wants to merge 1 commit into
xLLM-AI:mainfrom
jarvis666666:cann9.1.0_public_logging
Open

refactor: replace private CANN logging interfaces#36
jarvis666666 wants to merge 1 commit into
xLLM-AI:mainfrom
jarvis666666:cann9.1.0_public_logging

Conversation

@jarvis666666

@jarvis666666 jarvis666666 commented Aug 7, 2026

Copy link
Copy Markdown

refactor: xllm-ops 整改 CANN 非公开日志接口报告

1. PR总结

该PR是把 op_common/log/log.hOP_LOG*OP_CHECK_IF 等私有接口迁移到CANN公开的 log/ops_log.hOPS_LOG_*OPS_CHECK。相同源码可在 CANN 9.0/9.1 构建,且比强制包含本地 cann_compat.h 更健壮。

2. 问题与根因

CANN 9.1.0升级后编译报错,原因是:
CANN 9.0.0中的内部头文件
/usr/local/Ascend/cann-9.0.0/aarch64-linux/pkg_inc/op_common/log/log.h
变更到
/usr/local/Ascend/cann-9.1.0/aarch64-linux/include/op_common/log/log.h

很多xllm-ops算子通过包含 err/ops_err.h,间接依赖 CANN 私有头文件。

common/include/err/ops_err.h:19

#include "log/log.h"

例如 Sparse Attention 中同时存在直接和间接依赖:

sparse_attn_sharedkv_tiling.h
├── #include "log/log.h" // 直接依赖
└── #include "err/ops_err.h"
└── #include "log/log.h" // 间接依赖

直接引用 log/log.h 的 xllm-ops 头文件共有 13 个:

  • common/include/err/ops_err.h
  • common/include/fallback/fallback.h
  • common/include/fallback/fallback_2stages.h
  • common/include/framework/onnx_common.h
  • xllm_ops/attention/sparse_attn_sharedkv/op_host/sparse_attn_sharedkv_tiling.h
  • xllm_ops/gamma_add_rms_norm/op_host/gamma_add_rms_norm_error_log.h
  • xllm_ops/gamma_add_rms_norm/op_host/gamma_add_rms_norm_tiling.h
  • xllm_ops/moe/dequant_swiglu_quant/op_host/dequant_swiglu_quant_tiling.h
  • xllm_ops/moe/dequant_swiglu_quant/op_host/swi_glu_tiling.h
  • xllm_ops/moe/dequant_swiglu_quant/tiling_base/error_log.h
  • xllm_ops/moe/dequant_swiglu_quant/tiling_base/tiling_base.h
  • xllm_ops/moe/dequant_swiglu_quant/tiling_base/tiling_templates_registry.h
  • xllm_ops/moe/dequant_swiglu_quant/tiling_base/tiling_util.h

所以根因是 xllm-ops 的公共错误处理、fallback 和多个 tiling 基础头共同引用了 CANN 私有日志接口。当前 PR 已统
一替换为:
#include "log/ops_log.h"
并将 OP_LOG*、OP_CHECK* 迁移为 OPS_LOG_*、OPS_CHECK,从依赖源头上完成清理。

CANN的私有接口变更没有兼容性的保障,本次CANN 9.1.0 升级发现报错,统一整改成CANN 的公开接口,彻底解决后续接口兼容性问题。

3. 代码变更

目标提交修改 48 个文件,不新增兼容层,而是移除兼容层:

旧依赖 新依赖 影响
log/log.h log/ops_log.h 使用公开日志头
OP_LOGE/W/D OPS_LOG_E/W/D 使用公开宏
OP_CHECK_IF OPS_CHECK 使用公开检查宏
本地 cann_compat.h 删除 不再仿造 CANN 日志声明
target 隐式定义 ops_xllm_utils_tiling_headers 与公开编译定义 显式补全依赖

ONNX plugin、fallback、tiling 模板和多个算子 host 代码同步迁移,避免只修一个首先
报错的编译单元。个人仓原子提交还合入 compressor 的同类公开日志遗漏,共修改
49 个文件;没有合入 2644097 的 HCCL 闭包修改。

4. 兼容性分析

项目 CANN 9.0 CANN 9.1 结论
ops_log.hOPS_LOG_* 可用 可用 双版本公共交集
op_common/log/log.h 传递暴露 旧布局可偶然工作 暴露关系变化 不应依赖
本地 cann_compat.h 可编译但有漂移风险 可编译但有漂移风险 应删除

因此这不是通过 #if CANN_VERSION 维护两套日志代码,而是收敛到两个版本共同支持的
公开接口。

5. 测试验证结果

  • git diff --check 通过。
  • 提交规模:49 files, +1094/-1134
  • 提交说明明确记录 CANN 9.0/9.1 package build;本地组合构建结果见汇总报告。
  • 检查重点:不存在残留 cann_compat.h 强制包含,公开日志 target 依赖完整。
  • 在A2 x86/A3 arm/A5 x86上验证编译xllm 正常
  • 用编译后的xllm 执行Qwen3 8B 冒烟用例通过

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant