DataParallel multi-gpu RuntimeError: блок ожидает как минимум одномерный тензор - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь запустить мою модель на нескольких графических процессорах, используя DataParallel, установив model = nn.DataParallel(model).cuda(), но каждый раз получаю эту ошибку -

RuntimeError: чанк ожидает по крайней мере одномерный тензор (чанк в/pytorch/aten/src/ATen/native/TensorShape.cpp:184).

Мой код правильный.Кто-нибудь знает в чем дело?

Я попытался установить параметр device_ids=[0,1], а также CUDA_VISIBLE_DEVICES на терминале.Также пробовал разные размеры партии.

1 Ответ

0 голосов
/ 18 мая 2019

Чтобы определить проблему, вы должны проверить форму ваших входных данных для каждой мини-партии. Документация гласит: nn.DataParallel разбивает входной тензор на dim0 и отправляет каждый кусок в указанные графические процессоры. Из сообщения об ошибке кажется, что вы пытаетесь передать 0-мерный тензор.

Одной из возможных причин может быть, если у вас есть мини-пакет с n примерами, и вы запускаете свою программу на более чем n графических процессорах, тогда вы получите эту ошибку.

Давайте рассмотрим следующий сценарий.

  • Всего примеров обучения = 161, Размер партии = 80, Общее количество мини-партий = 3
  • Количество графических процессоров, указанных для DataParallel = 3

Теперь в вышеприведенном сценарии в 3-й мини-партии будет 1 пример. Таким образом, невозможно отправить чанки на все конкретные графические процессоры, и вы получите сообщение об ошибке. Поэтому, пожалуйста, проверьте, не являетесь ли вы жертвой этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...