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/Oa5jmzQHOR1TXRCSyYBKzJhzrOCEm7W4x_21VTbwBwx-BD50THNB6awK45zIu-CCf3rEqqpfJkPoTkgMF7yPxzOoUHM4zoTkuNZj42bMfmPsfk6o1hf8oHpvU5hpan2ZQWuXpWPkvY-2QnKqgc-2j43FO-YFrdj5K1QVKLmOQxjRDxJEYrqXqF62JSrjh_wkKkMfSt0adPWujhmBsq1u5CvZySOTPeYViMx0odbBPP8Ak19eqElmNnXQQxK4ISAen_4Bo-VpwMbVNn1UTcpnAekUJMT3aeKuUihQKDHEFgQ9GWjEG8ea_7BrsZTVD_xmJH03NVFNPseDlNvaVSls4g.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/dS2YUr89T6c008FBj7Al1b5Y-gUDBWs-bYrQ6pFFQ5n5hJHwe_YO1bhPeMvecZISpAtp4NMEvJCAwQ9uwEOfM2v27izikKoapntLXFGQyNQto7Vh3ytUB8wMdsmW0ZDMs7OXyCozoz-N0H9ifsewRysM_p7eE-3AyuqYu005GXHIvqYf6sgwpKahAzRQnFowEgVoQaeP3iiVZwS4OA7io-tnsDgizW5HSH3kdWgqU6AJrVJm4aZWXhp-a1JRT3gCFoWtQFyFoI8Hr9B9SELaqtAuOHzRnf1wPUQWwKwG4hRDtLWKX_sIeF43UyKnfomkRvvR274dakZ_-iSMcUY47w.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/PG5Gp3A5P5er9Mxtje3DU6oL7-9RGZ8EGz4Vyen6xutdo0z4wmEID8nzYMRTVPQkB9vII5DOxIJNZwY3LLsHyJb93GTNMZXmAXw699JRHQ8-FgEg8ROe95Udw99zycDU93J2XdR793MQ0nIyG7c7W788fNyVDZIwBhO0rYnysLwzE1wYXLSaQ2NKkI2Eub7C0m6Rzu9lazVZtBgB_4yRkyRcZR4XeqEcL5OBnylG8eQJ30XZ3FKkEza2TY8CijKPokakgAOCMX_JKbPvL9kdSqyzzXh2zIGGS_52pITRUACAaUjtfdNGJRtZ6iKf6SEN5idUXrnguvM5oo3QkWvZ8A.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/ZngAmNNJm1JYb1Itpf6jz_w_sfw48-g0OKfY7s_JWjG4j40dic1qt5-ir6y3gI02XeAsqhLTFLJkWmqUbtrW1IXFG33ORZbMSg_oFnBXHYsbFuUWghsPTsknHiiim6aRl04sNlh-hMsgQzCQCdTT0rWwmMRBYqNlKBua_3f80q6DOEtTQ3oFAlZCNxWiQa8DqIo1Rhp0vxyx3s5HP6iWqnglSDT4tK3_FLTevegPuwpWmMbAnudrWay8JbWcLXg2UP0obWNFrufLkRC9zf_BUH-6Rnpww6iGqqt-9RHkHoehwyHxusZkzGO9PlEOPnGZCAhqFWcqsm79npYZvRTf4A.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/ZD03gVLhSCCfwFQElNvRNG5pHFJPmJemitKXjDauvm4Lut1Aky-PUW6RqxuEMdKGgCC2yAJ1Uk4b4xAdpkyBBNDdQab55xale4i0n59JnhTVGOpBVDjdYNCZHQvtMIh1-dHzV6QHBlgsSqBiDttSuuYxvOW00CzR3sdGAAH_xDVELHuvl_wRIWexmfb-z-gZESLijMcK33WAVKDEuAoYyThKTHZOyREElBb81ULKLiXUpGZ6aIVnAUSo6gBhRMkPyGSUeZJ_rA9w4L9ihDIBlsol1E0-UuUTgHRBXF1g013ORSvAw0_5KCTfR5x1H2_yL1YBKaECWdvinoMv71Vl4g.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/eWTlVJwZtVyNzPtVfpnQcPDl_NCu7G1osP18_Y8xR8G31XCBKGoXw1dUjbuHiSCAX0J-3rZBEGrNhitYEycanMiCakb2Un5Umd8pWxGs6acm0fdm5iDhDF_9LOIOWQlpSJQL9g6NgDfKoyhOrykGAM8uXEgM0FEzVY_t9a7DdR8DSMip4pEfONWGizQGBEjJkHY9b4lCqT4aINwSTmdDAIQBH3U_HWFIwLDN74QI1lcNIcL4mpsZri980awqiExchaPGeOteseQqPyjKeqnqHaSBZKUY7_YLQodMSsdPAM7qGZaihI4gitefoawHTwfup1K9NU63lwKMBDA-nuf3Jw.jpg)
Share with your friend now:
group-telegram.com/nlpwanderer/91