ai-infra-interview-305

第 193 题:算子级别的耗时分析?torch.ops.aten的dispatch?

题目

算子级别的耗时分析?torch.ops.aten的dispatch?


完整讲解

一、算子级耗时分析的目的

算子级:将耗时归因到具体算子(如 aten::linear、aten::mm、cuDNN 的 conv),用于定位热点、判断是框架 op 还是 kernel 实现问题、以及为融合与替换提供依据。PyTorch 中多数 op 会 dispatch 到 aten(torch.ops.aten.*),再到底层 backend(CUDA、cuDNN 等)。

二、PyTorch Profiler 与 aten

torch.profiler 记录的 op 名称 多为 aten::* 或 torch::*;表格或 trace 中可按 op 名排序、聚合,得到每个 aten op 的总耗时与占比。record_shapes=True 可看到该 op 的输入 shape,便于判断是否某 shape 特别慢。dispatch:aten 是 PyTorch 的 C++ 算子库,Python 调用会经 torch.dispatcher 到 aten 再到底层;profiler 在 dispatch 边界打点,所以看到的是「aten 层」的耗时,其下可能对应多个 CUDA kernel(如 linear = matmul + bias)。

三、深入与优化

若某 aten op 占比较高,可用 Nsight Compute 对该 op 触发的 kernel 做单 kernel 分析(roofline、memory);或查是否可融合(如 linear+relu)、换实现(如用 FlashAttention 替代手写 attention)。torch.compileTensorRT 会改写/融合 op,profiler 中可能看到融合后的名字(如 torch._inductor.*),需对应回原始逻辑。

面试要点


记忆要点

  1. 算子级 = 按 aten/op 聚合耗时;Profiler 表格或 trace 按名排序。
  2. aten = PyTorch C++ 算子库;dispatch 到 CUDA/cuDNN。
  3. 高占比 → ncu 看 kernel、融合或换实现。
返回模块 返回总览