Prhub

#23528 [CPU] remove RECORD_FUNCTION

原始 PR 作者 mingfeima 合并时间 2026-04-24 09:18 文件变更 21 提交数 2 评论 3 代码增减 +0 / -106

执行摘要

移除 CPU 内核中的 RECORD_FUNCTION 宏,消除重复 Profiling 记录

目前内核通过torch.ops.sgl_kernel.xxx(...)注册,不再需要在C++代码中放置RECORD_FUNCTION。否则每个内核会被记录两次,如PR body中Profiling示例所示:'sgl-kernel::weight_packed_linear'出现了两次,一次是调度层,一次是内部实现。删除后可避免重复记录,使Profiling输出更简洁。

本PR属于常规维护,建议快速合并。变更简单且无风险,但值得记录在开发指南中:当内核通过torch.ops注册时,不应使用RECORD_FUNCTION宏。

讨论亮点

该PR无Review评论,作者自行合并。讨论仅限于PR body中对重复Profiling问题的描述。

实现拆解

  1. 定位所有CPU内核文件:在sgl-kernel/csrc/cpu/目录下找到所有包含RECORD_FUNCTION调用的源文件,共21个。
  2. 删除每个函数中的宏调用:在每个内核函数体开头(紧接在参数列表和左花括号之后)删除RECORD_FUNCTION(...)语句,该语句以函数名和tensor引用向量为参数。
  3. 保留所有其他代码:不修改逻辑、不增减校验、不改变任何计算路径。所有变更仅为100%删除。
  4. 不涉及测试或配置:这是纯源码清理,无测试、配置或部署配套变更。
文件 模块 状态 重要度
sgl-kernel/csrc/cpu/extend.cpp CPU 内核 modified 5.82
sgl-kernel/csrc/cpu/norm.cpp CPU 内核 modified 5.58
sgl-kernel/csrc/cpu/mamba/fla.cpp CPU 内核 modified 5.45

关键符号

extend_attention_cpu l2norm_cpu rmsnorm_cpu layernorm_cpu gemma_rmsnorm_cpu gemma3_rmsnorm_cpu gemma4_rmsnorm_cpu fused_rmsnorm_gated_cpu chunk_gated_delta_rule_cpu fused_sigmoid_gating_delta_rule_update_cpu fused_gdn_gating_cpu qkv_proj_with_rope qkv_proj_with_rope_fused_weight decode_attention_cpu fused_experts_cpu shared_expert_cpu topk_softmax_cpu flash_attn_cpu gemm_int8_cpu gemm_fp16_cpu gemm_fp8_cpu interface_kernel

关键源码片段

sgl-kernel/csrc/cpu/extend.cpp core-logic

核心 Attention 扩展内核,删除了 extend_attention_cpu 中的 RECORD_FUNCTION,是改动量最大的文件之一。

// 删除前:
// RECORD_FUNCTION("sgl-kernel::extend_attention_cpu", ...);
// 删除后:函数体直接开始校验输入
void extend_attention_cpu(
    at::Tensor& q_extend, at::Tensor& k_extend, at::Tensor& v_extend, at::Tensor& o_extend,
    at::Tensor& k_buffer, at::Tensor& v_buffer, at::Tensor& req_to_token,
    at::Tensor& req_pool_indices, at::Tensor& seq_lens, at::Tensor& extend_seq_lens,
    at::Tensor& extend_start_loc, int64_t max_len_extend, double sm_scale, double logit_cap) {
  // RECORD_FUNCTION 已被移除
  CHECK_LAST_DIM_CONTIGUOUS_INPUT(q_extend);
  CHECK_INPUT(o_extend);
  CHECK_LAST_DIM_CONTIGUOUS_INPUT(k_extend);
  // ... 后续代码完全不变
}
sgl-kernel/csrc/cpu/norm.cpp core-logic

包含多种归一化内核(l2norm, rmsnorm, layernorm 等),共删除了 7 个 RECORD_FUNCTION,数量最多。

// 示例:rmsnorm_cpu
at::Tensor rmsnorm_cpu(at::Tensor& input, at::Tensor& weight, double eps) {
  // RECORD_FUNCTION("sgl-kernel::rmsnorm_cpu", {input, weight}); // 已删除
  CHECK_LAST_DIM_CONTIGUOUS_INPUT(input);
  CHECK_INPUT(weight);
  // ... 完全不变
}
sgl-kernel/csrc/cpu/mamba/fla.cpp core-logic

包含 Flash Linear Attention 相关内核(chunk_gated_delta_rule 等),删除了 3 个 RECORD_FUNCTION。

// chunk_gated_delta_rule_cpu
std::tuple<at::Tensor, at::Tensor> chunk_gated_delta_rule_cpu(
    const at::Tensor& query, const at::Tensor& key, const at::Tensor& value,
    const at::Tensor& g, const at::Tensor& beta, const at::Tensor& initial_state,
    bool output_final_state, const at::Tensor& cu_seqlens, bool head_first,
    bool use_qk_l2norm_in_kernel, double eps) {
  // RECORD_FUNCTION(...) 已移除
  TORCH_CHECK(head_first == false, "...");
  // ...
}

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

风险极低。所有删除的宏仅用于Profiling记录,不影响数值计算或内存访问。若后续有调试需求,仍然可以通过外部Profiling工具(如PyTorch的Kineto)捕获内核调用。不会引入回归或性能退化。

对用户:Profiling输出不再有重复条目,便于分析性能瓶颈。对系统:无功能影响,无兼容性问题。对团队:需要告知开发者不要在内核实现中再次添加RECORD_FUNCTION,以保持一致性。

无功能影响 仅删除宏 低风险

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论