大模型原理
大模型技术综述:本文系统介绍了多模态大模型的技术架构与应用场景,包括GPT-4、Claude3等主流模型分类。重点解析了Transformer架构的预训练机制和语言统计规律学习原理,详细阐述了知识蒸馏和量化两大核心技术。同时深入探讨了vLLM推理引擎的优化策略,包括PagedAttention和KVCache等关键技术创新,为提升大模型推理效率提供了解决方案。文章涵盖从模型训练到部署落地的全流程技
一、模型分类
- 多模态大模型:GPT-4、Claude 3、Gemini、Qwen-VL
- 任务专用模型:Whisper(仅语音转文本)、Stable Diffusion(仅图像生成)
按技术架构分:
- Transformer 架构大模型
- 混合专家模型(MoE)
- 传统神经网络模型
按用途分:
- 生成模型:找特征分布,如 大语言模型
- 判别模型:找差异,基于神经网络
大模型选型依据:
- 中文适配:针对中文语料优化,中文问答、多轮对话能力更优。
- 成本:开源,部署成本低,量化后对显存要求低,适合企业内部部署。
- 上下文窗口:支持 32k Token 长上下文,适合客服多轮对话 / 长文本查询(如订单详情)
二、本质
大模型并非 “理解” 语言 或 “拥有” 知识,而是通过Transformer 架构捕捉语言的统计规律(词与词的关联、上下文逻辑和顺序),通过大规模预训练将海量文本中的模式(语法、语义、常识) “固化” 到模型参数中,再通过自回归生成对新输入做出 “符合模式的响应”。数据越多、参数越大、训练越充分,模型的语言理解和生成能力越强。
三、训练过程
1、预训练
让模型学习通用能力,学习语言的通用规律(语法、语义、常识),不针对具体任务。
海量无标注文本 通过 “自监督学习” 让模型学习预测规律,最常用的是因果语言建模—— 即 “给定前文,预测下一个词”。让模型逐渐掌握 “什么样的上下文 该接什么样的词”,进而学会 语法、语义、常识。
2、微调
让模式适配具体“专业型”任务。
用小规模有标注的数据(如 “问题 - 答案” 对、“原文 - 译文” 对),“修正” 预训练模型的参数,让模型学会 “根据任务要求输出结果”。
- 全参数微调
- 参数高效微调(PEFT):仅调整模型的部分参数(如 LoRA、Prefix Tuning),在保证效果的同时降低成本。提供Trainer类简化自定义数据集上的模型训练。
四、推理过程
用户输入(Prompt)→ token化 → 转换为词向量 → Transformer理解输入 → 逐词生成结果(自回归生成)
- 模型无法直接处理文字,需要先将输入文本拆成 “Token”(模型的基本处理单位);
- token转换为词向量;使用词嵌入算法(Embedding)将每个词转换为一个词向量;词向量的维度(512、1024、2048维)
- 词向量会传入 Transformer 编码器、解码器,通过 “自注意力 + 前馈神经网络” 处理;编码器会接收一个向量作为输入。编码器首先将这些向量传递到 Self-Attention 层,然后传递到前馈网络,最后将输出传递到下一个编码器。
- 模型的输出是 “逐词生成” 的,核心逻辑是 “用已生成的内容预测下一个词”;
为了让生成结果更 “可控”(如避免重复、符合逻辑),会引入采样策略(如 Top-K 采样、Top-P 采样)或调整 “温度(Temperature)”—— 温度越低,生成结果越确定(重复率可能高);温度越高,生成结果越随机(可能出现逻辑错误)。
大模型一般参数量都比较大(几十亿、几百亿)、计算资源要求高、内存占用大,因此在资源有限的服务器上难以部署,为解决这一矛盾,知识蒸馏(KD) 和量化(Quantization) 成为大模型高效化的核心技术。
五、知识蒸馏
(一)核心思想
利用一个性能优异的大模型(教师模型) ,将其蕴含的 “知识” 迁移到一个结构更精简的小模型(学生模型) 中,使小模型在参数规模和计算量大幅降低的同时,性能接近教师模型。
“知识”:不仅仅是教师模型最终的预测结果(硬标签),更重要的是其输出的概率分布(软标签)。软标签包含了丰富的“暗知识”,例如不同类别之间的相似性关系。
(二)核心原理:“温度软化” 与 “双损失训练”
1、教师模型预训练:先训练一个高性能的教师模型(如 BERT-Base)。
2、学生模型初始化:设计一个结构更小的学生模型(如层数减半、隐藏层维度降低的 BERT-Tiny)。
3、软化输出与蒸馏训练:
- 引入温度参数(Temperature) ,对教师模型的 softmax 输出进行 “软化”
- 学生模型同时学习两个目标:
- 软损失(Soft Loss):学生模型的软化输出与教师模型的软化输出的 KL 散度,学习教师的 “深层知识”。
- 硬损失(Hard Loss):学生模型的原始输出与真实标签的交叉熵,保证基础任务性能。
- 总损失为两者的加权和。
(三)常用蒸馏的方法
方法类型 | 代表方法 | 核心思路 |
---|---|---|
输出层蒸馏 | Hinton 经典 KD | 仅利用教师软化后的输出分布,适用于简单分类任务。 |
中间层蒸馏 | FitNets | 让学生模型的中间层特征映射 “模仿” 教师模型,通过 L2 损失对齐特征。 |
注意力蒸馏 | Attention Distillation | 对齐教师与学生的注意力权重(如 BERT 的自注意力矩阵),保留语义关联能力。 |
对比蒸馏 | Contrastive KD | 将教师模型的特征作为 “正样本”,其他样本作为 “负样本”,增强学生的特征区分度。 |
任务适配蒸馏 | TinyBERT | 针对 NLP 任务(如问答、文本分类),分 “预训练蒸馏” 和 “任务蒸馏” 两阶段优化。 |
缺点:依赖教师模型;训练复杂;主要减少参数数量,对单参数存储开销优化弱,压缩有限。
六、量化
(一)核心思想
将模型中高精度的数值(如 FP32、FP16)转换为低精度数值(如 INT8、INT4),通过减少每个参数的比特数,损失少量精度 降低模型存储占用和计算开销。确定一个缩放因子(scale) 和零点(zero point),将FP32的数值范围线性映射到INT8等低精度的数值范围。
高精度量化(FP16、TF32),低精度量化(INT8),极低精度量化(INT4、INT2)
(二)量化方法
训练后量化(PTQ):
- 流程:在FP32模型训练完成后,只需少量校准数据(无需标签)来观察各层激活值的分布范围,从而确定最佳的S和Z参数,然后直接再对权重和激活值进行量化,无需重新训练。
- 关键步骤:校准(Calibration)—— 用少量验证集数据统计权重 / 激活值的分布(如 Min-Max、KL 散度),确定量化范围,减少精度损失。
量化感知训练(QAT):
在模型训练(或微调)的前向传播中模拟量化误差(加入“伪量化”节点),但在反向传播中仍然使用高精度权重更新。让模型“提前适应”量化会带来的误差。
(三)如何减少量化误差?
量化的核心挑战是精度损失,需通过以下策略缓解:
- 范围校准:用 Min-Max(适合权重)或 KL 散度(适合激活值)确定量化范围,避免数值溢出或欠拟合。
- 分层量化:不同层对量化的敏感度不同(如 Transformer 的 FFN 层比注意力层更耐量化),对敏感层用更高位宽(如 INT8),非敏感层用低位宽(如 INT4)。
- 混合精度量化:权重用 INT8,激活值用 FP16,平衡精度与效率(如 MobileNetV2 的量化方案)。
- 零点偏移(Zero Point):通过非对称量化引入零点偏移,更好适配激活值的非对称分布(如 ReLU 输出的非负分布)。
(四)缺点
-
精度损失:低精度表示会引入舍入误差,可能导致模型性能下降。
-
溢出风险:如果激活值分布中有极端 outlier,低精度范围可能无法表示,导致严重误差。
七、模型推理
(一)vLLM
专注于大模型推理加速的开源引擎,通过先进的调度算法和 CUDA 优化,大幅提升 LLM 的吞吐量。优化了大模型内存碎片化、吞吐量受限阻塞 的问题。
核心优势:
1、PagedAttention (分页注意力)机制:将每个序列的 KV Cache 分割成固定大小的 “块”(Block),每个块包含固定数量的 token;用 “页表” 记录块与序列的映射关系,页表可快速定位每个序列的完整 KV 数据,实现灵活的内存管理,让内存分配更紧凑。解决 KV 缓存(Key-Value Cache)的碎片化问题,内存利用率提升 2-4 倍,支持更长文本生成。
2、支持 连续批处理:不再等待整个批次完成后再处理新请求,而是动态插入新请求到空闲 “slot” 中,大幅减少请求等待时间(尤其对短序列)。并行处理不同长度的请求,吞吐量比 Hugging Face 原生实现高 10-20 倍。
3、支持 Prefix Caching:缓存对话历史的 KV 数据,避免重复计算。
from vllm import LLM, SamplingParams
# 多卡并行,通过 `tensor_parallel_size` 参数分配多张 GPU
llm = LLM(model="deepseek-moe-16b-chat", tensor_parallel_size=2)
# 批量问题
prompts = ["Hello, my name is", "What is the meaning of life?"]
# 设置采样参数
sampling_params = SamplingParams(temperature=0.8, top_p=0.95)
# 批量推理
outputs = llm.generate(prompts, sampling_params)
(二)KV Cache
是优化LLM推理速度的关键技术,核心是 缓存已计算的Key 和 Value,避免重复计算。
- 在自回归生成中,生成第 t 个token时,需要计算它与前 t-1 个token的注意力,
- 若不缓存,每次生成新 token,都需要重新计算 所有历史token的 K 和 V ,复杂度O(t平方);
- 而 KV Cache 会存储前 t-1 个token的 K 和 V,生成第 t 个token时,仅需计算 第 t 个token的Q,再与缓存的K/V计算注意力,复杂度降至O(t);
代价是内存占用增加(存历史KV),长序列下 需要权衡缓存大小和性能。
更多推荐
所有评论(0)