10 个不同结构范式的模型,每个给出 ONNX 原始图 与 TPU-MLIR top 图层 两种视图, 配结构统计与读图要点。选型覆盖:链式 CNN、残差、Inception、Fire、深度可分离、分组卷积、 MBConv、目标检测、Transformer 编码器、LLM 解码层。
节点 = 算子,箭头 = 张量流向。ONNX 图是模型导出时的原始算子(权重隐藏);
MLIR 图是 tpu-mlir 把 ONNX 导入为 top 方言后的样子(权重画成 top.Weight 节点)。
两边节点名(loc)一致,可以逐节点对照。
导入时会做常量折叠与算子融合:ReLU 融进 Conv(do_relu)、BN 融成 Scale、
SiLU 从 Sigmoid+Mul 融合成单个算子、动态 Shape 运算被静态化。所以 MLIR 图通常更「短」,也更接近硬件视角。
深度 = 最长路径长度(串行程度);分支点 = 扇出 ≥2 的节点; 汇合点 = 扇入 ≥2 的节点(Add/Concat/Sum)。链式网络三者是「深、0、0」, 残差/多分支网络则会出现大量分叉-汇合回路。
| 模型 | 范式 | ONNX 节点 | 深度 | 分支点 | 汇合点 | 分组卷积 | 结构签名 |
|---|---|---|---|---|---|---|---|
| VGG-19 | 纯卷积链 | 47 | 47 | 0 | 0 | 0 | 无分叉的长链 |
| ResNet-50 | 残差 | 174 | 170 | 16 | 16 | 0 | Add 回路 ×16 |
| GoogLeNet | Inception | 143 | 62 | 9 | 9 | 0 | Concat 汇合 ×9 |
| SqueezeNet | Fire | 66 | 50 | 8 | 8 | 0 | Concat 汇合 ×8 |
| MobileNetV2 | Depthwise+残差 | 105 | 103 | 11 | 12 | 17 | 1×1→DW3×3→1×1 |
| ShuffleNet | 分组卷积 | 203 | 200 | 16 | 16 | 48 | Reshape/Transpose 重排 |
| EfficientNet-Lite4 | MBConv | 188 | 188 | 23 | 23 | 30 | DW 卷积密集堆叠 |
| YOLOv5s | 检测 | 392 | 190 | 123 | 135 | 0 | Concat ×41 + 3 尺度输出 |
| BERT-SQuAD | Transformer | 1167 | 681 | 145 | 301 | 0 | MatMul/Softmax + 残差 |
| Qwen3.5 block | LLM 解码层 | 73* | — | 11* | 24* | 0 | RMSNorm/RoPE/SiLU |
* Qwen 行为 MLIR 图统计(该层无 ONNX);“深度”依赖 ONNX 拓扑,故留空。
do_relu=true),所以 MLIR 图里看不到 Relu。top.Weight 节点(38 个),ONNX 图默认隐藏权重。Scale(18 个),Conv 仍是 53 个,Add 16 个原样保留。group = 输入通道数),每个倒残差块是「1×1 扩张 → 3×3 depthwise → 1×1 投影」。1×3×H×W×85(框 + 置信度 + 80 类)。top.SiLU —— 这是「同模型、不同层」最直观的例子。top.Reduce。top.RMSNorm、2 个 top.Rope、7 个 A16MatMul 以及融合后的 FAttention 算子。ChunkGatedDeltaRule),当前 mlir2graph 版本未注册该算子,因此这里选标准注意力的 block_3 展示;该层无对应 ONNX。