固定路径切片与动态切片
Fixed 保持收缩路径不变;Dynamic 在选择切片 index 的同时尝试局部调整路径。
本页目录
固定路径切片(Fixed)
Fixed 保持已经找到的收缩顺序不变,只选择哪些内部 index 需要切片。目的是减小每次收缩产生的中间张量,而不是重新搜索一条路径。
例如,将维度为 2 的内部 index 切片,就分别计算 和 两个子任务,再把结果相加。两个子任务使用相同的收缩顺序。
path = 收缩序优化得到的路径
sliced_indices = 在 path 上选择切片 index,使中间结果满足大小上限
return path, sliced_indices
动态切片(Dynamic)
Dynamic 从未切片搜索得到的路径出发,在选择切片 index 后,尝试用局部重构调整收缩顺序,再重新选择切片 index。它同时考虑路径与切片的组合,而不只是固定一条路径。
path = 收缩序优化得到的路径
选择切片 index,并检查中间结果大小
在规定的搜索范围内:
尝试局部重构路径,并重新选择切片 index
按大小限制和切片后的总目标值保留较好的方案
return 最终路径, 切片 index
Dynamic 会增加搜索工作,最终路径可能改变,也可能保持不变;不能保证比 Fixed 更省计算量。
这里的“动态”发生在规划阶段:路径和切片 index 可以一起调整。方案确定后,各个 slice 都使用返回的最终路径进行数值计算。比较 Fixed 与 Dynamic 的结果时,应同时查看切片 index、切片数量和全部切片的总目标值。
固定路径切片(Fixed)
保持收缩顺序,只选择切片 index。
动态切片(Dynamic)
选择切片 index 时允许局部重构。图示为路径发生调整的情况。
设置中间张量大小上限
target_size 指定每个切片中,单个二元收缩结果最多包含多少个元素。例如,target_size=65_536 时,一个 的结果张量满足限制, 的结果则超过限制。
它限制的是单个结果张量的大小,不是全部张量占用的内存之和,也不是进程内存或 GPU 显存上限。完整定义见中间张量大小上限。
在 Python 高层接口中,slicing_mode="fixed" 是默认设置。不传 target_size 时,按普通路径收缩,不额外选择切片;使用 slicing_mode="dynamic" 时必须提供 target_size。如果原路径已经满足大小限制,Fixed 可以返回空的切片列表。
切片方案与数值计算
选择切片方案只确定收缩路径和切片 index,还没有计算张量数值。arctn_schedule 返回方案和报告;arctn_contract 接收数组后,会完成方案选择、各切片的收缩以及最后的求和。
两种方式的调用见切片示例。怎样计算各切片并相加,见切片计算与求和。
大小检查与失败处理
ArcTN 根据最终路径和切片 index,用整数计算检查大小限制。未找到满足 target_size 的方案时,Rust 返回 Err,Python 高层抛出 ValueError;不会把超过上限的方案作为成功结果返回。
max_time 控制普通收缩序搜索阶段的时间检查,不保证包括切片和数值计算在内的整个任务都在该时间内结束。无论搜索何时停止,最终方案仍须通过大小检查。