Page 110 - 《软件学报》2025年第7期
P. 110
沈庆超 等: 深度学习编译器缺陷实证研究: 现状与演化分析 3031
试预言, 并检测到 9 个结果错误类型的缺陷. MT-DLComp [12] 针对 DL 模型设计了等价的测试输入实现对 DL 编译
器的测试, 并检测到 4 个此类缺陷. 这些测试预言能够捕获一定量的引起模型预测结果发生改变的缺陷. 然而, 这
些测试预言无法检测到一些不会导致预测结果错误的缺陷. 因此, 设计一些细粒度的测试预言, 比如直接对比 IR
的结果是否正确可以暴露出更多此类缺陷.
发现 5. 崩溃和结果错误是 DL 编译器中两类最常见缺陷症状. 结果错误类型的缺陷难以检测, 且为此类缺陷
设计高质量的测试预言依然存在挑战.
由图 4 可知, 挂起和性能问题的症状占比很低, 和已有研究 [8] 对比发现, 这两种症状的缺陷所占用的比例提高
了 1.56 倍上. 性能缺陷具有隐蔽性和缺少合适的测试预言, 导致目前并没有针对 DL 编译器性能缺陷设计的测试
方法. 由于提升模型性能为 DL 编译器的核心功能, 所以此类缺陷具有较大的危害性. 鉴于此类缺陷数量的快速增
多, 因此, 设计一种针对 DL 编译器性能缺陷的检测方法的重要性也逐渐提高.
发现 6. 在 DL 编译器中, 挂起和性能问题虽占比不高, 但增长迅速, 数量已增长了 1.56 倍. 因此, 设计针对此
类缺陷的检测方法变得愈发重要.
4.3 RQ3: 位置
表 2 中展现了不同时期 DL 编译器在各阶段缺陷数量占比. 其中旧数据为已有工作 [8] 中使用的 603 个早期
DL 编译器缺陷数据. 从表中可以发现, 和传统编译器缺陷分布不同, DL 编译器在 3 个阶段均较多的缺陷占比. 与
传统编译器前端不同, DL 编译器需要处理来自各种 DL 框架的模型, 并将每个 DL 框架中支持的 DL 算子转换成
功能等价的 High-level IR. 由于 DL 框架中的算子也在快速迭代和发展, DL 编译器需要及时且准确地适配 DL 框
架中各种 DL 算子的修改逻辑. 不及时或不正确的算子转换逻辑更新以适配 DL 框架最新的算子实现将会导致
DL 编译器前端出现新的缺陷. 需要注意的是, 由于 AKG 编译器缺少模型加载阶段, 其模型加载功能在另一前置
系统 MindSpore 中完成. 因此, AKG 并没有模型加载阶段.
表 2 不同 DL 编译器各阶段缺陷数量占比 (%)
DL编译器 数据来源 模型加载 High-level IR转换 Low-level IR转换
旧数据 25.50 38.26 36.24
TVM
本工作 14.65 30.81 54.55
旧数据 27.34 35.16 37.50
Glow
本工作 44.30 26.58 29.11
nGraph 旧数据 4.27 73.50 22.22
AKG 本工作 - 28.74 71.26
旧数据 21.36 45.12 33.52
合计
本工作 16.55 29.89 53.56
从整体上来看, Low-level IR 转换阶段的缺陷超过 High-level IR 转换阶段, 然而不同 DL 编译器之间缺陷位
置的分布有着显著的差异, 因此, 需要对每个编译器分别研究. 一方面, 本文研究的 AKG 的 3 个核心功能: 规范
化、自动调度和后端优化中的后两个均是围绕 Low-level IR 设计并实现的. 另一方面, 已有研究工作 [8] 中的
nGraph 则是围绕计算图优化 (即 High-level IR 优化) 进行设计实现的. 对于 TVM 来说, 相较于模型加载阶段和
High-level IR 转换阶段, Low-level IR 转换阶段的缺陷比例从之前的 36.24% 升至 54.55%. 其主要原因是 TVM 的
Low-level IR 转换阶段是一个极其复杂的任务. 同时, 相较于 High-level IR 转换阶段通用的图级别优化算法, Low-
level IR 转换阶段的优化任务需要结合特定的硬件特性, 从而需要不断地修改优化代码以提升底层算子原语在硬
件上的执行效率, 复杂的优化任务和适配各种硬件特性是导致 Low-level IR 转换阶段缺陷比例不断上升的一个
主要原因.
发现 7. DL 编译器缺陷分布紧密关联于其架构设计. 其中, TVM 在 Low-level IR 转换阶段的缺陷比例快速上
升, 归因于该阶段频繁的代码变更所引入的新缺陷.

