Свежие сплетни из Твиттера про архитектуру GPT-4 👀
George Hotz на подкасте Latent Space вбросил, что GPT-4 – это Mixture of Experts, в котором 8 экспертов по 220B параметров (то есть 1.76T в совокупности). Каждый эксперт учился на своей выборке данных и заданий
Еще сказано что-то про «16 inferences» – пока нет единого мнения, что это значит конкретно. Что получают по два ответа откаждого эксперта, может быть? Это и есть some little trick?
Пока пара человек подтвердила, что слышала такие же слухи, так что might be true
George Hotz на подкасте Latent Space вбросил, что GPT-4 – это Mixture of Experts, в котором 8 экспертов по 220B параметров (то есть 1.76T в совокупности). Каждый эксперт учился на своей выборке данных и заданий
Еще сказано что-то про «16 inferences» – пока нет единого мнения, что это значит конкретно. Что получают по два ответа откаждого эксперта, может быть? Это и есть some little trick?
Пока пара человек подтвердила, что слышала такие же слухи, так что might be true
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17❤5
This media is not supported in your browser
VIEW IN TELEGRAM
Статья с демо, полным мемного потенциала – MotionGPT: Finetuned LLMs are General-Purpose Motion Generators
https://qiqiapink.github.io/MotionGPT/
Суть идеи: у нас есть 3D-модель человечка, которая совершает какие-то движения. Каждое движение мы можем прогнать через VAE-энкодер (предобученный) и получить какой-то токен, который будет означать текущую позу. Что-то типа ‘токен 259’ = ‘человек сидит с поднятыми руками и повернув голову’
Дальше мы берем языковую модель (тут LLaMA), подаем токен исходной позы и просим сгенерировать следующие motion tokens согласно описанию. Например, описание может быть ‘человечек скрючившись идет а потом прыгает’. Поскольку в датасете был ground truth (реальные последовательности движений, соответствующие описанию), то лосс просто кросс-энтропийный, ничего необычного. Тюнили кстати через LoRa всего 0.4% параметров
Дальше сгенерированные motion tokens разворачиваются обратно в позы через тот же VAE. Единственное заметное ограничение тут – поскольку все позы дискретные, то есть каждый токен означает какое-то конкретное движение из датасета, сложно как-то генерализоваться и совершать действия, которых в тренировочных данных не было
https://qiqiapink.github.io/MotionGPT/
Суть идеи: у нас есть 3D-модель человечка, которая совершает какие-то движения. Каждое движение мы можем прогнать через VAE-энкодер (предобученный) и получить какой-то токен, который будет означать текущую позу. Что-то типа ‘токен 259’ = ‘человек сидит с поднятыми руками и повернув голову’
Дальше мы берем языковую модель (тут LLaMA), подаем токен исходной позы и просим сгенерировать следующие motion tokens согласно описанию. Например, описание может быть ‘человечек скрючившись идет а потом прыгает’. Поскольку в датасете был ground truth (реальные последовательности движений, соответствующие описанию), то лосс просто кросс-энтропийный, ничего необычного. Тюнили кстати через LoRa всего 0.4% параметров
Дальше сгенерированные motion tokens разворачиваются обратно в позы через тот же VAE. Единственное заметное ограничение тут – поскольку все позы дискретные, то есть каждый токен означает какое-то конкретное движение из датасета, сложно как-то генерализоваться и совершать действия, которых в тренировочных данных не было
👍11🔥2❤1🤔1
LongNet: Scaling Transformers to 1,000,000,000 Tokens
https://arxiv.org/abs/2307.02486
Прошло полтора месяца с выхода работы от DeepPavlov, где они скейлили контекстное окно до 1 миллиона токенов, and now we’re here😐
Как всегда предлагают работать с главным боттленком трансформера, а именно с аттеншеном, который вычисляется за квадратичное время. Тут они «прореживают» матрицы K, Q, V, как показано на картинке – каждую из них делят на квадратные куски некоторой длины, и внутри каждого куска выбирают значение ряда и колонки с некоторым отступом. Очень похоже на то, как делают stride в сверточных сетках, когда проходятся по картинке
Далее для каждого квадратного куска аттеншн считается отдельно, а потом опредленным образом считается их взвешенная сумма
Помимо того, что можно ранжировать размер сегмента и dilution, в разных головах аттеншена эти сегменты также смещают, чтобы захватить больше разнообразной информации из исходных матриц
В эвалюейшн показывают, что модель ведет себя нормально и с контекстом 2к токенов, и с контекстом 32к (и при этом еще требует меньше компьюта и показывают ниже perplexity, чем обычный трансформер). Тестировали правда на одном датасете и не сравнивали ни с чем, кроме FlashAttention. Пока не хватает, имхо, оценки на разных задачах, качество смотрели только на the Stack (датасет с кодом) и только через перплексити, без других метрик
https://arxiv.org/abs/2307.02486
Прошло полтора месяца с выхода работы от DeepPavlov, где они скейлили контекстное окно до 1 миллиона токенов, and now we’re here
Как всегда предлагают работать с главным боттленком трансформера, а именно с аттеншеном, который вычисляется за квадратичное время. Тут они «прореживают» матрицы K, Q, V, как показано на картинке – каждую из них делят на квадратные куски некоторой длины, и внутри каждого куска выбирают значение ряда и колонки с некоторым отступом. Очень похоже на то, как делают stride в сверточных сетках, когда проходятся по картинке
Далее для каждого квадратного куска аттеншн считается отдельно, а потом опредленным образом считается их взвешенная сумма
Помимо того, что можно ранжировать размер сегмента и dilution, в разных головах аттеншена эти сегменты также смещают, чтобы захватить больше разнообразной информации из исходных матриц
В эвалюейшн показывают, что модель ведет себя нормально и с контекстом 2к токенов, и с контекстом 32к (и при этом еще требует меньше компьюта и показывают ниже perplexity, чем обычный трансформер). Тестировали правда на одном датасете и не сравнивали ни с чем, кроме FlashAttention. Пока не хватает, имхо, оценки на разных задачах, качество смотрели только на the Stack (датасет с кодом) и только через перплексити, без других метрик
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍6❤1
ToolLLM: Facilitating Large Language Models to Master 16000+ Real-world APIs
https://arxiv.org/abs/2307.16789
Казалось бы, зачем такая статья в мире, где есть LangChain / LLaMAIndex / ToolFormer? Ответов тут несколько:
1. Toolformer не особенно может генеразироваться, так как полагается только на те апи, которые были в обучающей выборке (а их было мало). LangChain же полагается на большие модели от OpenAI, которые плюс минуc могут генерализоваться, но которые при этом проприетарны, со всеми вытекающими из этого проблемами
2. И тот, и другой полагаются на Chain-of-Thought при решении сложных пошаговых задач, что вообще может быть неоптимально в таком сценарии. Так, например, модель может сразу пойти по ложному пути, генерируя ошибки на каждом следующем шаге. Плюс, так она не исследует другие возможные сценарии, как задачу можно решить, особенно когда нужно воспользоваться многими тулами последовательно. На моем опыте, LangChain тупит даже с довольно простыми запросами, например, поисследовать pandas датафрейм, возможно из-за достаточно простого промптинга
Собственно авторы прелагают обе эти проблемы зарешать а) собрав множество API с прилагающейся документацией и нагенерировав инструкицй по ним б) использовать стратегию промтипнга посложнее, чем CoT.
Вместо CoT предалагают depth-first search-based decision tree (я долгождала, когда кто-то начнет через decision trees промптить) – так модель генерирует вглубину дерево потенциальных действий. Если какая-то ветвь приводит к результату, ты мы отдаем ее как ответ. Если встречаем ошибку при исполнении API, то можно отступить на шаг назад к последнему успешному действию и пропробовать сгенерить что-то другое. Если в целом результат не получается, то можно вернуться к корню и пойти по другой совершенно ветке. Это может быть долго и дорого с точки зрения расходования API, но мне кажется для решения сложных задач это крутой подход
Что понравилось, в эвалюации сравнивают качество с ChatGPT на held-out данных, в том числе на целых категориях API (для решении других специфичных задач), которых модель не видела при обучении. Генерализуется она действительно неплохо, обходит ChatGPT + CoT, и подходит близко к ChatGPT + DFSBDT👏
https://arxiv.org/abs/2307.16789
Казалось бы, зачем такая статья в мире, где есть LangChain / LLaMAIndex / ToolFormer? Ответов тут несколько:
1. Toolformer не особенно может генеразироваться, так как полагается только на те апи, которые были в обучающей выборке (а их было мало). LangChain же полагается на большие модели от OpenAI, которые плюс минуc могут генерализоваться, но которые при этом проприетарны, со всеми вытекающими из этого проблемами
2. И тот, и другой полагаются на Chain-of-Thought при решении сложных пошаговых задач, что вообще может быть неоптимально в таком сценарии. Так, например, модель может сразу пойти по ложному пути, генерируя ошибки на каждом следующем шаге. Плюс, так она не исследует другие возможные сценарии, как задачу можно решить, особенно когда нужно воспользоваться многими тулами последовательно. На моем опыте, LangChain тупит даже с довольно простыми запросами, например, поисследовать pandas датафрейм, возможно из-за достаточно простого промптинга
Собственно авторы прелагают обе эти проблемы зарешать а) собрав множество API с прилагающейся документацией и нагенерировав инструкицй по ним б) использовать стратегию промтипнга посложнее, чем CoT.
Вместо CoT предалагают depth-first search-based decision tree (я долгождала, когда кто-то начнет через decision trees промптить) – так модель генерирует вглубину дерево потенциальных действий. Если какая-то ветвь приводит к результату, ты мы отдаем ее как ответ. Если встречаем ошибку при исполнении API, то можно отступить на шаг назад к последнему успешному действию и пропробовать сгенерить что-то другое. Если в целом результат не получается, то можно вернуться к корню и пойти по другой совершенно ветке. Это может быть долго и дорого с точки зрения расходования API, но мне кажется для решения сложных задач это крутой подход
Что понравилось, в эвалюации сравнивают качество с ChatGPT на held-out данных, в том числе на целых категориях API (для решении других специфичных задач), которых модель не видела при обучении. Генерализуется она действительно неплохо, обходит ChatGPT + CoT, и подходит близко к ChatGPT + DFSBDT
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥2
Сразу несколько статей про faithfulness и sycophancy моделей 🙃
Что вообще эти термины означают?
- faithfulness обычно определяют как способность модели выдавать правильный ответ, независимо от того, как мы видоизменяем промпт, если не меняется суть задачи (или хотя бы как способность выдавать тот же самый ответ независимо от деталей промпта). В общем, оценка того, насколько модель конститентна
- sycophancy – феномен, когда модели подстраиваются под мнение пользователя, даже если оно ошибочное
В целом если вы промптили хоть раз модели сами, вы и так догадываетесь, что модели могут быть unfaithful и баес в их ответ внести достаточно легко. Anthropic же решил измерить этот эффект и выпустил на эту тему две последовательные статьи.
В первой (Language Models Don’t Always Say What They Think: Unfaithful Explanations in Chain-of-Thought Prompting) на примере ChatGPT и Claude v1.0 они показывают, что при внесении баеса в промпт точность на задачах из BigBench может просесть от 5 до 36%. Баес они вносят двумя способами:
1) в промпт приписывают “I think the answer is <random_label> but I’m curious to hear what you think.”
2) делают few-shot промпт, где во всех примерах правильным ответом оказывается вариант А
Что примечательно, в этой же статье они показывают, что в задачках на социальные стереотипы CoT конститентно предсказывает, что преступление было совершено, например, черным мужчиной, а не белой женщиной, независимо от того, какие детали проишествия мы укажем в промпте и против кого мы пропишем больше улик😐
Во второй статье Measuring Faithfulness in Chain-of-Thought Reasoning они продолжают ковырять CoT на разных задачах, и из интересного находят то, что большие модели более восприимчивы к таким манипуляциям
Тему подхватил и DeepMind со статьей Simple synthetic data reduces sycophancy in large language models. Они подтверждают, что при скейлинге модели с большей вероятностью «подстраивается» под мнение юзера, и что instuction tuning это только усиливает. Например, Flan-PaLM-8B повторяет мнение юзера на 26.0% чаще, чем его базовая модель PaLM-8B, а скейлинг до 62B накидывает еще 20%. Больше этот эффект виден на задачах, где нет правильного ответа (i.e. вопросы касательно политики или философии), но даже в математических тестах, когда мнение в промпте объективно не верно, модели будут с ним все равно соглашаться
Предлагают они это лечить очень просто – намайнив немного синтетических данных, где к вопросу прилагается какое-либо мнение прользователя, которое однако не влияет на правильный ответ: то есть, есть примеры, где с юзером надо не согласиться
Что вообще эти термины означают?
- faithfulness обычно определяют как способность модели выдавать правильный ответ, независимо от того, как мы видоизменяем промпт, если не меняется суть задачи (или хотя бы как способность выдавать тот же самый ответ независимо от деталей промпта). В общем, оценка того, насколько модель конститентна
- sycophancy – феномен, когда модели подстраиваются под мнение пользователя, даже если оно ошибочное
В целом если вы промптили хоть раз модели сами, вы и так догадываетесь, что модели могут быть unfaithful и баес в их ответ внести достаточно легко. Anthropic же решил измерить этот эффект и выпустил на эту тему две последовательные статьи.
В первой (Language Models Don’t Always Say What They Think: Unfaithful Explanations in Chain-of-Thought Prompting) на примере ChatGPT и Claude v1.0 они показывают, что при внесении баеса в промпт точность на задачах из BigBench может просесть от 5 до 36%. Баес они вносят двумя способами:
1) в промпт приписывают “I think the answer is <random_label> but I’m curious to hear what you think.”
2) делают few-shot промпт, где во всех примерах правильным ответом оказывается вариант А
Что примечательно, в этой же статье они показывают, что в задачках на социальные стереотипы CoT конститентно предсказывает, что преступление было совершено, например, черным мужчиной, а не белой женщиной, независимо от того, какие детали проишествия мы укажем в промпте и против кого мы пропишем больше улик
Во второй статье Measuring Faithfulness in Chain-of-Thought Reasoning они продолжают ковырять CoT на разных задачах, и из интересного находят то, что большие модели более восприимчивы к таким манипуляциям
Тему подхватил и DeepMind со статьей Simple synthetic data reduces sycophancy in large language models. Они подтверждают, что при скейлинге модели с большей вероятностью «подстраивается» под мнение юзера, и что instuction tuning это только усиливает. Например, Flan-PaLM-8B повторяет мнение юзера на 26.0% чаще, чем его базовая модель PaLM-8B, а скейлинг до 62B накидывает еще 20%. Больше этот эффект виден на задачах, где нет правильного ответа (i.e. вопросы касательно политики или философии), но даже в математических тестах, когда мнение в промпте объективно не верно, модели будут с ним все равно соглашаться
Предлагают они это лечить очень просто – намайнив немного синтетических данных, где к вопросу прилагается какое-либо мнение прользователя, которое однако не влияет на правильный ответ: то есть, есть примеры, где с юзером надо не согласиться
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Тем временем уважаемые подписчики запилили крутую тулу для работы со статьями с arxiv (и biorxiv, и medrxiv, и chemrxiv) 🐱
https://synthical.com/
Какие есть приколы:
1. Можно сгенерить упрощенную версию статьи или ее отрывка и попросить объяснить термины
2. Есть хороший поиск по статьям: можно искать внутри большой категории (типа Computer Science) и настроить конкретные интересующие области (типа Artificial Intelligence)
3. Я очень люблю папочьки, поэтому меня порадовало, что можно делать закладки или добавлять статьи в коллекции, вместо того, чтобы спамить ими себе в сохраненные сообщения. И коллекции можно пошерить
4. Есть рекомендации на основе того, что вы там уже натыкали!
https://synthical.com/
Какие есть приколы:
1. Можно сгенерить упрощенную версию статьи или ее отрывка и попросить объяснить термины
2. Есть хороший поиск по статьям: можно искать внутри большой категории (типа Computer Science) и настроить конкретные интересующие области (типа Artificial Intelligence)
3. Я очень люблю папочьки, поэтому меня порадовало, что можно делать закладки или добавлять статьи в коллекции, вместо того, чтобы спамить ими себе в сохраненные сообщения. И коллекции можно пошерить
4. Есть рекомендации на основе того, что вы там уже натыкали!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥27❤5
How is LLaMa.cpp possible?
https://finbarr.ca/how-is-llama-cpp-possible/
Прикольный пост от Finbarr Timbers (рекомендую его Substack). Возможно вам тоже было интересно, как LLaMA может генерировать токены так быстро (~16 tok/sec) на ГПУ внутри одного лептопа, помимо, разумеется, очевидного ответа в виде квантизации и реализации на плюсах
Основной вывод поста – если вам нужно генерировать локально только один стрим токенов для личных нужд, а не обрабатывать кучу параллельных запросов через какой-нибудь LLM Server, гораздо важнее окажется memory bandwith, а не FLOPS
Memory bandwith – это то, насколько быстро мы можем перекладывать веса из RAM на сами ГПУ-чипы. При одном стриме токенов именно это становится основным органичением по скорости: вам приходится постоянно перекладывать веса ради генерации одного токена за раз, в то время как вычислений (FLOPS) у вас не так много. В случае с LLM Server было бы наоброт – тогда можно использовать подгруженные веса для обработки сразу нескольких запросов, utilization был бы выше, но все бы уперлось в то, насколько быстро вы можете проводить вычисления
Собственно, LLaMA.cpp работает за счет того, что MackBook M2 чипы гораздо меньше отстают от обычных ГПУ по memory bandwith, чем они отстают по FLOPS. Например, автор приводит такую статистику:
- A100: 1935 GB/s memory bandwidth, 1248 TOPS
- MacBook M2: 100 GB/s memory bandwidth, 7 TFLOPS
Как видно, по компьюту оставание примерно в 200 раз, а по операциям с памятью только в 20!
https://finbarr.ca/how-is-llama-cpp-possible/
Прикольный пост от Finbarr Timbers (рекомендую его Substack). Возможно вам тоже было интересно, как LLaMA может генерировать токены так быстро (~16 tok/sec) на ГПУ внутри одного лептопа, помимо, разумеется, очевидного ответа в виде квантизации и реализации на плюсах
Основной вывод поста – если вам нужно генерировать локально только один стрим токенов для личных нужд, а не обрабатывать кучу параллельных запросов через какой-нибудь LLM Server, гораздо важнее окажется memory bandwith, а не FLOPS
Memory bandwith – это то, насколько быстро мы можем перекладывать веса из RAM на сами ГПУ-чипы. При одном стриме токенов именно это становится основным органичением по скорости: вам приходится постоянно перекладывать веса ради генерации одного токена за раз, в то время как вычислений (FLOPS) у вас не так много. В случае с LLM Server было бы наоброт – тогда можно использовать подгруженные веса для обработки сразу нескольких запросов, utilization был бы выше, но все бы уперлось в то, насколько быстро вы можете проводить вычисления
Собственно, LLaMA.cpp работает за счет того, что MackBook M2 чипы гораздо меньше отстают от обычных ГПУ по memory bandwith, чем они отстают по FLOPS. Например, автор приводит такую статистику:
- A100: 1935 GB/s memory bandwidth, 1248 TOPS
- MacBook M2: 100 GB/s memory bandwidth, 7 TFLOPS
Как видно, по компьюту оставание примерно в 200 раз, а по операциям с памятью только в 20!
🔥16❤3👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Очень красивая демка у CoDeF: Content Deformation Fields for Temporally Consistent Video Processing
https://qiuyu96.github.io/CoDeF/
Идея из основная в том, что из видео берется изначальный кадр и к нему применятся нужный style transfer по промпту. А дальше мы отслеживаем, куда двигаются пиксели с их исходных позиций, и можем «протащить» эти изменения во все последующие фреймы. Соответственно, их сетка неплохо работает также с pixel tracking и даже с сегменатцией
За счет того, что мы не стилизуем каждый фрейм по отдельности, а как бы модифицируем один исходный кадр, видео получается гораздо более консистентное и плавное. Ограничение тут понятное – если у вас длинный видос, где куча разных сцен, стилизуете вы эти сцены также по-отдельности, и не факт, что они будут хорошо стыковаться между собой
https://qiuyu96.github.io/CoDeF/
Идея из основная в том, что из видео берется изначальный кадр и к нему применятся нужный style transfer по промпту. А дальше мы отслеживаем, куда двигаются пиксели с их исходных позиций, и можем «протащить» эти изменения во все последующие фреймы. Соответственно, их сетка неплохо работает также с pixel tracking и даже с сегменатцией
За счет того, что мы не стилизуем каждый фрейм по отдельности, а как бы модифицируем один исходный кадр, видео получается гораздо более консистентное и плавное. Ограничение тут понятное – если у вас длинный видос, где куча разных сцен, стилизуете вы эти сцены также по-отдельности, и не факт, что они будут хорошо стыковаться между собой
🔥12👍2🤩1
Хайпожорство или нет, но мне очень зашла эта статья Wired, особенно если за последний год вы еще не читали ничего про историю OpenAI и их свитч из нон-профита (хоть автор и очевидно очень комплиментарен по отношению к компании). Комментарии Суцкевера кстати было прикольно в материале увидеть
ps. maybe it’s just me, но мне бы лично очень интересно было прочитать хоть какой-то материал или интервью про Миру Мурати и как она там техническими делами заправляет. Такое ощущение, что ей особо никто не интересуется почему-то
https://t.me/ai_newz/2143
ps. maybe it’s just me, но мне бы лично очень интересно было прочитать хоть какой-то материал или интервью про Миру Мурати и как она там техническими делами заправляет. Такое ощущение, что ей особо никто не интересуется почему-то
https://t.me/ai_newz/2143
Telegram
эйай ньюз
А вот и обложка свежего выпуска журнала Wired.
Цитата из выпуска: "The young company sent shock waves around the world when it released ChatGPT. But that was just the start. The ultimate goal: Change everything. Yes. Everything."
Вот они рокзвезды ИИ по…
Цитата из выпуска: "The young company sent shock waves around the world when it released ChatGPT. But that was just the start. The ultimate goal: Change everything. Yes. Everything."
Вот они рокзвезды ИИ по…
❤6🤡4
Месяц назад вышел крутой выпуск подкаста Latent Space: The Mathematics of Training LLMs — with Quentin Anthony of Eleuther AI
https://www.latent.space/p/transformers-math#details
Советую конечно и сам эпизод, но рассказать хочу про два блогпоста, вокруг который выпуск крутится и которые я рекомендую в свободное время почитать
🙃 Transformer Inference Arithmetic
Тут про то, как ручками посчитать перфоманс трансформера и как его разложить на составляющие операции. Например:
- сколько flops уходит на то, чтобы подсчитывать kv cache и сколько это занимает от одного форвард пасса (спойлер, 1/6 компьюта! )? сколько занимает кэш для одного токена и сколько времени кэш позволяет cэкономить?
- когда мы memory bound, то есть упираемся в то, чтобы считать и хранить этот кэш, и с какого количества токенов мы уже flops bound? забавно, что для этого есть точное число – 208 токенов
- сколько вычислений и времени уходит на коммуникацию между частями модели, особенно если мы делаем model parallelism?
- как на это все влияет батч сайз?
💚 Transformer Math 101 от Eleuther AI
Здесь уже ресерчеры делятся по их словам basic math, которую нужно знать, чтобы мочь тренировать и инференсить модели. В отличие от первого поста, где вычисления теоретические и периодически довольно сложные, тут ребята делятся скорее формулами, которыми они пользутся в своей парактике, зачастую выведенные эмпирически. Например:
- сколько вычислений потребуется, чтобы обучить заданную модель на заданном датасете?(спойлер, 6*размер датасета в токенах*размер модели)
- сколько места займет модель, если захотите тренировать в mixed precision?
- сколько памяти будет занимать optimizer state во время тренировки?
- сколько будут занимать градиенты и активации?
- как это все изменится, если мы решим шардить оптимизатор через ZeRO-1, 2 или 3?
- а если распараллелим как-нибудь?
В подкасте Квентин собственно отвечает на вопросы по мотивам этих двух постов и поясняет за всякие нюансы. Hate to admit it но кучу вещей отсюда я либо не знала, либо не помнила, так что может быть будет полезно кому-то еще♥️
https://www.latent.space/p/transformers-math#details
Советую конечно и сам эпизод, но рассказать хочу про два блогпоста, вокруг который выпуск крутится и которые я рекомендую в свободное время почитать
Тут про то, как ручками посчитать перфоманс трансформера и как его разложить на составляющие операции. Например:
- сколько flops уходит на то, чтобы подсчитывать kv cache и сколько это занимает от одного форвард пасса (
- когда мы memory bound, то есть упираемся в то, чтобы считать и хранить этот кэш, и с какого количества токенов мы уже flops bound? забавно, что для этого есть точное число – 208 токенов
- сколько вычислений и времени уходит на коммуникацию между частями модели, особенно если мы делаем model parallelism?
- как на это все влияет батч сайз?
Здесь уже ресерчеры делятся по их словам basic math, которую нужно знать, чтобы мочь тренировать и инференсить модели. В отличие от первого поста, где вычисления теоретические и периодически довольно сложные, тут ребята делятся скорее формулами, которыми они пользутся в своей парактике, зачастую выведенные эмпирически. Например:
- сколько вычислений потребуется, чтобы обучить заданную модель на заданном датасете?
- сколько места займет модель, если захотите тренировать в mixed precision?
- сколько памяти будет занимать optimizer state во время тренировки?
- сколько будут занимать градиенты и активации?
- как это все изменится, если мы решим шардить оптимизатор через ZeRO-1, 2 или 3?
- а если распараллелим как-нибудь?
В подкасте Квентин собственно отвечает на вопросы по мотивам этих двух постов и поясняет за всякие нюансы. Hate to admit it но кучу вещей отсюда я либо не знала, либо не помнила, так что может быть будет полезно кому-то еще
Please open Telegram to view this post
VIEW IN TELEGRAM
www.latent.space
The Mathematics of Training LLMs — with Quentin Anthony of Eleuther AI
Listen now | Breaking down the viral Transformers Math 101 article and high performance distributed training for Transformers-based architectures (or "How I Learned to Stop Handwaving and Make the GPU go brrrrrr")
🔥27❤1
Как вы знаете, на этом скромном канале не бывает рекламы, но я оставляю за собой право вам чего-то рекомендовать, что мне самой кажется крутым. Вот сегодня несу вам пост про оверсемплинг из канала моего друга Димы. Дима пишет обычно про то, в чем я вообще не шарю и поэтому не затрагиваю тут – а именно про kaggle соревки, табличные данные, фичер инжиниринг и так далее. Так что если вам такого контента не хватает, ловите вот 💃
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Запрети мне псевдолейблить, запрети мне FP16 включать
#ICR #таблицы #аугментация
Попробуем короткий формат?
Первый из небанальных кандидатов для апсемплинга- Gaussian Noise Up-sampling. Идея простая:
0. Выбираем параметры нормального распределения для каждой фичи
1. Из класса, которого меньше, выбираем объект…
Попробуем короткий формат?
Первый из небанальных кандидатов для апсемплинга- Gaussian Noise Up-sampling. Идея простая:
0. Выбираем параметры нормального распределения для каждой фичи
1. Из класса, которого меньше, выбираем объект…
🔥8❤4
Representation Engineering: A Top-Down Approach to AI Transparency
https://arxiv.org/abs/2310.01405
Огромная статья с кучей авторов, но которую, как мне кажется, будут очень много обсуждать в ближайшее время. Тут мне хочется запилить лонгрид с техническими деталями их реализации (на мой вкус, именно описание метода они сделали очень мутное и кучу важной инфы запихнули далеко в аппендикс)
Начать надо с того, что статья претендует в целом на новый подход в объяснении генерации текста (в духе explainable AI) и в ее контроле. Обычно когда мы хотим что-то понять про работу сети, мы идем «снизу вверх» – то есть анализируем по отдельности нейроны или активации на разных слоях, чтобы понять, на что модель обращает внимание. Тут конечно на ум приходит недавний блогпост от OpenAI, где они пытались найти, за что отвечает каждый конкретный нейрон в GPT2
Авторы же предлагают, как понятно из названия, идти «сверху вниз» – не разбирать нейроны по отдельности, а смотреть на паттерны и репрезентации, которые скрыты в латентном пространстве модели. То есть, в каком-то смысле, мы хотим изучить мозговую активность сети целиком, когда она «думает» о каком-то концепте, и из этого МРТ скана пытаться вытащить репрезентации этого понятия. Собственно поэтому основной метод в статье и называется Linear Artificial Tomography (LAT)
В чем этот метод состоит? В качестве примера возьмем их анализ концепта Truthfulness, то есть способности корректно и фактологично отвечать на вопросы
1. Семплируем сколько-то примеров из TruthfulQA. Оборачиваем их в такой промпт:
Consider the amount of truthfulness in the following answer:
Question: <question>
Answer: <answer>
The amount of truthfulness in the answer is
Для decoder-only модели мы смотрим на репрезентацию для последнего токена, так как там и будет зашита какая-то информация о том, как модель себе представляет truthfulnes. На практике на самом деле бралось по 2 таких QA примера, при чем не обязательно так, что один пример был лживым, а другой правдивым. Для каждого из них мы берем hidden state, считаем разницу между ними и нормализуем. После этого шага получаем набор таких вот нормализованных векторов
Внимательный читатель на этом моменте спросит – а с какого слоя мы этот hidden state берем? Авторы об этом пишут как раз только в аппендиксе, но слой они выбирают вручную после серии экспериментов)))) как правило тот, который дает максимальное качество на валидации
2. Строим линейную модель
В качестве модели они взяли не абы что, а метод главных компонент(кто помнит этого добряка с пар статистики?) . Если очень кратко, то это метод позволяет сильно снизить размерность, сохранив наибольшее количество информации из исходных данных. На выходе мы получаем первую компоненту, которая и должна отражать интересующий нас концепт. Авторы это называют reading vector
3. На инференсе, когда нам прилетают новые промпты, мы так же берем hidden state последнего токена, нормализируем его, и берем dot product от него и reading vector. На выходе получаем скор truthfulness соответственно
По замерам авторов, это очень хорошо бустит качество на TruthfulQA, который вообще является сложным бенчмарком. Тем не менее, у меня к этому есть очень большие вопросы, так как в одном из экспериментов они берут ПЯТЬ тренировочных семплов и ПЯТЬ валидационных и на этом репортят качество (пруф на скрине, ряд посередине). И вообще это результаты одного из 15 прогонов их модели (!)
part 1/3
https://arxiv.org/abs/2310.01405
Огромная статья с кучей авторов, но которую, как мне кажется, будут очень много обсуждать в ближайшее время. Тут мне хочется запилить лонгрид с техническими деталями их реализации (на мой вкус, именно описание метода они сделали очень мутное и кучу важной инфы запихнули далеко в аппендикс)
Начать надо с того, что статья претендует в целом на новый подход в объяснении генерации текста (в духе explainable AI) и в ее контроле. Обычно когда мы хотим что-то понять про работу сети, мы идем «снизу вверх» – то есть анализируем по отдельности нейроны или активации на разных слоях, чтобы понять, на что модель обращает внимание. Тут конечно на ум приходит недавний блогпост от OpenAI, где они пытались найти, за что отвечает каждый конкретный нейрон в GPT2
Авторы же предлагают, как понятно из названия, идти «сверху вниз» – не разбирать нейроны по отдельности, а смотреть на паттерны и репрезентации, которые скрыты в латентном пространстве модели. То есть, в каком-то смысле, мы хотим изучить мозговую активность сети целиком, когда она «думает» о каком-то концепте, и из этого МРТ скана пытаться вытащить репрезентации этого понятия. Собственно поэтому основной метод в статье и называется Linear Artificial Tomography (LAT)
В чем этот метод состоит? В качестве примера возьмем их анализ концепта Truthfulness, то есть способности корректно и фактологично отвечать на вопросы
1. Семплируем сколько-то примеров из TruthfulQA. Оборачиваем их в такой промпт:
Consider the amount of truthfulness in the following answer:
Question: <question>
Answer: <answer>
The amount of truthfulness in the answer is
Для decoder-only модели мы смотрим на репрезентацию для последнего токена, так как там и будет зашита какая-то информация о том, как модель себе представляет truthfulnes. На практике на самом деле бралось по 2 таких QA примера, при чем не обязательно так, что один пример был лживым, а другой правдивым. Для каждого из них мы берем hidden state, считаем разницу между ними и нормализуем. После этого шага получаем набор таких вот нормализованных векторов
Внимательный читатель на этом моменте спросит – а с какого слоя мы этот hidden state берем? Авторы об этом пишут как раз только в аппендиксе, но слой они выбирают вручную после серии экспериментов)))) как правило тот, который дает максимальное качество на валидации
2. Строим линейную модель
В качестве модели они взяли не абы что, а метод главных компонент
3. На инференсе, когда нам прилетают новые промпты, мы так же берем hidden state последнего токена, нормализируем его, и берем dot product от него и reading vector. На выходе получаем скор truthfulness соответственно
По замерам авторов, это очень хорошо бустит качество на TruthfulQA, который вообще является сложным бенчмарком. Тем не менее, у меня к этому есть очень большие вопросы, так как в одном из экспериментов они берут ПЯТЬ тренировочных семплов и ПЯТЬ валидационных и на этом репортят качество (пруф на скрине, ряд посередине). И вообще это результаты одного из 15 прогонов их модели (!)
part 1/3
👍9❤3🔥3
я обучала одну модель
Representation Engineering: A Top-Down Approach to AI Transparency https://arxiv.org/abs/2310.01405 Огромная статья с кучей авторов, но которую, как мне кажется, будут очень много обсуждать в ближайшее время. Тут мне хочется запилить лонгрид с техническими…
Вообще LAT – не единственный и не самый сильный метод, который они представляют в статье
Второй бейзлайн они называют Contrast Vector, про него написано в статье всего 6 предложений (3 из которых находятся в аппендиксе), что максимально странно, с учетом того, что именно этот бейзлайн выдает у них лучшее качество. Я попробую описать то, что я поняла из этих 6 предложений, но могу и ошибаться
Здесь они дают пример с Honesty – способность модели не врать юзеру, не подстраиваться под его мнение и не искажать факты «осознанно» (подробнее про этот феномен можно почитать тут). Теперь мы берем 2 контрастивных промпта для QA: модель просят оценить, правдиво ли высказывание, и добавляют pretend you’re <an honest/a dishonest> person making statements about the world. На инференсе мы каким-то образом выбираем определенные слои замороженной сетки и на каждом вычисляем репрезентации этих двух промптов. Разница между этими репрезентациями видимо дает хороший сигнал (это и будет Contrast Vector), поэтому мы ее плюсуем к активациям на этом слое и двигаемся к следующему
Понятно, что такое решение очень сильно проигрывает по компьюту, поэтому авторы делают шаг вперед и придлагают обернуть это все в LoRA – это их третий бейзлайн. Теперь этот загадочный Contrast Vector никуда не плюсуют, а докидывают в лосс при файнтюне. Целиком алгоритм можно посмотреть на куске псевдокода, так как самого кода пока нет
Таким образом на инференсе у нас не оказывается проблем, хоть качество и немного проседает. К бенчмарку TruthfulQA MC1 нет нереканий, и тут они достаточно убедительно показывают, что их метод работает
part 2/3
Второй бейзлайн они называют Contrast Vector, про него написано в статье всего 6 предложений (3 из которых находятся в аппендиксе), что максимально странно, с учетом того, что именно этот бейзлайн выдает у них лучшее качество. Я попробую описать то, что я поняла из этих 6 предложений, но могу и ошибаться
Здесь они дают пример с Honesty – способность модели не врать юзеру, не подстраиваться под его мнение и не искажать факты «осознанно» (подробнее про этот феномен можно почитать тут). Теперь мы берем 2 контрастивных промпта для QA: модель просят оценить, правдиво ли высказывание, и добавляют pretend you’re <an honest/a dishonest> person making statements about the world. На инференсе мы каким-то образом выбираем определенные слои замороженной сетки и на каждом вычисляем репрезентации этих двух промптов. Разница между этими репрезентациями видимо дает хороший сигнал (это и будет Contrast Vector), поэтому мы ее плюсуем к активациям на этом слое и двигаемся к следующему
Понятно, что такое решение очень сильно проигрывает по компьюту, поэтому авторы делают шаг вперед и придлагают обернуть это все в LoRA – это их третий бейзлайн. Теперь этот загадочный Contrast Vector никуда не плюсуют, а докидывают в лосс при файнтюне. Целиком алгоритм можно посмотреть на куске псевдокода, так как самого кода пока нет
Таким образом на инференсе у нас не оказывается проблем, хоть качество и немного проседает. К бенчмарку TruthfulQA MC1 нет нереканий, и тут они достаточно убедительно показывают, что их метод работает
part 2/3
🔥4❤2
В целом впечатления от статьи очень двоякие. Мне показалось, что они сильно ударились в эксперименты и proof-of-concept, без того, чтобы достаточно внятно объяснить свой метод. Хотя сам подход делает смысл и действительно кажется предоставляет возможность двигать генерацию модели, куда только ни захочется
Помимо указанных мной тут Truthfulness и Honesty, они в лучших традициях политической мысли исследуют концепции Ethics and Power, а также их связь между собой (за бенчмарк MACHIAVELLI лайк). Разумеется есть отдельная секция про то, как они учат чатбота быть Harmless и нивелируют Bias, чтоб он не поддавался всяким джейлбрекам и не был сексистом. Есть секция, где модель учит концепциям разных эмоций, правда, качество они там не замеряют никак, только дают пару примеров. Особенно понравилась секция в конце, где они пробуют научить модель чему-то, что нельзя особо измерить, и звучит их промпт буквально:
Think about dogs when you answer the question.
И потом у модели можно включить или выключить собаковый режим😋
В целом есть еще куча дополнительных экспериментов и тестов, которые они проводят. Меня смущает только, что они не особо подсвечивают, что во всех этих экспериментах достаточно много работы надо проделать руками – например, при выборе слоя или линейной комбинации слоев, из которых лепить все эти репрезентации. Кстати про то, что это может быть и линейная комбинация, они упоминают только вскользь где-то в средине статьи. В каждом эксперименте получается так, что этот LAT скан надо отсматривать и проверять, получается ли из него что-то информативное, прогонять все это на бенчмарке и при необходимости повторять
Помимо указанных мной тут Truthfulness и Honesty, они в лучших традициях политической мысли исследуют концепции Ethics and Power, а также их связь между собой (за бенчмарк MACHIAVELLI лайк). Разумеется есть отдельная секция про то, как они учат чатбота быть Harmless и нивелируют Bias, чтоб он не поддавался всяким джейлбрекам и не был сексистом. Есть секция, где модель учит концепциям разных эмоций, правда, качество они там не замеряют никак, только дают пару примеров. Особенно понравилась секция в конце, где они пробуют научить модель чему-то, что нельзя особо измерить, и звучит их промпт буквально:
Think about dogs when you answer the question.
И потом у модели можно включить или выключить собаковый режим
В целом есть еще куча дополнительных экспериментов и тестов, которые они проводят. Меня смущает только, что они не особо подсвечивают, что во всех этих экспериментах достаточно много работы надо проделать руками – например, при выборе слоя или линейной комбинации слоев, из которых лепить все эти репрезентации. Кстати про то, что это может быть и линейная комбинация, они упоминают только вскользь где-то в средине статьи. В каждом эксперименте получается так, что этот LAT скан надо отсматривать и проверять, получается ли из него что-то информативное, прогонять все это на бенчмарке и при необходимости повторять
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍2❤1