already allocated; 0 bytes free; 3.37 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
时间: 2023-06-26 16:05:14 浏览: 439
ide-floppy_ioctl.rar_The Number
这个错误出现的原因是PyTorch在GPU内存分配时出现了内存碎片化,导致已经保留了一定量的内存,但实际上没有足够的连续空间来分配所需的内存。可以通过将`max_split_size_mb`设置为大于0的值来避免内存碎片化,例如:
```
import torch
torch.cuda.empty_cache() # 释放不必要的内存
torch.backends.cuda.reserved_memory() # 查看保留内存大小
torch.backends.cuda.max_memory_allocated() # 查看分配的最大内存大小
torch.backends.cuda.max_memory_reserved() # 查看保留的最大内存大小
torch.backends.cuda.cufft_plan_cache.clear() # 清空cuFFT计划缓存
# 设置max_split_size_mb值
torch.backends.cuda.split_kernel_size = 1024
torch.backends.cuda.max_split_size_mb = 16000
```
另外,可以参考PyTorch的内存管理文档和PYTORCH_CUDA_ALLOC_CONF进行更深入的调优。
阅读全文