Старший Авгур
6.41K subscribers
301 photos
6 videos
6 files
314 links
Сохраненки и шитпост про ML от @YallenGusev
Чат канала: @augur_chat
Download Telegram

Кто там говорил, что алайнмент не вредит моделям?

Пояснение:
- Свой алайнмент я ещё не успел сделать.
- А вот порушить чужой (через abliteration) - успел, и на 8B модели это ничего не меняло, а на 70B вдруг сильный зелёный профит появился.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥94
Пока считается AWQ и GPTQ, задеплоил новый Вихрь в бота (@saiga_igusev_bot).
Можно тыкать после /setmodel. Я потыкал, вполне неплохо.
На этот раз деплой без косяков, я теперь мастер bos токенов.
👍8😁1
Простите, не мог не поделиться (модель = Opus, персонаж = Абатур, пока тестировал Вихрь решил проверить и другие модели).
😁62🔥16👍14😇5🤮2👎1🤨1
Метрики для AWQ и GPTQ. Калибровал на валидации saiga_scored.
Abliterated 70B Сайга в 4 битах (GPTQ) доступна в боте. Она стала чуть более зацензуренной почему-то, видимо квантование что-то поломало в этом отношении.

А ещё она не влезла в 48 Гб, поэтому запущена на A100 80 Гб (хоть и serverless).
👍22🤔3
Фух! Подключил ЮКассу к боту (@saiga_igusev_bot), можно купить подписку по /subbuy. Перед этим нужно задать e-mail через "/setemail ...".
Пока 500 рублей за 7 дней и x5 лимиты, дальше посмотрим.
Сама интеграция не очень сложная, единственный подводный камень был с почтой: она нужна для чеков налоговой. Плюс само подключение (заявка -> проверка -> договор -> проверка) заняло несколько дней. Подключился как самозанятый.

Если у кого-то возникнут проблемы с оплатой, пишите в личку или в комментарии.
👍28🤔7👏5🔥4👎1
3 бита совсем уж грустненькие 😭
Please open Telegram to view this post
VIEW IN TELEGRAM
🥴10🤮1
Сварилась phi3-medium KTO. Пока выглядит так, что phi3-medium очень хороша с точки зрения соотношения цена/качество. 13B, а совсем чуть-чуть 70B уступает.
Только abliterate пока не получилось сделать.
👍16🔥6😱4🤔2
KTO 70B, причём off-policy. Что же будет, когда я туда примеры из самой модели подложу...

А, и phi3-medium можно тыкать в боте.
🔥14💩1
Forwarded from Сиолошная
Помните вот эту ситуацию? Когда человек утверждал, что LLM не могут решить какую-то задачу, утвердил приз $10'000, и через два дня расстался с деньгами? Я ещё в комментариях шутил, что если хотите на серьёзных щах что-то утверждать про ограничения систем — надо готовиться выкладывать деньги, ибо иначе людям, которые реально могут доказать, что вы не правы, просто не интересно.

А помните я на прошлой неделе писал про бенчмарк ARC от Francois Chollet? Якобы что это визуальная загадка, где нужно уметь на лету идентифицировать новые паттерны, и что текущие LLM в этом вообще не разбираются, и выдают <10% качества?

Как написали в одном из чатов (автор @senior_augur):
— Я думаю ARC никто долго не побивал, потому что он никому нахер не нужен был

На интервью Francois говорил, мол, вот LLM не умеют рассуждать и обобщаться, бенчмарку 4 года, а воз и ныне там стоит. И утвердил конкурс (ну и получил освещение в подкасте) на $1M (правда там пока только $500k доступно, и то со звёздочками, что фронтир-модели, лучшие из лучших, под критерии не попадают).

Прошло 6 дней. Воздуха набрали? Готовы? 😏
Знакомый подкастера из Redwood Research написал пост, где показывает, насколько высоки метрики GPT-4. На тренировочной выборке (публично доступной) качество 71% на 100 отложенных автором задачах, в которые он не подглядывал. Качество человека в среднем 85%. Кажется, что разрыв большой, но напомню, что основной тезис разработчика бенчмарка был «ну так LLM и 10% не решают!». На приватной выборке качество 51%, но не удивляйтесь — она сама по себе сложнее (и для неё неизвестен показатель человека, в смысле его просто не померили). До этого лучший метод давал 34% и не опирался на LLM.

Осталось дождаться, что Francois со своими друзьями возьмут метод и запустят на самом ультра-приватном датасете, который ещё никто не видел (специально для соревнований сделали), увидели там 50%+- и сидели вот так: 😅 , переосмысливали своё представления об «ограничениях дип лернинга».

Но вам наверное интересно, как работает решение? Примерно так:
— GPT-4o на каждую задачу генерирует примерно 5000 программ на питоне, которые потенциально могут быть решением
— программы фильтруются по их способности повторить 3 примера, которые всегда даются (по условиям задачи, именно по ним нужно установить зависимость и дать ответ)
— топ-программы, дающие максимально похожий результат (если нет правильных) отдаются на правку GPT-4o, типа «вот как нужно, вот как ты сделала, исправляй эту хрень». Тут генерируется ещё 3000 программ (итого 8000)
— выбирается финальный кандидат для решения.

Для того, чтобы это работало хорошо, нужно немного поиграться с входными представлениями (так как, как я и говорил, модель не очень хорошо «видит» картинку, совсем не так, как мы), используя ASCII и написать несколько примеров рассуждений. Обычно в промпт входит примерно 30'000 токенов — если добавлять больше, то модель начинает работать хуже после 32'000 по естественным причинам (это давно замечено).

Автор описал несколько итераций улучшений промпта, но самое главное, как я понял — это подать несколько представлений на вход для одной и той же задачи, просто потому, что GPT не видит так же, как это делает человек. «GPT-4o’s vision is terrible on grids» (потому что все задачи на клеточках). Ей нужно хорошо приготовить текст, разделить всё символами (типа 0 | 3 | 1 | 2, цифры обозначают разные цвета).

И второе — GPT-4o плохо кодит и часто ошибается на +-1 по клеточкам. Обе проблемы решаются с развитием моделей, так что ждём к концу года новых прорывов (хотя кому теперь интересно будет садиться за задачу?).
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥6🤮32🤔1🤯1
Если вдруг кто-то хочет пожертвовать денег:

Cloudtips (из России): https://pay.cloudtips.ru/p/ea94d893
KoFi (не из России): https://ko-fi.com/ilyagusev
TRC20 usdt: TZ7eFAvmq45585G2Xu6sfaGCKS4WPBMgJT
ERC20 usdt: 0xf877B6DBBaAb35d9302b4AD5A3b7E296d0E18059

Также готов полноценно проконсультировать по языковым моделям за денюжку, с этим в личку.
49👍13😢9❤‍🔥4🤣4👏3🔥2🤯1
Позиционная кодировка

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

Если вы вспомните, как работает внимание, то увидите, что там никак не участвуют позиции токенов. Но языковые модели должны как-то их понимать, иначе при предсказании следующего токена контекст превратится в bag-of-tokens, что критично повлияет на качество предсказания. Ведь да? 😁

Конкретные задачи, где позиции важны:
- Подсчёт токенов
- Копирование кусков контекста
- Арифметика и код

Мини-квиз для читателя (перед открытием спойлера нужно ответить на все вопросы в голове)
- Может ли BERT хорошо работать на стандартных задачах (классификация текста) без позиционной кодировки? Нет, не может
- Может ли GPT хорошо работать на стандартных задачах (генерация текста) без позиционной кодировки? Да, может
- Может ли декодер с RoPE, обученный на контексте в 1024 токена, хорошо генерировать 2048 токенов? Может только после экстраполяции/интерполяции


Attention Is All You Need
Статья: https://arxiv.org/abs/1706.03762

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

Например, предположим, что у нас 4 чиселки в эмбеддинге, 1 секунда = 1 позиция, у первой пары частота 0.5 Гц, у второй - 0.25 Гц. Тогда на нулевой позиции будет такой эмбеддинг: [0, 1, 0, 1], на первой позиции: [0, -1, 1, 0]. Потому что для первая пара проходит полоборота за шаг, вторая - четверть. Формула, по которой расчитывается частота для разных пар: (10000^(-2i/d)) / 2π, где i - номер пары.

Почему 10000? Во-первых, кодировки любых позиций не повторяются. Во-вторых, так косинусное расстояние между двумя синусоидальным позиционными эмбеддингами монотонно увеличивается по мере наращивания дистанции.

Дополнительный материал: ссылка


RoFormer: Enhanced Transformer with Rotary Position Embedding
Статья: https://arxiv.org/abs/2104.09864

Есть свойство, которое нам хотелось бы получить: расстояние между 5 и 10 токеном должно быть таким же, как если бы мы поставили эти же токены на 10 и 15 позиции вместо 5 и 10. То есть оно не должно зависить от абсолютной позиции. Для синусоидальных эмбеддингов это не выполняется.

Чтобы это выполнялось, делаем так: каждую пару чиселок в уже готовых эмебеддингах токенов вращаем на плоскости матрицей поворота. Углы всё те же, что и были в синусоидальных эмбеддингах. В статье есть доказательство того, что желаемое свойство так действительно выполняется. А ещё мы делаем это в каждом слое.

Дополнительные материалы: раз, два, три


Transformer Language Models without Positional Encodings Still Learn Positional Information
Статья: https://arxiv.org/abs/2203.16634

А нужны ли нам вообще позиционные эмбеддинги? 😐
Вот оказывыется нет, для авторегрессионных декодеров никакие эмбеддинги вообще не нужны, модель сама выучивается их считать. Это ещё и легко проверяется: учим языковую модель без позиционных эмбеддингов и учим мини-сетку предсказывать позицию токена из активаций. В первых слоях ничего толкового не предскажется, а вот дальше информация агрегируется. Более того, она не только агрегируется, но и используется - если перемешать контекстные токены, финальный токен предсказывается гораздо хуже. Но для энкодеров это не работает, ключ к выучиванию - декодерная маска внимания.

Это всё подтверждается в нескольких последующих статьях: раз, два.

Так почему все до сих пор используют RoPE? Ну, NoPE (no positional embeddings) принципиально работает, но чуть хуже. Это видно и в этой статье.

Расширения RoPE будут дальше
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24🔥13🤔54🤯1🙏1🍾1
не понял

Поставил считаться с saiga_llama3_70b_sft_m1_d5_abliterated в качестве опорной точки.
🤔14🤨2
Стало лучше, но на SFT тюне AWQ всё равно лучше оригинала... Хорошо хоть только в LC-винрейте.
🤔7😁2
Новый Клод и saiga_llama3_70b_sft_m1_d5_abliterated_kto_m1_d2_awq_4bit (ну и название) доступны в боте. Самое приятное - стоит новый Sonnet как старый Sonnet, то есть в 5 раз дешевле Опуса.
27🤔3
Прокинул в новый Клод инструменты (генератор картинок, чтение веб-страничек, поиск). Разница в API инструментов у OpenAI и Anthropic кровушки моей попила немало.

Кроме того добавил тумблер /tools, которым можно отключить инструменты.
🔥37👍3🤔31
Опус и типичные загадки.

В целом, они ещё подходят для теста локальных моделей, но по-моему что у OpenAI, что у Anthropic это всё уже есть в обучении.
👍23🔥41👏1😁1🤔1
Опус и последний Соннет - единственные языковые модели общего названия, которые могут писать стихи. GPT-4o не вытягивает, а они - могут. Пример запроса: Пушкин про Warhammer 40k.

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

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

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

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

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

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


Местами криво, не с первой попытки, но с этим точно можно работать.
👍79🔥293💯2🤔1
Отдал ручки Сайги сюда: https://llmarena.ru/
Отдал v6, saiga_phi3_medium_sft_m1_d2_kto_m5_d7 и saiga_llama3_70b_sft_m1_d5_abliterated_awq_4bit
В боте доступны всё те же модельки.

По поводу бенчмарка я настроен скептично (не будет там много голосов), но пусть.
🔥28🤔6🤣2
Про расширения 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 уже работает как без тюна, так и с тюном.
Please open Telegram to view this post
VIEW IN TELEGRAM
23🔥16🤯4👍3
Я там долил ещё примеров в saiga_scored и переобучил sft Лламу, получилась m11_d7. Она лучше предыдущей sft по метрикам. Но хуже после abliterate. После этого ещё навернул KTO, и так получилась m11_d7_abliterated_kto_m7_d7. По метрикам 49% против v6, зато обесцензуренная. Была ещё попытка с DPO вместо KTO, но там длина разъехалась. Попробую сначала сделать abliterate, а потом sft, может станет лучше.

А ещё пробую разделённые LR из https://unsloth.ai/blog/contpretraining
🔥21