Я пытаюсь создать классификатор видео на основе 3D CNN, используя Pytorch. Когда я пытаюсь запустить одну точку данных, я сталкиваюсь с этой ошибкой:
CUDA out of memory. Tried to allocate 1.20 GiB (GPU 0; 14.76 GiB total capacity; 12.60 GiB already allocated; 1.09 GiB free; 12.61 GiB reserved in total by PyTorch)
Мои данные из 1000 видео имеют размер около 90 МБ на диске. Я думаю, что загружаю только модель и данные на GPU. Я не могу понять, что вызывает уже выделенные 12,6 ГБ памяти? моя модель слишком велика или это как-то связано с загруженными данными или с чем-то еще? Вот фрагмент моей модели. Он основан на C3D Tran et al, 2015.
self.conv1 = nn.Conv3d(3, 64, kernel_size=(3, 3, 3), padding=(1, 1, 1))
self.pool1 = nn.MaxPool3d(kernel_size=(1, 2, 2), stride=(1, 2, 2))
self.conv2 = nn.Conv3d(64, 128, kernel_size=(3, 3, 3), padding=(1, 1, 1))
self.pool2 = nn.MaxPool3d(kernel_size=(2, 2, 2), stride=(2, 2, 2))
self.conv3a = nn.Conv3d(128, 256, kernel_size=(3, 3, 3), padding=(1, 1, 1))
self.conv3b = nn.Conv3d(256, 256, kernel_size=(3, 3, 3), padding=(1, 1, 1))
self.pool3 = nn.MaxPool3d(kernel_size=(2, 2, 2), stride=(2, 2, 2))
self.conv4a = nn.Conv3d(256, 512, kernel_size=(3, 3, 3), padding=(1, 1, 1))
self.conv4b = nn.Conv3d(512, 512, kernel_size=(3, 3, 3), padding=(1, 1, 1))
self.pool4 = nn.MaxPool3d(kernel_size=(2, 2, 2), stride=(2, 2, 2))
self.conv5a = nn.Conv3d(512, 512, kernel_size=(3, 3, 3), padding=(1, 1, 1))
self.conv5b = nn.Conv3d(512, 512, kernel_size=(3, 3, 3), padding=(1, 1, 1))
self.pool5 = nn.MaxPool3d(kernel_size=(2, 2, 2), stride=(2, 2, 2), padding=(0, 1, 1))
self.fc6 = nn.Linear(373248, 4096)
self.fc7 = nn.Linear(4096, 128)
self.fc8 = nn.Linear(128, 2)
self.dropout = nn.Dropout(p=0.5)
self.relu = nn.ReLU()
self.softmax = nn.Softmax()
Кроме того, я использую Dataset, DataLoader и DeviceDataLoader для загрузки данных. Даже если они загружают все данные сразу, что приводит к раздуванию 90 МБ данных до 12,6 ГБ.
высказывание «1000 видео имеют размер около 90 МБ на диске» не слишком полезно. важнее то, насколько они велики при декодировании. т. е. сколько кадров какого разрешения и какого типа данных вы используете для хранения на графическом процессоре