长沙网站推广优化,网站开发的流程 知乎,mysqli pdo wordpress,沛县网站定制解决CUDA out of memory. 项目场景原因分析解决方案① GPU空间没有释放解决一 换GPU解决二 杀掉进程 ② 更换GPU后仍未解决法一#xff1a;调小batch_size法二#xff1a;定时清内存法三#xff08;常用方法#xff09;#xff1a;设置测试验证不计算参数梯度法… 解决CUDA out of memory. 项目场景原因分析解决方案① GPU空间没有释放解决一 换GPU解决二 杀掉进程 ② 更换GPU后仍未解决法一调小batch_size法二定时清内存法三常用方法设置测试验证不计算参数梯度法四使用的别人的代码时将pin_memory: True改为False 你好呀我是 是Yu欸 2024每日百字篆刻时光感谢你的陪伴与支持 ~ 欢迎一起踏上探险之旅挖掘无限可能共同成长 前些天发现了一个人工智能学习网站内容深入浅出、易于理解。如果对人工智能感兴趣不妨点击查看。 如果你喜欢我的文章欢迎三连给我鼓励和支持点赞 关注 评论我会给大家带来更多有用有趣的文章。 分享「《PYTHON自然语言处理(中文版)》.pdf」点击链接即可保存。 链接https://pan.quark.cn/s/a2cfaaaf586a 提取码t3pK 项目场景
跑bert-seq2seq的代码时出现报错 RuntimeError: CUDA out of memory. Tried to allocate 870.00 MiB (GPU 2; 23.70 GiB total capacity; 19.18 GiB already allocated; 323.81 MiB free; 21.70 GiB reserved in total by PyTorch) If reserved memory is allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF 运行时错误:CUDA内存不足。试图分配870.00 MiB (GPU 2;23.70 GiB总容量;19.18 GiB已经分配;323.81 MiB空闲;如果分配的内存是分配的内存尝试设置max_split_size_mb以避免碎片。请参阅文档了解内存管理和PYTORCH_CUDA_ALLOC_CONF 参考 https://blog.csdn.net/qq_37555071/article/details/108346569 https://blog.csdn.net/xiyou__/article/details/118529350 原因分析解决方案
① GPU空间没有释放
可能为PyTorch占用的GPU空间没有释放导致下次运行时出现CUDA out of memory。 命令行输入 nvidia-smi显示GPU的使用情况以及占用GPU的应用程序
nvidia-smi此时发现仅GPU0有4778MIB的占用 有两种解决方案
解决一 换GPU
将代码中的默认0换成指定2
# device cuda if torch.cuda.is_available() else cpu
device torch.device(cuda:2)解决二 杀掉进程
windows系统输入taskkill -PID 进程号 -F 结束占用的进程比如
taskkill -PID 7072 -Flinux系统输入kill 进程号 结束占用的进程比如
kill 7072然后再次输入 nvidia-smi 查看GPU使用情况 ② 更换GPU后仍未解决
法一调小batch_size
设到4基本上能解决问题如果还不行该方法pass。
法二定时清内存
在报错处、代码关键节点一个epoch跑完…插入以下代码目的是定时清内存
import torch, gcgc.collect()
torch.cuda.empty_cache()法三常用方法设置测试验证不计算参数梯度
在测试阶段和验证阶段前插入代码 with torch.no_grad()目的是该段程序不计算参数梯度如下
def test(model,dataloader):model.eval()with torch.no_grad(): ###插在此处for batch in tqdm(dataloader):……法四使用的别人的代码时将pin_memory: True改为False
如果怎么修改都会出现题中bug甚至跑了几轮之后突然出现 cuda out of memory查看代码中是否存在一下代码通常出现在main.py 或者数据加载的py文件中
kwargs {num_workers: 6, pin_memory: True} if torch.cuda.is_available() else {}将pin_memory: True改为False具体原因原博 pin_memory就是锁页内存创建DataLoader时设置pin_memoryTrue则意味着生成的Tensor数据最开始是属于内存中的锁页内存这样将内存的Tensor转义到GPU的显存就会更快一些。 主机中的内存有两种存在方式一是锁页二是不锁页锁页内存存放的内容在任何情况下都不会与主机的虚拟内存进行交换注虚拟内存就是硬盘而不锁页内存在主机内存不足时数据会存放在虚拟内存中。显卡中的显存全部是锁页内存,当计算机的内存充足的时候可以设置pin_memoryTrue。当系统卡住或者交换内存使用过多的时候设置pin_memoryFalse。因为pin_memory与电脑硬件性能有关pytorch开发者不能确保每一个炼丹玩家都有高端设备因此pin_memory默认为False。