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/Ff3WKzSUIw2J2d3KPfReAePFg2A6kmDLokP6WMBE91eY5MnH2ed6BXOcwO0Vsg0d-qozhCTYnl_fQLzm7SJYU6HQZDl9CZZn2NW8xnXxvw0_N9hFt0y-5_BF46INhhkNjtdSua8VY-roVnDiH123ErzWhJ4RAmeQO9l5iKvClvsjJ6STkbmGgplrO_NpcpCcnpYQNiKlxf_m2s2E42d-HGTnqeJ1vZORAQ-1cBX8GnYD4QyA-ZxMDd5I57US--lHASUCbV7ayFT4w7DBnlm01YomkGFTrB_clpxqu5LSan9WXgoPS5jXBqoIEqpRV5X0djj2em6hbQTZ4cZep1Helw.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/f-A3aVwnBUmhLlqCxd6Fzow5Cfo9o_jdgY9bFUyWZtv1wz8iBtTEihbs9oyZ3tTwWsxFUxjK-fbHieH_FlT_jU-BNClI3qrcwN6ZuFKcFEyx8JIhqzjpt0UpJNUNip7wqPheuSFhRS_cWZSK48Cdp1pP1HVEzSCkImCzNU-Yk83E0fgElhaOYOrcbCcNpeT7TT0TqiejSFaLAMHg9L2Lb8BPLWn_WepYwCV2jJz6t--BVJQHDKfZm43RUOLHYTYIxqkLT0lhORrcR2dOioKK4fFtKBlgGVaFbvKfAS_NG2NRZRGV-ctnJrA6wHU1_EJyODZbouQv6O64FlDL65Fb_g.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/qN2f3g2ECkhZ1wtIJlmU4YYNzGifUdVTa4SRcYB5yNTAxUcmBcmWUAFnx2HpqA9SA-k68m1trfkgkgFKZpbLNb6pPfT5pLU7D6Vl87oKyIzJSr0Qt1p_neXKhu_0nBR8Kq7acM2Zk0llq1esH_CaNuhnLTNz_qKe__xYb8Iegovftzmr79UJZ8gbJS5w1vAK3GBr8TfpMh16gHTzqPyTAohxjYMCA1ModbSW_7l0aQHl-COZ3QWijEvzMn5OgFJZHLu049oqrvWAjXPOi28yqGoyXivjmWQLt7EeD4QjF5Mi1iR8HanyMGQ5L0IPp40u8xs16O5ttKqTrDR6rLYBEQ.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/rtbkIzC8dAE8l0Y7cSVB5rd3maefLxIVBcOxyZvkCeef4hcm9c-n_riplRAy17vylNXTUBw_cK5hjfqyVFkPfFX15Wma99jM2tKlq7gocoVuppUvn3TlM_Qkj5cCV9Lz31razRrBypNAzJY1z3A3MikCUlzOCLHSwc06YAwjDQCtmTdEcJArdssJlQ_n87Yy4VQAisfSVErLZwgy2jEqTOk9eyleAlHdO4efW7sN32D77Jle647r1_pcFWngJEZb22G54Mz2rb3v5nt_NvpYZn1oms_8A9VdahF1XkB4JI977M5hZUx58d5CBt728C58tFd8qMIz--36Ee19pnYLYg.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/nDTvBgl5tQQyDP_wFkYkDx3bP57qrkA9Ejv2fkBuJLooybCwMVGxwcKI1C0zuCou3HIeEgcTkRWKcExovUSv-ObXeM6QeOkFSKFw8KlcMVTlkce_oifSHBjsQcuIpqpM1vxEXM9PO9zKdDDPY0ZIz3D46aipfNTXYMqi_S1DA_-r9fXkLPPfMI7ikXhy1D3EysnCEVwLKtyBh6Qvh7Cfa-HEsK2tl-UeFblDKn-tm24168YnAAxn_nJp8q7yJtfHHE2cPb91CBcT0xgdmbRIe4LdHax5RDSXQ4AsjefLGGbgJkE7WGQi4l4LyVSoBQ2dx8bs3RnTZegzvC0xpKun2Q.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/gonJOImQC2A4dfhtU0HoNcjyh6bBi26jjyOco1pk8zUvL_dKZ1fqzUdyF84J10fxFU4xpHhQYyJ2__rpM2uJzjsSoUNR3637lmO4vJLptLBPYAgZaIqQsaX27PlcQG-AqRtKzqzK6suvKIFChysSR38goO2m3qharIG4UYfEE6XtH0cskB6z9U1JwDjo3t4oQZo5lEpg8NyjLdCIp0guAmI7P4ESE21qvsgAxO2aiRScDAJ1L9MtKZZcF_0SsaU0YxtREyUvHEBb8rLpzmJxb1WquIoH7wbH_LYU0hW1yw6-6G2_FQdQw1I5J8Jgfch32TccDf0gfYMWexhiOCvQ_g.jpg)
![](https://photo.group-telegram.com/u/cdn4.cdn-telegram.org/file/LgnkKj0U_EKhiodsLkGygDX1K_En6eS0bKoqGek68GW_Q_IQXofLNSCrEjkeHbyYD0H0GgNT8esWwFggryEMDvkn-2ed5NWDzVqhNMgplsph1mMGu5T_n4Eg7EB_w1VY6BOinPzMMy96WRO_dxTjo7f3PMcO8SpF-FVYX_ev4jU5a2b-5zSuk8GXDkIXCdCF0CWDVcgo-tmV7O_-geX5CrL7bvWwS2lQ-4xxjguf-w9mSaBbDEHFLe0zg_FpPaYAPjKFEanDSLcYCnZUBIg7vhUhSTId4O5iRwZMdlSzAvLQ2fXc5utbdCbsu7ge5DxkuCFzaxXTqSklsnv8uTFOqQ.jpg)
Share with your friend now:
group-telegram.com/nlpwanderer/90