为 ARM CPU 自动调度神经网络
备注
单击 此处 下载完整的示例代码
作者:Thierry Moreau, Lianmin Zheng, Chengfan Jia
针对特定设备和工作负载的自动调优对于获得最佳性能至关重要。本文介绍如何通过 RPC 使用 auto-scheduler 为 ARM CPU 调优整个神经网络。
为了自动调优神经网络,将网络划分为小的子图并独立进行调优。每个子图被视为一个搜索任务。任务调度器对时间进行切片,并动态地为这些任务分配时间资源,预测每个任务对端到端执行时间的影响,并优先考虑最能减少执行时间的任务。
对于每个子图,使用 tvm/python/topi
中的计算声明来获取张量表达式形式的计算 DAG。然后使用 auto-scheduler 来构建这个 DAG 的搜索空间,并搜索合适的调度(底层优化)。
与基于 template 的 AutoTVM(依赖手动 template 来定义搜索空间的) 不同,auto-scheduler 不需要任何调度 template。换言之,auto-scheduler 只使用 tvm/python/topi
中的计算声明,不使用现有的调度 template。
注意,本教程无法在 Windows 或最新版本的 macOS 上运行。如需运行 ,请将本教程的主体放在 if __name__ == "__main__":
代码块中。
import numpy as np
import os
import tvm
from tvm import relay, auto_scheduler
from tvm.relay import data_dep_optimization as ddo
import tvm.relay.testing
from tvm.contrib import graph_executor
from tvm.contrib.utils import tempdir