52 lines
1.9 KiB
Markdown
52 lines
1.9 KiB
Markdown
---
|
||
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]]
|