【问题标题】:RuntimeError: CUDA out of memory. How setting max_split_size_mb?运行时错误:CUDA 内存不足。如何设置max_split_size_mb?
【发布时间】:2022-11-10 13:33:22
【问题描述】:
我在 Colab Pro+ 上运行神经网络时发现了这个问题(使用高 RAM 选项)。
运行时错误:CUDA 内存不足。尝试分配 8.00 GiB(GPU 0;15.90 GiB 总容量;12.04 GiB 已分配;2.72 GiB 空闲;PyTorch 总共保留 12.27 GiB)如果保留的内存是 >> 分配的内存,请尝试设置 max_split_size_mb 以避免碎片。请参阅内存管理和 PYTORCH_CUDA_ALLOC_CONF 的文档
我已经将批次减少到 2。我使用 h5py 上传数据。
在这一点上,我假设我唯一能尝试的就是设置 max_split_size_mb。
我找不到任何关于如何实现 max_split_size_mb 的信息。我不清楚 Pytorch 文档 (https://pytorch.org/docs/stable/notes/cuda.html)。
有人可以支持我吗?
谢谢你。
【问题讨论】:
标签:
memory
pytorch
runtime-error
google-colaboratory
【解决方案1】:
max_split_size_mb 配置值可以设置为环境变量。
确切的语法记录在https://pytorch.org/docs/stable/notes/cuda.html#memory-management,但简而言之:
缓存分配器的行为可以通过环境变量PYTORCH_CUDA_ALLOC_CONF 来控制。格式为PYTORCH_CUDA_ALLOC_CONF=<option>:<value>,<option2>:<value2>...
可用选项:
-
max_split_size_mb 防止分配器拆分大于此大小(以 MB 为单位)的块。这有助于防止碎片化,并且可能允许一些临界工作负载在不耗尽内存的情况下完成。根据分配模式,性能成本可以从“零”到“次要”。默认值是无限的,即所有块都可以拆分。 memory_stats() 和 memory_summary() 方法对于调优很有用。对于因“内存不足”而中止并显示大量非活动拆分块的工作负载,应将此选项用作最后的手段。
...
因此,您应该能够以类似于以下方式设置环境变量:
窗户:set 'PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:512'
Linux:export 'PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:512'
这将取决于您使用的操作系统 - 在您的情况下,对于 Google Colab,您可能会发现 Setting environment variables in Google Colab 很有帮助。
【解决方案2】:
这个文件在windows的什么位置?所以我可以编辑它并更改内存。