<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>编译 on Richelieu's Blog</title><link>https://beaiera.top/tags/%E7%BC%96%E8%AF%91/</link><description>Recent content in 编译 on Richelieu's Blog</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Mon, 01 Jun 2026 10:40:00 +0800</lastBuildDate><atom:link href="https://beaiera.top/tags/%E7%BC%96%E8%AF%91/index.xml" rel="self" type="application/rss+xml"/><item><title>vLLM TorchDynamo 编译：FX Graph 分割原理与实践</title><link>https://beaiera.top/posts/vllm-torch-fx-graph-split/</link><pubDate>Mon, 01 Jun 2026 10:40:00 +0800</pubDate><guid>https://beaiera.top/posts/vllm-torch-fx-graph-split/</guid><description>&lt;h2 id="背景"&gt;背景&lt;/h2&gt;
&lt;p&gt;vLLM 利用 PyTorch 2.x 的 &lt;code&gt;torch.compile&lt;/code&gt; 路径，通过 TorchDynamo 捕获模型计算图，再经过图分割（graph splitting）和分段编译（piecewise compilation）来优化 GPU kernel 执行效率。本文将深入剖析 FX Graph 的分割原理及其背后的设计思想。&lt;/p&gt;
&lt;h2 id="一torchdynamo-编译概览"&gt;一、TorchDynamo 编译概览&lt;/h2&gt;
&lt;p&gt;TorchDynamo 是一个 Python 级别的 JIT 编译器，它通过 &lt;code&gt;PEP 523&lt;/code&gt; 的 frame evaluation callback 在 Python 字节码执行之前捕获计算图。vLLM 利用这一机制，将模型 forward 函数中的计算捕获为 &lt;code&gt;fx.GraphModule&lt;/code&gt;，然后送入自定义后端 &lt;code&gt;VllmBackend&lt;/code&gt; 进行编译。&lt;/p&gt;
&lt;p&gt;编译流程大致如下：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;model.forward()
└── TorchDynamo 捕获计算图
└── fx.GraphModule (原始完整图)
└── VllmBackend.__call__()
├── split_graph() → 图分割
├── PiecewiseCompileInterpreter → 分段编译
└── codegen → 生成胶水函数
└── 返回可调用对象给 Dynamo
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="二fx-graph-分割split_graph-的工作原理"&gt;二、FX Graph 分割：split_graph 的工作原理&lt;/h2&gt;
&lt;h3 id="21-为什么需要分割"&gt;2.1 为什么需要分割&lt;/h3&gt;
&lt;p&gt;vLLM 的模型计算中包含两种性质不同的算子：&lt;/p&gt;</description></item></channel></rss>