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/85
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/Y7W0Aws0haCZ6D1TcX0uNM5Y1T6Tc8Ku2eREXZCLzyT4t1_bwQhCubzb5jT8-dmhnPjl0bmPOAmBLZ7oI0g1-rMyqzMfYiN0goc7irqc_DgEqdn_pshxvNTvDs70LMIpyaPF7wxYVxha2pZZFkVwzrnCjJ1MFXsKabEzR6rI0uprGW2ZkF0TT7exU8hQFmkLy0IKTrRllnAvX_2iT7Yhn66hyk1mtrdxUqQwyDUui6DfouX6z78Bz5NcBupRERoe_6dElvoObND3hSoDGP6-X-IqZ3HccXTB9W9yXa5weglMxH_N9vkm6BlJfYAY4Kd_QrkKEiPhQ0qD6t1xgGA-_Q.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/ip0F_TTmxEsKl6U0nmE9JTtxN-tIVdTC-4ID7HwRWPzNHNpUXQl-0U8jdI13LlSMnHJSGF7-z-0QIVTcBzxV0GOajDvSuPn9J6i2Pyi8bkETE6XBH2vzERdI6QOujp6L4oYOzpLK2e8WazWjD00ViNk5Mg6Jv5qnywmCZfds29IVxN3mP3CZQ9cqwrbaCmkZJdTH0KZC0TU_zjfzTYJColqDP0Byc4cOC9Z5xS46BCLe_f-NrNtEJLLTDoNEjjZAhLgJgsPcwwtA1_huec3jyA9-fE8RXYz4rLHcTOqm4LjBimkPET4R6oAbL3xFRgFRlWzAtUpo34pV8Qdtf3XNGg.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/oBAPVJvAfUpL6U4UjB4o2zL5CLhuIYw6UKDtoloF4Pyx5S9-MBhYaJS7XeqUMI0msNcjZJgwwkjXBk5ZgKH3D_krG9pCWW12edqZhwP7_Pf5liIkSHQnaNAf5gNsX-w2lGnPJm4Y8nNLe2HMS3bWhXIzRZIuhFOON2qrvP79-yZ0GJ9LQvSwRx3rQzT4CFb7869UZVmRTIJeG9l4wQLEj5LvNVvE1DXr4bFR7ePVlvGTXrRz12vN7MJOcEy5eilZBFgjrIqXI_Md7kXL4vsPYgUNi9m5vV4O0RLmNl-aa0OFsTC37g9ObaZZwcCF8Wn1jaGg87YLCZ99duQ0bxjxpw.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/hkKBlv_rQOnsn5hkIwTAfVQMLtG1O1gj0YHavqNx-Fln_kJXfomOIGqh78IEClCqbvFr-LaudG_2uMQ1SFGp2Nf2DyNlExrm6wGFQVdybXSxQw_N8WT9EcvD-vx659TAZWZ2XRtxJygiQGryLSTXnzSdPOk3q5RPyZ7uYm9i3OU4BEbVeQW5WJkWMF1uWWxqzfFCY-zpgLCyrpbXqRM8YS0DAMoFDhkDTsqpcoB16XWfOgeVpG64c1t7xL_dLcegSJdD5be9xbtJWjMfXXP00uhZ9exrX9k1ACdIPzJU2yQu1pRnJUQHQaqPG_3aO4R_YuDRMNiUT_G8_6XmCiCVAA.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/CwkxH_GYaOMy4H_w2qO3mXldteZFfvyecC4DIr3g-zWWMZ67WinIL7Dva3zAX0cZjD7T6rrZsRdgSe57uqaVRkYxPhAHnpy5d4ePHDWJ9TBKzM-3m6SbMogRlAqkNj3IO79eL04EevYhjUIX9kfY4rxCjP4kN9Y2fx_j3hf4qPgKG_W84YdUCqYk8KWO37u6uiSp7PHoT3umSDre1Ko5OTrnBRsxSfHG4GHG8gCzCMf0wzMW7Ua2-OhEk8NDhdMwf70vsMdFCUtumyzB6mK6lf4e4Gci_M6316q9xSWtlGsTkXrYhh8I9ecvFdYECoDYtWNruL8rzCVXRSAOQfyoZw.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/WP67WkoXISCWCIlhp2wsCpH73QTeLBdhUEzD2xTvrUnVhL-WZA0wH297PrwqixPJYxS0-w7ZXk5S0wA0bFKrh09Byf_ajDFNWvZeAGvGrmaJx7Zs2dd7woly8vUa5zudrxq4IVHfJlXhFvPVcS26E1Xnt8IlZ5lzCuGs9k16Oa-y6apJ8hVykXlwNuU_4ZPtEOLiiRyMu7r52SzwYUaVlkOuQ2r3RL6gtQ8jQV3rqbwR_eZ3OlzxuG-cyd3J2LDdhVhBhmGsWZFpzVgQiYpbWvTO9f2qx3xSnvRP6S_Dy_C-ukamBEAkmgWoPJJSAvvnuqd-XFmsk5lmbpw546PjBg.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/t-LrfUa9a8jBhPnOZRaxJgQS-a8JoIqLRJIN8snlGJyKB4shXdD3LNHw_mjZ_lujXjaWTi9m0oWwel3WTvys_ZnbNsIiWcrlANpHds3t_Iq0JKrzP0PhIAq6fyIYRX5b5paLMHk0Y0wxL3HeGeivB9CXkam91cYMPbPCbvRk7475dNLlCTrghXalcrvopag6yncpztxTXQh1HraiHKheMVrtUHpz8WuSBPnFp1ITXpjewpL4_9I9LKEcVFePxAWjhG4hXhroNvH55bmOmGr5LuAMRa6TWq6SwC1oKO5zTnvtwfpUxKkeuZrah1-kXSHrnxa-BcAmosgeJ6LDWf90dw.jpg)
Share with your friend now:
group-telegram.com/nlpwanderer/85