Привет ✌️🏼👨🏼🎓, время близится к лету, а это значит сезон хаков и соревов.
Поэтому сегодня делюсь с вами как ускорить некоторые процессы на хакатоне. Процесс соревнований можно разделить на несколько этапов. Один из важных это синергия и мотивация команды, вы можете быть не самой сильной команде в начале, но выиграть в финале. Даже если вы участвуете один (допустим kaggle), это все равно вам поможет.
1) Ищем команду. По моему опыту не нужно набирать слишком много и слишком мало человек. На одну ds задачу хватает 3 человека. Самое главное ваша мотивация, даже если вы новичек, главное что бы вы во время хака не боялись работать со сложными вещами. Возможно в первый раз у вас ничего не получится, но потом снова и снова вы будете разбираться лучше. Тут главное попасть в свой сегмент, конечно, многие говорят, что если ты слабый, то лувше попасть к сильным, это да, но вы им там не особо нужны. А в команде с такими же как вы, будете развиваться вместе быстрее.
2) Настраиваем процессы. Посли того как вы собирали команду, вам нужно выстроить процессы в ней. То есть, знать кто чем занимается, быть готовым помочь в любой момент.
Чуть позже вернемся к этому вопоосу и посмотрим какие процессы нужны и как их ускорить. А пока займемся немного теоретической частью, это преподготовка к хаку.
3) Подготавливаем инструменты.
Одно из самых важных это трекинг задач. Многие пользуются agile и тд. Но мне нравится самый обычный блокнот из notion, который делишь на несколько частей.
Но недавно начал пользоваться workzen. Удобная штучка. Но все же. Обычно я создаю notion документ, в котором прописываю всю инфу о хаке, какие похожие хаки были, какие были там решения. Возможные данные которые пригодится. Какие то фичи и обработки данных которве могут пригодится. Как правило это все обсуждают в телеге конкретного хака. Раньше я добавлял туда метрики, валидации и тп, но сейчас это все автоматизировал.
4) Готовим окружение. Нам важно, что бы у всех сокомандников работала все идентично нам. Поэтому мы создаем докер, в котором создаем окружение ( я пользуюсь pip, сейчас хочу перейти на poetry, но можно и conda использовать если вы любитель винды и багов) теперь скачайте паттерн проекта с cookiecutter и считайте ваше начальное окружение готово. Осталось залить на гит. ( 1 эксперемент = 1 ветка )
5) Хакатон начался, тут мы должны автоматизировать процессы. Я любитель написать всю автоматизацию вручную, но тут делится все на 2 типа.
А) У вас есть изменяемость данных. То есть ваши данные в процессе построения пайплайнов как то меняются. Для этого стоит использовать DVC. Крутой инструмент, который будет смотреть изменились ли ваши данные и перерасчитать пайплайн при изменение. То есть вы можете починить какой то баг и у ваших тиммейтов перерасчитаются метрики.
Б) Если данные не меняются. Допустим задачи RF. Или вообще не DS. То тут я использую CLI (click)
Мы хотим трекать наши метрики или какие то данные и смотреть вообще как наши данные изменяются. Следовательно мы устанавливаем WB, WANDB или weighs and biases. Хорошо зарекомендовавшая себя либа. Соответственно, там же мы можем и смотреть репорты, и хранить артефакты. Всем советую.
Теперь когда у нас есть такие инструменты и автоматизация. Нам остается только работать с данными. Проводить различные тесты и эксперементы. И да кстати, не забудьте в ваш код добавить автотесты и мотивировать сокомандников.
( p.s. При использовании pip и cli могут возникнуть проблемы, что окружение не видит иерархие или видит ее неправильно, поэтому если столкнулись с такой проблемой либо создайте
init.py, либо еще проще скачайте poetry у него намного больше возможностей в рамках mlops)
Запомните господа, эксперементы - jupyter.
Автоматизация - скрипты.
Поэтому не создавайте пайплайны в юпитерах я вас прошу, надеюсь теперь вы преисполнитесь в своем сознании и будете лутать хаки. Ведь время на них - самый важный ресурс.