趋近智
深度学习 (deep learning)编译器作为多阶段的降低流程运行。与逐节点执行操作的解释器不同,编译器会分析整个程序结构以生成优化的可执行文件。该流程将神经网络 (neural network)层的高级描述转化为序列化的硬件指令流。这个过程连接了模型数学定义与底层芯片物理限制之间的语义差异。
此架构通常遵循三阶段设计:前端、中端(优化器)和后端(代码生成器)。虽然这与GCC或LLVM等传统编译器的结构相似,但每个阶段所用的抽象方法有根本区别。传统编译器优化标量指令和控制流,而AI编译器则优化张量代数和数据传输。
流程始于前端。其首要职责是从PyTorch、TensorFlow等训练框架或ONNX等交换格式中接收模型。在此阶段,模型以计算图的形式表示,其中节点代表逻辑操作符(如卷积、矩阵乘法),边代表张量的流动。
前端解析此图并将其转换为高级中间表示(IR)。这种IR是声明式的。它描述了需要计算的内容,而非如何计算。例如,一个矩阵乘法节点定义了输入形状和数据类型,但未指明循环顺序或内存分配策略。
导入过程中,编译器执行形状推断。它在图中传播维度信息,以确保有效性并为内存规划做准备。这是静态分析。如果形状是动态的(由运行时数据决定),编译器必须插入动态形状检查或生成多个内核版本。
深度学习 (deep learning)模型通过编译阶段的流程,从抽象的框架定义转变为具体的机器码。
模型进入高级IR后,编译器会进行图级优化。这种表示是粗粒度的,其基本单元是张量操作符。编译器会寻求代数简化和结构改进。
这里的一项主要优化是操作符融合。如果图中包含一个卷积操作后紧接着是ReLU激活,编译器会将它们融合成一个内核。这会降低内存带宽压力。计算结果无需写入全局内存再读回以进行ReLU操作,而是直接在寄存器或本地缓存中完成。
在高级IR中,此公式在降低过程中被视为单个复合函数。编译器还会执行常量折叠(预先计算静态权重 (weight)上的操作)和死代码消除(移除图中未使用的分支)。
从高级IR到低级IR的转变是AI编译中最明确的阶段。这常被称为“降低”。编译器将逻辑操作符转换为命令式循环嵌套。这是“调度”应用之处。
调度定义了计算如何执行。它规定了循环顺序、分块大小和线程绑定。矩阵乘法的逻辑定义 被转换为嵌套循环结构。
低级IR明确表示内存分配、指针运算和循环边界。它类似于简化的C代码或LLVM IR,但保留了用于多维循环的特定领域构造。此阶段的优化是硬件感知的,它们包括:
TVM等框架在此处采用关注点分离。算法(计算什么)与调度(如何计算)分开定义。这使得编译器可以尝试不同的调度方案,针对相同的数学运算以找到目标硬件最高效的方案。
最后阶段是后端。低级IR被转换为目标架构的源代码或直接机器码。
对于CPU,编译器通常将IR降低到LLVM IR。LLVM随后处理x86或ARM汇编的最终生成,并应用其自身的低级优化集,如寄存器分配和指令调度。
对于GPU,流程生成CUDA C代码或使用NVVM(NVIDIA的LLVM)等编译器后端生成PTX(并行线程执行)代码。此阶段处理优化循环到GPU线程层次结构的映射。它规定了线程块的组织方式以及数据如何加载到共享内存。
如果目标是专用加速器(如TPU或NPU),后端会生成特定的指令集架构(ISA)命令,以驱动矩阵乘法单元和直接内存访问(DMA)引擎。
此流程确保数据科学家的高级意图得以保留,同时,性能所需的低级细节被系统地注入和优化。生成的二进制文件是一个单一函数,它以极小的运行时开销执行整个神经网络 (neural network)(或其大型子图)。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•