Лучшие практики масштабирования и доступности
Допустим, гипотетически вы работаете над вариантом использования, чтобыклассифицировать изображение еды как «хот-дог» или «не хот-дог», используя машинное обучение, ваш клиент любит эту идею и считает, что это может изменить правила игры в пищевой промышленности, которые, кстати, не из технологической индустрии.
Как и все специалисты по данным, вы закатываете рукава и начинаете создавать POC (Proof of Concept), начиная со сбора данных, их маркировки и обучения модели. После многих утомительных часов/дней вам удалось построить модель с приличной точностью, которая удовлетворит вашего Клиента.
Теперь ваш клиент хочет протестировать вашу модель, и он хочет протестировать эту модель с помощью команд со всего мира по очевидным деловым причинам, как вы можете предоставить своему клиенту доступ к проверьте свою модель. Также на данный момент весь ваш код, ваша причудливая модель ML находится на вашем компьютере. Чтобы справиться с этими двумя вещами, вам нужно обратиться к следующему.
1. Как запустить модель в производство и сделать ее доступной из любой точки мира?
2. Как вы можете сделать его пригодным для тестирования? Очевидно, вы не можете, за исключением того, что клиенты запускают ячейки вашей записной книжки, для вашего приложения должен быть ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС, достаточно простой для использования
Ответ,используя облачные сервисы, такие как AWS, облако Google, для создания и развертывания модели машинного обучения, сделайте ее доступной по всему миру.
На этом этапе ваш клиент выражает некоторое нежелание вкладываться в облачные операции и предлагает инвестировать только после тщательного тестирования и проверки приложения со всеми своими командами.
По сравнению с локальной разработкой облачные операции лучше и проще, но имеют цену. будет дорого в конечном итоге, переобучение, развертывание новых моделей, масштабирование, все эти операции истощат бюджет
В приведенном выше сценарии, давайте будем честными, клиент в чем-то прав, да ладно, мы не можем вылечить рак с помощью нашей модели, это просто "Модель хот-дога или нет хот-дога".
НО что, если бы я сказал вам, что вы МОЖЕТЕ создать готовый проект ИИ, который можно масштабировать и сделать доступным по всему миру, если вы используете правильные технологии и инструменты с открытым исходным кодом.
В этой статье я поделюсь некоторыми рекомендациями и советами PRO, которым можно следовать с самого начала проекта, чтобы избежать переделок, как структурировать свои проекты для масштабирования , инструменты и технологии, необходимые для достижения этой цели. И выставить свой проект глобально, чтобы каждый мог его использовать/протестировать. нам есть что рассказать, давайте погрузимся.
Вы когда-нибудь слышали поговорку «есть много способов содрать шкуру с кошки»? Сейчас я хочу обсудить эффективный подход, доказавший свою эффективность. Лично я использовал этот подход до перехода в облако.
Ниже приведена предлагаемая архитектура,

Шаг 1 Получите серверы Linux
Вы можете разрабатывать в любой ОС, но для производства лучше всего подходят Linux-серверы. Любое развертывание, не связанное с Linux, является грехом. Просто шучу!
Шаг 2. Docker и Docker Compose
Вам необходимо настроить Docker и Docker Compose, поскольку мы будем развертывать нашу модель как контейнер Docker и предоставлять ее через конечную точку API, например, вы отправляете тестовые данные в POST API, а API возвращает «результат» или прогноз из модели ML. ,
Установите докер здесь и настройте его
Мы создаем единый «образ Docker» с FASTAPI, моделью ML и всеми зависимостями, необходимыми для прогнозирования модели.
Шаг 3 (необязательно) Настройка среды мониторинга и зачем?
Поверьте мне, это поможет вам понять, как работает ваше приложение или ваш докер, а также может быть использовано для отслеживания причин, по которым ваши контейнеры не работают, мы также можем настроить оповещение о превышении критических пороговых значений. то есть процесс чтения-записи, я также считаю, что настройка мониторинга даст вам концептуальное понимание того, как работают нагрузки и как масштабируются серверына основе конфигураций K8 и в облачной среде.
Как настроить настройку мониторинга,
Используйте модуль экспорта узлов (удаляет метрики из машины), Prometheus (получает метрики из средства экспорта узлов) и Grafana (подключается к Prometheus и использует метрики для создания дашборда). Это очень низкоуровневое объяснение вышеупомянутых инструментов. Существует множество статей, в которых объясняется, как все работает и как их настроить. ссылка
Если вы заинтересованы в том, чтобы запускать их как контейнеры докеров, посетите здесь или вы можете просто загрузить их tar-файлы и установить их локально.
Шаг 4 Контейнеризируйте модель машинного обучения с помощью FASTAPI.
Один из лучших подходов для обслуживания модели ML в производстве — через API. мы собираемся разделить ваш код вывода и модель мл из вашего проекта и стыковать с FASTAPI,
Например, если вы имеете дело с текстовыми данными, добавьте весь код, связанный с очисткой текста, определением основы и процессами, чтобы при отправке необработанного текста с помощью метода POST в вызове API, с другой стороны, мы использовали код вывода для очистки text, а затем вызываем метод прогнозирования, чтобы получить прогноз, и мы отправляем прогноз обратно в качестве ответа API.
В этом сценарии весь код, связанный с аргументом изображения, изменением размера, кодировкой, может быть закреплен вместе с моделью мл, чтобы пользователь мог отправить изображение/изображение в качестве запроса POST и получить ответ, является ли изображение хот-догом или нет.
Советы. Модель ML имеет большой размер, поэтому перемещение модели на серверы Prod может быть утомительным. Чтобы обойти это, Создайте образ Docker в среде разработки, отправьте его в Docker Hub и извлеките его из hub с ваших рабочих серверов
Шаг 5. Получите домен с поддержкой SSL и настройте Nginx
Существуют веб-сайты, которые продают для вас доменные имена и сертификаты с поддержкой SSL по низкой цене, Hostinger является одним из них, вы можете войти в систему, подписаться на любой план по вашему выбору и зарегистрировать предпочитаемое доменное имя, в приведенном выше случае это может быть что-то вроде 'www.hotdogornothotdog.com'Также загрузите сертификаты с сайта. "Связь"
Другой вариант заключается в том, что вы можете купить только домен и использовать Letsencrypt для SSL. Купить домен и сертификаты у провайдера и подключить их к конфигурации nginx — более простой способ.
Настройте обратный прокси-сервер Nginx с личным доменом, в котором включен SSL и их сертификаты.
Структура папок
|── app
| ├── __init__.py
| ├── main.py # FastAPI app here
| ├── MLMODEL.Joblib# YOUR ML MODEL here
| ├── inference.py # any code blocks that your ML model uses
|
├── config
| ├── config.json # Nginx config file, add domainame
and certs here
|
├── .dockerignore # similar to .gitignore
| # but for Docker
├── .gitignore
|
├── Dockerfile # commands to build
| # a Docker Image
├── README.md
|
├── requirements.txt # All the required packages
| # fastapi, sklearn, pandas, joblib, ....
Докерфайл
# Base image FROM python:3.9-slim-buster # Set working directory WORKDIR /app # Install dependencies COPY requirements.txt . RUN pip install -r requirements.txt # Copy application files COPY . . # Build the application RUN python setup.py install # NGINX FROM nginx:latest # Copy SSL certificates COPY /path/to/certs/ /etc/nginx/certs/ # Copy nginx configuration file COPY nginx.conf /etc/nginx/nginx.conf # Copy built application from the previous stage COPY --from=0 /app/dist /var/www/html/ # Expose ports EXPOSE 80 EXPOSE 443 # Start NGINX CMD ["nginx", "-g", "daemon off;"
Открывая порты 80 и 443, мы можем получить доступ к нашему API в самом нашем доменном имени,
Совет. Используйте образы Slim в качестве основы для сборки, что значительно уменьшит размер образов Docker
Далее — пример Nginx Config.json
server {
listen 443 ssl;
server_name www.hotdogornothotdog.com;
ssl_certificate /etc/ssl/certs/www.hotdogornothotdog.com.crt;
ssl_certificate_key /etc/ssl/private/www.hotdogornothotdog.com.key;
location / {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Есть преимущества использования прокси-сервера, такого как Nginx. Прокси-серверы могут выполнять балансировку нагрузки, кэширование, терминацию SSL и эффективно обрабатывать большое количество одновременных подключений.
СЕЙЧАС Запустите сборку образа и запустите его, у вас есть развернутое приложение, которое открывается в вашем доменном имени, ваше приложение будет доступно в
https://hotdogornothotdog.com/docs
Шаг 6. Разверните образы Docker в кластере Kubernetes (необязательно для POC)
Настройте кластер Kubernetes и напишите необходимые yamls для развертывания, обслуживания, портов узлов и раскрутите его. Это темы для обсуждения на доске, но для POC это может быть необязательной частью, есть тонна статей, объясняющих, как работает Kubernetes и как настроить,
Обзор — ссылка
Шаг 7 Добавьте простой пользовательский интерфейс,
стримлит
Simple UI Framework имеет массу полезных компонентов, которые очень просты в использовании и могут быть быстрее развернуты. Также есть еще один вариант развертывания без использования личного домена, сертификатов и прочего: вы можете напрямую развернуть свое приложение на страницах с подсветкой, а также в службах Heroku или Onrender. ссылка
Заключение,
Выше приведен довольно быстрый способ развернуть POC ML в производственной среде. Вы можете подключить GitLab к этому рабочему процессу для упрощения повторяющихся развертываний. Ниже приведены некоторые рекомендации, которым вы можете следовать в процессе разработки. Это помогает, особенно небольшим командам, которые не у вас есть много ресурсов, чтобы быстро проверить свою гипотезу или идеи машинного обучения. Спасибо, что прочитали мою первую статью. Надеюсь, эта статья поможет. Хорошего дня! Ваше здоровье!
Автор,
Арун Сингх Сивапракаш
Full Stack Data Scientist / ИТ-менеджер