Справочник по параметрам llama.cpp (llama cli, completion, server)

Справочник по основным командам и параметрам llama.cpp. Затрагиваются основные утилиты для инференса: llama-cli, llama-completion, llama-server. Здесь будут представлены все команды и параметры которые можно получить, например, вызовом: “llama-cli --help” или “llama-server --help”, в том же порядке. Я просто взял и прошелся по всем аргументам и попытался составить короткие, но надеюсь, понятные комментарии к каждому из них.
Далеко не все возможности llama.cpp я использую в работе, о многих имею слабое (возможно среднее) представление, поэтому большую часть параметров пришлось “долбить” с ИИ. Но это не было простое копи-паст ответов LLM. Я пытался понять работу каждого параметра - как он устроен, на что влияет, откуда растут корни и тд, и только после того как более-менее (скорее более) становилось понятно, составлял короткие комментарии своими словами, как понял сам. Также приходилось смотреть исходники, чтобы понять принцип работы некоторых особо непонятных параметров.
Те параметры, в описании которых я не уверен достаточно хорошо, будут помечены следующим текстом:
[Ремарка: описание работы параметра может быть не точным]
Для каждого параметра сначала указывается его название, шаблон и краткое описание из штатной справки llama.cpp. Затем следует мой более развернутый комментарий.
Эта справка не претендует на самое точное и полное объяснение основных команд и параметров llama.cpp, но надеюсь она будет полезна, в том числе новичкам.
Вообще, изначально возникла идея разобраться со всеми возможностями работы с llama.cpp для себя, т.к. я использую этот дистрибутив очень часто. В итоге все это вылилось в составление полноценной справки, и недели копаний. Надеюсь время было потрачено не зря.
Всего будет несколько частей, разбитых по категориям, в том порядке, как это можно увидеть через основные CLI-утилиты (например: “llama-cli --help”). Категории: Common Params, Sampling Params, Speculative Params, Example-Specific Params. Всего 4 категории.
Категории с пояснениями перечислены в самом низу этой статьи, они же будут являться навигацией по частям. Итого, ориентировочно будет 4 части (4 статьи), но может получиться больше.
Также я буду дублировать справочник у себя на GitHub, но уже не отдельно по категориям, а на одной странице, в том порядке, как организована справка основных CLI-утилит llama.cpp. Точнее, всего будет 2 страницы: справка на русском и справка на английском. Вероятно, такой вариант для кого-то будет более удобным. Кстати, перевод на английский я делал с использованием ИИ, но вычитывая каждое слово и корректируя тексты вручную. Современные LLM хоть и хорошо справляются с переводом, но иногда используют не самые удачные слова и фразы, а часто генерируют перевод слишком литературно для технического текста. Я старался чтобы пояснения были точными, короткими, но не в ущерб пониманию смысла.
Можете добавить в закладки эту вводную, которая одновременно является содержанием всех частей (с ссылками на статьи) и будет обновляться по мере готовности следующих материалов. Либо можете сохранить ссылку на GitHub на нужном языке, там справочник тоже будет регулярно дополняться. Также обо всех новостях и обновлениях буду писать у себя в Тг (там же можно оставлять комментарии и предлагать правки, об этом ниже).
Большая просьба об обратной связи! Если увидите неточности или будут дополнения - дайте знать в комментариях к соответствующим статьям. Развернутые пояснения я прикреплю к материалам. Также можно внести изменения в справочнике на GitHub (для любой версии - rus/eng). Либо можете написать мне на почту или в Тг, контакты есть тут в профиле. В общем, как будет удобнее, но качественная обратная связь максимально приветствуется, особенно если вы плотно работаете с llama.cpp и на практике знакомы с возможностями этого дистрибутива.
Итак, приступим.
Категории параметров llama.cpp
Common Params.
Общие параметры. В основном полностью пересекаются между всеми утилитами (llama-cli, llama-completion, llama-server). Самая большая часть параметров. Собственно, эта серия статей начинается именно с Common Params.
Ссылка: https://habr.com/ru/articles/1108036/
Sampling Params.
Параметры сэмплирования. Например, это параметры температуры, top-p, top-k, min-p и тд, но не только это. Параметры сэмплирования тоже сильно пересекаются между утилитами. Признаюсь, я был сильно удивлен, ознакомившись более подробно с возможностями настройки поведения моделей через сэмплирование в llama.cpp.
Ссылка: [материал в работе]
Speculative Params.
Параметры спекулятивного декодирования. Настройки, связанные с использованием Draft-моделей.
Справка: Draft-модель - маленькая быстрая модель, которая работает совместно с основной (большой) моделью. Она быстро предсказывает несколько следующих токенов и передаёт их на проверку основной модели. Если предсказание подтверждается, основная модель принимает эти токены, не генерируя их пошагово самостоятельно, что ускоряет общую генерацию текста.
Ссылка: [материал в работе]
Example-Specific Params.
Параметры, специфичные для конкретной утилиты. Например, у llama-server есть свои особые параметры для работы с серверной частью. Этих параметров нет в llama-cli, llama-completion и тд. У каждой утилиты есть свои специфичные параметры, у кого-то больше, у кого-то меньше. Значительная часть специфичных параметров есть у llama-server. Можно принять слово “специфичный” за что-то редко используемое, но это не так. Тут перечислены, в том числе, очень важные и нужные параметры для регулярной работы.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.