kvcached: виртуальный эластичный KV-кэш для LLM на общих GPU
kvcached вводит виртуальный эластичный KV-кэш для LLM, что сокращает потребление памяти и ускоряет активацию моделей при колокации на общих GPU.
Почему KV-кэш расходует память GPU
При разворачивании больших языковых моделей движки часто резервируют большие статические области памяти под KV-кэш для каждой модели. Такая предрезервация остаётся пустой при всплесках трафика или простое моделей, что приводит к простаивающей памяти, замедленным активациям и низкой загрузке устройств в кластерах с множеством моделей.
Что предлагает kvcached
kvcached — библиотека, созданная в Sky Computing Lab при UC Berkeley совместно с Rice University и UCLA и с вкладом от коллег из индустрии. Библиотека вводит абстракцию виртуальной памяти в стиле ОС для KV-кэша. Вместо того чтобы сразу резервировать и физически выделять всю память, движок резервирует непрерывный диапазон виртуальных адресов, а kvcached подключает к нему только активные страницы GPU по мере необходимости, используя CUDA виртуальную память.
Как это работает
Движок создаёт пул KV-кэша, непрерывный в виртуальном адресном пространстве. По мере поступления токенов библиотека лениво мапит физические GPU-страницы с тонкой гранулярностью. Когда запросы завершаются или модель простаивает, страницы размаршрутируются и возвращаются в общий пул, где другие соседи могут сразу их переиспользовать. Такой подход сохраняет простую арифметику указателей в ядрах и снимает необходимость в пользовательском уровне пейджинга внутри движка.
kvcached использует возможности CUDA VMM для мапинга и демапинга страниц. Проект нацелен на интеграцию с SGLang и vLLM и распространяется под лицензией Apache 2.0. В репозитории есть инструкции по установке и быстрый запуск в одну команду.
Влияние в масштабе
В производственных нагрузках, где хостится множество моделей с длинным хвостом запросов и всплесками, статические резервы приводят к блокировке памяти и замедлению времени до первого токена (TTFT) при активации моделей. Исследования показывают, что для мульти-LLM обслуживания нужна координация памяти между моделями в рантайме, а не только планирование вычислений. Проект Prism реализует on demand мапинг и двухуровневый планировщик и демонстрирует более чем двукратную экономию затрат и 3.3 раза выше достижение TTFT SLO на реальных трассах. kvcached фокусируется на предоставлении примитива управления памятью, который можно повторно использовать в массовых движках.
Сигналы производительности
Команда kvcached сообщает улучшения TTFT от 1.2x до 28x для сценариев с несколькими моделями. Такие улучшения достигаются за счёт немедленного переиспользования освобождённых страниц и отказа от больших статических выделений, которые удерживают память длительное время. Наибольший эффект наблюдается там, где задержки активации и свободный объем памяти определяют хвостовые задержки.
Практические применения для разработчиков
- Колокация моделей: несколько небольших или средних моделей могут сосуществовать на одном устройстве. Когда одна модель простаивает, её KV-страницы быстро освобождаются, и другая модель может расширить рабочий набор без перезапуска.
- Поведение при активации: виртуальные резервы позволяют заранее подготовить диапазоны адресов и мапить страницы по мере прихода токенов, снижая время активации холодных моделей.
- Автоскейлинг для serverless: тонкая гранулярность мапинга делает возможным чаще создавать и удалять реплики и держать холодные модели в тёплом состоянии с минимальным использованием памяти.
- Оффлоад и будущее развитие: виртуальная память открывает путь к выгрузке KV в оперативную память хоста или NVMe при подходящем паттерне доступа. Пропускная способность и задержки сильно зависят от локальности доступа и топологии PCIe или NVLink, поэтому рекомендуется проверять производительность в собственной инфраструктуре.
Интеграция и принятие
kvcached предоставляет переиспользуемый компонент, который упрощает внедрение виртуализованного KV-кэша в существующие движки. Он сохраняет ожидания по указателям внутри ядер и одновременно даёт динамическую рекламацию и распределение памяти между моделями. Проект открыт и документирован, что облегчает тестирование в продуктивных пайплайнах.
Основные выводы
kvcached виртуализирует KV-кэш через GPU виртуальную память, даёт возможность резервировать виртуальное пространство и мапить физические страницы по требованию. Это обеспечивает эластичное выделение и возврат памяти при динамических нагрузках, улучшает колокацию моделей, снижает время до первого токена и помогает уменьшить затраты по сравнению со статическими резервациями. Для кластеров с множеством моделей и всплесками трафика виртуализация KV-кэша делает колокацию безопаснее, активации быстрее, а автоскейлинг плотнее.
Switch Language
Read this article in English