Как я могу использовать графический процессор узла драйвера с Horovod в кластере Azure Databricks?

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

from sparkdl import HorovodRunner 
hr = HorovodRunner(np=3) 
hr.run(train_hvd)

Но появляется следующее сообщение об ошибке:

HorovodRunner was called with np=3, which is greater than the maximum processes that can be placed
on this cluster. This cluster can place at most 2 processes on 2 executors. Training won't start
until there are enough workers on this cluster. You  can increase the cluster size or cancel the
current run and retry with a smaller np.

Видимо HorovodRunner не считает GPU на узле драйвера (правильно?). Когда я использую параметры np=-1 (только графический процессор драйвера), np=2 (где-то 2 графических процессора) или np=-2 (только драйвер, но с 2 графическими процессорами), все работает нормально, т.е. нет ничего функционально неправильного с моим код, кроме того, я не могу заставить его использовать все 3 доступных графических процессора.

(a) Есть ли способ заставить Horovod включить графические процессоры на узле драйвера в распределенное обучение?

(b) В качестве альтернативы: есть ли способ создать кластер с рабочими процессорами GPU, но с драйвером без GPU в Databricks?

1 ответ

Чтобы запустить HorovodRunner на драйвере только с n подпроцессами, используйте hr = HorovodRunner(np=-n). Например, если на узле драйвера имеется 4 графических процессора, вы можете выбрать n до 4.

Параметры: np - количество параллельных процессов, которые будут использоваться для работы Horovod. Этот аргумент действует только в Databricks Runtime 5.0 ML и выше. В версии с открытым исходным кодом он игнорируется. В Databricks каждый процесс будет занимать доступный слот задачи, который сопоставляется с графическим процессором в кластере графических процессоров или ядром процессора в кластере ЦП. Допустимые значения:

Если <0, это вызовет подпроцессы -np на узле драйвера для локального запуска Horovod. Обучающие сообщения stdout и stderr поступают в выходные данные ячейки записной книжки, а также доступны в журналах драйверов в случае усечения выходных данных ячейки. Это полезно для отладки, и мы рекомендуем сначала протестировать ваш код в этом режиме. Однако будьте осторожны с интенсивным использованием драйвера Spark в общем кластере Databricks. Обратите внимание, что np <-1 поддерживается только в Databricks Runtime 5.5 ML и выше.

Если> 0, это запустит задание Spark с запуском всех задач np и запустит задание Horovod на узлах задач. Он будет ждать, пока не станут доступны слоты задач np для запуска задания. Если np больше, чем общее количество слотов задач в кластере, задание завершится ошибкой. Начиная с Databricks Runtime 5.4 ML, обучающие сообщения stdout и stderr отправляются в вывод ячейки записной книжки. В случае, если вывод ячейки усечен, полные журналы доступны в потоке stderr задачи 0 под вторым заданием искры, запущенным HorovodRunner, которое вы можете найти в пользовательском интерфейсе Spark.

Если 0, это будет использовать все слоты задач в кластере для запуска задания.

Вы можете найти подробную информацию о параметре np в документации по API HorovodRunner и в " HorovodRunner: Distributed Deep Learning with Horovod".

Надеюсь это поможет.

Другие вопросы по тегам