---
title: "把中间张量限制在 target_size 内"
description: "从未切片路径出发，使用 Fixed 或 Dynamic 切片控制中间张量大小。"
eyebrow: "应用教程"
---

请先完成[快速开始中的张量网络输入](/docs/quick-start#network)，准备示例使用的网络结构、维度和数值数组。

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

使用自己的 `inputs`、`output` 和 `size_dict`，或沿用[快速开始](/docs/quick-start#network)中的网络。切片求和的原理见[切片原理](/docs/slicing#exact-decomposition)。

```python
from arctn import arctn_schedule

fixed_report = arctn_schedule(
    inputs, output, size_dict,
    preset="heavy", seed=0,
    target_size=4,
    slicing_mode="fixed",
    use_ssa=True,
)
print(fixed_report["sliced_legs"])
print(fixed_report["sliced_log2_max_size"])
```

对于快速开始中的网络，`target_size=4` 会实际触发切片。`fixed` 是默认模式。它先用所选的 Light 或 Heavy 模式得到未切片路径，然后保持这条路径不变，只选择切片 index。

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

对同一网络再运行一次 Dynamic，并用相同的 SSA 格式查看两次返回的路径：

```python
dynamic_report = arctn_schedule(
    inputs, output, size_dict,
    preset="heavy", seed=0,
    target_size=4,
    slicing_mode="dynamic",
    use_ssa=True,
)
print(dynamic_report["path"] == fixed_report["path"])
print(dynamic_report["sliced_legs"])
print(dynamic_report["sliced_log10_flops_total"])
```

`fixed` 和 `dynamic` 都先用所选的 Light 或 Heavy 模式优化未切片收缩序；`dynamic` 允许在切片后进行有限的局部路径调整。上面的布尔值只表示两次调用的最终路径是否相同，不是单次搜索内部的变化记录。比较切片效果时，还应同时查看切片数量和总工作量，不能只看路径是否改变。

## 比较切片设置的影响 {#tradeoff}

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

`target_size` 只约束单片二元收缩结果的元素数；单张量网络则检查最终输出。它不限制一元处理产生的全部临时张量，也不是整个进程的内存、显存或临时工作区大小的上限。
