选对计算资源,是 AI 落地的第一道门槛。
引言
"我的电脑能跑大模型吗?" "为什么买了昂贵的显卡,模型却跑不起来?" "程序会自动选择 CPU 还是 GPU 吗?"
这些问题困扰着很多 AI 开发者。本文将从底层原理出发,彻底讲清楚大模型推理时 CPU、GPU、内存三者如何分工协作,以及谁来决定用哪个。
一、先看本质:三大硬件角色
1.1 用一个比喻理解
| 硬件 | 比喻 | 特点 |
|---|---|---|
| CPU | 项目经理 | 核心少(8-64核),单核强,擅长复杂逻辑 |
| GPU | 万人军队 | 核心多(3000-10000+),单核弱,擅长并行计算 |
| 内存(RAM) | 仓库 + 输油管 | 容量大,带宽中等,模型数据的"第二仓库" |
1.2 三种"内存"别搞混
| 术语 | 全称 | 位置 | 作用 | 典型容量 |
|---|---|---|---|---|
| VRAM | 显存 | 显卡上 | GPU 计算专用 | 8-80GB(固定不可扩展) |
| RAM | 系统内存 | 主板上 | CPU 直接访问 | 16-256GB(可扩展) |
| Cache | 高速缓存 | CPU/GPU 内部 | 极速暂存 | 几十MB |
关键结论:
- GPU 计算依赖 VRAM,模型层若不在 VRAM 中,GPU 无法直接计算
- CPU 计算依赖 RAM
- 混合推理的核心 = 如何在 VRAM 和 RAM 之间高效搬运数据
1.3 核心差异对比
| 指标 | CPU | GPU |
|---|---|---|
| 核心数 | 8-64 | 3000-10000+ |
| 单核性能 | 极强 | 较弱 |
| 并行能力 | 有限 | 极强 |
| 内存带宽 | 50-100 GB/s | 500-3000 GB/s |
| 内存容量 | 系统内存(可扩展) | 显存固定(8-80GB) |
这就是 GPU 快 20-50 倍的核心原因:带宽差距巨大!
二、先算一笔账:你的模型需要多少空间?
2.1 模型参数与存储占用速查
| 模型 | 参数量 | FP16 | INT8 | INT4 |
|---|---|---|---|---|
| Qwen2.5-1.5B | 1.5B | ~3GB | ~1.5GB | ~0.8GB |
| Qwen2.5-7B | 7B | ~14GB | ~7GB | ~4GB |
| Qwen2.5-14B | 14B | ~28GB | ~14GB | ~8GB |
| Qwen2.5-32B | 32B | ~64GB | ~32GB | ~16GB |
| Qwen2.5-72B | 72B | ~144GB | ~72GB | ~36GB |
计算公式:
- FP16: 参数量 × 2 bytes × 1.2(额外开销)
- INT4: 参数量 × 0.5 bytes × 1.2
2.2 实际存储估算示例
Qwen2.5-7B,FP16,4096 上下文:
| 项目 | 占用 | 说明 |
|---|---|---|
| 模型权重 | 14GB | 主体 |
| KV Cache | ~4GB | 上下文缓存 |
| 激活值 + 预留 | ~4GB | 中间结果 + 框架开销 |
| 总计 | ~22GB | → 需要 24GB 显存或内存 |
三、核心问题:内存如何决定"谁来计算"?
这是很多人最困惑的问题:CPU 和 GPU 是自动切换还是手动选择?
答案是:框架根据"显存(VRAM)"和"系统内存(RAM)"的容量关系,自动执行"卸载(Offloading)"策略。
3.1 三种运行模式
┌─────────────────────────────────────────────────────────────┐
│ 模式一:全 GPU 模式(最快) │
│ 条件:模型大小 < 显存(VRAM) │
│ 行为:整个模型加载到显存 │
│ 内存角色:仅作临时中转,推理时几乎不参与 │
├─────────────────────────────────────────────────────────────┤
│ 模式二:混合模式(CPU+GPU 协同) │
│ 条件:显存 < 模型大小 < 显存+内存 │
│ 行为:框架自动分层,放得下的层在 GPU,放不下的在内存 │
│ 内存角色:成为模型的"第二仓库",容量决定能跑多大的模型 │
├─────────────────────────────────────────────────────────────┤
│ 模式三:纯 CPU 模式或报错 │
│ 条件:模型大小 > 显存+内存 │
│ 行为:使用硬盘 Swap(极慢)或直接 OOM 崩溃 │
│ 内存角色:唯一存储地,容量是硬门槛 │
└─────────────────────────────────────────────────────────────┘
3.2 实战案例:70B 模型如何运行?
模型大小:70B INT4 ≈ 40GB
| 配置 | 结果 |
|---|---|
| RTX 4090 (24GB) + 32GB RAM | ✅ 24GB 显卡 + 16GB 内存,可以运行,速度中等 |
| RTX 4090 (24GB) + 16GB RAM | ❌ 内存不够,大概率爆内存或极度卡顿 |
| 无显卡 + 64GB RAM | ✅ 全部装进内存,纯 CPU 推理,速度较慢但稳定 |
四、带宽:被忽视的速度杀手
除了容量,内存带宽是决定混合推理速度的关键。
4.1 各存储带宽对比
| 存储类型 | 典型带宽 | 说明 |
|---|---|---|
| DDR4 内存 | 25-50 GB/s | CPU 推理速度受此限制 |
| DDR5 内存 | 50-100 GB/s | 新一代,速度翻倍 |
| PCIe 4.0 x16 | ~32 GB/s | GPU 与内存之间的桥梁 |
| GDDR6 显存 | 500-1000 GB/s | 消费级 GPU |
| HBM3 显存 | 2000+ GB/s | 专业卡(A100/H100) |
瓶颈效应:如果系统内存带宽太低,或 PCIe 通道不足,数据搬运速度跟不上 GPU 计算速度,GPU 大部分时间在"空等"。
4.2 为什么 Mac 跑大模型很厉害?
苹果采用统一内存架构,CPU 和 GPU 共享同一块高带宽内存(400GB/s+)。模型可直接被 GPU 访问,无需通过低速 PCIe 总线搬运。
五、程序到底如何选择 CPU/GPU?
5.1 核心结论
程序不会"智能选择",而是遵循你设定的规则。
| 模式 | 谁在控制 | 适用场景 |
|---|---|---|
| 完全自动 | 框架层决策 | 简单应用 |
| 半自动(规则驱动) | 开发者定义规则 | 主流方案 |
| 完全手动 | 代码级硬指定 | 极致优化 |
5.2 主流框架的行为
| 框架 | 默认行为 | 手动指定方式 |
|---|---|---|
| PyTorch | 加载到 CPU | .to("cuda") |
| Transformers | 加载到 CPU | device_map="auto" |
| Ollama | 自动检测,优先 GPU | 环境变量 OLLAMA_GPU=0 |
| llama.cpp | 自动检测 GPU | -ngl 参数控制层数 |
5.3 关键配置示例
# Hugging Face Transformers
from transformers import AutoModelForCausalLM
# 方式一:自动分配(推荐)
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen2.5-7B",
device_map="auto" # 自动选择最优设备
)
# 方式二:指定设备限制
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen2.5-14B",
device_map="auto",
max_memory={
0: "20GB", # GPU 0 最多用 20GB
"cpu": "30GB" # CPU 内存最多用 30GB
}
)
# llama.cpp 示例
# -ngl 32 表示尝试把 32 层放到 GPU
# 如果显存只够放 20 层,剩下的自动留在 CPU
./main -m model.gguf -p "你好" -ngl 32
5.4 常见陷阱
# ❌ 错误:以为会自动用 GPU
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-7B")
# 实际:默认加载到 CPU!速度慢 20-50 倍
# ✅ 正确:明确指定
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen2.5-7B",
device_map="auto"
)
六、终极决策表
6.1 硬件配置指南
| 场景 | 模型规模 | 推荐显存 | 推荐内存 | 预期表现 |
|---|---|---|---|---|
| 入门体验 | ≤ 7B (INT4) | 6-8 GB | 16 GB | 流畅,纯 GPU |
| 主流玩家 | 13B-30B (INT4) | 12-16 GB | 32 GB | 较快,混合模式 |
| 发烧友 | 70B (INT4) | 24 GB | 64-96 GB | 中等,依赖内存带宽 |
| 工作站 | 70B+ (FP16) | 48-80 GB | 128 GB+ | 快,多卡并行 |
| 纯 CPU 党 | ≤ 13B (INT4) | 0 GB | 32 GB+ | 慢,但成本低 |
6.2 CPU vs GPU 选择指南
| 维度 | 优先选 GPU | 可考虑 CPU |
|---|---|---|
| 模型规模 | > 7B(未量化)或 > 13B(量化后) | ≤ 7B(INT4/INT8) |
| 业务场景 | 高并发(>50 QPS)、低延迟(<200ms) | 边缘设备、低负载(<5 QPS) |
| 成本预算 | 预算充足 | 预算有限、无显卡环境 |
6.3 决策流程图
开始
│
▼
模型有多大?
│
├── < 3B
│ ├── 低频调用 → CPU 可行 ✅
│ └── 高频调用 → GPU 推荐 ⭐
│
├── 3B - 14B
│ ├── 低频调用 → CPU 可行 ✅
│ └── 高频调用 → GPU 推荐 ⭐
│
└── > 14B
├── 单卡显存够 → GPU ⭐
├── 单卡显存不够 → CPU+GPU 混合
└── 高并发需求 → 多 GPU 必需
七、实战配置建议
7.1 个人学习/实验
| 预算 | 推荐配置 | 可运行模型 |
|---|---|---|
| < $1000 | i5 + 32GB + RTX 3060 12GB | 7B-INT4, 14B-INT8 |
| $1000-2000 | i7 + 64GB + RTX 4060 Ti 16GB | 7B-FP16, 14B-INT4 |
| $2000-4000 | i9 + 128GB + RTX 4090 24GB | 14B-FP16, 32B-INT4, 70B-INT4 |
7.2 企业生产环境
| 规模 | 推荐配置 |
|---|---|
| 小规模(< 100 QPS) | 单卡 A10 或 RTX 4090 |
| 中等规模(100-1000 QPS) | 多卡 A100 或 H100 |
| 大规模(> 1000 QPS) | GPU 集群 + 模型并行 |
7.3 如何确认正在使用 GPU?
# 方法一:nvidia-smi 监控
watch -n 1 nvidia-smi
# 推理时显存占用增加、GPU 利用率上升 = 正在使用 GPU
# 方法二:Python 检查
import torch
print(torch.cuda.is_available()) # True = GPU 可用
print(next(model.parameters()).device) # cuda:0 或 cpu
八、总结:一图吃透
┌─────────────────────────────────────────────────────────────┐
│ 大模型硬件三角关系 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────┐ ┌─────────┐ │
│ │ GPU │ ◄─── PCIe 总线 ───►│ CPU │ │
│ │ (发动机) │ (32 GB/s) │ (方向盘) │ │
│ └────┬────┘ └────┬────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌─────────┐ ┌─────────┐ │
│ │ VRAM │ │ RAM │ │
│ │ (快速) │ │ (仓库) │ │
│ │ 8-80GB │ │ 16-256GB│ │
│ │ 500+GB/s│ │ 50-100 │ │
│ └─────────┘ │ GB/s │ │
│ └─────────┘ │
│ │
│ 可运行模型最大尺寸 ≈ 显存(VRAM) + 内存(RAM) - 系统预留 │
│ │
└─────────────────────────────────────────────────────────────┘
核心要点
- 存储空间是硬约束 - 模型必须能装下(显存或内存)
- 带宽决定速度 - 显存带宽是内存的 10-20 倍,这是 GPU 快 20-50 倍的核心原因
- GPU 核心优势是并行 - 矩阵运算天然适合,数千核心同时计算
- 程序不会自动智能选择 - 需要显式指定设备,用
device_map="auto"让框架自动分配 - 主流方案是规则驱动 - 设定规则,框架自动执行显存不够时的卸载
一句话决策
| 场景 | 选择 |
|---|---|
| 小模型 + 低频 | CPU + 系统内存即可 |
| 大模型 + 高频 | GPU + 显存必须 |
| 显存不够 | GPU + 内存混合(device_map="auto") |
| 无 GPU | 大内存 CPU + 量化模型 |
欢迎关注的我的公众号《码上未来》,一起交流AI前沿技术!
扫码二维码加我微信进群聊AI