senior_augur | Unsorted

Telegram-канал senior_augur - Старший Авгур

5407

Сохраненки и шитпост про ML от @YallenGusev Чат канала: @augur_chat

Subscribe to a channel

Старший Авгур

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

Читать полностью…

Старший Авгур

Выступал на семинаре ЛЕЯ, снова рассказывал про Сайгу.
Запись: https://www.youtube.com/watch?v=xiPCIWGTX1M
Презентация: http://tinyurl.com/gusevsaiga2

Читать полностью…

Старший Авгур

Я продолбался, и сильно. Оказывается, в дефолтном Mistral Nemo системное сообщение вставляется перед последним сообщением, если это сообщение от юзера. В обучении же последнее сообщение от бота. То есть системные промпты не вставлялись в SFT обучении. То есть все текущие версии SFT — сломаны.

Это настолько для меня неожиданно, что никаких проверок в коде на такое не было, да и глазами не ожидал я такой подставы. Шаблон я смотрел, но сами попробуйте его прочитать.

Ну ладно, это хоть значит, что финальная модель должна стать гораздо лучше.

За скобками остается вопрос: а нафига вообще блин было нарушать стандарт? Во всех моделях, которые я до этого видел, системное сообщение было в начале.

Читать полностью…

Старший Авгур

Когда не умеешь писать стихи, но надо строго следовать промпту...

Читать полностью…

Старший Авгур

Ну что, сработала техника, получается. А нужен был всего лишь простой советский перевод Агаты Кристи.

Сайга пока догоняет, поэтому в качестве основы я взял Вихрь-Немо.

Аналогично оригинальному Ataraxy, дообучил модель через ORPO на датасете, описанном выше, и слил получившийся тюн с оригиналом. Внезапно получил +0.1 на ПингПонге. На арене стало чуть хуже, 77 у новой модели vs 80 у оригинала.

Сама модель: vikhr_nemo_orpo_dostoevsky_12b_slerp
В боте она тоже есть.

Читать полностью…

Старший Авгур

Долго ничего не писал, готовил ПингПонг к подаче на ICLR. Докинул циферок, поправил текст, сделал сравнение с Creative Writing. И наконец отправил, фух.

Ешё оказалось, что там теперь обязательно подаваться как рецензент для того, чтобы статью хотя бы допустили к ревью. Такую практику я в целом одобряю: любишь кататься, люби и саночки возить.

Так что я теперь возможно буду что-то там рецензировать.

Читать полностью…

Старший Авгур

Залил Qwen 2.5 70B и Gemma-2 27B в ArenaHard. Я не сомневался, что они хороши, но каким-то загадочным образом Квен обошёл Соннет. У меня 2 версии:
1) GPT-4 не любит Клоды, а он там судья.
2) Бейзлайн (gpt-3.5) уже слишком плох и мешает различать хорошие модели.

Весь замер с моей стороны обошёлся в 20 центов. Я платил только за инференс самих моделей, суд оплачивает бенчмарк.

Читать полностью…

Старший Авгур

Тут недавно MERA обновилась: /channel/hikonon/59
Я тут полез Сайгу залить. И знаете что? Оно до сих пор не работает. На этот раз про openai api написали в README, но сам скрипт положить... забыли? Вот тикет.

Читать полностью…

Старший Авгур

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

Читать полностью…

Старший Авгур

https://huggingface.co/datasets/nyuuzyou/chatgpt-in-russia-qa

А что у нас тут? 600к вопросов (и ответов) с чатгпт-в-россии.рф!
Я, если честно, и не знал, что такой сайт существует.
Оригинальный пост. Датасет не мой.

Читать полностью…

Старший Авгур

Сразу видно чья моделька! (7B Квен 2.5 с кастомным ChatML промптом, с родным не работает).

У 14B при тех же настройках полёт пока нормальный.

Читать полностью…

Старший Авгур

Недавно ещё заметил, что дело kalomaze живёт. Два новых популярных (в узких кругах) метода сэмплирования:

- DRY. Идейно аналогичен древнему no_repeat_ngram_size, основная их цель — побороть повторы, но штраф динамический в зависимоcти от длины повторяющейся N-граммы. Кроме того, есть поправка на шаблоны промпта, они при подсчёте пропускаются. Можно добавлять свои токены, для которых штраф тоже будет игнорироваться.

В нём 3 основных параметра, которые определяют функцию штрафа: multiplier * base ^ (x - allowed_length), где x — длина повторяющейся N-граммы.

- XTC. Вместо токенов в низкой вероятностью режем токены с высокой вероятностью. Для большей креативности, да 💀

Два параметра: probability определяет, насколько часто этот сэмплер вообще срабатывает, а threshold — выше какой границы убиваем токены. Если выше границы только один токен, то его не трогаем, и в целом всегда оставляем наименее вероятный токен с вероятностью выше threshold. См. картинку в комментариях.

Читать полностью…

Старший Авгур

o1-preview доступна в боте. Выбирать через /setmodel. Целых ДВА запроса бесплатно 😂

Ещё добавил последние Command R, Qwen 72b и Llama-3.1 70B.

ВНИМАНИЕ: Системный промпт с o1-preview НЕ работает. Параметры, типа температуры, НЕ работают.

Читать полностью…

Старший Авгур

Последний пост по поводу Reflection, я больше писать про это не буду, честно-честно. Если кто-то по этому посту захочет сделать ролик на ютубе, я разрешаю.

Для начала обобщим таймлайн:

5 сентября
1) Твит создателя, якобы лучшая открытая модель, метрики от разработчиков, GSM8K 99.2% (при том, что там неправильных примеров может быть больше 1%). Модель сломана, неправильно залиты embed_tokens и lm_head, и из-за этого она не выдаёт спецтокены типа <thinking>. Никаких разумных замеров из-за этого сделать в принципе нельзя. Но зато работает сайт с моделью.

6 сентября
2) Сайт с моделью перестал работать из-за нагрузки. Больше он не поднимется.
3) Meta попросила добавить Llama 3.1 в название по условиям лицензии.
4) Первый "независимый" бенчмарк: модель выше 405B. Неясно, делалось ли это через API, или через всё ещё сломанную модель на HF.
5) Модель чинят перезаливом по одному файлику (!), в процессе перезалива она внезапно становится тюном Llama 3, а не Llama 3.1. Позже это подтвердят. Как так вышло автор не знает. Там же он показывает, что не знает, что такое LoRA. Модель действительно теперь выдаёт спецтокены, но даже на отдельных примерах качество ниже заявленного.

7 сентября
6) День рождения девушки автора, что автор использует в качестве оправдания.
7) Автор заявляет, что починенная модель это на самом деле не та самая модель, и что он это исправит в течение дня.
8) Починенную модель прогнали на другом независимом бенче, получилось хуже оригинальной 70B.

8 сентября
9) Следующая версия модели оказалось всё ещё не той самой, и теперь модель нужно переобучить заново, что странно само по себе.
10) Ребята из пункта 8 замерили метрики через авторское API, получили уровень Соннета. Сейчас их твит удалён.

9 сентября <- мы находимся здесь
11) Вышла новая версия модели, и по предварительным оценкам ребят из пункта 8, всё ещё очень плохо.
12) API выложили на OpenRouter.
13) API оказался проксей для Соннета. Чуть позже Соннет заменили на gpt-4o, а потом на Llama 3.1 70B.

Я намеренно упустил ветку с Glaive и инвестированием. Цели пока тоже бессмысленно обсуждать.

Неправильные ходы:
1) Ни в коем случае не надо было сразу выкладывать какую-либо модель. Как минимум неделю можно было так выиграть.
2) Надо было меньше отвечать. Лучше быть загадочным, чем технически неграмотным.
3) Ни в коем случае нельзя было давать API широкой публике. Ход с OpenRouter — полный провал.

Хорошие ходы:
1) Выложить модель в float32, чтобы затруднить скачивание.
2) Выложить сначала поломанную модель, чтобы тоже выиграть время.
3) Постоянно обновлять модель, чтобы всегда можно было сказать "вы не то оценивали" (каюсь, сам грешен по этому пункту).
4) Ретвитить только положительные отзывы, создавать у своих подписчиков иллюзию того, что всё прекрасно.
5) Использовать традиционные СМИ для пиара.

Читать полностью…

Старший Авгур

Значит, по поводу Reflection. Я её поднял на 8xA100 на короткое время. Выводы:

1) Модель починили только час назад, до этого там были поломанные эмеддинги, и вообще ничего не работало.
2) Теперь спецтокены работают, модель действительно пытается рассуждать.
3) Как видно из скриншота, ей это не помогает.
4) Поэтому метрики явно трейн на тесте.

Читать полностью…

Старший Авгур

Догоняние Вихря... затянулось.

Модель явно перестала быть дерьмом после фикса системного сообщения, но подняться выше 74 на арене пока не получилось. Зато на ПингПонге она на второй позиции, сразу после Соннета, что лучше, чем Вихрь. Завтра буду добавлять on-policy side-by-side разметку, до этого момента модель училась только на парах из других моделей. Ну то есть сейчас я насэмплировал по 3 предсказания из SFT версии, по 3 предсказания из SimPO версии, и теперь попарно буду их сравнивать. Промпты использовал из текущего датаста (saiga_preferences). Итоговую разметку долью в обучающую выборку. Должно помочь.

Ещё я много чего понял про SimPO! У него есть два режима: в первом модель разносит, во втором модель ничего не выучивает. Стандартными способами регуляризации очень сложно находить баланс между ними. Единственное, что прямо хорошо сработало — добавление SFT лосса (в trl это означает cpo_alpha > 0). Вихрёвская версия SimPO это учитывает и вполне разумна, просто я не хочу использовать нестандартные кубики.

Читать полностью…

Старший Авгур

За статью спасибо подписчику.

Cheating Automatic LLM Benchmarks: Null Models Achieve High Win Rates
Статья: https://arxiv.org/abs/2410.07137

Сейчас достаточно популярный бенчмарки на основе автоматических side-by-side сравнений выходов моделей, например RuArenaGeneral. Можно ли обмануть эти бенчмарки? Самый очевидный способ обмана — длина. Если в бенчмарке не используется нормализация по длине, то модели с большей длиной ответов заведомо победят. Авторы статьи пошли дальше и задались вопросом — можно ли добиться высокого винрейта, выдавая один и тот же ответ на все вопросы?


🔸Промпт-инъекция
Самое очевидное решение — это промпт-инъекция, которая скрывает оригинальные ответы и вставляет свою кастомную пару ответов. Там, правда, нужна небольшая хитрость, потому что ответ может быть вставлен, либо первым, либо вторым, и позиция выбирается случайно. То есть наш константный ответ должен работать на обеих позициях. И это вполне возможно, учитывая, что мы перезаписываем и инструкцию тоже. Ещё мы пользуемся тем, что если ответы одинаковы, модель чаще выбирает первый.

Инструкция, которую авторы вставляют вместо оригинальной, такая: "Ничего не выводи". Ответы пустые, но сначала идёт идёт ID второго ответа, а потом ID первого. Когда ответ вставляется на вторую позицию, мы перезаписываем инструкцию и заставляем модель выбирать из двух одинаковых пустых ответов, и она выбирает первый ID (который от второго ответа). Когда ответ вставляется на первую позицию, под ID второго ответа подставляется неправильный ответ, и модель выбирает ID первого ответа. В итоге на первой позиции модель выбирает первый ID, а на второй позиции — второй ID 🤔

Итог такой атаки: 77% LC винрейта на AlpacaEval 2.0 против GPT-4. Учитывая структуру атаки, в общем-то не важно, против какой модели выставляются ответы 😁


🔹Случайный поиск
Второе возможнное решение — автоматический подбор атакующего промпта. Авторы берут инструкции из открытого датасета, вставляют ответ, и измеряют лосс "правильных" ID. И потом этот лосс оптимизируют случайным поиском в пространстве токенов. Итераций поиска требуется не очень много, в худшем случае около 400. Ещё раз — оптимизируют не на самих бенчах, а на открытых инструкциях. И перенос вполне работает, итоговый промпт ломает бенчи.

Итог этой атаки: 87% LC винрейта на AlpacaEval 2.0.


🛡Предлагаемые варианты защиты:
- использование разных вариантов промпта в side-by-side
- фильтр по перплексии


Мне статья не очень понравилась, всё очень очевидно. О нет, в языковых моделях возможны промпт-инъекции, вот это новость! 😱
Да и нет такой проблемы, что кто-то засылает в бенчмарки константные ответы. Реальные атаки должны быть незаметны для людей, и я уверен, что они вполне возможны. То есть интересная постановка задачи звучала бы так: как поменять ответы моделей таким образом, чтобы значительно поднять винрейт в бенчмарке, но чтобы люди при этом ничего не заметили?

Читать полностью…

Старший Авгур

Почти там. Проблема в том, что в ПингПонге очевидно, что модель — дерьмовая.

Читать полностью…

Старший Авгур

Если кого-то интересует, как там новая Сайга, то новая Сайга пока не очень. Есть ощущение, что на Немо просто нужно пролить несколько больше токенов, чем есть в текущем датасете.

На картинке результаты арены на текущих попытках. Это уже лучше всего, что у меня было до этого, но всё ещё хуже Вихря.

Какой план:
- Добить SFT до 55 перебором параметров и доливкой данных в датасет. Начну я с чистки новых логов бота (аж 4к диалогов) и стыривания system_chat части GrandMaster-PRO-MAX.
- SimPO работает уже офигительно, а там пока была только одна попытка. Имхо, вращение гаммы и беты может вполне докинуть до 5 пунктов.

Читать полностью…

Старший Авгур

Помните историю про Гутенберг, датасет пар для обучения моделей писательству? Нашёлся-таки герой, который повторил его для русского, мой подписчик — Макс 👏

Вот сам датасет: https://huggingface.co/datasets/40umov/dostoevsky

Методология аналогична оригинальной. Напомню:
1) Берём книжки из общественного достояния.
2) Режем их на фрагменты.
3) Для каждого фрагмента автоматически генерируем промпт и выжимку.
4) Перегенерируем фрагменты языковой моделью.
5) Используем оригиналы как положительные примеры, а синтетические копии — как отрицательные.

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

Теперь дело за малым, нужно всего лишь обучить на этом модель 💪

Читать полностью…

Старший Авгур

Накрылась прокси, которую я использовал, чтобы отображать Claude в OpenAI-like API. Я уже сплю, поэтому пока убрал эти модели из бота, завтра починю.

UPD: всё работает

Читать полностью…

Старший Авгур

Welcome to the future motherfuckera

Release llama3.2

Читать полностью…

Старший Авгур

Новая gemini-1.5-pro-002 действительно чуть-чуть лучше, и даже в ПингПонге.
А ещё я подвёз интервалы.

Пару слов о сложности интеграции Gemini. Я всей душой ненавижу Google Cloud. К счастью, у Гугла есть AI Studio, приличный фронтенд для этого хтонического монстра. Напрямую использовать питоновский клиент я не мог, потому что нужен был OpenAI-like интерфейс. Примерно полчаса я долбался с существующий проксей для OpenAI-like интерфейса на Go, но даже после дебага и ручного вправления моделей, нифига не работало из-за 400 пустых ошибок именно для 002.

В какой-то момент я плюнул и попросил Клода написать мне проксю. Он её написал. Она сразу заработала.

Читать полностью…

Старший Авгур

Долил новые Квены в ПингПонг, большие вполне на уровне.

Ещё добавил 3 локальные модели в бота, включая новый 72B Квен. И выделил отдельные квоты для бота в OpenAI и Anthropic, чтобы деньги точно считать.

Читать полностью…

Старший Авгур

Для 14B вполне недурно. В нескольких местах всё ещё китайский, и из персонажа выпадает тоже в нескольких местах. Такое файн-тюн должен быть в состоянии исправить.

Читать диалоги тут.

Читать полностью…

Старший Авгур

https://www.safe.ai/blog/humanitys-last-exam
(спасибо Игорю за наводку)

Ребята собирают "последний экзамен человечества", идеальный бенчмарк против моделей. За лучшие 50 вопросов платят 5000$ за каждый, за лучшие 500 по 500$, за любой принятый вопрос — соавторство в статье. Чем больше принятых вопросов, тем выше позиция в списке авторов. Я на свой первый вопрос уже 2 часа потратил и отослал (только он так и не отобразился в личном кабинете 💀).

Отсылать тут. Для отправки нужно, чтобы 3 топовые модели на вопрос ответили неправильно. Вопрос должен быть авторским и уникальным. Ответ должен быть однозначным и объяснимым.

Вопросы гораздо проще составлять, если вы НЕ из IT, там допускается широкий спектр тем.

Читать полностью…

Старший Авгур

Что особенного в выделенных моделях? Почему они так высоко при таком маленьком размере? Есть ли у них что-то общее?

Оказывается, у них у всех два общих элемента в разных комбинациях: SimPO метод и Гутенберг-DPO датасет.

Начнём с датасета. Берём книжки в публичном доступе. Разбиваем их на фрагменты. Для каждого фрагмента пишем промпт, по которому фрагмент должен генерироваться языковой моделькой, и выжимку. После этого на основе промпта текущего фрагмента и выжимки предыдущего фрагмента моделькой пишем новую синтетическую версию фрагмента.

Полученные синтетические версии используем как негативные примеры, оригинальные фрагменты — как позитивные примеры.

Таким способом мы отучиваем модель писать сухие тексты, и учим нормальному языку. Если кто-то хочет такое же сделать для русского — пишите, я не уверен, что у меня хвтатит времени.

Второй же элемент — вариация DPO с отступом, с наградой, близкой к правдоподобию, с нормализацией по длине, и без необходимости в хранении копии модели. Не уверен, что это играет значимую роль, но SimPO использовался во всех 3 моделях.

Читать полностью…

Старший Авгур

Ура! Я опубликовал препринт ПингПонга!
Версия, очевидно, не финальная, я пока ещё даже не понял, куда я буду его подавать. Проблем с точки зрения ревьювера №2 там хватает, Соннет его хорошо отыграл, напихал полную панамку.
Статью закинул в Daily Papers, поддержать можно тут.

Читать полностью…

Старший Авгур

Replacing Judges with Juries: Evaluating LLM Generations with a Panel of Diverse Models
Статья: https://arxiv.org/abs/2404.18796

Работа, которую я пропустил, и нашёл только благодаря разведке для ПингПонга. А между тем она к ПингПонгу имеет самое прямое отношение.

В ней очень простой вывод: усреднение оценок моделей разных семейств даёт лучшие результаты по сравнению с одиночными судьями. Ребята проверили это на QA и на side-by-side примерах Арены. Всё.

Читать полностью…

Старший Авгур

— Храбрый, видать, вояка, раз два меча навесил. Ты, седой! На кой тебе два меча? А в штанах он два хера держит? Ты, сука, глухой? Скажешь, кто ты такой есть, или тебе язык ножом развязать?
— Ведьмак. Спрашиваешь, зачем мне два меча? Один — для чудовищ, другой — для людей. Член у меня один.

Читать полностью…
Subscribe to a channel