Измените существующий код Pytorch для запуска на нескольких графических процессорах

#python #neural-network #pytorch #gpu

#python #нейронная сеть #pytorch #графический процессор

Вопрос:

Я пытаюсь запустить Pytoch UNet по следующей ссылке на 2 или более графических процессорах

Pytorch-UNet github

изменения, которые я делал до сих пор, это:

1. из:

 net = UNet(n_channels=3, n_classes=1, bilinear=True)
logging.info(f'Network:n'
             f't{net.module.n_channels} input channelsn'
             f't{net.module.n_classes} output channels (classes)n'
             f't{"Bilinear" if net.module.bilinear else "Transposed conv"} upscaling')
  

Для:

 net = UNet(n_channels=3, n_classes=1, bilinear=True)
net = nn.DataParallel(net)
logging.info(f'Network:n'
             f't{net.module.n_channels} input channelsn'
             f't{net.module.n_classes} output channels (classes)n'
             f't{"Bilinear" if net.module.bilinear else "Transposed conv"} upscaling')
  

в каждом месте, где был:

 net.<something>
  

заменено на:

 net.module.<something>
  

Я знаю, что pytorch видит больше, чем 1 графический процессор, потому torch.cuda.device_count() что возвращает

2

.

Но пока я пытаюсь запустить поезд, для которого требуется больше времени, чем у первого графического процессора, который я получаю:

Ошибка выполнения: CUDA не хватает памяти. Пытался выделить 512,00 Мбайт (GPU 0; 11,91 гигабайт общей емкости; 10,51 гигабайт уже выделено; 82,56 Мбайт свободно; 818,92 Мбайт в кэше)

Я изменяю требуемую память для обучения, изменяя размер пакета. Приветствуется любая помощь

Редактировать

Я вижу, что обучение выполняется в два раза быстрее с 2 графическими процессорами, но максимальный размер пакета для запуска с одним графическим процессором такой же, как и для двух графических процессоров. Есть ли какой-либо способ использовать память 2 графических процессоров вместе во время одного тренировочного прогона?

Комментарии:

1. Уменьшите размер пакета, пока он не будет соответствовать наименьшему объему памяти графического процессора.

2. @Rika, я хочу работать на 2 графических процессорах, с небольшой партией у меня нет проблем с запуском на одном

3. Ваши графические процессоры должны иметь одинаковый объем памяти, если у них разные объемы, Pytorch будет использовать меньший объем в качестве доступного объема видеопамяти на обоих графических процессорах. Итак, допустим, у вас есть 8-гигабайтный и 12-гигабайтный gpu. если вы хотите обучаться, ваш размер пакета должен быть таким, чтобы он не превышал 8 гигабайт. если это произойдет, вы не сможете обучиться, и он завершится ошибкой с сообщением об ошибке, которое вы получите

4. Спасибо @Rika, я вижу разницу между запуском с 1 и 2 графическими процессорами, я имею в виду, что с 2 он работает в два раза быстрее. Но я не могу понять, почему он не использует память второго графического процессора. Я имею в виду, что я должен сделать, чтобы использовать память второго, даже 16 ГБ на основе вашего примера.

Ответ №1:

Моей ошибкой было изменение output = net(input) (обычно называемое как model ) на:

output = net.module(input)

вы можете найти информацию здесь