技术指南

GPU 内存管理和碎片

AI 框架如何分配、重用和回收 GPU 上的有限内存,以及为什么即使技术上还有大量内存,剩余间隙(碎片)也会导致内存不足错误。

听听这个指南AI叙述 · ~2 min

在本页阅读时间:2分钟
  1. 概述
  2. 深入探讨
  3. 现实世界的实施
  4. GPU 内存管理和碎片的未来
  5. 付诸实践
  6. 不断探索
  7. 常见问题

概述

Understanding it is key to fitting big models and avoiding mysterious crashes.

深入探讨

GPU 内存是固定且宝贵的:一张卡可能总共有 24、80 或 192 GB,由模型权重、激活、梯度、优化器状态和临时缓冲区共享。调用驱动程序在每个操作上分配内存会很慢,因此像 PyTorch 这样的框架使用缓存分配器,预先获取大块并分发子块,然后将释放的块保留在池中以供重用。问题是碎片:随着不同大小的张量被分配和释放,可用空间会分成分散的块。您总共可以有 5 GB 空闲空间,但无法分配连续的 2 GB 张量,因为没有一个间隙足够大。这就是为什么尽管看似有可用空间,训练仍可能因内存不足错误而崩溃。

现实世界的实施

A training team examines allocator statistics before testing expandable segments on a variable-batch workload.

A developer uses memory_summary and a memory snapshot to investigate active tensors and inactive split blocks.

An inference team uses vLLM’s paged KV-cache management to reduce cache-allocation waste.

A training team lowers batch size or checkpoints activations after confirming live tensor memory is the limiting factor.

GPU 内存管理和碎片的未来

受操作系统的启发,内存管理变得更加智能和分页。虚拟内存式分配器和分页注意力(用于在推理过程中管理 KV 缓存)等技术可显着减少浪费和碎片。期望框架默认使用可扩展、碎片整理的分配器,通过内置分析器获得更好的可见性,以及与卸载和重新计算的更紧密耦合,以便系统自动处理 GPU、CPU 和磁盘内存,以保持高利用率并很少发生崩溃。

付诸实践

为什么这很重要

  • 成本与预算. 多年来,架构决策决定着性能和运营成本。
  • 更清晰的判决. 技术教育帮助团队选择正确的堆栈,而不仅仅是最新的堆栈。
  • 质量控制. 更好的工程选择可以减少生产中的可靠性事故。

留意

  • 优化一项基准测试可以隐藏更广泛的系统弱点。
  • 基础设施和维护成本常常被低估。
  • 随着系统变得更加复杂,安全性和可观察性差距可能会扩大。

后续步骤

  1. 在实施之前定义延迟、质量和成本目标。
  2. 在实际负载和数据条件下进行基准测试。
  3. 仪器监控错误、漂移和用户影响。
  4. 在扩展之前准备回滚和事件响应路径。

不断探索

免费通讯

获取每日AI简报

每个工作日早晨提供三条经过验证的AI故事,使用简明英文撰写。永久免费,无广告。

每个工作日发送一封邮件。一键退订。我们永不出售或分享您的地址。

测试一下自己

Take the GPU Memory Management and Fragmentation quiz

每个答案即时反馈,课程通过后可获得可验证ID的可分享证书。

开始测验

支持免费AI教育。AI Understanding是一家501(c)(3)非营利组织——无广告,无付费墙,永不收费。 捐款

常见问题

What is GPU Memory Management and Fragmentation?

AI 框架如何分配、重用和回收 GPU 上的有限内存,以及为什么即使技术上还有大量内存,剩余间隙(碎片)也会导致内存不足错误。理解它是拟合大型模型和避免神秘崩溃的关键。

什么是 GPU 内存碎片?

碎片意味着总的可用内存是足够的,但是它被分成了碎片,因此没有一个间隙对于大张量来说足够大。

为什么像 PyTorch 这样的框架使用缓存内存分配器?

为每个操作调用 cudaMalloc/cudaFree 的速度很慢,因此缓存分配器会抓取大块并重用池中释放的块。

A CUDA allocation fails despite apparently unused reserved memory. What should a developer investigate?

Allocator statistics and snapshots help distinguish fragmentation from live tensors or other allocations. The error alone does not prove a single cause.

Which PyTorch allocator option can be tested for changing-size workloads that leave unused memory slivers?

Expandable segments can reduce waste for selected allocation patterns. Availability and benefit depend on allocator configuration and workload.

vLLM 的 PagedAttention 如何减少推理过程中的内存浪费?

PagedAttention 将 KV 缓存存储在固定大小的页面(如操作系统虚拟内存)中,从而减少碎片并有效地服务许多请求。