---
title: "One-Pass Fine-Tuning (单遍微调)"
created: 2025-06-02
updated: 2025-06-02
type: concept
tags: [efficient-fine-tuning, multi-turn-reasoning, training-optimization]
sources: ["[[goru-one-pass-to-reason-2025]]"]
---

# One-Pass Fine-Tuning

> 将多轮对话的 N 遍训练压缩为单遍前向传播的训练技术，通过 token 复制和自定义注意力掩码实现。

## 核心思想

传统的多轮推理微调需要每轮一次独立前向传播（[[multi-turn-reasoning|N-Pass]]），因为推理 token 在后续轮次中被丢弃。One-Pass Fine-Tuning 通过以下三步实现单遍处理：

1. **[[token-duplication|Token 复制]]**：将每个助手回复复制为 ri_in（上下文）和 ri_out（生成+loss）
2. **[[block-sparse-attention|分块稀疏注意力]]**：自定义掩码控制每种 token 类型的可见范围
3. **位置 ID 重排**：确保相对位置关系与 N-Pass 等价

## 理论保证

**Theorem 2.1**（Goru et al., 2025）：在仅由注意力模式、位置编码和输入表示决定输出分布的 LM 中，
$$L_{\text{1-Pass}}(c) = \sum_{i=1}^N L_{\text{N-Pass}}(H_{<i}, h_i, a_i)$$

即两种方法的 loss 完全等价——只改变计算方式，不改变学习目标。

## 复杂度

| 方法 | 时间 | 空间 |
|------|------|------|
| N-Pass | O(N³ℓ²d) | O(Nℓ²) |
| **1-Pass** | **O(N²ℓ²d)** | O(Nℓ²) |

额外内存 ~33%（token 复制），但渐进复杂度相同。

## 实现

基于 [[flex-attention|PyTorch FlexAttention]]（FlashAttention-2 不支持自定义掩码），掩码生成在 GPU 上向量化完成。

## K-Pass 变体

见 [[k-pass-training]]：将对话分为 K 段，每段内用 1-Pass，段间顺序处理，提供速度–内存的连续权衡。

## 相关

- [[goru-one-pass-to-reason-2025|One-Pass to Reason 论文]]
- [[multi-turn-reasoning]]
- [[token-duplication]]
- [[block-sparse-attention]]
