Generative Data Intelligence

Масштабуйте робочі навантаження машинного навчання на Amazon ECS на основі інстансів AWS Trainium | Веб-сервіси Amazon

Дата:

Виконання робочих навантажень машинного навчання (ML) з контейнерами стає звичайною практикою. Контейнери можуть повністю інкапсулювати не лише ваш навчальний код, але й увесь стек залежностей аж до апаратних бібліотек і драйверів. Ви отримуєте узгоджене та портативне середовище розробки ML. З контейнерами масштабування в кластері стає набагато легшим.

Наприкінці 2022 року AWS оголосила про загальну доступність Екземпляри Amazon EC2 Trn1 живлення від AWS Trainium прискорювачі, спеціально створені для високоефективного глибокого навчання. Екземпляри Trn1 забезпечують до 50% економії витрат на навчання порівняно з іншими аналогами Обчислювальна хмара Amazon Elastic (Amazon EC2). Крім того, AWS Neuron SDK був випущений для покращення цього прискорення, надаючи розробникам інструменти для взаємодії з цією технологією, як-от компіляція, час виконання та профіль для досягнення високопродуктивних і економічно ефективних моделей навчання.

Служба еластичних контейнерів Amazon (Amazon ECS) — це повністю керована служба оркестровки контейнерів, яка спрощує розгортання, керування та масштабування контейнерних програм. Просто опишіть свою програму та необхідні ресурси, і Amazon ECS запустить, відстежить і масштабує вашу програму за допомогою гнучких параметрів обчислення з автоматичною інтеграцією до інших допоміжних служб AWS, які потрібні вашій програмі.

У цій публікації ми покажемо вам, як запускати навчальні завдання ML у контейнері за допомогою Amazon ECS для розгортання, керування та масштабування робочого навантаження ML.

Огляд рішення

Ми проведемо вас через такі кроки високого рівня:

  1. Надання кластера ECS екземплярів Trn1 з AWS CloudFormation.
  2. Створіть власний образ контейнера за допомогою Neuron SDK і надішліть його Реєстр контейнерів Amazon Elastic (Amazon ECR).
  3. Створіть визначення завдання, щоб визначити роботу з навчання ML, яку буде виконувати Amazon ECS.
  4. Запустіть завдання ML на Amazon ECS.

Передумови

Щоб продовжити, передбачається знайомство з основними сервісами AWS, такими як Amazon EC2 і Amazon ECS.

Надання кластера ECS екземплярів Trn1

Щоб почати, запустіть наданий Шаблон CloudFormation, який забезпечить необхідні ресурси, такі як VPC, кластер ECS та екземпляр EC2 Trainium.

Ми використовуємо Neuron SDK для виконання завдань глибокого навчання AWS Inferentia і екземпляри на основі Trainium. Він підтримує вас у вашому наскрізному життєвому циклі розробки ML для створення нових моделей, їх оптимізації та розгортання для виробництва. Щоб навчити свою модель за допомогою Trainium, вам потрібно інсталювати Neuron SDK на примірниках EC2, де виконуватимуться завдання ECS для зіставлення NeuronDevice, пов’язаного з апаратним забезпеченням, а також зображення Docker, яке буде передано в Amazon ECR для доступу до команд. щоб навчити вашу модель.

Стандартні версії Amazon Linux 2 або Ubuntu 20 не постачаються з інстальованими драйверами AWS Neuron. Тому у нас є два різні варіанти.

Перший варіант полягає у використанні Deep Learning Amazon Machine Image (DLAMI), у якому вже встановлено Neuron SDK. Зразок доступний на GitHub репо. Ви можете вибрати DLAMI на основі операційна система. Потім виконайте таку команду, щоб отримати ідентифікатор AMI:

aws ec2 describe-images --region us-east-1 --owners amazon --filters 'Name=name,Values=Deep Learning AMI Neuron PyTorch 1.13.? (Amazon Linux 2) ????????' 'Name=state,Values=available' --query 'reverse(sort_by(Images, &CreationDate))[:1].ImageId' --output text

Вихід буде таким:

ami-06c40dd4f80434809

Цей ідентифікатор AMI може змінюватися з часом, тому обов’язково використовуйте команду, щоб отримати правильний ідентифікатор AMI.

Тепер ви можете змінити цей ідентифікатор AMI у сценарії CloudFormation і використовувати готовий до використання Neuron SDK. Для цього шукайте EcsAmiId in Parameters:

"EcsAmiId": { "Type": "String", "Description": "AMI ID", "Default": "ami-09def9404c46ac27c" }

Другий варіант - створити екземпляр, заповнюючи userdata під час створення стека. Вам не потрібно встановлювати його, оскільки CloudFormation налаштує це. Для отримання додаткової інформації зверніться до Посібник із налаштування Neuron.

Для цієї публікації ми використовуємо варіант 2, якщо вам потрібно використовувати власне зображення. Виконайте наступні дії:

  1. Запустіть наданий шаблон CloudFormation.
  2. для KeyName, введіть назву бажаної пари ключів, і параметри будуть попередньо завантажені. Для цього поста ми використовуємо trainium-key.
  3. Введіть назву для свого стека.
  4. Якщо ви бігаєте в us-east-1 Регіон, для якого можна зберегти значення ALBName та АЗІди за умовчанням.

Щоб перевірити, яка зона доступності в регіоні має доступний Trn1, виконайте таку команду:

aws ec2 describe-instance-type-offerings --region us-east1 --location-type availability-zone --filter Name=instance-type,Values=trn1.2xlarge

  1. Вибирати МАЙБУТНІ і закінчіть створення стека.

Коли стек буде завершено, можна переходити до наступного кроку.

Підготуйте та надішліть зображення ECR за допомогою Neuron SDK

Amazon ECR — це повністю керований реєстр контейнерів, який пропонує високопродуктивний хостинг, тож ви можете надійно розгортати образи програм і артефакти будь-де. Ми використовуємо Amazon ECR для зберігання спеціального образу Docker, що містить наші сценарії та пакети Neuron, необхідні для навчання моделі із завданнями ECS, що виконуються на екземплярах Trn1. Ви можете створити репозиторій ECR за допомогою Інтерфейс командного рядка AWS (AWS CLI) або Консоль управління AWS. Для цієї публікації ми використовуємо консоль. Виконайте наступні дії:

  1. На консолі Amazon ECR створіть нове сховище.
  2. для Налаштування видимості¸ виберіть приватний.
  3. для Назва сховища, введіть ім'я.
  4. Вибирати Створити репозиторій.

Тепер, коли у вас є репозиторій, давайте створимо та надішлемо образ, який можна вбудувати локально (у ваш ноутбук) або в AWS Cloud9 навколишнє середовище. Ми тренуємо модель багатошарового персептрона (MLP). Оригінальний код див Підручник з багаторівневого персептрона.

  1. Скопіюйте train.py та model.py файлів у проект.

Він уже сумісний з Neuron, тому вам не потрібно змінювати код.

  1. 5 Створити Докер-файл який містить команди для встановлення Neuron SDK і навчальних сценаріїв:
FROM amazonlinux:2 RUN echo $'[neuron] n
name=Neuron YUM Repository n
baseurl=https://yum.repos.neuron.amazonaws.com n
enabled=1' > /etc/yum.repos.d/neuron.repo RUN rpm --import https://yum.repos.neuron.amazonaws.com/GPG-PUB-KEY-AMAZON-AWS-NEURON.PUB RUN yum install aws-neuronx-collectives-2.* -y
RUN yum install aws-neuronx-runtime-lib-2.* -y
RUN yum install aws-neuronx-tools-2.* -y
RUN yum install -y tar gzip pip
RUN yum install -y python3 python3-pip
RUN yum install -y python3.7-venv gcc-c++
RUN python3.7 -m venv aws_neuron_venv_pytorch # Activate Python venv
ENV PATH="/aws_neuron_venv_pytorch/bin:$PATH"
RUN python -m pip install -U pip
RUN python -m pip install wget
RUN python -m pip install awscli RUN python -m pip config set global.extra-index-url https://pip.repos.neuron.amazonaws.com
RUN python -m pip install torchvision tqdm torch-neuronx neuronx-cc==2.* pillow
RUN mkdir -p /opt/ml/mnist_mlp
COPY model.py /opt/ml/mnist_mlp/model.py
COPY train.py /opt/ml/mnist_mlp/train.py
RUN chmod +x /opt/ml/mnist_mlp/train.py
CMD ["python3", "/opt/ml/mnist_mlp/train.py"]

Щоб створити власний Dockerfile за допомогою Neuron, див Розробка на екземплярі акселератора AWS ML, де можна знайти посібники для інших фреймворків ОС і машинного навчання.

  1. 6. Створіть образ, а потім надішліть його в Amazon ECR за допомогою наступного коду (вкажіть свій регіон, ідентифікатор облікового запису та сховище ECR):
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin {your-account-id}.dkr.ecr.{your-region}.amazonaws.com docker build -t mlp_trainium . docker tag mlp_trainium:latest {your-account-id}.dkr.ecr.us-east-1.amazonaws.com/mlp_trainium:latest docker push {your-account-id}.dkr.ecr.{your-region}.amazonaws.com/{your-ecr-repo-name}:latest

Після цього ваша версія зображення має бути видимою в створеному вами репозиторії ECR.

Запустіть завдання навчання ML як завдання ECS

Щоб запустити навчальне завдання ML на Amazon ECS, спочатку потрібно створити визначення завдання. Для запуску контейнерів Docker в Amazon ECS потрібне визначення завдання.

  1. На консолі Amazon ECS виберіть Визначення завдань у навігаційній панелі.
  2. на Створіть нове визначення завдання меню, виберіть Створіть нове визначення завдання за допомогою JSON.

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

Щоб переконатися, що Neuron встановлено, ви можете перевірити, чи том /dev/neuron0 відображається в блоці пристроїв. Це відповідає одному NeuronDevice працює на примірнику trn1.2xlarge з двома ядрами.

  1. Створіть своє визначення завдання за допомогою наступного шаблону:
{ "family": "mlp_trainium", "containerDefinitions": [ { "name": "mlp_trainium", "image": "{your-account-id}.dkr.ecr.us-east-1.amazonaws.com/{your-ecr-repo-name}", "cpu": 0, "memoryReservation": 1000, "portMappings": [], "essential": true, "environment": [], "mountPoints": [], "volumesFrom": [], "linuxParameters": { "capabilities": { "add": [ "IPC_LOCK" ] }, "devices": [ { "hostPath": "/dev/neuron0", "containerPath": "/dev/neuron0", "permissions": [ "read", "write" ] } ] }, , "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "true", "awslogs-group": "/ecs/task-logs", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "ecs" } } } ], "networkMode": "awsvpc", "placementConstraints": [ { "type": "memberOf", "expression": "attribute:ecs.os-type == linux" }, { "type": "memberOf", "expression": "attribute:ecs.instance-type == trn1.2xlarge" } ], "requiresCompatibilities": [ "EC2" ], "cpu": "1024", "memory": "3072"
}

Ви також можете завершити цей крок на AWS CLI, використовуючи наступне визначення завдання або за допомогою такої команди:

aws ecs register-task-definition --family mlp-trainium --container-definitions '[{ "name": "my-container-1", "image": "{your-account-id}.dkr.ecr.us-east-1.amazonaws.com/{your-ecr-repo-name}", "cpu": 0, "memoryReservation": 1000, "portMappings": [], "essential": true, "environment": [], "mountPoints": [], "volumesFrom": [], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "true", "awslogs-group": "/ecs/task-logs", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "ecs" } }, "linuxParameters": { "capabilities": { "add": [ "IPC_LOCK" ] }, "devices": [{ "hostPath": "/dev/neuron0", "containerPath": "/dev/neuron0", "permissions": ["read", "write"] }] }
}]' --requires-compatibilities EC2
--cpu "8192" --memory "16384" --placement-constraints '[{ "type": "memberOf", "expression": "attribute:ecs.instance-type == trn1.2xlarge"
}, { "type": "memberOf", "expression": "attribute:ecs.os-type == linux"
}]'

Запустіть завдання на Amazon ECS

Після того, як ми створили кластер ECS, передали зображення в Amazon ECR і створили визначення завдання, ми запускаємо визначення завдання, щоб навчити модель на Amazon ECS.

  1. На консолі Amazon ECS виберіть Кластери у навігаційній панелі.
  2. Відкрийте свій кластер.
  3. на Завдання вкладку, виберіть Виконайте нове завдання.

  1. для Тип запускувиберіть EC2.

  1. для Тип програмивиберіть Завдання.
  2. для Family, виберіть створене вами визначення завдання.

  1. У мереж у розділі вкажіть VPC, створений стеком CloudFormation, підмережею та групою безпеки.

  1. Вибирати Створювати.

Ви можете контролювати своє завдання на консолі Amazon ECS.

Ви також можете запустити завдання за допомогою AWS CLI:

aws ecs run-task --cluster <your-cluster-name> --task-definition <your-task-name> --count 1 --network-configuration '{"awsvpcConfiguration": {"subnets": ["<your-subnet-name> "], "securityGroups": ["<your-sg-name> "] }}'

Результат буде виглядати так, як на скріншоті нижче.

Ви також можете перевірити деталі навчальної роботи через Amazon CloudWatch журнальна група.

Після навчання моделей ви можете зберігати їх у Служба простого зберігання Amazon (Amazon S3).

Прибирати

Щоб уникнути додаткових витрат, ви можете змінити групу Автомасштабування на Мінімальна місткість та Бажана місткість до нуля, щоб закрити екземпляри Trainium. Щоб виконати повне очищення, видаліть стек CloudFormation, щоб видалити всі ресурси, створені цим шаблоном.

Висновок

У цій публікації ми показали, як використовувати Amazon ECS для розгортання навчальних завдань ML. Ми створили шаблон CloudFormation, щоб створити кластер ECS із екземплярів Trn1, створили спеціальний образ Docker, передали його в Amazon ECR і запустили завдання навчання ML на кластері ECS за допомогою екземпляра Trainium.

Для отримання додаткової інформації про Neuron і про те, що ви можете робити з Trainium, перегляньте такі ресурси:


Про авторів

Гільєрме Річчі є старшим архітектором рішень для стартапів у Amazon Web Services, допомагаючи стартапам модернізувати та оптимізувати витрати на їхні програми. Маючи понад 10 років досвіду роботи з компаніями у фінансовому секторі, він зараз працює з командою спеціалістів зі штучного інтелекту та ML.

Евандро Франко є архітектором рішень AI/ML, який працює над Amazon Web Services. Він допомагає клієнтам AWS подолати бізнес-проблеми, пов’язані з AI/ML на AWS. Він більше 15 років працює з технологіями, від розробки програмного забезпечення, інфраструктури, безсерверного використання до машинного навчання.

Метью Макклін очолює команду Annapurna ML Solution Architecture, яка допомагає клієнтам адаптувати продукти AWS Trainium і AWS Inferentia. Він захоплюється генеративним штучним інтелектом і протягом останніх 10 років допомагає клієнтам адаптувати технології AWS.

spot_img

Остання розвідка

spot_img

Зв'яжіться з нами!

Привіт! Чим я можу вам допомогти?