我遇到了一个GPU内存分配的问题,而训练GPT-2模型上的GPU与24 GB的VRAM。尽管有大量的可用内存,我收到以下错误:
OutOfMemoryError:CUDA内存不足。尝试分配64.00 MiB(GPU 0; 23.68 GiB总容量; 18.17 GiB已分配; 64.62 MiB可用; PyTorch总共保留了18.60 GiB)如果保留内存>>分配内存,请尝试设置max_split_size_mb以避免碎片。有关内存管理和PYTORCH_CUDA_ALLOC_CONF,请参见文档。
以下是我的设置和模型训练的规格:
GPU:NVIDIA GPU,24 GB VRAM GPT-2,大小约为3 GB,800个参数,每个参数为32位训练数据:36,000个训练示例,向量长度为600训练配置:5个epoch,批处理大小为16,启用fp 16。
型号尺寸:
GPT-2型号:约3 GB
梯度:
梯度的大小通常与模型的参数相同。
批量和训练示例:
批量:16
培训示例:36,000
向量长度:600
每个批处理的内存分配:
型号:3 GB(每批不变)
梯度:3 GB(每个批次不变)
输入数据:16 x 600(向量长度)x 4字节(假设每个值都是32位浮点数)= 37.5 KB/批
输出数据:16 x 600(向量长度)x 4字节(假设每个值都是32位浮点型)=每批37.5 KB
基于上述计算,我的场景中每个批处理的内存分配大约为:
型号:3 GB
梯度:3 GB
输入和输出数据:75 KB
我将感谢任何关于如何解决这个问题的见解或建议。提前感谢您的帮助!
1条答案
按热度按时间ct3nt3jp1#
通常,此问题是由使用CUDA但未刷新内存的进程引起的。如果没有任何进程在运行,最有效的方法是识别它们并杀死它们。
从命令行运行:
如果您还没有安装它,可以使用以下命令:
它将打印如下内容:
在打印的底部,您会发现正在使用GPU及其PID的进程。假设您使用的是Linux,您可以使用以下命令杀死它们,方法是将
ProcessPID
替换为您的进程的实际PID(再次确保所有进程都已到达末尾):如果这不起作用,请尝试: