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

1.1 参数量的直观理解

规模 参数量 显存需求(FP16) 典型代表 适用场景
小模型 1B - 7B 2 - 14 GB LLaMA-2-7B, Qwen-7B 边缘设备、单卡推理、实时对话
中模型 13B - 30B 26 - 60 GB LLaMA-2-13B, Baichuan-13B 企业级应用、复杂推理
大模型 65B - 72B 130 - 144 GB LLaMA-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 数值精度对比

精度 每参数字节 相对速度 相对显存 质量损失 适用场景
FP32 4 bytes 1×(基准) 100% 0% 训练阶段、精度敏感研究
FP16/BF16 2 bytes 50% <1% 推理默认标准
INT8 1 byte 3-4× 25% 2-5% 消费级 GPU、边缘部署
INT4/GPTQ 0.5 bytes 4-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.cpp CPU 友好,支持多种量化组合 ./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, ChatGLM BERT, 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 其他加速技术

技术 原理 收益
FlashAttention IO 感知的 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/ROUGE n-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) 外挂知识库,解决幻觉和时效性

本文为同步搬运内容,原创首发于个人独立博客网站:https://www.zheng-chang-ren.xyz
平台更新优先级说明:所有技术笔记、实验教程、踩坑总结均会优先发布、长期维护于个人独立博客;CSDN 仅作为辅助分发渠道。
若想查阅全部完整文集、获取最新首发内容,建议收藏并优先访问我的个人博客网站。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐