TVM 的前世今生:从深度学习编译器到 AI 基础设施

1. 引言:为什么需要 TVM

2016 年前后,深度学习从学术圈走向工业界,TensorFlow、PyTorch、MXNet 等框架百花齐放。但一个尴尬的现实摆在所有工程师面前:模型训练在框架里很舒服,部署到真实硬件上却异常痛苦。

同一份模型,要跑在 NVIDIA GPU、ARM 手机、FPGA、专用加速器上,往往需要为每种硬件手写一套算子库(如 cuDNN、cuBLAS、ARM Compute Library)。硬件厂商各自为战,框架作者疲于适配,算法工程师则被"模型能训不能跑"卡住。

TVM(Tensor Virtual Machine)正是在这样的背景下诞生的。它的目标很朴素也很宏大:做一个端到端的深度学习编译器,让模型能够自动、高效地编译到任意硬件上。

本文将从 TVM 诞生的动机与业界环境讲起,梳理它的设计哲学、发展历程、今天的地位,以及未来可能的方向。

2. 诞生前的业界背景

要理解 TVM 为什么出现,需要先看清 2015---2016 年的技术环境。

2.1 深度学习框架的爆发

2015 年 11 月,Google 开源 TensorFlow;2016 年,Facebook 的 PyTorch 前身 Torch7 与 Caffe2 相继推进;MXNet 也在亚马逊的支持下快速成长。框架层的竞争异常激烈,但大家关注的多是训练侧的表达能力与分布式能力。

2.2 部署侧的碎片化困境

训练完成后,模型要落地到各种设备:

  • 云端 GPU 服务器
  • 移动端 ARM CPU / GPU
  • 嵌入式 DSP、NPU
  • FPGA 与自研 ASIC

每种硬件都有自己的指令集、内存层次和并行模型。传统做法是为每个硬件手写高性能算子库,再由框架调用。这种模式的问题在于:

  1. 人力成本极高:一个高性能卷积实现可能需要资深工程师数月打磨;
  2. 覆盖不全:新算子、新硬件层出不穷,算子库永远追不上;
  3. 难以复用:不同硬件的优化经验无法迁移。

2.3 编译器思路的萌芽

与此同时,编译器领域已经积累了成熟的理论:多面体模型(Polyhedral Model)、自动调度(Auto-scheduling)、中间表示(IR)分层等。Halide 在图像处理领域证明了"算法与调度分离"的威力------同一份算法描述,通过不同的 schedule 就能生成面向不同硬件的代码。

这给了研究者一个关键启发:深度学习算子本质上也是循环嵌套的计算,能否用编译器的思路自动生成高性能代码?

3. TVM 的诞生与核心设计

3.1 起源

TVM 项目由陈天奇等人发起,最初源于华盛顿大学(UW)的深度学习系统研究,后与 AWS 等团队合作推进。2017 年,相关论文《TVM: An Automated End-to-End Optimizing Compiler for Deep Learning》在 OSDI 上发表,正式确立了 TVM 的学术与工程地位。

3.2 设计哲学:算法与调度分离

TVM 最核心的思想继承自 Halide:把"算什么"(compute)和"怎么算"(schedule)分开。

  • Compute:用张量表达式(Tensor Expression, TE)描述计算逻辑,例如"输出等于输入与权重的卷积";
  • Schedule:描述循环如何切分、如何并行、如何做内存分块与向量化。

同一份 compute,配上不同的 schedule,就能生成面向 CPU、GPU、加速器的不同代码。这从根本上解决了"一份模型、多种硬件"的适配难题。

3.3 分层中间表示

TVM 采用多层 IR 设计,逐级降低抽象:
#mermaid-svg-Cx3l7FSe7P1bG5Vb{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Cx3l7FSe7P1bG5Vb .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .error-icon{fill:#552222;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .marker.cross{stroke:#333333;}#mermaid-svg-Cx3l7FSe7P1bG5Vb svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Cx3l7FSe7P1bG5Vb p{margin:0;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .cluster-label text{fill:#333;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .cluster-label span{color:#333;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .cluster-label span p{background-color:transparent;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .label text,#mermaid-svg-Cx3l7FSe7P1bG5Vb span{fill:#333;color:#333;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .node rect,#mermaid-svg-Cx3l7FSe7P1bG5Vb .node circle,#mermaid-svg-Cx3l7FSe7P1bG5Vb .node ellipse,#mermaid-svg-Cx3l7FSe7P1bG5Vb .node polygon,#mermaid-svg-Cx3l7FSe7P1bG5Vb .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .rough-node .label text,#mermaid-svg-Cx3l7FSe7P1bG5Vb .node .label text,#mermaid-svg-Cx3l7FSe7P1bG5Vb .image-shape .label,#mermaid-svg-Cx3l7FSe7P1bG5Vb .icon-shape .label{text-anchor:middle;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .rough-node .label,#mermaid-svg-Cx3l7FSe7P1bG5Vb .node .label,#mermaid-svg-Cx3l7FSe7P1bG5Vb .image-shape .label,#mermaid-svg-Cx3l7FSe7P1bG5Vb .icon-shape .label{text-align:center;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .node.clickable{cursor:pointer;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .arrowheadPath{fill:#333333;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Cx3l7FSe7P1bG5Vb .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Cx3l7FSe7P1bG5Vb .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Cx3l7FSe7P1bG5Vb .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .cluster text{fill:#333;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .cluster span{color:#333;}#mermaid-svg-Cx3l7FSe7P1bG5Vb div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Cx3l7FSe7P1bG5Vb rect.text{fill:none;stroke-width:0;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .icon-shape,#mermaid-svg-Cx3l7FSe7P1bG5Vb .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .icon-shape p,#mermaid-svg-Cx3l7FSe7P1bG5Vb .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .icon-shape .label rect,#mermaid-svg-Cx3l7FSe7P1bG5Vb .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Cx3l7FSe7P1bG5Vb .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Cx3l7FSe7P1bG5Vb .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Cx3l7FSe7P1bG5Vb :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 前端框架模型

TensorFlow / PyTorch / ONNX
Relay IR

图级别表示
TE / TIR

张量表达式与循环级 IR
Schedule 优化

切分 / 并行 / 向量化
目标代码

LLVM / CUDA / OpenCL / 汇编
运行时

Graph Executor / AOT

  • Relay:图级别 IR,负责算子融合、常量折叠等图优化;
  • TE / TIR:张量表达式与循环级 IR,负责算子内部的循环变换;
  • 后端:通过 LLVM、CUDA、OpenCL、Metal 等生成目标代码。

3.4 自动调度:AutoTVM 与 Ansor

手写 schedule 依然需要专家经验。TVM 进一步引入自动调度:

  • AutoTVM:基于模板的参数搜索,用机器学习模型(如 XGBoost)指导搜索方向;
  • Ansor(后并入 TVM 成为 Auto-scheduler):无需模板,自动生成搜索空间并分层采样,大幅降低调优门槛。

这让"让编译器自己找到高性能实现"成为可能。

4. 发展历程

4.1 2017---2019:从论文到生态

OSDI 论文发表后,TVM 迅速在工业界获得关注。AWS 将其用于 SageMaker Neo,阿里、华为等公司也开始在推理场景中试用。这一阶段的重点是打通端到端流程:从主流框架导入模型,编译到 CPU/GPU,并保证精度与性能。

4.2 2019---2021:社区化与商业化

TVM 加入 Apache 软件基金会孵化器,2020 年成为 Apache 顶级项目。社区规模快速扩大,贡献者来自全球各大公司。与此同时,商业化公司 OctoML 成立,推动 TVM 在企业级部署中的落地。

这一阶段的技术亮点包括:

  • µTVM / MicroTVM:面向微控制器(MCU)的裸机部署;
  • BYOC(Bring Your Own Codegen):允许硬件厂商接入自有编译器与加速库;
  • Auto-scheduler(Ansor) 成熟并集成。

4.3 2021 至今:面向大模型与异构计算

随着 Transformer 与大模型兴起,TVM 的重心也在调整:

  • Unity:尝试统一图级别与算子级别的抽象,减少 Relay 与 TIR 之间的割裂;
  • TVM FFI / Relax:新一代 IR 设计,更好地支持动态形状与控制流;
  • 异构调度:面向 GPU、NPU 混合部署的协同优化。

5. 今天的地位

经过近十年发展,TVM 已经成为深度学习编译器领域的事实标准之一,与 XLA、TensorRT、MLIR 等共同构成 AI 编译基础设施的版图。

它的价值体现在几个方面:

  1. 学术影响力:TVM 系列论文被大量引用,AutoTVM、Ansor 的自动调度思想被广泛借鉴;
  2. 工业落地:AWS SageMaker Neo、多家芯片厂商的 SDK 都基于 TVM 构建;
  3. 生态开放性:Apache 顶级项目,社区活跃,文档与教程完善;
  4. 教育价值:成为学习深度学习编译器与自动调度的重要入口。

当然,TVM 也面临挑战:MLIR 的崛起带来了 IR 层面的竞争,PyTorch 2.0 的 TorchInductor、TensorRT-LLM 等专用方案在特定场景下更具优势,TVM 需要在通用性与极致性能之间持续寻找平衡。

6. 可能的未来

展望未来,TVM 的发展可能沿着几条主线展开:

6.1 与大模型基础设施深度融合

大模型的推理优化(KV Cache 管理、量化、算子融合、分布式并行)是当前最迫切的需求。TVM 需要在动态形状、长序列、多卡协同等场景下提供更成熟的编译支持。

6.2 与 MLIR 生态协同而非对抗

MLIR 提供了更灵活的 IR 基础设施,TVM 可能更多地复用 MLIR 的方言(Dialect)与 Pass 框架,把精力集中在自动调度与硬件适配这些差异化能力上。

6.3 自动调度的进一步智能化

从模板搜索到无模板搜索,再到基于大模型/强化学习的调度生成,自动调度仍有很大想象空间。让"编译即调优"成为默认行为,是长期目标。

6.4 更广泛的硬件覆盖

随着 RISC-V、Chiplet、存算一体等新硬件形态出现,TVM 的 BYOC 与 MicroTVM 能力将更加重要,成为连接算法与新兴硬件的桥梁。

7. 总结

TVM 的诞生,本质上是对"深度学习部署碎片化"这一时代痛点的回应。它把编译器领域沉淀多年的思想------分层 IR、算法与调度分离、自动搜索------引入深度学习系统,走出了一条从学术论文到工业基础设施的完整路径。

回望它的前世:是框架爆发与硬件碎片化的矛盾催生了它;看它的今生:它已成为 AI 编译领域的重要基石;而它的未来,则与大模型、异构计算和新硬件形态紧密相连。

对于工程师而言,理解 TVM 不仅是掌握一个工具,更是理解"如何让算法高效地跑在任何硬件上"这一 AI 系统领域的核心命题。

相关推荐
冬奇Lab1 小时前
一天一个开源项目(第255篇):Mika —— 装在安卓手机里的 AI 代理,在后台虚拟屏上替你操作 App 和网页
人工智能·开源·资讯
孟健3 小时前
实测 agent-desktop:AI 控制桌面不截图、不占鼠标键盘,连点 55 次计算器 0 失误
人工智能·架构·开源
MUSHANGXS3 小时前
大模型时代的新蓝海-基于OS底层的AI-Agent应用
人工智能·职场和发展·交互
伞伞悦读3 小时前
【第76期】两张3行表左连接变5行:主键、validate与未匹配排查完整教程
人工智能·python
IT_陈寒3 小时前
Redis大key删除为什么会导致服务卡顿?我的线上事故复盘
前端·人工智能·后端
阿里云大数据AI技术4 小时前
云栖实录 | AgenticSearch 定义 AI 搜索时代的信息检索 - 新范式
人工智能
AI源码4 小时前
基于深度学习的音乐风格分类系统
人工智能·深度学习
慢慢来不要急4 小时前
GitHub Copilot Fusion 智能路由模型 · 11-02
人工智能·开发工具
CServer_014 小时前
源码交付!有色金属工厂的AI数据底座
人工智能·物联网·制造