Нет. Фрагмент кода переместит модель и данные в 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
- это контейнер, который распараллеливает применение данного модуля путем разделения входа между указанными устройствами путем разбиения на части впакетное измерение (другие объекты будут скопированы один раз для каждого устройства). В прямом проходе модуль реплицируется на каждое устройство, и каждая реплика обрабатывает часть ввода. Во время обратного прохода градиенты из каждой реплики суммируются в исходном модуле.
Размер пакета должен быть больше, чем количество используемых графических процессоров.