Думаю многие понимают что в современных LLM attention работает не как Attention(Q, K, V) = softmax(QK^T / √d_k)V
Решил покопаться в том, какие хаки используют в топовых моделях чтобы выжать максимум качества из внимания.
Multi-head Latent Attention (MLA)
Сжимают KV - проецируют в низкоразмерное пространство, а потом восстанавливают обратно когда нужно вычислять внимание.
Что дает: KV-cache меньше в 28 раз (с 213GB до 7.6GB), скорость +20x
Где: DeepSeek
Grouped Query Attention (GQA)
Вместо отдельных KV для каждой головы - шарят между группами. Типа 32 query головы делят 8 KV голов.
Что дает: Память меньше в 2-4 раза, инференс быстрее, можно дообучить существующую MHA модель за 5% compute
Где: Llama-2/3, Mistral, Gemma-2, Qwen
Multi-Query Attention (MQA)
Экстремальная версия GQA - всего 1 KV голова на все queries.
Что дает: Максимальная экономия памяти (до 8x), но качество страдает
Где: Falcon, PaLM, старые модели Google
Sliding Window Attention
Каждый токен смотрит только на n ближайших
Что дает: O(N) сложность вместо O(N²), можно обрабатывать бесконечные последовательности
Где: Mistral, Gemma-2 (чередует с полным), Longformer
Unmasked attention for prefix
Для системного сообщения в диалоге атеншн работает без маски, а для остальных сообщений в диалоге с. Таким образом ЛЛМ начинает напоминать encoer-decoder архитектуру.
Что дает: лучшее следование инструкциям
Где: эксперементировал гугл в 2021-23, но не вылилось ни во что большое. Сейчас в многих VLM атеншн по визуальным патчам работает именно так
Sparse Attention (H2O, Scissorhands)
На каждом шаге выкидываем из KV кеша те токены на которые мало смотрели на прошлыхх заменяя их 0.
Что дает: KV-cache меньше в 10-20 раз, но можно потерять важную информацию
Где: StreamingLLM, модели для длинного контекста, скорее экзотика
Linear Attention
Заменяют softmax на линейное ядро, позволяя формулировать как RNN.
Что дает: O(N) сложность, можно делать рекуррентный инференс с постоянной памятью
Где: RWKV, RetNet, Hyena, GLA - экзотика
Post #176
2.35K

- 👍 20
- ❤ 10
- 🥰 5
- 🔥 3