Windows下libtorch/CUDA GPU内存控制及性能异常解决问询
解决方案:RTX4090训练时共享内存占用过高导致性能暴跌
一、通过CUDA/libtorch限制可用GPU内存为24GB
有两种可靠方式强制libtorch仅使用物理显存:
1. 代码层面设置显存使用比例
在程序初始化CUDA设备后,调用torch::cuda::set_per_process_memory_fraction函数,将可用显存比例设为1.0(即完全使用24GB物理显存,不分配共享内存):
#include <torch/torch.h> int main() { torch::Device cuda_device(torch::kCUDA); // 限制当前进程仅使用对应GPU的100%物理显存 torch::cuda::set_per_process_memory_fraction(1.0, cuda_device.index()); // 后续模型加载、训练逻辑... return 0; }
2. 环境变量限制显存比例
在启动程序前,通过命令行设置TORCH_CUDA_MEMORY_FRACTION环境变量,同样限制显存使用比例为1.0,强制程序仅使用物理显存:
set TORCH_CUDA_MEMORY_FRACTION=1.0 && your_training_program.exe
这两种方式都会阻止libtorch分配物理显存以外的共享内存,避免因内存交换导致的性能暴跌。
二、Windows系统下控制共享GPU内存(BIOS无选项时)
Windows默认按物理RAM的50%分配共享GPU内存,可通过注册表手动调整上限,确保总虚拟GPU内存(物理显存+共享内存)低于37.4GB:
- 按下
Win+R输入regedit打开注册表编辑器 - 导航至路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers - 右键空白处,依次创建两个DWORD(32位)值:
- 命名为
DedicatedSize,数值设为24576(对应24GB物理显存,单位MB) - 命名为
SharedSize,数值设为你期望的共享内存上限(例如8192即8GB,确保总虚拟GPU内存<37.4GB)
- 命名为
- 重启电脑后设置生效
注意:修改注册表前建议备份相关分支,避免系统异常。
内容的提问来源于stack exchange,提问作者Alexander Korovin
相关产品推荐
相关产品推荐

