Я следую руководству по DCGAN. Каждый раз, когда я пытаюсь загрузить набор данных CelebA, torchvision использует всю мою оперативную память (12 ГБ), и среда выполнения дает сбой. Я ищу способы, как я могу загружать и применять преобразования к набору данных, не перегружая ресурсы времени выполнения.
Воспроизводить
Вот часть кода, вызывающая проблемы.
# Root directory for the dataset
data_root = 'data/celeba'
# Spatial size of training images, images are resized to this size.
image_size = 64
celeba_data = datasets.CelebA(data_root,
download=True,
transform=transforms.Compose([
transforms.Resize(image_size),
transforms.CenterCrop(image_size),
transforms.ToTensor(),
transforms.Normalize(mean=[0.5, 0.5, 0.5],
std=[0.5, 0.5, 0.5])
]))
Полную записную книжку можно найти здесь
Среда
-
Версия PyTorch: 1.7.1 + cu101
-
Отладочная сборка: False
-
CUDA используется для сборки PyTorch: 10.1
-
ROCM, использованный для сборки PyTorch: N / A
-
ОС: Ubuntu 18.04.5 LTS (x86_64)
-
Версия GCC: (Ubuntu 7.5.0-3ubuntu1 ~ 18.04) 7.5.0
-
Версия Clang: 6.0.0-1ubuntu2 (теги / RELEASE_600 / final)
-
Версия CMake: версия 3.12.0
-
Версия Python: 3.6 (64-разрядная среда выполнения)
-
Доступен ли CUDA: True
-
Версия среды выполнения CUDA: 10.1.243
-
Модели и конфигурация графического процессора: GPU 0: Tesla T4
-
Версия драйвера Nvidia: 418.67
-
Версия cuDNN: /usr/lib/x86_64-linux-gnu/libcudnn.so.7.6.5
-
Версия среды выполнения HIP: N / A
-
Версия среды выполнения MIOpen: N / A
Версии соответствующих библиотек:
- [pip3] numpy == 1.19.4
- [pip3] torch == 1.7.1 + cu101
- [pip3] torchaudio == 0.7.2
- pip3] torchsummary == 1.5.1
- [pip3] torchtext == 0.3.1
- [pip3] torchvision == 0.8.2 + cu101
- [conda] Не удалось собрать
Дополнительный контекст
Вот некоторые из вещей, которые я пробовал:
- Скачивание и загрузка набора данных по отдельным строкам. например:
# Download the dataset only
datasets.CelebA(data_root, download=True)
# Load the dataset here
celeba_data = datasets.CelebA(data_root, download=False, transforms=...)
- Использование класса набора данных
ImageFolder
вместо классаCelebA
. например:
# Download the dataset only
datasets.CelebA(data_root, download=True)
# Load the dataset using the ImageFolder class
celeba_data = datasets.ImageFolder(data_root, transforms=...)
Проблема с памятью сохраняется в любом из случаев.
Вам необходимо использовать dataloader
— person Kinyugo schedule 01.01.2021
Похоже, что руководство было обновлено, чтобы продемонстрировать использование класса torchvision.datasets.ImageFolder
. Используя рецепт @kinyugo download + unzip (но не их собственный набор данных), остальная часть учебника проходит нормально на colab без ошибок памяти. — person Kinyugo schedule 25.06.2021
Попробуйте следующее:
Более подробную информацию о классе
Dataloader
можно найти здесь. Приведенный выше ответ любезно предоставлен этим блокнотом kaggle .Чтобы перебрать этот
data_loader
, используйте следующий цикл for:for i, (images, labels) in enumerate(data_loader):
; где изображения — это набор изображений. — person Kinyugo; 01.01.2021Проблема с памятью сохраняется даже после этого. — person Kinyugo; 01.01.2021
Решить проблему с памятью не удалось. Однако я придумал обходной путь — настраиваемый набор данных. Вот моя реализация:
Эта реализация эффективна с точки зрения памяти и работает для моего случая использования, даже во время обучения использованная память в среднем составляет около (4 ГБ). Однако я был бы признателен за дополнительную интуицию относительно того, что могло вызвать проблемы с памятью.