1. 内存优化概述:为什么模型部署需要关注内存?
大家好,我是你们这堂课的主讲。咱们开门见山,聊聊模型部署里一个绕不开的话题——内存。
你想想看,一个在 GPU 上跑得飞快的模型,一旦要部署到手机、摄像头或者云端服务器上,第一个遇到的坎儿往往不是算力不够,而是内存爆了。我刚开始做部署那会儿,就吃过这个亏。一个 BERT 模型在开发机上推理得好好的,一放到边缘盒子上,直接 OOM(内存溢出),连日志都没来得及打印。嗯,从那以后,我养成了一个习惯:先看内存,再看算力。
核心观点: 内存是模型部署的“隐形天花板”。算力不够可以等,内存不够直接崩。
1.1 为什么内存会成为瓶颈?
说白了,深度学习模型本质上就是一堆巨大的矩阵运算。这些矩阵(也就是权重参数)和中间计算结果(激活值),都得老老实实待在内存里。
我给大家拆解一下,内存到底被谁吃了:
- 模型权重:这是大头。一个 7B 参数的模型,用 FP16 存,光权重就要 14GB。你想想看,普通手机才 8GB 内存。
- 中间激活值:这是隐藏的“内存杀手”。推理时,每一层的输出都得暂存,尤其是 Transformer 里的 KV Cache,随着序列长度增长,内存占用是二次方上涨的。
- 运行时开销:框架本身、CUDA context、临时变量,这些零零碎碎加起来,也能吃掉几百 MB 到几个 GB。
为什么会这样?因为模型部署的目标环境,跟训练环境完全是两码事。训练时你可以堆 8 张 A100,部署时可能只有一个 4GB 内存的 Jetson Nano。
1.2 典型场景一:边缘设备
边缘设备,比如手机、智能摄像头、IoT 模块,是内存优化的“重灾区”。
我记得有一次,要把一个目标检测模型塞进一个 2GB 内存的安防摄像头里。模型本身只有 50MB,但推理时内存峰值飙到了 1.8GB,差点把系统服务挤崩了。
边缘设备的痛点很明显:
- 物理限制:内存通常只有 512MB ~ 8GB,而且不能扩展。
- 共享内存:CPU 和 GPU(如果有的话)共用内存,模型不能独占。
- 带宽低:LPDDR4 的带宽只有几十 GB/s,远低于服务器端的 HBM。
| 设备类型 | 典型内存 | 常见模型大小 | 优化重点 |
|---|---|---|---|
| 手机(旗舰) | 8-16GB | 1-7B 参数 | 量化、KV Cache 优化 |
| 智能摄像头 | 512MB-2GB | 10-100MB | 模型剪枝、算子融合 |
| MCU(微控制器) | 256KB-1MB | 几百 KB | 二值化、TFLite Micro |
避坑指南: 我曾经在边缘设备上直接用了 PyTorch 的 JIT 导出,结果发现推理时内存占用比训练还高。后来排查发现,JIT 导出时没有做内存复用优化,导致每一层的激活值都单独分配了一块内存。切记:边缘部署一定要用专门的推理引擎(如 ONNX Runtime、TFLite、TensorRT),并开启内存池复用。
1.3 典型场景二:云端推理
云端看起来资源丰富,但内存问题同样棘手。你可能会问:“云上不是可以加内存吗?” 没错,但加内存是要花钱的。
云端推理的核心矛盾是:吞吐量 vs. 内存成本。
举个例子,一个在线翻译服务,需要同时处理上千个请求。每个请求都有自己的 KV Cache,如果每个请求占 1GB,1000 个并发就是 1TB 内存。这成本,想想都肉疼。
云端的内存优化,更多是围绕“如何用更少的内存,服务更多的请求”:
- 动态批处理:把多个请求拼成一个 batch,共享权重,减少内存碎片。
- 模型分片:把一个大模型切到多张卡上,每张卡只存一部分权重。
- 内存卸载:把不常用的层或 KV Cache 卸载到 CPU 内存或 SSD 上。
个人经验: 我习惯在云端部署前,先用 torch.cuda.max_memory_allocated() 和 torch.cuda.memory_summary() 跑一遍,看看峰值内存到底在哪。很多时候,优化一个算子就能省下 30% 的内存。
1.4 本章知识体系总览
为了让大家对内存优化有个全局认识,我画了一张图。这张图会贯穿我们整个课程,你可以把它当作“作战地图”。
这张图把内存优化的核心脉络理清了。左边是边缘设备,右边是云端推理,中间是通用的核心技术。你会发现,很多技术(比如量化、内存池复用)是两边通用的,只是侧重点不同。
1.5 内存优化的核心原则
讲了这么多,我总结三条核心原则,你记一下:
- 能省则省:能用 INT8 就别用 FP16,能复用就别重新分配。
- 能换则换:用计算换内存,比如重计算(Recomputation),牺牲一点时间,省下大量内存。
- 能藏则藏:用流水线把内存分配和计算重叠起来,让内存操作不阻塞推理。
一句话总结: 内存优化不是“能不能省”,而是“怎么省得聪明”。后面的 29 章,我会手把手带你把这些技术落地。