Arganzheng's Blog

stay hungry, stay foolish

多模态(01):视觉编码器:CLIP、SigLIP 与自监督 ViT

Vision Encoders: CLIP, SigLIP and Self-Supervised ViTs

一个视觉语言模型(vision-language model,VLM——能看图回答问题的语言模型,如 GPT-4o、Qwen2.5-VL)的第一步是把一张图变成几百个向量。语言模型只认”一串向量”:一句话先被切成 token、每个 token 查表变成一个向量,再送进 Transformer;图片没有”词”,要先有一个部件把像素变成同样形状的一串向量,这个部件叫视觉编码器(vision encoder)。做这件事的几乎总是一个预训练好的 ViT——LLaVA 用 CLIP ViT-L/14,Qwen2-VL 用自己训的 ViT(从 DFN 的 CLIP 初始化),InternVL 用 InternViT-6B,Gemma 3 与 PaliGemma 用 SigLIP...

多模态:从视觉编码器到扩散模型(总纲)

Multimodal Models: From Vision Encoders to Diffusion

内容简介 《多模态:从视觉编码器到扩散模型》是一组共九篇正文加一篇总结的系列文章,对应《AI 算法工程师学习地图》的第 L7 层。它面向已经理解 Transformer 与 LLM(L4)、做过后训练(L5)的读者,回答两个问题:图片、视频、语音怎么进入一个语言模型,以及图像与视频的生成为什么是另一套数学。 “多模态”下面有两条几乎独立的线。理解线把其他模态编码成 token 送进 LLM:一个视觉编码器(ViT)把图片变成几百个向量,一个 connector 把它们对齐到 LLM 的输入空间,LLM 像处理文本一样处理它们——这条线是 LLM 的扩展,用的是 L4、L5 的全部方法,新增的是编码器、connector 与对齐训练。生成线从噪声出发逐步去噪得到图...

高效推理与压缩(07):系列总结与通关自测

Efficient Inference and Model Compression: Series Recap and Final Self-Test

六篇正文回答了一个问题:不改硬件、不改推理引擎,怎么让同一个模型更快、更小、更便宜——以及每种办法让模型的输出改变了多少。第一篇讲从分布里怎么取一个 token,第二篇讲唯一不改变分布的加速(投机解码),第三、四篇讲权重与激活的低比特表示(PTQ 与 QAT),第五篇讲训好之后还能对 KV 做什么,第六篇讲删掉一部分参数之后怎么恢复、以及一个 70B 怎么变成一个能用的 8B。六篇合起来,是《Transformer 与 LLM》那条成本公式的算法侧。 本文不讲新内容,做三件事:把六篇压成一张表与六段回顾,把贯穿六篇的几条线拎出来,然后给一套三段式的通关自测——判断与计算、跨篇综合、面试题。各篇末尾的自测检验的是”这一篇读懂了没有”,这里检验的是”六篇能不能连起来用...

高效推理与压缩(06):剪枝、深度缩放与小模型配方

Pruning, Depth Scaling and How Small Models Are Made

前五篇改的是表示(量化)、过程(解码、投机)与缓存(KV),模型的参数数量与结构没有变。最后一条线改参数的数量:删掉一部分权重、一部分 head、一部分层,让模型本身变小。剪枝是最老的压缩方法(LeCun 等 1989 的 Optimal Brain Damage),在 CNN 时代成熟,在 LLM 上重新变得重要——因为”一个 70B 怎么变成一个能用的 8B”这个问题有了新的答案:不是从头训一个 8B,而是从 70B 剪出来再蒸馏,用十分之一的 token 达到相近的效果。 剪枝与前几篇的根本区别是:剪掉的东西不能靠更好的舍入找回来,必须靠训练恢复。所以剪枝几乎总是”剪枝 + 蒸馏”的组合(L5 第七篇的方法在这里是工具),它的算力账是”剪枝 + 恢复的 to...

高效推理与压缩(05):KV cache 压缩:量化、驱逐与稀疏 attention

KV Cache Compression: Quantization, Eviction and Sparse Attention

04 系列第三篇算过 KV cache 的账:Llama-3-70B 在 128K 上下文下每个请求的 KV 是 40 GiB(GQA 之后)——权重 141 GB 的近三成,一张 80 GB 卡的一半;decode 每步要把它全部读一遍,单请求 128K 时 KV 读取已是权重的 30%,batch 到 4 就与权重相当(每 token 320 KiB,\(141\text{ GB}/320\text{ KiB} \approx 43\) 万 token 与权重打平),长上下文 + 并发下 KV 读取超过权重读取成为 decode 的主要流量。结构级的解法——GQA 把 KV 头数除以 8、MLA 把每 token 的 KV 压到 576 维——在训练时就决定了,...

高效推理与压缩(04):量化感知训练、低比特与量化模型的评测

Quantization-Aware Training, Extreme Low-Bit and How to Evaluate a Quantized Model

上一篇的 PTQ 在 4 bit 权重上把困惑度损失压到 0.1–0.3,在 W8A8 上接近无损。再往下——3 bit、2 bit、三值权重,或者激活也到 4 bit、KV 也到 4 bit——逐层最小化输出误差的代理目标不够了:误差太大,后面的层”消化”不掉,最终 loss 的退化不再与逐层误差成比例。这时需要训练参与:让模型在知道自己会被量化的前提下学习,把量化误差学回去一部分。这是量化感知训练(QAT)。 QAT 的核心技术问题只有一个:量化的 round 函数梯度处处为零(或无定义),怎么反向传播?答案是直通估计器(STE)——一个数学上”错”但实践上有效的技巧。围绕它有一族方法:让 scale 可学习(LSQ)、只在训练末段做 QAT、用全精度的自己做...

高效推理与压缩(03):训练后量化:误差模型、GPTQ、AWQ 与旋转

Post-Training Quantization: Error Models, GPTQ, AWQ and Rotation

量化是把权重(有时也把激活)从 16 bit 浮点变成 4 bit 或 8 bit 整数。04 系列第七篇从 Roofline 的角度讲了它的收益:decode 是 memory-bound 的,权重字节除以 4,每步时间除以接近 4——但只在 \(B \lesssim \text{ridge}/4\) 的区间内;也介绍了 GPTQ 的更新公式、AWQ 的缩放形式、SmoothQuant 的迁移因子。那一篇回答的是”量化省多少”。 这一篇回答”量化丢多少、丢在哪、怎么少丢”。量化误差是本系列里最可控的一种分布改变:它有一个清楚的统计模型,每种方法都在这个模型下最小化一个明确的目标,而且方法之间的差别可以精确地说出来——RTN 什么都不管,GPTQ 补偿输出误差,A...

高效推理与压缩(02):投机解码:草稿、接受率与树

Speculative Decoding: Drafters, Acceptance Rates and Draft Trees

投机解码是本系列里唯一不改变输出分布的方法。04 系列第七篇已经完成了它的基础部分:拒绝采样保证输出严格等于目标分布的证明、期望接受长度 \(\frac{1 - \alpha^{\gamma+1}}{1 - \alpha}\)、以及 Roofline 决定的收益区间——验证 \(\gamma + 1\) 个 token 几乎免费的条件是 \(B(\gamma + 1) \lesssim \text{ridge}\),超过就亏本。那一篇把草稿方案列成了一张表(独立小模型、Medusa、EAGLE、n-gram、MTP),给了各自”通常报告”的接受率区间。 这一篇从那张表往下挖。加速比只由两个量决定——接受率 \(\alpha\) 与草稿成本 \(c\)——而这两个量...

高效推理与压缩(01):解码策略、采样与约束生成

Decoding Strategies: Sampling, Truncation, Penalties and Constrained Generation

模型的一次前向给出的不是一个 token,是一个 \(V\) 维的分布。从这个分布里取一个 token 的规则——greedy、beam、temperature、top-k、top-p、min-p、重复惩罚、语法约束——统称解码策略。它不改变模型的任何参数,不改变一次前向的成本,但决定了用户看到的每一个字、决定了评测报出的每一个数字、也决定了 RL 训练时策略探索到什么。同一个模型在 GSM8K 上,greedy 报 78、temperature 0.6 采样报 76、多次采样投票报 85——三个数字都”对”,说的是不同的事。 这一篇放在系列开头,是因为后面五篇都要回答”这个方法让输出分布变了多少”,而采样参数本身就在改分布。不先把”从分布里怎么取”说清楚,量化前...

高效推理与压缩(算法侧):解码、投机、量化与 KV(总纲)

Efficient Inference and Model Compression: The Algorithm Side

内容简介 《高效推理与压缩(算法侧)》是一组共六篇的系列文章,对应《AI 算法工程师学习地图》的第 L6 层。它面向已经理解 Transformer 的成本结构(L4,《Transformer 与 LLM》)、并且做过或准备做后训练(L5,《后训练》)的读者,回答的是一个部署前必然遇到的问题:不改硬件、不改推理引擎,怎么让同一个模型更快、更小、更便宜——以及每种办法让模型的输出改变了多少。 “推理优化”这个词下面混着两类完全不同的东西。一类改变模型或解码过程:量化把权重从 16 bit 变成 4 bit,投机解码让一次前向产出多个 token,KV 驱逐丢掉一部分缓存,剪枝删掉一部分参数。另一类改变调度与内存管理:PagedAttention、continuou...

×