Home Машинное обучение Доступ к частным репозиториям с помощью декоратора @remote для учебных рабочих нагрузок Amazon SageMaker. | DeepTech

Доступ к частным репозиториям с помощью декоратора @remote для учебных рабочих нагрузок Amazon SageMaker. | DeepTech

0
Доступ к частным репозиториям с помощью декоратора @remote для учебных рабочих нагрузок Amazon SageMaker.
 | DeepTech

Поскольку все больше и больше клиентов стремятся внедрить рабочие нагрузки машинного обучения (ML) в производство, организации активно стремятся сократить жизненный цикл разработки кода ML. Многие организации предпочитают писать свой код машинного обучения в готовом для производства стиле в виде методов и классов Python, а не в исследовательском стиле (написание кода без использования методов или классов), потому что это помогает им быстрее выпускать готовый к производству код.

С помощью Amazon SageMaker вы можете использовать декоратор @remote для выполнения задания обучения SageMaker, просто аннотируя свой код Python с помощью декоратора @remote. SageMaker Python SDK автоматически преобразует вашу существующую рабочую среду и любой связанный код обработки данных и наборы данных в обучающее задание SageMaker, которое выполняется на учебной платформе SageMaker.

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

Однако организации, работающие в регулируемых отраслях, таких как банковское дело, страхование и здравоохранение, работают в средах со строгим контролем конфиденциальности данных и сетей. Эти элементы управления часто требуют отсутствия доступа в Интернет к любой из их сред. Причина такого ограничения заключается в том, чтобы иметь полный контроль над исходящим и входящим трафиком, чтобы они могли уменьшить вероятность того, что недобросовестные субъекты будут отправлять или получать непроверенную информацию через свою сеть. Такая сетевая изоляция часто также является обязательным требованием в соответствии с правилами аудита и промышленного соответствия. Когда дело доходит до ML, это ограничивает специалистов по данным от загрузки любого пакета из общедоступных репозиториев, таких как PyPI, Анакондаили Конда-Фордж.

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

В этом посте мы сосредоточимся на первом варианте: использовании CodeArtifact.

Обзор решения

На следующей диаграмме архитектуры показана архитектура решения.

Решение-архитектура-vpc-без-интернета

Шаги высокого уровня для реализации решения следующие:

  • Настройте виртуальное частное облако (VPC) без доступа к Интернету с помощью шаблона AWS CloudFormation.
  • Используйте второй шаблон CloudFormation, чтобы настроить CodeArtifact в качестве частного репозитория PyPI и обеспечить подключение к VPC, а также настроить среду Amazon SageMaker Studio для использования частного репозитория PyPI.
  • Обучите модель классификации на основе МНИСТ набор данных с помощью декоратора @remote из пакета SageMaker Python SDK с открытым исходным кодом. Все зависимости будут загружены из частного репозитория PyPI.

Обратите внимание, что использование SageMaker Studio в этом посте необязательно. Вы можете работать в любой интегрированной среде разработки (IDE) по вашему выбору. Вам просто нужно правильно настроить учетные данные интерфейса командной строки AWS (AWS CLI). Дополнительные сведения см. в разделе Настройка интерфейса командной строки AWS.

Предпосылки

Вам потребуется учетная запись AWS с ролью AWS Identity and Access Management (IAM) с разрешениями на управление ресурсами, созданными в рамках решения. Подробнее см. в разделе Создание учетной записи AWS.

Настройте VPC без подключения к Интернету

Создайте новый стек CloudFormation, используя vpc.yaml шаблон. Этот шаблон создает следующие ресурсы:

  • VPC с двумя частными подсетями в двух зонах доступности без подключения к Интернету.
  • Конечная точка шлюза VPC для доступа к Amazon S3.
  • Интерфейс конечных точек VPC для SageMaker, CodeArtifact и некоторых других сервисов, чтобы ресурсы в VPC могли подключаться к сервисам AWS через AWS PrivateLink.

Укажите имя стека, например No-Internetи завершите процесс создания стека.

vpc-без-интернет-стека

Дождитесь завершения процесса создания стека.

Настройте частный репозиторий и SageMaker Studio с помощью VPC.

Следующим шагом будет развертывание другого стека CloudFormation с помощью sagemaker_studio_codeartifact.yaml шаблон. Этот шаблон создает следующие ресурсы:

Укажите имя стека и оставьте значения по умолчанию или настройте параметры для Доменное имя CodeArtifact, имя частного репозитория, имя профиля пользователя для SageMaker Studio и имя для вышестоящего общедоступного репозитория PyPI. Вам также необходимо предоставить Имя стека VPC созданный на предыдущем шаге.

Studio-CodeArtifact-stack

Когда создание стека завершено, домен SageMaker должен быть виден в консоли SageMaker.

студия-домен

Чтобы убедиться, что в SageMaker Studio нет подключения к Интернету, запустите SageMaker Studio. Выбирать File, Newи Terminal запустить терминал и попробовать завиток любой интернет-ресурс. Он не должен подключиться, как показано на следующем снимке экрана.

терминал-показ-нет-интернета

Обучите классификатор изображений с помощью декоратора @remote с частным репозиторием PyPI.

В этом разделе мы используем декоратор @remote для запуска ПиТорч обучающее задание, которое создает модель классификации изображений MNIST. Для этого мы настраиваем файл конфигурации, разрабатываем обучающий скрипт и запускаем обучающий код.

Настройте файл конфигурации

Мы создали config.yaml файл и укажите конфигурации, необходимые для выполнения следующих действий:

  • Запустите обучающее задание SageMaker в созданном ранее облаке VPC без доступа к Интернету.
  • Загрузите необходимые пакеты, подключившись к частному репозиторию PyPI, созданному ранее.

Файл выглядит следующим образом:

SchemaVersion: '1.0'
SageMaker:
  PythonSDK:
    Modules:
      RemoteFunction:
        Dependencies: '../config/requirements.txt'
        InstanceType: 'ml.m5.xlarge'
        PreExecutionCommands:
            - 'aws codeartifact login --tool pip --domain <domain-name> --domain-owner <AWS account number> --repository <private repository name> --endpoint-url <VPC-endpoint-url-prefixed with https://>
        RoleArn: '<execution role ARN for running training job>'
        S3RootUri: '<s3 bucket to store the job output>'
        VpcConfig:
            SecurityGroupIds: 
            - '<security group id used by SageMaker Studio>'
            Subnets: 
            - '<VPC subnet id 1>'
            - '<VPC subnet id 2>'

Dependencies поле содержит путь к requirements.txt, который содержит все необходимые зависимости. Обратите внимание, что все зависимости будут загружены из частного репозитория. requirements.txt файл содержит следующий код:

torch
torchvision
sagemaker>=2.156.0,<3

PreExecutionCommands Раздел содержит команду для подключения к частному репозиторию PyPI. Чтобы получить URL-адрес конечной точки CodeArtifact VPC, используйте следующий код:

response = ec2.describe_vpc_endpoints(
    Filters=(
        {
            'Name': 'service-name',
            'Values': (
                f'com.amazonaws.{boto3_session.region_name}.codeartifact.api'
            )
        },
    )
)

code_artifact_api_vpc_endpoint = response('VpcEndpoints')(0)('DnsEntries')(0)('DnsName')

endpoint_url = f'https://{code_artifact_api_vpc_endpoint}'
endpoint_url

Как правило, мы получаем две конечные точки VPC для CodeArtifact и можем использовать любую из них в командах подключения. Дополнительные сведения см. в разделе Использование CodeArtifact из VPC.

Кроме того, такие конфигурации, как execution role, output locationи VPC configurations предоставляются в конфигурационном файле. Эти конфигурации необходимы для запуска учебного задания SageMaker. Чтобы узнать больше обо всех поддерживаемых конфигурациях, обратитесь к файлу конфигурации.

Не обязательно использовать config.yaml файл для работы с декоратором @remote. Это просто более чистый способ передать все конфигурации декоратору @remote. Все конфиги также могут быть предоставлены непосредственно в аргументах декоратора, но это снижает удобочитаемость и удобство сопровождения изменений в долгосрочной перспективе. Кроме того, файл конфигурации может быть создан администратором и доступен для всех пользователей в среде.

Разработать сценарий обучения

Далее мы подготавливаем обучающий код в простых файлах Python. Мы разделили код на три файла:

  • load_data.py – Содержит код для загрузки набора данных MNIST.
  • модель.py – Содержит код архитектуры нейронной сети для модели
  • поезд.py – Содержит код для обучения модели с помощью load_data.py и model.py.

В train.pyнам нужно оформить основную обучающую функцию следующим образом:

@remote(include_local_workdir=True)
def perform_train(train_data,
                  test_data,
                  *,
                  batch_size: int = 64,
                  test_batch_size: int = 1000,
                  epochs: int = 3,
                  lr: float = 1.0,
                  gamma: float = 0.7,
                  no_cuda: bool = True,
                  no_mps: bool = True,
                  dry_run: bool = False,
                  seed: int = 1,
                  log_interval: int = 10,
                  ):
    # pytorch native training code........

Теперь мы готовы запустить обучающий код.

Запустите обучающий код с помощью декоратора @remote.

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

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

журналы обучения

На этом реализация декоратора @remote, работающего с частным репозиторием в среде без доступа к Интернету, завершена.

Очистить

Чтобы очистить ресурсы, следуйте инструкциям в CLEANUP.md.

Заключение

В этом посте мы узнали, как эффективно использовать возможности декоратора @remote, продолжая работать в ограниченных средах без доступа к Интернету. Мы также узнали, как интегрировать возможности частного репозитория CodeArtifact с помощью поддержки файла конфигурации в SageMaker. Это решение делает итеративную разработку намного проще и быстрее. Еще одно дополнительное преимущество заключается в том, что вы по-прежнему можете писать обучающий код более естественным, объектно-ориентированным способом и по-прежнему использовать возможности SageMaker для выполнения обучающих заданий на удаленном кластере с минимальными изменениями в коде. Весь код, показанный как часть этого поста, доступен в Репозиторий GitHub.

В качестве следующего шага мы рекомендуем вам проверить функциональность декоратора @remote и Python SDK API и используйте его в выбранной вами среде и IDE. Дополнительные примеры доступны в amazon-sagemaker-примеры репозиторий, чтобы вы могли быстро приступить к работе. Вы также можете ознакомиться с публикацией Запуск локального кода машинного обучения в качестве учебных заданий Amazon SageMaker с минимальными изменениями кода, чтобы получить дополнительные сведения.


Об авторе

Викеш Пандей является специалистом по машинному обучению и архитектором решений в AWS, помогая клиентам из финансовой отрасли проектировать и создавать решения на основе генеративного искусственного интеллекта и машинного обучения. Вне работы Викеш любит пробовать разные кухни и заниматься спортом на открытом воздухе.

LEAVE A REPLY

Please enter your comment!
Please enter your name here