【问题标题】: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的什么位置?所以我可以编辑它并更改内存。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-08
        • 2021-04-17
        • 2020-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-10
        相关资源
        最近更新 更多