You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

cudaMalloc未分配GPU显存却占用系统RAM?求技术解答

CUDA cudaMalloc()超显存分配未失败的问题解析

现象本质

你遇到的是NVIDIA在新版驱动+Windows 10 2004及以上系统下默认开启的*GPU显存超分配(Memory Overcommitment)*特性,属于官方文档明确记载的行为:

  • 该特性允许cudaMalloc()在GPU物理显存不足时,自动将超出部分的分配请求转用系统RAM,通过PCIe总线完成数据交互,以此避免分配失败。
  • 这就是RTX 4090(24GB显存)上调用cudaMalloc(30000000000)(约27.9GB)成功、且系统RAM占用上升的原因。

差异原因

另一台同型号显卡电脑的cudaMalloc()符合预期失败,核心原因是:

  • 旧版驱动/Windows系统中,显存超分配特性默认关闭,cudaMalloc()会严格校验GPU物理显存容量,不足时直接返回cudaErrorMemoryAllocation错误。
  • 处理器(AMD/Intel)差异不影响该特性的开关逻辑,关键变量是驱动版本和Windows系统版本。

解决方法(让cudaMalloc()仅用GPU显存或直接失败)

有两种可靠方式实现需求:

  1. 代码层面控制:在调用cudaMalloc()前,先执行cudaSetDeviceFlags(cudaDeviceDisableMemOvercommit),该标志会强制cudaMalloc()仅使用GPU物理显存,超出时直接返回分配失败。
  2. 系统层面禁用:
    • 打开NVIDIA控制面板,进入「3D设置」→「管理3D设置」→「程序设置」,选择你的应用程序,勾选「禁用GPU内存超分配」选项(部分驱动版本可能命名为「限制GPU显存分配」)。
    • 或设置系统环境变量NVIDIA_DISABLE_OVERCOMMIT=1,全局禁用显存超分配特性。

官方依据

显存超分配是NVIDIA在CUDA 11.x及后续版本配合Windows 10 2004+系统推出的特性,默认仅在消费级显卡(如RTX 4090)上开启,专业显卡默认关闭。官方明确说明该特性会带来明显的性能损失,仅作为兼容性兜底方案。

内容的提问来源于stack exchange,提问作者Elena Yudovina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 18:22:24