Использование data.to (устройство) с графическими процессорами cuda - PullRequest
0 голосов
/ 02 ноября 2019

Я пытаюсь реализовать нейронную сеть для работы с 8 графическими процессорами, и я просто хочу уточнить, что именно делают эти команды

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)
data.to(device)

Будет ли это автоматически распространять обучение на 8 графических процессоров? Спасибо!

1 Ответ

1 голос
/ 03 ноября 2019

Нет. Фрагмент кода переместит модель и данные в GPU, если CUDA доступна, в противном случае он поместит их в CPU.

  • torch.device('cuda') относится к текущему устройству cuda
  • torch.device('cuda:0') см. Устройство cuda с index=0

Чтобы использовать все 8 графических процессоров, вы можете сделать что-то вроде:

if torch.cuda.device_count() > 1:
    model = torch.nn.DataParallel(model)

Примечание:

  • torch.cuda.device_count() возвращает количество доступных графических процессоров.
  • Вам не нужно звонить: data = torch.nn.DataParallel(data)

Почему? Потому что torch.nn.DataParallel

- это контейнер, который распараллеливает применение данного модуля путем разделения входа между указанными устройствами путем разбиения на части впакетное измерение (другие объекты будут скопированы один раз для каждого устройства). В прямом проходе модуль реплицируется на каждое устройство, и каждая реплика обрабатывает часть ввода. Во время обратного прохода градиенты из каждой реплики суммируются в исходном модуле.

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

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