【tvm官网教程】AutoTVM:基于模板的自动调优
目的
理解华为的autotvm,先理解原生的。
1. autotvm模块
TVM中的自动调优模块,auto-tuning包括:
- 调优空间定义API
- 高效自动调优器
- 调优结果和数据集支持
- 分布式度量以扩大调优范围
1.1 API get_config()
tvm.autotvm.task.task.get_config()
获得当前的autotvm配置对象,返回值类型ConfigSpace或者ConfigEntity。
1.2 class ConfigSpace
class tvm.autotvm.task.space.ConfigSpace
1.2.1 define_split()
define_split(name, axis, policy=‘factors’, **kwargs)
定义一个可调节旋钮,用于将指定轴split。
policy–调优器策略:
- factors 调优器将尝试所有可分解因子
- power2 调优器将尝试2的幂次方的因子
- verbose 调优器将尝试上述两个策略的并集
- candidate 调试器根据指定的候选集进行尝试
policy额外的参数还有:
- max_factor
- filter
- num_outputs: split之后轴的最大个数
- no_tail:bool值,是否仅将可除数作为因子
1.2.2 class SplitEntity
classtvm.autotvm.task.space.SplitEntity(size)
成员函数只有一个apply。
apply(sch, op, axis)
sch-调度, op-stage, axis-将被切分的轴。
1.2.3 define_knob()
define_knob(name, candidate)
用候选集定义一个可调节旋钮。
1.3 task
tvm.autotvm.task
任务是模板函数的可调组成。
调优器执行可调任务,并优化任务中所有模板功能的联合配置空间。
1.3.1 create
Task = tvm.autotvm.task.task.create(task_name, args, target, target_host=None)
创建一个调优任务,并初始化搜索空间。
## 前面定义搜索空间,这里创建搜索任务
N, H, W, CO, CI, KH, KW, strides, padding = 1, 7, 7, 512, 512, 3, 3, (1, 1), (1, 1)
task = autotvm.task.create("tutorial/conv2d_no_batching", args=(N, H, W, CO, CI, KH, KW