Як створити успішний ML-продукт. Ключові етапи розвитку, виклики та рівні зрілості
Вітаю! Мене звуть Євген Краснокутський, я
Багато людей, що занурюються у тему штучного інтелекту та машинного навчання, так чи інакше стикаються з питаннями, як-от: з чого почати
Ця стаття є оглядом життєвого циклу
Попередній аналіз проєкту
Будь-який проєкт, і
Оцінка виконуваності ML-задачі
На першому етапі попереднього аналізу визначається, чи взагалі вирішувана
Належною практикою є побудова
Оцінка виконуваності інженерних задач
Оцінка виконуваності інженерної частини
Існує низка ризиків, які унеможливлюють інженерну виконуваність задачі на належному рівні, наприклад, використання дуже великої моделі, яка не може бути розгорнута у хмарі, або працюватиме надто повільно.
Фаза попереднього аналізу може містити попереднє профілювання (benchmarking) для оцінки вартості експлуатації обраних моделей. Це не завжди можливо, оскільки заздалегідь може бути невідома фінальна архітектура моделі. Варто оцінювати пропускну здатність (throughput) моделі, скільки вона потребує апаратних ресурсів (CPU, GPU, RAM), дискового простору тощо.
PoC: перевірка ідеї
Будь-який
Як швидко зібрати PoC і що для цього потрібно? На даному етапі бажано використовувати якнайменше інструментів та інженерного часу з найбільшою користю для бізнесу для відповіді на питання виконуваності
Для цього в рамках PoC варто звернути увагу на прості інструменти, наприклад, Gradio, Streamlit, FastAPI та Flask. Gradio та Streamlit дозволяють швидко зробити красивий інтерфейс роботи із моделлю та надати посилання замовникам та, наприклад, тестовій групі користувачів. FastAPI та Flask дозволяють «загорнути» ваші моделі у мікросервіс та надати ендпоінт до нього. FastAPI та Flask можуть бути дуже потужними інструментами у комбінації із Docker та Kubernetes. Всі ці інструменти дозволяють швидко перевіряти гіпотези на початкових фазах розробки
Отже, для відповіді на питання виконуваності поставленого завдання зазвичай достатньо таких інструментів та технологій:
- репозиторій з експериментами;
- репозиторій для сервінгу;
- базове сховище моделей.
Після того, як виконуваність задачі доведено й отримано позитивний зворотний зв’язок, можна починати масштабувати проєкт до рівня MVP.
Масштабування — наступний етап після перевірки гіпотези
На етапі PoC зазвичай розробляється щонайменше одна модель на якомусь базовому датасеті. Датасет, який використовується на етапі PoC, зазвичай має мінімально необхідний розмір і навіть не завжди зібраний із реальних даних, які будуть з’являтися на етапі впровадження моделі у виробництво. Також на етапі PoC будується найпростіша модель, яка демонструє мінімально необхідні метрики якості. Тож подальший розвиток проєкту має зосереджуватися на покращенні якості тренувальних даних та моделей. А це вимагає розбудови інфраструктури збирання, фільтрування, тестування, маркування та версіонування даних.
Те саме стосується й моделей — необхідно провести низку експериментів із пошуку найкращої моделі та оптимальних гіперпараметрів для обраної. Такий пошук супроводжується накопиченням великої кількості артефактів тренувань (метрики, графіки лосс функцій, ваги моделей, гіперпараметри тощо), які мають бути належним чином збережені, систематизовані та версіоновані.
Почнемо з даних. За походженням дані можна розділити на внутрішні — ті, які з’являються природним чином як результат роботи розробленого застосунку чи проєкту. Наприклад, історичні дані продажів, історичні дані врожайності, історичні дані укладання нових угод. Та зовнішні — ті, які збираються із зовнішніх джерел. Це, наприклад, збирання відео з камер відеоспостереження або з інтернету.
Постає питання про зберігання, маркування, версіонування та інтегрування нових даних у
Для версіонування даних існує кілька інструментів під різними ліцензіями. Версіонування допомагає не лише управляти версіями датасетів, а й перемикатися між версіями. Дуже часто необхідно також мати можливість брати зрізи датасетів за певними ознаками даних, які мають зберігатися як метадані. Наприклад, вам треба зробити такий зріз датасету фотографій, щоб там були лише люди на фоні засніжених гір, одягнені у червоні костюми. Або взяти зріз даних, де користувачі пишуть довгі позитивні відгуки після 23:00.
Такий підхід із версіонуванням та метаданими дозволяє проводити різні експерименти на різних зрізах даних. Фактично версіонування допомагає чіткіше окреслювати поле потенційних експериментів і легше їх проводити.
Існує багато інструментів версіонування даних, які можуть мати спеціалізації або на текстах, або на табличних даних, або на версіонуванні не-текстових даних (зображення, відео, аудіо тощо).
Накопичені, збережені та очищені сирі дані у загальному випадку треба маркувати. Є дані, марковані природним шляхом. Наприклад, історія продаж біткоїна — це автомаркований часовий ряд. Для полегшення роботи з даними можна використовувати системи автоматичного або напівавтоматичного маркування.
Маркування може проводитися власними силами чи делегуватися третім компаніям. Таким чином маємо наступний пайплайн, в якому:
- Із зовнішніх джерел або внутрішніх сервісів отримуються сирі дані.
- Сирі дані тестуються та очищаються.
- Очищені дані необхідно у загальному випадку розмаркувати та збагатити метаданими.
- Розмарковані та збагачені метаданими дані версіонуються та зберігаються.
Один із чинників успішного
- визначення оптимального розміру моделі;
- пошуку оптимальної архітектури;
- пошуку оптимальних гіперпараметрів.
Результатами кожного експерименту будуть не тільки ваги моделей, а й артефакти тренування, такі як логи, графіки лосс функції, фінальна метрика, метадані датасету, на якому здійснювалось тренування тощо.
У випадку великої кількості експериментів та варіантів моделей відтворюваність експериментів і розгортання автоматизованого пайплайну тренування є вкрай важливими для підтримання високої продуктивності
- модуль конфігурування експерименту (всі параметри винесені у конфіг, який версіонується разом із кодом тренування);
- код тренування моделі тестується за допомогою Unit-тестів;
- натренована модель також тестується не тільки для визначення фінальної метрики якості, а й для автоматизованого збору статистик за помилками (наприклад, на яких типах вхідних даних модель помиляється найбільше; які групи можна виділити у тих даних, на яких модель помиляється; чи стійка модель до шумів у даних тощо).
Для зберігання артефактів експериментів використовують наступні системи: MLflow, Tensorboard, Weights and Bias. Насправді їх більше, але це основні, з яких, на мою думку, варто починати.
Найпростіше, що можна використати для простої візуалізації та логування експериментів, це так звана Model Card. Це невеликий документ, який розповідає все необхідне про модель: яка її архітектуру, на якому датасеті тренувалася, які метрики тренування, інформація про ваги моделі та, можливо, інформація про запуск моделі. Сам Model Card версіонується разом з експериментом. Підхід, заснований на Model Card, можна побачити на Hugging Faces.
Продукт
Сервінг
Перехід розробки проєкту в умовну фазу «Продукт» супроводжується зміщенням фокуса уваги з даних, моделей та тренування на бізнесові задачі й потреби користувачів.
До цього часу ми говорили здебільшого про тренування моделей, зберігання артефактів та версіонування датасетів. І лише крадькома згадали про сервінг моделей у контексті створення невеликих демо для демонстрації клієнтам та користувачам.
На етапі масштабування ідеї/прототипу до рівня продукту такими простими інструментами для сервінгу, як, наприклад, Gradio чи Streamlit, ми вже не можемо задовольнити наших користувачів. Під час розбудови продукту необхідно вже чітко знати, як саме буде постачатися розроблена нами модель фінальним користувачам, як вони взаємодіятимуть із нею, яким буде інтерфейс (у широкому сенсі) цієї взаємодії. Тут варто одразу зазначити наступне. Моделі в загальному випадку можна розгортати, наприклад:
- на десктопі (як частина десктопного застосунку, наприклад, як це робить Zoom);
- у браузері (як частина вебзастосунка, наприклад, як це зроблено у Google Meet);
- на edge devices:
- на мобільному пристрої;
- як частина прошивки роботів;
- у хмарі.
Більшість моделей наразі розгортаються у хмарі здебільшого тому, що всі інші способи дуже обмежують доступні для інференсу моделей ресурси. І тільки в особливих випадках, тільки там, де це справді критично важливо, моделі розгортаються не у хмарі.
Далі ми зосередимо нашу увагу саме на хмарах та інструментах, які допомагають нам,
Чим же такі цікаві хмари для
- Kubernetes дозволяє налаштовувати правила горизонтального масштабування.
- Використання черг дозволяє створювати асинхронні архітектури та заощаджувати на горизонтальному масштабуванні.
- RayServe.
- Kserve.
- NVidia Triton.
- Seldon.
Хмарні провайдери також мають у своєму арсеналі інструменти для сервінгу моделей, зокрема:
- VertexAI від Google.
- Sagemaker від Amazon.
- Azure Machine Learning від Microsoft.
Кожен із цих інструментів має свою специфіку. Так, наприклад, Triton-у треба дати тільки вашу модель в ONNX чи torchscript-форматі, а далі він вже сам все зробить за вас. Хоча на практиці не все так просто!
RayServe, наприклад, model agnostic та framework agnostic. Він може запускати будь-які моделі та код. Щобільше, в нього можна загорнути ваш вже наявний Flask/FastAPI сервінг моделі.
Моніторинг
Моніторинг потрібен для відстежування поточного стану піднятих сервісів та збору аналітики їхньої роботи.
- розподіл ознак, які подаються у модель;
- розподіл цільової змінної, які отримуються як результат роботи моделі.
Моніторинг дозволяє
- data drift;
- concept drift;
- training-serving skew;
- виявлення викидів.
Для чого потрібна вся ця інформація? Для регулярного аналізу змін у розподілі даних та для вчасного сигналізування про те, що необхідно збирати новий датасет та перетреновувати модель.
Аналіз навантаження на систему дозволяє прогнозувати необхідну кількість ресурсів відповідно до змін кількості запитів до моделі зі сторони користувачів. Це, своєю чергою, дає змогу оптимізувати витрати на оренду та обслуговування інфраструктури сервінгу моделі.
Що ми врешті-решт зібрали
На цей час ми розібрали, з яких компонентів може складатися
Таку загальну структуру проєкту вже розробили та проаналізували у Google.
Детальніше з підходами Google можна ознайомитися тут
Як бачимо на зображенні,
Якщо у вас не
Оцінка зрілості ML-проєкту
The ML Test Score: A Rubric for ML Production Readiness and Technical Debt Reduction
Також у Google розробили підхід для оцінки зрілості
Заохочую читачів детальніше ознайомитися зі статтею та протестувати якийсь відомий вам
Також варто застерегти вас від намагань максимізувати метрику зрілості, бо головною задачею будь-якого
Власний ML-стек
Ми вже розглянули з вами еволюцію
Але хотілося б мати перед очима дорожню карту розробки зрілого проєкту. А також бажано мати можливість інтерактивно обирати технології з доступного списку альтернатив.
Як відповідь на такий запит вже існує кілька онлайн конструкторів власного
The MLOps Stack Template
На сайті представлено простий шаблон, в який можна вписати їх вписати. Але, на жаль, не надається список інструментів, які можна використати для тих чи інших блоків шаблону.
MyMLOps
Ресурс дозволяє інтерактивно обирати необхідні технології, надає інформацію про їхні переваги та недоліки, а також необхідну технічну інформацію.
Після конструювання власного стека залишається одна маленька задача — взяти готовий стек від хмарного провайдера або розгорнути та налаштувати цей стек власноруч. Для успішного розгортання та налаштування необхідно мати кваліфіковану команду, а також необхідні обчислювальні ресурси.
Готовий стек. ML Platform
Чому варто звернути увагу на пропозиції готових
Наприклад, готовий стек пропонує хмарний провайдер De Novo. Нижче наведено спрощену схему стека:
Вся інфраструктура збудована навколо відеокарт NVIDIA H100 / L40S / L4, технологій віртуалізації VMWare та Kubernetes.
Раніше ми вже обговорювали етапи
Для розгортання PoC (proof-of-concept) платформа надає такі технології, як, наприклад:
- Jupyter Notebook для швидких експериментів;
- MinIO як об’єктне сховище для датасетів, вагів моделей та інших артефактів;
- для швидких демо можна використати Gradio.
На етапі MVP, коли з’являється велика кількість даних та необхідність ці дані маркувати, а також проводити багато експериментів, можна використовувати:
- Tensorboard для відстежування ходу тренування;
- MLFlow для відстежування ходу тренування та версіонування моделей;
- CVAT для маркування CV датасетів;
- doccano для маркування текстових датасетів.
На етапі переходу проєкту у фазу повноцінного продукту можна використовувати:
- Ray для сервінгу (насправді, не тільки для сервінгу, а й для тренування та підбору гіперпараметрів);
- KServe для сервінгу;
- Katib для підбирання гіперпараметрів;
- Kubeflow pipelines для автоматизації процесу тренування та інших задач оркестрації;
- Grafana для розв’язання задач моніторингу та сповіщення.
Резюме
Розробка та впровадження
Необхідність оперувати в рамках проєкту зі значною кількістю сутностей та їхніх версій (датасети, моделі, артефакти, експерименти, гіперпарамети тощо) обумовлює наявність великої кількості інструментів для роботи із ними.
За допомогою розробленої нами ML Platform ми намагаємося розв’язати цю проблему наданням готового робочого місця
3 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментарів