ТЕХНОЛОГИИ

llama.cpp: как связать общий KV pool и лимит контекста каждого слота

В этом материале
ГЛАВНОЕ ЗА МИНУТУ

Общий KV pool llama.cpp и контекст одного параллельного слота нужно учитывать отдельно.

Общий KV pool llama.cpp и контекст одного параллельного слота нужно учитывать отдельно. Суммарное количество токенов в пуле не означает, что каждый запрос может использовать весь объем одновременно с остальными. Проверьте правила kv-unified-per-slot, число slots и фактические ограничения runtime. Приемка должна подтверждать индивидуальный контракт запроса и совместное выполнение, а не только успешный старт сервера с большим общим значением context.

Разведите pool и slot

В определении аргументов llama.cpp kv-unified-per-slot задает предел контекста слота; там же описано sizing общего пула при определенных unset настройках. Параметр kv-unified относится к совместному буферу последовательностей. Это не превращает разные GPU memories в автоматически единое устройство и не описывает размер самих весов. Сначала запишите число параллельных slots и явно заданный context, затем установите применимое правило расчета, не смешивая различные единицы и области ограничения в одной цифре.

Проверьте фактические пределы

Серверный код содержит проверки состояния и контекста конкретного слота. Поэтому effective slot limit следует получать из поддерживаемых наблюдений runtime и приемочного поведения, а не делением любого числа на parallel без учета режима. Зафиксируйте версию сборки, поскольку новые параметры способны менять правила распределения. Если вход отклоняется, сохраните сообщение ошибки и соответствующий слот. Ошибка индивидуального предела и общая нехватка ресурса объясняют разные случаи и требуют разных корректировок конфигурации.

Пример карты емкости

Для учебного сервера с тремя слотами составьте таблицу: slot, индивидуальный предел, занятый context и состояние. Число три — размер примера, не рекомендация parallel. Отдельной строкой укажите shared pool и способ его настройки. Затем проверьте один длинный запрос и несколько одновременных запросов с сохраненными token lengths. Не считайте успех одиночного случая доказательством общей емкости: остальные slots в нем не предъявляли конкурирующих требований, поэтому такой тест покрывает лишь часть будущего клиентского контракта.

Диагностическая развилка

Если длинный запрос отклоняется при свободном пуле, сначала проверьте индивидуальную границу. Если отдельные запросы проходят, а совместная серия нет, исследуйте распределение общей емкости и фактическую загрузку slots. Не уменьшайте веса или меняйте quantization без признаков соответствующей причины. Сохраните порядок подачи, длины входов и output budgets. В динамическом разговоре растущий history тоже занимает контекст, поэтому одноразовый короткий prompt не проверяет поведение с накопленными сообщениями и может скрыть будущий отказ продолжения диалога.

Приемочный артефакт

Документируйте обе границы, режим KV, число slots и fixtures для индивидуальной и совместной проверки. Укажите, какие значения были заданы явно и какие рассчитаны runtime. После смены fit или parallel повторите приемку, даже если общий context остался тем же. Полезный результат позволяет оператору объяснить допустимую длину одного запроса и условия конкуренции без неверной формулы «весь пул каждому». Не обещайте произвольное перераспределение сверх возможностей выбранного режима. Такая карта также помогает клиенту различать превышение индивидуального контракта и временную нехватку общей емкости, не подменяя обе ситуации единым советом увеличить max context или купить больше VRAM без проверки механизма ограничения.

Связанные материалы

Длинный контекст LLM: как проверить сервер для работы с документами; llama.cpp server: локальный API из GGUF-модели.

← Все материалы