大模型算力真相:谁在"吃"硬件?CPU与GPU/RAM的终极分工指南

0 阅读8分钟

选对计算资源,是 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 核心差异对比

指标CPUGPU
核心数8-643000-10000+
单核性能极强较弱
并行能力有限极强
内存带宽50-100 GB/s500-3000 GB/s
内存容量系统内存(可扩展)显存固定(8-80GB)

这就是 GPU 快 20-50 倍的核心原因:带宽差距巨大!


二、先算一笔账:你的模型需要多少空间?

2.1 模型参数与存储占用速查

模型参数量FP16INT8INT4
Qwen2.5-1.5B1.5B~3GB~1.5GB~0.8GB
Qwen2.5-7B7B~14GB~7GB~4GB
Qwen2.5-14B14B~28GB~14GB~8GB
Qwen2.5-32B32B~64GB~32GB~16GB
Qwen2.5-72B72B~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/sCPU 推理速度受此限制
DDR5 内存50-100 GB/s新一代,速度翻倍
PCIe 4.0 x16~32 GB/sGPU 与内存之间的桥梁
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加载到 CPUdevice_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 GB16 GB流畅,纯 GPU
主流玩家13B-30B (INT4)12-16 GB32 GB较快,混合模式
发烧友70B (INT4)24 GB64-96 GB中等,依赖内存带宽
工作站70B+ (FP16)48-80 GB128 GB+快,多卡并行
纯 CPU 党≤ 13B (INT4)0 GB32 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 个人学习/实验

预算推荐配置可运行模型
< $1000i5 + 32GB + RTX 3060 12GB7B-INT4, 14B-INT8
$1000-2000i7 + 64GB + RTX 4060 Ti 16GB7B-FP16, 14B-INT4
$2000-4000i9 + 128GB + RTX 4090 24GB14B-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) - 系统预留      │
│                                                             │
└─────────────────────────────────────────────────────────────┘

核心要点

  1. 存储空间是硬约束 - 模型必须能装下(显存或内存)
  2. 带宽决定速度 - 显存带宽是内存的 10-20 倍,这是 GPU 快 20-50 倍的核心原因
  3. GPU 核心优势是并行 - 矩阵运算天然适合,数千核心同时计算
  4. 程序不会自动智能选择 - 需要显式指定设备,用 device_map="auto" 让框架自动分配
  5. 主流方案是规则驱动 - 设定规则,框架自动执行显存不够时的卸载

一句话决策

场景选择
小模型 + 低频CPU + 系统内存即可
大模型 + 高频GPU + 显存必须
显存不够GPU + 内存混合(device_map="auto"
无 GPU大内存 CPU + 量化模型

欢迎关注的我的公众号《码上未来》,一起交流AI前沿技术!

码上未来.jpg

扫码二维码加我微信进群聊AI

image.png