方法组合调度
组合调用路径生成与局部改进方法,通过 Light 或 Heavy 预设完成收缩序优化。
本页目录
一次调用怎样完成搜索
ArcTN 提供 Light 和 Heavy 两种搜索模式,将路径生成、局部改进和结果选择组织在一次调用中。调用者提供张量网络和优化目标,通过 preset="light" 或 preset="heavy" 选择模式,不必逐个调用底层搜索方法。
这里的“候选”是一条完整收缩路径,已经指定从输入张量到最终结果的全部两两收缩步骤,而不是某一步选中的两个张量。方法组合调度负责安排这些路径的生成和改进,再按本次优化目标比较结果。
| 环节 | 处理内容 |
|---|---|
| 生成候选 | 在原始网络及化简网络上,按预设调用随机贪心、超图二分等方法 |
| 改进路径 | 按预设和停止条件,对候选进行子树重构、回火等局部搜索 |
| 返回结果 | 按本次目标函数选择路径;请求 target_size 时,再处理切片约束 |
化简会先确定一部分收缩步骤,再在剩下的较小网络上搜索。把两部分接起来后,得到的仍是原始输入网络上的完整路径,因此可以与直接在原网络上生成的路径比较。具体采用哪些生成方法和改进步骤取决于预设;某些步骤也可能因停止条件而跳过。两种预设的区别见Light / Heavy 接口。
候选树图和选择原理统一放在张量网络与收缩路径,目标函数见路径指标与优化目标。
公共 Python 接口
| 入口 | 适用情况 | 返回结果 |
|---|---|---|
| arctn_path | 选择 Light 或 Heavy 并规划路径 | 一条 SSA 或 linear path |
| arctn_schedule | 需要查看收缩序、工作量和切片信息 | 包含路径、目标、指标与可选切片结果的字典 |
| arctn_plan | 优化收缩序,并保存网络与切片信息 | 可保存的 ArcTNExecutionPlan |
| arctn_tree | 把规划结果转换为 Cotengra ContractionTree | 可供 Cotengra / Quimb 使用的树 |
| arctn_contract | 规划后立即执行数值收缩 | 数值结果,以及可选的最终信息 |
可运行的例子见快速开始,完整签名见 Python API。
常用参数
| 参数 | 作用 | 说明 |
|---|---|---|
| preset | 选择 light 或 heavy |
默认值是 heavy |
| seed | 设置本次随机搜索的基础种子 | 影响搜索过程中的随机选择,不设置输入数组的数值 |
| max_time | 搜索时间限制,单位为秒 | 在算法检查点生效,实际返回时间可能稍晚 |
| flops_weight / read_write_weight | 固定本次调用的完整路径目标函数 | 必须有限、非负,且不能同时为零 |
| target_size | 限制每个切片允许的最大中间张量元素数 | 不等于 RSS、显存或并发切片总内存 |
| slicing_mode | 选择 fixed 或 dynamic |
dynamic 必须同时提供 target_size |
| rate_enabled | 是否启用基于估计收缩工作量的提前停止 | 适用于 arctn_schedule 和 arctn_plan,默认 True |
target_size 和 slicing_mode 适用于 arctn_schedule、arctn_plan、arctn_tree 和 arctn_contract。只返回路径的 arctn_path 不接收这两个参数。
权重决定比较路径时更重视什么。例如,flops_weight=1、read_write_weight=0 表示只按 FLOPs 选优;默认的 (1, 64) 同时考虑 FLOPs 与逻辑读写量。定义及数值例子见优化目标。
rate_enabled=False 只关闭这一项提前停止,不关闭搜索自身的收敛判断或 max_time。固定随机种子也不代表每次耗时完全一致。若任务要求到时立即结束整个进程,应在调用程序外设置超时控制,例如使用作业调度器的时间限制。
返回结果
arctn_schedule 返回收缩序和结构化报告;arctn_plan 返回 ArcTNExecutionPlan,同时保存网络、收缩序和切片信息,供后续执行。
| 内容 | 含义 |
|---|---|
path |
原始输入网络上的完整收缩路径 |
log10_flops、log2_read_write 等 |
返回路径的结构计数;定义见路径指标 |
planner_objective 与权重 |
本次搜索采用的目标函数 |
sliced_legs 与 sliced_* 字段 |
可选的切片 index 集合及切片后的指标 |
报告可用于检查返回路径及其指标,但仅凭最终报告不能重建搜索中所有未公开的候选。字段说明见使用 Heavy:读取返回结果。
Light 和 Heavy 采用启发式搜索,不保证全局最优,也不把提前停止当作局部最优的证明。具体说明见最佳候选的含义。
切片限制
提供 target_size 时,成功返回的方案满足每个切片中二元收缩结果的元素数限制;单张量网络另检查最终输出。若无法满足限制,接口返回错误。target_size 不等于进程 RSS、显存或所有并发切片的总内存。
用法见控制中间张量。