<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>机器学习编译 on 理塘丁真</title><link>https://www.ccyun.cloud/tags/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E7%BC%96%E8%AF%91/</link><description>Recent content in 机器学习编译 on 理塘丁真</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Thu, 21 May 2026 00:00:00 +0800</lastBuildDate><atom:link href="https://www.ccyun.cloud/tags/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E7%BC%96%E8%AF%91/index.xml" rel="self" type="application/rss+xml"/><item><title>陈天奇 MLC 课程第一章概述：机器学习编译到底在做什么</title><link>https://www.ccyun.cloud/post/mlc-course-overview/</link><pubDate>Thu, 21 May 2026 00:00:00 +0800</pubDate><guid>https://www.ccyun.cloud/post/mlc-course-overview/</guid><description>&lt;p&gt;最近开始看陈天奇老师团队的 MLC 课程。第一章主要回答一个问题：机器学习编译到底在做什么，为什么它会成为机器学习系统里绕不开的一层。&lt;/p&gt;
&lt;p&gt;这篇先整理课程导论里的核心概念，后面再逐章补张量程序抽象、自动程序优化、GPU 加速和计算图优化这些内容。&lt;/p&gt;
&lt;h2 id="从开发形式到部署形式"&gt;从开发形式到部署形式
&lt;/h2&gt;&lt;p&gt;我们平时训练或调试模型时，通常面对的是“开发形式”：比如用 PyTorch、TensorFlow 或 JAX 写出来的模型代码，以及模型训练得到的权重。这个形式适合研究、调试和快速迭代，但不一定适合直接放到手机、浏览器、车载设备、云端服务或专用芯片上运行。&lt;/p&gt;
&lt;p&gt;真正上线时，需要的是“部署形式”：它不仅包括模型计算本身，还包括运行所需的库、内存管理、硬件调用、应用接口，以及和具体系统环境配套的执行方式。&lt;/p&gt;
&lt;p&gt;机器学习编译做的事情，就是把开发阶段的模型，通过一系列变换和优化，转换成更适合目标环境运行的部署形态。&lt;/p&gt;
&lt;h2 id="为什么叫编译"&gt;为什么叫“编译”
&lt;/h2&gt;&lt;p&gt;传统编译器会把高级语言代码转换成机器可以执行的程序。机器学习编译也有类似的味道：输入是高层模型描述，输出是可以部署和执行的模型程序或运行库。&lt;/p&gt;
&lt;p&gt;不过 MLC 和传统编译并不完全一样。它不一定每次都生成底层机器码，有时只是把模型转换成对已有高性能库的调用；有时会做算子融合、图优化、内存优化；有时还会针对 GPU、NPU、TensorCore 等硬件特性生成更合适的实现。&lt;/p&gt;
&lt;p&gt;所以 MLC 更像是一套面向机器学习部署的系统方法：在模型表达、计算图、张量程序和硬件实现之间不断做抽象转换。&lt;/p&gt;
&lt;h2 id="机器学习编译的三个目标"&gt;机器学习编译的三个目标
&lt;/h2&gt;&lt;p&gt;课程里把 MLC 的目标概括成三类。&lt;/p&gt;
&lt;p&gt;第一是集成与最小化依赖。部署一个模型时，我们只想带上真正需要的计算和运行组件，而不是把整个训练框架都塞进应用里。这样可以减小体积，也能让模型更容易部署到资源受限的设备上。&lt;/p&gt;
&lt;p&gt;第二是利用硬件加速。不同环境有不同的硬件能力：CPU、GPU、移动端 NPU、云端加速器，甚至专用 AI 芯片。MLC 需要把模型计算映射到这些硬件擅长的执行方式上，例如调用原生加速库，或者生成能利用特殊指令的底层程序。&lt;/p&gt;
&lt;p&gt;第三是通用优化。同一个模型可以有多种等价执行方式，但不同写法的性能差距可能很大。MLC 会通过计算图优化、算子融合、内存复用、调度优化等方式，让模型跑得更快，占用更少资源。&lt;/p&gt;
&lt;p&gt;这三个目标之间不是完全分开的。比如算子融合既可以减少依赖和运行开销，也可能带来更好的硬件利用率。&lt;/p&gt;
&lt;h2 id="张量和张量函数"&gt;张量和张量函数
&lt;/h2&gt;&lt;p&gt;理解 MLC 的关键，是先把模型执行看成张量之间的计算。&lt;/p&gt;
&lt;p&gt;张量是模型中的输入、输出和中间结果，本质上是多维数组。图片、文本特征、隐藏层状态、权重矩阵，最后都可以落到张量这个统一表示上。&lt;/p&gt;
&lt;p&gt;张量函数则描述张量之间如何计算。一个线性层、一个 ReLU、一个 Softmax 都可以看成张量函数；多个算子组合起来的一段计算，甚至整个模型，也可以看成更大的张量函数。&lt;/p&gt;
&lt;p&gt;MLC 做优化时，经常不是只盯着单个算子，而是看一组张量函数之间能不能被重写、融合或映射到更高效的实现。&lt;/p&gt;
&lt;p&gt;&lt;img alt="机器学习编译过程中的张量函数变换" class="gallery-image" data-flex-basis="548px" data-flex-grow="228" height="337" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://www.ccyun.cloud/post/mlc-course-overview/image.png" width="770"&gt;&lt;/p&gt;
&lt;p&gt;上图展示了一个典型例子：开发阶段的模型里，&lt;code&gt;linear&lt;/code&gt; 和 &lt;code&gt;relu&lt;/code&gt; 是两个独立计算；部署时可以把它们融合成一个 &lt;code&gt;linear_relu&lt;/code&gt;。这样可以减少中间张量的读写，也给后端实现留下更多优化空间。&lt;/p&gt;
&lt;p&gt;这就是我理解里的“图级算子融合”：它不是改变模型数学意义，而是在保持结果等价的前提下，换一种更适合执行的计算组织方式。&lt;/p&gt;
&lt;h2 id="抽象与实现"&gt;抽象与实现
&lt;/h2&gt;&lt;p&gt;第一章里很重要的一句话是：抽象描述“做什么”，实现描述“怎么做”。&lt;/p&gt;
&lt;p&gt;在机器学习系统里，同一个张量函数可以有很多层表示：它可以是计算图中的一个节点，也可以是循环嵌套，也可以是调用某个库函数，还可以是生成出来的一段 GPU kernel。&lt;/p&gt;
&lt;p&gt;MLC 的核心工作，就是在这些抽象层之间做转换。高层抽象方便表达模型，低层实现负责贴近硬件。编译器要做的是在不改变语义的前提下，找到更高效、更适合部署环境的实现。&lt;/p&gt;
&lt;p&gt;这也是为什么机器学习编译不只是“让模型快一点”。它实际上连接了模型、框架、运行时、硬件和应用部署。&lt;/p&gt;
&lt;h2 id="为什么要学-mlc"&gt;为什么要学 MLC
&lt;/h2&gt;&lt;p&gt;对机器学习工程师来说，MLC 能帮助我们理解模型从训练代码走向生产环境的过程。当模型部署变慢、占内存过大，或者目标平台不被主流框架很好支持时，只会调模型结构是不够的，还需要理解底层执行链路。&lt;/p&gt;
&lt;p&gt;对算法同学来说，MLC 可以解释为什么同一个模型在不同平台上性能差别很大，也能帮助我们判断一个模型结构是否适合真实部署。&lt;/p&gt;
&lt;p&gt;对硬件和系统方向来说，MLC 提供了一套把新硬件能力接入机器学习生态的方法。模型越来越大，硬件越来越多样，靠手写适配很难长期维护，编译和自动优化会越来越重要。&lt;/p&gt;
&lt;h2 id="小结"&gt;小结
&lt;/h2&gt;&lt;p&gt;MLC 第一章可以概括成一句话：机器学习编译研究的是如何把开发阶段的机器学习模型，转换成适合具体环境部署和高效执行的形式。&lt;/p&gt;
&lt;p&gt;它关心的不只是模型本身，还包括依赖裁剪、硬件加速、计算图优化、张量程序变换和运行时集成。后面的课程，其实就是沿着这些问题继续往下拆。&lt;/p&gt;
&lt;p&gt;参考资料：&lt;a class="link" href="https://book-zh.mlc.ai/chapter_introduction/index.html" target="_blank" rel="noopener"
 &gt;《机器学习编译》中文课程导论&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>