Интересное что-то
517 subscribers
2.72K photos
253 videos
139 files
4.52K links
Материалы и мысли, понадерганные отовсюду
Блог: https://t.me/asisakov_channel
Чат: https://t.me/youknowds_chat
Download Telegram
Forwarded from Evgeny Ivanov
Вводный: https://www.amazon.com/gp/product/1108724264/
Чуть больше углубления в статистику: https://alexdeng.github.io/causal/
UPD. А в этой главе crash course по вероятности и регрессиям: https://mixtape.scunning.com/02-probability_and_regression
🔍 Causal Inference (ч. 1)

Этот пост нужен для того, чтобы базово вникнуть для чего используется

Итак, Causal Inference - это процесс поиска причинно-следственных связей. Он позволяет нам понять, насколько X влияет на Y. В статье от X5 объясняются основные техники, позволяющие оценить эффект. Как правило, они могут основываться и на простых методах по типу линейной регрессии. Вообще практически все в нашем мире можно объяснить с помощью линейной регрессии (true fact).

Зачем нам это может нужно, если есть A/B тесты?

1) Хочется оценить эффект от фичи, которая работает длительное время. Например, нужно оценить эффект от раскатки нового варианта онбординга на пользователей с момента запуска.

2) Мы не контролируем формирование групп. Это может быть применимо к оффлайн-экспериментам.

3) Не можем провести эксперимент по различным причинам. Например, по техническим или этическим, когда тест нужно держать очень долго

🤗 Самое важное, что нужно запомнить - это то, что мы пытаемся в большинстве случаев понять, как себя будет вести определенный treatment после вмешательства (intervention). Некоторые методы подразумевают построение временных рядов (байес и не только), прогнозы и на основе этого определение эффекта, а где-то достаточно посмотреть на то, как вела себя метрика до и как ведет она себя после вмешательства.

🆎 Представляем, что мы хотели провести A/B тест, но по какой-то из причин, этого не сделали. Помните, в чем основная задача? Это определить будет ли значимым эффект при рандомном семплировании определенных групп. Проводя эксперимент в классическом понимании, мы имеем тест, контроль (на кого-то раскатили новый функционал, на кого-то нет), мы применяем. Далее, ссылаясь на то, что наблюдения независимые (или зависимые и мы применяем поправки), сравниваем группы, получаем эффект

В задачах Causal Inference может быть несколько вариантов решения задач.

1. Определить то, как ведет себя метрика на препериоде и оценить то, как после запуска воздействия поменялось поведение метрики (по сравнению с прогнозом). Например, Diff-n-diff или Causal Impact (Counterfactuals analysis)

2. В задачах, где у нас нет контроля, сопоставить пользователей по похожести и оценивать эффект так, как будто мы проводим тест. PSM, Instrumental variables и различные вариации (Квази-эксперименты)

Ставьте реакции, пишите комментарии. В следующих постах я опишу то, какие методы бывают более подробно и разберем более подробно то, как они работают.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Quant Researcher
🥸 EDA из коробки или df.describe() на максималках

Sweetviz поможет быстро выявить зависимости в данных, подготовиться к моделированию или сделать процесс анализа более наглядным:


import sweetviz as sv

# Загружаем данные
data = pd.read_csv('data.csv')

# Создаем отчет
report = sv.analyze(data)

# Показываем
report.show_html()


🥹 Всего 3-4 строчки кода позволят увидеть:

- Связь целевой переменной с другими признаками.
- Различия между тренировочной и тестовой выборками.
- Корреляции между числовыми и категориальными данными.
- И много чего еще.

Полный пример использования и разбор Sweetviz можно найти здесь.

Quant Researcher
Forwarded from This is Data
Друзья, привет!

Последние полгода я полностью погружён в мир метрик. Да, я – тот самый человек, который на вечеринке обсуждает не отпуск, а Retention Rate. Что поделать, метрики – это невидимые герои бизнеса. Именно они говорят, жить продукту или нет, без них не принимаются никакие серьёзные решения.

Я глубоко изучил популярные фреймворки, прочитал несколько книг, прошерстил тонну статей и всё это объединил в серию постов в Telegram. Получился целый мини-курс!

Если ваши любимые цифры – это не только количество лайков на фотке с котом, но и что-то более серьёзное, вроде LTV или CAC, вам точно будет интересно! Ссылки на посты ниже – сохраняйте и делитесь с друзьями.

База
▪️Что такое метрика?
▪️Фреймворки для работы с метриками
OKR
▪️Цели и ключевые результаты (OKR)
▪️Книга.Измеряйте самое важное
NSM
▪️Метрика Полярной звезды (NSM)
▪️Почему Revenue и Profit плохие кандидаты в NSM
▪️Книга.The North Star Playbook
Иерархия и пирамида
▪️Дерево или иерархия метрик
▪️Пирамида метрик
▪️Построение пирамиды метрик
Опыт Amazon
▪️Опережающие и запаздывающие индикаторы
▪️Маховик Amazon
▪️Книга.Стратегия Amazon
Для конкретной задачи
▪️Фреймворк AARRR
▪️Фреймворк HEART
▪️Фреймворк PULSE

А я тем временем продолжу копаться в теме и рассказывать вам, как и зачем использовать #метрики на практике.
Моя первая веб аппка (telegram mini app)

Пару месяцев назад в Twitter завирусилось веб-приложение, которое анализирует твиты и делает разбор личности в стиле: «Ты похож на волка 🐺, брат. Станешь мультимиллионером с вероятностью 99%». twitter.wordware.ai — было создано на no-code платформе от YC-backed компании Wordware.

Я решил неспешно повторить нечто подобное для телеги, так как давно хотел разобраться в Telegram Mini Apps и веб-разработке. Сделал t.me/GigoGramBot/report — тут можно ради кеков проанализировать профиль/канал/бота по публичной инфе (аватарке, имени, никнейму, bio и постам в случае каналов)

Раньше я никогда не делал production-ready веб приложений, поэтому захотел поделиться гайдом, как обычному python enjoyer-у сделать свою аппку

🔫😊🔫 Фронтенд
🟣v0
v0 умеет делать красивый дизайн, если в промпте просто указать «сделай красиво». ChatGPT и Claude хуже справляются с абстрактной задачей «сделай красиво» — у них часто получается не очень. Я же, не будучи дизайнером, не могу конкретно объяснить, что нужно улучшить (цвета, расположение, эффекты и т.д.)

От кода, полученного от v0 я, в итоге, отказался, потому что там на выходе Next.js и куча всяких файлов-папок. Мне показалось это сложным, поэтому решил упрощать

🟣 ChatGPT (GPT-4o) и Claude (3.5 Sonnet) 🥴
С их помощью я накидал основу приложения через Create React App. Получился простой репозиторий с несколькими файлами, в которых легко разобраться. И я уже мог давать конкретные комменты по дизайну из v0 и прикладывать скриншоты к промптам.

🟣 В дальнейшем я остановился на ChatGPT, так как он предполагал, что я ничего не знаю, и давал базовые советы типа: «Сначала вызови команду npm install, создай такой-то файл». Эти советы немного раздражают, когда ты опытный разработчик, но в моём случае были полезны.

🟣 С помощью Cursor разработал весь функционал приложения. Кажется, я самостоятельно написал всего несколько строчек кода. Единственное — столкнулся с тривиальной багой, которую не могли пофиксить ни Cursor, ни ChatGPT, ни Claude. Только с выходом o1-preview её удалось исправить, лол.

🟣Сами Telegram Mini Apps оказались прикольными. Достаточно добавить один JS-скрипт, и становятся доступны все методы из документации.

🟣 Деплой через Netlify. Просто подключил GitHub-репозиторий, и всё само выкатилось. Больше ничего не делал. Цена: $0.

🥸🥸🥸 Бэкенд
🔹 FastAPI
Здесь живут все эндпоинты для получения информации о юзернейме и предсказаний. Очень люблю FastAPI. Если вы ещё на Flask, то пора переходить!

🔹 Redis в качестве единственной БД
Возможно, это не самое логичное решение, зато супер просто и быстро! У меня всего две операции: получить информацию по юзернейму или сохранить её.

🔹 Python Telegram Bot
На этом фреймворке написан сам бот. В принципе, можно было бы и без бота, но для оплат нужен сервис, который отвечает на pre-checkout запросы. С помощью этого фреймворка такой сервис сделать очень просто

🔹 Сервер
Арендовал Droplet на DigitalOcean, там же задеплоил приложение. Redis поднял через их Databases. Цена: $30/месяц за всё.

🔹 Оказалось, что сервера DigitalOcean заблокированы в РФ, поэтому подключил Cloudflare DNS + Proxy. Цена: $0.

🙂🙂🙂 AI часть
🟣 Написал пару функций, которые парсят доступную публичную информацию о пользователе или канале по юзернейму.

🟣Промпт скопировал у twitter.wordware.ai — у них можно форкнуть агента и посмотреть внутренности. Немного подкорректировал его, чтобы лучше работал для Telegram.

🟣 Использую GPT-4o с включенными Vision Capabilities и Structured Outputs. Эту фичу я больше всего люблю в современных ллм-системах. По сути, нужно задать pydantic модель (см. скрин) и она у тебя будет на выходе запроса (sic!) Цена: ~$0.1 за генерацию.

Короче, попробуйте потыкать аппку (там 3 предсказания бесплатно), а я отвечу на любые вопросы про реализацию.

🤪 https://t.me/GigoGramBot/report
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from DL in NLP (Vlad Lialin)
Soumith Chintala (создатель pytorch) выдаёт базу о том как тренироваться на 10К GPU
x.com/soumithchintala/status/1841498799652708712

Оч короткий TL;DR (всем рекомендую прочитать оригинал, он не длинный)

1. Maximize batch size and GPU utilization: 3D parallelism + gradient checkpointing
1. Overlap communication, e.g. while N-1th layer is computing backward, all GPUs with an Nth layer can all-reduce
1. Optimize for your GPU cluster network topology

1. Failure recovery, at 10k GPU scale, things fail all the time -- GPUs, NICs, cables, etc
1. At 10K scale bit flips actually become a problem and can cause loss explosions. Save your model state as frequently and as quickly as you can. To speed it up save it in shards and to CPU memory first and then in a seaprate thread write to disk
Forwarded from Tensor Banana
Подключаем кучу видеокарт к мини-пк или ноутбуку

В наличии имею мини-пк GenMachine на Ryzen 7 7730u (брал за 27к) https://aliexpress.ru/item/1005005560402861.html?sku_id=12000036067533846
Есть 2 варианта подключения внешней видеокарты к ноуту или мини-пк: по Thunderbolt или через переходник m2->pcie. Thunderbolt есть только в дорогих моделях, и он обычно только один + к нему нужен будет корпус ценой еще в полвидюхи. У меня Thunderbolt нет, поэтому будем юзать m2-nvme.
У моего мини-пк есть целых три слота m2 (x4 SSD, x4 SSD, x1 m2-e-key-wifi), это довольно много. Чаще всего, в дешёвых мини-пк идёт ровно 1 слот для SSD и всё. Например, в beelink s12 pro (17к на озоне) всего 1 x1 слот, но и там есть варианты.

Следует отметить, что не все слоты m2 являются PCIE. В старых ноутах/мини-пк будет стоять m2-SATA, а не m2-nvme, нам такие не подходят.

Для подключения видеокарт нам понадобится переходник с m2 на PCIE x16. Он позволит подключить одну видеокарту. Я купил 2 штуки на PCIE 3.0 x4, они довольно быстрые.

Но одной видеокарты нам мало, нам надо 4, поэтому нужен ещё сплиттер с x1 на 4 x1. Такой обычно используют майнеры, он не супер быстрый, но зато позволяет подключить до 4 карт на один слот в режиме PCIE 2.0 x1 (полоса будет по умному делиться между всеми устройствами). Предположу, что для этого сплиттера не нужна поддержка бифуркации в матери, но это неточно (в моем биосе никакой бифуркации я не нашел). Карту с разъемом x1 можно воткнуть в разъем x16.


## Железки
Порядковый номер соответствует номеру на фотке.
1. Переходник m2 e key (wifi) to m2 m key (ssd) PCIE 3.0 x1 https://aliexpress.ru/item/1005004711422885.html?sku_id=12000030192041528
2. Переходник m2 to PCIE 3.0 x16 (использует от x1 до x4 линий, взял 2) https://aliexpress.ru/item/1005004727347382.html?sku_id=12000030249734865
3. Сплиттер (райзер) x1 to 4 x1 with USB cables, PCIE 2.0 x1 https://aliexpress.ru/item/1005003519054789.html
4. Переходник (райзер) PCIEUSB to PCIE 3.0 x16 https://aliexpress.ru/item/1005004134020455.html?sku_id=12000028145182159
5. Переходник m2 to 4 x1 with USB cables (работает, но нестабильно, иногда BSODит. Возможно, брак, отзывы были отличные) https://aliexpress.ru/item/1005004402356641.html?sku_id=12000029049805779
6. Переходник m2 to 1 x1 with USB cables https://www.ozon.ru/product/m-2-ngff-v-pci-e-x16-usb3-0-adapter-riser-card-card-adapter-342305387/
7. Переходник PCIE x16 to PCIE x16 + 2 m2 (у меня m2 слоты не заработали) https://aliexpress.ru/item/1005005277952427.html


Блок питания взял свой старый на 750W. Чтобы он автоматом включался, я замкнул нужный контакт на землю. Сперва включаю БП, потом мини-пк, иначе видюхи не определятся.

## Скорость загрузки

Слот x1 + 2 видюхи на сплиттере pcie 2.0 x1
- Скорость загрузки T-lite-instruct-0.1.Q8_0 (файнтюн llama-3-8b, 7.95 GB) из ram в vram - 22s (0.35 GB/s)
Полное время загрузки llama.cpp server от дабл клика до готовности:
- в одну видюху --tensor-split 1.0,0.0 - 34s
- в две видюхи --tensor-split 0.5,0.5 - 35s
- два экземпляра llama.cpp параллельно, каждый в свою видюху - 48s
- в одну видюху на x4 без сплиттера - 17s
- x1 в comfyui flux загружается со скоростью 0.08 GB/s (возможно, налету пересчитывает fp16 в fp8)

Скорость загрузки в режиме pcie 3.0 x4 (без сплиттера) в llama.cpp примерно 1.20 GB/s. В comfyui - 0.30 GB/s, холодный старт - 96s

Скорость чтения SSD в зависимости от слота. В родном PCIE 3.0 x4 - 3.65 GB/s, в x1 - 0.91 GB/s. На практике в винде почти не замечаю разницы, ощущую ее только, когда делаю полнотекстовой поиск по куче файлов. Я хз почему скорость чтения/записи с SSD в 2-3 раз выше чем при работе с видеокартой при аналогичном режиме.

## Скорость инференса
не влезла, вынес в комменты

В теории в эти 3 слота я смогу подключить через сплиттер до 12 видюх. Сколько получится на практике - пока неизвестно. В данный момент работают 2. Интернет говорит, что в этом проце 16 PCIE 3.0 линий. Но каждому сплиттеру нужна всего одна линия. Пока оставил 2 видюхи на x4, ssd на x1.