📘 llama.cpp 分片·加载实战
30 章 · 从入门到精通
🧩 分片策略
⚡ 加载优化
🖥️ 多 GPU
🧠 GGUF
⏱️ 版本 · 2025
1
llama.cpp 项目概览
起源、核心目标、与 llama 生态的关系
→
2
模型文件格式解析
GGUF 格式诞生背景、结构组成 (元数据/张量/分词器)
→
3
分片 (Sharding) 概念
为什么需要分片?单文件 vs 多文件权衡
→
4
分片策略一:按层分片
原理、适用场景、优缺点
→
5
分片策略二:按张量分片
原理、适用场景、优缺点
→
6
分片策略三:混合分片
结合层与张量分片,更细粒度控制
→
7
分片文件命名规范
.gguf 分片命名规则 (model-00001-of-00003)
→
8
分片工具实战
convert.py / split 命令进行模型分片
→
9
分片与内存映射 (mmap)
分片与 mmap 协同,减少内存占用
→
10
加载策略概览
从磁盘到显存/内存的完整链路
→
11
加载策略一:完全加载
原理、适用场景 (小模型、低延迟)
→
12
加载策略二:mmap 加载
原理、优势 (按需加载)、适用场景
→
13
加载策略三:分层加载
按需加载特定层,推理优化
→
14
加载策略四:量化感知加载
动态应用量化 (Q4_0, Q8_0) 减少显存
→
15
上下文大小与 KV Cache
根据显存调整上下文长度
→
16
GPU 卸载 (Offloading)
部分层卸载到 GPU,平衡 CPU/GPU
→
17
多 GPU 加载与分片
多 GPU 环境下分配模型分片
→
18
CPU 线程与批处理大小
设置 -t 和 -b 优化吞吐量
→
19
内存不足 (OOM) 处理
显存/内存不足时调整分片和加载
→
20
分片与加载配置文件
.json / 命令行参数管理选项
→
21
实战:8GB 显存加载 13B
Q4_K_M 量化 + 分层加载
→
22
实战:纯 CPU 加载 7B
mmap + 多线程优化
→
23
实战:多 GPU 加载 70B
张量分片 + GPU 卸载
→
24
性能基准测试
首 Token 延迟与吞吐量对比
→
25
常见错误与调试
加载失败、分片不匹配、版本兼容
→
26
命令行参数详解
--model, --n-gpu-layers, --split-mode 等
→
27
与 HuggingFace 对比
llama.cpp 分片 vs Transformers device_map
→
28
未来趋势:推测解码
Speculative Decoding 与分片加载结合
→
29
社区工具与生态
Ollama, LM Studio 中的分片加载
→
30
总结与最佳实践
根据硬件选择最优分片/加载决策树
→