AI 编译技术:从 MLIR 到 TVM,AI 模型如何变成高效机器码?

MLIR中间表示与编译 MLIR中间表示与编译 概述 目前深度模型的推理引擎按照实现方式大体分为两类: 解释型推理引擎:  一般包含模型解析器,模型解释器,模型优化器。  模型解析器负责读取和解析模型文件,转换为适用于解释器处理的内存格式;  模型优化器负责将原始模型变换为等价的、但具有更快的推理速度的模型;  模型解释器分析内存格式的模型并接受模型的输入数据,然后根据模型的结构依次执行相应的模型内部的算子,最后产生模型的输出。 编译型推理引擎:  一般包含模型解析器和模型编译器。模型解析器的作用与解释型推理引擎相同; 阅读详情

AI 编译技术:从 MLIR 到 TVM,AI 模型如何变成高效机器码?

cover

一、AI 编译不是传统编译:计算图与张量算子的新范式

传统编译器处理的是标量运算:加一个数、跳一个地址、读一段内存。AI 编译器处理的是张量运算:矩阵乘法、卷积、归约。这两者的差异不只是数据维度的不同,更是计算模式的根本区别。张量运算有大量可并行性,数据访问模式是规则的,计算密度远高于标量程序。

AI 编译技术的兴起,源于一个现实矛盾:训练框架(PyTorch、TensorFlow)追求灵活性和易用性,推理部署追求性能和资源效率。训练时用动态图、自动微分、Python API,推理时需要静态图、算子融合、底层代码生成。AI 编译器就是连接这两端的桥梁。

生产环境里,AI 编译的典型场景是:一个 PyTorch 训练好的模型,需要部署到 GPU 服务器、ARM 手机、甚至浏览器中。每个目标平台的硬件架构不同,最优的算子实现也不同。手写每个平台的 kernel 不现实,AI 编译器的作用就是自动化这个过程。

二、AI 编译器的分层架构:从计算图到硬件指令

AI 编译器的架构通常分为三层:前端图捕获、中间表示优化、后端代码生成。

graph TD
    A[训练框架 PyTorch/TF] --> B[前端:计算图捕获]
    B --> C[高层 IR:计算图]
    C --> D[图优化层]
    D --> D1[算子融合]
    D --> D2[常量折叠]
    D --> D3[死代码消除]
    D --> D4[内存布局优化]
    D --> E[底层 IR:循环/张量级]
    E --> F[后端:代码生成]
    F --> F1[GPU: CUDA/ROCm]
    F --> F2[CPU: x86/ARM]
    F --> F3[NPU: 专用加速器]
    F --> F4[WASM: 浏览器]

    subgraph MLIR 生态
        G[方言: Dialect]
        G --> G1[tensor dialect]
        G --> G2[linalg dialect]
        G --> G3[affine dialect]
        G --> G4[LLVM IR]
    end

    E --> G

前端负责将训练框架的模型转换为计算图。PyTorch 通过 torch.compile 或 torch.export 导出计算图,TensorFlow 通过 SavedModel 格式提供图定义。前端的挑战是处理动态形状、控制流和自定义算子。

**中间表示(IR)**是 AI 编译器的核心。MLIR(Multi-Level Intermediate Representation)是当前最主流的 IR 框架,它通过"方言"(Dialect)机制支持不同抽象层次。tensor dialect 描述张量级操作,linalg dialect 描述线性代数运算,affine dialect 描述循环嵌套,最终 lowering 到 LLVM IR 生成机器码。

后端负责将优化后的 IR 编译为目标平台的机器码。不同后端有不同的优化策略:GPU 后端关注线程映射和共享内存利用,CPU 后端关注向量化(SIMD)和缓存友好,NPU 后端关注专用指令的映射。

三、用 TVM 编译一个模型:从 PyTorch 到可部署模块

以下代码展示了使用 Apache TVM 将 PyTorch 模型编译为优化推理模块的完整流程:

import tvm
from tvm import relay
import torch
import torch.nn as nn
import numpy as np

# 定义一个简单的卷积模型
class SimpleConvNet(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = nn.Conv2d(3, 16, 3, padding=1)
        self.bn1 = nn.BatchNorm2d(16)
        self.relu = nn.ReLU()
        self.pool = nn.AdaptiveAvgPool2d(1)
        self.fc = nn.Linear(16, 10)

    def forward(self, x):
        x = self.relu(self.bn1(self.conv1(x)))
        x = self.pool(x)
        x = x.view(x.size(0), -1)
        x = self.fc(x)
        return x

def compile_model():
    """将 PyTorch 模型编译为 TVM 优化模块"""
    # 1. 创建模型并转为评估模式
    model = SimpleConvNet()
    model.eval()

    # 2. 使用 Relay 前端导入 PyTorch 模型
    input_shape = (1, 3, 224, 224)
    input_name = "input"
    scripted_model = torch.jit.trace(model, torch.randn(*input_shape))

    mod, params = relay.frontend.from_pytorch(
        scripted_model,
        [(input_name, input_shape)],
    )

    # 3. 应用优化 Pass
    # 算子融合:将 conv + bn + relu 融合为单个算子
    # 常量折叠:编译期计算已知常量
    # 死代码消除:移除未使用的计算节点
    with tvm.transform.PassContext(opt_level=3):
        # 针对 CPU 目标编译
        target = "llvm"
        lib = relay.build(mod, target=target, params=params)

    # 4. 创建运行时模块并执行推理
    dev = tvm.cpu()
    runtime = tvm.contrib.graph_executor.GraphModule(lib["default"](dev))

    # 设置输入数据
    input_data = np.random.randn(*input_shape).astype("float32")
    runtime.set_input(input_name, input_data)

    # 执行推理
    runtime.run()

    # 获取输出
    output = runtime.get_output(0).numpy()
    print(f"输出形状:{output.shape}")
    print(f"输出样例:{output[0][:5]}")

    # 5. 导出编译后的模块
    lib.export_library("compiled_model.so")
    print("模型已编译并导出为 compiled_model.so")

    return lib

if __name__ == "__main__":
    compile_model()

这段代码的关键步骤是第 3 步的优化 Pass。opt_level=3 启用了 TVM 的最高优化级别,包括算子融合、常量折叠、布局转换和自动调度。算子融合是最重要的优化——将 Conv2d + BatchNorm + ReLU 三个独立算子合并为一个,减少中间结果的内存读写,在 GPU 上性能提升可达 2-3 倍。

四、AI 编译技术的边界与工程取舍

动态形状的支持:AI 编译器对静态形状的支持很好,但动态形状(如变长序列、动态 batch)仍然是个挑战。TVM 通过 Any 维度支持动态形状,但优化效果不如静态形状。MLIR 的 dynamic dialect 在尝试解决这个问题,但目前还不够成熟。如果你的模型有动态形状输入,需要在编译时权衡:固定形状获得最优性能,还是接受动态形状的性能折损。

自定义算子的代价:模型中如果包含框架标准算子之外的自定义算子,需要在编译器中注册对应的实现。TVM 需要手写 Relay 算子和 TVM kernel,MLIR 需要定义新的 Dialect。这个工作量不小,且容易出错。一个替代方案是将自定义算子拆解为标准算子的组合,牺牲少量性能换取编译兼容性。

编译时间 vs 推理性能:TVM 的 AutoTVM 和 AutoScheduler 通过搜索找到最优的算子实现,但搜索过程可能需要数小时。生产环境中,通常在 CI 中预编译模型并缓存结果,推理时直接加载。如果模型频繁变更,编译时间会成为部署瓶颈。

跨平台一致性:不同后端编译出的模型,数值结果可能有微小差异(由于浮点运算顺序不同)。对于分类任务,这种差异通常可以忽略。但对于数值敏感的场景(如金融模型、科学计算),需要关注数值一致性,可能需要牺牲性能使用确定性算法。

五、总结

AI 编译技术解决的是训练框架到推理部署之间的性能鸿沟。架构上分为前端图捕获、中间表示优化和后端代码生成三层。MLIR 通过方言机制支持多层次的 IR 表达,TVM 提供了端到端的编译和部署流程。核心优化包括算子融合、常量折叠和内存布局优化。主要挑战在于动态形状支持、自定义算子适配、编译时间与推理性能的权衡,以及跨平台数值一致性。AI 编译技术仍在快速演进,MLIR 和 TVM 是当前最值得关注的方向,但生产落地时需要根据具体场景做取舍。

编译器视角下的AI效率革命:当MLIR遇见图优化 本文探讨了MLIR与图优化技术在现代AI编译器中的革命性作用,通过计算图优化显著提升深度学习模型性能。文章详细解析了MLIR的多层架构、算子融合策略及内存优化技术,并结合工业级案例(如TVM、TensorRT)展示如何实现3-5倍推理加速,为AI效率革命提供关键技术路径。 阅读详情

相关推荐

AI编译器自学路线:从TVM到MLIR的完整实战指南

编译器是连接高级语言与硬件执行的桥梁,AI编译器则在传统编译技术之上,通过中间表示(IR)、算子融合与自动调优,将深度学习模型高效映射到GPU、NPU等硬件。在AI基础设施快速发展的今天,掌握图优化、调度原语和代码生成已成为模型部署与推理加速的核心能力。从工业级框架TVM到可扩展的MLIR,再到底层LLVM,系统化的学习路径能帮助开发者快速构建知识体系。本文梳理了从编译原理基础、IR设计、算子优化到硬件部署的完整学习路线,并给出了四个由浅入深的实战项目,覆盖算子优化、方言定制、极简编译器实现等,为入门AI编

weixin_28725553的博客 340

探索`TVM MLIR Learn`: 深入理解机器学习编译器的新里程

探索TVM MLIR Learn: 深入理解机器学习编译器的新里程 去发现同类优质开源项目:https://gitcode.com/ 在这篇文章中,我们将一起剖析一个名为的开源项目,这是一个基于TVM和MLIR框架的学习资源库,旨在帮助开发者更好地理解和应用这些先进的机器学习编译技术。 项目简介 TVM MLIR Learn是一个实践教程集合,它结合了TVM——一个强大的深度学习优化编译栈,以及M...

gitblog_00012的博客 635

AI编译器学习路线:从LLVM到MLIR的硬核实践指南

从高级语言到机器指令的翻译过程,一直是计算机系统性能的核心瓶颈。编译器通过中间表示与优化Pass,将源码逐步转换为高效可执行代码。随着深度学习模型规模激增,传统编译器难以应对算子融合、内存布局等张量级优化需求,AI编译器应运而生。它继承LLVM等经典基础设施,并扩展MLIR等新一代中间层,帮助开发者在GPU等异构硬件上榨取极致算力。大模型训练推理的性能调优、芯片工具链的快速适配,都离不开AI编译器这一关键角色。围绕LLVM、TVM、MLIR等主流框架,一条从基础理论到项目实战的学习路径正在成为AI Infr

weixin_33910385的博客 414

面向ASIC设备的编译器框架:TVM or MLIR?

目前TVM和MLIR都没有完全支持定制DSA的设计、上层编译的成熟路线,也就是最终选型的结果对实际工程开发的影响不会很大,都需要开发者/团队深度定制大量代码。...

csdndevpress0035的博客 1189

基于Buddy-MLIR的DeepSeekR1模型编译与优化实战

在AI模型部署领域,编译器技术是实现算法到硬件高效执行的关键桥梁。MLIR(多级中间表示)作为下一代编译器基础设施,通过分层抽象和渐进式Lowering机制,将高级框架算子逐步转换为底层硬件指令,解决了传统编译器在AI领域面临的碎片化问题。其核心价值在于提供了统一的中间表示和优化管道,使得跨硬件平台的性能调优成为可能。在工程实践中,开发者可以利用MLIR进行循环融合、平铺、向量化等高级优化,显著提升计算密集型和内存密集型任务在CPU、GPU等硬件上的执行效率。本文以DeepSeekR1大语言模型为例,详细展

weixin_33725515的博客 446

MLIR:统一编译生态的“方言”革命

MLIR(Multi-Level Intermediate Representation)作为一项革命性的编译器技术,旨在解决AI与异构计算领域中间表示(IR)碎片化的核心痛点。它通过创新的“方言”机制,为不同框架和硬件提供统一的抽象与转换基础设施,使得从TensorFlow、PyTorch等高级模型到LLVM及自定义硬件的编译流程得以高效串联与优化,大幅提升了编译器开发与部署效率。

weixin_29209801的博客 292

AI编译器TVM与MLIR框架分析

图5 常见ai compiler设计架构

四哥的专栏 684

AI推理框架与编译栈:模型如何高效映射到真实硬件

AI推理不是简单加载模型,而是模型表达(ONNX/PyTorch图)向物理硬件(ARM NEON、NPU、GPU)的系统性映射过程。其核心在于推理框架(如ONNX Runtime、TVM Runtime)作为硬件抽象层,协同AI编译栈(TVM/MLIR/XLA)完成语义等价降维、算子融合与内存契约重写。这一过程直接决定边缘设备上的能效比、实时性与稳定性——例如RK3566部署YOLOv5s时,推理框架EP绑定与TVM编译参数(如-mcpu=armv8-a+simd)的精准匹配,可使延迟从210ms降至12m

weixin_29050513的博客 367

AI编译器入门路线:从LLVM到TVM/MLIR的完整实践指南

编译原理与硬件体系结构是理解现代计算系统的基石,而AI编译器正是这两者的深度融合与工程化延伸。当深度学习模型需要部署到GPU、NPU等异构硬件时,传统编译器难以应对计算图优化与访存瓶颈,于是以TVM、MLIR为代表的AI编译器应运而生。它们将模型描述自动转换为硬件高效代码,核心在于IR设计、Pass优化与代码生成。从LLVM的IR基础,到TVM的调度分离,再到MLIR的多级Dialect,掌握这些技术不仅能提升算子实现效率,也是从事深度学习框架、系统优化方向的关键能力。面对复杂的源码与碎片化的资料,一条循序

weixin_34189116的博客 402

OpenCV视频防抖算法实现与优化指南

本文详细解析了如何使用OpenCV实现视频防抖算法。通过特征点检测与光流跟踪估算帧间运动,利用滑动平均平滑运动轨迹,并应用仿射变换重塑视频帧。文章提供了完整的代码实现、参数调优指南及黑边处理等优化技巧,帮助开发者高效处理手持拍摄等场景下的视频抖动问题。

weixin_29062823的博客 339

图解转置卷积原理

声明:本文大部分搬运自【机器学习】详解 转置卷积 (Transpose Convolution) 感谢博主花与人间事同,本人只是在博主原创文章上做补充以及添加一些自己的理解。 1 转置卷积的背景 通常,对图像进行多次卷积运算后,特征图的尺寸会不断缩小。而对于某些特定任务 (如图像分割和图像生成等),需将图像恢复到原尺寸再操作。这个将图像由小分辨率映射到大分辨率的尺寸恢复操作,称为上采样 (Upsample),如下图所示: 上采样方法有很多,详见【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值

laonafahaodange的博客 5685

AI 编译器入门:TVM 与 MLIR 的原理、差异与实战

AI 编译器的本质,是在「模型语义」与「硬件执行」之间建立可自动化的映射关系。TVM 用计算与调度分离、自动调优和端到端链路,解决了「一份模型跑多硬件」的工程问题;MLIR 用方言体系和渐进式降级,解决了「编译器如何可扩展、可复用」的架构问题。两者不是替代关系,而是不同层次的答案。理解 TVM,你会知道一个可用的 AI 编译器长什么样;理解 MLIR,你会知道如何把它拆解、重组、扩展到新的领域。把这两条线都走一遍,再回头看任何一个推理框架或芯片工具链,都会清晰很多。

Maxwell_Newton的博客 376

【Collibra 驱动 IPD 数据血缘治理】:三层图谱分层展示体系与全链路追踪的技术业务实践

(应用级/数据级/字段级)是理解复杂数据流动的核心手段。其价值不仅体现在可视化的直观性,更在于通过。技术保障血缘不可篡改性,进一步提升IPD数据治理的可靠性。,解决了跨层级血缘分析的性能与可用性矛盾。数据血缘图谱要素定义(字节跳动/腾讯云/信安标委)实现对IPD数据的精准追踪,而数据血缘图谱的。分层交互设计标准(智慧城市数据中台规范)Collibra技术文档(2024)字段级血缘的挑战与解决路径。自动优化血缘路径,并深化。字段级血缘技术实现方案。Collibra通过。图数据库性能优化原理。

百态·数智思维 | 聚焦大数据、量化与未来AI 1244

深度学习编译器中的TVM 与MLR

TVM和MLIR是深度学习编译领域的两种关键技术,定位不同但互补。TVM是端到端的AI模型编译器,专注于跨平台高效部署,提供开箱即用的解决方案,适合快速部署模型到各类硬件。MLIR则是编译器基础设施框架,通过模块化方言系统支持灵活构建定制编译器,适合为新型硬件开发完整软件栈。TVM优势在于成熟易用,而MLIR强在扩展性和自由度。选择取决于具体需求:模型部署选TVM,定制编译器开发选MLIR。

追赶时代的博客 530

从零构建SOEM主站:基于STM32的EtherCAT伺服控制实战指南

本文详细介绍了如何从零构建基于STM32的SOEM主站系统,实现EtherCAT伺服电机的高精度控制。通过硬件选型、SOEM协议栈移植、PDO/SDO配置优化等实战步骤,帮助开发者掌握工业自动化中的关键运动控制技术,特别适用于23位编码器伺服电机的应用场景。

weixin_29186249的博客 666

MindIE与vLLM-Ascend性能对决:Qwen3在昇腾910B上的推理效率实测

本文深度对比了昇腾910B平台上两大推理框架MindIE与vLLM-Ascend的性能表现。通过实测Qwen3系列模型,详细分析了二者在单卡、多卡场景下的推理效率、扩展性及生产环境适用性,为AI算力基础设施选型提供关键参考。

weixin_29214335的博客 1184

ai算子是什么_AI编译优化--总纲

作者:PAI团队随着AI模型结构的快速演化,底层计算硬件的层出不穷,用户使用习惯的推陈出新,单纯基于手工优化来解决AI模型的性能和效率问题越来越容易出现瓶颈。为了应对这些问题,AI编译优化技术已经成为一个获得广泛关注的技术方向。这两年来,这个领域也异常地活跃,包括老牌一些的TensorFlow XLA、TVM、Tensor Comprehension、Glow,以及最近呼声很高的MLIR,能够看到...

weixin_39731845的博客 2739

2026年摩尔线程数字IC面试试卷带答案

本文摘要: 该试卷为数字IC设计笔试,满分120分,时长90分钟,包含单选题、波形分析题、多选题和代码设计题。重点考察时序约束(如set_false_path)、建立/保持时间、逻辑化简、复位机制、AXI协议、半导体工艺、状态机、GPU架构等核心知识点。多选题涉及异步FIFO设计、Verilog综合、亚稳态处理、C++关键字和低功耗技术。代码题要求实现单比特信号去毛刺电路,需稳定4个时钟周期才输出。试题解析详细,标注了企业面试高频考点,如摩尔线程自研的MUSA架构和花港GPU架构特点。整体内容专业性强,覆盖

Open 98

LLVM 是 AI 编译器的基础框架(MLIR/TVM/XLA 均基于或依赖 LLVM),核心价值是提供 **统一的中间表示(LLVM IR)

#### 1. LLVM:AI 编译器的“底层基建” LLVM 是 AI 编译器的基础框架(MLIR/TVM/XLA 均基于或依赖 LLVM),核心价值是提供 **统一的中间表示(LLVM IR)、模块化的优化 Pass、跨平台目标代码生成**。

[Blog][Domain] programb.blog.youkuaiyun.com 766

在ubuntu20.04中安装MATLAB时常见问题及解决方法

   如果你刚装完ubuntu20.04,这时你想要安装MATLAB2021A,在输入命令./install进行安装时,可能会报以下错误:    terminate called after throwing an instance of ‘JailContainerException’ what(): Error: 88: No JRE version parsed from/media/jzx/MATHWORKS_R2021A/sys /java/jre/glnxa64/jre/release   

慕羽★的博客 1万+

rk3576 适配以太网(百兆)

百兆以太网,也常被称为快速以太网,是一种在1990年代中期推出的计算机网络技术标准。它相当于把当时主流的10兆以太网速度提升了10倍,最高能提供 100 Mbps 的传输速率,让文件共享、视频传输等网络应用变得流畅许多。它在数据链路层面完全保留了传统以太网的帧格式和MAC机制,这意味着现有的网络软件可以无缝对接,用户从10兆网络升级到百兆网络时,通常只需要更换网卡和集线器/交换机即可,非常方便。 在rk3576平台上,原生以太网接口支持百兆、千兆,还有pcie转换的2.5G。

weixin_35723192的博客 203

【infra之路】AI 编译器学习笔记(十三):AI 编译器全景——TVM、XLA、IREE 与其他

前面十二篇都在 MLIR 和底层细节里打转。这一篇抬头看一眼整个领域:主流的 AI 编译器各自在哪一层、核心思想是什么、彼此有什么区别。重点讲 TVM,最后整理了两个常被问到的问题。

sweet_ran的博客 296

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

AI编译优化--总纲

随着AI模型结构的快速演化,底层计算硬件的层出不穷,用户使用习惯的推陈出新,单纯基于手工优化来解决AI模型的性能和效率问题越来越容易出现瓶颈。为了应对这些问题,AI编译优化技术已经成为一个获得广泛关注的技术方向。这两年来,这个领域也异常地活跃,包括老牌一些的、、、,以及最近呼声很高的,能够看到不同的公司、社区在这个领域进行着大量的探索和推进。本篇会先做一下整体介绍以及行业现状的分析。

bbbeoy的专栏 1206

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

AI编译器学习路线:从零基础到进阶实战

编译器是连接高级语言与硬件的桥梁,而AI编译器进一步将深度学习模型自动转换为高效代码。其核心原理基于多层中间表示(IR),通过Pass实现图优化,配合Schedule控制算子实现策略。算子融合、循环变换等技术能大幅减少访存开销,提升推理性能。在大模型部署和异构芯片适配场景中,AI编译器已成为基础设施的关键环节。理解其工作流程,从计算图到TIR再到代码生成,是进行性能优化的基础。以下梳理一条从编译原理基础到TVM/MLIR实操的完整学习路径,并给出项目实战建议,帮助开发者快速上手这一高价值技术领域。

weixin_33754065的博客 320

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

AI编译器与MLIR技术解析:从原理到实践

AI编译器是深度学习模型部署中的关键技术,通过多级中间表示(IR)和自动优化技术,将高级模型描述转换为针对特定硬件优化的低级代码。其核心原理包括计算图的拓扑变换和代数优化,确保在数学上保持语义等价的同时提升执行效率。MLIR(Multi-Level Intermediate Representation)作为编译器领域的创新技术,允许开发者定义领域特定的方言(Dialect),支持从线性代数到量子计算等多种场景。TVM(Tensor Virtual Machine)则通过自动调优系统(如AutoTVM)实现

weixin_33806859的博客 306
上一篇: Rust 错误处理:从 Result 到 thiserror,生产级方案怎么选?
下一篇: Rust AI 生态扫描:从 tract 到 candle,本地推理库该怎么选?
第一程序员
博客等级 码龄1年 1万+粉丝 1807原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值