Skip to content

PyTorch 的 JIT 编译器,通过图捕获、算子融合和后端优化将 eager 模式代码编译为高效 kernel。

为什么需要 torch.compile

PyTorch eager 模式每次 op 都经过 Python 调度和 GPU kernel launch,引入不必要的开销。torch.compile(基于 TorchDynamo + TorchInductor)自动将模型捕获为计算图,进行水平/垂直算子融合、内存布局优化和自动调优,生成融合 kernel,在不修改模型代码的前提下显著提升执行效率。

核心原理

  • TorchDynamo:通过 frame evaluation hook 捕获 Python 字节码,将 eager 执行转换为 FX Graph。
  • TorchInductor:后端编译器将 FX Graph lowering 为 Triton kernel(GPU)或 C++ kernel(CPU)。
  • 算子融合:自动将连续的 pointwise op(如 SiLU + multiply)融合为单个 kernel,减少 HBM 访问。
  • 动态形状:Inductor 支持动态形状符号化(symbolic shapes),适应 LLM 推理中变化的序列长度。

在源码中的实现

  • vllm/compiler/ — vLLM 的编译器集成层,封装 torch.compile 配置。
  • vllm/config.pyCompilationConfig 控制 compile 级别(Dynamo、Inductor)、backend 选择。
  • vllm/worker/model_runner.py — 模型加载后根据配置调用 torch.compile() 编译。
  • vllm/model_executor/models/ — 模型代码中通过 torch.compiler.disable 等装饰器标记不兼容的 op。

相关概念

  • cuda-graph — torch.compile 优化后的模型可进一步通过 CUDA Graph 消除 launch 开销
  • flash-attention — torch.compile 可融合注意力前后的 pointwise op
  • lora — LoRA 动态权重切换需考虑 compile 后的静态图限制
  • tensor-parallelism — TP 的集合通信 op 需被 compile 正确处理