候选树与选择

说明候选收缩树、完整路径目标函数与最终选择之间的关系。

本页目录

探索多棵完整收缩树

同一个张量网络通常存在大量可能的二叉收缩树。穷举全部树会很快变得不可行,因此 Auto 采用启发式搜索,在可用资源内尝试构造多棵完整候选树,而不是声称遍历整个搜索空间。

图中候选数量和树形只用于解释未切片路径的有限候选选择,不对应 Light 或 Heavy 的内部配额。

运行成本

启发式搜索只访问有限候选,不会穷举全部收缩树。规划耗时取决于网络、可用资源和搜索配置,因此没有固定的运行时间保证。

切片不在本图范围内

本图描述未提供 target_size 时的普通路径选择。提供 target_size 后还会执行切片;dynamic 模式允许局部调整路径,因此最终切片结果不再对应原始候选集合上的同一个 arg min

统一评分并选择已观察到的最佳候选

候选选择的概念模型

text
C_done = {本次调用中已经完成并通过验证的完整路径}
P* = arg min J(P)
          P in C_done

J(P) = w_F * F(P) + w_R * R(P)
符号 含义
C_done 本次调用实际完成并通过验证的完整路径集合;每条路径对应一棵二叉收缩树
J(P) 调用开始时固定的 PlannerObjective
F(P) / R(P) 完整路径的 FLOPs 与 total read/write complexity
P* C_done 中目标值最低的候选;目标值并列时返回其中一条,tie-break 未指定

这个有限集合上的 arg min 可以严格成立,但它不等价于整个收缩树空间的局部最小值或全局最小值。内部搜索即使进行了局部改进,也不能仅凭返回一棵树就证明严格局部最优。

通过公共接口比较多次独立运行

多次独立 Auto 调用

python
from arctn import arctn_schedule

reports = [
    arctn_schedule(
        inputs, output, size_dict,
        preset="light", seed=seed, use_ssa=True,
    )
    for seed in (0, 1, 2, 3)
]
best_observed = min(
    reports,
    key=lambda report: report["planner_objective_score_log2"],
)
print(best_observed["path"])

多次调用的预算

循环中的每个 seed 都触发一次独立 Auto 调用;选择 best_observed 使用的是四次调用的总搜索预算,不是一次调用内部的四个 trial。