TVM Explorer Infrastructure 简介#
利用 TVM Explorer Infrastructure 增强 TVM 调试能力。我们将提到从 TVM Explorer 中可以获得一些可视化效果,这是基于此 RFC 的另一个 Web GUI 项目。
这个 RFC 的目标是扩展在不同 IRs 之间追踪源代码信息的能力,以用于调试。以下三个特性将从这个变化中受益:
将 ML 前端 IR 的图层名称映射到 Relay IR。
在传递优化过程中记录源表达式到转换后的表达式。
在原语做出更改后,队列调度的快照
这些变更为用户提供了 CLI 文本格式的 IR 清晰的回溯路径。此外,与正在进行的项目 TVM Explorer 配对,一个色彩丰富且方便的 GUI 可以更好地提升用户体验。我们将在后面的部分用例子来展示 TVM Explorer 的使用案例。
我们的目标是通过增强和创建携带源信息的功能,来简化调试过程。TVM 执行了大量的变换,以优化和部署 ML 前端 IR 到目标设备。然而,目前记录 IRs 之间源信息的模块并没有被完全使用。这使得用户难以追踪转换后 IR 的源头。通常需要对源代码进行调查,以理解变换的细节。
我们提供以下增强措施,通过记录 IR 和算子实现的调度之间的源信息,减轻用户的负担:
前端跨度填充器(
Frontend span filler
):在前端变换过程中将图层名称填充到 Relay IR 中。传递源信息构建器(
Pass source information builder
):从Span
和SIBuilder
构建SequentialSpan
,以处理 Relay IR 和 TIR 的源信息。调度/阶段可视化增强(
Schedule/Stage visualization enhancement
):在常规构建流程中,记录和应用原语的算子调度快照。
在这些修改之后,用户可以通过一眼或者通过调试器简单地获取源信息。
最后,受到 Compiler Explorer 21 的启发,我们为 TVM 构建了 Web-GUI,TVM Explorer。基于上述基础设施,TVM Explorer 在比较 IRs 或分析调度时提供了更好的用户体验(TVM Explorer 的代码库维护在另一个 git 仓库中,不包括在这个 RFC 中)。