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/j0cNv4yjceCNZ7l0w5821ofXHJwJUUqUgmTbSXmSG1eAGIZTydpVlGdHiGwk6pPJcVTFGcPgCnmOp5i7azlM_4Bvh3ENbaugvUM28C3rqaADrctkokKAIKJrdeiyomxmEVxIQHPTEflJDmYxDEOB3e2cWQ3JAMc8t-OrvYxexH57JAI1cyPYB3-vDZLGS7Hx9C9nN7Xcm11UrEZ_ZGWc6Cx09QxGQ4DPBoGLVlN7WWaDAIGRkl2RAohGnuDdMKEMW77Yjxr2RpbBOyKVxHCsy0LOKgfUxYhjMQZr3jgfzLhu0gak_R0mlbOLpdXvsX1a4x0yOMDdf5pXdDsD8oburA.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/nA_ievjq6astRwjprDLHzp9fmGGaE78a1yw9aVPQ4t4IoqAdCI49LQS75w-zs2TljPTrMXiDmjfDKh-Zn4vkUYWdMOloxKhJ8nPM05XioAmmyJk6B_Dnp-s2g0oWD8PnfoqESSsHCYvburEc5Pcdh8uOBNYGobyCExOfmfcwWkbAPzBawPMLjQOj1RhnKqTzpTmKVNjAexd0g7wuAwesmwZ1SVAzcBHzjyJdSNbo6qWmE_SQAFdLDl68I9W_B12engU2uCr2veIUmvUsUj_E3AmtJUOQABYbMy5NlpUXVCMkdZlvZwF1bWB2wUQfoGox9z0_7emH3JyT_H1PwgjuHA.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/nIkZuzIWvYgYRGjWV2QEM_BuRwZ7rWP3g5Sk8FVKunlwUgxCcijltxDUShiZtcZANVaYuvoAcJnCTr6akmaJG9q0SZYB_IoJplf8VrOjzGO5XGNKgJl6rcpmQEtD4G9nRHOXwTCu8hHEL4CIYdSET65BmhkO2TnznDv2YU2Bb3g-nAFBLswBlch1aT1n_Y5uiIBztsCaGV0uWC9ixm3XooT4hcdT0cOdFFK4xq9BaVvOPDOFRgar_PUSoBtv38VOMti5fzUGiSkO2_djm3TNilaLSzm_BB7zYNhtUvB-eRPyy-s3gklJueoUHaEm8qbuOpW_eZ6BbWOsj-5AhpxcMw.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/gjPnGYZtHaCEzJP88dWKiXphhZVRizV-aP8c_13KlfnSo7uxRa-HTVCxWNnkMrdZGTOo_FyZoNS_gGJaw7lrdZazTSmSDjcaBwno5QoglUHkuCPf-gW8bTlym9mlH7lEpgRLl-aENT4SxxGMWXbeXapb3e92B20UGBA2EqM1R0TFeCY0_VjQkZ1J8t2sOdGQTEovWiyRe5n2ovljcl97wyz-MGPpHxWDkANWKqbB0dSyerWJIkVohhs7GWtQ5PHvVmd3-zW_5BnQhy6VpNshc0QcKX4t3iMDbY2Q1k1NwpehBuyBPehZV3QotD6vRNW4nn2phHSq6MKPop80X9qW_w.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/fz-WnMQZ8hruV-PGPNRUGWqDcLXm5sMkSbQvON6qzzCqQ5usZANM_2cjlPTNf3_9eok0pXK265Sj4pOBObmDdueDFYPTdalARiz6qZUcB7d0LcPg4Pm634YQcJUscXs1ImAZpvjpTGYzl3J-Z8Dt5SRt-U4Xptu82iBQxYu-VY1K-spWp2eOBZCB2-5jYR6x8gjuUlw7Mxc8LvJpbdkNHZG1isDxIbkxHG_nC8wCaEaiGju_huul9zyh8wIuk1ZAP6Ej99gOIpzireBabF45UoJ-rS8Ewe2PEGHXRit7FfFCfZBjrkWlJvl_DyuKSOIBYLskY8fItb5UGH5_m9dBjg.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/G-2II-_4-In_OanZHAWxhgF2tHbqJI0QZQ1q2pWSk0lm4R0efEYastf_Oy4g-f628y5iNZ74KphwCuG5Fac2RTWCQ5h6CsXN_UnFxRg3GUfE6hOuGuOGGnphAT5vbyqr9IPRqFQRQ3DSXOXFfT5ncl2gSnVWOn4fO-eX6kUz9zDu_LIT5A_nztALB_qtLVBoX0yEhhHmlUIHA0QtN5_mhPaRrLBpvsFHFE3Vdxmt0N5CeyvhznEnonxaStNRnNoXjMMZWzT-OxKLNVMiqJs1Z1o4xMhquZv5TjXPVhGv_xXenPKgiZQKgdLY7xCW8ZFeXRFo67ha_dcigwmRdkXqNQ.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/UbPj7eP0PVnzWwHC5T24bcmDBfG0t2Qb871VoVfnsxQXgLaZUtSUsyGvbBiAIhQOlwDF3XMt4ZI6FRimzG3mlrpBcMi_QUjQPvRVvKwKwBSum7hFeq_oaswu1vsnLywhrLk7HeAVZqBrV4VQvTvscOIUprNhO7ebeVNf_dOPNeqPxmcbny9wTXwfuTC5whfb460K4rh3eRIQfUrTpyZx6EiYJm0DOLxfMbO-ULkSQ6E11wYpcjO4tpiU6_18lwzJpBKOi3dPlycjrvo0DoeAGJvObv8OHXdGK5Jtehy0HBiWQZ68T-cm-VZUzDSdS5FKPkcYd1vMZZEKOpRzgN2Xog.jpg)
Share with your friend now:
group-telegram.com/nlpwanderer/91