趋近智
传统的编译器IR通常表达能力不足,难以充分捕捉机器学习计算图的高层语义。这些IR操作的层级过低,无法直接理解诸如卷积、批归一化或张量布局之类的构思。多层IR,特别是MLIR,通过允许使用方言来定制针对特定抽象范围的表示,展现出显著的优点。
MLIR的主要设计理念认为,没有单一的IR层级足以应对整个编译流程。它提供了一个定义多个方言的框架,每个方言都包含一组特定的操作、类型和属性,与某个特定范围或抽象层级关联。为表示高层ML图,方言是连接源框架(如TensorFlow、PyTorch、JAX)或标准化格式(如TOSA)与编译器内部表示的主要手段。
在此阶段常用的方言包括:
tf方言: 直接反映TensorFlow生态系统中的操作和类型。这使得TensorFlow GraphDef或SavedModel可以近乎一对一地导入到MLIR中,从而保留TensorFlow特有的语义和属性。tosa方言: 表示张量算子集架构,这是一组标准化的张量操作,旨在作为不同框架的通用目标。相比tf方言,它给出一种更与框架无关的表示。mhlo / stablehlo方言: 最初来自XLA(加速线性代数),这些方言在适合进行如操作合并等高层优化的层级上表示操作,常作为从特定框架方言导入后的中间步骤。首先选择使用哪种高层方言,通常取决于编译器的前端策略和源模型格式。重要的是,这些方言至少在初始阶段让编译器能够“理解”该ML框架的语言。
在一种高层方言中,每个MLIR操作对应于原始计算图中的一个节点。例如,TensorFlow中的2D卷积操作可能在tf方言中表示为tf.Conv2D操作,或在tosa方言中表示为tosa.conv2d操作。
重要的是,这些MLIR操作带有属性,捕获了高层配置细节,这些细节对于保留原始框架操作的精确语义非常必要。这些属性通常无法在像LLVM IR这样的低层IR中表示。例如:
SAME, VALID)NHWC, NCHW)考虑一个简化的TensorFlow Conv2D操作,其后跟BiasAdd和Relu激活:
一个涉及卷积、偏置加法和ReLU激活的TensorFlow图片段。
此序列在MLIR tf方言中可能表示如下(为清晰起见,语法已简化):
// %input, %filter, %bias 是代表张量的MLIR SSA值
%conv_output = "tf.Conv2D"(%input, %filter) {
strides = [1, 1, 1, 1],
padding = "SAME",
data_format = "NHWC",
dilations = [1, 1, 1, 1]
} : (tensor<1x28x28x1xf32>, tensor<5x5x1x32xf32>) -> tensor<1x28x28x32xf32>
%bias_add_output = "tf.BiasAdd"(%conv_output, %bias) {
data_format = "NHWC"
} : (tensor<1x28x28x32xf32>, tensor<32xf32>) -> tensor<1x28x28x32xf32>
%output = "tf.Relu"(%bias_add_output)
: (tensor<1x28x28x32xf32>) -> tensor<1x28x28x32xf32>
请注意,MLIR操作(tf.Conv2D、tf.BiasAdd、tf.Relu)如何直接反映TensorFlow的构思。属性(strides、padding、data_format)附加到相关操作上,保留重要元数据。张量类型包括形状和元素类型信息。
MLIR遵循静态单赋值(SSA)形式,这在现代编译器中很常见。在这种形式中,每个变量(表示为MLIR值)只定义一次,可以多次使用。这自然地表示计算图中固有的数据流依赖关系。
%conv_output、%bias_add_output、%output)。这种使用-定义链结构清晰地表示了原始计算图的有向边,使数据依赖关系清晰,并有助于分析和转换。MLIR表示,即使使用高层方言,本质上也是一种以SSA形式表示的数据流图。
在编译器中使用这些高层方言表示ML模型很重要,因为它允许优化在熟悉、特定范围的构思上进行,避免在降低层级时丢失重要信息。例如:
tf.Conv2D、tf.BiasAdd和tf.Relu等操作明确时,识别这种序列相对简单。低层IR会将这种序列隐藏在通用的内存访问和算术操作背后。data_format属性)可见时,这些决定最好做出。通过保留源图的高层语义,MLIR方言(如tf和tosa)提供了进行强大图级优化所需的抽象层。这种表示作为渐进式降低过程的入口点,其中这些高层操作将逐步转换并分解为低层方言,最终变为硬件特定指令,我们将在后续小节和章节中进行讨论。
这部分内容有帮助吗?
stablehlo方言相关。© 2026 ApX Machine Learning用心打造