路径指标

用六项 PathStats 分别描述算术量、中间结果、单步 footprint、逻辑读写量和存活对象峰值。

本页目录

PathStats 的六项指标

设第 s 个二元步骤的左右输入和结果元素数为 |A_s||B_s||C_s|。读写计数对原始叶张量采用原输入各轴的元素数;单步规模采用一元求和和对角处理后的逻辑大小,分别记为 |A'_s||B'_s|。中间结果在两种口径下大小相同。ArcTN 在完整路径重放后报告以下六项对数指标。

字段 定义 回答的问题
log10_flops log10(Σ_s F_s) 整条路径需要多少标量乘法
log2_max_size log2 max_s |C_s| 最大的二元结果张量有多少元素;单张量网络取最终输出大小
log2_max_contraction_size log2 max_s(|A'_s|+|B'_s|+|C_s|) 最大的单步输入加输出 footprint
log2_total_size log2 Σ_s |C_s| 全部步骤写出的结果元素总量
log2_read_write log2 Σ_s(|A_s|+|B_s|+|C_s|) 整条路径的逻辑读写复杂度
log2_peak_size log2 max 活跃元素总数 路径模拟中的存活对象峰值

Warning

模型量与实测量

这些量都是结构估计,不是规划秒数、数值执行秒数、进程 RSS、显存占用、缓存缺失或硬件性能计数器。Rust 中单张量网络的合法空路径没有二元步骤:log10_flopslog2_total_sizelog2_read_write 用负无穷表示零工作量,log2_max_contraction_size 为 0;log2_max_size 取最终输出大小,log2_peak_size 仍计入完整输入。Python 规划报告将这种零工作量的 log10_flopslog2_total_size 显示为 0.0;满足请求目标时,sliced_log10_flops_total 也采用此显示约定。log2_read_write 和目标元数据仍保留零工作量语义。这些特殊显示值不表示工作量为 1,也不表示路径无效。

单步指标计数

本步 FLOPs 按参与二元收缩的所有指标维度之积计一次标量乘法;结果大小是本步保留腿的维度之积。ArcTN 在 log2 域累加大数,避免大型网络的线性值溢出。

本步结果保留属于 output 的指标,以及仍被这两个输入以外的张量使用的指标;其余参与本步的指标求和消去。

结构计数公式:单步规模用一元处理后的逻辑输入大小,读写量对叶张量用原输入大小

text
F_s = product(dim(leg) for leg in union(A_s, B_s))
result_s = product(dim(leg) for leg in C_s)
step_footprint_s = |A'_s| + |B'_s| + |C_s|
read_write = sum_s (|A_s| + |B_s| + |C_s|)

FLOPs 的口径

复数标量乘法在该结构模型中仍计为一次标量乘法。实际指令数和不同 dtype 的吞吐必须通过执行 benchmark 测量。

指标 包含什么 不包含什么
log2_max_size 单个二元步骤的新结果 C;单张量网络取最终输出 该步的两个输入、其他存活张量、workspace
log2_max_contraction_size 某个二元步骤的 \|A'\|+\|B'\|+\|C\|,其中叶张量采用一元处理后的逻辑大小 其他存活张量、并发 slice、allocator 与后端 workspace
log2_peak_size 模拟执行中的全部存活张量;结果在输入释放前计入 转置临时量、allocator 开销、库 workspace 与并行任务叠加

target_size 限制每个 slice 的二元收缩结果元素数;单张量网络另检查最终输出,因此与 log2_max_size 的结构口径最接近。它不涵盖所有一元临时数组,不直接约束 log2_peak_size,也不等于 RSS 或显存。

Warning

并行执行的额外内存

如果数值执行同时并行多个 slice,总驻留内存可能明显高于单个 slice 的路径指标。评估内存时还要记录 dtype、线程数、并发 slice 数和实测 RSS。

统一重算再比较

rust
let stats = arctn::simulate_path(&net, &ssa_path)?;
println!("{:?}", stats);

跨方法或跨库比较使用同一种合法路径表示,并在相同网络、维度和 evaluator 下重放。各库原生汇总字段可能采用不同的 FLOPs、读写或 unary 处理口径。

total write 与 read/write complexity

log2_total_size 只累计每步写出的结果,log2_read_write 同时累计左右输入与结果。两者不能都简称为“读写量”。