Перейти к содержанию

Управление службой кэширования

Служба кэширования предоставляет общий KV-кэш, к которому подключаются развёртывания моделей вместо хранения собственного кэша. Кэш находится вне движка инференса: развёртывания и реплики на одном воркере повторно используют префиксы друг друга, а хранилище L2 позволяет делать это после перезапусков и между узлами.

Службы кэширования подключаются только к встроенным серверным бэкендам vLLM и SGLang, а развертывание может подключаться только к службе кэширования в собственном кластере.

Создание службы кэширования.

  1. Перейдите на страницу Cache Service.
  2. Нажмите кнопку Add Cache Service и выберите провайдера.
  3. Введите Name.
  4. Выберите Version или выберите Custom и введите Container Image.
  5. Заполните настройки провайдера, например RAM Size (GiB) — объём кэша, хранящийся в памяти кэш-сервера.
  6. (Необязательно) Задайте Worker Label Selector, чтобы ограничить набор воркеров, на которых работает служба.
  7. (Необязательно) Добавьте L2 Storage Backend, чтобы перенести кеш на более крупный уровень (локальный каталог, Redis или Valkey или хранилище объектов, совместимое с S3). Несколько записей имеют приоритет по порядку: чтение предпочитает первую, запись — все.
  8. (Необязательно) Под Advanced добавьте Parameters и Environment Variables. Служба, выполняющая более одного компонента, хранит отдельный список параметров для каждого компонента, поскольку каждый из них запускает свой двоичный файл.
  9. Нажмите кнопку Save.

Совет

Изменения существующей службы кэширования вступают в силу только после удаления и повторного создания ее экземпляров.

Прикрепите развертывание

  1. Создайте или отредактируйте развертывание модели с помощью встроенного бэкенда vLLM или SGLang.
  2. Выберите Enable Extended KV Cache.
  3. Установите Cache Backend для службы кэширования. В списке перечислены только службы кэширования в том же кластере, совместимые с выбранной серверной частью.
  4. Нажмите кнопку Save.

Каждый экземпляр сообщает, к какой службе кэширования он подключён, и недавнюю долю попаданий. Если экземпляр запустился без кэша, например потому, что на его воркере не было доступного экземпляра кэша, он показывает, что общий KV-кэш не активен, и продолжает работу без ошибки.

Запуск моделей гибридного внимания с помощью LMCache

Гибридная модель чередует повторяющиеся уровни — линейное внимание Mamba или Gated-DeltaNet (GDN) — со слоями полного внимания. Серии Qwen3.5 и Qwen3.6, Qwen3-Next, Kimi-Linear и Kimi K3 относятся к этому типу.

Рекуррентный слой хранит состояние фиксированного размера вместо пары ключ/значение на каждый токен; снимок этого состояния можно получить только на границе блока. Поэтому размер блоков движка определяется моделью и намного превышает обычные несколько токенов. LMCache сможет обслуживать модель, только если его единицы хранения кэша согласованы с этими границами. Ни одна сторона не настраивает это автоматически: без настройки движок либо не запускается, либо подключается к кэшу, но не получает ни одного попадания.

Шаг 1. Найдите размер блока, выбранный движком.

vLLM увеличивает размер блока внимания до тех пор, пока страница внимания не станет по крайней мере такой же большой, как страница с повторяющимся состоянием, и записывает результат при запуске развертывания:

Setting attention block size to 544 tokens to ensure that attention page size is >= mamba page size.

Это число — N. Оно зависит от модели, типа данных и параллелизма, поэтому берите его из журнала собственного развёртывания. Ниже приведены значения из запусков на одном GPU с исходной точностью модели: они помогают проверить правдоподобность результата, но не заменяют чтение журнала.

Модель N
Qwen/Qwen3.5-0.8B 544
Qwen/Qwen3.6-27B 784
moonshotai/Kimi-Linear-48B-A3B-Instruct 944
moonshotai/Kimi-K3 768

Шаг 2. Настройте службу кэширования.

  • Установите для Chunk Size значение N или кратное ему значение. Размер блока кэш-сервера должен быть кратным размеру блока механизма, иначе регистрация кэша не удастся.
  • Добавьте --separate-object-groups к Parameters кэш-сервера, чтобы каждое окно внимания сохранялось как отдельная группа объектов. Сервер по умолчанию отключает это.

Примечание

Размер блока хранения задаётся у службы кэширования, а не у развёртывания. Служба, настроенная на одно значение N, также обслуживает обычные модели, если размер их блока является его делителем. Двум гибридным моделям с разными N нужны отдельные службы кэширования.

Шаг 3. Разверните модель в сервисе.

Разверните модель, как указано в пункте Прикрепите развертывание, выбрав службу кэширования из шага 2 в качестве Cache Backend. Работающий экземпляр сообщает о службе, к которой он подключен, и о наблюдаемой частоте обращений.

Ссылка

Гибридные модели внимания — описание этого требования в документации LMCache и соответствующих флагов его сервера.

Настройка поставщиков кэша

Доступны провайдеры, включённые в этот выпуск, и добавленные установленными расширениями. Администраторы платформы могут заменить весь набор собственным документом, чтобы закрепить другой образ, добавить версию или объявить провайдера, которого нет в поставке GPUStack.

  1. Перейдите на страницу Cache Service.
  2. Нажмите кнопку Manage Providers.
  3. В ящике Provider Source выберите один из трёх источников:

    • Yaml File: вставьте содержимое в редактор или нажмите Import, чтобы загрузить в него файл.
    • URL: введите Source URL. Сервер получает его, когда вы сохраняете, и снова, когда вы нажимаете Update Now. Он должен быть http(s), не должен содержать учетные данные, должен указывать на сам файл, а не на страницу репозитория, иметь кодировку UTF-8 и размер не более 4 МБ.
    • Embedded: вернитесь к поставщикам, представленным в этом выпуске.
  4. Нажмите кнопку Save.

Предупреждение

Начинайте со встроенного файла, а не из пустого редактора. Собственный документ полностью заменяет весь набор — каждый провайдер, который в нем не заявлен, выходит из строя, включая тех, которым способствует установленное расширение. Нажмите Built-in File в заголовке редактора, чтобы загрузить то, что в данный момент обслуживает эта установка, и отредактировать это.

Документ проверяется при сохранении и отклоняется целиком, если в нём есть непригодное для запуска объявление: неподдерживаемый этой версией формат, заполнитель, который выведется буквально, или несуществующее поле. Последнее особенно важно: неизвестные ключи просто игнорируются, поэтому при опечатке run_cmd вместо run_command компонент иначе запускался бы вообще без команды.

Сохранение также отклоняется, если оно удалит провайдера или версию, которые ещё используются службой кэширования. Сообщение перечисляет все затронутые службы. Сначала удалите их или переведите на провайдера и версию из нового документа.

Примечание

Работающие экземпляры сохраняют объявление, с которым были запущены. Новое применяется после пересоздания экземпляра — так же, как при изменении провайдера во время обновления GPUStack.

Провайдеры не обновляются по расписанию: URL-источник читается при сохранении и нажатии Update Now. Если используется собственный документ, провайдеры из обновления GPUStack или нового расширения не появятся, пока вы сами не добавите их в него. Загрузите встроенный файл повторно, чтобы увидеть добавления.