tvm.meta_schedule
包 tvm.meta_schedule。元调度基础设施。
类:
抽象的构建器接口。 |
|
成本模型。 |
|
抽象数据库接口。 |
|
|
从高级IR中提取的调优任务 |
从候选测量中提取特征,用于成本模型。 |
|
在测量结果可用后应用的规则。 |
|
Mutator 旨在通过变异跟踪来探索设计空间。 |
|
将后处理器应用于调度表的规则。 |
|
|
调优时间分析器。 |
抽象运行器接口 |
|
修改调度中区块的规则。 |
|
|
测量候选类。 |
搜索策略是生成测量候选的类。 |
|
抽象设计空间生成器接口。 |
|
抽象任务调度器接口。 |
|
|
调优上下文类旨在包含调优任务的所有资源。 |
功能:
|
调优一个TIR函数或TIR函数的IRModule。 |
|
调优任务列表。 |
|
一个装饰器,用于为TVM对象注册派生子类。 |
- class tvm.meta_schedule.Builder
抽象的构建器接口。
方法:
build(build_inputs)构建给定的输入。
create([kind])创建一个构建器。
- class tvm.meta_schedule.CostModel
成本模型。
方法:
load(path)从给定的文件位置加载成本模型。
save(path)将成本模型保存到指定文件位置。
update(context, candidates, results)根据运行结果更新成本模型。
predict(context, candidates)使用成本模型预测归一化分数。
create(kind, *args, **kwargs)创建一个成本模型。
- update(context: TuneContext, candidates: 列表[MeasureCandidate], results: 列表[RunnerResult]) None
根据运行结果更新成本模型。
- Parameters:
context (TuneContext,) – 调优上下文。
candidates (List[MeasureCandidate]) – 测量候选列表。
results (List[RunnerResult]) – 测量候选者的运行结果。
- predict(context: TuneContext, candidates: 列表[MeasureCandidate]) ndarray
使用成本模型预测标准化分数。
- Parameters:
context (TuneContext,) – 调优上下文。
candidates (List[MeasureCandidate]) – 测量候选列表。
- Returns:
result – 预测的归一化分数。
- Return type:
np.ndarray
- class tvm.meta_schedule.Database
抽象数据库接口。
方法:
has_workload(mod)检查数据库是否包含给定的工作负载。
commit_workload(mod)如果缺失,向数据库提交工作负载。
commit_tuning_record(record)将调优记录提交到数据库。
get_top_k(workload, top_k)从数据库中获取给定工作负载的前K个有效调优记录。
从数据库中获取所有调优记录。
query_tuning_record(mod, target, workload_name)从数据库中查询给定工作负载的最佳记录。
query_schedule(mod, target, workload_name)从数据库中查询给定工作负载的最佳调度方案。
query_ir_module(mod, target, workload_name)从数据库中查询给定工作负载的最佳IRModule。
dump_pruned(destination)将修剪后的数据库转储为JSONDatabase格式的文件。
query(mod, target, *[, workload_name, kind])查询数据库以获取给定工作负载的最佳优化结果。
current()获取当前作用域下的数据库。
create([kind])创建一个数据库。
- has_workload(mod: IRModule) bool
检查数据库是否包含给定的工作负载。 :param mod: 要搜索的IRModule。 :type mod: IRModule
- Returns:
result – 数据库是否包含给定的工作负载。
- Return type:
- commit_tuning_record(record: TuningRecord) None
将调优记录提交到数据库。
- Parameters:
record (TuningRecord) – 要添加的调优记录。
- get_all_tuning_records() 列表[TuningRecord]
从数据库中获取所有调优记录。
- Returns:
tuning_records – 数据库中的所有调优记录。
- Return type:
列表[调优记录]
- query_tuning_record(mod: IRModule, target: 目标, workload_name: str) TuningRecord | None
从数据库中查询给定工作负载的最佳记录。
- query_ir_module(mod: IRModule, target: 目标, workload_name: str) IRModule | None
从数据库中查询给定工作负载的最佳IRModule。
- dump_pruned(destination: 数据库) None
将修剪后的数据库转储为JSONDatabase格式的文件。
- Parameters:
destination (Database) – 要转储到的目标数据库。
- query(mod: IRModule, target: 目标, *, workload_name: str = 'main', kind: typing_extensions.Literal[schedule] | typing_extensions.Literal[record] | typing_extensions.Literal[ir_module] = 'schedule') 日程安排 | IRModule | TuningRecord
查询数据库以获取给定工作负载的最佳优化结果。
- static create(kind: typing_extensions.Literal[json, memory, union, ordered_union] | 可调用[[调度], bool] = 'json', *args, **kwargs) 数据库
创建一个数据库。
- Parameters:
kind (str = "json" | "memory" | "union" | "ordered_union" | Callable[[tvm.tir.Schedule],)
bool] – 要创建的数据库类型。支持以下类型: "json"、"memory"、"union"、"ordered_union"以及自定义调度函数。
- Returns:
database – 创建的数据库。
- Return type:
- class tvm.meta_schedule.ExtractedTask(task_name: str, mod: IRModule, target: 目标, dispatched: 列表[IRModule], weight: int)
从高级IR中提取的调优任务
- class tvm.meta_schedule.FeatureExtractor
从候选测量中提取特征,用于成本模型。
方法:
extract_from(context, candidates)从给定的测量候选中提取特征。
create(kind, *args, **kwargs)创建一个成本模型。
- extract_from(context: TuneContext, candidates: 列表[MeasureCandidate]) 列表[NDArray]
从给定的度量候选中提取特征。
- Parameters:
context (TuneContext) – 用于特征提取的调优上下文。
candidates (List[MeasureCandidate]) – 用于提取特征的测量候选对象列表。
- Returns:
features – 由tvm ndarray提取的特征。
- Return type:
列表[NDArray]
- static create(kind: typing_extensions.Literal[per - store - feature], *args, **kwargs) FeatureExtractor
创建一个成本模型。
- class tvm.meta_schedule.MeasureCallback
在测量结果可用后应用的规则。
方法:
apply(task_scheduler, task_id, ...)对给定的时间表应用一个测量回调。
create(kind)创建一个测量回调列表。
- apply(task_scheduler: TaskScheduler, task_id: int, measure_candidates: 列表[MeasureCandidate], builder_results: 列表[BuilderResult], runner_results: 列表[RunnerResult]) None
对给定的调度应用一个测量回调。
- Parameters:
task_scheduler (TaskScheduler) – 任务调度器。
task_id (int) – 任务ID。
measure_candidates (List[MeasureCandidate]) – 测量候选列表。
builder_results (List[BuilderResult]) – 通过构建测量候选方案得到的构建器结果列表。
runner_results (List[RunnerResult]) – 通过运行构建的测量候选者获得的运行器结果列表。
- static create(kind: typing_extensions.Literal[default]) 列表[MeasureCallback]
创建一个测量回调列表。
- class tvm.meta_schedule.Mutator
Mutator 旨在通过变异跟踪来探索设计空间。
方法:
apply(trace)对给定的轨迹应用变异函数。
clone()克隆变异器。
create(kind)创建一个默认变异器列表。
- class tvm.meta_schedule.Postproc
将后处理器应用于调度表的规则。
方法:
apply(sch)对给定的调度应用后处理器。
clone()克隆后处理器。
create(kind)创建默认后处理器的列表。
- class tvm.meta_schedule.Profiler
调优时间分析器。
方法:
get()在几秒钟内获取性能分析结果
table()以表格格式获取性能分析结果
current()获取当前的分析器。
timeit(name)对代码块进行计时
- class tvm.meta_schedule.Runner
抽象运行器接口
方法:
run(runner_inputs)运行构建产物并获取运行器未来对象。
create([kind])创建一个运行器。
- class tvm.meta_schedule.ScheduleRule
修改调度中区块的规则。
方法:
apply(sch, block)将调度规则应用于给定调度中的特定块。
clone()深度克隆调度规则。
create(kind)为给定类型创建调度规则列表。
- apply(sch: 日程安排, block: BlockRV) 列表[日程安排]
将调度规则应用于给定调度中的特定区块。
- Parameters:
sch (tvm.tir.Schedule) – 需要被修改的调度计划。
block (BlockRV) - 应用调度规则的具体块。
- Returns:
design_spaces – 应用调度规则生成的调度列表。
- Return type:
列表[tvm.tir.Schedule]
- clone() ScheduleRule
深度克隆调度规则。
- Returns:
cloned_rule – 克隆的调度规则。
- Return type:
- static create(kind: typing_extensions.Literal[llvm, cuda, cuda - tensorcore, hexagon]) 列表[ScheduleRule]
为给定类型创建调度规则列表。
- Parameters:
kind (Literal["llvm", "cuda", "cuda-tensorcore", "hexagon"]) – 调度规则的类型。
- Returns:
rules – 调度规则列表。
- Return type:
列表[ScheduleRule]
- class tvm.meta_schedule.MeasureCandidate(sch: 日程安排, args_info: 列表[ArgInfo])
测量候选类。
- Parameters:
sch (tvm.tir.Schedule) – 需要测量的调度计划。
args_info (List[ArgInfo]) – 参数信息。
- class tvm.meta_schedule.SearchStrategy
搜索策略是生成测量候选的类。
方法:
pre_tuning(max_trials, num_trials_per_iter, ...)搜索策略的预调优。
搜索策略的后调优。
从设计空间生成测量候选方案用于测量。
notify_runner_results(measure_candidates, ...)根据性能分析结果更新搜索策略。
clone()克隆搜索策略。
create([kind])创建一个搜索策略。
- pre_tuning(max_trials: int, num_trials_per_iter: int, design_spaces: 列表[日程安排], database: 数据库 | None = None, cost_model: 成本模型 | None = None) None
搜索策略的预调优。
- generate_measure_candidates() 列表[MeasureCandidate] | None
从设计空间生成测量候选方案用于测量。
- Returns:
measure_candidates – 生成的测量候选方案,如果已完成则为None。
- Return type:
可选[List[IRModule]]
- notify_runner_results(measure_candidates: 列表[MeasureCandidate], results: 列表[RunnerResult]) None
根据性能分析结果更新搜索策略。
- Parameters:
measure_candidates (List[MeasureCandidate]) – 待更新的测量候选列表。
results (List[RunnerResult]) – 来自运行器的性能分析结果。
- clone() SearchStrategy
克隆搜索策略。
- Returns:
cloned – 克隆的搜索策略。
- Return type:
- static create(kind: typing_extensions.Literal[evolutionary, replay - trace, replay - func] = 'evolutionary', *args, **kwargs) SearchStrategy
创建一个搜索策略。
- class tvm.meta_schedule.SpaceGenerator
抽象设计空间生成器接口。
方法:
根据给定模块生成设计空间。
clone()克隆设计空间生成器。
create([kind])创建一个设计空间生成器。
- generate_design_space(mod: IRModule) 列表[日程安排]
根据给定模块生成设计空间。
- Parameters:
mod (IRModule) – 用于设计空间生成的模块。
- Returns:
design_spaces – 生成的设计空间,即调度方案。
- Return type:
列表[tvm.tir.Schedule]
- clone() SpaceGenerator
克隆设计空间生成器。
- Returns:
cloned_sg – 克隆的设计空间生成器。
- Return type:
- static create(kind: typing_extensions.Literal[post - order - apply, union] | ~typing.Callable[[~tvm.tir.schedule.schedule.Schedule], None] | ~typing.Callable[[~tvm.tir.schedule.schedule.Schedule], ~tvm.tir.schedule.schedule.Schedule] | ~typing.Callable[[~tvm.tir.schedule.schedule.Schedule], ~typing.List[~tvm.tir.schedule.schedule.Schedule]] = 'post-order-apply', *args, **kwargs) SpaceGenerator
创建一个设计空间生成器。
- class tvm.meta_schedule.TaskScheduler
抽象任务调度器接口。
方法:
获取下一个任务ID。
join_running_task(task_id)等待任务完成。
tune(tasks, task_weights, max_trials_global, ...)自动调优。
terminate_task(task_id)终止任务
touch_task(task_id)点击任务并更新其状态
以人类可读的格式打印出调优统计信息。
create([kind])创建一个任务调度器。
- join_running_task(task_id: int) 列表[RunnerResult]
等待任务完成。
- Parameters:
task_id (int) – 要加入的任务ID。
- Returns:
results – 结果列表。
- Return type:
运行结果列表
- tune(tasks: 列表[TuneContext], task_weights: 列表[浮点数], max_trials_global: int, max_trials_per_task: int, num_trials_per_iter: int, builder: 构建器, runner: Runner, measure_callbacks: 列表[MeasureCallback], database: 数据库 | None, cost_model: 成本模型 | None) None
自动调优。
- Parameters:
tasks (List[TuneContext]) – 作为任务的调优上下文列表。
task_weights (List[float]) - 任务权重列表。
max_trials_global (int) – 全局最大试验次数。
max_trials_per_task (int) – 每个任务的最大试验次数。
num_trials_per_iter (int) – 每次迭代的试验次数。
builder (Builder) – 构建器。
runner (Runner) – 运行器。
measure_callbacks (List[MeasureCallback]) – 测量回调函数的列表。
database (可选[Database]) – 数据库。
cost_model (可选[CostModel]) – 成本模型。
- static create(kind: typing_extensions.Literal[round - robin, gradient] = 'gradient', *args, **kwargs) TaskScheduler
创建一个任务调度器。
- tvm.meta_schedule.tune_tir(mod: IRModule | PrimFunc, target: str | 目标, work_dir: str, max_trials_global: int, *, max_trials_per_task: int | None = None, num_trials_per_iter: int = 64, builder: 构建器 | typing_extensions.Literal[local] = 'local', runner: Runner | typing_extensions.Literal[local, rpc] = 'local', database: 数据库 | typing_extensions.Literal[json, memory] = 'json', cost_model: 成本模型 | typing_extensions.Literal[xgb, mlp, random] = 'xgb', measure_callbacks: 列表[MeasureCallback] | MeasureCallback | typing_extensions.Literal[default] = 'default', task_scheduler: Literal[gradient, round - robin] = 'gradient', space: Literal[post - order - apply, union] = 'post-order-apply', strategy: Literal[replay - func, replay - trace, evolutionary] = 'evolutionary', num_tuning_cores: typing_extensions.Literal[physical, logical] | int = 'physical', seed: int | None = None, module_equality: str = 'structural', special_space: Literal[post - order - apply, union]] | None = None, post_optimization: bool | None = False) 数据库
调优一个TIR函数或TIR函数的IRModule。
- Parameters:
mod (Union[ir.IRModule, tir.PrimFunc]) – 需要调优的TIR IRModule。
work_dir (str) – 工作目录。
max_trials_global (int) – 全局运行的最大试验次数。
max_trials_per_task (Optional[int]) – 每个任务运行的最大试验次数。
num_trials_per_iter (int) – 每次迭代运行的试验次数
builder (Builder.BuilderType) – 构建器。
runner (Runner.RunnerType) – 运行器。
database (Database.DatabaseType) – 数据库。
cost_model (CostModel.CostModelType) – 成本模型。
measure_callbacks (MeasureCallback.CallbackListType) – 测量回调函数。
task_scheduler (TaskScheduler.TaskSchedulerType) – 任务调度器。
space (SpaceGenerator.SpaceGeneratorType) – 空间生成器。
strategy (SearchStrategy.SearchStrategyType) – 搜索策略。
num_tuning_cores (Union[Literal["physical", "logical"], int]) – 调优过程中使用的CPU核心数量。
seed (可选[int]) – 随机数生成器的种子值。
module_equality (可选[str]) - 用于指定模块相等性测试和哈希方法的字符串。
special_space (可选[映射[str, SpaceGenerator.SpaceGeneratorType]]) - 从任务名称到该任务的特殊空间生成器的映射。
- Returns:
database – 包含所有调优记录的数据库
- Return type:
- tvm.meta_schedule.tune_tasks(*, tasks: 列表[TuneContext], task_weights: 列表[浮点数], work_dir: str, max_trials_global: int, max_trials_per_task: int | None = None, num_trials_per_iter: int = 64, builder: 构建器 | typing_extensions.Literal[local] = 'local', runner: Runner | typing_extensions.Literal[local, rpc] = 'local', database: 数据库 | typing_extensions.Literal[json, memory] = 'json', cost_model: 成本模型 | typing_extensions.Literal[xgb, mlp, random] = 'xgb', measure_callbacks: 列表[MeasureCallback] | MeasureCallback | typing_extensions.Literal[default] = 'default', task_scheduler: Literal[gradient, round - robin] = 'gradient', module_equality: str = 'structural', post_optimization: bool | None = False) 数据库
调优任务列表。使用任务调度器。
- Parameters:
tasks (List[TuneContext]) – 需要调优的任务列表。
task_weights (List[float]) – 每个任务的权重。
work_dir (str) – 工作目录。
max_trials_global (int) – 全局运行的最大试验次数。
max_trials_per_task (Optional[int]) – 每个任务运行的最大试验次数。
num_trials_per_iter (int) – 每次迭代运行的试验次数
builder (Builder.BuilderType) – 构建器。
runner (Runner.RunnerType) – 运行器。
database (Database.DatabaseType) – 数据库。
cost_model (CostModel.CostModelType) – 成本模型。
measure_callbacks (MeasureCallback.CallbackListType) – 测量回调函数。
task_scheduler (TaskScheduler.TaskSchedulerType) – 任务调度器。
module_equality (可选[str]) –
用于指定模块相等性测试和哈希方法的字符串。 必须是以下选项之一:
"structural":使用 StructuralEqual/Hash
- "ignore-ndarray":与"structural"相同,但在相等性测试和哈希计算时忽略ndarray原始数据
- "anchor-block":对从给定模块提取的锚块应用相等性测试和哈希计算。
对于提取的块或在找不到锚块的情况下,使用"ignore-ndarray"变体。 关于锚块的定义,请参见tir/analysis/analysis.py。
post_optimization (可选[布尔值]) – 使用Droplet Search作为探索空间生成后优化。
- Returns:
database – 包含所有调优记录的数据库
- Return type:
- class tvm.meta_schedule.TuneContext(mod: IRModule | None = None, *, target: 目标 | str | None = None, space_generator: SpaceGenerator.SpaceGeneratorType | None = None, search_strategy: SearchStrategy.SearchStrategyType | None = None, task_name: str = 'main', rand_state: int = -1, num_threads: int | typing_extensions.Literal[physical, logical] = 'physical', logger: Logger | None = None)
调优上下文类旨在包含调优任务的所有资源。
- Parameters:
mod (可选[IRModule] = None) – 待优化的工作负载。
target (可选[Target] = None) – 需要优化的目标。
space_generator (Union[None, ScheduleFnType, SpaceGenerator] = None) – 设计空间生成器。
search_strategy (Union[None, SearchStrategy] = None) – 搜索策略。 如果为None,则策略留空。
task_name (可选参数[str] = None) - 调优任务的名称。
logger (logging.Logger) – 调优任务的日志记录器。
rand_state (int = -1) – 随机状态。 需要是[1, 2^31-1]范围内的整数,-1表示使用随机数。
num_threads (int = None) – 要使用的线程数,None表示使用逻辑CPU数量。
方法:
根据给定模块生成设计空间。
pre_tuning(max_trials[, ...])一种在调优前为SearchStrategy进行必要准备的方法。
一个供SearchStrategy调用的方法,用于在调优后进行必要的清理工作。
从设计空间生成一批测量候选方案用于测量。
notify_runner_results(measure_candidates, ...)使用性能分析结果更新SearchStrategy中的状态。
clone()克隆TuneContext。
- generate_design_space() 列表[日程安排]
根据给定模块生成设计空间。
委托给 self.space_generator.generate_design_space 使用 self.mod
- Returns:
design_spaces – 生成的设计空间,即调度方案。
- Return type:
列表[tvm.tir.Schedule]
- pre_tuning(max_trials: int, num_trials_per_iter: int = 64, design_spaces: 列表[日程安排] | None = None, database: 数据库 | None = None, cost_model: 成本模型 | None = None) None
SearchStrategy在调优前需要调用此方法进行必要的准备工作。
委托给self.search_strategy.pre_tuning。
- Parameters:
max_trials (int) – 最大可执行的试验次数。
num_trials_per_iter (int = 64) – 每次迭代要执行的试验数量。
design_spaces (Optional[List[tvm.tir.Schedule]]) – 调优过程中使用的设计空间。如果为None,则使用self.generate_design_space()的结果。
database (可选[Database] = None) – 调优过程中使用的数据库。 如果为None且搜索策略是EvolutionarySearch, 则使用tvm.meta_schedule.database.MemoryDatabase。
cost_model (可选[CostModel] = None) – 调优过程中使用的成本模型。 如果为None,且搜索策略是EvolutionarySearch, 则使用tvm.meta_schedule.cost_model.RandomModel。
- generate_measure_candidates() 列表[MeasureCandidate] | None
从设计空间生成一批测量候选方案用于测量。
委托给self.search_strategy.generate_measure_candidates。
- Returns:
measure_candidates – 生成的测量候选方案,如果搜索已完成则为None。
- Return type:
可选[List[IRModule]]
- notify_runner_results(measure_candidates: 列表[MeasureCandidate], results: 列表[RunnerResult]) None
使用性能分析结果更新SearchStrategy中的状态。
委托给 self.search_strategy.notify_runner_results。
- Parameters:
measure_candidates (List[MeasureCandidate]) – 待更新的测量候选列表。
results (List[RunnerResult]) – 来自运行器的性能分析结果。
- clone() TuneContext
克隆TuneContext。
- Returns:
cloned_context – 克隆的TuneContext。
- Return type:
- tvm.meta_schedule.derived_object(cls: type) type
一个装饰器,用于为TVM对象注册派生子类。
示例
@register_object("meta_schedule.PyRunner") class _PyRunner(meta_schedule.Runner): def __init__(self, f_run: Callable = None): self.__init_handle_by_constructor__(_ffi_api.RunnerPyRunner, f_run) class PyRunner: _tvm_metadata = { "cls": _PyRunner, "methods": ["run"] } def run(self, runner_inputs): raise NotImplementedError @derived_object class LocalRunner(PyRunner): def run(self, runner_inputs): ...