ML Advertising

Description
Пишу про AdTech и инструменты по работе с данными на проде

Для связи: @evgenii_munin
Advertising
We recommend to visit
HAYZON
HAYZON
6,053,581 @hayzonn

لا اله الا الله محمد رسول الله

👤 𝐅𝐨𝐮𝐧𝐝𝐞𝐫: @Tg_Syprion
🗓 ᴀᴅᴠᴇʀᴛɪsɪɴɢ: @SEO_Fam
Мои каналы: @mazzafam

Last updated 3 weeks, 1 day ago

Architec.Ton is a ecosystem on the TON chain with non-custodial wallet, swap, apps catalog and launchpad.

Main app: @architec_ton_bot
Our Chat: @architec_ton
EU Channel: @architecton_eu
Twitter: x.com/architec_ton
Support: @architecton_support

Last updated 2 weeks, 2 days ago

Канал для поиска исполнителей для разных задач и организации мини конкурсов

Last updated 1 month ago

3 weeks, 6 days ago
ML Advertising
1 month, 2 weeks ago
Как поймать прод, если он падает?

Как поймать прод, если он падает?

Я уже писал о том, как подготовиться к инцидентам на проде, чтобы, если это вдруг произошло, не терять время и разрешить быстро.

Сегодня разберем, что делать, когда инцидент уже просходит, и, например,
- у сервиса отпал регион
- трафик на платформу клиент перестал фильтроваться
- произошел резкий скачек QPS входных запросов, ваш кластер машин не вывозит
- latency резко увеличился и не хочет уменьшаться etc.

1️⃣ Для начала, сразу после того, как вам пришло уведомление, или вас пинганул менеджер, оцените ущерб (или по-модному blast radius). Для таких целей у вас должен быть доступ в аналитическую БД, куда аггрегируются ивенты (по аукционам, пользователям, минутам, регионам), и где вы можете, написав SQL запрос, оценить, на каком регионе, клиентской DSP, сегменте пользователей имеет место инцидент. А еще лучше для таких целей иметь уже готовый дашборд с основными аггрегатами и группами.

2️⃣ После того, как оценили ущерб, определяем состояние сервиса:
- operational: работает, возможно с небольшой долей ошибок
- degraded performance: значительная доля ошибок, ухудшен пользовательский опыт, ухудшено качество ML моделей, но основные сценарии работают или резервные (fallback) модели подхватили трафик
- partial outage: часть функционала отпала, отпал регион, полностью не отправляются запросы на конкретные DSP
- major outage: все полегло

После того, как оценили состояние, эскалируем инцидент своему менеджеру и команде инфры

3️⃣ Локализуйте проблему. Постарайтесь определить, из какого сервиса происходит причина инцидента. Если причина на сервисе, куда вы ранее не контрибьютили, пингуйте соответствующие команды, чтобы они подключились и проверили свои зоны ответственности.

4⃣️️️️️️ Пока ищется причина инцидента сфокусируйтесь на том, чтобы оживить прод (по-модному stop bleeding) - проверьте, какие были крайние коммиты, связанные с ошибками, и откатите их.

Если проблема в новых артефактах, которые кеширует сервис, то зачистите кеш (если у вас есть доступ) и перезалейте рабочие или fallback артефакты.

Если проблема в повышенном использованием CPU/ RAM от выброса трафика, upscal'ите машины на кластере

Детально исследовать, что именно привело к инциденту можно уже после - когда проблема решена.

5️⃣ Если все разрешилось - продолжайте мониторить и составьте postmortem. В нем укажите
- Оцененный ущерб
- Проанализируйте причину, почему так произошло
- Укажите ваши действия, и в какие сроки вы их предприняли

Что делают в это время менеджеры и аналитики?
- помогают связаться со стейкхолдерами (чтобы те были в курсе происходящего и могли со своей стороны что-то сделать - например, включить fallback) или нужными командами разработки
- смотрят на метрики и помогают оценить ущерб и в целом состояние приложения
- помогают эскалировать в нужную команду

Также рекомендую хорошую статью, как поднимают упавший прод на Ozon'е

1 month, 2 weeks ago
В прошлой [статье](https://t.me/dsinsights/267) по задаче сопоставления …

В прошлой статье по задаче сопоставления изображения с помощью ключевых точек мы рассмотрели самый простой алгоритм SIFT. Он доступен из коробки в OpenCV, не требует обученых моделей, и его часто применяют в качестве бейзлайна.

Но поскольку SIFT имеет свои ограничения и корректно срабатывает, только когда имеются большие пересечения между кадрами нам нужен алгоритм, который будет способен обучиться матчить определенные сцены и генерировать дескрипторы под ключевые точки.

SuperPoint
Первым из таких алгоритмов является SuperPoint. Он основан на свёрточной сетке, с двумя выходными головами:

- Одна голова отвечает за классификацию ключевых точек: определяет, является пиксель ключевой точкой или нет.
- Вторая голова генерирует дескрипторы для каждого пикселя. Здесь каждый дескриптор – это вектор размерностью 128.

Для обучения модели используются два основных лосса:
- Кросс-энтропия для классификации ключевых точек.
- Hinge Loss для дескрипторов.

Как обучать SuperPoint?
- Генерируем синтетические данные. Создаём изображения, на которых будет понятно, где нужно разместить ключевые точки. Квадраты, линии, чёрточки, сетки, всё на фоне гауссового шума. Выучиваем сеть на этих данных и называем её MagicPoint.

- Для получения разметки на реальных картинках применяем аффинные преобразования, homography adaptation например, меняем ракурс, масштаб etc. После этого прогоняем через MagicPoint эти картинки, а предсказанные точки объединяем. Таким образом, получаем разметку на предсказание ключевых точек.

- Обучаем сетку. Считаем матрицу M применения homography adaption. Мы можем взять ключевые точки с одной матрицы и спроецировать их на другую.

```

kp1_projected = cv2.perspectiveTransform(kp1_np.reshape((1, -1, 2)), M)[0, :, :]
dists = cdist(kp1_projected, kp2_np)

M = sample_homography_alb(image)
warped = cv2.warpPerspective(src=image, M=M, dsize=(image.shape[1], image.shape[0]))

```

Сопоставив дескрипторы между двумя версиями изображения, будем оценивать расстояние между ними: если расстояние маленькое, то это одна и та же точка, и такие дескрипторы и нужно в конечном счёте стянуть. В итоге нейросеть обучается на основе сопоставления расстояний между точками и их дескрипторов, минимизируя ошибку в сопоставлении.

3 months, 3 weeks ago

Сегодня у нас инфографика об основных видах тестирования приложения

3 months, 4 weeks ago

▶️ Критерий Вилкоксона
Теперь давайте представим, что разницы метрик не распределены нормально. В таком случае нужны непараметрические тесты. Самый распространненый это критерий Вилкоксона. Его еще называют критерием знаковых рангов.
- Для начала переформулируем гипотезы и вместо средних будем сравнивать медианы
- H0 median(scores_cb) != median(scores_r)
- H1
- двухсторонняя гипотеза median(scores_cb != median(scores_r)
- односторонняя гипотеза median(scores_cb) < median(scores_r)
- Также, как и для Т-теста Стьюдента вычислим попарные разницы diff между моделями (здесь то же самое ограничение на равенство дисперсий и соответсвенно размеров выборок)
- Проранжируем в порядке возрастания их модулей (при этом для повторяющихся значений назначается одинаковый ранг, равный среднему их рангов)
- Суммируем ранги с положительной разницей и обозначим результат, как W+
- То же самое делаем для суммы рангов с отрицательной разницей W\-
- Расчитем W-статистику, как W = min(W\-, W+) и сравниваем ее с табличным порогом, чтобы опровергнуть или нет H0.

На питоне пользуемся встроенной функцией

```

stats.wilcoxon(scores_rf, scores_cb)
# output: WilcoxonResult(statistic=1.0, pvalue=0.125)
```

Social Science Statistics

Quick P Value from T Score Calculator

A simple calculator that generates a P Value from a T score.

3 months, 4 weeks ago

АБ тесты

Поскольку на работе для выкатки фичей в SSP я провожу АБ тесты, считаю, что можно освежить базу по их анализу и проверке стат. гипотез.

Допустим, нам нужно сравнить две модели регрессии. Для примера возьмем открытый датасет sklearn.datasets.load_diabetes. Создадим два регрессора CatBoostRegressor и RandomForestRegressor. Прогоним для каждой из модели кросс валидацию на 5 фолдов и запишем метрики MSE двух моделей.

```

X, y = load_diabetes(return_X_y=True)
rf = RandomForestRegressor()
cb = CatBoostRegressor(verbose=False)
folds = KFold(n_splits=5)
scores_rf = cross_val_score(rf, X, y, scoring='neg_mean_squared_error', cv=folds)
scores_cb = cross_val_score(cb, X, y, scoring='neg_mean_squared_error', cv=folds)

```

Когда мы получили метрики, нам нужно выбрать какой тест проводить:
- параметрический в предположении, что наши метрики лежат в каком-то распределении
- или более консервативный непараметрический.
Рассмотрим три самых популярных

▶️ Т-тест Стьюдента
Допустим, мы считаем распределение метрик нормальным и их дисперсии равны. Тогда мы можем использовать параметрический Т-тест Стьюдента. Чтобы попрактиковаться, мы можем посчитать Т-тест руками
- Сформулируем гипотезы
- нулевую H0 avg(scores_cb) != avg(scores_r)
- альтернативную гипотезы H1
- двухсторонняя гипотеза avg(scores_cb) != avg(scores_r)
- односторонняя гипотеза avg(scores_cb) < avg(scores_r)
- Вычислим попарные разницы diff между метриками MSE моделей
- Вычислим среднюю разницу M между метриками
- Вычислим стандартное отклонение разниц sd
- Вычислим стандартную ошибку SE = sd / sqrt(n)
- Посчитаем Т-статистику: t = M / SE
- Посчитаем число степеней свободы df = n \- 1 (количество значений для расчета стат. величиный, которые могут свободно меняться)
- Далее вносим T-статистику t и df в калькулятор T-распределения и по таблице находим уровень значимости pvalue (вероятности ошибки первого рода)
- Сравним pvalue с порогом alpha (как правило, берем 0.05).
- Если тест односторонний, т.е. мы предполагаем, что scores_cb < scores_rf, то при pvalue < 0.05 мы можем опровергнуть нашу нулевую гипотезу и сказать, что MSE катбуста значимо меньше случайного леса
- Для двусторонней гипотезы мы делим порог значимости пополам и уже опровергаем H0 из условия pvalue < 0.025

На питоне тест Стьюдента выглядит следующим образом

```

stats.ttest_rel(scores_rf, scores_cb)
# output: Ttest_relResult(statistic=1.9353, pvalue=0.12503)

```

поскольку pvalue > 0.05, мы не можем опровергнуть нулевую гипотезу

▶️ Т-тест Уэлча
Давайте предположим, что мы по проводили кроссвалидацию с разным числом фолдов:

```

scores_rf = cross_val_score(rf, X, y, cv=5, scoring='neg_mean_squared_error')
scores_cb = cross_val_score(cb, X, y, cv=10, scoring='neg_mean_squared_error')

```

В таком случае, тест Стьюдента нам не подходит, поскольку мы уже не можем вычислить попарные разницы. Тогда прибегаем к тесту Уэлча. Здесь нет предположения о равенстве дисперсий, соответственно и выборки могут быть разного размера. Алгоритм следующий:
- H0, H1 формулируем аналогично
- Вычислим средние метрик M1, M2
- Вычислим дисперсии метрик var1, var2
- Посчитаем Т-статистику: t = (M1 \- M2) / sqrt(var1/n1 + var2/n2)
- Посчитаем число степеней свободы df = n \- 1
- Далее также по таблице из t и df считаем pvalue и сравниваем с порогом значимости

На питоне для этого есть функция ttest_ind

```

stats.ttest_ind(scores_rf, scores_cb, equal_var=False)
# output: Ttest_indResult(statistic=0.8564, pvalue=0.4077)
```

Social Science Statistics

Quick P Value from T Score Calculator

A simple calculator that generates a P Value from a T score.

4 months, 1 week ago

trtexec

В продолжение поста о TensorRT

Для быстрой проверки latency модели можно использовать утилиту командной строки trtexec. Она оценивает latency / throughput с различными опциями оптимизации, а также сохраняет собранный engine с возможностью дальнейшей загрузки и запуска. Она содержит много опциональных флагов, которые включают определённые опции оптимизации.

Команды на trtexec выглядят следующим образом

```

trtexec --workspace=4096 --onnx=model.onnx --saveEngine=engine.trt --best --useSpinWait --outputIOFormats=fp16:chw --inputIOFormats=fp16:chw --verbose

```

- Здесь первый аргумент задаёт максимальный объём используемой памяти в мегабайтах, то есть для вычисления модели будет доступно 4 гигабайта видеопамяти.
- Следующие два аргумента указывают пути до модели в формате ONNX и до собранного engine (один из результатов запуска утилиты).
- Флаг \-\-best разрешает использовать любые типы данных для достижения максимальной производительности. Чаще - это низкоразрядные типы данных.
- Следующие флаги задают порядок осей и тип входных / выходных данных модели (как правило FP16).

Telegram

ML Advertising

Продолжаем тему портирования и оптимизации ML моделей на проде. Сегодня речь пойдет про TensorRT TensorRT — это фреймворк от Nvidia, который позволяет учитывать нюансы аппаратного устройства вычислителей. В нём модель оптимизируется перед запуском таким…

We recommend to visit
HAYZON
HAYZON
6,053,581 @hayzonn

لا اله الا الله محمد رسول الله

👤 𝐅𝐨𝐮𝐧𝐝𝐞𝐫: @Tg_Syprion
🗓 ᴀᴅᴠᴇʀᴛɪsɪɴɢ: @SEO_Fam
Мои каналы: @mazzafam

Last updated 3 weeks, 1 day ago

Architec.Ton is a ecosystem on the TON chain with non-custodial wallet, swap, apps catalog and launchpad.

Main app: @architec_ton_bot
Our Chat: @architec_ton
EU Channel: @architecton_eu
Twitter: x.com/architec_ton
Support: @architecton_support

Last updated 2 weeks, 2 days ago

Канал для поиска исполнителей для разных задач и организации мини конкурсов

Last updated 1 month ago