Настройка среды Amazon SageMaker на локальной машине

Автор оригинала: Sam Palani
  • Перевод
Перевод статьи подготовлен в преддверии старта курса «Промышленный ML на больших данных»





Amazon SageMaker дает не просто возможность управлять notebook-ами в Jupyter, а предоставляет конфигурируемый сервис, который позволяет создавать, обучать, оптимизировать и разворачивать модели машинного обучения. Распространённое заблуждение особенно в начале работы с SageMaker заключается в том, что для использование этих сервисов вам нужен SageMaker Notebook Instance или SageMaker (Studio) Notebook. На самом деле вы можете запустить все сервисы непосредственно с вашего локального компьютера или даже вашей любимой IDE.

Прежде чем мы пойдем дальше, давайте разберемся как взаимодействовать с сервисами Amazon SageMaker. У вас есть два API:

SageMaker Python SDK – высокоуровневый API на Python, который абстрагирует код для построения, обучения и развертывания моделей машинного обучения. В частности, он предоставляет эстиматоров для алгоритмов первого класса или встроенных алгоритмов, а также поддерживает фреймворки, такие как TensorFlow, MXNET и т.д. В большинстве случаев вы будете использовать его для взаимодействия с интерактивными задачами машинного обучения.

AWS SDK – это низкоуровневый API, который используется для взаимодействия со всеми поддерживаемыми сервисами AWS не обязательно для SageMaker. AWS SDK доступен для большинства популярных языков, таких как Java, Javascript, Python (boto) и т.д. В большинстве случаев вы будете использовать этот API для таких вещей, как создание ресурсов для автоматизации или взаимодействия с другими сервисами AWS, которые не поддерживаются SageMaker Python SDK.

Почему локальная среда?


Стоимость – это первое, что приходит в голову, но также немаловажную роль играет гибкость использования вашей родной IDE и возможность работать в автономном режиме и запускать задачи в облаке AWS по готовности.

Как работает локальная среда


Вы пишите код для построения модели, но вместо экземпляра SageMaker Notebook или SageMaker Studio Notebook вы делаете это на своей локальной машине в Jupyter или из своей IDE. Затем, когда все готово, вы начнете обучение на экземплярах SageMaker на AWS. После обучения модель будет храниться в AWS. Затем можно запустить развертывание или пакетное преобразование с локальной машины.

Настройка среды с помощью conda


Рекомендуется настроить виртуальную среду Python. В нашем случае мы будем использовать conda для управления виртуальными средами, но вы можете воспользоваться virtualenv. Опять же Amazon SageMaker использует conda для управления средами и библиотеками. Предполагается, что у вас уже установлена conda, если нет – то вам сюда.

Создаем новую среду conda


conda create -n sagemaker python=3


Активируем и верифицируем среду



Устанавливаем необходимые библиотеки


Чтобы установить библиотеки, воспользуйтесь командами conda или pip. Выберем вариант с conda.
conda install -y pandas numpy matplotlib

Устанавливаем библиотекиAWS


Установим AWS SDK для Python (boto), awscli и SageMaker Python SDK. SageMaker Python SDK недоступен в качестве библиотеки conda, поэтому тут просто воспользуемся pip.

pip install boto3 awscli sagemaker

Если вы впервые используете awscli, вам нужно его настроить. Здесь вы можете посмотреть, как это сделать.

По умолчанию будет установлена вторая версия SageMaker Python SDK. Обязательно проверьте наличие критических изменений во второй версии SDK.

Устанавливаем Jupyter и создаем ядро


conda install -c conda-forge jupyterlab
python -m ipykernel install --user --name sagemaker

Верифицируем среду и проверяем версии


Запустите Jupyter через jupyter lab и выберите ядро sagemaker, которое мы создали выше.



Затем проверьте версии в notebook и убедитесь, что это именно те, которые нужны.



Создаем и обучаем


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

Импортируем библиотеки


Импортируйте необходимые библиотеки и укажите роль. Ключевое отличие здесь заключается в том, что нужно указать напрямую arn роли, а не get_execution_role(). Поскольку вы запускаете все с локального компьютера с учетными данными AWS, а не экземпляр notebook с ролью, функция get_execution_role() работать не будет.

from sagemaker import image_uris # Use image_uris instead of get_image_uri
from sagemaker import TrainingInput  # Use instead of sagemaker.session.s3_input
region = boto3.Session().region_name
container = image_uris.retrieve('image-classification',region)
bucket= 'your-bucket-name'
prefix = 'output'
SageMakerRole='arn:aws:iam::xxxxxxxxxx:role/service-role/AmazonSageMaker-ExecutionRole-20191208T093742'

Создаем эстиматор


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

s3_output_location = 's3://{}/output'.format(bucket, prefix)
classifier = sagemaker.estimator.Estimator(container, 
                                         role=SageMakerRole,
                                         instance_count=1, 
                                         instance_type='ml.p2.xlarge',
                                         volume_size = 50,
                                         max_run = 360000,
                                         input_mode= 'File',
                                         output_path=s3_output_location)

classifier.set_hyperparameters(num_layers=152,
                             use_pretrained_model=0,
                             image_shape = "3,224,224",
                             num_classes=2,
                             mini_batch_size=32,
                             epochs=30,
                             learning_rate=0.01,
                             num_training_samples=963,
                             precision_dtype='float32')

Каналы обучения


Укажите каналы обучения так, как вы делаете это всегда, тут тоже нет никаких изменений по сравнению с тем, как вы сделали бы это на своем экземпляре notebook.

train_data = TrainingInput(s3train, distribution='FullyReplicated', 
                        content_type='application/x-image', s3_data_type='S3Prefix')
validation_data = TrainingInput(s3validation, distribution='FullyReplicated', 
                             content_type='application/x-image', s3_data_type='S3Prefix')
train_data_lst = TrainingInput(s3train_lst, distribution='FullyReplicated', 
                        content_type='application/x-image', s3_data_type='S3Prefix')
validation_data_lst = TrainingInput(s3validation_lst, distribution='FullyReplicated', 
                             content_type='application/x-image', s3_data_type='S3Prefix')

data_channels = {'train': train_data, 'validation': validation_data, 
                 'train_lst': train_data_lst, 'validation_lst': validation_data_lst}

Начинаем обучение


Начните задачу по обучению на SageMaker, вызвав метод fit, который начнет обучение на экземплярах SageMaker AWS.

classifier.fit(inputs=data_channels, logs=True)



Вы можете проверить статус задач обучения с помощью list-training-jobs.

Вот и все. Сегодня мы разобрались с тем, как локально настроить среду SageMaker и собрать модели машинного обучения на локальной машине с помощью Jupyter. Помимо Jupyter вы можете сделать то же самое из собственной IDE.
Удачного обучения!

OTUS. Онлайн-образование
Цифровые навыки от ведущих экспертов

Комментарии 1

    0
    собрать модели машинного обучения на локальной машине с помощью Jupyter.
    Начните задачу по обучению на SageMaker, вызвав метод fit, который начнет обучение на экземплярах SageMaker AWS

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


    При этом, афаик, у SageMaker была возможность полного локального запуска, по крайней мере, для пользовательских контейнеров, только вот под Windows она у меня так и не завелась.

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

    Самое читаемое