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/87
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/pKTzc-wPsKA4WxssMey5TUXmoef89iIXYLYn7dqDh5vkgn6ePE78rdIkKYsJdZb3s7GnhdsGCXLDxHhHuyOLel91wo1-3vL3TP1wfBNSxWOG_PMwubaNbuGcymsu26A3ze6YCHFSJcYRA4R7X2S74aJrbc8a0e57BEPRMEoMhyb88kZIi9EwzbH0Bty5mFztBNwxtzr38v7tPiUB1TQdqBvs7PbbhlCVFpeyXSLtjIafwxCJYcF2CSvSqVudfz1reIjEeGao2pz_qHaNVz9ausOaMtjUhbbdF-xO258YipYfm55kzeoZkIjst3M3PEC6kDZHbC3f0g0QXrmA5f_Uyw.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/KjgrzKfH1RnPVtBik3UKmIerml1umsxFFsFVQOkZJREZIdYWH76HioLN0_HyIQlfNHnHKtbvZa9AA8unr23rxL7uyBGzKaIEg8zZCjflitutymJM_8Ucyl70xhIVwdSnOHTQd1n2_htOC1WTZFZuM00x41oihqi2Vk6MIlufJns-6klqMDMtiLWHtfDYaZpve-DgJD17iK37rHEPmgxyYr-2XhMgEtyCIvkakO61lpteYecJIp3LfebpB4HWwuxoQpJg7T7ZvpZwxMojd_gNZHleqZkWGfATuuBvMMwjIdYIOUimQuXtTyAReNDtZ3tqUydq4VmvenOnoIqOiO_cFA.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/MBI4NnA0xNnHOreGC2uj2LStTzToTAaZ98itCRpsGAZzXj_0HreIXWoDA42P0eJVS12e6rxeM25hpFuJd5xznflpun9fWAx8XDxeykl-f91HbjcYR6JA8jb6TM4A-uM61BpIFQ_0i9ORE_RrKze0yTzcdKPNbTNgepyU_TfOf0wTjFJ5HnZXmtiSGUw4eO-_ojjr79kCG6D86TeAqfXaoSGyhk8AHI59EGsaYqA-7eXM2p63dBlXGfby-JbIId_NtrIAB5-cNs1Sj55LMhBFtB-wjRSap-HUYlzByqE8S7zFVU4qXIqOR2QRWSjF3VdjQIMiVz9UUhkcbh0bT1zbAA.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/Ns1B0TleGa-4dzpn884p8gQ_pPU75CJ7jeNFefTnobDBvzbmcXeBEnk0aOnX-rm452JCuA2ZPC3glSPdIQ7tnFfjwqFMM-x_DtvriaafA4BowB3kbE1y99xQ59804OjSuW-DJf8IyPD2Xa1isO5sChcMkIWHLhy213Lb6o-phseU_xAQ-P6-QsAD2VW_ta6u4EI5Pgkedme-TrsN1UtEBubNJwexKF7RtC1NpNadPCAHU3gtixf3ix4zBiEq8GFjW--WOjxK_qz4nTnaqP6vYdTEQk0EuZ73Ee-Gqsy9AP4PLNG_rU-wXai3poiBrp22HsZPSqgfzM0PeJj2v6kylA.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/YFMWCObtZgoeW0z7RNvuWzyMkQrzAQcqhg4rFDeTaMkflSxMeO6rmDXm-X_sy0ol3XBBN13v3dWz_WYWe49jPONYDn2M-qpgstBIj2JTMxC1FTFluBhYdSPcCXhslqUeiS7KWl5zmZLYH6BtCTxqe6kgIa2IunCZiPN3HTe0m38gs5xmdy-4esf7n9nnXRpAiR0HTAE7jhHIOKj1t_dUY8pgivoXte3aj04dhs42eFMgSOI-y_F-4U4KShQSnZtt_13n8H7JzFUEDxIxrDFa1rjdK1vxrVQZmMpAQfI7rxc7AyFB4BCb690-n9hLUMe37vJN-0AMd5Ib4U663SNX_w.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/XYnwDkXdJurDwHokAGAS9udXcvQDFuR6rTKxxilEBToKUmQVfXXI_RY8hmYs-ZsIN3GbVuhbDADKoPQUhVyFZnlGx3awyZ7iPtKIj56jQYeoFX_5ehCncHyBBKvBJB58Xi3_056s6Uz5puItbKAoAjGgIgnOUZLpDbzwc6MSdtBhAwU6eLdxFoyWY8P5nhABUTOVDwSNf-OBmkeacy0de6SQbOD-ChujnJcw5nNGUPcIJVbvmOwnFG9UpGzYf0poGy8wHuMYLOuu6FYKnTHy3XSFQ5MboleRb4dgacQ4aok4x2JSPlM7XPpK9h8tCNjdWpoV08Brs3V_RsCD_UzJ9g.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/seQsWvibMiOoWp9EPxaqSATXCApYVtQmXzQ-VE-aAu-AUaOwaE0FpBVPUsuJMn4gxSSOPtRCOnebqfrAXAHqZrr1_5uGJcu_jeS2Yon18H8iDvABQsBiV5eUBSXfrfAv8NU0aMM3L3oic7-YbURma2PnBciTSwSZMy52oE4jNE5Ck6-KSFEFrnTjxmjB0x2GJdtLBpJQ5PFwiiO3Ox58dk12zdida08ae-Lhrjr-NdjY7g-iFt2xhOJZ5HQc6p_qOB1g-0KbOPrPN7wN9J5XIpIH3BACHXts6Ix-IIFGJ3PzDdJcz5iDKl8o302g10Tw8kRwoppjEGF2OCrJzyVz2Q.jpg)
Share with your friend now:
group-telegram.com/nlpwanderer/87