pytorch OutOfMemoryError:CUDA内存不足,尽管GPU内存可用

pdkcd3nj  于 2023-06-29  发布在  其他
关注(0)|答案(1)|浏览(227)

我遇到了一个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
我将感谢任何关于如何解决这个问题的见解或建议。提前感谢您的帮助!

ct3nt3jp

ct3nt3jp1#

通常,此问题是由使用CUDA但未刷新内存的进程引起的。如果没有任何进程在运行,最有效的方法是识别它们并杀死它们。
从命令行运行:

nvidia-smi

如果您还没有安装它,可以使用以下命令:

sudo apt-get install -y nvidia-smi

它将打印如下内容:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 495.29.05    Driver Version: 495.29.05    CUDA Version: 11.5     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA A100-PCI...  On   | 00000000:18:00.0 Off |                    0 |
| N/A   32C    P0    37W / 250W |  11480MiB / 40536MiB |      0%      Default |
|                               |                      |             Disabled |
+-------------------------------+----------------------+----------------------+
|   1  NVIDIA A100-PCI...  On   | 00000000:3B:00.0 Off |                    0 |
| N/A   31C    P0    33W / 250W |  10200MiB / 40536MiB |      0%      Default |
|                               |                      |             Disabled |
+-------------------------------+----------------------+----------------------+
|   2  NVIDIA A100-PCI...  On   | 00000000:86:00.0 Off |                    0 |
| N/A   53C    P0    41W / 250W |  10200MiB / 40536MiB |      0%      Default |
|                               |                      |             Disabled |
+-------------------------------+----------------------+----------------------+
|   3  NVIDIA A100-PCI...  On   | 00000000:AF:00.0 Off |                    0 |
| N/A   31C    P0    35W / 250W |  10200MiB / 40536MiB |      0%      Default |
|                               |                      |             Disabled |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A     29142      C   /usr/bin/python3                11477MiB |
|    1   N/A  N/A     29142      C   /usr/bin/python3                10197MiB |
|    2   N/A  N/A     29142      C   /usr/bin/python3                10197MiB |
|    3   N/A  N/A     29142      C   /usr/bin/python3                10197MiB |
+-----------------------------------------------------------------------------+

在打印的底部,您会发现正在使用GPU及其PID的进程。假设您使用的是Linux,您可以使用以下命令杀死它们,方法是将ProcessPID替换为您的进程的实际PID(再次确保所有进程都已到达末尾):

kill ProcessPID

如果这不起作用,请尝试:

kill -9 ProcessPID

相关问题