---
title: "把中间张量限制在 target_size 内"
description: "从未切片路径出发，使用 fixed 或 dynamic slicing 控制中间张量规模。"
eyebrow: "教程"
---

## 固定路径切片 {#fixed}

```diagram
slicing
固定内部指标 c 的五个取值，分别计算 T₀ 至 T₄，再将五个结果相加，得到原网络的收缩结果。
```

```python
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。

## 切片与局部路径重构交替 {#dynamic}

```python
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`。

## 理解代价交换 {#tradeoff}

| 改变 | 直接结果 | 需要额外检查 |
| --- | --- | --- |
| 降低 target\_size | 要求更低的单片结果上限；实际最大结果可能保持不变 | slice 数和总 FLOPs 可能增加 |
| fixed → dynamic | 切片后允许局部调整路径 | 增加局部调整工作；最终路径可能改变，也可能不变 |
| 增加并发 slices | 可能提高吞吐 | 多个 slice 同时驻留会增加实际内存 |

`target_size` 只约束单个 slice 的二元收缩结果元素数；单张量网络则检查最终输出。它不限制一元处理的全部临时张量，也不是整个进程的 RSS、VRAM 或 workspace 上限。
