当前位置:   article > 正文

如何释放GPU显存?CUDA out of memory 如何解决_释放gpu内存

释放gpu内存

1. GPU资源分配原理

占用显存可分为激活内存失活内存,通常我们使用GPU的场景是:

假设GPU总的显存有10G首先加载一个模型,占用1G激活显存。
(1) 来一个数据并进行推理,推理结束后占用2G失活内存。则此时的占用率是3/10
(2) 如果又来个稍小的数据进行推理,推理时需占用1G失活内存,CUDA会把2G失活内存中的1G释放掉并提供给其进行推理,推理结束后又产生1G失活内存,推理结束后仍占用2G失活内存,则此时的占用率仍是3/10
(3) 如果又来个稍大的数据进行推理,需要3G内存,CUDA会把当前的2G失活内存释放并再申请1G内存供其推理,推理结束后共占用3G失活内存,此时占用率则为4/10

2. GPU显存释放

调用 torch 的功能可以实现显存释放 torch.cuda.empty_cache(),
但只能释放失活显存,即通过手动释放后,1中的例子显存占用率为1/10(加载模型占用的1G激活显存,推理过程结束后通过手动释放,失活显存会被释放)。反观1中CUDA分配GPU资源的机制,手动释放显存意义并不大

3. CUDA out of memory 如何解决

综上,如果出现显存溢出的错误还是要从模型和数据瘦身、减少并行计算量、增加硬件资源、控制进程、线程数等方面着手才行

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/127413
推荐阅读
相关标签
  

闽ICP备14008679号