Обнаружение прерванной ошибки ОС при попытке запустить распределенное задание GCMLE - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь запустить распределенное учебное задание GCMLE и получаю следующее сообщение об ошибке:

An error was raised. This may be due to a preemption in a connected worker or parameter server. The current session will be closed and a new session will be created. Error: OS Error

Пакет тренера представляет собой пользовательский оценщик, моделируемый во многом так же, как пользовательская перепись cloudml-samplesоценщик: https://github.com/GoogleCloudPlatform/cloudml-samples/tree/master/census/customestimator/trainer. Можно с уверенностью сказать, что файлы task.py в значительной степени идентичны, а в файле model.py функции input_fn() и parse_csv() одинаковы, и единственные реальные различия заключаются в спецификеmy model_fn().

Если я настрою свою модель для работы с одним standard_p100 GPU, я смогу тренироваться со скоростью ~ 15 шагов в секунду.Тем не менее, если я обновлю свою конфигурацию до распределенного параметра с 4 рабочими и 3 серверами параметров (см. Конфигурацию ниже), то появится сообщение об ошибке вытеснения, и 10 шагов займут ~ 600 секунд ...

config-distribution.yaml:

trainingInput:
  scaleTier: CUSTOM
  masterType: standard_p100
  workerType: standard_p100
  parameterServerType: large_model
  workerCount: 3
  parameterServerCount: 3

Если я использую ту же самую конфигурацию с образцом пользовательской оценки переписи, то модель будет работать быстрее, чем ожидалось, и не столкнется с ошибками выгрузки.Я пытался изменить пример переписи, чтобы точнее имитировать мой точный код, но все еще не смог воспроизвести ошибку.

Кто-нибудь сталкивался с подобными проблемами вытеснения при попытке обучить работу распределенного двигателя ml?Любой совет, как я мог бы лучше отладить проблему?Единственный совет, который я нашел в Интернете, предлагал, чтобы количество серверов параметров было как минимум вдвое меньше числа рабочих (именно поэтому я увеличил число серверов до 3 параметров), но мне все еще не повезло.

Чтобы добавить больше контекста из журналов, это типичный (повторяющийся) паттерн, который происходит, когда я пытаюсь тренироваться в распределенной настройке:

master-replica-0 loss = 16.5019, step = 53 (124.505 sec)
master-replica-0 An error was raised. This may be due to a preemption in a connected worker or parameter server. The current session will be closed and a new session will be created. Error: OS Error
master-replica-0 Graph was finalized.
master-replica-0 Restoring parameters from gs://.../model.ckpt-0
master-replica-0 Running local_init_op.
master-replica-0 Done running local_init_op.
master-replica-0 Saving checkpoints for 0 into gs://...
master-replica-0 Skip the current checkpoint eval due to throttle secs (600 secs).
master-replica-0 An error was raised. This may be due to a preemption in a connected worker or parameter server. The current session will be closed and a new session will be created. Error: OS Error

И затем этот цикл повторяется ...

ОБНОВЛЕНИЕ

Я увеличил количество серверов параметров до 10, а количество шагов в секунду увеличилось до 5-10 (все еще меньше 15 с одним GPU), и ошибка все еще произошла, нонемного спорадически.Что бы это подсказало, если бы помогло больше серверов параметров?Процессор и объем памяти очень низок независимо (<5-10%), поэтому не похоже, что PS перегружены, но модель имеет много переменных для обновления (встраивание слов по 50 тыс. С большим количеством измерений)).Может ли это как-то способствовать возникновению проблем? </p>

1 Ответ

0 голосов
/ 17 октября 2018

Узким местом в распределенном обучении с большим количеством параметров часто является пропускная способность сети.Если вы слишком насыщаете сеть, пакеты теряются, и TensorFlow считает, что сервер параметров не работает.Добавив больше серверов параметров, вы сможете распределить нагрузку на сеть.

Имейте в виду, что если ваша модель поддается использованию графических процессоров, вы, как правило, получаете гораздо лучшую пропускную способность на одной машине с 8 графическими процессорами, а не с 8машины с одним графическим процессором, потому что у вас не будет никаких сетевых нагрузок.

...