Интересное что-то
517 subscribers
2.72K photos
253 videos
139 files
4.52K links
Материалы и мысли, понадерганные отовсюду
Блог: https://t.me/asisakov_channel
Чат: https://t.me/youknowds_chat
Download Telegram
Привет, товарищи-статистики!

Кто понимает p-value, тот, простите, понимает его, а кто нет, тому формулировка про все эти нулевые гипотезы, какие-то экстремальности и прочее будут ну очень далекими и оторванными от простого сравнения A и B. Но что если есть какая-то другая мера, которая, возможно, поможет лучше объясниться с теми, кто не особо понимает за статистику?

E-value — кажется, та самая мера, которая аналогично p-value говорит о значимости, но отвечает на на другой вопрос: "Насколько сильным должен быть некоторый неучтённый фактор, а не тритмент, чтобы полностью объяснить мой результат?".

Разберемся как следует в очередном большом посте!
Я принес. Ради чего люди ходят на работу? Пять типов мотивации по Герчикову

Я выступаю скорее против типирования, чем за. Легко человеку, не хотящему разбираться в людях, на глазок прикинуть психотип, наклеить на человека ярлык и всегда относиться к нему только определенным образом. А ведь люди не просто очень разные и не укладываются в один тип, а еще и со временем могут меняться их мотивации и стремления.

Однако сегодняшнюю статью я вам всё же принес https://habr.com/ru/companies/psb/articles/938116/

Мне понравилась, как она подробно и понятно расписана. С ней я предлагаю сделать 2 упражнения:

1. Прочесть и подумать, а что вас мотивирует из вышеуказанного сейчас? А 5-10 лет назад?
2. Принять, что на одно и то же событие у разных людей может быть очень разный взгляд, и перестать ультимативно спорить в интернетах про то, как ПРАВИЛЬНО. Кто-то говорит – только деньги-денежки-деньжищи, кто-то – профессионализм и развитие, кто-то – власть и вертикальный карьерный рост, кто-то – признание и народная любовь. А по сути-то каждый прав для себя (если он хорошо подумал и себя знает), но нет смысла другим это навязывать как ультимативно правильное мнение.
Как заботать алгоритмы в осеннем семестре ВУЗа

Алгоритмы очень важный предмет для старта карьеры в IT. Возможно один из самых полезных предметов на младших курсах. Экзамены в большинство школ содержат в себе алгоритмическую часть: ШАД, Летние школы Яндекс, Т-академия, а также отборы на стажировки практически во все компаниии бигтеха. Алго-часть есть почти для всех, аналитиков, бэкендеров, мл-разработчиков. Поэтому важно не просто заботать алгоритмы, заучив их, а важно проработать алгоритмический аппарат, что зачастую сделать не получается за счёт одного вузовского курса.

Начнём гайд с выбора площадки:

leetcode.com - сразу отбрасываем, задачи там подготовят вас лишь к простеньким алгоритмическим собеседованиям, за счет того что задачи на собеседованиях интервьюверы берут с этого сайта. Задачи там не развивают, они либо слишком простые конструктивы, либо баяны.

codeforces.com - отличный сайт для развития в спортпроге, один из немаловажных факторов - это наличие геймификации (рейтинговой системы). А также та же система помогает относительно точно классифицировать сложность задач и помогает планомерно расти. Например ваш текущий рейтинг x, чтобы наиболее эффективным образом развиваться и повышать свой рейтинг оптимально будет решать задачи рейтинга x + 200/300 во время тренеровок, на них будет уходить больше времени, но темп решения будет потом уменьшаться. Также не забудьте скрыть "теги" задач и решать "вслепую". Рейтинг формируется исходя из написания раундов (соревнований в реальном времени), здесь вначале трудно будет привыкнуть к требуемой скорости решения, но всё придёт с практикой (в первую очередь нужно научиться решать трудные задачи, а не быстро легкие). Задачи здесь близки к формату icpc, в последнее время преобладают конструктивы, но также и алгоритмические тоже довольно популярны, довольно весомую часть от решения занимает интерпретация легенды/сведение к фактам и т.п.

atcoder.jp - альтернатива кфу, но здесь задачи более математические, с формальными легендами. В целом прорешка эткодера даже сильнее даст буст, чем на кфе, но задачи там муторнее и сложнее зачастую. Также есть отдельная секция раундов с NP-задачами на оптимизации, отличная возможность попрактиковаться ко всяким huawei challenge.

Как с этим работать? Первым делом нужно понимать, что нужно тщательно отделять практику прорешки задач вслепую и изучения тематических контестов и алгоритмов. Примерные пропорции с которых нужно начать - это 35% прорешки на сайтах задач со скрытыми тегами и раундов, 65% - прорешки тематических контестов. Эта пропорция должна меняться по мере освоения базовых алгоритмов и в конечном итоге вы должны прийти к 90% - скрытые, 10% - тем. контесты (эти 10% необязательно новые алгоритмы будут занимать, тут можно скорее нарешивать те темы, в которых чувствуете трудности).

Для освоения основных тем мы подготовили подробную роадмапу по базовым темам и продвинутым. Изучать алгоритмы, советуем исключительно на c++, для спортивного программирование порог входа по знаниям плюсов очень низкий, поэтому хватит простенького курса на степике, сверх этого курса потребуется знать лишь stl-контейнеры и хеш-таблицы, для продвинутых пользователей можно также изучить pbds. Начать советую освоение с логарифмических поисков, сортировок и линейных алгоритмов эти темы используются в огромном кластере задач и часто используются в конструктивных идеях. Затем изучите динамическое программирование и теорию чисел (более подробные разделы тем указаны в роадмапе), тч поможет вам реализовывать модульную арифметику для вычисления комбинаторных формул и дп. Далее большой раздел теории графов последует, в нём отдельно изучите задачи на деревья и DAG. После освоения базовых тем можно перейти к структурам данных (ДО, фенвик, дд и т п). Самое последнее, как мне кажется на что следует обратить внимание это строковые алгоритмы (хеш-функцию вы можете пройти вначале своего пути, а задач которые нельзя решить хешами и можно только строковым алгоритмом достаточно мало).

@postypashki_old
Forwarded from Борис опять
Сделал из Runpod запускатор джоб.

Кто не знает, runpod.io это лучший на данный момент способ получить VM с GPU и оплатой по часам. Там низкие цены отличный сервис. Например, A40 за $0.4 в час это очень приятно. До этого я тренировал всё по пет-проекту на Google Collab, т.к. у меня были там кредиты, но теперь окончательно пересел.

Есть только одна проблема: runpod поды заточены под инференс. Например, есть такой чудесный дефолт: если ты создаешь pod и запускаешь на нём команду, то она исполнится, а потом pod перезапуститься и команда выполнится снова. Логичный паттерн если ты делаешь инференс, но я так получил pod который на протяжении двух часов бесконечно запускал мои бенчмарки и жрал деньги.

Я сделал скрипт который позволяет использовать runpod как исполнитель джоб. Примерно к такому сетапу я привык в eBay и до этого когда работал с ClearML.

Ты делаешь со своего ноутбука, например:


python runpod_submit.py --name any2json-train-a40 --script scripts/pod_train.sh --template-id gmu9nenh8c --max-runtime 24h --auto-terminate


Скрипт поднимет тебе под с заданным темплейтом, что позволяет задать все железные ресурсы на сайте runpod, или можно прямо в команде передать параметры. Далее запустит нужный скрипт с переменными из твоего локального энва (ЭТО НЕ СЕКЬЮРНО НЕ ИСПОЛЬЗУЙТЕ НА РАБОТЕ НЕ ПОДУМАВ), по результатам убъет pod.

Может быть кому-то пригодится:

https://gist.github.com/btseytlin/0dbd29ce0ea76237585b16c17b9af0f6

Учтите, что там всё на жутких костылях
Forwarded from Женя Янченко
Как обещала, сделала конспект доклада "Шардирование данных на PostgreSQL в критичных системах" от Алексея Светличного из Т-Банка.

Шардирование — это способ масштабирования баз данных, при котором большие объемы информации разбиваются на части (шарды) по какому-тот признаку и распределяются по нескольким серверам.

Зачем нужно шардирование:

🔵Масштабируемость: позволяет обрабатывать больше данных и запросов, добавляя новые серверы вместо увеличения мощности одного сервера.

🟢Производительность: запросы распределяются по нескольким узлам, уменьшая нагрузку на один сервер и ускоряя работу

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

🟣Эффективное использование ресурсов: вместо дорогих монолитных серверов можно использовать много более простых и дешевых узлов.

🔵Гибкость архитектуры: дает возможность оптимизировать разные шарды по-своему: хранить "тяжелые" данные отдельно, географически распределять шарды ближе к пользователям.

Алексей рассказал про два подхода:

Шардирование из коробки (управление на уровне БД)

Приложение не знает, как разложены данные в БД, БД сама управляет шардированием.
Простота в разработку
Сложная эксплуатация на слое инфраструктуры

Примеры: MongoDb, Couchbase, PostgreSQL + Citus

Шардирование на уровне приложения


Приложение знает, что и как разложено в БД.
Каждая БД может быть простой и компактной
Могут быть разные БД
Проще эксплуатация и поддержка на слое инфраструктуры
Сложнее логика приложения

Так можно сделать с любыми БД, так как управление на уровне приложения.

Какие вопросы нужно решить при выборе пути шардирования на уровне приложения:

Число шардов: фиксированное или изменяемое.
Ключ шардирования: на чем основывается логика распределения данных по узлам. Универсальный идентификатор (UUIDv4 и др.) или другой признак (временной, географический).
Компонент маршрутизации, т.е. логика вычисления узла, где располагаются данные. Может быть библиотекой или отдельным компонентом инфраструктуры.
Миграция на целевое решение: в большинстве случаев проектируется не новое решение, а замена старому, поэтому необходимо учесть миграции из источника.

Алексей рассказал, как в Т-Банке внедрили шардирование в платформе пополнений, платформе карточных авторизаций и платежном шлюзе. Расскажу подробнее про первую.

В Платформу пополнений поступают обращения от различных источников, например пополнение счета по номеру карты из терминала в магазине.
Исходно был монолит с БД Oracle на терабайты данных с ростом каждый месяц. Стояла задача отказаться от монолита, повысить расширяемость.

🤔 При переходе к шардированию возник вопрос, что выбрать ключом шардирования.
Идентификатор клиента? Внешний идентификатор операции? Суррогатный ключ?
В случае шардирования по клиенту при отказе шарда не сможем обслужить часть клиентов. В случае выбора ключом внешнего идентификатора операций при отказе одного из шардов будет недоступна часть операций у части клиентов. В случае суррогатного ключа влияние отказа будет минимально, но для логики поиска шардов потребуется хранить справочник.

Продолжение ⬇️
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Женя Янченко
Продолжение конспекта доклада "Шардирование данных на PostgreSQL в критичных системах" от Алексея Светличного из Т-Банка.

Команда приняла решение выбрать ключом шардирования внешний идентификатор операции. Соответственно:

✔️ Бакет определяется функцией хэширования этого идентификатора операции.
✔️ Каждый физический шард содержит несколько виртуальных бакетов. Шарды независимы.
✔️ За правила шардирования отвечает отдельный роутер со своей БД.
Холодное хранение организовано аналогично на отдельных шардах.

✔️ Отказ одного из шардов не приведет к полной недоступности системы.
✔️ Из-за подхода к расположению данных нарушится работа части операций (чьи идентификаторы попадают на отказавший шард). При этом повторение операции может пройти успешно.
✔️ Чем больше шардов, тем меньше влияние от одного отказавшего шарда.

Мне доклад очень понравился!
Тут и теория и практика, особенно понравилось, что для всех примеров отмечено, что будет в случае отказа шарда. То есть та часть, о которой обязательно нужно подумать. Ибо отказы неминумы, и нужно подумать, как минимизировать потери денег/репутации
😼

В завершении, что Алексей рекомендовал учитывать при выборе решения:

➡️ Цели команды и компании
➡️ Сценарии системы
➡️ Имеющаяся техническая экспертиза
➡️ Ландшафт (например, будет ли это облако внешнего провайдера или свой локальный контур)

Вот это мне отозвалось в самое ❤️
И это то, чем отличаются архитектурные собесы от проектирования архитектуры в реальности!

На арх (сисдиз) собесе мы можем позволить себе выбор любых технологий, а в реальности я бы 100 раз подумала прежде чем тащить в проект с нуля в качестве основного хранилища базу, с которой ни у кого из команды нет опыта, а сроки как обычно "к концу квартала в проде".

ИБ тоже вносит свои коррективы в полет творческой мысли 😅 Да и облачные решения не без проблем, по опыту могу сказать.
Поэтому понравилось, что доклад был про реальный мир.

Приходилось ли вам сталкиваться с организацией шардирования? Как принимали решения?

___________________

Повторюсь, что ребята из Т-Банка организовали супер-крутое мероприятие по уровню организации, движух и докладов 🔥 Спасибо им большое!

В сентябре анонсированы митапы других компаний, но если честно я уже чувствую какой-то переход в зимний режим, хочется сидеть дома и радоваться удалёнке 🙂

А как часто вы ходите на разные митапы, видите ли для себя в этом какой-то смысл/ценность?
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
OneRec разбор (часть 3): алайнмент

Прямо как по заказу к моменту, когда руки дошли написать пост про алайнмент в OneRec, вышла ещё одна статья от тех же авторов: OneLoc. В ней описывается в целом всё тот же OneRec (хотя в деталях различий немало), но применённый к поверхности Local Life Service. В OneRec Technical Report упоминалась выкатка на эту поверхность с точно такими же результатами AB-теста, так что это на самом деле один и тот же релиз. Разберём сегодня на примере всех 3 работ (OneLoc, OneRec и OneRec Technical Report) моё видение алайнмента генеративных рекомендательных моделей.

Я выделю следующие возможные подходы:
- Next token / item prediction (то есть отсутствие алайнмента)
- Supervised Fine-Tuning (SFT)
- Conditioning (например Prompt-based или P-tuning)
- Псевдо RL (например DPO)
- RL (например PPO и GRPO)

NTP
LLM обучается предсказывать следующий токен в последовательностях текстов (NTP), в результате чего выучивают "модель мира" (а точнее модель того, как люди пишут тексты). Мы в рекомендациях адаптируем эту идею, реализуя next item prediction. При этом практически все рекомендательные модели либо получают на вход только позитивные взаимодейтсвия (как SASRec или TIGER), либо на вход получают всё, а предсказывают только позитивы (как PinnerFormer или Actions...). Такие модели не выучивают логгирующую политику, их модель мира упрощённая. В Technical Report модель предобучают на exposed items, их базовая модель предобучена именно на NTP.

SFT
Часть цепочек можно назвать "хорошими" и научить модель такие цепочки генерировать. В LLM такие цепочки можно составлять с помощью разметчиков. В рекомендациях обычно используют логи прошлой системы и фидбэк пользователей. Pretrain первой версии OneRec это именно SFT - NTP loss там повесили только на high-quality sessions. Также в обеих версиях статьи используют SFT как дополнительный лосс на этапе алайнмента.

Conditioning
Похож на SFT, но здесь мы не доучиваем модель только на "хорошие" цепочки, вместо этого мы на них "обуславливаемся". В теории это очень мощный инструмент, который даёт возможность генерировать хоршие выдачи разного вида. Например можно поставить счётчик числа лайков перед сессией и уже в райнтайме генерировать "сессию, в которой будет 3 лайка". Такой подход используется в недавно вышедшем PinRec. Нам идея кажется перспективной и мы пробуем разные вариации.

Псевдо RL и RL
Эта группа методов позволяет напрямую оптимизировать выдачи, которые понравятся пользователям, а не иммитировать подмножество хороших выдач прошлой системы. Большая проблема рекомендаций - вы не можете показать 2 разные выдачи одному и тому же пользователю в один момент времени и узнать его реакцию на обе. Это приводит к необходимости обучения reward model. По аналогии с LLM такая модель оценивает, насколько хорошо ответ подойдёт на запрос. Имея reward model, можно сэмплировать различные выдачи для пользователя и либо составлять из них пары для DPO, либо оценивать value для RL алгоритмов.

Логичный вопрос: раз уж у нас есть reward model, зачем нам DPO? Я вижу 2 главных причины: он стабильнее и менее требовательный к "онлайновости" обучения. Основные RL алгоритмы, применяющиеся в генеративных моделях, учатся on-policy (то есть на своём собственном фидбэке). При обучении на логах другой системы приходтся вносить корректировки, которые всё равно работают плохо. В идеале модель должна обновлять веса сразу после получения фидбэка. На практике это недостижимо, поэтому чем "онлайновее" обучение, тем лучше.

Похоже, что 3 внедрения появлялись именно в таком порядке по мере усложнения инфраструктуры:
- OneLoc использует обычный DPO, обучаясь offline.
- OneRec использует Iterative DPO - модель чаще обновляет веса во время дообучения.
- OneRec Technical Report использует свою модификацию GRPO, обучаясь с минутными задержками.
Про нестабильности в обучении
(мемчик из внутреннего чата от Влада Тыцкого)

Недавно мы взялись написть архетип - библиотечный класс нашей генеративной модели. После лёгкого рефакторинга обучение начало "взрываться" (кто бы мог подумать).

Что мы обычно используем для стабилизации:
- Gradient clipping
- Лоссы и нелинейности - в fp32
- Learning rate warmup и аккуратный подбор пикового значения
- Pre-norm
- QK-нормализацию

До сих пор не используем, но в LLM применяют:
- AdamW
- Очистку датасета от "плохих" батчей
- Отключение bias
- RMSNorm вместо LayerNorm

Конкретно в этом случае не спасало вообще ничего. Локализовать проблему помогло только отслеживание std (!) активаций на разных слоях.

Дебаг занял недели, а фикс ровно 1 строку кода.
Как_создать_LLM_продукт.pdf
255.3 KB
Как строить LLM продукты

Аня Подображных написала классную и лаконичную инструкцию для продактов о том как строить LLM-продукты. Выгрузил вам её в pdf.

Ключевое отличие от обычных продуктов – работа с метриками качества. Кратко, путь таков:

1. Строим метрику качества – бенчмарк из вопросов и способ проверить правильность ответа
2. Определяем baseline – сколько по этой метрике выбивают альтернативы, включая людей
3. Только теперь строим продукт и считаем сколько выбили по метрике качества
4. Улучшаем пока не побьем baseline
5. Определяем ограничивающие метрики и добиваемся результата по ним

Теперь ваш продукт действительно нормально решает задачу. Можно запускать.

Следование этим принципам отличает любителей поделать красивые демки от реальных ребят из мира LLM-инженерии. Можно спрашивать на собеседованиях, например.
Forwarded from Data Blog
Немного мыслей про обучение и изучаемые методы

В октябре буду снова читать пару занятий по XAI на ФКН, и мне очень нравится строить занятия так — одно я посвящаю стареньким подходам, а одно — более новеньким.

Обычно, в рамках старенького я рассказываю про интерпретируемые модели, а в этом году на меняла "упала" идея рассказать в рамках дополнительных глав про GLM, GAM и MoE (потому что поток студентов тот же).

Generalized Linear Models, Generalized Additive Models и Mixture of Experts — методы ровно из 19XXх, когда активно задавались вопросами интерпретируемого решения нелинейных задач.

GLM (Generalized Linear Models) — расширение линейной регрессии, позволяющее целевой переменной быть распределенной как угодно.

GAM (Generalized Additive Models) шаг дальше — берут идеи GAM и вместо линейных зависимостей допускают аддитивные нелинейные функции признаков.

MoEидея ансамбля, где данные сегментируются по кластерам и каждый модель (эксперт) учится на «своём» регионе пространства признаков. Итоговый прогноз — взвешенная функция от каждого локального прогноза.

Сейчас эти методы не слишком популярны — у нас достаточный практический аппарат и ширина методов, чтобы, изучая ML, опустить эти детали.

Но на мой взгляд, такие «древние» методы очень полезно включать в обучение — они очень сильно расширяют концептуальный взгляд на моделирование. Зная их, на мой взгляд, можно:

а) Иметь в арсенале зоопарк всё ещё достаточно контроллируемых решений, а иногда и более быстрых — и это плюс для индустрии;

б) Иметь более расширенный кругозор для сборки новых методов — и это плюс для теоретиков;

Так, при сборке нового, MoE, например, вернулся в трансформерах (Switch, Mixtral) — и оказался эффективной идеей к обучению моделей с большим количеством параметров без взрывного роста Floating Point Operations Per Second. Проще говоря, больше параметров с культурной стоимостью вычислений. А GAM-модели заложили основу для попытки построить интерпретируемые по дизайну сетки — GamiNet.

И вот очень я радуюсь, когда вижу, что старенькие методы — иногда прямо-таки коробка нового. Таким мне это показалось красивым сегодня, что захотелось поделиться. А ещё теоретические блоки по этим методам в начале октября добавлю в бесплатную часть курса на степик, чтобы можно было удобно изучить.