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

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

Основы

Вы, наверное, уже знаете AWS как часть «облака», но в мире нет никакой магии, «облако» — это не какое-то пушистое и невидимое модное слово, которое люди разбрасывают, чтобы получить венчурные доллары (на самом деле это так). Что это на самом деле, так это:

Склады компьютеров в чужом дворе.

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

Вот краткое введение в несколько сервисов, которые вам необходимо знать для работы с SageMaker:

  • Управление идентификацией и доступом (IAM): это в основном управление учетными записями. Человек, которому принадлежит учетная запись AWS, является администратором или «пользователем root», и он может создавать и удалять «пользователей IAM» по своему желанию, как бог.

  • Elastic Compute Cloud (EC2): используется для создания виртуальных серверов, в основном компьютеров, над которыми вы получаете полный контроль. Думайте о EC2 как о AWS, собирающей аппаратное обеспечение компьютера для вас и предоставляющей вам интерфейс для управления компьютером.
  • Виртуальное частное облако (VPC).Эта услуга предназначена для управления вашей виртуальной частной сетью (что говорит само за себя). Если вы не знаете, что делаете, просто пока придерживайтесь настроек по умолчанию. Причина, по которой я говорю это, заключается в том, что 1) работает по умолчанию и 2) однажды я бездельничал и запустил шлюз NAT, не зная, что он стоит почти 30 долларов в месяц, пока не пройдет 3 месяца.
  • Simple Storage Service (S3): это в основном похоже на Google Cloud, OneDrive, Dropbox или любую другую файловую онлайн-систему, которую вы используете, за исключением того, что у нее есть контроль версий, нет корзины для мусора, вы можете управлять как и буквально где они хранятся, и они тесно интегрированы в экосистему AWS. S3 буквально предназначен только для хранения файлов.
  • CloudWatch. Здесь вы отслеживаете свои ресурсы, такие как журналы и показатели использования.

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

Вы, вероятно, слышали или играли с виртуальными машинами раньше. Что ж, контейнеры в основном таковы или, по крайней мере, так выглядят, за исключением того, что на самом деле они не являются виртуальными машинами. Не верите мне? Попробуйте запустить контейнер, а затем проверьте список процессов на вашем хост-компьютере, вы увидите процессы как для хоста, так и для контейнеров. Странно, да?

БАМ! Я только что создал слабое ощущение громкого шума в твоей голове, ты уже проснулся? Отлично, продолжим…

SageMaker

SageMaker — это еще один сервис в экосистеме AWS, специализирующийся на оптимизации конвейера разработки машинного обучения. Он использует EC2 для запуска экземпляров контейнера за кулисами, запускает эти экземпляры в вашей виртуальной частной сети, которой вы можете управлять через VPC, работает с S3 для хранения данных обучения и может отслеживаться с помощью CloudWatch.

SageMaker состоит из трех компонентов: Notebook, Training и Inference. Каждый из этих компонентов запускает экземпляр EC2 и управляет им. Изучение того, как использовать SageMaker, требует времени. Как только вы пройдете кривую обучения, эти три компонента будут работать вместе, чтобы упростить процесс за счет автоматизации процесса обучения и развертывания.

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

Без разделения вам понадобится огромный экземпляр виртуального сервера с большим объемом памяти для хранения данных обучения, графический процессор и много оперативной памяти для обучения, что делает его довольно дорогим. С помощью SageMaker вы можете получить инстанс меньшего размера для запуска ноутбука и конечной точки, при необходимости развернуть инстанс большего размера для обучения и дешево хранить свои данные в S3.

Кроме того, после того, как вы настроите код, многие вещи можно будет автоматизировать. Если вам нужно обновить набор данных, вам просто нужно обновить их на S3. Вы можете запустить задания по настройке гиперпараметров, чтобы протестировать различные гиперпараметры. Чтобы запустить новую конечную точку или обучающее задание с новыми данными, нужно просто повторно запустить несколько ячеек в записной книжке!

Для чего НЕ подходит SageMaker: если вы все еще раздумываете над архитектурой нейронной сети и вам нужно отладить код для обучения.

Начало учебного задания требует времени, много времени (например, минут). Если вам нужно отлаживать свой код для обучения, ожидание минут каждый раз для тестирования кода занимает очень много времени. Что вы можете сделать, так это протестировать свой код на другом экземпляре графического процессора, сначала используя меньший набор данных, а затем развернуть этот код, как только он заработает. (Экземпляр GPU, чтобы вы могли убедиться, что он работает с ядрами CUDA)

SageMaker Python SDK

SageMaker Python SDK — это библиотека для запуска заданий обучения, заданий настройки гиперпараметров и конечных точек логического вывода с кодом. Он также имеет набор встроенных алгоритмов ML, которые пользователь может использовать напрямую.

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

Вы создаете экземпляр оценщика, передавая местоположение скрипта Python (точку входа), тип обучающего экземпляра и различные другие гиперпараметры.

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

Например, создание экземпляра оценщика будет выглядеть так:

pytorch_estimator = PyTorch('pytorch-train.py',
    train_instance_type='ml.p3.2xlarge',
    train_instance_count=1,
    hyperparameters = {
        'epochs': 20, 
        'batch-size': 64,
        'learning-rate': 0.1,
        'momentum': 0.9
    })

Различные методы оценки затем будут использоваться для различных функций, включая запуск задания обучения и запуск конечной точки вывода:

# Start SageMaker training job
pytorch_estimator.fit('s3://my_bucket/my_training_data')
# Deploy model generated by fit()
pytorch_predictor = pytorch_estimator.deploy(
    initial_instance_count=1,
    instance_type='ml.p2.xlarge'
)
# make prediction using endpoint
response = pytorch_predictor.predict(data)
# delete endpoint
pytorch_estimator.delete_endpoint()

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

lr_range = ContinuousParameter(0.05, 0.06)
# configure HyperparameterTuner
my_tuner = HyperparameterTuner(estimator=pytorch_estimator,
    objective_metric_name='validation-accuracy',
    hyperparameter_ranges={'learning-rate': lr_range},
    metric_definitions=[{
        'Name': 'validation-accuracy',
        'Regex': 'validation-accuracy=(\d\.\d+)'
    }],
    max_jobs=100,
    max_parallel_jobs=10)
# start hyperparameter tuning job
my_tuner.fit({
    'train': 's3://my_bucket/my_training_data',
    'test': 's3://my_bucket/my_test_data'
})

Сноски

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