趋近智
深度学习 (deep learning)编译器中的自动化调度系统已从基于模板的方法发展到全自动生成方式。理解 AutoTVM 和 Ansor(也称为 AutoScheduler)之间的架构差异,对于设计定制编译器后端或优化新型硬件加速器的工程师来说是基础。尽管两个系统都旨在最大化张量吞吐量 (throughput),但它们在定义和搜索优化空间的方式上存在根本分歧。
AutoTVM 代表了 TVM 堆栈中第一代统计调优。它的架构基于这样一个前提:尽管循环变换(如瓦片大小或展开因子)的精确参数 (parameter)难以预测,但高效调度的普遍结构通常为人类专家所知。
在这种架构中,搜索空间并非从计算图自动生成。而是由领域专家定义一个调度模板。模板是一个使用 TVM 调度语言编写的 Python 函数,其中包含定义可调参数的特定“旋钮”或“轴”。
对于矩阵乘法操作 ,用户可能会编写一个定义循环顺序和内存范围的模板,但将瓦片因子保留为变量。
AutoTVM 架构包含三个在循环中交互的主要组件:
这种架构的局限在于模板本身。搜索空间仅限于模板作者允许的变化。如果最优优化策略包含模板中未包含的变换,例如特定形式的张量布局重写或复杂的融合模式,AutoTVM 无法找到它。
Ansor 旨在解决 AutoTVM 的可扩展性限制,它从基于模板的定义转向搜索空间生成。它消除了对人工编写模板的要求。相反,Ansor 分析计算的数学定义(通常是张量表达式形式),并自动构建一个大型的、全面的搜索空间。
Ansor 架构通过分层过程运行:
Ansor 中的搜索算法通常是演化策略。它维持一个有效调度种群,并应用变异(例如改变瓦片大小或交换循环顺序)来生成新候选。
以下图表对比了这两种架构的工作流程,突出了从手动模板定义到自动规则应用的转变。
AutoTVM 和 Ansor 流水线的对比。AutoTVM 依靠显式用户模板来定义优化范围,而 Ansor 则从计算定义中算法性地生成搜索空间。
两种架构都大量依赖统计成本模型来修剪搜索空间。在实际硬件上评估一个调度需要数秒或数毫秒,当搜索空间包含数十亿种可能性时,这太慢了。成本模型充当代理,以微秒级别预测调度的性能。
在 AutoTVM 中,成本模型的输入是从循环配置中提取的特征向量 (vector)(例如,循环范围、内存访问计数)。Ansor 通过使用更结构化的表示来改进这一点。它从低级中间表示(IR)本身提取特征,包含:
Ansor 通常采用梯度提升决策树(GBDT),如 XGBoost,作为其默认成本模型。系统分轮次运行。在每一轮中,搜索策略选择一批候选。这些候选在硬件上编译并测量,以获得真实的执行时间。这些数据用于重新训练成本模型,从而提高其对下一代候选的预测准确性。
尽管 Ansor 因其更广泛的搜索范围通常在标准深度学习 (deep learning)工作负载方面更胜一筹,但 AutoTVM 对于自动生成规则失效的专用领域特定逻辑操作仍有意义。
Ansor 的基于生成的方法解决了模板固有的“局部最优”问题。模板可能会强制执行特定的缓存层次结构映射,这对于 ResNet-50 来说是最佳的,但对于像 MobileNetV3 这样略有不同的拓扑来说却是次优的。通过动态生成草图,Ansor 使高级策略适应编译时存在的特定张量形状和硬件限制。
权衡点在于搜索时间。Ansor 通常需要更多时间才能收敛,因为它搜索的空间比受限模板大几个数量级。然而,迁移学习 (transfer learning)等技术,即使用在类似任务上训练的成本模型来预热搜索,可以显著减少这种开销。
理解这些架构使得开发者能够调试性能下降问题。如果一个运算符表现不佳,必须确定限制是源于搜索算法未能找到最佳调度(调优问题),还是搜索空间本身缺乏必要的变换(表示问题)。在 AutoTVM 中,解决方案是重写模板。在 Ansor 中,解决方案包括添加新的草图生成规则或定制的内在映射。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•