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/jN5PkRveqL_YUgD9IgNE6QoLRl7aTPAVQogOPV2GCbXpkoT2wHId8BYTW6CPxMJj9jjNeHWEvMQEfYmQ1DxK6_ueisXFSpRpZ-o9s3lTwRPU3V4eZBzN3qWLiZa0Oy3PcqFbmfAGB7SIUGzPfcUabJXhkj1sl0B_XpDl7CkOoo_gnX777qBJpBlKGLdsVQvwG5D2rI2vz8XuPuJdgHPeJeENCK1k7y09urOJhwrmb4FY1YVqLApbPBgUuRAm8us7DlXM4x61T95Gng9BbAX5ScEdlx41fCzF8rjYCUzyENEmEv60NMgjdQP3w-kVMmVwBUzgszxCdmeKWqhyoD3oAQ.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/DAh2YnLV5U83NOT226HJ8Z3V_bX43s-1k4e8N6SaMx8pbtS1gi848qI_XCXyevtQCA7UupfEbNafPMNYCIVWSbnWSzVA799K5vWLACzNlyBIaiRnVRYIci8LBXiAPw9-Cp0CI2IstKCOs4gnB2vHk4VqEijMekfAUIhmsoS-wHz6W4r6PBLD_mMvIBC5JsFQDg8nYuTDVGY--1seRX6FfFpEWqrZf-M3kxIphmU-3lSE0Z_bs55VcwY3pUL3lxN44gq1AbKfi5peeKNGtynMKjCYwl91efYX2dz1ed9EakBxvbRSVvsRjEnn4x4mw22nSQNiBY4gZCsURHN7s3Sr1g.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/ELqwUloIxfeohU7BvAHy543GZqnVCM-1hADTp5xqwn3in-9IJRbvBAcbG2g20McZtC63pOAQJDC9jpATwQ-wql1ibZt-Hps66yPeAAx0fP9stMU4iYzjxLJMvIaAQzO-UjZgj1cVhnDZhBdy4QI1Nig6m7ost-WwRi3ofraxuMvUTX_-MMz_o2VU5bAkDCeMN7xpfeyM14yqEu4lqEQMj0ifzz54TwT4TPAwPwU_a4QGewp-Ac6nOAGx9Rg7iv0J_hDftF_qjO3T7HSpZWDu0z0bHu9qu8FN_7DDLbbK02XnVjpOjJvOaT_n5yCxH38IROSnPuCTL8DUlTg1GMYHyA.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/A5-eefSfhLc3Yz4YvSKf7FwBtFbCcsjL7QNlsv7G3yDBhXh6aCIo82cJuZ6cYlHK4UwnV-rVTf2O5RjV__8iXZ1FyipiGZwaKdYGehyDAonKrLCmvMKXy2IMp7t0nFHXdvRgqxIMpvmVpBntDAdIX4w-AWiKYEdbQZkvvgA_4rReZ-qjpOuo6yit27T3yVKZNpg9EJUDCnavqoHvLLpMthGf5TmXIvytasgEbh2nsUaJ4YE1y9qQvA8DShjRbhlcz2CaMJas06tSSBvASpL00dFHJY4aZY_zn0JK13gb2xhB161kgrPm5X-g0YnTRs6osU1HTr2xC6P0mO3Qm136RQ.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/Zt6qAP5sHFUwQoUxIGlX4v_EDJcXvhGys7jWyxDcx_BRDwnVgdqB_WiYRQqbVQpraBE0zx_by2eTOf4CQnFlyPyqLHxvsZ2kZJIa_96NSyC8-fZ6ha0S-odiHe5PBcRAGUYa0x4ftCwUzTuJzfq52kQ-Sk6kcJQIa58q_psjWsSRREYTlC9DeTQwoJz2TgBxAGwTwwwEXa653uU65cf8J25hDwfbDLbsoMFqHtZ3T2KQCZQcd-FiYJjDnl2HJNdj5dlEn4JZPgEUYC_lPGR8nB42m8p7pGQMjhlmNzmtuN2qTPc6oi7XwLS2pMZhkAtUcPzyKyFiuzCt1ylkg3zsQQ.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/odsj791veiRrwpDcaCEzYGbe5ipEWOb3nPBfaI3AdKKpOhG4bYkUWIPoem5pEONga_uFhvnbwnZQ2Cn7Cr1ROgXhMZT7eFw3HeADkr8u4VL9FS_vGAGkNulRVQOZSMa5Bx_3xcW3gta4pxx1z6W8KLAUx3HOWV_S8jvtxhK3pnVpvVkFvM_fhSrBIVO52b-KBcSSCSuznPPbexl3AJGSMImrcuar58yILPZi30bnnQa1l2whLTaBJmEGOEL235l--dpJCvnyZtGv2hR_AnCZ1LI5cQGaLSXEiqacIBy4yUPAIQsVk8i6scT-3ubqlWp9FGMjWSFF3Ko1GVi0NoYWqw.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/C4qD7PPUNDgRScaT1huHsDwotAVnXwWlCURvuL_ycHD7iVyuiC_DwHNDeZHgtkVYdz6SV1E9kFMcQE_MOoygQJrAHFBshVuSKFXN2iCy4hRhvM_UZqFovKVAJHH8Et25RvWxQ2AexHcpRJycDZujIEwvi_2_WcAHhdHi9Q2jZWEh2CpsRpD9xB_WTcHEO5HSmrDjoEXc6XjHVnyCvQGIDMuCqGgYiVFSCncCwrOJ65w3gKEE8S90p5yhN4mqfxTQx2njbC2KFOTL8_Hxlz91ypaPmPE3Zc1Nj_6WBcEiCWpR6OPW1vYrAL9OuauKNkDzQYZ52YUCrjkESrGD7ShBoQ.jpg)
Share with your friend now:
group-telegram.com/nlpwanderer/87