Всем привет! Меня зовут Голубев Александр, я работаю в сфере Data Science, а именно Machine Learning/Deep Learning. За свою карьеру я успел поработать как инженером, так и лидом; занимался проектами в MedTech, банкинге, E-commerce, SaaS E-commerce, даже немного побыл в академии с написанием статей и сейчас уже хорошо осознаю, чем мне интересно заниматься, а чем нет.
В последнее время потребляемую информацию/мысли/опыт все больше и больше хочется не только заносить в базу знаний, но и делиться ей с другими. Этот ТГ канал — попытка выносить что-то интересное на обсуждение или же делиться полезной информацией с читателями. Сейчас я регулярно выкладываю посты в своем LinkedIn, но есть ощущение, что в телеграме можно выстроить более уютную атмосферу.
В основном я буду писать про машинное обучение: разборы статей, проекты из опыта, интересные и сложные задачи, которые приходилось решать, частые ошибки, мысли по будущему ML и т.д. В силу текущей работы в основном фокус сейчас сконцентрирован на NLP, LLM, Retrieval, но будет и много чего еще. Ну и конечно буду писать просто про то, что мне интересно вне работы: спорт, видеоигры, книги и фильмы, шахматы, тайм-менеджмент и лайфхаки к продуктивности, путешествия, и прочее.
Добро пожаловать на борт!
В последнее время потребляемую информацию/мысли/опыт все больше и больше хочется не только заносить в базу знаний, но и делиться ей с другими. Этот ТГ канал — попытка выносить что-то интересное на обсуждение или же делиться полезной информацией с читателями. Сейчас я регулярно выкладываю посты в своем LinkedIn, но есть ощущение, что в телеграме можно выстроить более уютную атмосферу.
В основном я буду писать про машинное обучение: разборы статей, проекты из опыта, интересные и сложные задачи, которые приходилось решать, частые ошибки, мысли по будущему ML и т.д. В силу текущей работы в основном фокус сейчас сконцентрирован на NLP, LLM, Retrieval, но будет и много чего еще. Ну и конечно буду писать просто про то, что мне интересно вне работы: спорт, видеоигры, книги и фильмы, шахматы, тайм-менеджмент и лайфхаки к продуктивности, путешествия, и прочее.
Добро пожаловать на борт!
👍25🔥6
AI[ex]Time pinned «Всем привет! Меня зовут Голубев Александр, я работаю в сфере Data Science, а именно Machine Learning/Deep Learning. За свою карьеру я успел поработать как инженером, так и лидом; занимался проектами в MedTech, банкинге, E-commerce, SaaS E-commerce, даже немного…»
Немного инфы про то, какие материалы у меня для вас уже есть:
1. Мой LinkedIn. Несколько раз в месяц пишу туда разборы статей, которые мне понравились, плюс иногда что-то от себя. Добавляйтесь в контакты 🙂
2. Блогпост на хабре про модель Prod2Vec. Модель, которую я делал в Озоне, чтобы смешивать три сущности (картинка, название, атрибуты) товара в один вектор.
3. Выступление на митапе Aliexpress, где я как раз рассказывал про Prod2Vec.
4. Блогпост на хабре про Real-time matching. Более инженерная статья про наш длительный переход из оффлайн подхода в онлайн в задаче матчинга товаров (тоже в Озоне).
5. Статья со времен работы в лаборатории Huawei, где я занимался обучением с подкреплением. Мы изучали on-policy алгоритмы в разрезе снижения дисперсии и даже придумали свой. Кстати, PPO, который в основном используется в RLHF, — тоже on-policy.
6. Выступление на Datafest 2023 с воркшопом по LLM + RLHF.
7. Блогпост на хабре про LLM агентов.
8. Блогпост от нашей команды в Nebius, где мы рассказываем про критиков (Verifiers) для SWE-агентов
Список будет пополняться.
1. Мой LinkedIn. Несколько раз в месяц пишу туда разборы статей, которые мне понравились, плюс иногда что-то от себя. Добавляйтесь в контакты 🙂
2. Блогпост на хабре про модель Prod2Vec. Модель, которую я делал в Озоне, чтобы смешивать три сущности (картинка, название, атрибуты) товара в один вектор.
3. Выступление на митапе Aliexpress, где я как раз рассказывал про Prod2Vec.
4. Блогпост на хабре про Real-time matching. Более инженерная статья про наш длительный переход из оффлайн подхода в онлайн в задаче матчинга товаров (тоже в Озоне).
5. Статья со времен работы в лаборатории Huawei, где я занимался обучением с подкреплением. Мы изучали on-policy алгоритмы в разрезе снижения дисперсии и даже придумали свой. Кстати, PPO, который в основном используется в RLHF, — тоже on-policy.
6. Выступление на Datafest 2023 с воркшопом по LLM + RLHF.
7. Блогпост на хабре про LLM агентов.
8. Блогпост от нашей команды в Nebius, где мы рассказываем про критиков (Verifiers) для SWE-агентов
Список будет пополняться.
👍11🔥7
Пока писал пост на тему “Должен ли ML инженер знать, как работают потоки и процессы в питоне”, решил посмотреть на статистику LinkedIn постов за все время (регулярно я начал выкладывать туда 5 месяцев назад). Для сравнения, в среднем каждый пост набирает сейчас ~2-4к просмотров, но стоило добавить в название Interview questions on transformers, и это число выросло до …50к. Итак:
1. Interview questions on transformers.
2. Обзор на статью про архитектуру Retentive Network.
3. Top 10 questions from ML interviews.
1. Interview questions on transformers.
2. Обзор на статью про архитектуру Retentive Network.
3. Top 10 questions from ML interviews.
👍4🔥3😁1
Отличная статья, где автор в деталях разбирает, на что уходит время во время инференса трансформеров. Если хочется понять все подробно, то можно на несколько часов уйти с головой. Рассказ строится вокруг Flops vs Memory boundness (которые зависят от модели, железа, формата инференса) и ситуаций, когда инференс упирается либо в одно, либо в другое. Автор разбирает разные ситуации (например, использование KV cache, Tensor/Pipeline parallelism, разный размер batch_size) и показывает, как и что меняется в зависимости от разных настроек. Плюс к этому дает некоторый фреймворк, по которому можно прикинуть суммарную latency LLM.
Сказал бы, что статья далеко не простая, но если вы занимаетесь деплоем LLM, то советую посмотреть.
В конце есть вопросы, чтобы проверить себя💃
Сказал бы, что статья далеко не простая, но если вы занимаетесь деплоем LLM, то советую посмотреть.
В конце есть вопросы, чтобы проверить себя
Please open Telegram to view this post
VIEW IN TELEGRAM
kipply's blog
Transformer Inference Arithmetic | kipply's blog
kipply's blog about stuff she does or reads about or observes
✍9👍5
Вчера вышла интересная статья YaRN про еще один способ увеличения контекста в LLM (точнее в тех моделях, которые используют метод RoPE для позиционного кодирования, например, LLaMa-2) до 64k, 128k токенов. Направление сейчас популярное, ведь такая штука позволяет поместить в контекст среднюю книгу или же иметь очень длинную историю сообщений. В статье графики выглядят впечатляюще и самое крутое, что можно уже брать модельки с hugging face.
В отличие от предыдущих работ, где модифицировали только RoPE (Rotary Positional Encodings, по сути это поворот вектора в пространстве на некоторый угол, который зависит от позиции), авторы заметили, что изменения в позиционном кодировании сильно влияют на распределение attention скоров после софтмакса. Поэтому помимо прочего добавили температуру, которой можно это распределение контролировать. Причем сделано это по-хитрому, чтобы не менять код самого attention и соответственно использовать все существующие оптимизации. Как и другие методы, YaRN требует дообучения на данных с длинным контекстом, хотя и в небольшом количестве (~0.1% от данных претрейна). Единственный вопрос — сколько памяти требуется для инференса таких моделек.
В отличие от предыдущих работ, где модифицировали только RoPE (Rotary Positional Encodings, по сути это поворот вектора в пространстве на некоторый угол, который зависит от позиции), авторы заметили, что изменения в позиционном кодировании сильно влияют на распределение attention скоров после софтмакса. Поэтому помимо прочего добавили температуру, которой можно это распределение контролировать. Причем сделано это по-хитрому, чтобы не менять код самого attention и соответственно использовать все существующие оптимизации. Как и другие методы, YaRN требует дообучения на данных с длинным контекстом, хотя и в небольшом количестве (~0.1% от данных претрейна). Единственный вопрос — сколько памяти требуется для инференса таких моделек.
GitHub
yarn/paper at master · jquesnelle/yarn
YaRN: Efficient Context Window Extension of Large Language Models - jquesnelle/yarn
👍6
Должен ли ML инженер понимать принцип работы процессов/потоков в питоне?
Очень часто в обсуждениях вопросов с собеседования ML инженеров слышу споры о том, нужно ли спрашивать про принцип работы питона, в частности про потоки/процессы/GIL и прочее. Разумеется, это зависит от задач, которыми предстоит заниматься в команде. Но вот вам пример, который встречался мне несколько раз в разных компаниях, где за 10 минут можно было получить кратный прирост в скорости:
Есть пайплайн на pyspark, который скачивает картинки с помощью user-defined function (udf). udf применяется построчно и параллельность тут достигается только за счет нескольких воркеров.
Теперь меняем udf на pandas_udf (обработка идет сразу чанками, pd.Series) и внутри уже скачиваем картинки потоками. Несколько измененных строчек кода и пайплайн работает в ~5-10 раз быстрее.
Пайплайн на спарке можно заменить и на обычный питон скрипт, смысл останется тем же.
Очень часто в обсуждениях вопросов с собеседования ML инженеров слышу споры о том, нужно ли спрашивать про принцип работы питона, в частности про потоки/процессы/GIL и прочее. Разумеется, это зависит от задач, которыми предстоит заниматься в команде. Но вот вам пример, который встречался мне несколько раз в разных компаниях, где за 10 минут можно было получить кратный прирост в скорости:
Есть пайплайн на pyspark, который скачивает картинки с помощью user-defined function (udf). udf применяется построчно и параллельность тут достигается только за счет нескольких воркеров.
Теперь меняем udf на pandas_udf (обработка идет сразу чанками, pd.Series) и внутри уже скачиваем картинки потоками. Несколько измененных строчек кода и пайплайн работает в ~5-10 раз быстрее.
Пайплайн на спарке можно заменить и на обычный питон скрипт, смысл останется тем же.
👍8🤔2🤡1
Совсем недавно Georgi Gerganov, создатель ggml, показал инференс 34B Llama2 со скоростью >20 токенов в секунду на M2 ultra (а потом и инференс 70B с 15 токенов в секунду). Andrej Karpathy написал в твиттере комментарий, объясняя, за счет чего это работает, советую почитать. Там все те же аспекты, связанные с flops/memory boundness, о которых я писал ранее здесь. Однако, применяется еще один очень интересный трюк - использование второй, быстрой draft модели для генерации предварительной последовательности-кандидата. В процессе инференса основной модели эта последовательность может быть обработана в батчевом режиме, что позволяет пропускать токены, совпадающие с прогнозами draft модели. Этот метод оказывается эффективным по следующим причинам:
1. Обработка батча занимает почти столько же времени, сколько и обработка одного токена (привет, memory bandwidth).
2. Большая часть токенов, предсказанных draft моделью, оказывается верной, так как они легко угадываемы (acceptance rate может быть 80-100%).
3. Если прогнозы draft модели и основной модели различаются, скорость инференса возвращается к исходной.
1. Обработка батча занимает почти столько же времени, сколько и обработка одного токена (привет, memory bandwidth).
2. Большая часть токенов, предсказанных draft моделью, оказывается верной, так как они легко угадываемы (acceptance rate может быть 80-100%).
3. Если прогнозы draft модели и основной модели различаются, скорость инференса возвращается к исходной.
🔥8👍3
Есть модели/статьи/архитектуры, в которых особенно интересно разбираться и думать, как они смогли перевернуть сферу применения. Одной из таких моделей является AlphaFold2, которая предсказывает 3D структура белка по последовательности аминокислот. Важно это потому, что структура белка практически полностью определяет его функцию, а функции белков в нашем организме сосчитать сложно. При этом экспериментально процесс очень долгий, дорогой и нестабильный.
Наконец-то нашел время, чтобы хорошенько разобраться с этой моделью; из материалов помимо основной статьи рекомендую лекцию от исследователя из DeepMind и классный блогпост. Блогпост рекомендую прочитать самим, но постарался выделить какие-то главные интересные моменты с точки зрения ML:
1. На вход мы подаем две сущности:
a. Pair representation - это тензор размера N_seq x N_seq x n_features, где N_seq - размер последовательности аминокислот, а features - попарные фичи о взаимодействии аминокислот друг с другом, которые мы можем посчитать заранее.
b. MSA (multi aligned sequence) - это батч разных последовательностей, где первая последовательность - исходная, а остальные найдены из некоторой базы с помощью алгоритма поиска соседей. Мотивация здесь такая, что похожие последовательности могут дать полезную информацию о нашей текущей.
2. Энкодер модели называется Evoformer, он обрабатывает эти два инпута, передавая информацию от одного к другому. Делается это либо через attention, либо через операцию векторного произведения. В MSA авторы используют два attention: построчный (внутри последовательности) и поколоночный (между последовательностями), а вот в pair representation - triangle attention. Triangle attention - это попытка внести в модель некоторый inductive bias о том, что если 3 точки соединены в пространстве, то должно выполняться неравенство треугольника. Поэтому attention выполняется там по всем парам, которые могут быть соединены в такие структуры.
3. Вторая часть, назовем ее декодер, берет представления Evoformer и предсказывает уже необходимые координаты аминокислот в пространстве. Там очень много нюансов и эвристик, но тоже есть свой интересный attention слой - IPA, который инвариантен относительно перемещений и поворотов в пространстве.
4. Общий лосс для модели - взвешенная сумма лоссов из разных ее частей: там и финальный предикт (насколько мы отклоняемся от правильной структуры), и masked MSA (а-ля MLM, маскируем аминокислоты в последовательности и пытаемся их предсказать), и distogramm loss, где смотрим на попарные расстояния.
5. Во время обучения использовались техники дистилляции, а именно Noisy Student. Это связано с тем, что известных структур белков для обучения не так уж и много (в связи с тем, что их неимоверно трудно получить экспериментальным путем) и хочется данные для трейна как-то увеличивать.
Много нюансов тут понятно не покрыто, так что, если интересно, посмотрите приложенные материалы.
Наконец-то нашел время, чтобы хорошенько разобраться с этой моделью; из материалов помимо основной статьи рекомендую лекцию от исследователя из DeepMind и классный блогпост. Блогпост рекомендую прочитать самим, но постарался выделить какие-то главные интересные моменты с точки зрения ML:
1. На вход мы подаем две сущности:
a. Pair representation - это тензор размера N_seq x N_seq x n_features, где N_seq - размер последовательности аминокислот, а features - попарные фичи о взаимодействии аминокислот друг с другом, которые мы можем посчитать заранее.
b. MSA (multi aligned sequence) - это батч разных последовательностей, где первая последовательность - исходная, а остальные найдены из некоторой базы с помощью алгоритма поиска соседей. Мотивация здесь такая, что похожие последовательности могут дать полезную информацию о нашей текущей.
2. Энкодер модели называется Evoformer, он обрабатывает эти два инпута, передавая информацию от одного к другому. Делается это либо через attention, либо через операцию векторного произведения. В MSA авторы используют два attention: построчный (внутри последовательности) и поколоночный (между последовательностями), а вот в pair representation - triangle attention. Triangle attention - это попытка внести в модель некоторый inductive bias о том, что если 3 точки соединены в пространстве, то должно выполняться неравенство треугольника. Поэтому attention выполняется там по всем парам, которые могут быть соединены в такие структуры.
3. Вторая часть, назовем ее декодер, берет представления Evoformer и предсказывает уже необходимые координаты аминокислот в пространстве. Там очень много нюансов и эвристик, но тоже есть свой интересный attention слой - IPA, который инвариантен относительно перемещений и поворотов в пространстве.
4. Общий лосс для модели - взвешенная сумма лоссов из разных ее частей: там и финальный предикт (насколько мы отклоняемся от правильной структуры), и masked MSA (а-ля MLM, маскируем аминокислоты в последовательности и пытаемся их предсказать), и distogramm loss, где смотрим на попарные расстояния.
5. Во время обучения использовались техники дистилляции, а именно Noisy Student. Это связано с тем, что известных структур белков для обучения не так уж и много (в связи с тем, что их неимоверно трудно получить экспериментальным путем) и хочется данные для трейна как-то увеличивать.
Много нюансов тут понятно не покрыто, так что, если интересно, посмотрите приложенные материалы.
👍5🔥1
Forwarded from Градиент обреченный (Sergei Averkiev)
🔺 Новые открытые LLM #ml_news
Вот так пролетает пара недель, а за это время столько всего нового вышло.
➕ Persimmon 8B
Adept выпустили открытую языковую модель под фруктовым названием Persimmon с 8 миллиардами параметров. Контекст у модели 16k токенов, причем обучалась она сразу на такой длине, а не на более короткой с последующим расширением. Видела она 737B токенов (75% текст, 25% код). Выглядит необычно, будем смотреть.
Пост, GitHub.
➕ Falcon 180B
TII из Арабских Эмиратов продолжают обучать и выкладывать свои модели. На этот раз обучили огромную модель на датасете REFINEDWEB. Показали этой модели аж 3.5T токенов. В моменте получилась самая лучшая открытая модель, которая бьет Llama 70B и ChatGPT-3.5 на MMLU.
Пост, HF, Демо
➕ Code Llama 7B, 13B, 34B
Meta дообучила модели Llama 2 дополнительно на 500B токенов кода. Затем дополнительно сделали Code Llama – Python (+100B токенов) и Code Llama – Instruct. Получились лучшие на сегодняшний день PLP модели. 7B и 13B обучались с FIM (могут заполнять код в середине документа).
Пост, GitHub
➕ Qwen-VL 7B (+ Chat version)
Китайские исследователи обучили мультимодальную сеть на основе своей же Qwen 7B, которая видела 2.2T токенов. За счет большого количества увиденных токенов (в основном это китайский и английский) модель бьет все аналогичные картиночно-текстовые модели. Для Chat версии собрали Colab.
GitHub, HF, Colab
Вот так пролетает пара недель, а за это время столько всего нового вышло.
➕ Persimmon 8B
Adept выпустили открытую языковую модель под фруктовым названием Persimmon с 8 миллиардами параметров. Контекст у модели 16k токенов, причем обучалась она сразу на такой длине, а не на более короткой с последующим расширением. Видела она 737B токенов (75% текст, 25% код). Выглядит необычно, будем смотреть.
Пост, GitHub.
➕ Falcon 180B
TII из Арабских Эмиратов продолжают обучать и выкладывать свои модели. На этот раз обучили огромную модель на датасете REFINEDWEB. Показали этой модели аж 3.5T токенов. В моменте получилась самая лучшая открытая модель, которая бьет Llama 70B и ChatGPT-3.5 на MMLU.
Пост, HF, Демо
➕ Code Llama 7B, 13B, 34B
Meta дообучила модели Llama 2 дополнительно на 500B токенов кода. Затем дополнительно сделали Code Llama – Python (+100B токенов) и Code Llama – Instruct. Получились лучшие на сегодняшний день PLP модели. 7B и 13B обучались с FIM (могут заполнять код в середине документа).
Пост, GitHub
➕ Qwen-VL 7B (+ Chat version)
Китайские исследователи обучили мультимодальную сеть на основе своей же Qwen 7B, которая видела 2.2T токенов. За счет большого количества увиденных токенов (в основном это китайский и английский) модель бьет все аналогичные картиночно-текстовые модели. Для Chat версии собрали Colab.
GitHub, HF, Colab
www.adept.ai
Releasing Persimmon-8B
We’re open-sourcing Persimmon-8B, the most powerful fully permissively-licensed language model with <10 billion parameters.
👍4🔥1
Кстати, в тему AlphaFold, белков, медиаторов и биологии в целом очень рекомендую курс «Химия мозга» от Вячеслава Дубынина. Если хотите лучше понимать подкасты Andrew Huberman, да и в целом, как и что работает в мозге, то самое то. Первые три лекции про общие принципы работы нейронов, белков, потенциалов действия, выработки медиаторов, а дальше идет уже разбор конкретных веществ (дофамин, серотонин и тд)
Есть также лекции на ютубе
Есть также лекции на ютубе
Лекции учёных МГУ
Химия мозга
В рамках курса студенты знакомятся с принципами работы нервной системы на структурном, клеточном и молекулярном уровнях
❤8👍4🔥1
Хочется рассказать про один способ использования трансформеров в проде, который, как мне показалось, не все знают.
Недавно обсуждали со знакомым, как ребята в поиске/ранжировании пытались докатить онлайн трансформер до прода и застряли там на довольно длительное время: начали с ONNX на цпу, поняли, что слишком медленно, затем подняли отдельный инстанс с гпу (со всеми организационными моментами), попробовали triton inference server и прочие методы. Где-то выходило дорого, где-то муторно, а релизить уже нужно было скоро. Что же в итоге заработало?
1. Посмотрели по трафику на топ Х запросов за последнее время и для них в оффлайне рассчитали выдачу тяжелым трансформером, который показывал лучшие метрики.
2. В сервис затащили маппинг из запроса в уже готовую выдачу. Маппинг при этом можно регулярно обновлять.
3. Для входящего запроса проверяем его наличие в маппинге. Если нет, то делаем fallback на модель попроще или какую-то эвристику.
В итоге команда запустила A/B тест и быстро получила хорошие лифты. Fallback при этом происходил довольно редко. Сам же инференс (если его можно так назвать) работает супер быстро и требует только небольшого количества памяти для хранения отображения запрос-выдача.
Недавно обсуждали со знакомым, как ребята в поиске/ранжировании пытались докатить онлайн трансформер до прода и застряли там на довольно длительное время: начали с ONNX на цпу, поняли, что слишком медленно, затем подняли отдельный инстанс с гпу (со всеми организационными моментами), попробовали triton inference server и прочие методы. Где-то выходило дорого, где-то муторно, а релизить уже нужно было скоро. Что же в итоге заработало?
1. Посмотрели по трафику на топ Х запросов за последнее время и для них в оффлайне рассчитали выдачу тяжелым трансформером, который показывал лучшие метрики.
2. В сервис затащили маппинг из запроса в уже готовую выдачу. Маппинг при этом можно регулярно обновлять.
3. Для входящего запроса проверяем его наличие в маппинге. Если нет, то делаем fallback на модель попроще или какую-то эвристику.
В итоге команда запустила A/B тест и быстро получила хорошие лифты. Fallback при этом происходил довольно редко. Сам же инференс (если его можно так назвать) работает супер быстро и требует только небольшого количества памяти для хранения отображения запрос-выдача.
🔥17🤔2
Несколько месяцев назад вышла интересная статья Textbooks Are All You Need от ребят из Microsoft, где они представили модель phi-1, заточенную на написание кода. В ней всего 1.3B параметров (+ обучалась она на суммарно меньшем кол-ве токенов), но при этом на бенчмарке HumanEval она бьет большинство огромных моделей на десятки миллиардов параметров, включая gpt-3.5. Почитайте хороший обзор от Игоря Котенкова в Singularis. Вчера же появилась статья Textbooks Are All You Need II: phi-1.5 technical report, где авторы выпустили, как нетрудно догадаться, модель phi-1.5. Она так же содержит 1.3B параметров, только на этот раз ориентирована на язык в целом, то есть на решение задач common sense reasoning и language understanding. Модель видела 150B токенов во время обучения, что по современным меркам смешно.
Такие результаты удается получить благодаря тщательному отбору и подготовки данных, при этом большая часть датасета сгенерирована моделями тяжелее (например, gpt-3.5/gpt-4) со специально подобранными промптами. Авторы пишут: Our training data for phi-1.5 is a combination of phi-1’s training data (7B tokens) and newly created synthetic, “textbook-like” data (roughly 20B tokens) for the purpose of teaching common sense reasoning and general knowledge of the world (science, daily activities, theory of mind, etc.). We carefully selected 20K topics to seed the generation of this new synthetic data. In our generation prompts, we use samples from web datasets for diversity. К сожалению, сами промпты и детали сбора синтетики авторы не выложили😢
В любом случае, такие работы напоминают нам, насколько данные принимают важное участие в обучении языковых моделей. Уже интересно посмотреть на результат такого обучения модели с 7B параметров. Можно уже брать веса с HF и играться.
Такие результаты удается получить благодаря тщательному отбору и подготовки данных, при этом большая часть датасета сгенерирована моделями тяжелее (например, gpt-3.5/gpt-4) со специально подобранными промптами. Авторы пишут: Our training data for phi-1.5 is a combination of phi-1’s training data (7B tokens) and newly created synthetic, “textbook-like” data (roughly 20B tokens) for the purpose of teaching common sense reasoning and general knowledge of the world (science, daily activities, theory of mind, etc.). We carefully selected 20K topics to seed the generation of this new synthetic data. In our generation prompts, we use samples from web datasets for diversity. К сожалению, сами промпты и детали сбора синтетики авторы не выложили
В любом случае, такие работы напоминают нам, насколько данные принимают важное участие в обучении языковых моделей. Уже интересно посмотреть на результат такого обучения модели с 7B параметров. Можно уже брать веса с HF и играться.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Наверняка вы слышали про mojo 🔥 — появляющийся язык, который в огромное количество раз быстрее питона, использует некоторые концепции из раста и так далее. Так вот, уже появился инференс llama2.mojo, где по замерам скорость быстрее, даже чем llama2.c с флагом runfast, но без OMP (265 tok/s vs 230 tok/s). Можно детальнее почитать репо и даже поднять свою демку с помощью gradio.
🔥5🤯4👍2👎1💩1
Решил сделать небольшой обзор работ, посвященных снижению квадратичной сложности attention в трансформерах (здесь имеется в виду квадратичная зависимость именно от длины последовательности). Это ограничение является довольно серьезным при работе с длинными контекстами, так что работ накопилось довольно много. Где-то авторы снижают сложность по времени, где-то по памяти, а где-то и там, и там.
Linformer:
На секунду вспомним, из-за чего появляется квадратичная сложность — из-за умножения Q на K^T. В таком случае давайте проектировать матрицы K и V в некоторое меньшее пространство с константной размерностью. Тогда умножение будет происходить на матрицу, которая не зависит от длины контекста → уходим от квадрата в сложности. Линейная зависимость по времени и по памяти.
AFT (Attention Free Transformer):
Здесь авторы вообще ушли от классического понятия attention, когда мы считаем скоры между Q и K. Сделали они это следующим образом: вместо Q в attention учим матрицу w размера TxT (T — максимальный размер контекста), элементы которой будем прибавлять к K. Как пишут авторы, w — is the learned pair-wise position biases, то есть, грубо говоря, элемент в матрице на позиции (1,3) — вес, с которым позиция 1 должна обратить внимание на позицию 3. Идея такого представления заключается в том, что оно служит некоторым gating mechanism, указывая на какие позиции обратить больше внимания. Здесь линейная зависимость по памяти (не нужно хранить большую матрицу attention scores), но квадратичная по времени. Однако, есть модификации, чтобы добиться линии и по времени (например, AFT-local).
Linformer:
На секунду вспомним, из-за чего появляется квадратичная сложность — из-за умножения Q на K^T. В таком случае давайте проектировать матрицы K и V в некоторое меньшее пространство с константной размерностью. Тогда умножение будет происходить на матрицу, которая не зависит от длины контекста → уходим от квадрата в сложности. Линейная зависимость по времени и по памяти.
AFT (Attention Free Transformer):
Здесь авторы вообще ушли от классического понятия attention, когда мы считаем скоры между Q и K. Сделали они это следующим образом: вместо Q в attention учим матрицу w размера TxT (T — максимальный размер контекста), элементы которой будем прибавлять к K. Как пишут авторы, w — is the learned pair-wise position biases, то есть, грубо говоря, элемент в матрице на позиции (1,3) — вес, с которым позиция 1 должна обратить внимание на позицию 3. Идея такого представления заключается в том, что оно служит некоторым gating mechanism, указывая на какие позиции обратить больше внимания. Здесь линейная зависимость по памяти (не нужно хранить большую матрицу attention scores), но квадратичная по времени. Однако, есть модификации, чтобы добиться линии и по времени (например, AFT-local).
🔥13❤1
Продолжение
Reformer:
В этой работе используется очень известный алгоритм LSH хэширования. Сделаем Q=K и будем с помощью LSH находить кластеры похожих эмбеддингов. В таком случае attention скоры нам нужно будет посчитать только внутри этих кластеров. С одной стороны, сложность уменьшается до логлинейной (n * logn), но на практике внутри О большого сидит константа 128^2. Кстати, похожий метод используется в одном из алгоритмов ANN.
Performer:
Авторы доказывают, что результат attention (softmax(Q x K^T) можно аппроксимировать произведением двух матриц. И собственно эту аппроксимацию модель и выучивает. Доказательство не самое простое, но идея заключается в использовании kernel methods. Если такая аппроксимация у нас есть (softmax(Q x K^T) ~ Q1 x K1^T), то мы можем сначала умножить K и V, а потом их результат умножить на Q (сложность из-за порядка таких умножений изменится, посмотрите картинку или выпишите размерности на листочке). Здесь линейная зависимость по времени и по памяти.
Не стоит забывать, что сложность attention зависит не только от длины контекста, но и от размера эмбеддинга. Здесь мы говорили только про первое. Метрики не привожу, их можно поглядеть в самих статьях, если интересно. Я написал далеко не про все работы, посвященные этим темам, — есть еще MEGA, Sparse Transformers, Longformer, MQA, GQA и другие. О них — возможно в следующих постах.
Reformer:
В этой работе используется очень известный алгоритм LSH хэширования. Сделаем Q=K и будем с помощью LSH находить кластеры похожих эмбеддингов. В таком случае attention скоры нам нужно будет посчитать только внутри этих кластеров. С одной стороны, сложность уменьшается до логлинейной (n * logn), но на практике внутри О большого сидит константа 128^2. Кстати, похожий метод используется в одном из алгоритмов ANN.
Performer:
Авторы доказывают, что результат attention (softmax(Q x K^T) можно аппроксимировать произведением двух матриц. И собственно эту аппроксимацию модель и выучивает. Доказательство не самое простое, но идея заключается в использовании kernel methods. Если такая аппроксимация у нас есть (softmax(Q x K^T) ~ Q1 x K1^T), то мы можем сначала умножить K и V, а потом их результат умножить на Q (сложность из-за порядка таких умножений изменится, посмотрите картинку или выпишите размерности на листочке). Здесь линейная зависимость по времени и по памяти.
Не стоит забывать, что сложность attention зависит не только от длины контекста, но и от размера эмбеддинга. Здесь мы говорили только про первое. Метрики не привожу, их можно поглядеть в самих статьях, если интересно. Я написал далеко не про все работы, посвященные этим темам, — есть еще MEGA, Sparse Transformers, Longformer, MQA, GQA и другие. О них — возможно в следующих постах.
🔥10❤2
Наверное, каждый, кто использовал chatGPT для решения задач или просто общения приходил к мысли, что сформулированный запрос (промпт) довольно сильно влияет на результат. В этом направлении есть огромное кол-во работ, где люди пытались придумать текст, который повлияет на ответ модели в лучшую сторону.
И вот несколько дней назад вышла любопытная статья о применении эволюционных алгоритмов совместно с LLM для поиска наилучшего промпта под конкретную задачу. Для тех, кто никак не может решить, использовать “Think step by step” или “Take a deep breath”. Алгоритм максимально простой: у нас есть популяция из N промптов, путем скрещиваний и мутаций мы можем получить набор их потомков. Далее считаем метрики для новых вариантов на отложенном датасете и из всего множества промптов оставляем top N. Эту операцию повторяем T эпох. Интересным здесь, на мой взгляд, является вопрос, как сделать операции скрещивания и мутации в дискретном пространстве текстов, при этом сохранив их читаемость и осмысленность. Тут и приходят на помощь LLMки, которые берут это на себя. Авторы рассмотрели два наиболее популярных алгоритма — Genetic Algorithm и Differential Evolution и адаптировали их для работы с промптами. На почти каждом из 9 датасетов из валидации удалось добиться лучших результатов по сравнению с другими методами, в том числе и ручной настройкой.
Отличительная черта этого метода заключается в том, что мы взаимодействуем с моделью как с black box — нам не нужен доступ к ее параметрам, градиентам и прочему. Это позволяет нам подбирать промпты, например, для gpt-3.5/4. Никакого файнтюнинга!💃
Примеры для разных задач можно посмотреть на картинке.
И вот несколько дней назад вышла любопытная статья о применении эволюционных алгоритмов совместно с LLM для поиска наилучшего промпта под конкретную задачу. Для тех, кто никак не может решить, использовать “Think step by step” или “Take a deep breath”. Алгоритм максимально простой: у нас есть популяция из N промптов, путем скрещиваний и мутаций мы можем получить набор их потомков. Далее считаем метрики для новых вариантов на отложенном датасете и из всего множества промптов оставляем top N. Эту операцию повторяем T эпох. Интересным здесь, на мой взгляд, является вопрос, как сделать операции скрещивания и мутации в дискретном пространстве текстов, при этом сохранив их читаемость и осмысленность. Тут и приходят на помощь LLMки, которые берут это на себя. Авторы рассмотрели два наиболее популярных алгоритма — Genetic Algorithm и Differential Evolution и адаптировали их для работы с промптами. На почти каждом из 9 датасетов из валидации удалось добиться лучших результатов по сравнению с другими методами, в том числе и ручной настройкой.
Отличительная черта этого метода заключается в том, что мы взаимодействуем с моделью как с black box — нам не нужен доступ к ее параметрам, градиентам и прочему. Это позволяет нам подбирать промпты, например, для gpt-3.5/4. Никакого файнтюнинга!
Примеры для разных задач можно посмотреть на картинке.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10🤯1
В продолжение предыдущего поста: если интересна тема промптов в целом, советую посмотреть Prompt Engineering Guide. Там разбираются сначала базовые вещи для генерации моделей и составления промптов, а дальше идет обзор существующих методов (CoT, Self-Consistency, ToT, ReAct, RAG и много чего еще), которые можно брать на вооружение. Причем это уже не только про промпты, а вообще про подходы к решению различных задач (RAG, например, активно используется для построения всяких Retrieval систем). Здорово, что авторы периодически обновляют материалы, в прошлый раз, когда смотрел, там не было Tree of Thoughts. В конце для особо интересующихся есть классная секция Risk & Misuses про различные атаки на модель (Prompt Injection, Prompt Leaking, Waluigi Effect и так далее)
www.promptingguide.ai
Prompt Engineering Guide | Prompt Engineering Guide
A Comprehensive Overview of Prompt Engineering
👍11✍1