Авторы: Викеш Пандей, Осман Хамзауи
В Часть-1 и Часть-2 мы показали, как можно легко обучить свою модель на Amazon SageMaker, а также предоставить свои собственные данные и конфигурации. Хотя Amazon SageMaker предоставляет контейнеры для большинства популярных платформ глубокого обучения, таких как Tensorflow, PyTorch, MxNet, HuggingFace, XGBoost и т. д., могут быть случаи, когда вы захотите использовать Bring Your Own Container (BYOC) для обучения своей модели.
В этом блоге мы рассмотрим следующие области:
- Когда использовать BYOC, а когда вам это не нужно.
- Должны ли вы обернуть обучающий код внутри контейнера?
- Как использовать BYOC в SageMaker
- Что меняется, а что нет при использовании BYOC (по сравнению с использованием управляемого контейнера SageMaker)
ПРИМЕЧАНИЕ. Этот блог посвящен только обучению, но вы также можете использовать BYOC для обработки данных и логических выводов.
Когда использовать BYOC:
- Если контейнеры управляемой платформы SageMaker не являются теми, которые вы хотите использовать.
- Если контейнеры, предоставленные SageMaker, содержат одну или несколько зависимостей, которые вам не нужны в вашей среде обучения/логического вывода. Вы можете проверить Dockerfile для всех контейнеров, управляемых SageMaker, здесь.
- У вас есть нормативные требования и требования соответствия, чтобы использовать только те контейнеры, которые вы обслуживаете.
- Вы предоставляете множество зависимостей (через requirement.txt) для контейнера, предоставленного SageMaker, и эта установка занимает много времени при выполнении задания обучения.
- Ваша среда не требует подключения к Интернету для загрузки пакетов.
- Вам нужны надежные гарантии воспроизводимости используемых контейнеров.
Когда вам действительно не нужен BYOC:
- Контейнеры управляемой среды SageMaker (PyTorch, Tensorflow и т. д.) и их версии соответствуют вашим требованиям. Вы можете просмотреть список управляемых контейнеров SageMaker здесь.
- Вы хотите включить несколько сторонних библиотек. В этом случае просто поместите файл requirements.txt в локальный каталог и укажите ссылку на него, используя параметр
source_dir
в оценщике SageMaker. SageMaker установит эти библиотеки во время выполнения. Предупреждение. Этот метод устанавливает файл requirements.txt в начале задания обучения. Если процесс установки слишком долгий, это может снизить вашу производительность. - Вы хотите добавить дополнительные скрипты (помимо вашего основного тренировочного файла). Как и в предыдущем пункте, вы можете поместить их в локальный каталог и ссылаться на них, используя параметр
source_dir
или параметрdependencies
в оценщике SageMaker.
Включаете ли вы обучающий код внутрь контейнера?
Нет, вам не нужно. Если вы упаковываете свой код в контейнер, каждый раз, когда вы вносите изменения в код, вам придется перестраивать его, и это может повлиять на вашу производительность. SageMaker предоставляет способ предоставления кода обучения, внешнего по отношению к контейнеру, во время выполнения, поэтому вы можете просто сосредоточиться на повторении своего кода при повторном использовании одного и того же контейнера. Если у вас все еще есть достаточно веская причина, чтобы поместить обучающий код внутрь контейнера, вы, безусловно, сможете это сделать.
После этого давайте продолжим рассказ о том, как использовать BYOC в SageMaker.
Как использовать BYOC в SageMaker
В этом разделе мы увидим, как создать собственный контейнер PyTorch и использовать его для обучения модели. Используя BYOC, вам вообще не нужно будет вносить какие-либо изменения в код обучения. Вот шаги, которые мы будем выполнять:
- Сборка образа Docker — та же версия (1.12), что и в предыдущем примере.
- Отправить образ Docker в частный репозиторий Amazon ECR
- Используйте собственное изображение для обучения — вместо управляемого SageMaker контейнера PyTorch. Кроме того, здесь вы предоставляете код обучения, внешний по отношению к контейнеру. Подробнее об этом позже.
1. Создайте образ докера
Примечание. Здесь мы не будем рассматривать основы Docker. Но если вы не знакомы с докером, вы можете проверить следующий учебник Docker 101 Tutorial.
1.1 Создайте Dockerfile
Есть два способа адаптировать ваш пользовательский контейнер для работы в SageMaker.
- Использование Обучающего инструментария, предоставленного SageMaker Pytorch — это предпочтительный подход, поскольку набор инструментов установит для вас следующее:
— Места (внутри контейнера) для хранения кода, модели и другие ресурсы.
— точка входа, содержащая код для запуска при запуске контейнера. Теперь вы можете либо скопировать код обучения в образ докера при создании самого образа, либо предоставить сценарий обучения во время выполнения извне контейнера.
— Другие переменные среды и конфигурация, которые требуются SageMaker, используют докер для обучение. - Без предоставленного SageMaker набора инструментов для обучения Pytorch — в этом случае вам необходимо убедиться, что докер придерживается рекомендаций этой документации.
Здесь мы собираемся использовать (и рекомендовать) первый подход.
Ниже приведен пример Dockerfile:
from pytorch/pytorch:1.12.0-cuda11.3-cudnn8-runtime RUN apt-get update && apt-get install gcc -y RUN pip install sagemaker-pytorch-training
Мы выбрали базовый образ из Официального репозитория PyTorch с версией 1.12
и установили gcc
, так как эта зависимость нужна sagemaker-pytorch-training
, и, наконец, мы устанавливаем sagemaker-pytorch-training.
1.2 Создайте образ
Для создания образа вы можете выбрать либо свой локальный компьютер, либо экземпляр/среду в облаке, где установлен Docker. Просто перейдите в каталог, содержащий файл Dockerfile (созданный в версии 1.1), и запустите в своем терминале:
docker build -t {Your_AWS_Account_ID}.dkr.ecr. {Your_AWS_Region}.amazonaws.com/{Custom_Image_Name}:{tag} .
2. Отправьте образ докера в Amazon ECR.
Следующим шагом является отправка образа Docker в реестр Docker. SageMaker изначально интегрирован с Amazon ECR, поэтому мы отправим туда наш образ. Вы также можете использовать свой собственный частный репозиторий.
2.1 Сначала выполните аутентификацию в ECR
aws ecr get-login-password -region {Your_AWS_Region} | docker login -username AWS -password-stdin {Your_AWS_Account_ID}.dkr.ecr.{Your_AWS_Account_ID}.amazonaws.com
2.2 Создайте репозиторий ECR
aws ecr create-repository -repository-name "custom-pytorch-1-12"
2.3 И отправьте образ Docker в ECR.
docker push {Your_AWS_Account_ID}.dkr.ecr.{Your_AWS_Region}.amazonaws.com/{Custom_Image_Name}:{tag}
Вот и все ! Теперь мы готовы использовать этот образ для обучения работе с SageMaker. Подробные инструкции по отправке образа в ECR см. в разделе Отправка образа Docker.
3. Используйте собственное изображение для обучения
Чтобы использовать это изображение вместо предоставленного SageMaker изображения PyTorch, мы используем тот же PyTorch Estimator, который использовался в предыдущих сообщениях в блоге. Единственный новый аргумент здесь — image_uri
. Кроме этого, все остальные аргументы одинаковы
Никаких изменений в тренировочном коде не требуется.
Изменения кода вызова показаны ниже:
#Create the estimator object for PyTorch from sagemaker.pytorch.estimator import PyTorch # import PyTorch Estimator class estimator = PyTorch( image_uri=custom_image_uri, #our custom pytorch image URI entry_point = "train.py", # training script instance_count = 1, #number of EC2 instances needed for training instance_type = "ml.c5.xlarge", #Type of EC2 instance/s needed for training disable_profiler = True, #Disable profiler, as it's not needed role = execution_role, #Execution role used by training job hyperparameters={'batch_size': 64} ) inputs = {"train":train_input, "test": test_input} #Start the training in the ephemeral remote compute estimator.fit(inputs, wait=True)
Что изменилось, а что нет:
Итак, давайте подытожим, чем этот подход отличается от того, что было показано в Часть-1 и Часть-2.
Что изменилось
- Контейнер выполнения, в котором выполняется ваш обучающий скрипт. Теперь это ваш собственный контейнер вместо управляемого SageMaker. Это также означает, что вы несете ответственность за его исправление и поддержку. Таким образом, общая стоимость владения при управлении контейнером и его эксплуатации выше.
- Мы предоставили наш пользовательский URI изображения через аргумент
image_uri
в оценщике PyTorch.
Что не изменилось
- SageMaker управляет эфемерным обучающим вычислительным кластером. Вращение и выключение после завершения обучения.
- Рабочие каталоги контейнеров, пути к данным, коду и модели, зарезервированные SageMaker. Благодаря SageMaker предоставил обучающий инструментарий Pytorch. Таким образом, SageMaker запускает ваш контейнер так же, как и свои управляемые контейнеры. Подробнее об этом можно прочитать в разделе Использование Наборов инструментов для обучения и вывода SageMaker.
- Тренировочный код. Ваш код не зависит от того, использовали ли вы управляемый контейнер или BYOC.
- Все аргументы, предоставляемые обучающему коду, работают одинаково, опять же заслуга SageMaker предоставила обучающий инструментарий Pytorch.
- Вы предоставили сценарий обучения, внешний по отношению к контейнеру, что является огромным преимуществом для итеративной разработки. Вы по-прежнему можете обернуть сценарий обучения внутри своего контейнера, но тогда для каждого изменения кода вам придется заново создавать контейнер, что отнимает много времени. Помните, Время - деньги!! :)
Заключение
В этом блоге вы узнали, как добавить в SageMaker собственный образ докера и использовать его для обучения. Ключевым моментом этого подхода было то, что вы могли предоставить код обучения, внешний по отношению к контейнеру, во время выполнения. Весь справочный код этого блога доступен в Github Repository. Для дальнейшего чтения, пожалуйста, ознакомьтесь с разделом Использование контейнеров Docker с SageMaker.
Твиттер обрабатывает: @vikep0, @OHamzaoui1