Как исправить ошибку выделения памяти в SageMaker без увеличения размера экземпляра? - PullRequest
0 голосов
/ 21 мая 2019

Как можно решить проблемы с памятью при обучении CNN в SageMaker, увеличив количество экземпляров, а не изменив объем памяти, который есть у каждого экземпляра?

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

Вот код, который я запускаю в ячейке ноутбука Jupyter:

from sagemaker.tensorflow import TensorFlow

estimator = TensorFlow(entry_point='train_aws.py',
                       role=role,
                       framework_version='1.12.0',
                       training_steps= 100,                                  
                       evaluation_steps= 100,
                       hyperparameters={'learning_rate': 0.01},
                       train_instance_count=2,
                       train_instance_type='ml.c4.xlarge') 

estimator.fit(inputs)

Я думал, что добавление большего количества экземпляров увеличитобъем памяти, но он просто дал мне ошибку распределения.

1 Ответ

0 голосов
/ 23 мая 2019

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

Скорее всего, уменьшение размера пакета в вашем коде должно помочь вам восстановиться после ошибки.

Когда вы создаете обучающее задание в SageMaker, ваш код устанавливается в нескольких экземплярах, а данные изS3 также копируется в эти экземпляры.Ваш код обращается к данным из локального тома экземпляра (обычно через EBS), аналогично тому, как он будет работать локально.В каждом случае он будет выполнять следующие шаги:

  • запускает контейнер Docker, оптимизированный для TensorFlow.
  • загружает набор данных.
  • настройка переменных среды, связанных с обучением
  • настройка распределенной среды обучения, если настроено использование сервера параметров
  • запускает асинхронное обучение

Чтобы воспользоватьсяраспределение Вы должны включить параметры распространения TensorFlow (см .: https://sagemaker.readthedocs.io/en/stable/using_tf.html#distributed-training)

from sagemaker.tensorflow import TensorFlow

tf_estimator = TensorFlow(entry_point='train_aws.py', 
                          role=role,
                          train_instance_count=2, 
                          train_instance_type='ml.c4.xlarge',
                          framework_version='1.12.0', 
                          py_version='py3',
                          training_steps= 100,                                  
                          evaluation_steps= 100,
                          hyperparameters={'learning_rate': 0.01},
                          distributions={'parameter_server': {'enabled': True}})

tf_estimator.fit('s3://bucket/path/to/training/data')

Также обратите внимание, что вы можете равномерно распределять ваши данные из S3 в обучающие экземпляры, что может ускорить ваше обучение в каждом экземпляревидит только часть данных.

...