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/90
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/pRiS-ZWYqfmQjF8jhEd9I98vRfWUBjWuzyLvHUDJ7XOrufLP9xV8zAM7ICkD8NTO_oly12kR42iM13OIUC1ff-MQDkZEFNA5zul-rtsKdbfohQOSWdOSDRKzEKq1l5qNTcETES8zv-0F9mdhrOhegMmAFusJr7sgOYkK2IWCbwY0PEuUQpl0sGhTuvORojsjFy-1jSJRnsyj_BeNvTT76GCk9p9p-kOYh4SKoOBEB-UFgtzLkxZbwSza53rSTkJOmaF5Ij5m99P-U-WbVGhaNtqQtRxoBwCvwDl6Zm02SjolIROqsdcXu2fHHWI8c7AkB1-ijabc3E3HUu6lnyDXBQ.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/GElqaplTbyRavxVz-aeMI1rmYXFk-dNaxvAm7YhRhEJg3c08M1Uvk4nIRMKv9TXCvSVU5Q5xRokhhwH0awyrJreumjlTmi4ol-eHqVDjjeEDHFRTleDKzipWgDLDUCDQ4Ty1lNy7LgSdZTLOxXkx2jQ6HvqWGdIe_75ATFqrZxA_ElhzXKUOKCag3c-GkQKZ37XFB1jMGlOIy2CkdA_XAxIgo_ktrEUhKjUc3WcrFTQJI6EcPsOGAlyHAQDfQd1GH_D-a_zZMN7viu8vvo3VxXWCxbYMWoY2-aQSunYyr8MHm05qsIhAezBEe9B3NTaBgFxBJH8z5A10xYTpjesN0w.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/NUXXZBUNlhNptD9aJD2SLYbj0k-h8qhGulYq4H5AwBvvOGzEvgYaQIH_E-uZ8y9ILUNsMk8AK5ASzwRpfLPd1vTq82s7u1eJM18C7xmpFjgR785SUoQ8tjOKdaJTIpsf2AND8JZMCALms-OGOkdn9NFu6VaAZUO5PcUWASX8Y3rwsu5oOHrk3mIFJk3JJN4wD1Jr6ha3tfs9AvzZGTD0i7gddBneNYryWC8HVkLeT5MaTFyIhGkz8A58KUAw3tx-IABym2aDYAIbVYEqLPMaIJtdh-zX3JDbPP8zkueIJwqy69JkN4TL3DKkhhUVTUZn9CsZwUBnzuHy7poWOQLvUA.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/VlQR72DOCRKRsqH8TpJC16aPKWrt0XjtEuDST5hOfGIAkbZ8FMtcOag-3sYH1SN5q06b9GhS9T6PuFDsl2Jj3Dck0eKonOYeUXkMCYCUKXII5YMG5-g1Dg6JqVlCAuOc6buum6ENdcGbORawu-Aj85PmpIGCmgN-_a4K7-MPgn0ngDQOsd9JWjrigzxq8xFTw-gXdjI4J1l5u_cUTF2saz4CEyvwvG4HJfmLmpV95SVCueAWv3MyFbvNXjaBp7tfRlk5Tq9US0-uNUms_7wJ3jEy0vl2IvxhyAQR7Nr-WFcuZ1E4YtQfS2AeDkELytDqbvwzN4Jdj0dnfcpISNa5GQ.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/S33CBFspvJYztCPndLMu5L6qxy6dSSSKNW3HypPpJ39vD2LjCTgYaDOgbHwd7zS5Iu76KeqezsT42Iof5wXw3ncyY9NKd2Tfj74uDLWg5K5A1jSrR0eKP_o4WyqkKkupEiiOcIeZBdmcglmAHBGii-3iHV7NSQufj-ZM331Zz0U-evmxHH62RHwydgVN1u2UdmXuiPHvfPgkW9nF2traOyKMbqnctWPF6iDf4WAJvGVT6rkuM4L1X-F2USCBmPdWEGWmLdwWVC-IAUMiE8R4_MZqOfeSlnwEoOtNt4FQbjmRO531lYWEPNAi64HCbxMwdCKtp7z4tXXM1Cr3afBfIg.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/dwzqhWraYqhGQVOoL8RslHovpzuZczf8UBPHqWOLzp4zS6woOgvtA0p50yGEIkBNSeR84dRv5sr7bdbdRL8QPqnA8Pry2OI8qtXyOMFavdv826XmuHyaa6T7zuh1Zl1haW8PsyhCm7yFNoOYNCMf2kwL65O4SLOUh4bCFD0Z3zzmK-w5WcIMEbyjKCLMqDrFkO5GfjfAsRNsueInwWXVasvsvuhgg5oHVFJfKRQjvm7nTgbfs-_s09FzZ4rZtvzgWhQBzAKb4ywwGc-iAYSL-ZiR1QWpPJJt3NuOfyFMcH_SDlwpuMxro0f6qOHCyiN9ovvIKAnhs2jAygcSQ0WAzA.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/Ol3Tk4zpFuOc2T_qyX_yP5j74lG51O7vyNhpIOb-tDF3jKu2ObjXDbrnXCuaHJWxWaKvxHCZpLk3EteVHZhS279ndLX9ffty989EsT0S3amHv3rDoaN_0gei4zNPo4M2ZkkUGKLEKrvOwGP7CHq9Ya_aw45jo5QQdQdLNWLaKBHelnPzJikatvjOOsZs2gxfoMqwuwBQC-V1IrIthZRcD5_20DZQ7tIa6Hda1qCWD9QX0vEYpHmc-Hhrge1esVXVe1CsOXnc8QlWqdQe7p2u8pJ3q_7FpqNw-X1B0ybig4NyCuPuOYcW03HXVknv8NN6rviGSs54QqAai6cGnH41aQ.jpg)
Share with your friend now:
group-telegram.com/nlpwanderer/90