Forwarded from rizzearch
Lightning Attention-2: A Free Lunch for Handling Unlimited Sequence Lengths in Large Language Models
помимо дипсика и квена, недавно успели еще китайцы выкатить очередную ллм - минимакс, уже по традиции которая является МоЕ + вводит гибрид софтмакс и линейного аттеншнов (кстати о махинациях с аттеншном мы уже ни раз писали)
при том второй аттеншн не абы какой, а лайтнинг (не тот слава Богу). в минимаксе используется первая версия, а почти одновременно с этой моделькой успела выйти и вторая версия
в чем вообще суть - вот у нас есть
softmax(Q @ K^T) @ V, где иннер продукт между запросами и ключами выдает матрицу seq_len x seq_len, что довольно много
→ приходит в голову идея линеаризовать аттеншн, то есть делаем просто из softmax(Q @ K^T) ~= phi(Q) @ phi(K^T) ⇒ [phi(Q) @ phi(K^T)] @ V, что можно переписать как из left product в right product
phi(Q) @ [ phi(K^T) @ V ], где не будем напрямую высчитывать seq_len x seq_len матрицу, а будет только hidden_dim x hidden_dim. profit?
не совсем, когда в дело приходит понятие каузальности, ибо тогда формула становится (phi убрал для удобства) снова left product
[Q @ K^T * causal_mask] @ V
снова получаем seq_len x seq_len момент, это дело можно исправить алгоритмом Linear Attention Right Product (на предпоследней фотке), но тогда встревает кумулятивная сумма, которую не распараллелить
ну и авторы довольно красивое решение предлагают в виде того, что как раз и называется Lightning Attention
- во-первых, го вычислять аттеншн по блокам, по которым и будет идти цикл как обычно
- а в каждом блоке будем одновременно вычислять аттеншны и первым, и вторым способом: через left product с каузальной маской будет вычисляться intra block (как я понял потому что он находится рядом с диагональными элементами как раз, где и нужна каузальная маска), а через right product inter block (который/которые не соприкасаются с диагональю и можно без каузальной маски их использовать, да еще и этот блок вычислить можно через накопленную кумулятивную сумму KV), а в конце просто просуммируем, не забыв обновить KV
- тут получаем трейдофф между лево- и правоматричным умножениями, который еще и к тому же нетяжело под хардвейр оптимизировать - перетаскивать поочередно блоки между High Bandwidth Memory & SRAM (последняя картинка для иллюстрации отсюда, по всем правилам - чем больше по памяти вмещается, тем медленее работает)
вторая же версия отличается тем, что в каузальную маску добавляется гипер, контролирующий меру затухания информации между токенами (похожее делали в ретнете и второй мамбе), по формулам конечно присутствует не только в маске для сохранения контистенси в реккурентных выражениях (хоть этот вариант алгоритма был и в первой версии в аппендиксе)
реализовано все на тритоне, метод в принципе применим не только к их ТрансНормеру
👀 link, code
помимо дипсика и квена, недавно успели еще китайцы выкатить очередную ллм - минимакс, уже по традиции которая является МоЕ + вводит гибрид софтмакс и линейного аттеншнов (кстати о махинациях с аттеншном мы уже ни раз писали)
при том второй аттеншн не абы какой, а лайтнинг (не тот слава Богу). в минимаксе используется первая версия, а почти одновременно с этой моделькой успела выйти и вторая версия
в чем вообще суть - вот у нас есть
softmax(Q @ K^T) @ V, где иннер продукт между запросами и ключами выдает матрицу seq_len x seq_len, что довольно много
→ приходит в голову идея линеаризовать аттеншн, то есть делаем просто из softmax(Q @ K^T) ~= phi(Q) @ phi(K^T) ⇒ [phi(Q) @ phi(K^T)] @ V, что можно переписать как из left product в right product
phi(Q) @ [ phi(K^T) @ V ], где не будем напрямую высчитывать seq_len x seq_len матрицу, а будет только hidden_dim x hidden_dim. profit?
не совсем, когда в дело приходит понятие каузальности, ибо тогда формула становится (phi убрал для удобства) снова left product
[Q @ K^T * causal_mask] @ V
снова получаем seq_len x seq_len момент, это дело можно исправить алгоритмом Linear Attention Right Product (на предпоследней фотке), но тогда встревает кумулятивная сумма, которую не распараллелить
ну и авторы довольно красивое решение предлагают в виде того, что как раз и называется Lightning Attention
- во-первых, го вычислять аттеншн по блокам, по которым и будет идти цикл как обычно
- а в каждом блоке будем одновременно вычислять аттеншны и первым, и вторым способом: через left product с каузальной маской будет вычисляться intra block (как я понял потому что он находится рядом с диагональными элементами как раз, где и нужна каузальная маска), а через right product inter block (который/которые не соприкасаются с диагональю и можно без каузальной маски их использовать, да еще и этот блок вычислить можно через накопленную кумулятивную сумму KV), а в конце просто просуммируем, не забыв обновить KV
- тут получаем трейдофф между лево- и правоматричным умножениями, который еще и к тому же нетяжело под хардвейр оптимизировать - перетаскивать поочередно блоки между High Bandwidth Memory & SRAM (последняя картинка для иллюстрации отсюда, по всем правилам - чем больше по памяти вмещается, тем медленее работает)
вторая же версия отличается тем, что в каузальную маску добавляется гипер, контролирующий меру затухания информации между токенами (похожее делали в ретнете и второй мамбе), по формулам конечно присутствует не только в маске для сохранения контистенси в реккурентных выражениях (хоть этот вариант алгоритма был и в первой версии в аппендиксе)
реализовано все на тритоне, метод в принципе применим не только к их ТрансНормеру
👀 link, code
group-telegram.com/nlpwanderer/91
Create:
Last Update:
Last Update:
Lightning Attention-2: A Free Lunch for Handling Unlimited Sequence Lengths in Large Language Models
помимо дипсика и квена, недавно успели еще китайцы выкатить очередную ллм - минимакс, уже по традиции которая является МоЕ + вводит гибрид софтмакс и линейного аттеншнов (кстати о махинациях с аттеншном мы уже ни раз писали)
при том второй аттеншн не абы какой, а лайтнинг (не тот слава Богу). в минимаксе используется первая версия, а почти одновременно с этой моделькой успела выйти и вторая версия
в чем вообще суть - вот у нас есть
softmax(Q @ K^T) @ V, где иннер продукт между запросами и ключами выдает матрицу seq_len x seq_len, что довольно много
→ приходит в голову идея линеаризовать аттеншн, то есть делаем просто из softmax(Q @ K^T) ~= phi(Q) @ phi(K^T) ⇒ [phi(Q) @ phi(K^T)] @ V, что можно переписать как из left product в right product
phi(Q) @ [ phi(K^T) @ V ], где не будем напрямую высчитывать seq_len x seq_len матрицу, а будет только hidden_dim x hidden_dim. profit?
не совсем, когда в дело приходит понятие каузальности, ибо тогда формула становится (phi убрал для удобства) снова left product
[Q @ K^T * causal_mask] @ V
снова получаем seq_len x seq_len момент, это дело можно исправить алгоритмом Linear Attention Right Product (на предпоследней фотке), но тогда встревает кумулятивная сумма, которую не распараллелить
ну и авторы довольно красивое решение предлагают в виде того, что как раз и называется Lightning Attention
- во-первых, го вычислять аттеншн по блокам, по которым и будет идти цикл как обычно
- а в каждом блоке будем одновременно вычислять аттеншны и первым, и вторым способом: через left product с каузальной маской будет вычисляться intra block (как я понял потому что он находится рядом с диагональными элементами как раз, где и нужна каузальная маска), а через right product inter block (который/которые не соприкасаются с диагональю и можно без каузальной маски их использовать, да еще и этот блок вычислить можно через накопленную кумулятивную сумму KV), а в конце просто просуммируем, не забыв обновить KV
- тут получаем трейдофф между лево- и правоматричным умножениями, который еще и к тому же нетяжело под хардвейр оптимизировать - перетаскивать поочередно блоки между High Bandwidth Memory & SRAM (последняя картинка для иллюстрации отсюда, по всем правилам - чем больше по памяти вмещается, тем медленее работает)
вторая же версия отличается тем, что в каузальную маску добавляется гипер, контролирующий меру затухания информации между токенами (похожее делали в ретнете и второй мамбе), по формулам конечно присутствует не только в маске для сохранения контистенси в реккурентных выражениях (хоть этот вариант алгоритма был и в первой версии в аппендиксе)
реализовано все на тритоне, метод в принципе применим не только к их ТрансНормеру
👀 link, code
помимо дипсика и квена, недавно успели еще китайцы выкатить очередную ллм - минимакс, уже по традиции которая является МоЕ + вводит гибрид софтмакс и линейного аттеншнов (кстати о махинациях с аттеншном мы уже ни раз писали)
при том второй аттеншн не абы какой, а лайтнинг (не тот слава Богу). в минимаксе используется первая версия, а почти одновременно с этой моделькой успела выйти и вторая версия
в чем вообще суть - вот у нас есть
softmax(Q @ K^T) @ V, где иннер продукт между запросами и ключами выдает матрицу seq_len x seq_len, что довольно много
→ приходит в голову идея линеаризовать аттеншн, то есть делаем просто из softmax(Q @ K^T) ~= phi(Q) @ phi(K^T) ⇒ [phi(Q) @ phi(K^T)] @ V, что можно переписать как из left product в right product
phi(Q) @ [ phi(K^T) @ V ], где не будем напрямую высчитывать seq_len x seq_len матрицу, а будет только hidden_dim x hidden_dim. profit?
не совсем, когда в дело приходит понятие каузальности, ибо тогда формула становится (phi убрал для удобства) снова left product
[Q @ K^T * causal_mask] @ V
снова получаем seq_len x seq_len момент, это дело можно исправить алгоритмом Linear Attention Right Product (на предпоследней фотке), но тогда встревает кумулятивная сумма, которую не распараллелить
ну и авторы довольно красивое решение предлагают в виде того, что как раз и называется Lightning Attention
- во-первых, го вычислять аттеншн по блокам, по которым и будет идти цикл как обычно
- а в каждом блоке будем одновременно вычислять аттеншны и первым, и вторым способом: через left product с каузальной маской будет вычисляться intra block (как я понял потому что он находится рядом с диагональными элементами как раз, где и нужна каузальная маска), а через right product inter block (который/которые не соприкасаются с диагональю и можно без каузальной маски их использовать, да еще и этот блок вычислить можно через накопленную кумулятивную сумму KV), а в конце просто просуммируем, не забыв обновить KV
- тут получаем трейдофф между лево- и правоматричным умножениями, который еще и к тому же нетяжело под хардвейр оптимизировать - перетаскивать поочередно блоки между High Bandwidth Memory & SRAM (последняя картинка для иллюстрации отсюда, по всем правилам - чем больше по памяти вмещается, тем медленее работает)
вторая же версия отличается тем, что в каузальную маску добавляется гипер, контролирующий меру затухания информации между токенами (похожее делали в ретнете и второй мамбе), по формулам конечно присутствует не только в маске для сохранения контистенси в реккурентных выражениях (хоть этот вариант алгоритма был и в первой версии в аппендиксе)
реализовано все на тритоне, метод в принципе применим не только к их ТрансНормеру
👀 link, code
BY NLP Wanderer
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/KaDBWO_Cmm8pZDxE6aAMkp03xRuHS7ZOZlfnKYyTS9C2g5_wIFCq_oLylmx7xMegnK-pB8q19qDbaU6zhV8GOugkf2CL6gXrRGt32SHSZKD88Pzq4dFpCYhwZCyUqJVAiVxCC9GpjL21dbp-dVWOvEukfuzJs1J4Z9WGAREkp_Vy7H5q0bJr3IGWsx1ME1X-d3yaoqf5FEhoieVZMUHEdckU2H9hIUhVcDl-0cehE6uBFKDMG8DoovJJ8OniqswUfIJKak2nJyyVUyuJle8dAmErz4xzoKue1zZu97KZWCyim78g4lTDRtCGkDRD8P8pX7fpZNCqarb9RkyZW2wDKg.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/ZG6iJZbJV_ZDLxPFR7XGtGZGb6MNKOpF6tzz9gVOQEBA8VoW0LBPO3fJ59meT0STmrQIF6NvYm7Tn5E1k9FMvWe5V11vvHKfcWhHJyKZdyNevAHUjh8aoNnXvmDbjoCUrl67FzeHgnq-gVENESZ3ToDeSm_Uzc8Q4wn0Ipl41z852IQIJg1PSlRdBERRjpC980edOV_THldst36agNtFS7YkC97xY5JYkhyznTHpcont50E0vzZSbXmiMplhJXjcH7Q8IF5GrZcDEL0vBcxr_SHQ4fbkTk9Uqf2XQ_YUjARDzCBKvIPgkq1bqGtk6JfjeMnpwvUbuSuQa-i5S961gQ.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/mpuwrSx80k5d1YJ2Y7XsmHIh6tBpkCoQHVBCMC0NqOhfJKjv87pwIhagocSKvci8xda2E4_MkPdv0R8aDkPC_TtuHbx8XmYVChrA2bNz0KU4QtkHDu7np419JqipLqiTe_dqqDLDBmoS38MhyFIY48V59sTFQb1UzDR6kC7ARisTpEkc8LEXKhg7eo2HtpTNviGm82lgL60TgZdl9h_Kt7GXOqdUaVQBuc8T4a4jq3YainBeAolvcz2u3xbaeKY42nHGxzYudGj-wWT2Zv3OUYrT1DYoMXI53f97_rEe2dWNzpe0o7r2JAH0OIb_WGc7bFG1rwzNzysjMMyp3NVkEw.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/deLT9K5_y0_KVe07FZX8pLnzUQT3FmEAcY7ementMH7ec4eIK1JtBaEDKM8xYPuoaeASL-hpGQju3ncWPlk3VZhYrwGkyVmwGWUHY2ZXv9FLyDe2kxxEovMX6DAPIUQJf0p54zLhwJ_RlbMvdHFCfR5sUu6bc1xD37PAzSQC-PvpY3LOaQ82bGUczb0s8rCodHgMg9v0Uull1slZUA_kAwo_vmudfl4DzIQDd6FDNEfneGw7S21TC_Zn3_AF2H5qIaukWt5GM5XtSzD1hFBzZ8Cs3GXR1-obsLNbjwJH79v5_clSlX6EfnpU279e7o4FURIvzp49dBhkkHhXGZ3sXQ.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/DMDLmJzhHpYV6_yPFK4zKe0INWOs20dn5LxY-SiFNPjQOtm1ZX0nFju4jTFZum0WlwFEOWL_9rmyLS-NGHqESSa0frvdeRNC_lITJOlu2yW82fL7OdfZMok9bIzJrMKU0LfMr2o81XrlqWYAKdcWcmX2Mm0VsnY8U0ewd5jP7xc5DdBZM1wPOq5NFTsaqCTxEkfs-4uz105TuJYHbmNYlXLyRjXf76LkC6DQFRivUQpwV0ACI7tPJGjhyb8hrgI23P9sFyXX8a9CkNbQc23I9T-zVMw25TSv3ZT7EUShVTYBFAby_QZBzxRT57A6swo0-jbUDxF2ZkzrbfvlvFEFxQ.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/lT3Tq4IB-YiImnVulaHdMXAnI8s6KmKg8pJ-VKGWEOeX4mn8Gtyilfb8FFDX-688osQFAgZwBRgqUlyoXDoYEbA8RsYclPwWoIT80tgj5HRhHq4p_smF7eY5IYuw6N65u4draWqnIHSq2aeqrqHEagoVptyr8g9Lrd5Z9y8QjzrAJwcnNIgk9M1Yw7ESooqlpbC-lHXtIcc4tpkpLa863MG2UgZsZGfA1T1r-Fro-kS1C9JPvVgoHb97HE0H-SWxFEPxrQRF_evq_KEKDuwqOt2N10a8S0rCijWHT_THweJ1dbDClxm6EaL6UNynLmpXLj6tpMyCIRAwtEoff1rc9w.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/iOGDkfdVv5vCj99Cei8P3YHz7W1bfEqflSJuKsnIcmfa9cEBDh57Z4Qpp9plgxzhcVotAXLqA4jeoayCxh9cgFPa2fwJG2aGFzFMnVQZwMcWlhHfJhiTWbRm3SMfYIfZJxvU8zBSkTMzUmuJTExA2GBr0mOKcqwoAcjBQ7Mh0GsVNiEVZFhwix0TU6lX6-8s0eNaqmHlS5b2iocbE5BOtyLpnnSRnodZhkVXimYmqwtCeLJa7XrTbxk8affyPurfCvzgdZe1HnsEj6VHD-oAcTQp4joQQ9k3cJFKBdGatlLYA_CGt3N7O48laFdRlm-5XIFTh1BSNrGfYrOVZotCCg.jpg)
Share with your friend now:
group-telegram.com/nlpwanderer/91