大语言模型基础
2026-02-13
模型
00
请注意,本文编写于 50 天前,最后修改于 5 天前,其中某些信息可能已经过时。

目录

一、模型规模:参数量的意义与代价
1.1 参数量的直观理解
1.2 规模选择的工程权衡
二、精度与量化:用质量换速度的艺术
2.1 数值精度对比

一、模型规模:参数量的意义与代价

1.1 参数量的直观理解

规模参数量显存需求(FP16)典型代表适用场景
小模型1B - 7B2 - 14 GBLLaMA-2-7B, Qwen-7B边缘设备、单卡推理、实时对话
中模型13B - 30B26 - 60 GBLLaMA-2-13B, Baichuan-13B企业级应用、复杂推理
大模型65B - 72B130 - 144 GBLLaMA-2-70B, DeepSeek-67B高精度任务、研究探索
超大模型100B+200 GB+GPT-4(估计 1.8T), PaLM-540B通用人工智能、多模态

关键认知

  • 1B = 10 亿可训练参数,每个参数存储模型从数据中学到的"知识"
  • 参数量 ∝ 模型容量:更多参数 = 更强的模式记忆、更长的上下文关联
  • 参数量 ∝ 计算成本:推理时每个 token 都要与所有参数计算,72B 比 7B 慢 10 倍

1.2 规模选择的工程权衡

展开代码
# 决策框架:在满足质量的前提下,选最小的模型 def select_model(requirements): if latency < 100ms and device == "mobile": return "1B-4B INT4量化" # 端侧优先 if concurrency > 1000 and task == "简单分类": return "7B FP16" # 吞吐优先 if task in ["代码生成", "数学推理", "长文档分析"]: return "13B-72B" # 质量优先 if budget == "unlimited" and research == True: return "72B+ 或 MoE" # 探索性任务 return "7B-13B 性价比最优" # 默认选择

二、精度与量化:用质量换速度的艺术

2.1 数值精度对比

精度每参数字节相对速度相对显存质量损失适用场景
FP324 bytes1×(基准)100%0%训练阶段、精度敏感研究
FP16/BF162 bytes50%<1%推理默认标准
INT81 byte3-4×25%2-5%消费级 GPU、边缘部署
INT4/GPTQ0.5 bytes4-8×12.5%5-10%手机、嵌入式、高并发
NF4/QLoRA~0.5 bytes-12.5%3-7%单卡微调大模型

2.2 量化技术详解

为什么 INT8/INT4 能工作?

展开代码
# 核心思想:把浮点权重映射到整数范围 # FP16 权重范围: [-0.5, 0.5, 1.2, -1.5, ...] # 量化后 INT8: [-64, 64, 154, -192, ...] # 缩放因子 scale = 128/1.5 ≈ 85.3 # 推理时反量化:INT8 × scale ≈ 原始 FP16 # 损失来源:小数部分被四舍五入,极端值被截断

主流量化方案

方案特点命令示例
GPTQ逐层量化,校准数据少,4bit 主流python -m gptq.llama --wbits 4
AWQ激活感知,保护重要权重,精度更高python -m awq.entry --w_bit 4
GGUF/llama.cppCPU 友好,支持多种量化组合./quantize model.gguf Q4_K_M
SmoothQuant激活-权重联合量化,INT8 推理最优集成于 vLLM、TensorRT-LLM

2.3 显存计算公式

展开代码
def estimate_memory(params_b, precision="fp16", batch=1, seq_len=2048, kv_cache=True): """ 快速估算模型推理显存需求 """ bytes_per_param = { "fp32": 4, "fp16": 2, "bf16": 2, "int8": 1, "int4": 0.5 }[precision] # 权重显存 model_memory = params_b * 1e9 * bytes_per_param / (1024**3) # GB # KV-Cache 显存(每 token 每头需要 2×hidden_dim×bytes) # 简化估算:约 2 × seq_len × batch × hidden_dim × layers × bytes kv_memory = 0 if kv_cache: # 以 LLaMA-7B 为例: hidden=4096, layers=32, heads=32 hidden, layers, heads = 4096, 32, 32 kv_per_token = 2 * hidden * bytes_per_param # K + V kv_memory = seq_len * batch * layers * kv_per_token / (1024**3) # 激活值、临时缓冲(约 10-20% 额外) overhead = model_memory * 0.2 total = model_memory + kv_memory + overhead return { "model_weights": round(model_memory, 2), "kv_cache": round(kv_memory, 2), "overhead": round(overhead, 2), "total_gb": round(total, 2), "recommend_gpu": f"A100-{80 if total > 40 else 40}GB" if total > 20 else "RTX-4090-24GB" } # 使用示例 print(estimate_memory(7, "fp16", batch=16, seq_len=4096)) # {'model_weights': 13.0, 'kv_cache': 16.0, 'overhead': 2.6, 'total_gb': 31.6, 'recommend_gpu': 'A100-40GB'}

三、训练三阶段:从"会说话"到"懂规矩"

3.1 预训练(Pre-training):海量数据灌入

展开代码
数据:互联网公开文本(Common Crawl、Books、Wiki、Code) 规模:1T - 10T tokens(1 token ≈ 0.75 英文单词) 目标:预测下一个词(Next Token Prediction) 输出:基础模型(Base Model),会说人话但不懂指令

关键工程挑战

  • 数据清洗:去重、过滤垃圾、去毒(toxic content)
  • 分布式训练:千卡级 GPU 集群,3D 并行(数据+张量+流水线)
  • 稳定性:loss 突跳、梯度爆炸、硬件故障容错

3.2 监督微调(SFT):学会"听指令"

展开代码
数据:人工编写的高质量(指令,回答)对,通常 10万 - 100万条 目标:最大化回答质量(而非预测下一个词) 输出:指令模型(Instruct Model),能按格式回答问题

典型数据集

  • Alpaca(52k 指令,开源标杆)
  • ShareGPT(真实 ChatGPT 对话)
  • 企业私有数据(客服记录、内部文档)

3.3 对齐(RLHF):价值观与安全

展开代码
数据:人对多个回答的排序偏好(A > B > C) 方法: 1. 训练奖励模型(Reward Model):学会打分 2. PPO 强化学习:让策略模型生成高分回答 输出:对齐模型(Aligned Model),有用、无害、诚实

替代方案:DPO(Direct Preference Optimization)

  • 跳过奖励模型,直接用偏好数据优化
  • 更简单、更稳定,效果接近 RLHF

四、模型架构:Transformer 一统天下

4.1 核心组件:自注意力机制

展开代码
# 伪代码:Scaled Dot-Product Attention def attention(Q, K, V, mask=None): """ Q: Query (batch, seq, dim) - "我要查什么" K: Key (batch, seq, dim) - "我有什么信息" V: Value (batch, seq, dim) - "信息的内容" """ scores = Q @ K.T / sqrt(dim) # 相似度打分 if mask: scores = scores.masked_fill(mask, -inf) # 因果掩码(只看前面) weights = softmax(scores, dim=-1) # 归一化为概率 output = weights @ V # 加权求和 return output, weights # 输出 + 注意力权重(可可视化)

直观理解

  • 读句子时,每个词都"回头看"所有前面的词
  • "它"这个词,注意力权重在"猫"上最高 → 模型学会指代消解

4.2 GPT vs BERT:两种路线

特性GPT(生成式)BERT(理解式)
结构Decoder-only(因果掩码)Encoder-only(双向 attention)
训练目标预测下一个词掩码语言模型(MLM)
代表GPT-4, LLaMA, ChatGLMBERT, RoBERTa, ERNIE
擅长文本生成、对话、代码分类、NER、语义搜索
输入输出前缀 → 续写完整句子 → 向量表示

现代趋势:GPT 架构一统江湖,BERT 类模型逐渐边缘化。

4.3 KV-Cache:推理加速的关键

问题:生成第 N 个 token 时,前 N-1 个 token 的 K/V 被重复计算

解法:把算过的 K/V 存起来,只算新的

展开代码
# 推理时的优化 past_kvs = [] # 缓存列表 for i in range(max_length): # 只输入最新的 1 个 token,但 K/V 是完整的 logits, new_kvs = model.forward( input_ids=[new_token], past_key_values=past_kvs # 传入缓存 ) past_kvs.append(new_kvs) # 更新缓存 # 计算量从 O(N²) 降到 O(N)

显存代价:缓存随序列长度线性增长,长文本需小心 OOM。


五、推理加速:从实验室到生产线

5.1 批处理策略演进

策略原理吞吐提升延迟适用
静态批(Static Batching)等够 N 条一起发3-5×高(等凑齐)离线任务
动态批(Dynamic Batching)有就来,超时未满也发2-4×通用 API
连续批(Continuous Batching / In-flight Batching)每完成一条立即补新,流水线不停5-10×高并发在线服务

vLLM 的 PagedAttention:把 KV-Cache 分页管理,像操作系统管理内存,支持高效的连续批。

5.2 投机解码(Speculative Decoding)

展开代码
小模型(草稿模型):快速生成 3-5 个 token 候选 大模型(目标模型):一次验证,接受或回滚 效果:小模型算 5 步 ≈ 大模型算 1 步,整体提速 30-50% 条件:小模型质量不能太差(通常用 7B 草拟,70B 验证)

5.3 其他加速技术

技术原理收益
FlashAttentionIO 感知的 attention 算法,减少 HBM 读写2-4× 速度,省显存
Tensor Parallel (TP)单层网络切开,多卡同时算单节点线性扩展
Pipeline Parallel (PP)不同层放不同卡,流水线接力跨节点扩展
量化推理INT8/INT4 kernel 优化2-4× 吞吐

六、高效微调:小资源玩转大模型

6.1 LoRA:低秩适配

展开代码
# 原始权重 W (d×d),冻结不动 # 只训练两个小子矩阵 A (d×r), B (r×d),r << d(通常 r=8,16,64) h = W @ x + (B @ A) @ x # 前向:原始输出 + LoRA 分支 # 训练参数:2×d×r vs 原始 d×d,节省 99.9%(当 r=16, d=4096)

优势

  • 显存省 3×(只存优化器状态到 A,B)
  • checkpoint 小(MB 级 vs GB 级)
  • 多任务切换时,换 LoRA 权重即可,基座不动

6.2 QLoRA:极致压缩

展开代码
4-bit Normal Float 量化基座模型 + Paged Optimizer(分页优化器,避免梯度 checkpoint 碎片) + LoRA 微调 = 单张 RTX-4090-24GB 微调 70B 模型

关键参数

展开代码
python qlora.py \ --model_name_or_path meta-llama/Llama-2-70b \ --bits 4 \ --lora_r 64 \ --lora_alpha 16 \ --max_memory 24GB \ --per_device_train_batch_size 1

七、评估指标:如何说"这个模型好"

指标定义测什么好模型的值
Perplexity (PPL)模型预测下一个词的困惑度语言建模能力越低越好(7B 模型 ~ 10-15)
BLEU/ROUGEn-gram 重叠度翻译、摘要越高越好
HumanEval代码通过率编程能力GPT-4 ~ 67%, CodeLlama-34B ~ 48%
MMLU多学科选择题知识广度GPT-4 ~ 86%, LLaMA-2-70B ~ 69%
首 Token 延迟 (TTFT)用户输入 → 首个输出 token响应速度< 100ms(实时交互)
Time Per Output Token (TPOT)每生成一个 token 的时间流畅度< 50ms(人类阅读速度)
吞吐 (Throughput)每秒输出 token 数并发能力越高越好,决定成本

八、生态工具:站在巨人肩膀上

8.1 Hugging Face:模型界的 GitHub

展开代码
# 一行代码下载模型 from transformers import AutoModelForCausalLM, AutoTokenizer model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-chat-hf") tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-chat-hf") # 推理 inputs = tokenizer("The future of AI is", return_tensors="pt") outputs = model.generate(**inputs, max_new_tokens=50) print(tokenizer.decode(outputs[0]))

关键服务

  • Model Hub:10万+ 预训练模型
  • Datasets:数万数据集
  • Spaces:模型 Demo 托管
  • Inference API:即开即用的模型推理端点

8.2 vLLM:生产级推理引擎

展开代码
# 启动服务 python -m vllm.entrypoints.openai.api_server \ --model meta-llama/Llama-2-7b \ --tensor-parallel-size 2 \ --dtype half # 客户端调用(OpenAI 兼容 API) curl http://localhost:8000/v1/completions \ -H "Content-Type: application/json" \ -d '{ "model": "meta-llama/Llama-2-7b", "prompt": "San Francisco is a", "max_tokens": 7 }'

核心特性

  • PagedAttention 高效 KV-Cache 管理
  • 连续批处理(Continuous Batching)
  • 张量并行、流水线并行
  • OpenAI API 兼容

8.3 DeepSpeed:微软的训练加速库

展开代码
# ZeRO-3:把优化器状态、梯度、参数都切分到多卡 deepspeed --num_gpus=8 train.py \ --deepspeed_config ds_config_zero3.json # 关键配置 { "zero_optimization": { "stage": 3, # ZeRO-3:全分片 "offload_optimizer": { # CPU/NVMe 卸载 "device": "cpu", "pin_memory": true } }, "train_batch_size": "auto", "train_micro_batch_size_per_gpu": "auto" }

能力

  • ZeRO(零冗余优化器):省显存 4-8×
  • 3D 并行(数据+张量+流水线)
  • MoE(专家混合)训练支持

九、选型决策树

展开代码
开始 │ ▼ 需要训练新模型? ──Y──→ 数据量 > 1B tokens? │ │ N Y ──→ DeepSpeed + 千卡集群 │ │ ▼ N ──→ LoRA/QLoRA 微调 需要推理服务? │ Y ──→ 并发 > 1000 QPS? │ │ │ Y ──→ vLLM + TensorRT-LLM + 连续批 │ │ │ N ──→ HuggingFace TGI / 简单 transformers │ ▼ 端侧部署(手机/边缘)? │ Y ──→ llama.cpp (GGUF) / MLC-LLM / 高通 QNN │ ▼ 结束

十、关键术语速查表

术语一句话解释
Token模型处理的最小单位,1 token ≈ 0.75 英文词 / 0.5 汉字
Context Length模型能"记住"的上下文长度,如 4K, 32K, 128K
Temperature采样随机性,0=确定,1=创意,>1=混乱
Top-p / Nucleus Sampling只从累积概率前 p% 的 token 中采样
Repetition Penalty惩罚重复 token,防止车轱辘话
System Prompt全局指令,设定模型角色和行为准则
Few-shot Prompting给几个例子,让模型模仿
Chain-of-Thought (CoT)"让我们一步步想",提升推理能力
RAG (Retrieval-Augmented Generation)外挂知识库,解决幻觉和时效性

本文作者:zzz

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!