Хакатоны ML или битва за скор наяву. llm-модели.. llm-модели. Блог компании Финуниверситет.. llm-модели. Блог компании Финуниверситет. ИИ.. llm-модели. Блог компании Финуниверситет. ИИ. ии-ассистент.. llm-модели. Блог компании Финуниверситет. ИИ. ии-ассистент. искусственный интеллект.. llm-модели. Блог компании Финуниверситет. ИИ. ии-ассистент. искусственный интеллект. кейс.. llm-модели. Блог компании Финуниверситет. ИИ. ии-ассистент. искусственный интеллект. кейс. хакатон.. llm-модели. Блог компании Финуниверситет. ИИ. ии-ассистент. искусственный интеллект. кейс. хакатон. Хакатоны.

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

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

На сегодняшний день у нас за плечами уже несколько хакатонов. По итогам 2024 года, а начали мы участвовать с октября месяца, то есть за 3 месяца мы получили 1 серебро (HSE Assistant Hack: Python), 1 бронзу (ФИЦ: Хакатон), два раза заняли 6 место (BIV Hack Challenge), примерно их 30 кооманд и 10 место на международном хакатоне (Цифровой прорыв).

Солидно, достойно, но главное не останавливаться на достигнутом и двигаться активно вперед. На сегодняшний день у нас сформировано 4 команды, которые активно будут бороться за призы в 2025 году. Мы проводим тренировки каждую пятницу, разбираем рабочие кейсы и прошлые хакатоны. У нас постоянно действует DS клуб, где мы публикуем расписание актуальных хакатонов, конференций, митапов, а так же интересные выдержки из статей и моделей машинного обучения. Сейчас мы активно включились в работу, уже две команды вышли на новые задачи и активно готовятся к ним, две ожидают новых задач. Тренирует клуб Миронов Владимир Олегович (Старший преподаватель, Кафедры искусственного интеллекта, Финансового университета при Правительстве РФ), автор этой статьи.

В данной статье мне бы хотелось сделать обзор на первый хакатон, который мы провели и получили на нем золото по всем лидербордам, 2 место по научной презентации. Кроме того, показать какими методами мы решали задачу и чего добились в результате. По традиции, всех заинтересованных лиц приглашаю под кат ;).

Организация

Участие в хакатонах это всегда отличный задел на то, чтобы посмотреть реальные бизнес-задачи и попробовать себя и свои силы на решении в несколько нестандартном, порой весьма напряженном формате работы. Также это возможность ощутить момент реализации задач под давлением, с ограниченными ресурсами и временем на сборку проекта. Более того, опыт решения таких задач дает актуальные навыки проработки идей, их апробации и уверенность при общении с бизнесом, а также повышает общий навык понимания кода.

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

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

Хакатон, который про который мне бы хотелось рассказать проводился под эгидой НИУ ВШЭ (Факультетом компьютерных наук и центром искуственного интеллекта ВШЭ). В общем зачете за призовые места боролись 89 студенческих команд из 25 ведущих вузов страны. Общая задача состояла в том, чтобы с помощью LLM и и других алгоритмов создать ИИ-асистента, который бы помогал находить ошибки в коде и предложить поэтапное разъяснение с возможностью человеку самому дойти до финального решения, то есть без явного представления готового кода. Упор, в этом случае, был сделан при решении больше на науку, чем на бизнес и это было особое требование организаторов. Оценка и построение лидерборда производилось по правилам подобным на codeforces.com.

Соревнование длилось семь дней, из которых 5 было в онлайн формате на платформе DS Works, которая была любезно предоставлена провайдером облачных технологий Cloud.ru. Открытие и заключительная сессия проходили на Покровском бульваре, в одном из корпусов ВШЭ. В составе жюри были эксперты из Центра искусственного интеллекта ВШЭ, базовой кафедры Сбера «Финансовые технологии и анализ данных», преподаватели факультета компьютерных наук и проекта Data Culture. При этом, оценивалась как научная часть на презентации так и были лидерборды, публичный и приватный.

Разработка

После выдачи задания, мы активно начали прорабатывать все идеи и возможные решения. Роли распределились следующим образом: Артем и Даниил занимались моделью, Денис – агенты, Илья – промпты, Максим – бизнес-идеями. Исходные данные включали в себя:

  • tasks.txt (id – идентификатор, level – сложность (B1, B2, C1, …), description – описание, author_solution – авторское решение);

  • tests.xslx (id – уникальный идентификатор, number – порядковый номер теста в системе, task_id – идентификатор задачи, к которой относится тест, input – ввод для программы, output – правильный вывод от программы);

  • solution (id – уникальный идентификатор, task_id – идентификатор задачи, к которой относится решение, student_solution – решение студента (с ошибкой), author_comment – комментарий от автора, в чем ошибка студента (эталонный ответ от нашего алгоритма), author_comment_embedding – векторное представление комментария, полученное с помощью модели RoBERTa).

Перво на перво, начали поднимать «вверх дном» весь GitHub и HugginFace. При этом, находили решения различного рода, выполняющие различные функции, но все же не дотягивающие до требуемого уровня. Например, были вот такие вещи:

  • TrustLLM (инструмент на Python для комплексного исследования ответов от LLM);

  • Ax (построение LLM-агентов на базе исследования Стэнфорда — DSP (demonstrate, search, predict))

  • LLama 3.2

  • Molmo (7В MoE (1B активных), 7В (таких две) и 72В);

  • Claude Sonnet 3.5;

  • Gemini 1.5 Pro;

  • Qwen2-72B

Исходя из всестороннего обзора (тут и тут) и бенчмарков (тут и тут), мы выбрали для себя несколько «рабочих лошадок», с которыми начали плотно работать. Наиболее интересными, в этой связи, нам показались модели: Qwen2.5-72B, gemma-2-27b, deepseek-coder-v2-16b, qwen2.5-32b, yi-coder-9b, qwen2.5-coder-7b, codestral-22b, llama3.1-8b, Molmo-7B-D-0924. Провели множество локальных тестов и даже составили свой личный лидерборд по полученным результатам на то как следуют модели промпту и как понимают русский язык. Тестирование моделей проводилось на RTX 4090 24gb. По контесту мы оценивали по стандартной длинне последовательности 128к токенов. При обучении мы использовали unslothai. Общий пайплан собирался на langchain. Дополнительно, мы собрали синтетический датасет при помощи GPT-4o-mini для тестирования. Общий набор технологий включал в себя CUDA, Anaconda, VSCode.

Пример кода и желаемый ответ на него, в виде серии наводящих вопросов

Пример кода и желаемый ответ на него, в виде серии наводящих вопросов

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

В ходе анализа задачи мы анализировали различные идеи, чтобы как-то «зацепить» организаторов, например, мы рассматривали случай когда идет оценка различного кода по уровню: джун, мидл и сеньор. Конечно, такая градация может быть несколько условной, ввиду того что в разных компаниях разный уровень понимания грейда, но все же имеет места быть. Также же была идея сразу генерить ссылки на либы и фреймфорки, чтобы быстро все объяснять, при этом требовалось чтобы ответ был максимально близок к преподавательскому. Кроме всего, подумывали над тем, как бы представить код, который по качеству получается лучше преподавательского, тем самым решая двойную задачу: обучение студентов и поднятие общего проффессионального навыка преподавательского состава университета. Но все же мы придерживались общей канвы, что надо наводить студента на ответ верный, а не давать готовый.

Еще был вариант проанализировать датасет, который нам дадут на хаке, и достать оттуда самые встречаемые ошибки, чтобы на их основе сделать базу RAG, по типу списка FAQ вопросов, при этом инфа из RAG будет идти в промпт и, тем самым, попытаться снизить галлюцинации. По поводу галлюцинаций руководствовались этим.

Дополнительно мы искали множество статей чтобы понять как более корректно и выигрышно участвовать на соревнованиях и разворачивать пайплайн, и нашли не мало хороших материлов: раз, два, три, четыре, пять и шесть. Еще продумывали варианты защиты нашей модели. Тут можно было брать уже известные вещи, такие как Prompt-Guard-86M,

В итоге мы достигли косинуского расстояния в 0,002 на сгенерированном датасете, что оказалось весьма качественным решением. В итоге нам удалось добиться метрики в 0.001897 на 1 эпохе на 9000 примеров. Промежуточные гиперпаметры выглядели, как на картинке ниже, более того мы использовали 16-битную точность для оценки.

Базовый набор гиперпараметров модели для обучения, первый вариант, прикидочный

Базовый набор гиперпараметров модели для обучения, первый вариант, прикидочный
Базовые параметры по модели LoRA, для тестирования

Базовые параметры по модели LoRA, для тестирования
Набор параметров для SFTTrainer и оптимизации модели обучения

Набор параметров для SFTTrainer и оптимизации модели обучения

Дополнительно, рассматривали варианты Sharded DDP: распределенные вычисления с шардингом градиентов позволяют снизить потребление памяти и улучшить масштабируемость при обучении на нескольких устройствах; и ZeRO Optimization: ZeRO (Zero Redundancy Optimizer) помогает разбить градиенты на несколько узлов и тем самым значительно снизить требования к памяти. Кроме всего, прочего перебирали множество самых тонких гиперпараметров для получения наилучшего результата: bias, use_gradient_checkpointing, num_layers_to_update, update_ratio, freeze_last_n_layers, unfreeze_layers_after, peft_config_file, peft_config_dict, peft_config_name.

Как результат получили косинусное расстояние 0.000870 при loss 0.5113 и итоговая модель оказалась самой лучшей finetune-gemma-2-9b-it. Наша модель весила всего +- 7 Гб и охватывала 9 млрд параметров. Защита модели осуществлялась по метрикам, представленным организаторами, кроме всего прочего было показана оценка за питчинг проекта.

По части защиты модели от взлома, руководствовались следующими моделями и решениями: In-The-Wild Jailbreak Prompts on LLMs, Last Layer, llm-defense, jailbreak-tools, Jailbreaking Leading Safety-Aligned LLMs with Simple Adaptive Attacks, Benchmarking of Jailbreak Attacks on LLMs, Catastrophic Jailbreak of Open-source LLMs via Exploiting Generation, LLM-Jailbreaks, In-The-Wild Jailbreak Prompts on LLMs.

(Pitch) Метрика, по которой организаторы оценивали питчинг

(Pitch) Метрика, по которой организаторы оценивали питчинг
(Финальная оценка) Метрика, по которой организаторы оценивали весь проект в целом

(Финальная оценка) Метрика, по которой организаторы оценивали весь проект в целом

На выходе у нас была презентация, модель в UI (open-webui). Код был запушен на гит, причем, гит оформили красиво по всем стандартам и старались соответствовать бизнес-модели, неплохая статья по этому поводу написана вот тут, тут, тут, тут и уже простите тут ;)).

Итоги

По итогу к защите было допущено 16 комманд, которые вошли в топ рейтинга по результатам колличественной метрики, полученной их решением. Победу одержала команда «МИСИС Computer» из Университета науки и технологий МИСИС. Второе место заняли мы. Бронзу завоевала команда Selling Pandas, состоящая из студентов первого курса программы «Прикладная математика и информатика» ФКН ВШЭ. Призеры получили денежные призы в размере 250 000, 200 000 и 150 000 рублей соответственно. Итоговый скор оказался таким, напоминаю, мы заняли 1 место как на привате так и на паблике, именно по скору.

Итоговый лидерборд

Итоговый лидерборд
Победители конкурса, команда MMG

Победители конкурса, команда MMG

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

Автор: seiros

Источник

Rambler's Top100