Автор: Викеш Пандей
Знаете ли вы, что Amazon SageMaker предоставляет 8 различных наборов инструментов , которые значительно упрощают процесс запуска контейнера для обучения/логического вывода и кода в SageMaker? Независимо от того, используете ли вы какой-либо контейнер, предоставленный SageMaker, или создаете свой собственный контейнер (BYOC), эти наборы инструментов играют очень важную роль.
Если вы работаете с SageMaker, то ваше понимание этих наборов инструментов может подпадать под одну из следующих категорий:
1. Вы никогда о нем не слышали.
2. Вы слышали о нем, но не знаете. для какой цели он служит.
3. Вы приложили дополнительные усилия, чтобы углубиться в эти наборы инструментов и выкопали достаточно, чтобы называть себя экспертом :)
Этот блог предназначен в основном для первых двух категорий читателей.
Почему вам важно об этом знать?
Есть в основном две причины, по которым вам следует знать об этих наборах инструментов:
1. Это значительно упрощает отладку контейнера обучения и/или логического вывода и кода для ошибок.
2. Вы можете использовать SageMaker более эффективно (и быстро), зная, какие переменные среды вам доступны, какие библиотеки (и их версии) помещаются в контейнеры для обучения/вывода и т. д., и какую реализацию SageMaker сделал для соединения контейнера и кода вместе.
В этом блоге мы углубимся в мир этих наборов инструментов и ответим на следующие вопросы:
- Какие все инструменты есть?
- Зачем они вам нужны?
- Что делать, если вы не используете эти наборы инструментов?
- Почему их так много?
- Как выбрать, какой из них использовать?
- Почему наборы инструментов не согласованы между платформами/жизненным циклом машинного обучения? (подробнее об этом в следующих разделах)
Какие есть все наборы инструментов?
SageMaker предоставляет 8 (да, вы правильно прочитали!) различных наборов инструментов, которые помогут вам при работе в SageMaker. Они обслуживают в первую очередь этапы обучения и логического вывода. С помощью приведенной ниже диаграммы давайте поймем, как они соотносятся друг с другом в иерархии:
Как видите, наборы инструментов разделены на две части (обучение и вывод). Технически эти наборы инструментов представляют собой пакеты Python, которые вы можете установить через pip в вашем Dockerfile.
ПРИМЕЧАНИЕ. Если вы заметили, что на приведенной выше диаграмме отсутствуют huggingface-training-toolkit и tensorflow-inference-toolkits . Продолжайте читать блог до конца, и вы тоже найдете ответ на эту загадку :). А пока давайте немного подробнее разберемся в этих наборах инструментов.
1. Наборы инструментов для обучения
Это пакеты, которые вам нужно добавить в свой Dockerfile, чтобы сделать ваши контейнеры совместимыми для запуска в SageMaker в учебных целях.
- SageMaker Training Toolkit (родительский)
- SageMaker TensorFlow Training Toolkit (дополняет sagemaker-training-toolkit)
- SageMaker PyTorch Training Toolkit (дополняет sagemaker-training-toolkit)
- SageMaker MXNet Training Toolkit (дополняет sagemaker-training-toolkit)
2. Наборы инструментов для логических выводов
Это пакеты, которые вам нужно добавить в свой Dockerfile, чтобы сделать ваши контейнеры совместимыми для запуска в SageMaker в целях логического вывода.
- SageMaker Inference Toolkit (родительский)
- SageMaker PyTorch Inference Toolkit (расширяет sagemaker-inference-toolkit)
- SageMaker MXNet Inference Toolkit (дополняет sagemaker-inference-toolkit)
- SageMaker Huggingface Inference Toolkit (расширяет sagemaker-inference-toolkit)
Зачем они вам нужны?
SageMaker требует, чтобы внутри контейнера существовала определенная структура папок, где хранятся входные данные, конфигурации, модель, журналы и т. д. Еще одним важным моментом является использование переменных среды SageMaker в обучающем коде и контейнере.
Эти переменные среды позволяют обучающему коду получать доступ к расположению входных данных, расположению выходных данных модели, расположению конфигурации и т. д. Чтобы узнать больше, ознакомьтесь с разделом Папки хранилища Amazon SageMaker для обучающих наборов данных, контрольных точек, артефактов модели и выходных данных.
Если вы просто установите эти наборы инструментов внутри своего контейнера, вся структура папок будет правильно смонтирована в контейнере со всеми переменными среды SageMaker, доступными для вашего обучающего кода. Чтобы узнать больше, ознакомьтесь с разделом Использование наборов инструментов SageMaker для обучения и вывода.
Подводя итог, можно сказать, что эти наборы инструментов необходимы, если вы хотите упростить разработку контейнеров. И да, в предоставленных контейнерах SageMaker также предварительно установлены эти наборы инструментов.
Что делать, если вы не используете эти наборы инструментов?
Что ж, вы по-прежнему можете сделать свой контейнер совместимым с SageMaker. Это просто более ручная работа. Вы должны вручную использовать переменные WORKDIR и ENV в вашем Dockerfile, чтобы все заработало.
Почему их так много?
Вот некоторые из причин, почему их так много:
- Требования к обучающему контейнеру отличаются от требований к контейнеру логических выводов. Например: Вам НЕ нужен веб-сервер в обучающем контейнере, но он вам нужен в контейнере логических выводов. Вот почему наборы инструментов организованы в две иерархии.
- Различные фреймворки, такие как TensorFlow, PyTorch и т. д., имеют разные конфигурации и настройки для переопределения значений по умолчанию и настройки их возможностей обучения и логического вывода.
- Он основан на Принципе единой ответственности из мира разработки программного обеспечения. Пакет должен делать только одну вещь и делать это правильно. 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 и как это сделать правильно!
Если вам понравилось то, что вы прочитали, не стесняйтесь поделиться этим со своей сетью.