PagedAttention ⇐ Васина Википедия
-
Автор темыwiki_en
- Всего сообщений: 120899
- Зарегистрирован: 16.01.2024
PagedAttention
«PagedAttention» — это алгоритм внимания для эффективного обслуживания больших языковых моделей (LLM). Он был представлен в 2023 году Вусуком Квоном и его коллегами в статье «Эффективное управление памятью для обслуживания больших языковых моделей с помощью PagedAttention».
== Фон ==
В Transformer (архитектура глубокого обучения)|Вывод Transformer, Transformer (глубокое обучение)#KV-кэширование|Кэш ключ-значение растет с длиной последовательности и количеством одновременных вычислений|одновременных запросов. Квон и др. утверждали, что более ранние обслуживающие системы обычно заранее резервировали смежные области кэша, что приводило к зарезервированному пространству, внутренней и внешней фрагментации. В ходе экспериментов в документе сообщалось, что эффективное использование памяти предыдущих систем могло упасть до 20,4%.
== Описание ==
PagedAttention разделяет кэш (вычисления)|кеш каждой последовательности на «блоки KV» фиксированного размера. Кэш запроса представлен как последовательность логических блоков, а таблица блоков сопоставляет эти логические блоки с физическими блоками памяти графического процессора. В результате соседние логические блоки не обязательно должны быть непрерывными в физической памяти, а новые блоки могут выделяться по требованию по мере генерации.
Такая конструкция также упрощает совместное использование состояния кэша по связанным путям декодирования. В vLLM физические блоки могут иметь подсчет ссылок и совместно использоваться запросами или ветвями, а копирование при записи с детализацией блоков используется, когда общий блок необходимо изменить. В исходной статье эта конструкция применялась к параллельной выборке, поиску лучей и подсказкам с общими префиксами.
== Математическая формулировка ==
Для токена запроса i в причинном самовнимании стандартный вывод внимания может быть записан как
a_{ij}=\frac{\exp(\mathbf{q}_i^\top \mathbf{k}_j/\sqrt{d})}{\sum_{t=1}^{i}\exp(\mathbf{q}_i^\top \mathbf{k}_t/\sqrt{d})},\;
\mathbf{o}_i=\sum_{j=1}^{i} a_{ij}\mathbf{v}_j
где \mathbf{q}_i, \mathbf{k}_j и \mathbf{v}_j — векторы запроса, ключа и значения, а d — измерение внимания.
Если кеш разделен на блоки размером B, блоки ключей и значений могут быть записаны как
\mathbf{K}_j=(\mathbf{k}_{(j-1)B+1},\ldots,\mathbf{k}_{jB}),\;
\mathbf{V}_j=(\mathbf{v}_{(j-1)B+1},\ldots,\mathbf{v}_{jB})
Затем PagedAttention выполняет вычисления поблочно:
\mathbf{A}_{ij}=
\frac{\exp(\mathbf{q}_i^\top \mathbf{K}_j/\sqrt{d})}
{\sum_{t=1}^{\lceil i/B \rceil}\exp(\mathbf{q}_i^\top \mathbf{K}_t/\sqrt{d})},\;
\mathbf{o}_i=\sum_{j=1}^{\lceil i/B \rceil}\mathbf{V}_j\mathbf{A}_{ij}^{\top}
где \mathbf{A}_{ij} — вектор оценок внимания для j-го блока KV. В формулировке, данной Квоном и др., это сохраняет расчет причинного внимания, позволяя при этом блокам ключей и значений находиться в несмежной физической памяти.
== Производительность и использование ==
В документе vLLM сообщается, что в оцениваемых рабочих нагрузках использование PagedAttention и связанной с ним конструкции управления памятью улучшило пропускную способность обслуживания в 2–4 раза по сравнению с сравниваемыми базовыми показателями, включая FasterTransformer и Orca, сохраняя при этом выходные данные модели. В экспериментах на OPT-13B с трассировкой Alpaca в документе также сообщается об экономии памяти на уровне 6,1–9,8% для параллельной выборки и 37,6–55,2% для поиска луча посредством совместного использования KV-блока.
Исследование систем обслуживания LLM, проведенное в 2024 году, показало, что PagedAttention стало отраслевой нормой в рамках обслуживания LLM, со ссылкой на поддержку в TGI, vLLM и TensorRT-LLM.
== Ограничения и альтернативы ==
Последующая работа описала компромиссы в этом подходе. В документе vAttention от 2025 года утверждается, что PagedAttention требует перезаписи ядер внимания для поддержки подкачки и увеличивает сложность программного обеспечения, проблемы с переносимостью, избыточность и накладные расходы на выполнение, предлагая вместо этого диспетчер памяти, который поддерживает непрерывный кэш в виртуальной памяти, полагаясь при этом на подкачку по запросу для физического распределения.
=== vВнимание ===
В отличие от PagedAttention, vAttention не вводит другое правило внимания; он сохраняет стандартный расчет внимания
\operatorname{Внимание}(q_i,K,V)=\operatorname{softmax}\left(\frac{q_iK^\top}{\mathrm{scale\right)V.
В обозначениях Прабху «и др.» тензоры ключа и значения для запроса, наблюдаемого до сих пор, таковы:
K,V \in \mathbb{R}^{L' \times (H \times D)},
где L' — длина контекста, наблюдаемая на данный момент, H — количество головок KV у рабочего, а D — размер каждой головки KV.
В системах до PagedAttention кэш K (или кэш V) на каждом уровне работника обычно выделяется в виде 4D-тензора формы
[Б, Л, Ч, Д],
где B — размер пакета, а L — максимальная длина контекста, поддерживаемая моделью.
vAttention сохраняет это непрерывное представление виртуальной памяти, откладывая выделение физической памяти до времени выполнения. Платформа обслуживания поддерживает отдельные тензоры K и V для каждого слоя, поэтому vAttention резервирует
2Н
буферы виртуальной памяти на рабочем объекте, где N — количество слоев, управляемых этим рабочим процессом.
Максимальный размер одного буфера виртуальной памяти
BS = B\times S,
где S — максимальный размер поуровневого кэша K (или V-кеша) одного запроса в рабочем процессе. В документе определены
S = L\times H\times D\times P,
где P — количество байтов, необходимое для хранения одного элемента.
В этой формулировке vAttention поддерживает непрерывность кэша KV в виртуальной памяти и использует подкачку по требованию для физического распределения, а не модифицирует ядро внимания для работы с несмежными блоками кэша KV.
== См. также ==
* Механизм внимания
* Поиск луча
* Политики замены кэша
* Список алгоритмов искусственного интеллекта
Алгоритмы
Искусственный интеллект
Большие языковые модели
Подробнее: https://en.wikipedia.org/wiki/PagedAttention
«PagedAttention» — это алгоритм внимания для эффективного обслуживания больших языковых моделей (LLM). Он был представлен в 2023 году Вусуком Квоном и его коллегами в статье «Эффективное управление памятью для обслуживания больших языковых моделей с помощью PagedAttention».
== Фон ==
В Transformer (архитектура глубокого обучения)|Вывод Transformer, Transformer (глубокое обучение)#KV-кэширование|Кэш ключ-значение растет с длиной последовательности и количеством одновременных вычислений|одновременных запросов. Квон и др. утверждали, что более ранние обслуживающие системы обычно заранее резервировали смежные области кэша, что приводило к зарезервированному пространству, внутренней и внешней фрагментации. В ходе экспериментов в документе сообщалось, что эффективное использование памяти предыдущих систем могло упасть до 20,4%.
== Описание ==
PagedAttention разделяет кэш (вычисления)|кеш каждой последовательности на «блоки KV» фиксированного размера. Кэш запроса представлен как последовательность логических блоков, а таблица блоков сопоставляет эти логические блоки с физическими блоками памяти графического процессора. В результате соседние логические блоки не обязательно должны быть непрерывными в физической памяти, а новые блоки могут выделяться по требованию по мере генерации.
Такая конструкция также упрощает совместное использование состояния кэша по связанным путям декодирования. В vLLM физические блоки могут иметь подсчет ссылок и совместно использоваться запросами или ветвями, а копирование при записи с детализацией блоков используется, когда общий блок необходимо изменить. В исходной статье эта конструкция применялась к параллельной выборке, поиску лучей и подсказкам с общими префиксами.
== Математическая формулировка ==
Для токена запроса i в причинном самовнимании стандартный вывод внимания может быть записан как
a_{ij}=\frac{\exp(\mathbf{q}_i^\top \mathbf{k}_j/\sqrt{d})}{\sum_{t=1}^{i}\exp(\mathbf{q}_i^\top \mathbf{k}_t/\sqrt{d})},\;
\mathbf{o}_i=\sum_{j=1}^{i} a_{ij}\mathbf{v}_j
где \mathbf{q}_i, \mathbf{k}_j и \mathbf{v}_j — векторы запроса, ключа и значения, а d — измерение внимания.
Если кеш разделен на блоки размером B, блоки ключей и значений могут быть записаны как
\mathbf{K}_j=(\mathbf{k}_{(j-1)B+1},\ldots,\mathbf{k}_{jB}),\;
\mathbf{V}_j=(\mathbf{v}_{(j-1)B+1},\ldots,\mathbf{v}_{jB})
Затем PagedAttention выполняет вычисления поблочно:
\mathbf{A}_{ij}=
\frac{\exp(\mathbf{q}_i^\top \mathbf{K}_j/\sqrt{d})}
{\sum_{t=1}^{\lceil i/B \rceil}\exp(\mathbf{q}_i^\top \mathbf{K}_t/\sqrt{d})},\;
\mathbf{o}_i=\sum_{j=1}^{\lceil i/B \rceil}\mathbf{V}_j\mathbf{A}_{ij}^{\top}
где \mathbf{A}_{ij} — вектор оценок внимания для j-го блока KV. В формулировке, данной Квоном и др., это сохраняет расчет причинного внимания, позволяя при этом блокам ключей и значений находиться в несмежной физической памяти.
== Производительность и использование ==
В документе vLLM сообщается, что в оцениваемых рабочих нагрузках использование PagedAttention и связанной с ним конструкции управления памятью улучшило пропускную способность обслуживания в 2–4 раза по сравнению с сравниваемыми базовыми показателями, включая FasterTransformer и Orca, сохраняя при этом выходные данные модели. В экспериментах на OPT-13B с трассировкой Alpaca в документе также сообщается об экономии памяти на уровне 6,1–9,8% для параллельной выборки и 37,6–55,2% для поиска луча посредством совместного использования KV-блока.
Исследование систем обслуживания LLM, проведенное в 2024 году, показало, что PagedAttention стало отраслевой нормой в рамках обслуживания LLM, со ссылкой на поддержку в TGI, vLLM и TensorRT-LLM.
== Ограничения и альтернативы ==
Последующая работа описала компромиссы в этом подходе. В документе vAttention от 2025 года утверждается, что PagedAttention требует перезаписи ядер внимания для поддержки подкачки и увеличивает сложность программного обеспечения, проблемы с переносимостью, избыточность и накладные расходы на выполнение, предлагая вместо этого диспетчер памяти, который поддерживает непрерывный кэш в виртуальной памяти, полагаясь при этом на подкачку по запросу для физического распределения.
=== vВнимание ===
В отличие от PagedAttention, vAttention не вводит другое правило внимания; он сохраняет стандартный расчет внимания
\operatorname{Внимание}(q_i,K,V)=\operatorname{softmax}\left(\frac{q_iK^\top}{\mathrm{scale\right)V.
В обозначениях Прабху «и др.» тензоры ключа и значения для запроса, наблюдаемого до сих пор, таковы:
K,V \in \mathbb{R}^{L' \times (H \times D)},
где L' — длина контекста, наблюдаемая на данный момент, H — количество головок KV у рабочего, а D — размер каждой головки KV.
В системах до PagedAttention кэш K (или кэш V) на каждом уровне работника обычно выделяется в виде 4D-тензора формы
[Б, Л, Ч, Д],
где B — размер пакета, а L — максимальная длина контекста, поддерживаемая моделью.
vAttention сохраняет это непрерывное представление виртуальной памяти, откладывая выделение физической памяти до времени выполнения. Платформа обслуживания поддерживает отдельные тензоры K и V для каждого слоя, поэтому vAttention резервирует
2Н
буферы виртуальной памяти на рабочем объекте, где N — количество слоев, управляемых этим рабочим процессом.
Максимальный размер одного буфера виртуальной памяти
BS = B\times S,
где S — максимальный размер поуровневого кэша K (или V-кеша) одного запроса в рабочем процессе. В документе определены
S = L\times H\times D\times P,
где P — количество байтов, необходимое для хранения одного элемента.
В этой формулировке vAttention поддерживает непрерывность кэша KV в виртуальной памяти и использует подкачку по требованию для физического распределения, а не модифицирует ядро внимания для работы с несмежными блоками кэша KV.
== См. также ==
* Механизм внимания
* Поиск луча
* Политики замены кэша
* Список алгоритмов искусственного интеллекта
Алгоритмы
Искусственный интеллект
Большие языковые модели
Подробнее: https://en.wikipedia.org/wiki/PagedAttention
Мобильная версия