AWS Sagemaker |Почему обучение нескольких экземпляров занимает время, умноженное на номер экземпляра - PullRequest
0 голосов
/ 04 января 2019

Я использую AWS Sagemaker для обучения и развертывания модели, это пример примера для обучения модели

from sagemaker.estimator import Estimator
hyperparameters = {'train-steps': 10}
instance_type = 'ml.m4.xlarge'

estimator = Estimator(role=role,
                      train_instance_count=1,
                      train_instance_type=instance_type,
                      image_name=ecr_image,
                      hyperparameters=hyperparameters)

estimator.fit(data_location)

Упомянутый здесь образ докера представляет собой систему тензорного потока.

Предположим, что тренировка модели займет 1000 секунд, теперь я увеличу количество экземпляров до 5, затем время обучения увеличится в 5 раз, т.е. 5000 секунд.Насколько я понимаю, тренировочная работа будет распределена на 5 машин, поэтому в идеале это займет 200 секунд на машину, но, кажется, она проводит отдельную тренировку на каждой машине.Может кто-нибудь, пожалуйста, дайте мне знать, что он работает над распределенной системой в целом или с Tensorflow.

Я попытался найти ответ по этой документации https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-dg.pdf, но, похоже, способ работы на распределенных машинах неупоминается здесь.

1 Ответ

0 голосов
/ 04 января 2019

Используете ли вы API оценки TensorFlow в вашем скрипте?Если да, я думаю, что вы должны запустить скрипт, поместив его в класс sagemaker.tensorflow.TensorFlow, как описано в документации здесь .Если вы выполняете обучение таким образом, распараллеливание и обмен данными между экземплярами должны работать «из коробки».

Но учтите, что при увеличении количества экземпляров масштабирование не будет линейным.Обмен данными между экземплярами занимает много времени, и в вашем скрипте могут быть непараллелизированные узкие места, такие как загрузка данных в память.

...