概述
AI 框架如何分配、重用和回收 GPU 上的有限内存,以及为什么即使技术上还有大量内存,剩余间隙(碎片)也会导致内存不足错误。理解它是拟合大型模型和避免神秘崩溃的关键。
GPU 内存管理和碎片是一个技术构建块,会大规模影响模型质量、基础设施成本、延迟和可靠性。
深入探讨
GPU 内存是固定且宝贵的:一张卡可能总共有 24、80 或 192 GB,由模型权重、激活、梯度、优化器状态和临时缓冲区共享。调用驱动程序在每个操作上分配内存会很慢,因此像 PyTorch 这样的框架使用缓存分配器,预先获取大块并分发子块,然后将释放的块保留在池中以供重用。问题是碎片:当分配和释放不同大小的张量时,可用空间会分成分散的块。您总共可以有 5 GB 空闲空间,但无法分配连续的 2 GB 张量,因为没有一个间隙足够大。这就是为什么尽管看似有可用空间,训练仍可能因内存不足错误而崩溃。
技术洞察
PyTorch 的 CUDA 缓存分配器将内存分割成块流,并重用与请求大小匹配的释放块,从而避免昂贵的 cudaMalloc/cudaFree 调用。当分割的块无法重新组合时,就会出现碎片。 torch.cuda.empty_cache、PYTORCH_CUDA_ALLOC_CONF Expandable_segments 选项和内存快照等工具会有所帮助。较新的方法借用了虚拟内存的思想,将非连续的物理页映射到连续的虚拟范围,因此尽管有碎片,大型请求仍能成功。
掌握 GPU 内存管理和碎片
AI 框架如何分配、重用和回收 GPU 上的有限内存,以及为什么即使技术上还有大量内存,剩余间隙(碎片)也会导致内存不足错误。理解它是拟合大型模型和避免神秘崩溃的关键。 GPU 内存管理和碎片是一个技术构建块,会大规模影响模型质量、基础设施成本、延迟和可靠性。为了建立深入的理解,请将 GPU 内存管理和碎片视为一种操作模型,而不是单一功能:定义所需的结果,澄清假设,并将系统可以可靠地执行的操作与仍需要专家判断的操作分开。
在实践中,使用 GPU 内存管理和碎片化的强大团队根据可靠性和成本优化架构、数据和基础设施选择。他们记录明确的成功标准,根据实际数据和工作流程进行测试,并根据观察到的失败模式而不是一次性基准测试胜利进行迭代。这就是理论理解转变为跨产品、政策和运营的持久能力的地方。
多年来,架构决策决定着性能和运营成本。与此同时,优化一个基准测试可以隐藏更广泛的系统弱点。最具弹性的方法是将实验速度与治理规则结合起来:运行试点、捕获证据、发布决策日志,并随着模型行为、用户期望和监管要求的发展不断更新保障措施。
战略影响
多年来,架构决策决定着性能和运营成本。
多年来,架构决策决定着性能和运营成本。在高质量部署中,这会转化为可衡量的操作规则、所有权边界和定期审查仪式,以便团队可以增强信心,而不是扩大模糊性。
技术教育帮助团队选择正确的堆栈,而不仅仅是最新的堆栈。
技术教育帮助团队选择正确的堆栈,而不仅仅是最新的堆栈。在高质量部署中,这会转化为可衡量的操作规则、所有权边界和定期审查仪式,以便团队可以增强信心,而不是扩大模糊性。
更好的工程选择可以减少生产中的可靠性事故。
更好的工程选择可以减少生产中的可靠性事故。在高质量部署中,这会转化为可衡量的操作规则、所有权边界和定期审查仪式,以便团队可以增强信心,而不是扩大模糊性。
现实世界的实施
尽管保留内存显示可用空间,但训练运行仍会因“CUDA 内存不足”而崩溃,通过设置 PYTORCH_CUDA_ALLOC_CONF 以启用可扩展段来修复此问题。
使用 torch.cuda.memory_summary 或内存快照来诊断哪些张量和碎片正在占用 GPU 的 80 GB。
vLLM 的 PagedAttention 管理固定大小页面中的注意力 KV 缓存,以服务许多并发聊天请求,而不会浪费内存。
降低批量大小或启用梯度检查点以减少激活内存并避免碎片驱动的内存不足故障。
实施模式
GPU 内存管理和碎片实践
尽管保留内存显示可用空间,但训练运行仍会因“CUDA 内存不足”而崩溃,通过设置 PYTORCH_CUDA_ALLOC_CONF 以启用可扩展段来修复此问题。
尽管保留内存显示可用空间,但训练运行仍会因“CUDA 内存不足”而崩溃,通过设置 PYTORCH_CUDA_ALLOC_CONF 来启用可扩展段进行修复。当团队预先定义质量阈值、为边缘情况保留人工升级路径并随着时间的推移跟踪生产力增益和错误成本时,通常会获得更好的结果。
GPU 内存管理和碎片实践
使用 torch.cuda.memory_summary 或内存快照来诊断哪些张量和碎片正在占用 GPU 的 80 GB。
使用 torch.cuda.memory_summary 或内存快照来诊断哪些张量和碎片正在消耗 GPU 的 80 GB 团队在预先定义质量阈值、为边缘情况保留人工升级路径并随着时间的推移跟踪生产力增益和错误成本时通常会获得更好的结果。
GPU 内存管理和碎片实践
vLLM 的 PagedAttention 管理固定大小页面中的注意力 KV 缓存,以服务许多并发聊天请求,而不会浪费内存。
vLLM 的 PagedAttention 管理固定大小页面中的注意力 KV 缓存,以在不浪费内存的情况下为许多并发聊天请求提供服务。当团队预先定义质量阈值、为边缘情况保留人工升级路径并随着时间的推移跟踪生产力增益和错误成本时,通常会获得更好的结果。
GPU 内存管理和碎片实践
降低批量大小或启用梯度检查点以减少激活内存并避免碎片驱动的内存不足故障。
降低批量大小或启用梯度检查点以减少激活内存并避免碎片驱动的内存不足故障当团队预先定义质量阈值、为边缘情况保留人工升级路径并随着时间的推移跟踪生产力增益和错误成本时,通常会获得更好的结果。
风险与防护栏
优化一项基准测试可以隐藏更广泛的系统弱点。
基础设施和维护成本常常被低估。
随着系统变得更加复杂,安全性和可观察性差距可能会扩大。
实施路线图
在实施之前定义延迟、质量和成本目标。
在实施之前定义延迟、质量和成本目标。将每个步骤视为证据门:如果不满足标准,则暂停推出,缩小差距,然后再扩大使用。
在实际负载和数据条件下进行基准测试。
在实际负载和数据条件下进行基准测试。将每个步骤视为证据门:如果不满足标准,则暂停推出,缩小差距,然后再扩大使用。
仪器监控错误、漂移和用户影响。
仪器监控错误、漂移和用户影响。将每个步骤视为证据门:如果不满足标准,则暂停推出,缩小差距,然后再扩大使用。
在扩展之前准备回滚和事件响应路径。
在扩展之前准备回滚和事件响应路径。将每个步骤视为证据门:如果不满足标准,则暂停推出,缩小差距,然后再扩大使用。