
Обслуживание LLMS с помощью ваттций: рабочий процесс и интеграция API
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 Заключение и ссылки
5.3 Служение LLMS с ваттенцией
Мы строим ваттенцию как библиотеку Python, которая внутренне использует расширение CUDA/C ++ для взаимодействия с драйверами CUDA. Наша библиотека разоблачает набор простых API, перечисленных в таблице 4, в рамках обслуживания.
5.3.1 Первоначальная настройка:Когда запускается структура порции, каждый работник модели загружает библиотеку Vattument и настраивает ее с параметрами модели 𝑁 ′, 𝐻, 𝐷, 𝑃, 𝐵 и предпочтительного размера страницы через API init. Внутренне, Vattument оставляет 2 × 𝑁 ′ Virtual Tensors (с использованием нашего модифицированного распределения кэширования Pytorch) для KV-кэша у каждого работника. Эти виртуальные тензоры зарезервированы для срока службы подачи заявления. Кроме того, ваттенция также предварительно выделяет страницы физической памяти во время инициализации. Тем не менее, эти страницы еще не отображаются в KV-кэш.
5.3.2 Планирование нового запроса:Когда новый запрос запланирован в первый раз, структура обслуживания получает новый Reqid от vattution через Alloc_Reqid. Все последующие операции по управлению памятью запроса помечены этим ReqID.
5.3.3 Выполнение модели:Прежде чем планировать партию для выполнения, фреймворк должен гарантировать, что подтяжки KV-Cache каждого активного запроса поддерживаются физической памятью. Для этой цели, прежде чем отправлять первое ядро итерации в GPU, структура вызывает API шага, указывая текущую длину контекста каждого запроса (длина контекста устанавливается на 0 для каждого неактивного ReqID). Внутренне, ваттенция гарантирует, что достаточное количество физических страниц отображается для каждого активного возврата, прежде чем вернуть выполнение обратно в структуру. Если поватификация не может удовлетворить спрос на память, она возвращается с отказом в ответ на то, что структура обслуживания может предотвратить один или несколько запросов, чтобы разрешить прогресс вперед (это похоже на поведение по умолчанию VLLM). Мы оставляем более сложные политики, такие как замена KV-Cache на память CPU в качестве будущей работы.
В зависимости от того, находится ли запрос в фазе предварительной заполнения или фазы декодирования, может потребоваться отображение различного количества страниц физической памяти для данной итерации. Фаза предварительной заполнения обрабатывает входные токены заданного приглашения параллельно и заполняет один слот в K-Cache (и V-Cache) запроса на каждом уровне модели. Следовательно, количество страниц, необходимого нанести на карту, зависит от количества
Запланированы быстрые токены. Если общий размер k-cache всех приглашенных токенов на одном слое модели составляет 𝑠, а размер страницы равен 𝑡, то каждый работник необходимо обеспечить, чтобы, по крайней мере, (𝑠 +𝑡-1)/𝑡 Страницы физической памяти отображаются в каждом из подтяжек 2 ° к-кэше данных данного ReqID.
Для запроса на этапе декодирования количество требуемых новых страниц составляет не более одного на запрос. Это потому, что каждая итерация производит только один выходной токен для запроса. Внутренняя часть отслеживает количество страниц, отображаемых для каждого запроса, и отображает новую страницу только тогда, когда последняя страница, выделенная на этот запрос, полностью используется.
5.3.4 Запрос завершить.Запрос заканчивается, когда пользователь указал длину контекста или максимальную длину контекста, поддерживаемая моделью, или когда модель создает специальный токен в конце последовательности. Структура уведомляет об исчезновении заполнения запроса с помощью free_reqid. Внутренне, ваттенция может разветвлять страницы заполненного запроса или отложить их, чтобы они были освобождены позже.
Эта статья естьДоступно на ArxivПод CC по лицензии 4.0.
Авторы:
(1) Рамья Прабху, Microsoft Research India;
(2) Аджай Наяк, Индийский институт науки и участвовал в этой работе в качестве стажера в Microsoft Research India;
(3) Джаяшри Мохан, Microsoft Research India;
(4) Рамачандран Рамджи, Microsoft Research India;
(5) Ашиш Панвар, Microsoft Research India.
Оригинал