---
title: "使用 Heavy 规划路径"
description: "从一个显式 seed 开始，读取最终路径与公开指标，并正确比较多次独立运行。"
eyebrow: "教程"
---

## 运行 Heavy 并保留报告 {#run}

```python
from arctn import arctn_schedule

report = arctn_schedule(
    inputs, output, size_dict,
    preset="heavy", seed=17,
    use_ssa=True,
)

path = report["path"]
print(report["log10_flops"])
print(report["log2_read_write"])
print(report["planner_objective_score_log2"])
```

Heavy 的接口定位是允许投入更多规划工作以寻找更好的路径。它仍是启发式搜索：返回的是本次运行已完成候选中的最佳结果，不保证严格局部最优、全局最优，也不保证每个 seed 都优于 Light。

## 阅读路径质量 {#read}

| 字段 | 表示 | 不等同于 |
| --- | --- | --- |
| log10\_flops | 路径模型中标量乘法总数的以 10 为底对数 | 硬件计数器或真实运行时间 |
| log2\_max\_size | 最大结果张量元素数的以 2 为底对数 | RSS 或 GPU 显存 |
| log2\_read\_write | 所有步骤逻辑 A+B+C 总和的以 2 为底对数；原始叶张量按原输入大小计数 | 实测内存带宽 |
| log2\_peak\_size | 按执行顺序模拟的存活元素数峰值的以 2 为底对数 | 进程峰值 RSS |

> **按同一目标比较**
>
> 默认 objective 是 FLOPs + 64 × read/write complexity。若只比较 `log10_flops`，可能忽略规划器有意换取的读写量改善。

## 做独立重复 {#repeats}

```python
reports = [
    arctn_schedule(
        inputs, output, size_dict,
        preset="heavy", seed=seed, use_ssa=True,
    )
    for seed in (0, 1, 2, 3)
]
best = min(reports, key=lambda item: item["planner_objective_score_log2"])
```

不同 seed 是独立搜索起点，不是同一路径的重复计时。若要报告稳定性，应保留每个 seed 的完整结果与分母；只展示 best-of-four 会改变预算和比较问题。
