Автор: Викеш Пандей

Знаете ли вы, что Amazon SageMaker предоставляет 8 различных наборов инструментов , которые значительно упрощают процесс запуска контейнера для обучения/логического вывода и кода в SageMaker? Независимо от того, используете ли вы какой-либо контейнер, предоставленный SageMaker, или создаете свой собственный контейнер (BYOC), эти наборы инструментов играют очень важную роль.

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

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

Почему вам важно об этом знать?

Есть в основном две причины, по которым вам следует знать об этих наборах инструментов:

1. Это значительно упрощает отладку контейнера обучения и/или логического вывода и кода для ошибок.
2. Вы можете использовать SageMaker более эффективно (и быстро), зная, какие переменные среды вам доступны, какие библиотеки (и их версии) помещаются в контейнеры для обучения/вывода и т. д., и какую реализацию SageMaker сделал для соединения контейнера и кода вместе.

В этом блоге мы углубимся в мир этих наборов инструментов и ответим на следующие вопросы:

  1. Какие все инструменты есть?
  2. Зачем они вам нужны?
  3. Что делать, если вы не используете эти наборы инструментов?
  4. Почему их так много?
  5. Как выбрать, какой из них использовать?
  6. Почему наборы инструментов не согласованы между платформами/жизненным циклом машинного обучения? (подробнее об этом в следующих разделах)

Какие есть все наборы инструментов?

SageMaker предоставляет 8 (да, вы правильно прочитали!) различных наборов инструментов, которые помогут вам при работе в SageMaker. Они обслуживают в первую очередь этапы обучения и логического вывода. С помощью приведенной ниже диаграммы давайте поймем, как они соотносятся друг с другом в иерархии:

Как видите, наборы инструментов разделены на две части (обучение и вывод). Технически эти наборы инструментов представляют собой пакеты Python, которые вы можете установить через pip в вашем Dockerfile.

ПРИМЕЧАНИЕ. Если вы заметили, что на приведенной выше диаграмме отсутствуют huggingface-training-toolkit и tensorflow-inference-toolkits . Продолжайте читать блог до конца, и вы тоже найдете ответ на эту загадку :). А пока давайте немного подробнее разберемся в этих наборах инструментов.

1. Наборы инструментов для обучения

Это пакеты, которые вам нужно добавить в свой Dockerfile, чтобы сделать ваши контейнеры совместимыми для запуска в SageMaker в учебных целях.

  1. SageMaker Training Toolkit (родительский)
  2. SageMaker TensorFlow Training Toolkit (дополняет sagemaker-training-toolkit)
  3. SageMaker PyTorch Training Toolkit (дополняет sagemaker-training-toolkit)
  4. SageMaker MXNet Training Toolkit (дополняет sagemaker-training-toolkit)

2. Наборы инструментов для логических выводов

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

  1. SageMaker Inference Toolkit (родительский)
  2. SageMaker PyTorch Inference Toolkit (расширяет sagemaker-inference-toolkit)
  3. SageMaker MXNet Inference Toolkit (дополняет sagemaker-inference-toolkit)
  4. SageMaker Huggingface Inference Toolkit (расширяет sagemaker-inference-toolkit)

Зачем они вам нужны?

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

Эти переменные среды позволяют обучающему коду получать доступ к расположению входных данных, расположению выходных данных модели, расположению конфигурации и т. д. Чтобы узнать больше, ознакомьтесь с разделом Папки хранилища Amazon SageMaker для обучающих наборов данных, контрольных точек, артефактов модели и выходных данных.

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

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

Что делать, если вы не используете эти наборы инструментов?

Что ж, вы по-прежнему можете сделать свой контейнер совместимым с SageMaker. Это просто более ручная работа. Вы должны вручную использовать переменные WORKDIR и ENV в вашем Dockerfile, чтобы все заработало.

Почему их так много?

Вот некоторые из причин, почему их так много:

  1. Требования к обучающему контейнеру отличаются от требований к контейнеру логических выводов. Например: Вам НЕ нужен веб-сервер в обучающем контейнере, но он вам нужен в контейнере логических выводов. Вот почему наборы инструментов организованы в две иерархии.
  2. Различные фреймворки, такие как TensorFlow, PyTorch и т. д., имеют разные конфигурации и настройки для переопределения значений по умолчанию и настройки их возможностей обучения и логического вывода.
  3. Он основан на Принципе единой ответственности из мира разработки программного обеспечения. Пакет должен делать только одну вещь и делать это правильно. SageMaker мог бы создать единый монолитный контейнер со всем, что там есть, но управлять этим контейнером и исправлять его было бы кошмаром.

Как выбрать, какой из них использовать?

sagemaker-training-toolkit и sagemaker-inference-toolkit — это базовые наборы инструментов, которые можно использовать с любой платформой или библиотекой, которую вы собираетесь использовать в своем контейнере. Эти наборы инструментов предоставляют все функции SageMaker, необходимые для запуска вашего контейнера в SageMaker.

Принимая во внимание, что если вы планируете создавать свои собственные контейнеры TensorFlow, PyTorch, Huggingface или MxNet, вы можете использовать соответствующий набор инструментов, предоставляемый SageMaker, и пропустить базовые наборы инструментов для обучения и вывода. Это связано с тем, что наборы инструментов, специфичные для платформы, в любом случае расширяются из базовых наборов инструментов, поэтому вы также получаете все функциональные возможности базового набора инструментов.

Например, когда вы используете sagemaker-tensorflow-training-toolkit, вы можете настроить некоторые переменные среды, такие как:
— SAGEMAKER_PARAMETER_SERVER_ENABLED,
— SAGEMAKER_DISTRIBUTED_DATAPARALLEL_ENABLED
— SAGEMAKER_MULTI_WORKER_MIRRORED_STRATEGY_ENABLED

Точно так же при использовании sagemaker-pytorch-training-toolkit вы получаете доступ к таким переменным среды, как:
— LAUNCH_SMDATAPARALLEL_ENV_NAME
— LAUNCH_MPI_ENV_NAME
— LAUNCH_PYTORCH_DDP_ENV_NAME
— LAUNCH_PYTORCH_XLA_ENV_NAME
— LAUNCH_TORCH_DISTRIBUTED_ENV_NAME

ПРИМЕЧАНИЕ. Вы также можете создать свой собственный контейнер фреймворка только с базовыми наборами инструментов, если вы не планируете использовать какие-либо специфичные для фреймворка конфигурации/настройки, как указано выше.

Почему наборы инструментов несовместимы между платформами/жизненным циклом машинного обучения?

Вы могли заметить, что нет ни tensorflow-inference-toolkit, ни huggingface-training-toolkit. В чем причина этого? Давайте разберем его по фреймворкам:

Почему нет tensorflow-inference-toolkit?

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

Но вам по-прежнему нужен sagemaker-inference-toolkit в вашем Dockerfile, чтобы вы автоматически применяли все настройки SageMaker к своему контейнеру.

Почему нет huggingface-training-toolkit?

Поскольку Huggingface не предоставляет собственную реализацию моделей, а предоставляет конкретные реализации PyTorch и TensorFlow.

Итак, если вы хотите обучить модель обнимающего лица, вы можете просто использовать tensorflow-training-toolkit или pytorch-training-toolkit в зависимости от того, какой фреймворк вы выбрали для работы с Huggingface. Следовательно, нет необходимости в наборе инструментов для обучения обнимающемуся лицу.

Но вам все равно понадобится набор huggingface-inference-toolkit, потому что он предоставляет специальные переменные окружения Huggingface, такие как HF_TASK или HF_MODEL_ID и т. д.

Заключение

Подводя итог, можно сказать, что эти наборы инструментов — отличный способ упростить процесс разработки модели, поскольку они предоставляют множество готовых настроек. Если вам интересно получить подробную информацию о том, когда и как использовать BYOC, ознакомьтесь с моим блогом Зачем использовать собственный контейнер в Amazon SageMaker и как это сделать правильно!

Если вам понравилось то, что вы прочитали, не стесняйтесь поделиться этим со своей сетью.