Как я могу использовать графический процессор узла драйвера с 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".
Надеюсь это поможет.