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

Description
Сохраненки и шитпост про ML от @YallenGusev
Advertising
We recommend to visit
Roxman
Roxman
12,178,200 @roxman

Sharing my thoughts, discussing my projects, and traveling the world.

Contact: @borz

Last updated 3 days, 23 hours ago

HAYZON
HAYZON
6,631,082 @hayzonn

💼 How to create capital and increase it using cryptocurrency

👤 𝐅𝐨𝐮𝐧𝐝𝐞𝐫: @Tg_Syprion
🗓 ᴀᴅᴠᴇʀᴛɪsɪɴɢ: @SEO_Fam
⭐️ 𝐎𝐧𝐞 𝐋𝐨𝐯𝐞: @major
🍀 𝐌𝐲 𝐜𝐡𝐚𝐧𝐧𝐞𝐥𝐬: @kriptofo @tonfo
@geekstonmedia

Купить рекламу: https://telega.in/c/hayzonn

Last updated 22 hours ago

Канал для поиска исполнителей для разных задач и организации мини конкурсов

Last updated 1 month, 2 weeks ago

1 Woche, 1 Tag her
Помните [историю](https://t.me/senior_augur/280) про Гутенберг, датасет пар …

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

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

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

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

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

1 Woche, 2 Tage her
Долго ничего не писал, готовил ПингПонг …

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

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

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

2 Wochen her

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

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

3 Monate, 1 Woche her

Про расширения RoPE
Первая часть: ссылка

Для начала коротко напомню, что вообще делает RoPE: берётся эмбеддинг и каждая пара фичей вращается на определённый угол. Для разных пар — разный угол. Для первого токена происходит один поворот, для второго — два поворота, и так далее. Вращаем и query, и key.

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

Extending Context Window of Large Language Models via Positional Interpolation
Статья: ссылка

Казалось бы, ну и в чём проблема тогда? Пусть мы обучили модель на 4096 позициях. Тогда давайте просто вращать фичи 4097 раз, 4098 раза и так далее. Это называется экстраполяция ?, и экспериментально подвтерждено, что она не работает с популярными базовыми моделями. Причём подтверждено ещё много где. При этом со стороны теории это несколько загадочно: RoPE не обучается и кодирует относитетельную позицию, так какого чёрта? То есть ожидается, что после экстраполяции модель будет себя вести так, как будто у неё скользящее окно в 4к токенов. А на самом деле её полностью разносит, логиты внимания для некоторых расстояний >4к улетают в небеса. ?
Почему? Об этом чуть ниже.

Пока же сосредоточимся на втором семействе методов — интерполяции. Базовая идея такая: представим, что для токена на 4096 позиции мы делаем в 2 раза меньше оборотов, 2048. И так для каждой позиции, вместо одного оборота делаем половину. После этого мы можем кодировать 8192 токенов вместо 4096. Но есть нюанс: модель-то не видела в обучении полуоборотов, соседние токены становятся практически неразличимы ?
Поэтому авторы статьи полируют это всё тюном на расширенном контексте, что делает этот подход не особо практичным.

Scaling Laws of RoPE-based Extrapolation
Статья: ссылка

Суть статьи — обоснование провала экстраполяции. А виновата оказалсь база, θ = 10000 ?
Дело в том, что с такой базой не все фичи делают полный оборот за 4к. И в итоге для первых фичей модель видит полный оборот (и видит немонотонность функций), а для других фичей видит куски только до 2π, π или π/2. И как раз из-за наличия неполных кусков экстраполяция не работает как надо.

Авторы дотюнивают модель с разными базами, но в пределах оригинальной длины контекста, 4к. Если сделать базу радикально меньше, например 500, то все фичи совершают по несколько оборотов, и всё ок, экстраполяция будет работать с приемлемым качеством скользящего окна. С увеличением размера контекста становится хуже, но без переломов. Если сделать базу радикально больше, например 1000000, то точка перелома отодвигается на более широкий контекст, но всё ещё существует.

Хоть такой метод и выпадает из нашей изначальной постановки задачи, потому что снова надо тюнить, но тюнить-то надо на маленьком контексте ?, поэтому проблем со сбором данных тут нет. Работает всё неплохо, особенно с маленькой базой.

NTK-Aware scaling
Пост: ссылка

Меняем интерполяцию с дообучением из первой статьи на масштабирование базы θ без дообучения. Описано в посте на Реддите, хронологически до статьи выше. По идее это всё ещё интерполяция (особенно если задать коэффициент масштабирования с запасом), только мы растягиваем для разных частот по-разному.

Dynamic NTK scaling
Пост: ссылка

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

YaRN: Efficient Context Window Extension of Large Language Models
Статья: ссылка

Добавляются две новых штуки: NTK-by-parts и температура в софтмаксе внимания. NTK-by-parts мотивирован фактом выше о том, что какие-то фичи и частоты и так нормально экстраполируются, так что их можно не трогать. Для тех фичей, которые не экстраполируются, мы интерполируем. А температуру меняем, чтобы выравнять распредление скоров внимания (она меньше 1). Да и экспериментально так получается перплексия пониже ?

И вот YaRN уже работает как без тюна, так и с тюном.

3 Monate, 2 Wochen her

Отдал ручки Сайги сюда: https://llmarena.ru/
Отдал v6, saiga_phi3_medium_sft_m1_d2_kto_m5_d7 и saiga_llama3_70b_sft_m1_d5_abliterated_awq_4bit
В боте доступны всё те же модельки.

По поводу бенчмарка я настроен скептично (не будет там много голосов), но пусть.

3 Monate, 2 Wochen her

Опус и последний Соннет - единственные языковые модели общего названия, которые могут писать стихи. GPT-4o не вытягивает, а они - могут. Пример запроса: Пушкин про Warhammer 40k.

*В просторах звёздных, где царит война,
Где вечный мрак и пламя битв пылает,
Стоит Империум, как твердая стена,
И Император верных охраняет.

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

В соборах Марса, где гудят машины,
Свершается под гул молитв таи́нство,
Где люди-киборги среди руин старинных
Куют оружие, даруя нам единство.

Повсюду Хаос сеет смерть и тлен,
Рой ксеносов клубится в бездне чёрной,
Но человечество, восстав с колен,
Бросает вызов участи позорной.

О, сколько павших душ, несчётных жертв войны!
Но долг велит идти вперёд без страха.
И в этом мраке беспросветной тьмы
Лишь вера движет нас из праха.

Пусть дух Владыки нас ведёт на бой,
Пусть враг падёт пред нашею рукой!
Империум стоит, незыблем строй,
И мы верны присяге вековой.*

Местами криво, не с первой попытки, но с этим точно можно работать.

5 Monate, 2 Wochen her

Короче, ситуация такая. В том случае, когда мы не учим lm_head и embed_tokens, шаблон важен. Особенно, когда спец. токены нормально не обучены (как в случае базовой модели). И в целом с 4 битами, Лорой и 8-битным оптимизатором 24 Гб памяти на градиенты обеих матриц хватает. Но матрицы в идеале должны быть в float32, чтобы модель вообще не развалилась.

И в unsloth это нормально не работает! В их кастомном "быстром" коде для Лоры это не учтено. Я попытался пофиксить это в исходниках, но grad_norm=inf. С lm_head, впрочем, проблем нет, и может быть этого будет достаточно. В итоге план такой:
- Переучить Сайгу с текущим 7к датасетом, но с lm_head и Лорой.
- Параллельно оценивается русская часть tagengo и капелька ещё 4 языков (чтобы научить модель переключать язык в зависимости от языка запроса).
- Переучить Сайгу на 7к + очищенном tagengo.

А если ничего не заработает, то 1) можно перейти на оригинальный шаблон 2) можно забить и пользоваться Suzume.

P.S. Есть ещё мини-прикол: в unsloth нормально не работает маска при батчинге в обучении, то ли из-за flash-attention, то ли из-за их оптимизаций.

5 Monate, 2 Wochen her

Suzume огонь, 10/10 по первым примерами из тест-сета. Через час завершится оценка, вангую что-то типа 60-70% сырого винрейта по сравнению с gpt-3.5-turbo и точно лучше Сайги.

5 Monate, 2 Wochen her

О, подъехала мультиязычная gpt-4 синтетика на запросах из lmsys-chat-1m: https://huggingface.co/datasets/lightblue/tagengo-gpt4/
Это мы щас вставим в сет...

7 Monate, 2 Wochen her

Сайга-Гемма
Или переходим на обучение в axolotl.

Изначально идея этого эксперимента была в сравнении фреймворков для дообучения моделей, axolotl vs unsloth vs hf-trainer на новой базовой модели, Гемме.
Однако, unsloth до сих пор её не поддерживает, а hf-trainer на 24 Гб карточке вылетает по памяти, так что остался только axolotl.
Который всё равно работал только на A100 с 40 Гб.

Обучение было полностью в Колабе на A100: ссылка
Сама модель: ссылка
Училась только Лора, 6 часов.

Плюсы axolotl:
- Все параметры в одном конфиге.
- Очень удобный отладочный режим для просмотра финальной токенизации.
- Быстрая поддержка новых фичей и моделей.

Минусы axolotl:
- Довольно посредственные исходники с кучей багов.
- Как будто бы никакого выигрыша по времени и памяти по сравнению с самописным hf-trainer'ом.
- Нельзя легко сделать новый шаблон промпта (например с родным геммовским ), поэтому пришлось патчить токенизатор, чтобы переделать шаблон под ChatML.

Проблемы с Геммой:
- Странные OOM'ы на 24 Гб. Я пока не понимаю, как обучение Лоры с batch_size=1 может вылетать по памяти, когда с 13B моделями с теми же настройками всё было в порядке.
- repetition_penalty, отличный от 1.0, ломает модель и в HF, и в llama.cpp. Не я один это заметил, см. эту дискуссию.
- GGUF квантизация ниже 8 бит тоже ломает модель, она перестает вовремя генерировать EOS.
- Рандомные баги посреди генерации, отчасти возникающие из-за того, что нельзя поставить repetition_penalty.

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

We recommend to visit
Roxman
Roxman
12,178,200 @roxman

Sharing my thoughts, discussing my projects, and traveling the world.

Contact: @borz

Last updated 3 days, 23 hours ago

HAYZON
HAYZON
6,631,082 @hayzonn

💼 How to create capital and increase it using cryptocurrency

👤 𝐅𝐨𝐮𝐧𝐝𝐞𝐫: @Tg_Syprion
🗓 ᴀᴅᴠᴇʀᴛɪsɪɴɢ: @SEO_Fam
⭐️ 𝐎𝐧𝐞 𝐋𝐨𝐯𝐞: @major
🍀 𝐌𝐲 𝐜𝐡𝐚𝐧𝐧𝐞𝐥𝐬: @kriptofo @tonfo
@geekstonmedia

Купить рекламу: https://telega.in/c/hayzonn

Last updated 22 hours ago

Канал для поиска исполнителей для разных задач и организации мини конкурсов

Last updated 1 month, 2 weeks ago