Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Артём Нургалиев – «MLOps, автоматизированное обучение и доставка моделей»

Ozon Tech
October 30, 2023

Артём Нургалиев – «MLOps, автоматизированное обучение и доставка моделей»

Ozon Tech

October 30, 2023
Tweet

More Decks by Ozon Tech

Other Decks in Technology

Transcript

  1. План доклада 2 • Что хотим? • Пример задачи •

    Feature Registry+Feature Store • Model Registry+Model Inferencer • Архитектура • Тестирование и мониторинг
  2. Что такое «трафареты»? Фиксированные позиции — рекламные Для участия в

    рекламном аукционе продавец выставляет ставку: • За 1000 просмотров 
 (CPM, Cost Per Mile) • Или за 1 клик 
 (CPC, Cost Per Click) • Или за 1 заказ 
 (CPO, Cost Per Order) 3
  3. Трафаретный аукцион Зачем нам ML модели? 4 Auction Score =

    i f(eCPMi , relevancei ) При ранжирования учитывается скор релевантности и ожидаемая прибыль с одного показа eCPM Ставка за 1000 просмотров (Cost Per Mile) 
 / 1000 
 Ставка за 1 клик (Cost Per Click) 
 Ставка за 1 заказ (Cost Per Order) 
 CPM → eCPM = Bid CPC → eCPM = Bid × CTR CPO → eCPM = Bid × CTR × CCR eCPM рассчитать eCPM 1. Модель предсказания вероятности клика после показа (CTR) 2. Модель предсказания вероятности заказа после клика (CCR) Наша задача: Используем две ML модели:
  4. Идеальный день DataScientist-а 1. Придумать новую фичу 2. Создать новую

    фичу feature_registry.create_feature(feature) 3. Собрать датасет make_train_test_dataset(feature_registry, experiment_cfg, features_cfg, target_cfg) 4. Обучить модель train(train_dataset, experiment_cfg, version_cfg) 5. Провалидировать модель validate(test_dataset, experiment_cfg, version_cfg) 6. Загрузить модель upload(feature_registry, model_registry, experiment_cfg, version_cfg)
  5. 7 команда эффективности рекламы Кто мы: 1. Счастье для всех.

    Даром, и пусть никто не уйдет обиженный! 2. Быстро и регулярно обучать ML модели 3. Создавать рассчитываемые фичи любой сложности. Использовать фичи с прода при обучении 4. Проводить воспроизводимые и единообразные эксперименты 5. Автоматически поддерживать ML модели в сервисе 6. Быть уверенными в качестве предсказаний Чего мы хотим: ML модели можно регулярно обучать на свежих данных и автоматически выкатывать в прод 7. Держать нагрузку в десятки тысяч RPS
  6. Какие бывают фичи? Сырые фичи — фичи, которые можно напрямую

    достать из источников данных Примеры: • Цена товара (sku) price = Price(
 input_df=df,col=‘price’
 key=['sku'],
 placement='general',
 ) • Realtime-счётчик числа просмотров по паре (sku, поисковый запрос) в «поиске» paired_views = Views(
 input_df=df,col=‘view’
 key=[‘sku’, ‘search’],
 placement=‘search’,
 ) Три плейсмента: search, catalog, highlight В каждом плейсменте можно поддерживать разные срезы, например: [‘sku’, ‘search’], [‘sku’], [‘search’], [‘seller_id’], [‘campaign_id’], [‘user_id’], …
  7. Какие бывают фичи? Рассчитываемые фичи — агрегаты над сырыми фичами

    • CTR (click-through rate) — «кликабельность», конверсия из показа в клик CTR по паре (товар, запрос): Clicks(sku, search) Views(sku, search) CTR по товару: Clicks(sku) Views(sku) • Сглаженная конверсия из показа в клик (Smoothed CTR) if Views >= 200: CTR 
 else: SmoothedCTR SmoothedCTR = 100 × 0.027 + Clicks(sku, search) 100 + Views(sku, search) Запрос: «чай» sku: 33731478 Цель: предсказать CTR (вероятность клика после показа) по паре (33731478, «чай») Views (33731478, «чай»): 65 
 Clicks (33731478, «чай»): 4 Можно считать много разных сглаженных конверсий: из показа в заказ, из клика в заказ, 
 из показа в добавление в корзину и т.д. !
  8. От частного к общему Стало: обобщённое представление любой сглаженной конверсии

    по любому разрезу Views 
 (key, placement) SmoothedRate ValidOrSmoothed validRate: 0.027 
 smoothCoef: 100 bound: 200 Clicks 
 (key, placement) AST (Abstract Syntax Tree) • Собираем фичу из блоков, одинаковых на Go и Spark • Фиксируем AST фичи с гиперпараметрами в формате, который может понять Go-микросервис if Views >= 200: CTR 
 else: SmoothedCTR SmoothedCTR = 100 × 0.027 + Clicks(sku, search) 100 + Views(sku, search) Было: cглаженная конверсия из показа в клик (Smoothed CTR) по паре (sku, search)
  9. Фича «Сглаженный CTR» 11 avg_CTR = 0.027 smooth_coef = 100


    paired_bound = 200 1. Задаём гиперпараметры views_14d = Views14D(df=df,…)
 clicks_14d = Clicks14D(df=df,…) 2. Задаём сырые фичи # собираем один блок
 smoothed_CTR = SmoothedRate(
 inputs=[clicks_14d,views_14d],
 params={
 'valid_rate': avg_CTR,
 'smooth_coef': smooth_coef,
 }
 ) # собираем второй блок
 search_paired_CTR = ValidOrSmoothedRate(
 inputs=[clicks_14d, views_14d, smoothed_CTR],
 params={
 'smooth_coef': smooth_coef,
 'lower_bound': paired_bound,
 }
 ) 3.Собираем рассчитываемую фичу из блоков
  10. Feature Registry 12 Name Version Ast Author Timestamp search_smooth_CTR stencil-ctr-search-

    catboost-2 {‘class’: ‘SmoothedRate’, params: {…}, ‘input_…’} anurgaliev 2023-08-09 11:53:58 catalog_smooth_CTR stencil-ctr-catalog- catboost-3 {‘class’: ‘SmoothedRate’, params: {…}, ‘input_…’} mafedorenko 2023-08-10 12:01:33 highlight_smooth_CTR Stencil-ctr-highlight- catboost-2 {‘class’: ‘SmoothedRate’, params: {…}, ‘input_…’} ssluchevskiy 2023-08-11 13:44:25 Postgre+S3 Посмотреть существующие фичи: feature_registry.list_features() Посмотреть версии загруженных фичей: feature_registry.list_versions()
  11. Вы собираетесь создать фичу с именем: search_smoothed_CTR Фича будет иметь

    следующий конфиг: { "class": «ValidOrSmoothedRate", "params": { "bound": "<TODO: fill in>" }, "input_features": [ { "class": "Clicks14D", "key": [ "search", «sku" ], "placement": "search", "input_df": "<TODO: fill in>", "col_name": "<TODO: fill in>" }, { "class": "Views14D", "key": [ "search", "sku" ], "placement": "search", "input_df": "<TODO: fill in>", "col_name": "<TODO: fill in>" }, { "class": "SmoothedRate", "params": { «valid_rate": "<TODO: fill in>", ... } ] } Feature Registry 13 Postgre+S3 • Обеспечивает уникальность фичей • Осуществляет версионирование • Для каждой версии фичи хранит AST 
 фичи с гиперпараметрами Cоздать фичу: feature_registry
 .create_feature(feature) Зафиксировать версию фичи (происходит автоматически при вызове upload): feature_registry
 .create_feature(feature)
  12. Feature Store 14 Микросервис на Go + Redis + Index

    Feature Registry Redis Batch update Realtime updates ML lib Feature Store: рассчитывает фичи Другие сырые фичи Cырые фичи • Заливаем сырые фичи в Kafka батчами • Обрабатываем realtime-обновления и batch-обновления, обновляем значения в Redis • Feature Store достаёт сырые фичи из Redis и/или получает сырые фичи из запроса • Для каждой рассчитываемой фичи Feature Store обходит AST фичи и вычисляет значение
  13. Model Registry 15 { "model_type": "catboost", "model_key": "stencil-ctr-search-catboost_2", "checksum": "bf21c3f3676c1x032dda46f751r92519",

    "predict": { "feature_importance": [ { "name": "search_paired_CTR_by_ fi rst_valid_14d", "importance": 75.57 }, { "name": "search_product_CTR_by_ fi rst_valid_14d", "importance": 9.56 }, { "name": "search_target_CTR_by_ fi rst_valid_14d", "importance": 14.94 } ], "max_missed_features_ratio": 100.0, "fallback_feature": "search_smooth_CTR_by_ fi rst_valid_14d" } "limiter": { "lower_bound": 0.0, "upper_bound": 0.01, } } Хранит model.bin и manifest.json
  14. Model Inferencer 16 Микросервис на Go • Микросервис на Go

    (используем cgo для инференса catboost) • При старте загружает нужные версии моделей из Model Registry Запрос -> Выбираем модель с помощью A/B конфига -> Достаем список фичей из манифеста -> Запрос в Feature Store за фичами -> Predict моделью -> Ответ • Пишет Log рассчитанных фичей и предсказаний в Kafka
  15. ML Library Model Registry Feature Store Feature Registry Model Inferencer

    Metrics Log Redis Other 
 updates Upload Upload Upload Request Response Calc Features HDFS Get raw features Save state Tracker 17
  16. ML Library Model Registry Feature Store Feature Registry Model Inferencer

    Metrics Log Redis Other Service Realtime updates Batch 

  17. Тестирование + мониторинг 21 Автоматическое тестирование • При выкатке модели

    в прод прогоняются автоматически сгенерированные тесты • Тесты проверяют полную синхронизацию расчёта фичей и инференса моделей между офлайном и продом Онлайн мониторинг качества предсказания
  18. Результаты • > 20 моделей в Model Registry • В

    проде: • CCR модель на 79 фичах для поиска • CTR модель на 22 фичах для поиска • CTR модель на 22 фичах для каталога • Время выкатки модели = время изменения конфига* 22
  19. Ближайшие планы • Ежедневное автоматическое переобучения моделей на свежих данных

    23 • Автоматическая документация экспериментов • ML Explainer • Полная синхронизация офлайна и прода за счёт обучения на логах с прода
  20. E-mail: [email protected] Tg: @FicrusS Спасибо за внимание! Артём Нургалиев, старший

    разработчик команды «Эффективность рекламы»