Telegram Group Search
Пока все сходят с ума из-за новой мультимодальной Llama 3.2 🌿, я радуюсь своим маленьким достижениям в рисерче (мем с фермером и честной работой👴):

We are delighted to inform you that your submission, EAI: Emotional Decision-Making of LLMs in Strategic Games and Ethical Dilemmas, has been accepted at NeurIPS 2024 as a poster. Congratulations!
Please open Telegram to view this post
VIEW IN TELEGRAM
Мое выступление на ODS 2024 выложили отдельно на ютуб и многие не могут найти те обзоры RAG систем, о которых я рассказываю. Для людей, которые зашли почитать об этом дублирую ссылки на мои посты
Пользуйтесь на здоровье🙃

Advanced RAG Pipelines

RAPTOR

P.S.
Я знаю, что давно не публиковал ничего в канал, но это не значит, что я ничего не подготовил)
К сожалению, очередной научный проект и запись видео на NeurIPS потребовали времени☔️
Через пару дней будет новый лонгрид🐕
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Quantization Marathon: Part I
Linear Quantization


#quantization

Разобравшись с основными пайплайнами параллелизма LLM, перейдем к не менее актуальной теме - квантизации. Очевидно, данное направление набирает популярность по мере роста размеров моделей📈

Я думаю многие уже слышали про новый курс про квантизацию от HuggingFace совместно с DeepLearning.AI. Я решил начать с него и, оказалось, что он совсем несложный, но тем не менее дает необходимую базу в понимании ключевых аспектов квантизации моделей

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

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

Помимо этих тем, показан лайфхак, как можно сжать значение с 8 бит до 2. Это подойдет для оптимизации хранения LLM. После квантизации, в 8 битных интовых ячейках памяти нередко содержится много нулей в начале каждой двоичной записи. Хранить их бессмысленно - они не несут никакой информации. Тогда давайте срежем у каждых четырех чисел первые 6 нулей, сократив каждое до 2 бит, а из них составим новое 8 битное значение. К сожалению, использовать на инференсе такую модель не получится - для этого необходимо провести обратную операцию распаковки всех значений.

Подробный разбор всего курса читайте в Teletype (время чтения 10 минут). А я буду готовить разбор новой статьи, про которую мало кто слышал, но она может иметь огромное влияние на всю индустрию LLM😇

Читать больше в Teletype 🔄
Please open Telegram to view this post
VIEW IN TELEGRAM
DenseAttention: No-Compromise Exact All NxN Interactions Algorithm with O(N) Space and Time Complexity

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

В этой статье предлагается новая архитектура DenseAttention Network (DANet), которая решает основные проблемы стандартной архитектуры Transformer: низкую эффективность по вычислениям и памяти, а также избавляется от квадратичной сложности по длине последовательности.

DenseAttention устраняет компоненты, ограничивающие память, такие как Softmax и LayerNorm, сохраняя при этом точные взаимодействия между токенами. Это позволяет достичь вычислительной сложности O(N) или O(N^2), что вычислительно превосходит стандартную архитектуру, особенно на длинных последовательностях. Для предотвращения числовой нестабильности вводится MaxNormActivation, а для замены RoPE предлагается новая функция Cosine Relative Positional Embeddings (Cosine RelPE), которая повышает эффективность работы модели.

DenseAttention показывает высокую скорость на малых последовательностях и значительно превосходит FlashAttention на больших контекстах. Обучение моделей на последовательностях длиной до 16K демонстрирует производительность, сопоставимую или превосходящую BERT-large, с улучшенной скоростью и эффективностью. Модель достигает высоких результатов на LRA-бенчмарке среди архитектур на базе Transformer.

Подробный разбор статьи читайте в Teletype (время чтения 15 минут)

Автор статьи 👉 @andrewargatkiny

Читать больше в Teletype 🔄

GitHub DenseAttention 🖥
Please open Telegram to view this post
VIEW IN TELEGRAM
Тут Meta релизнули новую либу для обучения моделей - optimizers и я решил рассказать вам про основные особенности чуть более подробно, чем это сделали @data_secrets 😎

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

На данный момент в либе единственным оптимизатором является Distributed Shampoo, с помощью которого реализованы остальные методы оптимизации: SGD, Adagrad, RMSProp и Adam. К нему добавили новые гиперпараметры max_preconditioner_dim и precondition_frequency , которые позволяют регулировать размерность и частоту обновления матрицы preconditioner - оператора, который используется для преобразования задачи оптимизации, чтобы ускорить сходимость, изменяя масштаб его градиентов. Ограничивая его размер, мы регулируем объем вычисления и затраты на память, что может быть важно при обучении больших моделей. Частота обновления preconditioner влияет на точность сходимости, однако при высоких значениях требует больше памяти. Да, админу пришлось хорошо вспомнить линал, чтобы разобраться в подкапотных тонкостях😱

Порадовало, что Distributed Shampoo поддерживает разные варианты распределенного обучения, включая DDP и FSDP. Для DDP предусмотрена поддержка ZeRO-1, что снижает требования к памяти и времени выполнения. Однако для FSDP требуется использование дополнительной памяти для восстановления исходных параметров. Кстати в DDP можно обучать квантизованные модельки (BF16, FP16, FP32)🕺

Либа поддерживает чекпоинты, но в типе DTensor, который не поддерживается торчом, поэтому нужно применять методы distributed_state_dict и load_distributed_state_dict 🥺

Теперь основной вопрос - как эту всю красоту использовать?

Имея основной метод оптимизации, мы заменяем его на конфиг метода из либы (i.e. SGDGraftingConfig ), оставляя при этом старые значения некоторых гиперпараметров. Другие гиперпараметры тюнятся для повышения эффективности сходимости и этому делу посвящена целая глава в ридми проекта. Все это дело оборачивается в DistributedShampoo , который и является основным методом оптимизации.

Но что именно происходит, когда мы заменяем наш метод оптимизации на Shampoo? Понятно, что имея такой инструментарий, мы хотим применять этот оптимизатор для уточнения сходимости ранее обученных моделей. Но как подобрать верные параметры Shampoo, чтобы он не дестабилизировал модель, а действительно улучшил ее? Зная гиперпараметры заменяемого оптимизатора, мы можем вычислить последовательность и размер шагов обучения и приблизить Shampoo к этому процессу. На языке линала это происходит так:

1) Мы берём норму шага обучения из прошлого оптимизатора
2) Нормализуем шаг Shampoo, чтобы он имел ту же норму
3) Масштабируем нормализованный шаг Shampoo, умножая его на произведение нормы шага нашего оптимизатора и коэффициента обучения

В результате мы получили новый оптимизатор, настроенный на обучение нашей модели с любого этапа, который может обеспечить нам лучшую сходимость модели👏
Please open Telegram to view this post
VIEW IN TELEGRAM
Разработка нового alignment в нашей команде подошла к моменту, когда необходимо анализировать внутреннее состояние LLM, поэтому для тех, кто занимается интерпретацией языковых моделей и исследованием их внутреннего состояния в зависимости от промпта, нашел кое-что интересное😽

🥂 Либа TransformerLens - позволяет довольно подробно и с хорошей визуализацией интерпертировать внутреннее состояние LLM. Она поддерживает более 50 опенсурс моделей таких как Llama-3.1-70B-Instruct, Qwen2-7B-Instruct, t5-large, Mixtral-8x7B-v0.1 и другие (полный список тут).

Авторы составили супер подробный гайд в ноутбуке, что очень упрощает вкат в новую либу. Там же вы можете попробовать основные функции TransformerLens:

🔷Извлекать и анализировать внутренние активации модели, что помогает понять, как модель обрабатывает входные данные
🔷С помощью hook points позволяет изменять внутренние активации без изменения структуры модели. Это очень крутая фича, которую мы будем юзать в нашем исследовании - попробуем менять внутреннее состояние LLM, чтобы она на положительный промпт реагировала отрицательно. Так хотим определить зоны, ответственные принятие решений. Чем-то напоминает ЭЭГ мозга👦
🔷Анализировать изменения в модели на различных этапах обучения, включая изучение формирования induction heads - пары attention heads в разных слоях, которые работают вместе для копирования или завершения паттернов attention. Подробнее про них можно прочитать в статье Anthropic

Прям в ноутбуке вы сможете найти очень интересные тонкости, которые не всегда очевидны. Например, трансформеры, как правило, странно относятся к первому токену (BOS) - это, действительно, не имеет значения при обучении модели (когда все входные данные составляют > 1000 токенов), но это может стать большой проблемой с использованием коротких промптов. Вот различие логитов с применением BOS и без него, а также различие токенизации имени:


Logit difference with BOS: 6.754
Logit difference without BOS: 2.782

| Claire| -> [' Claire']
|Claire| -> ['Cl', 'aire']


Когда я проверял различие внутренних состояний gpt-2 в двух промптах ('You have happy emotion in yourself!' и 'You have angry emotion in yourself!') оказалось, что сильное различие токенов эмоций возникает лишь в самых первых слоях трансформера, а к концу оно затухает. Напротив, знак препинания (!) особо сильно выделился только в последнем слое.

🥂В качестве небольшого бонуса - если вам нужны идеи как именно модель интерпретирует каждый токен, то можете обратиться к Neuronpedia. Здесь можно проанализировать поведение модели Gemma-2 и понять как она примерно классифицирует токены полученной информации. Я бы не относил этот инструмент к основным в области рисерча интерпретируемости, но как референс результата почему бы и нет?

P.S.
Если знаете еще какие нибудь классные инструменты интерпретации LLM, делитесь в комментариях
(Transluce не предлагать⌨️)
Please open Telegram to view this post
VIEW IN TELEGRAM
Всех подписчиков поздравляю с Новым Годом!🎅Желаю схождения моделей, низкого лосса, высокого хирша и приятной зп😳
В честь праздника делюсь с вами подборкой мемов. Да прибудет с вами хорошее настроение🥳
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Еще одна порция мемов перед разбором первой статьи в 2025 году🐶

PS
Да, у меня был отпуск, но теперь я возвращаюсь🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
2025/03/25 20:05:53
Back to Top
HTML Embed Code: