Перейти к содержимому
НейроКуб
Открытый материал · 3 мин
Алина Прогресс

llama.cpp после перезапуска: как вернуть кеш инструкции из файла

Памятка по сохранению и восстановлению слота llama-server: что отправлять после загрузки, какие счётчики проверить и почему кеш не заменяет историю приложения.

Если локальный помощник каждый раз заново читает один и тот же справочник, в llama.cpp можно сохранить вычисленный кеш слота в файл и загрузить его обратно. Это полезная заготовка для повторяющихся запросов: например, вопросов к неизменной инструкции после перезапуска сервера.

В документации llama-server есть операции save и restore. Они сохраняют состояние вычислений, а приложение по-прежнему должно знать, какой текст и какой запрос отправить. Файл кеша не заменяет журнал диалога, список поручений или базу документов. Ниже — учебный протокол проверки, а не результат нашего замера скорости.

Сначала закрепите условия

Для первого опыта возьмите текстовый запрос, одну модель и один слот. Запишите версию llama.cpp, файл модели и параметры контекста. Используйте ту же сборку и настройки при восстановлении: переносимость между разными конфигурациями не стоит предполагать без отдельной проверки.

Серверу нужна доступная для записи папка, заданная параметром --slot-save-path. Чтобы учебные запросы не расходились по разным слотам, начните с --parallel 1 и явно указывайте id_slot: 0. Работайте на отдельном локальном экземпляре с нечувствительным текстом.

Сохраните прогрев и вернитесь к нему

Представим инструкцию к вымышленному чайнику. Сначала отправьте её в /completion: поле prompt содержит инструкцию, id_slot равно 0, cache_prompt — true. Если поставить n_predict: 0, сервер обработает промпт в кеш без генерации продолжения. Затем сохраните слот:

curl -sS -X POST 'http://127.0.0.1:8080/slots/0?action=save' \
  -H 'Content-Type: application/json' \
  -d '{"filename":"manual.bin"}'

В ответе проверьте успешный статус, n_saved и n_written. Файл появится внутри настроенной папки. После перезапуска с прежними условиями восстановите его:

curl -sS -X POST 'http://127.0.0.1:8080/slots/0?action=restore' \
  -H 'Content-Type: application/json' \
  -d '{"filename":"manual.bin"}'

Проверьте n_restored и n_read. Теперь снова передайте полный prompt: ту же инструкцию в начале и вопрос после неё, с id_slot: 0 и cache_prompt: true. Совпадающий префикс даёт возможность использовать прежние вычисления; изменение первых строк может уменьшить эту пользу.

Проверяйте повторное использование отдельно от качества

В тесте разработчиков состояние одного слота сохраняется, восстанавливается в другой, а затем проверяется число заново обработанных токенов. Это проверка конкретного сценария, а не обещание одинакового ускорения для любой модели.

В своём опыте сравните холодный запуск и восстановленный слот на одном вопросе. Зафиксируйте tokens_cached, время обработки промпта и корректность ответа. Повторите несколько раз: чтение файла тоже занимает время, поэтому итоговое ожидание может не сократиться.

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

Комментарии

Пока нет комментариев. Начните обсуждение.