В нашем предыдущем блоге мы познакомились с основами SageMaker. Большинство сложностей было скрыто от нас из-за эффективно реализованного API, который позволяет нам обучать и развертывать модель всего за несколько строк. Однако можно выйти за рамки базовых конфигураций, чтобы получить лучший контроль и понимание наших моделей. Для этого мы рассмотрим следующие ключевые компоненты:

  • Доступные модели и конечные точки
  • Журналы и метрики
  • Обучение в локальном режиме

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

Доступные модели и конечные точки

API SageMaker работает прямо из Jupyter Notebook, где вы можете запустить учебное задание и развернуть свою модель. Однако весь процесс не привязан напрямую к самому экземпляру ноутбука. Это хорошая новость, если вам нужно обучать модель в течение нескольких дней или если ваш интерактивный сеанс с записной книжкой потерян, но затем вам нужно знать, как получить существующее учебное задание и как подключиться к существующей развернутой модели (т. Е. Конечной точке ).

Получение учебной работы

Чтобы найти существующее учебное задание, нам нужно знать его название. При запуске учебного задания SageMaker по умолчанию присваивает ему имя в строке «sagemaker-mxnet-2018–07–09–22–59–29–027». Также можно указать имя с помощью параметра base_job_name, передаваемого для MXNetEstimator. В нашем случае мы ничего не указали. Возможный способ получить название вакансии - через веб-сайт SageMaker.

Теперь мы можем перейти к загрузке процесса обучения в записной книжке:

estimator = MXNetEstimator(entry_point='train.py', 
                           role=sagemaker.get_execution_role(),
                           train_instance_count=1, 
                           train_instance_type='ml.p3.2xlarge')
estimator.attach('sagemaker-mxnet-2018-07-10-18-29-40-566')

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

Предыдущая ситуация предполагает, что у нас есть учебное задание или что мы ведем учет выполненного задания. Однако у нас может быть только локальная копия окончательно сохраненной модели (т.е. файл model.tar.gz). Тем не менее, его все еще можно загрузить и развернуть следующим образом:

from sagemaker.mxnet.model import MXNetModel
sagemaker_model = MXNetModel(model_data='path/to/model.tar.gz',
                             role=sagemaker.get_execution_role(),
                             entry_point='train.py')
predictor = sagemaker_model.deploy(initial_instance_count=1,
                                   instance_type='ml.m4.xlarge')

Параметры модели могут находиться на локальном диске или в корзине S3.

Подключение к существующей конечной точке

Учитывая, что мы уже развернули модель в прошлом, нас может заинтересовать получение ее конечной точки (возможно, для другого интерфейса, кроме записной книжки SageMaker, то есть веб-интерфейса). Еще раз, все, что нам нужно, это имя. При вызове метода fit оценщика модель будет сохранена и станет доступной на веб-сайте SageMaker:

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

from sagemaker.mxnet import MXNetPredictor
predictor = MXNetPredictor(‘sagemaker-mxnet-2018–06–29–2254–45–509’)

Журналы и метрики

При обучении задания все, что регистрируется в экземпляре записной книжки, также регистрируется в CloudWatch. Это означает, что мы можем легко восстановить и прочитать журналы прошлых заданий. Для этого нам нужно пройти через веб-интерфейс CloudWatch.

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

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

Таким образом, CloudWatch предоставит нам важную информацию, особенно если мы хотим убедиться, что наша конечная точка имеет достаточно ресурсов для количества запросов, которые она получает. К счастью, есть умный способ справиться с колебаниями спроса - автоматическое масштабирование. Чтобы включить эту функцию, нам нужно действовать следующим образом:

Обучение в локальном режиме

Задержка, необходимая для запуска задания, не является незначительной, особенно когда нужно убедиться, что код по-прежнему работает без сбоев после нескольких незначительных изменений. Сотрудники SageMaker упростили нам задачу с помощью локального режима, который сокращает время ожидания до нуля. Как следует из названия, обучающий код будет запущен в том же экземпляре, что и ноутбук SageMaker. У нас есть выбор между local_cpu и local_gpu (для случаев, когда наш экземпляр ноутбука имеет встроенный графический процессор). Нам нужно будет загрузить следующий скрипт (который устанавливает локальные зависимости) в наш экземпляр записной книжки и запустить его через записную книжку.

!/bin/bash setup.sh # Run the script in the notebook
instance_type='local_gpu' # Choose local training (CPU or GPU)
m = MXNet('train.py', 
          role=role, 
          train_instance_count=1, 
          train_instance_type=instance_type, 
          hyperparameters={'batch_size': 1024, 
                           'epochs': 50})

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

Заключение

Мы рассмотрели три различных способа расширения нашего контроля над SageMaker. Мы видели, что API SageMaker позволяет нам извлекать учебные задания, сохраненные модели и конечные точки всего в несколько строк, в то время как CloudWatch предоставляет нам важную информацию о каждом из этих экземпляров. Мы также увидели, что обучение в локальном режиме позволяет нам создавать прототипы и отлаживать гораздо более эффективно. Некоторые из этих преимуществ достигаются за счет повышенной сложности, которая, как мы считаем, должна быть управляемой - если у вас возникнут какие-либо трудности при их использовании, сообщите нам об этом.