Большая часть моделей машинного обучения в наши дни, особенно в НЛП, публикуется в PyTorch. В этой статье рассматриваются следующие
- Настройка облачной машины Google с помощью PyTorch (для приобретения облачной машины Google используйте эту ссылку)
- Тестирование параллелизма на машинах с несколькими GPU на игрушечном примере
- Изменения кода, необходимые для того, чтобы модель использовала несколько графических процессоров как для обучения, так и для логического вывода.
Настройка машины Google Cloud с PyTorch
Запуск сценариев в этом репозитории Github и следующие инструкции должны настроить облачную машину Google с драйверами для одного или нескольких графических процессоров Nvidia.
Тестирование параллелизма на машине с несколькими GPU
Включение модели для параллельной обработки данных — это буквально одна строка кода.
model = Model(input_size, output_size) if torch.cuda.device_count() > 1: model = nn.DataParallel(model) #enabling data parallelism
Полный код игрушечного теста указан здесь. Вывод этого примера (python multi_gpu.py ) на компьютере с 8 GPU показан ниже:
Размер пакета равен 32. Таким образом, первые 7 GPU обрабатывают 4 выборки, а 8-й GPU обрабатывает оставшиеся 2.
Изменения в коде, чтобы модель использовала несколько графических процессоров для обучения и логического вывода.
Сначала мы создаем дескриптор устройства, который будет использоваться ниже.
device = torch.device("cuda" if torch.cuda.is_available() else "cpu") n_gpu = torch.cuda.device_count()
Затем для включения параллелизма данных как для обучения, так и для вывода
model = Model(input_size, output_size) if n_gpu > 1: #enabling data parallelism
Помимо включения параллелизма данных, для обучения нам потребуется усреднить потери по графическим процессорам.
if n_gpu > 1: loss = loss.mean()
Также данные (тензоры) необходимо преобразовать (CPU в Cuda)следующим образом. Пример показан ниже
input_ids = input_ids.to(device) input_mask = input_mask.to(device) segment_ids = segment_ids.to(device) label_ids = label_ids.to(device) with torch.no_grad(): logits = model(input_ids, segment_ids, input_mask)
По этой ссылке показан подробный пример
Ссылка на Github для драйверов графического процессора/настройки PyTorch