PyTorch上限制GPU显存的函数

pytorch版本 >=1.8.0

函数形态

torch.cuda.set_per_process_memory_fraction(0.5, 0)

 参数1:fraction 限制的上限比例,如0.5 就是总GPU显存的一半,可以是0~1的任意float大小;
 参数2:device 设备号; 如0 表示GPU卡 0号;

使用示例:

import torch
# 限制0号设备的显存的使用量为0.5,就是半张卡那么多,比如12G卡,设置0.5就是6G。
torch.cuda.set_per_process_memory_fraction(0.5, 0)
torch.cuda.empty_cache()
# 计算一下总内存有多少。
total_memory = torch.cuda.get_device_properties(0).total_memory
# 使用0.499的显存:
tmp_tensor = torch.empty(int(total_memory * 0.499), dtype=torch.int8, device='cuda')

# 清空该显存:
del tmp_tensor
torch.cuda.empty_cache()

# 下面这句话会触发显存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)
"""
显存超标后,比不设置限制的错误信息多了一个提示,“5.59 GiB allowed;

注意事项:

函数限制的是进程的显存,这点跟TensorFlow的显存限制类似。

相关内容请看参考链接:https://zhuanlan.zhihu.com/p/338044800

你可能感兴趣的:(PyTorch,深度学习,pytorch)