Для дослідників обробки даних перенесення моделей машинного навчання (ML) від перевірки концепції до виробництва часто становить серйозну проблему. Однією з головних проблем може бути розгортання високопродуктивної локально навченої моделі в хмарі для висновків і використання в інших програмах. Керувати процесом може бути громіздко, але за допомогою правильного інструменту ви можете значно скоротити необхідні зусилля.
Висновок Amazon SageMaker, який став загальнодоступним у квітні 2022 року, спрощує розгортання моделей ML у виробництві, щоб робити прогнози в масштабі, надаючи широкий вибір інфраструктури ML і варіантів розгортання моделей, щоб допомогти задовольнити всі потреби в логічному висновку ML. Ви можете використовувати Кінцеві точки безсерверного висновку SageMaker для робочих навантажень, які мають періоди простою між стрибками трафіку та можуть переносити холодний запуск. Кінцеві точки масштабуються автоматично на основі трафіку та знімають недиференційовану важку роботу з вибору та керування серверами. Додатково можна використовувати AWS Lambda безпосередньо для демонстрації ваших моделей і розгортання ваших програм ML за допомогою бажаного фреймворку з відкритим кодом, який може виявитися більш гнучким і економічно ефективним.
FastAPI це сучасна, високопродуктивна веб-платформа для створення API за допомогою Python. Він виділяється, коли йдеться про розробку безсерверних додатків із мікросервісами RESTful і сценаріями використання, які потребують висновків ML у масштабі в багатьох галузях. Його простота та вбудовані функції, як-от автоматична документація API, роблять його популярним вибором серед інженерів ML для розгортання високопродуктивних API для висновків. Ви можете визначати та організовувати свої маршрути, використовуючи готові функції FastAPI, щоб за потреби масштабувати та обробляти зростаючу бізнес-логіку, тестувати локально та розміщувати її на Lambda, а потім надавати через єдиний шлюз API, що дозволяє вам перенесіть веб-платформу з відкритим вихідним кодом у Lambda без будь-яких важких робіт або рефакторингу коду.
У цьому дописі показано, як легко розгортати та запускати безсерверні висновки ML, показуючи свою модель ML як кінцеву точку за допомогою FastAPI, Docker, Lambda та API -шлюз Amazon. Ми також покажемо вам, як автоматизувати розгортання за допомогою Набір хмарних розробок AWS (AWS CDK).
Огляд рішення
На наступній діаграмі показано архітектуру рішення, яке ми розгортаємо в цій публікації.
Передумови
Ви повинні мати такі передумови:
- Встановлено Python3 разом із
virtualenv
для створення та керування віртуальними середовищами на Python - aws-cdk v2, встановлений у вашій системі, щоб мати можливість використовувати AWS CDK CLI
- Docker встановлено та працює на вашій локальній машині
Перевірте, чи встановлено все необхідне програмне забезпечення:
- Команда Інтерфейс командного рядка AWS (AWS CLI). Увійдіть у свій обліковий запис і виберіть регіон, де ви хочете розгорнути рішення.
- Використовуйте наступний код, щоб перевірити свою версію Python:
- Перевірте, чи є
virtualenv
встановлено для створення та керування віртуальними середовищами на Python. Власне кажучи, це неважка вимога, але вона полегшить ваше життя та допоможе легше виконувати цю публікацію. Використовуйте наступний код: - Перевірте, чи встановлено cdk. Це буде використано для розгортання нашого рішення.
- Перевірте, чи встановлено Docker. Наше рішення зробить вашу модель доступною через образ Docker для Lambda. Щоб створити цей образ локально, нам потрібен Docker.
- Переконайтеся, що Docker запущено та працює за допомогою такого коду:
Як структурувати свій проект FastAPI за допомогою AWS CDK
Ми використовуємо таку структуру каталогів для нашого проекту (ігноруючи шаблонний код AWS CDK, який не має значення в контексті цієї публікації):
Каталог слідує за рекомендована структура проектів AWS CDK для Python.
Найважливішою частиною цього сховища є fastapi_model_serving
каталог. Він містить код, який визначатиме стек AWS CDK і ресурси, які використовуватимуться для обслуговування моделі.
Команда fastapi_model_serving
каталог містить model_endpoint
підкаталог, який містить усі необхідні активи, які складають нашу безсерверну кінцеву точку, а саме Dockerfile для створення образу Docker, який використовуватиме Lambda, код функції Lambda, який використовує FastAPI для обробки запитів на висновок і направлення їх до правильної кінцевої точки, а також модель артефакти моделі, яку ми хочемо розгорнути. model_endpoint
також містить наступне:
Docker
– Цей підкаталог містить наступне:Dockerfile
– Це використовується для створення образу для функції Lambda з усіма артефактами (кодом функції Lambda, артефактами моделі тощо) у потрібному місці, щоб їх можна було використовувати без проблем.serving.api.tar.gz
– Це архів, який містить усі ресурси з папки виконання, необхідні для створення образу Docker. Ми обговорюємо, як створити.tar.gz
файл далі в цій публікації.runtime
– Цей підкаталог містить наступне:serving_api
– Код для функції Lambda та її залежностей, указаний у файлі requirements.txt.custom_lambda_utils
– Це включає сценарій висновку, який завантажує необхідні артефакти моделі, щоб модель могла бути передана вserving_api
що потім виставить його як кінцеву точку.
Крім того, у нас є каталог шаблонів, який містить шаблон структур папок і файлів, де ви можете визначити свої налаштовані коди та API, дотримуючись прикладу, який ми розглянули раніше. Каталог шаблонів містить фіктивний код, який можна використовувати для створення нових функцій Lambda:
dummy
– Містить код, який реалізує структуру звичайної функції Lambda за допомогою середовища виконання Pythonapi
– Містить код, який реалізує функцію Lambda, яка обертає кінцеву точку FastAPI навколо існуючого шлюзу API
Розгорніть рішення
За замовчуванням код розгортається в регіоні eu-west-1. Якщо ви хочете змінити регіон, ви можете змінити контекстну змінну DEPLOYMENT_REGION у cdk.json
файлу.
Однак майте на увазі, що рішення намагається розгорнути функцію Lambda поверх архітектури arm64, і ця функція може бути доступною не в усіх регіонах. У цьому випадку вам потрібно змінити параметр архітектури в fastapi_model_serving_stack.py
файл, а також перший рядок Dockerfile всередині каталогу Docker, щоб розмістити це рішення на архітектурі x86.
Щоб розгорнути рішення, виконайте такі дії:
- Виконайте таку команду, щоб клонувати репозиторій GitHub:
git clone https://github.com/aws-samples/lambda-serverless-inference-fastapi
Оскільки ми хочемо продемонструвати, що рішення може працювати з артефактами моделі, які ви тренуєте локально, ми надаємо зразок артефакту моделі попередньо навченого DistilBERT моделі в центрі моделей Hugging Face для завдання відповіді на питання вserving_api.tar.gz
файл. Час завантаження може зайняти близько 3–5 хвилин. Тепер давайте налаштуємо середовище. - Завантажте попередньо підготовлену модель, яка буде розгорнута з концентратора моделі Hugging Face у
./model_endpoint/runtime/serving_api/custom_lambda_utils/model_artifacts
каталог. Він також створює віртуальне середовище та встановлює всі необхідні залежності. Цю команду потрібно виконати лише один раз:make prep
. Ця команда може зайняти близько 5 хвилин (залежно від пропускної здатності Інтернету), оскільки їй потрібно завантажити артефакти моделі. - Упакуйте артефакти моделі в a
.tar.gz
архів, який використовуватиметься всередині образу Docker, вбудованого в стек AWS CDK. Вам потрібно запускати цей код щоразу, коли ви змінюєте артефакти моделі або сам API, щоб завжди мати найновішу версію вашої кінцевої точки обслуговування:make package_model
. Артефакти всі на місці. Тепер ми можемо розгорнути стек AWS CDK у вашому обліковому записі AWS. - Запустіть програму завантаження cdk, якщо ви вперше розгортаєте програму AWS CDK у середовищі (комбінація обліковий запис + регіон):
Цей стек містить ресурси, необхідні для роботи набору інструментів. Наприклад, стек включає сегмент Amazon Simple Storage Service (Amazon S3), який використовується для зберігання шаблонів і ресурсів під час процесу розгортання.
Оскільки ми створюємо образи Docker локально в цьому розгортанні AWS CDK, нам потрібно переконатися, що демон Docker працює, перш ніж ми зможемо розгорнути цей стек через AWS CDK CLI.
- Щоб перевірити, чи працює демон Docker у вашій системі, скористайтеся такою командою:
Якщо ви не отримуєте повідомлення про помилку, ви повинні бути готові до розгортання рішення.
- Розгорніть рішення за допомогою такої команди:
Цей крок може зайняти близько 5–10 хвилин через створення та надсилання образу Docker.
Пошук і усунення несправностей
Якщо ви користуєтеся Mac, у вас може виникнути помилка під час входу Реєстр контейнерів Amazon Elastic (Amazon ECR) з логіном Docker, наприклад Error saving credentials ... not implemented
, Наприклад:
Перш ніж використовувати Lambda поверх контейнерів Docker всередині AWS CDK, вам може знадобитися змінити ~/docker/config.json
файл. Точніше, можливо, вам доведеться змінити параметр credsStore ~/.docker/config.json
до osxkeychain. Це вирішує проблеми входу в Amazon ECR на Mac.
Виконайте висновок у реальному часі
Після вашого AWS CloudFormation стек успішно розгорнуто, перейдіть до Виходи вкладку для вашого стека на консолі AWS CloudFormation і відкрийте URL-адресу кінцевої точки. Тепер наша модель доступна через URL-адресу кінцевої точки, і ми готові виконувати висновки в реальному часі.
Перейдіть за URL-адресою, щоб побачити, чи бачите ви повідомлення «hello world» і додайте /docs
на адресу, щоб перевірити, чи успішно ви можете переглянути інтерактивну сторінку інтерфейсу користувача swagger. Може бути деякий час холодного запуску, тому вам може знадобитися зачекати або оновити кілька разів.
Після входу на цільову сторінку сторінки FastAPI swagger UI ви можете запускати через root /
або за допомогою /question
.
Від /
, ви можете запустити API та отримати повідомлення «hello world».
Від /question
, ви можете запустити API та виконати логічний висновок на моделі, яку ми розгорнули для випадку відповідей на запитання. Наприклад, ми використовуємо запитання «Якого зараз кольору моя машина?» і контекст Моя машина раніше була синьою, але я пофарбував у червоний.
Коли ви обираєте Виконати, на основі заданого контексту модель відповість на запитання відповіддю, як показано на наступному знімку екрана.
У тілі відповіді ви можете побачити відповідь із оцінкою достовірності моделі. Ви також можете поекспериментувати з іншими прикладами або вбудувати API у свою існуючу програму.
Крім того, ви можете запустити висновок за допомогою коду. Ось один приклад, написаний на Python з використанням requests
бібліотека:
Код виводить рядок, подібний до такого:
Якщо вам цікаво дізнатися більше про розгортання Generative AI і великих мовних моделей на AWS, перегляньте тут:
- Розгорніть безсерверний Generative AI на AWS Lambda за допомогою OpenLLaMa
- Розгортайте великі мовні моделі на AWS Inferentia2 за допомогою великих контейнерів виведення моделі
Прибирати
У кореневому каталозі вашого сховища запустіть наступний код, щоб очистити ресурси:
Висновок
У цій публікації ми представили, як ви можете використовувати Lambda для розгортання навченої моделі ML за допомогою вашої бажаної структури веб-додатків, наприклад FastAPI. Ми надали докладний репозиторій коду, який ви можете розгорнути, і ви зберігаєте гнучкість переходу на будь-яку навчену модель артефактів, яку ви обробляєте. Продуктивність може залежати від того, як ви реалізуєте та розгортаєте модель.
Ви можете спробувати це самостійно, і ми будемо раді почути ваші відгуки!
Про авторів
Тінгі Лі є архітектором корпоративних рішень від AWS, що знаходиться в Стокгольмі, Швеція, і підтримує клієнтів зі скандинавських країн. Їй подобається допомагати клієнтам з архітектурою, дизайном і розробкою оптимізованих хмарних інфраструктурних рішень. Вона спеціалізується на штучному інтелекті та машинному навчанні та зацікавлена в наданні клієнтам інтелектуальних можливостей у їхніх програмах ШІ/ML. У вільний час вона також працює ілюстратором, пише романи та грає на піаніно.
Демір Катовіч є інженером з машинного навчання в AWS, що знаходиться в Цюріху, Швейцарія. Він взаємодіє з клієнтами та допомагає їм впроваджувати масштабовані та повнофункціональні програми ML. Він захоплений створенням і виробництвом програм машинного навчання для клієнтів і завжди прагне досліджувати нові тенденції та передові технології у світі ШІ/ML.
- Розповсюдження контенту та PR на основі SEO. Отримайте посилення сьогодні.
- PlatoData.Network Vertical Generative Ai. Додайте собі сили. Доступ тут.
- PlatoAiStream. Web3 Intelligence. Розширення знань. Доступ тут.
- ПлатонЕСГ. Автомобільні / електромобілі, вуглець, CleanTech, Енергія, Навколишнє середовище, Сонячна, Поводження з відходами. Доступ тут.
- BlockOffsets. Модернізація екологічної компенсаційної власності. Доступ тут.
- джерело: https://aws.amazon.com/blogs/machine-learning/deploy-a-serverless-ml-inference-endpoint-of-large-language-models-using-fastapi-aws-lambda-and-aws-cdk/
- :є
- : ні
- :де
- $UP
- 1
- 10
- 100
- 13
- 2022
- 7
- 9
- a
- Здатний
- МЕНЮ
- доступною
- рахунки
- через
- додавати
- Додатково
- адреса
- AI
- AI / ML
- ВСІ
- дозволяє
- по
- Також
- завжди
- Amazon
- Amazon Web Services
- серед
- an
- та
- відповідь
- будь-який
- API
- Інтерфейси
- додаток
- додаток
- застосування
- квітня
- архітектура
- архів
- ЕСТЬ
- навколо
- AS
- Активи
- At
- автоматизувати
- автоматичний
- автоматично
- доступний
- геть
- AWS
- AWS CloudFormation
- AWS Lambda
- Backend
- ширина смуги
- заснований
- BE
- оскільки
- перед тим
- між
- синій
- тіло
- Bootstrap
- приносити
- широкий
- будувати
- Створюємо
- побудований
- вбудований
- бізнес
- але
- by
- CAN
- автомобіль
- випадок
- випадків
- виклик
- проблеми
- зміна
- Зміни
- перевірка
- вибір
- Вибирати
- хмара
- код
- Коди
- холодний
- color
- поєднання
- приходить
- повний
- концепція
- довіра
- З'єднуватися
- зв'язку
- Консоль
- містити
- Контейнер
- Контейнери
- містить
- контекст
- виправити
- рентабельним
- може
- створювати
- створює
- створення
- Повноваження
- Клієнти
- налаштувати
- передовий
- дані
- дефолт
- Залежно
- розгортання
- розгорнути
- розгортання
- розгортання
- дизайн
- докладно
- розвивається
- розробка
- безпосередньо
- обговорювати
- Docker
- документація
- Не знаю
- скачати
- два
- під час
- Раніше
- простота
- легше
- легко
- легко
- зусилля
- Вставляти
- уповноважують
- кінець
- Кінцева точка
- займається
- інженер
- Інженери
- забезпечувати
- підприємство
- Навколишнє середовище
- середовищах
- помилка
- приклад
- Приклади
- збуджений
- виконувати
- існуючий
- вихід
- експеримент
- дослідити
- Face
- особливість
- кілька
- філе
- Файли
- Перший
- перший раз
- Гнучкість
- гнучкий
- стежити
- після
- слідує
- для
- Рамки
- від
- функція
- функціональні можливості
- Функції
- шлюз
- в цілому
- генеративний
- Генеративний ШІ
- отримати
- GitHub
- даний
- Go
- буде
- Зростання
- обробляти
- Жорсткий
- Мати
- he
- чути
- важкий
- важкий підйом
- допомога
- допомогу
- допомагає
- її
- тут
- висока продуктивність
- господар
- Як
- How To
- Однак
- HTML
- HTTP
- HTTPS
- Концентратор
- i
- Idle
- if
- зображення
- зображень
- здійснювати
- implements
- важливо
- in
- В інших
- includes
- промисловості
- Інфраструктура
- всередині
- встановлений
- Інтелект
- інтерактивний
- зацікавлений
- інтернет
- в
- введені
- питання
- IT
- ЙОГО
- сам
- json
- Кін
- Знання
- посадка
- мова
- великий
- пізніше
- вивчення
- бібліотека
- життя
- підйомний
- як
- Лінія
- вантажі
- місцевий
- локально
- журнал
- каротаж
- логіка
- Логін
- макінтош
- машина
- навчання за допомогою машини
- made
- головний
- зробити
- РОБОТИ
- управляти
- управління
- Може..
- Зустрічатися
- повідомлення
- мікросервіс
- може бути
- mind
- хвилин
- ML
- модель
- Моделі
- сучасний
- більше
- найбільш
- переміщення
- множинний
- повинен
- my
- а саме
- необхідно
- Необхідність
- необхідний
- потреби
- Нові
- зараз
- of
- часто
- on
- один раз
- ONE
- тільки
- відкрити
- з відкритим вихідним кодом
- операція
- Опції
- or
- порядок
- звичайний
- Інше
- наші
- з
- упаковані
- сторінка
- параметр
- частина
- Пройшов
- пристрасний
- продуктивність
- періодів
- місце
- plato
- Інформація про дані Платона
- PlatoData
- відіграє
- популярний
- пошта
- Прогнози
- переважним
- передумови
- подарунки
- процес
- Production
- проект
- проектів
- доказ
- доказ концепції
- Доведіть
- за умови
- забезпечує
- забезпечення
- Натискання
- Python
- питання
- готовий
- реального часу
- червоний
- зменшити
- регіон
- райони
- Сховище
- запитів
- вимагається
- вимога
- Вимога
- ресурси
- відповідь
- результат
- зберігати
- право
- корінь
- Маршрут
- маршрути
- прогін
- біг
- мудрець
- економія
- масштабовані
- шкала
- Вчені
- сфера
- рахунок
- побачити
- вибирає
- вибір
- Без сервера
- Сервери
- обслуговування
- Послуги
- виступаючої
- комплект
- вона
- Повинен
- Показувати
- демонстрації
- показаний
- Шоу
- значний
- істотно
- аналогічний
- простий
- один
- So
- Софтвер
- рішення
- Рішення
- Вирішує
- деякі
- розмова
- спеціалізований
- конкретно
- зазначений
- стек
- стенди
- старт
- починається
- Статус
- Крок
- заходи
- зберігання
- зберігати
- зберігання
- рядок
- структура
- Успішно
- такі
- Підтримуючий
- Швеція
- Швейцарія
- система
- Приймати
- Завдання
- Технології
- шаблон
- Шаблони
- тест
- Що
- Команда
- їх
- Їх
- потім
- Там.
- вони
- це
- через
- час
- times
- до
- інструмент
- топ
- трафік
- поїзд
- навчений
- Тенденції
- намагатися
- ui
- UNIX
- відповідний сучасним вимогам
- URL
- використання
- використовуваний
- користувач
- використовує
- використання
- версія
- через
- Віртуальний
- чекати
- хотіти
- було
- we
- Web
- Веб-додаток
- веб-сервіси
- ласкаво просимо
- ДОБРЕ
- пішов
- Що
- Що таке
- коли
- коли б ні
- Чи
- який
- ВООЗ
- волі
- з
- без
- Work
- світ
- письмовий
- Ти
- вашу
- себе
- зефірнет
- Цюріх