Как я могу использовать GPU узла драйвера с Horovod в кластере Azure Databricks? - PullRequest
0 голосов
/ 09 января 2020

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

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

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

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

1 Ответ

0 голосов
/ 30 января 2020

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

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

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

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

Подробную информацию о параметре np можно найти в документации HorovodRunner API и " HorovodRunner: Distributed Глубокое обучение с Horovod".

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...