Смягчение фрагментации кв-кэша: более тонкое распределение памяти Vattention

Смягчение фрагментации кв-кэша: более тонкое распределение памяти Vattention

12 июня 2025 г.

Аннотация и 1 введение

2 фон

2.1 Модели больших языков

2.2 Фрагментация и Pagegataturation

3 проблемы с моделью Pagegatatturetion и 3.1 требуют переписывания ядра внимания

3.2 Добавляет избыточность в рамки порции и 3,3 накладных расходов

4 понимания систем обслуживания LLM

5 Vattument: проектирование системы и 5.1 Обзор дизайна

5.2 Использование поддержки CUDA низкого уровня

5.3 Служение LLMS с ваттенцией

6 -й ваттиция: оптимизация и 6,1 смягчения внутренней фрагментации

6.2 Скрытие задержки распределения памяти

7 Оценка

7.1 Портативность и производительность для предпочтений

7.2 Портативность и производительность для декодов

7.3 Эффективность распределения физической памяти

7.4 Анализ фрагментации памяти

8 Связанная работа

9 Заключение и ссылки

6 -й ваттиция: оптимизация

Есть две основные проблемы при использовании поддержки виртуальной памяти CUDA для обслуживания LLMS. Во -первых, в настоящее время Cumemcreate выделяет как минимум 2 МБ, страницы физической памяти. Большие страницы могут тратить физическую память из -за внутренней фрагментации. Во -вторых, вызывая API CUDA вносят высокую задержку. В этом разделе подробно описывается набор простых, но эффективных оптимизаций, которые мы представляем для преодоления этих ограничений.

6.1 Смягчение внутренней фрагментации

Мы смягчаем внутреннюю фрагментацию, уменьшая гранулярность распределения физической памяти. Графические графические процессоры NVIDIA изначально поддерживают не менее трех страниц: 4 КБ, 64 КБ и 2 МБ. Следовательно, в принципе, физическая память может быть выделена в любом кратном размерах 4 КБ. Самым простым способом достижения этого было бы расширить существующие API виртуальной памяти CUDA (перечисленные в таблице 3), чтобы также поддерживать распределение более мелких страниц (аналогично тому, как MMAP в Linux поддерживает несколько страниц). К сожалению, API CUDA реализованы в драйверах NVIDIA с закрытым исходным кодом, что делает невозможным для нас изменять их реализацию.

К счастью, некоторая часть драйверов NVIDIA (особенно связанных с унифицированным управлением памятью),-это открытый источник. Поэтому мы реализуем новый набор API в драйверах NVIDIA с открытым исходным кодом, чтобы имитировать ту же функциональность, что и существующие API CUDA, но при поддержке нескольких размеров страниц. Второй столбец в Таблице 3 показывает наши новые API: большинство наших API имеют отношение один к одному с существующими API CUDA, за исключением VMEMMAP, который сочетает в себе функциональность Cumemmap и CumemeSetaccess, и Vmemrelease, который сочетает в себе функциональность Cumemunmap и Cumemrelease для простоты. В отличие от API CUDA, наши API могут выделять память в размерах страниц 64 КБ, 128 КБ и 256 КБ. Структура порции может настроить желаемый размер страницы в ваттенции при ее инициализации: мы рекомендуем по умолчанию использовать страницы 256 КБ. Последний набор столбцов в таблице 3 показывает задержку каждого API с разными размерами страниц.

Эта статья естьДоступно на ArxivПод CC по лицензии 4.0.

Авторы:

(1) Рамья Прабху, Microsoft Research India;

(2) Аджай Наяк, Индийский институт науки и участвовал в этой работе в качестве стажера в Microsoft Research India;

(3) Джаяшри Мохан, Microsoft Research India;

(4) Рамачандран Рамджи, Microsoft Research India;

(5) Ашиш Панвар, Microsoft Research India.


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE