当前位置:   article > 正文

【技巧】PyTorch限制GPU显存的可使用上限

【技巧】PyTorch限制GPU显存的可使用上限

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn]

        从 PyTorch 1.4 版本开始,引入了一个新的功能 torch.cuda.set_per_process_memory_fraction(fraction, device),这个功能允许用户为特定的 GPU 设备设置进程可使用的显存上限比例。

        测试代码:

  1. torch.cuda.empty_cache()
  2. # 设置进程可使用的GPU显存最大比例为50%
  3. torch.cuda.set_per_process_memory_fraction(0.5, device=0)
  4. # 计算总内存
  5. total_memory = torch.cuda.get_device_properties(0).total_memory
  6. print("实际总内存:", round(total_memory / (1024 * 1024), 1), "MB")
  7. # 尝试分配大量显存的操作
  8. try:
  9. # 使用10%的显存:
  10. tmp_tensor = torch.empty(int(total_memory * 0.1), dtype=torch.int8, device='cuda:0')
  11. print("分配的内存:", round(torch.cuda.memory_allocated(0) / (1024 * 1024), 1), "MB")
  12. print("保留的内存:", round(torch.cuda.memory_reserved(0) / (1024 * 1024), 1), "MB")
  13. # 清空显存
  14. del tmp_tensor
  15. torch.cuda.empty_cache()
  16. # 使用50%的显存:
  17. torch.empty(int(total_memory * 0.5), dtype=torch.int8, device='cuda:0')
  18. except RuntimeError as e:
  19. print("Error allocating tensor:", e)
  20. # 打印当前GPU的显存使用情况
  21. print("分配的内存:", torch.cuda.memory_allocated(0) / (1024 * 1024), "MB")
  22. print("保留的内存:", torch.cuda.memory_reserved(0) / (1024 * 1024), "MB")

  • 已分配显存:通过torch.cuda.memory_allocated(device)查询,它返回已经直接分配给张量的显存总量。这部分显存是当前正在被Tensor对象使用的。

  • 保留(预留)显存:通过torch.cuda.memory_reserved(device)查询,它包括了已分配显存以及一部分由PyTorch的CUDA内存分配器为了提高分配效率和减少CUDA操作所需时间而预留的显存。这部分预留的显存不直接用于存储Tensor对象的数据,但可以被视为快速响应未来显存分配请求的“缓冲区”。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/331576
推荐阅读
相关标签
  

闽ICP备14008679号