把中间张量限制在 target_size 内
从未切片路径出发,使用 fixed 或 dynamic slicing 控制中间张量规模。
本页目录
固定路径切片
T[a,d] = Σb,c A[a,b] B[b,c] C[c,d]
c=0T0[a,d]c=1T1[a,d]c=2T2[a,d]c=3T3[a,d]c=4T4[a,d]T[a,d] = T₀ + T₁ + T₂ + T₃ + T₄遍历 c 的全部取值,求和得到原收缩结果。report = arctn_schedule(
inputs, output, size_dict,
preset="heavy", seed=0,
target_size=2**24,
slicing_mode="fixed",
use_ssa=True,
)
print(report["sliced_legs"])
print(report["sliced_log2_max_size"])
fixed 是默认模式。它先得到普通未切片 Auto 路径,然后保持这条路径不变,只选择 sliced legs。
切片与局部路径重构交替
report = arctn_schedule(
inputs, output, size_dict,
preset="heavy", seed=0,
target_size=2**24,
slicing_mode="dynamic",
)
print(report["slicing_report"]["path_changed"])
fixed 和 dynamic 都先运行未切片的 Auto 规划;dynamic 允许在切片后进行有限的局部路径调整。最终路径可能改变,也可能与 fixed 相同,应比较报告中的实际工作量和路径;内部调整次数和局部问题大小不属于接口契约。
公开参数
公开
slicing_mode只接受fixed与dynamic。
理解代价交换
| 改变 | 直接结果 | 需要额外检查 |
|---|---|---|
| 降低 target_size | 要求更低的单片结果上限;实际最大结果可能保持不变 | slice 数和总 FLOPs 可能增加 |
| fixed → dynamic | 切片后允许局部调整路径 | 增加局部调整工作;最终路径可能改变,也可能不变 |
| 增加并发 slices | 可能提高吞吐 | 多个 slice 同时驻留会增加实际内存 |
target_size 只约束单个 slice 的二元收缩结果元素数;单张量网络则检查最终输出。它不限制一元处理的全部临时张量,也不是整个进程的 RSS、VRAM 或 workspace 上限。