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/rizzearch/779
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 rizzearch
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/vlBW4R5dJbNKbc7j1w1eDBjd_JIIDYNu_IhwENI-wES9aJbej8nfXjys7oe6PajiHgq2xfRFlQ4LDOKju512XG8z-o9_maC1ymD-PNnRxZr4c3JGskTECJa6AWm4-hoygpHQSMHfG6bff9ofNztG1wQIYtK8DoTsXMmnlfJ8bb1_1-uu4oxmW1CYLsoN-9vmrD8brtxn6D3YGU-2XdAS4ZSzzf1MEPTPKJK-Nn5Va5ebtVYWJc_G4sC1k78JrNQl3wM1iu7F7Z2QwrxKJu_4av3ciBVOdgSRAQSSOmxcG9529ONsiD9cIDt91pECR6_1h-12ZblI0nSUqnA4L3ipmQ.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/STKZCMbR0Hb8oozTl-bNWyWfETweevKA2NP6QEuVakZUHShFKotdyWZSbi2A-D8cTLy-uEvy7n9egqiIwv5poN7LIMt1-e2m-sWUSAFFpjB_VKMyUd-TgPw7wLM1bH6VFZ8AK2RBMtw9jqM9MzpDhxTQqhAcsuoloj3VGwjIU7SMQBU12hjrYKUdE3fSemWt3p7L9MQm9RdRP8I4XROZTaEu-3VVwYYteKXvvYp_IkAmg4qvImhEfXVzZnT8s6Kyya9VaMqgAluL6RCuWnHISr1-QTElJK7EaV1yq_3dwgmfdPcJq8JVIYW1Bn6VJ5WTShJECgJg3uBSZH4IhG1sew.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/iSgZ3T3lTWuH4Eu9HFhkoVIvl-akMw4u037xs3OmMo0-ByHzDnF9htyeicpHAquzF5DYje5EFbVWQ3r3k-sL9iRwrFpvs2YHceeqgF1odapus7P8nHXveQsQN9KOhpX-1dWffQ2d0rj5_atdJ3z2rP3YliJBh1s8XgRZcn5sy_cektxFokzlUuKyGQVTcE0RApf3lQidIAzcpc4WzGNaxPPa2KRMpYluExSyYKlfQvIc85s4IG5F_7AbwMm4bcTiXjsxs1CNJMuuogsawvMZAqShIVPyg4MLya_VPjtnRUNPFFX9w_7fycdU3Lff8Lq_kZ-RICbn9v9zeYwYdrXm-A.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/saw6uFVedmgAy8OjLuYg5NTTU2X00wZotaKU5SfXkcbdBAjE4kSw9fIHs_4rUic251IrzdKTGOBi-Gg5qyIo6vwWYYeciNkK6u5vo3MSG9omnOAveXij8bExQzZGZo4ED-usNSv6mZUlEGcbx07reuvVjPQzLrFtY7W870Yr81W-95nzDvKTcNkGgSshXz3MOYGF1zn8dTlDfqk1ie28vho9wCMQlks9yfL8Gj89KTeTZ0PoZ_J7vuBqcik7xYdPMwy9FSJxLtRP0O_M68_ceJctiyQX0dDGkh1lrxjOq2vHTe5kIM0wst1_XYzO5Z-3VRJrmMYCpRt3HIRN0nctuA.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/tRJ2B-Il3CGvXpeRsLV2V1XSLAfhJb_TBflDJ6h-T7KXrKj_f0yiPduCLU8E7osscPVjiz7_oh9Z36_6WrXc2A0u5Znx9i0LHoV_TNY-_BFNmt7pSer1WrtdgurhKLdkYRrXS9TcDeHRV3_Jm1ms0KRNsXO4_FnSODGeFU0LOt1wNnXolpF1TSNszVk2X-f6WVOwI4e60b_CGWq-Dzetp9IpYw_fWlP8JS1O_z44TjJYniGoTZGTNeXMl8cdkxmmwHWbfLmwclSvqHp0yi0jbzeoEfVlTAr_F3q5i8-sAxPhYyR54zTWegnHHPbXK3X3xE3g-r6St2rU0vji883uRQ.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/fF1YkpIaq1YTME8W9NOqBJmJi-UAROBAkHCUjV7AaGvLRQLhKoPt1UO6lW8P8NIllOao0xn5pW7pAAXG867CE3-wcRhDmzpf76hdeUZ-IrDSCnEr2nsjAE11QGVOLN32HlW8tXec642X5p0ZVDpesynJ-9FQ43vk5A4Al9Tqw4LpT7NWDcfUzXanexHsApnz8YfICRnBbInXbvIboC2IqBPupYTBPcqJtrpPR24pEu70_AcCW0dkptdWRhZboaqrpQgv-pNaEC3Wf3VpI_GaT1okeedlIp9-ycJhtzXl8PMiNvTCOjhUStmkXzceWF1bPbmxks-3OFkPcIErFicLTQ.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/EhN-MgnuRKfRm2dwsU2HdUqTRf5FccEhMC16sH9xfLKXnamcXwXzrp7mgNxb50Dz_7VcCAARHUtaW0899IOLKpK6tV-IZugZ12rnu_d8I65ESVRjmBebrqZmRQUX8I_4-mxMf7dj7LTpOx2_poujVYbZdsHY_k7t_QHk1I_7d98s6UWTKUnre4W2Ad95UTWGRCz9k346lfvP_pX55PT4rLjGhPs1-LLLUbEymUY_6_3VV-pGiAFS00-SuabgiMnz2CB7Hr5_0vUOsgHPBs1fPo4LQzNot8NLpMsXaBy5Cb9IRJzOyafA2N-dVOcKBVzFVctBOSOQO7-uf-ak546b9Q.jpg)
Share with your friend now:
group-telegram.com/rizzearch/779