一文了解 W8A8、W4A8、稀疏量化、FlashAttention-3、KV Cache 量化


1.1 W8A8 量化的本质

W8A8(Weight 8-bit / Activation 8-bit)量化的本质是:

用 8-bit 整数近似表示 FP16/FP32 的模型权重与中间激活值,并在整数域完成 GEMM(GEneral Matrix Multiplication),最终在输出端做尺度还原。 量化计算只是改变了数值 "表示形式",没有改变模型定义的数值空间;尺度还原的作用,是在精度边界处将整数近似重新嵌回模型原始的浮点语义空间。

核心目标只有三个:

  1. 显著降低显存占用(≈50% vs FP16)

  2. 提升推理性能与吞吐量(前向推理计算更亲和 AI 硬件)

  3. 保持可接受的推理精度退化

它是一种推理前的离线权重量化 + 推理时激活动态量化的工程折中方案。


1.2 关键技术原理(必须理解的核心)

1.2.1 数值映射模型

对任意浮点张量 xxx:

x≈s⋅q,q∈Zint8 x \approx s \cdot q,\quad q \in \mathbb{Z}_{int8} x≈s⋅q,q∈Zint8

  • sss:scale(尺度因子,float)
  • qqq:int8 离散值(-128 ~ 127 或 0 ~ 255)

量化误差本质是 分段线性近似误差


1.2.2 权重量化(W8)

  • 离线完成(部署前)

  • 常见策略:

    • Per-Channel(按输出通道)
    • 对 Linear / Conv 的 out-channel 单独 scale
  • 原因:

    • 权重分布在通道维度上差异巨大
    • Per-tensor 会严重损伤精度

公式:
W≈sw(c)⋅Qw(c) W \approx s_w^{(c)} \cdot Q_w^{(c)} W≈sw(c)⋅Qw(c)


1.2.3 激活量化(A8)

  • 在线动态量化(推理时)

  • 通常是:

    • Per-tensor
    • 运行时统计 max / absmax
  • 激活不可提前量化,因为依赖输入语义,激活输出随输入变化而变化,需要统计数据动态范围,通常更难量化。

公式:

X≈sx⋅Qx X \approx s_x \cdot Q_x X≈sx⋅Qx


1.2.4 整数 GEMM 计算路径(关键)

以 Linear 为例:

Y=XW Y = XW Y=XW

量化后:

Y≈(sx⋅Qx)(sw⋅Qw) Y \approx (s_x \cdot Q_x)(s_w \cdot Q_w) Y≈(sx⋅Qx)(sw⋅Qw)

Qy=Qx⋅Qw(INT8 × INT8 → INT32 Accumulate) Q_y = Q_x \cdot Q_w \quad (\text{INT8 × INT8 → INT32 Accumulate}) Qy=Qx⋅Qw(INT8 × INT8 → INT32 Accumulate)

Y=sx⋅sw⋅Qy Y = s_x \cdot s_w \cdot Q_y Y=sx⋅sw⋅Qy

关键工程点:

  • 累加必须是 INT32
  • scale 融合 / 延迟反量化(Dequant)以减少开销,直到 "必须回到浮点数值空间"

1.2.5 Scale 管理是精度核心

注意:精度好坏 ≠ bit 数,而是 scale 设计是否合理

常见失误:

  • scale 过大 → 低值被抹平
  • scale 过小 → 饱和截断

1.3 W8A8 的工程实现要点(部署级)

1.3.1 常见实现形态

组件 实现
GEMM cuBLASLt / CUTLASS INT8
推理框架 TensorRT / FasterTransformer / vLLM
校准 AbsMax / Percentile / KL

1.3.2 量化流程(标准工业做法)

  1. 加载 FP16 权重

  2. 离线 W8 量化(Per-Channel)

  3. 保存 INT8 权重 + scale

  4. 推理时:

    • 动态 A8
    • INT8 GEMM
    • 输出还原或下一层融合

1.3.3 对 Transformer 的关键处理点

  • Attention QKV:对激活分布极其敏感
  • LayerNorm:通常保留 FP16
  • Softmax:FP16/FP32
  • Residual Add:常保留高精度

实际部署是 混合精度图,不是全 INT8


1.4 W8A8 的适用场景与边界

1.4.1 适用场景(强推荐)

  • 大模型高效推理(Efficient LLM Inference)
  • 高并发请求或长序列
  • 对推理时延 / 吞吐 / 成本敏感
  • 容忍极小精度损失(<1% 以内)

典型:

  • ChatBot / RAG
  • 搜索 / 推荐 LLM
  • 企业私有化部署

1.4.2 不适用或需谨慎

  • 小模型 + 极低延迟

  • 高数值敏感任务

    • 数学推理
    • 精确生成(代码、符号)
  • 无校准数据


1.4.3 与其他量化方案的对比

方案 特点
W8A8 工业主流、硬件友好
W8A16 精度更稳,算力收益下降
W4A16 极致显存压缩,工程复杂
GPTQ / AWQ 权重-only,激活 FP16

一句话总结 W8A8 量化:通过合理的 scale 设计,在整数算子上最大化性能与吞吐量,同时将量化误差约束在模型可容忍的数值子空间内。


2.1 W4A8 量化的本质

W4A8 = 权重 4-bit + 激活 8-bit 的训练后量化(Post-Training Quantization,PTQ)推理方案

其核心目标是:

在尽量保持模型精度的前提下,显著降低显存占用与内存带宽压力,从而提升大模型推理吞吐与部署可行性。

本质上,W4A8 是一种以 "权重主导压缩、激活保守量化" 为策略的非对称量化设计 ,专门为 Transformer 推理阶段服务。


2.2 为什么是 W4A8,而不是 W4A4 / W8A8

权重与激活的数值特性差异:

项目 权重 (Weight) 激活 (Activation)
分布 稳定、静态 动态、输入相关
离群值 可控 高频
复用率 极高
量化敏感性 相对低 较高

结论:

  • 权重可以压到 4-bit
  • 激活通常需要 ≥8-bit 才能稳定

没有单个量化方法就能 Cover 所有大模型,W4A8 算是精度/性能/硬件友好性的最优平衡点


2.3 W4A8 的关键技术原理

2.3.1 权重 4-bit 量化(W4)

(1)量化方式
  • 对称量化(symmetric int4)
  • 零点固定为 0
  • scale 按 group-wise / channel-wise 有效计算
(2)核心公式

wint4=clip(round(wfp16s),−8,7) w_{int4} = \text{clip}\left(\text{round}\left(\frac{w_{fp16}}{s}\right), -8, 7\right) wint4=clip(round(swfp16),−8,7)

(3)关键工程点
  • Group Size(如 32 / 64 / 128) 决定精度与算力
  • 离群值(Outliers)处理决定最终精度损失
  • 常见方法:SmoothQuant / GPTQ / AWQ

2.3.2 激活 8-bit 量化(A8)

(1)量化策略
  • 动态量化(on-the-fly)
  • per-token 或 per-tensor scale
  • 通常为对称 int8
(2)原因
  • 激活分布随输入变化
  • 需要实时统计 min/max 或 absmax
  • 8-bit 是当前硬件与精度的稳健性下限

2.3.3 计算路径(推理时)

实际计算常见为:

复制代码
int4(weight) × int8(activation) → int32 accumulation → fp16 / fp32
  • 累加必须 ≥ int32
  • 输出再反量化回高精度

2.4 W4A8 带来的核心收益

2.4.1 显存与内存带宽

项目 FP16 W4A8
权重占用 16-bit 4-bit(↓75%)
激活 16-bit 8-bit
带宽瓶颈 极高 显著降低

权重是推理阶段的主要带宽消耗者时,W4 是关键。


2.4.2 推理性能

  • Prefilling 阶段:主要为计算密集型,W4A8 带宽优势难以完全转化为速度提升,加速有限。
  • Decoding 阶段:带宽密集型,权重 int4 可显著降低内存访问量,但受 KV Cache 与 Attention Kernel 限制,获得中等加速。
  • 整体吞吐:在真实服务负载下,W4A8 相比 FP16 通常能实现加速 1.3X~2X,取决于 Batch Size、序列长度等。

W4A8 的本质收益不是 "算得更快",而是 "用更少带宽完成同样的推理",这在 Decoding 阶段最容易转化为真实性能提升,而在 Prefilling 阶段更多体现为显存可行性而非线性加速。


2.5 W4A8 的适用场景

2.5.1 强烈推荐

  • 大模型高效推理(Efficient LLM Inference)
  • 单卡 / 少卡部署 8B~70B 模型
  • 显存受限但要求较高精度的场景
  • 服务端(GPU / 专用推理卡)

2.5.2 不适合

  • 训练或微调(需高精度梯度及反向传播)
  • 极端高精度任务(科学计算、数学、符号推理)
  • 还不支持 int4 的 AI 硬件

2.6 与其他量化方案的对比

方案 精度 显存 工程复杂度 实用性
FP16 ⭐⭐⭐⭐⭐ 基线
W8A8 ⭐⭐⭐⭐ 稳妥
W4A8 ⭐⭐⭐⭐ ⭐⭐⭐⭐ 中高 主流最优
W4A4 ⭐⭐ ⭐⭐⭐⭐⭐ 实验性

一句话总结 W4A8 量化:W4A8 是一种以 int4 权重换带宽、以 int8 激活保稳定性的训练后量化方案,是当前大语言模型推理部署在精度、性能和工程可落地性上的 "最优解"。


下面以面向开源社区的开发者与用户部署前权重量化 视角,给出对 稀疏量化(Sparse Quantization)本质、关键原理与适用场景的专业讲解。


3.1 稀疏量化的本质

稀疏量化 = 稀疏化(Sparsification)+ 低比特量化(Quantization)的一体化权重表示与执行策略。其核心目标不是 "压到最低 bit",而是:

通过 "零值结构 + 非零权重的低精度表示",在保持模型推理性能的前提下,最大化内存带宽与算力效率。

与纯量化不同,稀疏量化显式引入结构性或非结构性零值 ,并在算子级别利用跳零(Skip Zero)或稀疏算子实现真实加速。


3.2 核心思想拆解

1️⃣ 稀疏性来源

类型 说明
非结构化稀疏 部分权重被裁剪为 0(如 magnitude pruning)
结构化稀疏 固定模式(如 2:4、4:8)内部分权重为 0,Block-wise
半结构化稀疏 硬件可识别的规则稀疏(NVIDIA Ampere 架构)

只有 "硬件可识别的稀疏模式" 才能带来真实推理加速


2️⃣ 量化部分的关键点

稀疏量化中,量化对象只针对非零权重

  • 常见量化形式:

    • INT8 / INT4 / FP8
  • 缩放方式:

    • Per-channel / Per-group / Block-wise
  • 表示形式:

    • (value, scale) + 稀疏索引(CSR / CSC / Block Sparse)

👉 零值本身无需存储、无需量化


3️⃣ 权重文件层面的真实结构

稀疏量化后的权重文件通常包含:

text 复制代码
- 稀疏结构元数据(mask / pattern / index)
- 非零权重的低比特值
- 对应的 scale / zero-point

这意味着:

它不是 "普通量化权重 + mask",而是全新的权重布局


3.3 为什么稀疏量化能 "真的快"

对比纯量化

方案 计算量 内存访问 实际加速
纯 INT4 / INT8 不变 中等
稀疏量化 ↓↓ ↓↓ 高(若硬件支持)

原因:

  • 零权重 不参与乘加
  • 非零权重 更少 + 更低 bit
  • 访存与算力需求同时下降

3.4 关键工程前提(非常重要)

稀疏量化 ≠ 自动加速,必须满足 三位一体

1️⃣ 模型侧

  • 稀疏模式可控(如 2:4)
  • 稀疏后精度可恢复(通常需再训练或蒸馏)

2️⃣ 编译 / Runtime

  • 支持稀疏 GEMM / Attention
  • 能识别稀疏布局(如 cuSPARSELt、CUTLASS)

3️⃣ 硬件

  • GPU:Ampere+(2:4 Sparse Tensor Core)
  • 专用加速器:TPU / NPU / ASIC
  • CPU:收益极有限(cache miss + branch)

👉 缺一不可,否则只省显存,不省时间


3.5 典型适用场景

✅ 适合

  • 大模型(>70B)推理部署
  • 显存 / 带宽受限场景
  • 批量推理(batch ≥ 8)
  • 固定模型结构(不频繁改权重)
  • 支持稀疏算子的 GPU / NPU 加速卡

❌ 不适合

  • 小模型(算子调度开销 > 收益)
  • CPU-only 推理
  • 强依赖动态 shape / 动态权重
  • 对精度极端敏感且无法微调的场景

3.6 与其他量化方案的关系定位

技术 解决什么问题
GPTQ / AWQ 降 bit,保持精度
SmoothQuant 激活友好
稀疏量化 同时减少 bit + 乘加次数
MoE 稀疏 "专家级" 计算
KV Cache 量化 减少时序访存成本

稀疏量化是 "算力级别" 的优化,不只是存储优化

一句话总结稀疏量化 :稀疏量化的本质,是用 "硬件可执行的稀疏结构 + 非零权重的低精度表示",在模型部署前重构权重,使推理阶段真正减少乘加与带宽,而不仅是压缩模型大小。


FlashAttention-3 论文摘要:注意力机制作为 Transformer 架构的普遍核心组件,是大语言模型应用和长上下文建模中的主要计算瓶颈。FlashAttention 提出了一种通过最小化内存读写来加速 GPU 上注意力计算的技术方案。然而,FlashAttention-2 尚未充分利用新一代硬件(如 Hopper 架构)的特性,其在 H100 GPU 上的计算利用率仅达到约 35%。为提升 Hopper GPU 上的注意力计算效率,Tri Dao 团队利用张量核心与 Tensor Memory Accelerator(TMA)的异步特性,开发了三项核心技术:一是通过 warp-specialization 实现计算过程与数据传输的重叠;二是交错执行 Block-wise 矩阵乘法与 Softmax 运算;三是基于硬件对 FP8 低精度的支持,引入了块量化与非常规值处理。实验结果显示,FlashAttention-3 在 H100 GPU 上相对于 FlashAttention-2 实现了 1.5-2.0 倍的加速:在 FP16 模式下,峰值计算性能达到 740 TFLOPs/s(利用率为 75%);在 FP8 模式下,峰值性能接近 1.2 PFLOPs/s。验证表明,FP8 版本的 FlashAttention-3 相较于基准的 FP8 注意力计算方案,实现了 2.6 倍的数值误差降低(即精度提升)。

4.1 FlashAttention-3 的本质是什么?

一句话概括:FlashAttention-3 是一种针对最新 GPU(尤其是 H100/SM90)架构 、以 "算力饱和" 为目标重新设计的注意力(Attention)计算内核 。它通过极致的 Kernel 融合与流水线并行,使注意力计算从 "内存受限" 进一步转向 "算力受限"。该版本并未改动算法语义,而是当前注意力机制在目标硬件上的最优实现形态之一


4.2 FlashAttention-3 解决的核心问题

在 FlashAttention-2 之后,注意力计算的瓶颈已不再完全是高带宽内存,而是转为以下四个方面:

  1. Tensor Core 利用率不足
  2. Warp(Streaming Multiprocessor 的基本执行单元)/ CTA(Cooperative Thread Array,协作线程数组)级别的并行度不足
  3. 流水线深度不足,无法完全隐藏内存访问与同步操作的延迟
  4. 处理长序列时,Softmax 与 GEMM 操作的调度策略不够理想

因此,FlashAttention-3 的核心目标是:让注意力计算在 H100 这类 GPU 上能够像大规模 GEMM 运算一样,充分压榨 Tensor Core 的计算潜力,实现接近峰值的算力利用率


4.3 关键原理

1️⃣ 面向 SM90 的 "计算优先" 设计

FA-3 明确假设:

  • 使用 Hopper(H100)
  • 使用 FP16 / BF16
  • 使用 Tensor Memory Accelerator(TMA),这是一个专用的数据移动引擎,旨在加速全局内存和共享内存之间的数据传输。

因此它算是抛弃 "通用性",换取极致性能。


2️⃣ 深度流水化的 Block-wise Attention

FA-3 将 Attention 分解为 高度流水化的 Block 计算

复制代码
Load Q/K/V → Compute QK → Online Softmax → Compute PV

Attention(Q,K,V)=Softmax(QKTd)⏟P⋅V \text{Attention}(Q, K, V) = \underbrace{\text{Softmax}\left(\frac{QK^T}{\sqrt{d}}\right)}_{P} \cdot V Attention(Q,K,V)=P Softmax(d QKT)⋅V

PV 指的是:将 Softmax 后的注意力权重(P)与 Value 矩阵(V)相乘,即 (P \cdot V)。

关键在于:

  • 多 stage pipeline
  • 加载、计算、归约完全重叠
  • 一个 block 还在算,下一 block 已在加载

👉 几乎没有空转的 SM 周期


3️⃣ Online Softmax 的数值稳定极限实现

FA-3 继承并强化了 FA 的核心思想:

Softmax(xi)=exi−m∑jexj−m \text{Softmax}(x_i) = \frac{e^{x_i - m}}{\sum_j e^{x_j - m}} Softmax(xi)=∑jexj−mexi−m

但在 FA-3 中:

  • maxsum 跨 block 增量更新
  • 不存完整 Attention Matrix
  • 严格 O(N) 内存

这是 FlashAttention 系列的理论根基


4️⃣ 极致 Kernel Fusion(真正的 "Flash")

FA-3 做到:

  • QK GEMM + softmax + PV GEMM
  • 在同一个 Kernel 内完成
  • 中间结果永不落 HBM

结果:

  • HBM 访问 ≈ 只读 Q/K/V + 写 O
  • Attention 计算从 "访存密集" → "算力密集"

5️⃣ 更激进的 Warp / CTA 划分

FA-3 使用:

  • 更大的 CTA
  • 更细粒度 Warp 分工
  • 针对 Tensor Core tile 的精准映射

目标实现:Tensor Core 利用率接近理论上限


4.4 FlashAttention-3 vs FA-2(核心差异)

维度 FA-2 FA-3
GPU Ampere / Hopper Hopper only
设计目标 带宽受限最优 算力受限最优
Pipeline 中等 极深流水
TMA 可选 强依赖
通用性 较强 很弱
性能 已很快 H100 上再提升 +20~50%

4.5 适用场景(非常重要)

✅ 强烈适合

  • H100 / SM90
  • 大模型推理(Decoder / Prefill)
  • 长序列(≥ 8K / 16K)
  • FP16 / BF16
  • 对吞吐 / 延迟极度敏感

典型:

  • LLM 推理引擎(vLLM / TensorRT-LLM)
  • 大规模在线服务
  • 高吞吐离线推理

❌ 不适合

  • A100 / V100
  • 小 Batch + 短序列
  • 频繁 Shape 变化
  • 需要高度通用的自定义 Attention

一句话总结 FlashAttention-3:根据论文所述,FlashAttention-3 不是一种新的 "更快的 Attention 算法",而是 "在 H100 硬件上 Attention 操作的近乎极限实现",其以牺牲通用性为代价,旨在彻底释放 Tensor Cores 的计算潜力。


下面从本质 → 原理 → 技术要点 → 量化 → 适用场景与取舍 五个层次,系统且克制地说明 KV Cache 及 KV Cache 量化


5.1 KV Cache 的本质

KV Cache 本质上是一种用空间换时间的、用于自回归推理的注意力状态缓存与复用机制。具体而言,在 Transformer 解码器的自回归推理过程中:

  • 已生成的历史 Token 对应的 Key 和 Value 张量在后续解码步骤中保持固定不变。
  • 而每一步新生成的 Token 对应的 Query 张量,都需要与所有历史 K/V 进行计算。

因此,KV Cache 机制通过将历史 K/V 张量持久化存储于内存中,避免了每一步解码时对它们的重复计算,从而以空间占用换取计算时间的减少。


5.2 KV Cache 解决了什么问题

没有 KV Cache(朴素解码)

  • 每生成 1 个 Token
  • 需要对 全部历史 Token 重新计算 K/V
  • 时间复杂度:O(T²)

有 KV Cache(标准推理)

  • 历史 K/V 只算一次
  • 每步仅计算新 Token 的 Q/K/V
  • 时间复杂度:O(T)

KV Cache 是 大模型能 "实时生成" 的前提条件


5.3 KV Cache 的关键技术原理

1️⃣ 存储内容

每一层 Transformer

  • Key:[num_heads, seq_len, head_dim]
  • Value:同上

2️⃣ 访问模式

  • 只追加(append-only)
  • 只读历史,不修改
  • 高度适合连续内存 / 显存

3️⃣ 性能瓶颈转移

引入 KV Cache 后:

  • 算力瓶颈 → 显存容量 & 带宽瓶颈
  • Decoding 时,推理进入 memory-bound 阶段

5.4 KV Cache 量化的核心难点

KV Cache 量化的本质是: 在尽量不影响注意力分布的前提下,降低 K/V 的存储精度,从而显著减少显存占用和带宽压力。

与权重量化的本质区别

对比项 权重量化 KV Cache 量化
是否静态 ❌ 否(随序列增长)
是否可离线标定 ❌ 否
数值分布 稳定 动态、随上下文变化
误差累积 ✅ 会跨 Token 累积

结论:KV Cache 量化比权重量化更敏感、更困难。


5.5 主流 KV Cache 量化技术

1️⃣ 精度形式

  • FP16 / BF16(基线)
  • INT8(最常见)
  • INT4(激进,需特殊设计和优化)

2️⃣ 量化粒度

  • Per-head
  • Per-channel
  • Per-token(更精细,成本更高)

3️⃣ Scale 处理

  • 动态 scale(on-the-fly)
  • 分 block scale(折中)

5.6 KV Cache 量化的收益

显存

  • INT8:节省 50%
  • INT4:节省 75%

带宽

  • 显著降低 Attention 读带宽
  • 提升 Decoding 阶段吞吐

直接结果

  • 更长上下文
  • 更大的 Batch Size
  • 更多并发请求处理

5.7 误差影响机制(关键认知)

KV Cache 误差主要影响:

  • Attention Score(Q · Kᵀ)

  • 导致:

    • 长上下文相关性衰减
    • 事实性 / 长程一致性下降

误差不是一次性的,而是跨 Token 累积的


5.8 适用场景与取舍建议

强烈推荐

  • 长上下文推理(32K / 128K)
  • 高并发在线服务
  • RAG / Chat / Agent 类应用

谨慎使用

  • 数学 / 代码生成(长精确依赖)
  • 需要严格可复现性任务

工程建议

  • 优先 INT8
  • 仅在显存成为瓶颈时考虑 INT4
  • 可对 Value 量化更激进,Key 更保守

5.9 小结

KV Cache 的本质是用空间换时间的记忆机制:在自回归 Transformer 推理中,将已计算过的注意力 Key、Value 张量缓存起来,避免在生成每个新 Token 时对历史序列反复做重复的线性映射与注意力计算,从而显著降低重复计算的开销。

其原理是:对历史 Token,只需一次前向计算生成 K、V 并存入缓存;后续步骤中,新 Token 只生成自己的 Q,并与缓存中的 K、V 直接做注意力计算。这样计算复杂度从 "随序列长度反复增长的全量重算" 转变为 "增量计算",在长文本生成和低延迟推理中效果尤为明显。

有关 KV Cache 量化,本质上是在尽量不损失模型推理质量的前提下,用更低比特数表示 Transformer 自注意力中的 Key / Value 张量,从而显著降低显存占用并提升推理效率。它不是 "再训练模型" 的核心改动,而是推理阶段的表示压缩与数值近似问题。

相关推荐
_OP_CHEN2 天前
【Coze智能体开发】(二)从 0 到 1 精通 Coze 智能体开发:基础到实战全攻略,新手也能快速上手!
人工智能·大模型·大语言模型·模型优化·扣子平台·智能体开发·智能体调试
bl4ckpe4ch4 天前
LLM提示词,究极提高效率【WIP】
llm·大语言模型·提示词工程·llm提示词
enjoy编程4 天前
Spring AI 大模型工程核心:效率的极限博弈
注意力机制·flashattention·kv cache·pd分离·pagedattention·epd分离·radixattention
一代明君Kevin学长5 天前
RAG如何解决长文档chunking的信息丢失问题?
自然语言处理·大语言模型·检索增强·文本处理·rag
deephub5 天前
Agentic RAG:用LangGraph打造会自动修正检索错误的 RAG 系统
人工智能·大语言模型·rag·langgraph
deephub6 天前
DecEx-RAG:过程监督+智能剪枝,让大模型检索推理快6倍
人工智能·深度学习·大语言模型·agent·剪枝·reg
叶庭云9 天前
一文学会大语言模型权重文件哈希校验 Python 脚本
大语言模型·哈希算法·sha256·权重文件校验·python 脚本
deephub10 天前
Lux 上手指南:让 AI 直接操作你的电脑
人工智能·python·大语言模型·agent
夏日白云11 天前
《PDF解析工程实录》第 12 章|别让模型贴着墙走:为什么加一圈空白,效果反而更好?
图像处理·机器学习·pdf·llm·大语言模型·rag·文档解析