Большие языковые модели часто тратят впустую память GPU, поскольку механизмы предварительно резервируют большие статические области KV-кэша для каждой модели, даже когда запросы поступают всплесками или модель простаивает.
kvcached — это библиотека, разработанная исследователями из Berkeley’s Sky Computing Lab (Университет Калифорнии, Беркли) в тесном сотрудничестве с Rice University и UCLA, а также при участии коллег из NVIDIA, Intel Corporation и Stanford University. Она представляет собой абстракцию виртуальной памяти в стиле ОС для KV-кэша, которая позволяет механизмам обслуживания резервировать непрерывное виртуальное пространство, а затем по требованию выделять только активные части физическими страницами GPU.
Что меняет kvcached?
С помощью kvcached механизм создаёт пул KV-кэша, который является непрерывным в виртуальном адресном пространстве. По мере поступления токенов библиотека лениво сопоставляет физические страницы GPU с использованием API виртуальной памяти CUDA. Когда запросы завершаются или модели простаивают, страницы удаляются из сопоставления и возвращаются в общий пул, который другие совместно размещённые модели могут немедленно использовать повторно.
Это сохраняет простую арифметику указателей в ядрах и устраняет необходимость в подкачке на уровне пользователя для каждого механизма. Проект нацелен на интеграцию с SGLang и vLLM и выпущен под лицензией Apache 2.0.
Влияние на производительность в масштабе
Производственные рабочие нагрузки размещают множество моделей с длинным хвостом трафика и всплесками нагрузки. Статические резервирования оставляют память неиспользованной и замедляют время до первого токена, когда модели должны быть активированы или заменены.
Исследование Prism показывает, что для обслуживания нескольких LLM требуется межмодельная координация памяти во время выполнения, а не только планирование вычислений. Prism реализует сопоставление физических и виртуальных страниц по требованию и двухуровневый планировщик и сообщает о более чем двукратном сокращении затрат и достижении 3,3-кратного более высокого уровня TTFT SLO по сравнению с предыдущими системами на реальных данных.
Ключевые показатели производительности
Команда kvcached сообщает о времени до первого токена в многомодельном обслуживании от 1,2 до 28 раз быстрее из-за немедленного повторного использования освобождённых страниц и устранения больших статических выделений. Эти цифры получены из сценариев с несколькими LLM, где задержка активации и запас памяти доминируют над задержкой хвоста.
Как это связано с недавними исследованиями?
Недавние работы перешли от фиксированного разделения к методам на основе виртуальной памяти для управления KV. Prism расширяет выделение на основе VMM до условий с несколькими LLM с межмодельной координацией и планированием. Предыдущие усилия, такие как vAttention, исследуют CUDA VMM для обслуживания одной модели, чтобы избежать фрагментации без PagedAttention.
Практические применения для разработчиков
* Совместное размещение моделей. Механизмы могут размещать несколько небольших или средних моделей на одном устройстве. Когда одна модель простаивает, её страницы KV освобождаются быстро, и другая модель может расширить свой рабочий набор без перезапуска. Это уменьшает блокировку в начале очереди во время всплесков и улучшает достижение TTFT SLO.
* Поведение при активации. Prism сообщает о времени активации около 0,7 секунды для модели 8B и около 1,5 секунды для модели 70B при потоковой активации. kvcached использует аналогичные принципы, поскольку виртуальные резервирования позволяют механизмам заранее подготовить диапазоны адресов, а затем сопоставлять страницы по мере поступления токенов.
* Автомасштабирование для бессерверного LLM. Тонкая настройка сопоставления страниц позволяет чаще масштабировать реплики и запускать холодные модели в тёплом состоянии с минимальным объёмом памяти. Это обеспечивает более жёсткие циклы автомасштабирования и уменьшает радиус поражения горячих точек.
* Выгрузка и будущая работа. Виртуальная память открывает возможность выгрузки KV в память хоста или NVMe, когда это позволяет шаблон доступа. Недавнее руководство NVIDIA по управляемой памяти для выгрузки KV в системах класса GH200 показывает, как унифицированные адресные пространства могут расширять ёмкость с приемлемой нагрузкой.
Основные выводы
* kvcached виртуализирует KV-кэш, используя виртуальную память GPU. Механизмы резервируют непрерывное виртуальное пространство и сопоставляют физические страницы по требованию, что обеспечивает эластичное выделение и освобождение памяти при динамических нагрузках.
* Интегрируется с основными механизмами вывода, в частности с SGLang и vLLM, и выпущен под лицензией Apache 2.0, что упрощает внедрение и модификацию для производственных стеков обслуживания.
* Публичные тесты сообщают о времени до первого токена в многомодельном обслуживании от 1,2 до 28 раз быстрее из-за немедленного повторного использования освобождённых страниц KV и устранения больших статических резервирований.
Проверьте пропускную способность и задержку в вашем конвейере, поскольку локальность доступа и топология PCIe оказывают сильное влияние.
Проверить GitHub-репозиторий, статью 1, статью 2 и технические подробности можно по ссылкам. Не стесняйтесь посетить нашу страницу GitHub для руководств, кодов и блокнотов. Подписывайтесь на нас в Twitter и присоединяйтесь к нашему ML SubReddit с более чем 100 тысячами участников и подписывайтесь на нашу рассылку. А если вы используете Telegram, присоединяйтесь к нам и там.
1. Какие проблемы решает библиотека kvcached при работе с большими языковыми моделями?
Ответ: kvcached решает проблему неэффективного использования памяти GPU при работе с большими языковыми моделями. Она позволяет механизмам обслуживания резервировать непрерывное виртуальное пространство для KV-кэша, а затем по требованию выделять только активные части физическими страницами GPU. Это позволяет избежать резервирования больших статических областей KV-кэша для каждой модели, когда запросы поступают всплесками или модель простаивает.
2. Какие преимущества предоставляет kvcached разработчикам при совместном размещении моделей?
Ответ: kvcached позволяет механизмам размещать несколько небольших или средних моделей на одном устройстве. Когда одна модель простаивает, её страницы KV освобождаются быстро, и другая модель может расширить свой рабочий набор без перезапуска. Это уменьшает блокировку в начале очереди во время всплесков и улучшает достижение TTFT SLO.
3. Какие ключевые показатели производительности демонстрирует kvcached?
Ответ: kvcached демонстрирует время до первого токена в многомодельном обслуживании от 1,2 до 28 раз быстрее из-за немедленного повторного использования освобождённых страниц KV и устранения больших статических выделений. Это достигается за счёт использования виртуальной памяти GPU и эластичного выделения и освобождения памяти при динамических нагрузках.
4. Какие практические применения предлагает kvcached для разработчиков?
Ответ: kvcached предлагает несколько практических применений для разработчиков, включая совместное размещение моделей, оптимизацию поведения при активации, автомасштабирование для бессерверного LLM и выгрузку KV в память хоста или NVMe. Это позволяет разработчикам более эффективно управлять ресурсами и оптимизировать производительность при работе с большими языковыми моделями.
5. Какие основные выводы можно сделать о kvcached на основе представленного текста?
Ответ: kvcached — это библиотека, разработанная для виртуализации KV-кэша при обслуживании больших языковых моделей на общих GPU. Она интегрируется с основными механизмами вывода, такими как SGLang и vLLM, и выпущена под лицензией Apache 2.0. Публичные тесты сообщают о значительном улучшении времени до первого токена в многомодельном обслуживании благодаря немедленному повторному использованию освобождённых страниц KV и устранению больших статических резервирований.