欢迎光临
我们一直在努力

大语言模型基础

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

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 仅作为辅助分发渠道。 若想查阅全部完整文集、获取最新首发内容,建议收藏并优先访问我的个人博客网站。

赞(0)
未经允许不得转载:171主机测评 » 大语言模型基础
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址