Авторы: Викеш Пандей, Осман Хамзауи
В разделе Переход с локального jupyter на Amazon SageMaker — часть 1 мы рассказали, как взять готовый пример из руководств по PyTorch и запустить его с помощью обучающего API SageMaker. Мы рассмотрели, как мы можем запускать код на эфемерных управляемых обучающих кластерах и как сохранять ваши модели, сохраняя их в S3 после завершения обучения. В этой части мы объясним, как указать ваш сценарий обучения на ваши собственные данные и как добавить свои собственные гиперпараметры и файлы конфигурации.
Мы разделим этот блог на следующие разделы:
- Измените местоположение данных обучения на S3 и определите гиперпараметры
- Изменения в сценарии обучения
- Изменения в обучающем API SageMaker
Предположения
Здесь мы предполагаем, что вы уже прошли часть 1 и настроили SageMaker Studio IDE. Вы выполнили упражнение из части 1 и успешно обучили модель.
С учетом сказанного, давайте двигаться вперед.
1. Измените местоположение данных обучения на S3 и определите гиперпараметры.
В первой части мы использовали PyTorch DataSet API для чтения набора данных, который уже был размещен в PyTorch. Это не относится ни к одному реальному варианту использования.
В вашем проекте у вас будут данные, находящиеся в каком-то озере данных или хранилище данных, или даже на вашем локальном компьютере. Давайте расширим ту же записную книжку и сценарий обучения, которые мы использовали в части 1, и внесем необходимые изменения для чтения данных из удаленного места. SageMaker имеет встроенную интеграцию с Amazon S3, поэтому мы продемонстрируем изменения, предполагая, что ваши данные находятся в S3.
ПРИМЕЧАНИЕ. Если вы запустили блокнот, относящийся к Части 1, данные уже были загружены в вашу среду Studio в папку с именем data
. Итак, сейчас мы собираемся сделать следующее:
- Загрузите данные из локальной папки в папку S3.
- Скажите SageMaker, чтобы он указывал на местоположения S3 для получения данных.
- Внесите изменения в скрипт обучения части 1, чтобы указать расположение данных и гиперпараметры через переменные среды SageMaker.
- Внесите изменения в метод fit (), чтобы предоставить местоположения обучающих данных из S3.
Шаг 1. Загрузите данные в Amazon S3
Ниже приведен код для загрузки файлов в Amazon S3. Здесь мы используем ведро по умолчанию, предоставленное SageMaker, но вы можете заменить его своим собственным:
from sagemaker.s3 import S3Uploader #Upload training data S3Uploader.upload(local_path = "data/FashionMNIST/raw/train-images-idx3-ubyte.gz", desired_s3_uri = "s3://"+bucket+train_prefix, kms_key=None, sagemaker_session=session) S3Uploader.upload(local_path = "data/FashionMNIST/raw/train-labels-idx1-ubyte.gz", desired_s3_uri = "s3://"+bucket+train_prefix, kms_key=None, sagemaker_session=session) #Upload test data S3Uploader.upload(local_path = "data/FashionMNIST/raw/t10k-images-idx3-ubyte.gz", desired_s3_uri = "s3://"+bucket+test_prefix, kms_key=None, sagemaker_session=session) S3Uploader.upload(local_path = "data/FashionMNIST/raw/t10k-labels-idx1-ubyte.gz", desired_s3_uri = "s3://"+bucket+test_prefix, kms_key=None, sagemaker_session=session)
Шаг 2. Укажите местонахождение обучающих данных из S3.
Теперь мы создаем что-то, называемое объектами TrainingInput
, которые содержат местоположения S3, где присутствуют фактические данные. Мы создаем уникальный объект для обучения и тестирования данных соответственно. Код выглядит следующим образом:
from sagemaker.inputs import TrainingInput train_input = TrainingInput(s3_data="s3://"+bucket+train_prefix) test_input = TrainingInput(s3_data="s3://"+bucket+test_prefix)
Шаг 3: Определите гиперпараметры
Параметры, которые вы используете в своем обучающем сценарии, можно разделить на два типа:
- Параметры, которые вы редко обновляете, но которые все же стоит представить в виде параметров, например имя корзины S3, в которой вы храните свои данные или тип экземпляра, используемый для обучения.
- Жестко закодированные значения и параметры, которые вы часто обновляете с каждым новым заданием на обучение, такие как размер пакета, скорость обучения, количество эпох и т. д.
Давайте посмотрим, какие изменения необходимо внести в сценарий обучения.
2. Изменения в сценарии обучения
Нам необходимо внести ряд изменений в сценарий обучения. Изменения можно разделить на две части:
Изменения, связанные с обработкой данных:
- Удалите код, загружающий набор данных из PyTorch.
- Анализировать значения переменных среды
SM_CHANNEL_TRAIN
иSM_CHANNEL_TEST
в качестве аргументов командной строки. Это переменные, которые содержат данные о поездах и тестах внутри обучающего контейнера. - Добавьте метод для загрузки и анализа набора данных и преобразования его в объекты PyTorch Tensor.
- Создайте наш собственный пользовательский класс, наследуемый от класса PyTorch Dataset, чтобы хранить необработанный набор данных и вызовите метод выше, чтобы преобразовать его в PyTorch Tensor.
- Используйте пользовательский класс набора данных, созданный выше, для создания загрузчиков данных PyTorch.
Изменения, связанные с гиперпараметрами:
Мы сосредоточимся на параметрах, которые меняются с каждым учебным заданием. Для тех, которые не меняются часто, вы можете поместить их в файл конфигурации json рядом с вашими сценариями обучения.
Мы можем указать параметры в качестве аргумента командной строки и прочитать их через ArgumentParser вместе с другими переменными среды, поступающими из SageMaker (см. пункт 2 в разделе выше).
Ниже приведен пример, где мы добавляем batch_size в качестве гиперпараметра:
parser = argparse.ArgumentParser() parser.add_argument("--batch_size", type=str, default=32) args = parser.parse_args() batch_size = int(args.batch_size)
Как мы увидим в следующем разделе, это позволит нам изменять значения наших гиперпараметров для нескольких учебных заданий без необходимости каждый раз изменять исходный код, упаковывать и развертывать его.
Остальная часть обучающего кода остается прежней. Ознакомьтесь с полным кодом обучения здесь, чтобы следовать ему.
ПРИМЕЧАНИЕ. Единственное изменение, представленное SageMaker, находится в пункте 2, остальные изменения не зависят от SageMaker и потребуются, если вы хотите, чтобы сценарий обучения указывал на ваш собственный набор данных, а не на предварительно подготовленные, предоставленные PyTorch. Добавление синтаксического анализатора аргументов также является хорошей практикой независимо от SageMaker, поскольку это делает ваши сценарии более модульными и простыми в выполнении.
3. Изменения в обучающем API SageMaker
Последним шагом будет внесение изменений в код вызова для API обучения, чтобы предоставить местоположения S3 и гиперпараметры. Следовательно, мы создаем словарь для inputs
, который содержит объекты, указывающие на местоположение S3 набора данных. А затем мы просто передаем словарь методу fit()
. Для гиперпараметров давайте добавим Итак, давайте передадим объект json, содержащий наши гиперпараметры.
Взгляните на код ниже:
#Create the estimator object for PyTorch estimator = PyTorch( entry_point = "train.py", # training script framework_version = "1.12", #PyTorch Framework version, keep it same as used in default example py_version = "py38", # Compatible Python version to use 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 not needed role = execution_role, #Execution role used by training job hyperparameters={'batch_size': 64} #Hyperparameters ) inputs = {"train":train_input, "test": test_input} #Start the training estimator.fit(inputs)
Вот и все. Теперь вы можете проводить обучение в SageMaker, используя данные из местоположения S3 и контролируя значения гиперпараметров во время выполнения. Ознакомьтесь с полным кодом блога в этом репозитории github.
Заключение
В этом блоге мы увидели, как использовать ваши собственные данные, загружая их в S3 и указывая SageMaker на их местоположение. Мы также увидели, как вы можете определить и указать пользовательские гиперпараметры, чтобы обеспечить гибкость и скорость итерации на этапе исследования.
Как и было обещано в Часть-1, мы рассмотрели все, кроме того, как перенести свой собственный учебный контейнер в SageMaker и использовать его вместо предоставленного SageMaker контейнера PyTorch. И это то, что мы рассмотрим в следующем блоге.
Хотите быть в числе первых, кто получит уведомление о публикации части 3? пожалуйста, следите за авторами этого блога. В этом году мы также планируем написать намного больше блогов с практическими рекомендациями по SageMaker. Так что продолжайте следить за этим пространством, чтобы узнать больше интересного контента.
Твиттер обрабатывает: @vikep0, @OHamzaoui1