Интересное что-то
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 айти канал
pylock.toml — новый стандарт локфайлов в Python

Вчера был одобрен эпический PEP 751, который вводит стандартный формат локфайлов в Python. Несколько лет дизайна, итераций и обсуждений, почти тысяча лайков на Reddit у этой новости, в общем большое событие.

Если вы знаете, что такое локфайлы, то новость на этом заканчивается. Называться будет pylock.toml, теперь ждем пока все инструменты постепенно на него переедут.

Если не знаете, то lockfile -- это просто текстовый файл определенного формата с полным описанием вашего Python окружения. Грубо говоря, у Python проектов будет ожидаться pylock.toml вместо requirement.txt. Детали:
- В `pylock.toml` будут записаны все установленные пакеты, включая непрямые зависимости, с их точными версиями, для всех ОС сразу, со всеми вариациями дополнительных зависимостей и прочей технической информацией.
- Это очень полезно, потому что теперь у пользователей и участников проекта будет устанавливаться в точности одинаковое Python окружение (и с гораздо большей вероятностью успеха). В общем pylock.toml сильно упрощает жизнь другим пользователям проекта, включая будущих вас :)
- Чтобы у вас в проекте появился pylock.toml, нужно будет пользоваться инструментами типа uv, а список прямых зависимостей писать в pyproject.toml вместо requirements.txt. На самом деле это рекомендуется делать уже сегодня. Просто пока uv порождает "нестандартный" uv.lock вместо "стандартного" pylock.toml, но это разработчики uv сами уже изменят в будущем.
Уничтожительный RoadMap по прохождению MLSD, или как пройти секцию ML System Design

Секция по ML System Design - это очень важная секция, она показывает вашу сеньорность. И чтобы получить большой и жирный оффер, то надо её пройти так, чтобы вас сразу звали на позицию Chief Data Scientist

И вот что нужно знать:
1️⃣ Подготовка
🟣 Сначала нужно почитать про верха, поэтому я бы начал с моего пайпика уничтожения MLSD, чтобы вспомнить основы.
- Если вы с нуля, то нужно углубиться в MLSD, для этого советую прочитать первую главу книги "System Design. Машинное обучение. Подготовка к сложному интервью" - в ней рассказывают более подробно про каждый этап MLSD.
🟡 Чтобы понимать как проводиться само собеседование, то посмотрите собеседования с Валерой Бабушкиным. Все собеседования есть в конце данного поста 🗣
🟢 И вишенка на торте - советую почитать уже готовые дизайны систем по тем областям, в которых работает ваша компания, такие можно глянуть на этом сайте. Например: если идёте в Сбер, то не нужно идти в Сбер, ну или если идёте в Авито в отдел скоринга, то скорее всего вас спросят что-то про скоринг, почитайте про это.

2️⃣ Визуализируйте ваше решение
🟣 Ваша цель - как можно понятнее объяснить собеседующему ваше решение. А для этого прям супер подходит интерактивная доска (miro, excalidraw), на который вы графически (как в картинках этого поста) излагаете свои мысли: разбиваете объяснение на блоки, расписываете метрики, данные, baseline и тд - такой способ для собеседующего будет намного понятнее, чем просто голосом проговаривать ваше решение. К тому же вы сами будете более эффективны в решении задачи, смотря на доску 🤨

3️⃣ Важные вещи, которые стоит помнить
🟡 На старте поймите, что вам нужно и идите строго по назначенной цели! Ну очень часто так бывает, что кандидат куда-то влево уходит, а собеседующему это не надо. И после этого HR вам пишет: “К сожалению, мы выбрали другого кандидата, сорян, надо было слушать в начале цель задачи.” - ну это норм ответ, ты же не решил задачу 😵
🔵 В идеале вы должны говорить 90% всего времени. В основном собеседующий ожидает от вас полного решения от А до Я без его подсказок, но это в мире единорогов и конфет, а на самом деле получается так, что вы говорите 70/30 - старайтесь по большей части говорить вы. Если что-то не знаете, но уточнить нужно, то говорите: “Предположу, что у нас такие-то данные, подскажите, на сколько у меня релевантная гипотеза для вашего магазина для взрослых?”
🟢 Не бойтесь спрашивать, но в меру, пока не поняли до конца. Я тут не говорю просить подсказок, но норм спросить про условия, которых ты не понял или не знаешь (но с фразой “предположу…”). Нет ничего плохого, если ты спросишь, это наоборот приблизить тебя к решению 😓
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Quant Valerian
Event driven management

Как ни странно, это продолжение темы "как всё успевать". Я этого не планировал, но по сути вкусно так получается.

Я уже писал, что не люблю всякие синхронные коммуникации, встречи, звонки (ха-ха) и т.д. Не прям все, а скорее регулярные, потому что их почти (sic!) всегда эффективнее делать письменно и асинхронно.

Но на самом деле асинхронно можно делать практически всё. Вы это уже видели, если работали с Kanban. Есть какая-то широкая доска в таск-трекере, там какие-то задачки на доске висят, вы и ваши коллеги хватаете эти задачки и двигаете по доске. Задачки появляются в левом столбике (разными способами), оттуда их разбирают сотрудники и тащат направо. В какой-то момент задачки переезжают настолько вправо, что оказываются в левом столбике уже кого-то другого. Например, продакт положил задачку в беклог, аналитик взял её, че-то там проанализировал и положил в готов к разработке, разработчик взял её, че-то там попрограммировал и положил в готово к тестированию, тестировщик взял её... ну ты понел

Зачем тут, спрашивается руководитель? Развивать сотрудников и решать конфликты? Ну так это коуч какой-то. Оценивать перфоманс и назначать зарплаты? Можно заменить кем-то из HR. Следить за тем, что процессы соблюдаются? Надзиратель.

Мы знаем, что руководитель здесь нужен для этого всего тоже, но в основном для того, чтобы работа в итоге была сделана. Это вообще как бы основная функция начальства — доводить до результата.

Можно поконкретнее?
В хорошо отлаженной системе основная задача руководителя — не мешать людям работать. Но есть один нюанс: сотрудникам может мешать что-то, кроме руководителя! И вот именно эти вещи и должны привлекать внимание начальства. То есть вам, как управленцу, нужно устранять препятствия на пути к цели и не создавать новых.

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

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

На деле люди не очень любят "жаловаться", потому что по умолчанию считают, что кому-то от этого плохо станет (и пусть лучше так считают, чем на каждый чих к вам ходить будут, конечно). Поэтому очень круто построить сигнальную систему.
Forwarded from Quant Valerian
Расскажу, что есть у меня, а что я бы хотел, чтобы было ещё.

1. Я стараюсь коммуницировать, что при затыках, проволочках и потере темпа _нужно_ идти и эскалировать в меня. Это вообще первый и главный сигнал к включению
2. Колонка "запланировано" всегда должна содержать не менее X задач (X, очевидно, разнится). Здесь мы хотим не менее пяти задач, а если их становится меньше трёх, то это повод прямо сейчас разобраться, что ещё нужно докинуть. Иначе следующий освободившийся сотрудник не будет знать, за что взяться и случится бесполезный простой в лучшем случае. В худшем сотрудник будет делать задачу, которая важна _по_его_мнению_. С другой стороны, если в колонке слишком много задач, то это тоже какой-то нездоровый признак — явно что-то сломалось с приоритетами и планированием (если ты планируешься в среднем раз в неделю на команду из пяти человек, а задач в запланированном больше 20-ти штук, то скорее всего вы их не сделаете)
3. Колонка "готово к работе" тоже должна всегда содержать некоторый буфер задач. Если задач в ней становится меньше Y, нужно озаботиться тем, чтобы кто-то уже взялся за запланированное и начал готовить задачу к взятию в работу (у нас это значит выполнить DoR: по чек-листу проверить, что в задаче есть вся нужная инфа, DoD, проведена декомпозиция, учтены и обработаны все внешние зависимости и т.д.). В противном случае мы рискуем оказаться в ситуации, когда код никто не пишет, а все заняты высокими материями типа общения со смежниками или декомпозиции задач. Я уже молчу о том, что не каждый сотрудник одинаково хорошо может с такими задачами справляться, тут нужно всё-таки давать что-то посильное (пусть и с челленджем).
4. Диаграммы DORA. Беглого взгляда на них обычно достаточно, чтобы увидеть какие-то аномалии: слишком быстро или слишком медленно стали делать задачи (на новогодние отлично видно, как релизы откладываются, например). Здесь у нас в трекере есть вьюшка, отображающая цикл тайм по статусам. По ней можно попробовать понять, в какой именно части процесса произошла проблема (релизы, ревью ПРов, декомпозиция или сама разработка и т.п.) — тут либо будет ожидаемо, либо надо копать дальше, но уже ясно направление.
5. Диаграмма потока задач. Здесь просто следим за тем, что решается задач не меньше, чем заводится новых — рост бэклога это не хорошо, это "запасы".
6. Длина очереди обращений в поддержку. Ну тут всё ясно, кажется. Если очередь выросла, надо бы разобраться, что к этому привело и разгрести хвост.
7. Доска с задачами в разбивке по людям. Здесь следим за тем, что у каждого есть задача и в работе только одна в один момент времени.

Этого всего лишь три вкладки в браузере, которые нужно проверять раз в день, некоторые, раз в неделю. И если там всё нормально, то можно заниматься планами развития, глубинными 1-1, написанием постов в каналы в телеге...

Для операционного менеджмента ещё не хватает одной диаграммы:

8. Диаграмма старения задач. Я как-то уже рассказывал о ней в комментариях в канале. Мы следим за тем, что задачка находится в каждом из статусов не дольше, чем это делали 80% задач в прошлом месяце, например. Например, видим, что задача уже три дня в разработке, а 80%% был два дня. На диаграмме старения такая задача будет светиться. Может, её просто забыли передвинуть в правильный статус. А может там есть какая-то проблема, с которой нужна помощь руководителя. Может даже просто задача такая большая или сложная получилась — это всё равно повод следить за ней ежедневно и внимательно (чтобы, например, вовремя бросить её на пол).

Такой диаграммы у меня нет, поэтому мы костылим через дедлайны и гантты пока что. Но в трекере обещали сделать.

Че в итоге-то?
В итоге у нас есть несколько источников триггерных событий для руководителя. Если события из них не летят, можно отдыхать заниматься чем-то, кроме экзекьюшена. В противном случае — изучить сигнал и починить причину проблемы, если она есть. Но ни в коем случае не бегать кругами по сотрудникам с кнутом, пряником и криками.
Forwarded from Aspiring Data Science (Anatoly Alekseev)
#hpo #hpt #optuna

Приятное интро в Оптуну, с примерами, в т.ч. пруннинга. Вообще у него классный ютуб-канал по ML/DS, такие темы отличные поднимает, и очень продуктивный лектор.

https://www.youtube.com/live/QejQVLkkgRA?si=eiBKOrAQ6bbt4y24
Forwarded from Aspiring Data Science (Anatoly Alekseev)
#nlp #pca #dimreducers

Интересный рецепт: блок, дающий разреженные (sparse) признаки, после него PCA, дающий на выходе уже разумное количество плотных (dense) признаков.

https://www.youtube.com/watch?v=x7RX8VprCnE
Forwarded from Yandex for ML
This media is not supported in your browser
VIEW IN TELEGRAM
🤖 Делаем чат-бота на ИИ

Yandex Cloud показал новую среду для внедрения ИИ-инструментов в продукты — AI Studio. Например, в ней можно создать умный поиск по базам данных и встроить его по API в оболочку чат-бота в мессенджере. И это только один пример продуктового применения LLM — всё остальное ограничено только вашим воображением.

🔳 На видео продуктовый архитектор наших ML-сервисов Дмитрий Рыбалко показал, как всё работает. Код для этого телеграм-бота вы можете найти на GitHub.

Подписывайтесь:
💬 @Yandex4ML
📹 @YandexML
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Душный NLP
InfAlign: алайнмент языковых моделей с учётом процедуры инференса

Метод RLHF (Reinforcement Learning from Human Feedback) доказал эффективность в задаче алайнмента языковых моделей. Однако у него есть существенный недостаток: на практике возникает расхождение между процессом обучения и реальным использованием модели.

Например, после RLHF модель обычно старается избегать неверных ответов. Но при использовании стратегии генерации Best-of-N (выбор лучшего из нескольких сгенерированных ответов) такое жёсткое ограничение становится неоптимальным — модель могла бы давать лучшие ответы, разреши мы ей экспериментировать более агрессивно за счёт небольшой доли неверных ответов.

Для решения этого несоответствия авторы статьи разработали метод InfAlign, адаптирующий процесс обучения к конкретным процедурам генерации, используемым на практике.

Рассмотрим проблему детальнее. Классический подход RLHF с учётом KL-регуляризации гарантирует оптимальность модели по средней награде, если ответы генерируются сэмплированием. На практике, однако, нам интересна не столько средняя награда, сколько доля запросов, на которых новая модель лучше старой. И уже для такой метрики (при фиксированной модели, по отношению к которой мы считаем винрейт) RLHF даёт субоптимальные результаты даже для простого сэмплирования — что уж говорить о более продвинутых методах.

К счастью, авторам статьи удалось доказать, что оптимизация винрейта для некоторых процедур генерации, включая Best-of-N, Worst-of-N и сэмплирование, эквивалентна применению RLHF с модифицированной функцией награды.

Предложенный подход состоит из трёх основных этапов.

1. Калибровка награды. На этом этапе исходные награды преобразуются в значения от 0 до 1 таким образом, чтобы распределение наград ответов модели стало равномерным на каждом запросе. Это эквивалентно применению обусловленной на запрос функции распределения награды к самой награде. Забавно, что в первой версии статьи авторы предложили использовать медианную аппроксимацию функции распределения, однако спустя месяц удалили все упоминания об этом методе и перешли к использованию эмпирической функции распределения.

2. Трансформация награды. На следующем этапе откалиброванная награда адаптируется под конкретную процедуру генерации. Например, для стратегии Best-of-N применяется экспоненциальное преобразование, усиливающее различия между отличными и посредственными ответами, а для сэмплирования — логарифм, штрафующий за плохие ответы. Заметим, что на самом деле логарифм и экспонента — это лишь хорошие приближения оптимального преобразования. Но, как показывают эксперименты, погрешностью можно пренебречь ради простоты реализации.

3. Обучение с модифицированной наградой. Модель обучается при помощи классического RLHF, используя модифицированную награду, адаптированную под конкретную процедуру генерации.

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

Отметим, что сейчас метод InfAlign применим к весьма ограниченному набору реально используемых процедур генерации, таких как Best-of-N, Worst-of-N и сэмплирования.

Разбор подготовил Федор Лебедь

Душный NLP
Please open Telegram to view this post
VIEW IN TELEGRAM