设备映射是 Hugging Face 在 Accelerate 库中实现的一项功能。它将大型语言模型(LLM)分割成较小的部分,可以分别加载到不同设备上:GPU 显存、CPU 内存和硬盘。
我将解释为何即使使用设备映射,仍可能因 GPU 触发内存不足(OOM)错误
GPU 显存中存储的不仅仅是大语言模型(LLM)本身
设备映射通过处理 LLM 加载的所有环节来避免 OOM 错误:包括空张量创建、权重复制等。它能最大化利用 GPU 上的可用显存(VRAM)。
例如若使用 A100 48GB 显卡,设备映射会尝试将全部 48GB 显存用于 LLM。仅保留几 GB 显存供 GPU 后续可能执行的其他操作使用。
你的 GPU 上还需要一些空间来存储 CUDA 内核、其他各种张量,以及操作系统图形用户界面(GUI)——如果你将屏幕连接到 GPU 的话(Ubuntu 系统会占用 2GB 内存)。设备映射功能无法预先知道其他进程会消耗多少内存。
因此我们需要预留部分内存以防万一,特别是在主系统 GPU 上。