有没有办法强制我希望特定Pytorch实例可用的GPU内存量的最大值?例如,我的GPU可能有12Gb可用,但我想为特定进程分配4Gb max。
答案 0 :(得分:9)
更新(2021 年 3 月 4 日):现在是 available in the stable 1.8.0 version of PyTorch。另外,in the docs
原始答案如下。
这个 feature request 已经 merged 进入 PyTorch master
分支。然而,没有在稳定版本中引入。
Introduced as set_per_process_memory_fraction
为进程设置内存分数。 该分数用于将缓存分配器限制为在 CUDA 设备上分配的内存。 允许的值等于总的可见内存乘数。 如果尝试在进程中分配超过允许的值,将引发 out of 分配器内存错误。
您可以检查 tests 作为用法示例。
答案 1 :(得分:2)
与可以阻止所有CPU内存的tensorflow相比,Pytorch只使用了它需要的数量'。但是你可以:
要在程序中运行,请尝试:
import os
os.environ["CUDA_VISIBLE_DEVICES"]="0"
答案 2 :(得分:1)
更新pytorch到1.8.0 (pip install --upgrade torch==1.8.0)
函数:torch.cuda.set_per_process_memory_fraction(fraction, device=None)
参数:
分数(浮点数) – 范围:0~1。允许的内存等于 total_memory * 分数。
设备(torch.device 或 int,可选) – 选定的设备。如果是 None 则使用默认的 CUDA 设备。
例如:
import torch
torch.cuda.set_per_process_memory_fraction(0.5, 0)
torch.cuda.empty_cache()
total_memory = torch.cuda.get_device_properties(0).total_memory
# less than 0.5 will be ok:
tmp_tensor = torch.empty(int(total_memory * 0.499), dtype=torch.int8, device='cuda')
del tmp_tensor
torch.cuda.empty_cache()
# this allocation will raise a OOM:
torch.empty(total_memory // 2, dtype=torch.int8, device='cuda')
"""
It raises an error as follows:
RuntimeError: CUDA out of memory. Tried to allocate 5.59 GiB (GPU 0; 11.17 GiB total capacity; 0 bytes already allocated; 10.91 GiB free; 5.59 GiB allowed; 0 bytes reserved in total by PyTorch)
"""