
В этой статье я расскажу, как установить нейросеть на своё оборудование. Так вы сможете изучить LLM и применить их на практике. При этом ваши данные не будут передаваться в чужие облака, что критично при работе с конфиденциальными данными. И вам не придётся платить за использование какого-либо внешнего сервиса или решать вопросы с заблокированным доступом.
Следуя этой статье, вы установите инструмент для запуска больших языковых моделей llama.cpp и модель нейросети Qwen на компьютер или сервер. Я расскажу об установке в тех случаях, когда в составе оборудования есть Nvidia GPU или интегрированная графика Intel Iris Xe Graphics (актуально для ноутбуков).
После установки llama.cpp вы сможете взаимодействовать с нейросетью, передавая ей промпты через консоль и получая от неё ответы. Это напоминает взаимодействие с нейросетями через браузер, хотя при таком способе общения нейросеть не будет запоминать диалог. Тем не менее при установке llama.cpp в режиме сервера и при использовании дополнительных инструментов такое можно реализовать.
В конце статьи я расскажу, как использовать локальную нейросеть для автоматического исправления орфографии в текстовых файлах. Я приведу ссылки на исходные коды программы, работающей в контейнере Docker и способной исправлять орфографию, синтаксис и пунктуацию. Эта программа обменивается данными с сервером llama.cpp через API. Модель Qwen при этом установлена на этот сервер локально. На примере этой программы вы сможете создавать собственные аналогичные программы и сервисы.
Скорее всего, вы уже оценили возможности таких сервисов, как DeepSeek и ChatGPT. Они доступны через сайты и API, причём полный набор возможностей — платный. Однако что делать, если вам требуется запустить большую языковую модель (LLM) локально, возможно, в изолированном контуре, где нет выхода в интернет?
Здесь можно использовать модели Qwen, созданные Alibaba Cloud (облачным подразделением Alibaba Group). Главная особенность этих моделей — доступность для локального развертывания. В отличие от многих «закрытых» аналогов, Qwen позволяет установить и запускать нейросеть на собственном железе, можно тонко настраивать и встраивать в корпоративную инфраструктуру без риска утечки данных.
В этой статье я использовал модель Qwen2.5-14B-Instruct-Q6_K.gguf. Эта модель в формате GGUF с квантованием Q6_K и размером примерно 12 ГБайт. У неё 14,7 млрд параметров, и она поддерживает контекст до 128K токенов. При этом она может генерировать до 8К токенов.
Модель Qwen2.5-14B-Instruct-Q6_K.gguf поддерживает почти три десятка языков, среди которых есть русский.
Подробные параметры этой модели приведены здесь.
Движок llama.cpp — популярный инструмент для локального запуска больших языковых моделей. У него открытый исходный код, написанный на языке C/C++ и предназначенный для низкоуровневой реализации инференса моделей LLM.
Он способен работать на GPU различных типов и даже исключительно на CPU. Этот инструмент поддерживает формат хранения GGUF, содержащий квантованные веса для сжатия модели с целью их запуска на недорогом оборудовании. Движок не требует CUDA для работы и может запускаться исключительно на CPU, но также поддерживает ускорение на GPU NVIDIA через CUDA, AMD через HIP, Intel через SYCL и другие бэкенды.
Запустив llama.cpp на сервере, вы можете обращаться к нейросети через API.
Для работы с llama.cpp и другими нейросетями можно использовать Ollama — платформу для инференса и скрывающую сложность реализации интерфейсов. Ollama работает локально, сама загружает модели из официального реестра моделей Ollama, определяет, где хранить файлы, а для настройки используются простые файлы описания моделей Modelfile.
Ollama запускает локальный OpenAI-совместимый API, через который можно обращаться к моделям.
В этой статье я рассказываю о том, как установить и использовать llama.cpp. Ollama использует llama.cpp в качестве основного движка инференса для GGUF-моделей. Благодаря локальному запуску моделей Ollama идеально подходит для оффлайн-агентов, где важны приватность данных. К тому же, запуск на своём оборудовании предполагает отсутствие затрат на облако и максимальный контроль над окружением.
Движок llama.cpp даёт максимальную гибкость настройки и лучшую производительность. Как вы увидите, установка и настройка llama.cpp в ОС Microsoft Windows несложна. Также вполне доступна установка и в среде Linux, однако тут не помешает наличие опыта системного администрирования.
Таким образом, Ollama стоит использовать, когда нужен простой и быстрый запуск локальных LLM без глубокого погружения в настройки.
Чистый llama.cpp предпочтителен, когда важны максимальная производительность, минимальные накладные расходы, тонкая настройка параметров инференса, нестандартные сценарии развёртывания, интеграция на низком уровне или работа в ограниченных средах (например, собственные серверы, встроенные системы, офлайн-инсталляции без дополнительных сервисов).
Я выбрал для статьи llama.cpp, учитывая что в моей ситуации важны преимущества прямой работы с этим движком. Особенно это касается выполнения инференса в корпоративной среде, когда требуется высокая производительность и точная настройка параметров инференса. Здесь нет требований к простоте и быстром запуске LLM.
Подробнее о llama.cpp вы можете прочитать в статье «Что такое llama.cpp и зачем он нужен: руководство по локальному запуску LLM». Про установку и использование Ollama читайте здесь: «Платформа Ollama: что это и как с ней работать».
Проще всего установить llama.cpp на компьютер с 64-разрядной операционной системой Microsoft Windows 11. Я выполнил установку на десктоп с процессором AMD, а также на ноутбук Samsung.
В десктопе имеется 16 ГБайт оперативной памяти и видеокарта NVIDIA GeForce GTX 1650 с VRAM объёмом 4 ГБайт. Ноутбук оборудован 16 ГБайт памяти, а также интегрированной графикой Intel Iris Xe Graphics. При этом используется общая оперативная память системы и нет выделенной памяти VRAM. Тем не менее при объёме оперативной памяти 16 Гбайт можно использовать примерно 8 Гбайт для загрузки модели.
Если у вас нет видеокарт с GPU, можно установить llama.cpp таким образом, чтобы использовался только процессор компьютера CPU.
Для установки нужно перейти на страницу загрузки и выбрать нужную сборку llama.cpp.
Для десктопа с NVIDIA GeForce GTX 1650 я скачал сборку llama-b8496-bin-win-cuda-12.4-x64.zip и DLL-библиотеки к ней cudart-llama-bin-win-cuda-12.4-x64.zip, сохранив распакованные файлы в каталоге c:\llama.cpp.
Для ноутбука с видеокартой Intel Iris Xe я взял архив Windows x64 Vulkan (рис. 1).

Создайте каталог c:\llama.cpp, распакуйте в него содержимое загруженного архива, а затем запустите команду проверки версии llama.cpp:
cd C:\llama.cpp
llama-cli.exe --versionЕсли всё установлено правильно, на консоли появится информация о найденной видеокарте и версии. Для десктопа вы увидите:
ggml_cuda_init: found 1 CUDA devices (Total VRAM: 4095 MiB):
Device 0: NVIDIA GeForce GTX 1650, compute capability 7.5, VMM: yes, VRAM: 4095 MiB
The following devices will have suboptimal performance due to a lack of tensor cores:
Device 0: NVIDIA GeForce GTX 1650
Consider compiling with CMAKE_CUDA_ARCHITECTURES=61-virtual;80-virtual and DGGML_CUDA_FORCE_MMQ to force the use of the Pascal code for Turing.
load_backend: loaded CUDA backend from C:\llama.cpp\ggml-cuda.dll
load_backend: loaded RPC backend from C:\llama.cpp\ggml-rpc.dll
load_backend: loaded CPU backend from C:\llama.cpp\ggml-cpu-haswell.dll
version: 8496 (312d870a8)
built with Clang 19.1.5 for Windows x86_64Для ноутбука была получена такая информация:
load_backend: loaded RPC backend from c:\llama.cpp\ggml-rpc.dll
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) Iris(R) Xe Graphics (Intel Corporation) | uma: 1 | fp16: 1 | bf16: 0 | warp si
ze: 32 | shared memory: 32768 | int dot: 1 | matrix cores: none
load_backend: loaded Vulkan backend from c:\llama.cpp\ggml-vulkan.dll
load_backend: loaded CPU backend from c:\llama.cpp\ggml-cpu-alderlake.dll
version: 8547 (6861f6509)
built with Clang 19.1.5 for Windows x86_64В первом случае была обнаружена видеокарта NVIDIA GeForce GTX 1650 и загружен CUDA backend, а во втором — Intel(R) Iris(R) Xe Graphics и Vulkan backend.
Для llama.cpp нужно скачать модель в формате GGUF. Это специальный формат с поддержкой квантизации, позволяющей уменьшить размер модели и снизить требования к памяти.
Чтобы скачать нужную вам модель, зайдите на эту страницу (рис. 2).

Здесь вы увидите множество моделей, доступных для скачивания. Но как выбрать нужную?
Особенности формата закодированы в суффиксах имени файла.
Цифра перед B указывает количество миллиардов весов в модели. Например, для 14B это 14 миллиардов весов.
Буква Q обозначает квантование, а цифра после неё — основной уровень точности (количество бит на вес). Чем выше цифра, тем точнее модель, но и больше её размер и требования к памяти.
Суффикс K означает использование группового квантования, которое позволяет добиться большей точности. Если вместо K указан 0, то применяется более простое и быстрое, значительно менее точное квантование по всему множеству значений.
Суффиксы S, M и L обозначают разные варианты «смеси» уровней квантования (mixed precision) по разным типам тензоров:
S (Small) — более агрессивное сжатие, меньший размер файла и выше скорость, но ниже качество;
M (Medium) — оптимальный баланс между размером, скоростью и качеством (подходит в большинстве применений);
L (Large) — максимальная точность среди квантов данного уровня, но больший размер и чуть более низкая скорость
Я выбрал модель Qwen2.5-14B-Instruct-Q4_K_M.gguf, обеспечивающую хорошее качество при умеренных требованиях к памяти.
Загруженный файл модели необходимо сохранить в каталоге C:\llama.cpp\models.
Подробнее о суффиксах читайте в статье «Разбираемся с суффиксами квантования LLM: что на самом деле значат Q4_K_M, Q6_K и Q8_0». Формат GGUF описан в статье «Формат GGUF: структура, использование и виды квантования».
Теперь займёмся самым интересным — запуском нейросети в режиме командного приглашения, когда вы можете задавать ей вопросы и получать ответы.
Перейдите в каталог c:\llama.cpp и введите такую команду:
cd c:\llama.cpp
llama-cli.exe -m models\Qwen2.5-14B-Instruct-Q4_K_M.gguf --n-gpu-layers 20 -c 8192 -n 2048 --color on -cnv -sys "Ты полезный помощник. Отвечай на русском языке."После ввода этой команды начнется загрузка модели в память:
ggml_cuda_init: found 1 CUDA devices (Total VRAM: 4095 MiB):
Device 0: NVIDIA GeForce GTX 1650, compute capability 7.5, VMM: yes, VRAM: 4095 MiB
The following devices will have suboptimal performance due to a lack of tensor cores:
Device 0: NVIDIA GeForce GTX 1650
Consider compiling with CMAKE_CUDA_ARCHITECTURES=61-virtual;80-virtual and DGGML_CUDA_FORCE_MMQ to force the use of the Pascal code for Turing.
load_backend: loaded CUDA backend from c:\llama.cpp\ggml-cuda.dll
load_backend: loaded RPC backend from c:\llama.cpp\ggml-rpc.dll
load_backend: loaded CPU backend from c:\llama.cpp\ggml-cpu-haswell.dll
Loading model...После ее завершения вы увидите на консоли заставку с информацией о найденной видеокарте, использованной модели, а также краткий список доступных команд:
▄▄ ▄▄
██ ██
██ ██ ▀▀█▄ ███▄███▄ ▀▀█▄ ▄████ ████▄ ████▄
██ ██ ▄█▀██ ██ ██ ██ ▄█▀██ ██ ██ ██ ██ ██
██ ██ ▀█▄██ ██ ██ ██ ▀█▄██ ██ ▀████ ████▀ ████▀
██ ██
▀▀ ▀▀
build : b8496-312d870a8
model : Qwen2.5-14B-Instruct-Q4_K_M.gguf
modalities : text
using custom system prompt
available commands:
/exit or Ctrl+C stop or exit
/regen regenerate the last response
/clear clear the chat history
/read add a text file
>
Теперь в командном приглашении «>» вы можете задавать нейросети вопросы, и получать от неё ответы.
На рис. 3 в диспетчере задач видно, как после запуска llama-cli.exe уменьшилась доступная память GPU.

Для запуска на ноутбуке с Iris Xe может не хватить памяти для слоёв GPU в модели 14B. В этом случае можно уменьшить количество слоёв на GPU, указав такое значение параметра --n-gpu-layers:
--n-gpu-layers 10Остальные слои уйдут на CPU.
Команда запуска будет выглядеть так:
llama-cli.exe -m models\Qwen2.5-14B-Instruct-Q4_K_M.gguf --n-gpu-layers 10 -c 8192 -n 2048 --color on -cnv -sys "Ты полезный помощник. Отвечай на русском языке."
load_backend: loaded RPC backend from c:\llama.cpp\ggml-rpc.dll
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = Intel(R) Iris(R) Xe Graphics (Intel Corporation) | uma: 1 | fp16: 1 | bf16: 0 | warp size: 32 | shared memory: 32768 | int dot: 1 | matrix cores: none
load_backend: loaded Vulkan backend from c:\llama.cpp\ggml-vulkan.dll
load_backend: loaded CPU backend from c:\llama.cpp\ggml-cpu-alderlake.dll
Loading model...На рис. 4 показано потребление памяти после загрузки модели на ноутбуке с видеокартой Intel Iris.

Обратите также внимание на вкладку Memory в менеджере задач (рис. 5).

Видно, что значительная часть оперативной памяти занята данными модели.
Для запуска только на CPU укажите этот параметр таким образом:
--n-gpu-layers 0Учтите, что при этом модель будет работать медленно.
Локально установленная нейросеть может решать многие задачи, которые вы обычно поручаете таким сервисам как ChatGPT и DeepSeek. Конечно, локальное решение не сравнится с сервисами, работающими на дорогостоящем оборудовании. Однако локальное решение сможет бесплатно оказать вам существенную помощь, даже если в вашей сети нет подключения к интернету.
Если вам нужно рассказывать сказки детям, то можете поручить их сочинение своей нейросети. Попробуйте, например, ввести такой промпт:
> расскажи сказку про кота БегемотаВ ответ я получил такое сочинение про кота Бегемота (кот с двойным именем Маркиз-Бегемот действительно когда-то жил у меня):
Ответ нейросетиСказка "Кот Бегемот" не является широко известной, возможно, вы имеете в виду "Кот в сапогах" или "Кот Бегемота" как персонаж из другой истории. Но я могу рассказать сказку о воображаемом коте по имени Бегемот.
Жил-был кот по имени Бегемот. Он был необычайно крупным и могучим котом с бархатной чёрной шерстью, зелеными глазами и могучим хвостом. Бегемот жил в огромной лесной избушке и был известен своей добротой и мудростью.
Однажды, в лес пришел маленький потерявшийся зайчик по имени Зубрик. Бегемот почувствовал его страх и встревоженность и решил помочь зайчику. Он рассказал Зубрику о лесе, о том, где найти пищу и безопасные места для ночлега. Он научил его как избегать хищников и как находить дорогу домой.
Зубрик был так благодарен Бегемоту, что начал рассказывать всем о доброте и мудрости кота. Вскоре о Бегемоте узнали все животные леса и все они начали обращаться к нему за советом. Бегемот всегда был рад помочь и дать совет.
И так продолжалось до тех пор, пока Бегемот не стал самым любимым и уважаемым животным леса. И все были счастливы и благодарны за его доброту и мудрость.
[ Prompt: 1.5 t/s | Generation: 3.0 t/s ]
Ваш компьютер теперь умеет сочинять сказки для детей.
А как насчёт использования нейросети в роли переводчика?
Промпты и ответы> переведи на английский язык: Сказка "Кот Бегемот" не является широко известной, возможно, вы имеете в виду "Кот в сапогах" или "Кот Бегемота" как персонаж из другой истории. Но я могу рассказать сказку о воображаемом коте по имени Бегемот.
"The story 'The Begemot Cat' is not widely known. Perhaps you meant 'Puss in Boots' or 'Begemot' as a character from another story. However, I can tell you a fairy tale about an imaginary cat named Begemot."
[ Prompt: 25.9 t/s | Generation: 3.7 t/s ]
> Жил-был кот по имени Бегемот. Он был необычайно крупным и могучим котом с бархатной черной шерстью, зелеными глазами и могучим хвостом. Бегемот жил в огромной лесной избушке и был известен своей добротой и мудростью.
Once upon a time, there was a cat named Begemot. He was an unusually large and powerful cat with velvety black fur, green eyes, and a mighty tail. Begemot lived in a huge forest cottage and was known for his kindness and wisdom.
[ Prompt: 25.8 t/s | Generation: 3.7 t/s ]
> Однажды, в лес пришел маленький потерявшийся зайчик по имени Зубрик. Бегемот почувствовал его страх и встревоженность и решил помочь зайчику. Он рассказал Зубрику о лесе, о том, где найти пищу и безопасные места для ночлега. Он научил его как избегать хищников и как находить дорогу домой.
One day, a small lost rabbit named Zubrik came to the forest. Begemot sensed his fear and anxiety and decided to help the little rabbit. He told Zubrik about the forest, where to find food and safe places to stay for the night. He taught him how to avoid predators and how to find his way home.
[ Prompt: 27.6 t/s | Generation: 3.7 t/s ]
> Зубрик был так благодарен Бегемоту, что начал рассказывать всем о доброте и мудрости кота. Вскоре о Бегемоте узнали все животные леса и все они начали обращаться к нему за советом. Бегемот всегда был рад помочь и дать совет.
Zubrik was so grateful to Begemot that he began telling everyone about the cat's kindness and wisdom. Soon, all the animals in the forest heard about Begemot, and they all started seeking his advice. Begemot was always happy to help and offer advice.
[ Prompt: 27.4 t/s | Generation: 3.7 t/s ]
> И так продолжалось до тех пор, пока Бегемот не стал самым любимым и уважаемым животным леса. И все были счастливы и благодарны за его доброту и мудрость.
And so it continued until Begemot became the most beloved and respected animal in the forest. Everyone was happy and grateful for his kindness and wisdom.
[ Prompt: 23.5 t/s | Generation: 3.7 t/s ]
Попробуйте самостоятельно переводы на другие языки, а также переводы с разных языков на русский язык.
С помощью локальной нейросети вы сможете создавать описания товаров на основе их характеристик. Предположим, нам нужно создать описание к телевизору. Используем такой промпт:
Промпт> Напиши описание товара для размещения в карточке товара интернет-магазина: 55" (139.7 см) Телевизор TCL 55C6K черный Экран: 55", 4K UltraHD, 3840x2160 QLED, Smart TV, Wi-Fi, BT: есть Частота обновления экрана: 144 Гц ОС: Google TV Тип подсветки LED: Mini LED Размер VESA: 300 x 300
Вот что получилось:
Ответ нейросетиТелевизор TCL 55C6K, 55 дюймов, черный
Экран: 55" (139.7 см), 4K UltraHD (3840x2160), QLED, Mini LED подсветка
Тип подключения: Smart TV с функциями Wi-Fi и Bluetooth
Частота обновления: 144 Гц
Операционная система: Google TV
Вес: компактный и элегантный дизайн с размерами крепления VESA 300x300
Телевизор TCL 55C6K – это сочетание утонченного дизайна и передовых технологий, которое обеспечит вам незабываемый просмотр любимых фильмов и телешоу. С высокой частотой обновления экрана в 144 Гц и подсветкой Mini LED, каждый кадр будет предельно четким и ярким, а уровень контрастности и углы обзора значительно улучшены.
Технология QLED обеспечивает широкий диапазон цветов, и при этом сохраняет яркость, что позволяет наслаждаться высококачественными изображениями даже при ярком освещении. Операционная система Google TV предоставляет беспрецедентное удобство использования и легкий доступ к любимым приложениям и сервисам.
С функциями Wi-Fi и Bluetooth вы можете легко подключить дополнительное оборудование, а также использовать беспроводные наушники для комфортного просмотра. Телевизор TCL 55C6K - отличное решение для вашего дома, которое позволит наслаждаться безупречным просмотром и впечатляющей детализацией изображения.
[ Prompt: 32.0 t/s | Generation: 4.0 t/s ]
Создавая описания подобным образом, контролируйте уникальность текста и другие параметры, важные для поискового продвижения. И да, теперь вы сможете сэкономить на копирайтере.
Выше я запускал llama.cpp такой командой:
Командаllama-cli.exe -m models\Qwen2.5-14B-Instruct-Q4_K_M.gguf --n-gpu-layers 20 -c 8192 -n 2048 --color on -cnv -sys "Ты полезный помощник. Отвечай на русском языке."
У неё много параметров, которые определяют режимы работы нейросети. Рассмотрим самые важные.
Параметр -m указывает путь к файлу модели в формате GGUF.
Параметр -cnv – включает режим чата, где поддерживается диалог с сохранением истории.
Параметр --color on включает цветное оформление вывода в терминале.
С помощью параметра -sys можно задать системную инструкцию (системный промпт), определяющую стиль и язык ответов ассистента.
Параметр -c задаёт размер контекста. Размер контекста или контекстное окно — это объем информации (в токенах), который нейросеть «держит в памяти» за один раз.
Сама по себе модель Qwen2.5-14B поддерживает до 128K токенов. Однако реально при использовании недорогих GPU придётся указывать меньшие значения. Если памяти VRAM меньше 32 Гбайт, используйте значения контекста, равные 4096, 8192, 16384 или 32768.
Подробнее о контексте, контекстном окне и токенах читайте в статье «Что такое контекстное окно в ИИ и как оно влияет на работу языковых моделей». Также в статье «A formula that predicts GGUF VRAM usage from GPU layers and context length» вы найдете обсуждение на эту тему и формулу для прогнозирования необходимого объема памяти VRAM.
С помощью параметра -n можно задать длину ответа в токенах. Значение -1 убирает ограничение на длину ответа. В команде, приведенной выше, я задал длину ответа, равной 2048 токенам.
Параметр --n-gpu-layers определяет сколько слоёв нейросети загружается в GPU. Остальные слои обрабатываются на CPU. Если значение этого параметра равно 0, обработка выполняется полностью на CPU.
Значение этого параметра можно подобрать экспериментально. Начните со значения 5, и увеличивайте до тех пор, пока при запуске не возникнет ошибка ErrorOutOfDeviceMemory. После этого вернитесь к предыдущему значению, при котором запуск был успешен.
Чем больше значение --n-gpu-layers, тем больше скорость генерации ответа. Скорость увеличивается благодаря тому, что выполнение матричных операций на GPU в десятки раз быстрее, чем на CPU.
Идеальный вариант получится если модель целиком поместится в память VRAM.
При помощи параметра --threads можно задать количество ядер CPU, которые используются для обработки слоёв, не загруженных на GPU.
Учтите, что этот параметр задаёт именно количество ядер, а не количество потоков в многопоточных процессорах с технологией Hyper-Threading.
Параметр --batch-size (или -b) определяет количество токенов, обрабатываемых за один проход при первичной обработке входного промпта до начала генерации ответа. Чем больше значение, тем быстрее модель «переваривает» длинный контекст, однако тем больше памяти требуется единовременно. Значение по умолчанию — 2048. При нехватке VRAM имеет смысл снизить значение этого параметра до 512 или 256. Это уменьшит пиковое потребление памяти ценой чуть более медленной обработки промпта. На скорость генерации токенов этот параметр практически не влияет.
Параметр --ubatch-size (или -ub) определяет размер микробатча — количество частей, на которые делится батч при фактическом вычислении. Если --batch-size задаёт сколько токенов принимается за раз, то --ubatch-size определяет сколько из них обрабатывается одновременно на уровне железа.
Для этого параметра значение по умолчанию равно 512. Этот параметр напрямую влияет на пиковое потребление VRAM. Если возникает ошибка ErrorOutOfDeviceMemory, снижайте значение параметра до 256 или 128. При этом значение параметра --batch-size можно оставить большим. Значение --ubatch-size не должно превышать --batch-size.
Параметр --temp задаёт температуру — степень случайности при выборе следующего токена во время генерации. Модель на каждом шаге вычисляет вероятности для всех возможных токенов, а температура масштабирует это распределение перед выбором.
Значение параметра --temp по умолчанию равно 0.8. При значении 0.0 модель всегда выбирает токен с максимальной вероятностью (детерминированный режим, одинаковый ответ на одинаковый вопрос). Это хорошо подходит для задач с однозначным ответом — кода, математики, фактических вопросов.
При значениях 0.7–1.0 генерация становится более разнообразной и естественной, что предпочтительно для творческих задач и диалога. Значения выше 1.0 делают вывод хаотичным и непредсказуемым — модель начинает «фантазировать» и терять связность текста.
Параметр --top-p ограничивает набор токенов-кандидатов при генерации, отбирая только те токены, суммарная вероятность которых не превышает заданного порога.
Например, при --top-p 0.9 модель рассматривает минимальный набор наиболее вероятных токенов, чья совокупная вероятность составляет 90%, и полностью игнорирует всё остальное. Значение по умолчанию равно 0.95.
Для предсказуемых задач рекомендуют снижать этот параметр вместе с параметром --temp, например, --temp 0.3 и --top-p 0.9. Для творческих эти параметры следует повышать, например, --temp 0.9 и --top-p 0.95.
Параметр --top-k ограничивает выбор следующего токена фиксированным количеством наиболее вероятных кандидатов, полностью отбрасывая все остальные варианты. Например, при --top-k 40 модель выбирает только из 40 токенов с наибольшей вероятностью. Значение по умолчанию равно 40. Значение 0 отключает фильтрацию.
Чем меньше значение параметра --top-k, тем консервативнее и предсказуемее текст, чем больше — тем разнообразнее.
Параметр --repeat-penalty снижает вероятность повторного появления токенов, которые уже встречались в сгенерированном тексте, штрафуя их при каждом последующем выборе. Значение по умолчанию равно 1.0, при этом штраф отключён.
Значения выше 1.0 уменьшают вероятность повторений. Например, значение 1.1 даёт мягкий штраф, 1.3 — ощутимый. Слишком высокие значения (1.5 и выше) могут навредить качеству: модель начинает избегать даже уместных повторений служебных слов и теряет связность.
Параметр --min-p задаёт минимальный порог вероятности токена относительно наиболее вероятного токена в текущем распределении.
Токены, чья вероятность ниже этого порога, отбрасываются. Например, при --min-p 0.05 отсекаются все токены с вероятностью менее 5% от вероятности лидирующего токена. Значение по умолчанию равно 0.05.
В отличие от --top-p, порог адаптируется динамически. Когда модель очень уверена в выборе, планка отсечения автоматически становится выше и отбрасывается больше кандидатов. Если же модель не уверена, то планка опускается и допускается больше вариантов.
При высоком значении --temp порог эффективно предотвращает появление совсем неуместных токенов, не ограничивая при этом творческое разнообразие.
Параметр (флаг) --flash-attn (или -fa) включает Flash Attention, представляющий собой оптимизированный алгоритм вычисления механизма внимания. Этот алгоритм переписывает стандартные матричные операции так, чтобы минимизировать количество обращений к памяти GPU. Если этот параметр присутствует, он включен, а если нет, то отключен. По умолчанию параметр --flash-attn отключён.
Механизм внимания заметно снижает потребление VRAM при больших контекстах за счёт того, что не материализует полную матрицу внимания в памяти, а вычисляет её блоками. Также ускоряется фаза предварительной выборки при длинных промптах.
Этот алгоритм позволяет работать с большими значениями контекстного окна -c, когда без флага --flash-attn возникала бы ошибка нехватки памяти.
К сожалению, механизм внимания поддерживается не на всём железе. Например, для бекэнда Vulkan, установленного для Intel Iris Xe, поддержка может быть частичной или отсутствовать. При этом для CUDA механизм внимания работает стабильно.
Параметр (флаг) --mlock указывает операционной системе заблокировать память, выделенную под модель, запрещая её выгрузку в файл подкачки (swap или pagefile).
По умолчанию флаг --mlock отключён. При этом Windows может в любой момент вытеснить часть модели из RAM на диск, и при следующем обращении к этим данным возникнет задержка на чтение с диска.
При включённом --mlock вся модель гарантированно остаётся в оперативной памяти на протяжении всей работы, что обеспечивает стабильную и предсказуемую скорость генерации без случайных просадок. Но если оперативной памяти не хватает, llama.cpp не запустится с ошибкой.
Использование флага --mlock на Windows требует запуска от имени администратора. Его имеет смысл включать на системах с достаточным объёмом RAM, когда стабильность скорости важнее гибкости управления памятью.
Параметр --numa включает оптимизацию для систем с архитектурой NUMA (Non-Uniform Memory Access). Это многопроцессорные конфигурации, где каждый процессор имеет собственный банк памяти, доступ к которому быстрее, чем к памяти соседнего процессора. По умолчанию этот параметр отключен. Принимает одно из трёх значений:
--numa distribute — потоки равномерно распределяются по всем NUMA-узлам;
--numa isolate — процесс изолируется на одном NUMA-узле;
--numa numactl — для управления используется внешняя утилита numactl
Параметр --numa актуален для серверных конфигураций с двумя и более физическими процессорами, где без NUMA-оптимизации потоки могут активно обращаться к «чужой» памяти, что заметно снижает производительность. На десктопах и ноутбуках включение параметра --numa не даст прироста, а в редких случаях может даже замедлить работу из-за накладных расходов на управление распределением.
Описание этих и других параметров вы найдете в репозитории llama.cpp/tools/cli. Также можно запустить встроенную справку при помощи следующей команды:
llama-cli.exe --helpВ продакшене llama.cpp обычно разворачивают на Linux, например, с ОС Debian или Ubuntu. Я устанавливал подобные серверы для системы автоматической расшифровки и составления аналитических отчетов по записи звука или видео совещаний, конференций и встреч.
Здесь я расскажу про установку llama.cpp в Debian 12. Хотя для установки вы сможете воспользоваться готовыми скриптами из моего репозитория, вам могут пригодиться навыки системного администрирования Debian.
Прежде всего, обновите ОС и установите утилиту git:
sudo apt update && sudo apt upgrade -y
sudo apt install git -yДля удобства и совместимости с Ubuntu я создал пользователя ubuntu и добавил его в группу sudo:
sudo adduser ubuntu
sudo usermod -aG sudo ubuntuТакже необходимо добавить такие пути в ~/.bashrc:
echo 'export PATH=/usr/local/cuda/bin${PATH:+:${PATH}} ' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}} ' >> ~/.bashrc
source ~/.bashrcЗдесь я описал установку драйвера в облачное ядро, так как была использована арендованная виртуальная машина, оборудованная видеокартой с GPU.
Для установки проприетарного драйвера NVIDIA на Debian 12 включите необходимые репозитории (contrib, non-free и non-free-firmware):
sudo nano /etc/apt/sources.list.d/debian.sourcesДолжно получиться так:
cat /etc/apt/sources.list.d/debian.sources
Types: deb deb-src
URIs: mirror+file:///etc/apt/mirrors/debian.list
Suites: bookworm bookworm-updates bookworm-backports
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: deb deb-src
URIs: mirror+file:///etc/apt/mirrors/debian-security.list
Suites: bookworm-security
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpgОбновите списки пакетов:
sudo apt update && sudo apt upgrade -yУстановите заголовки для cloud-ядра и необходимые пакеты:
sudo apt install -y linux-headers-cloud-amd64 dkms firmware-misc-nonfreeЕсли была предыдущая неудачная установка драйвера, полностью удалите старые остатки NVIDIA:
sudo apt purge -y '^nvidia-.*' '^libnvidia-.*' nvidia-driver nvidia-smi
sudo apt autoremove -y
sudo rm -rf /etc/modprobe.d/nvidia*Затем установите драйвер NVIDIA из репозиториев Debian и перезагрузите сервер:
sudo apt install -y nvidia-driver nvidia-smi
sudo rebootПосле перезагрузки запустите утилиту nvidia-smi:
nvidia-smiЕсли все было установлено правильно, она покажет информацию о карте GPU, подключенной к серверу (рис. 6).

Перед установкой и запуском сервера llama.cpp нужно загрузить модель. Я использовал модель Qwen2.5-14B-Instruct-Q6_K.gguf, доступную на этой странице.
Для загрузки модели установите в виртуальном окружении утилиты командной строки пакета huggingface_hub:
sudo su - ubuntu
sudo apt install -y python3-venv
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -U "huggingface_hub[cli]"Далее создайте каталог для моделей:
mkdir -p ~/models
cd /home/ubuntu/models/Загрузите в этот каталог файл модели Qwen2.5-14B-Instruct-Q6_K.gguf:
export PATH="$HOME/.local/bin:$PATH"
hf download bartowski/Qwen2.5-14B-Instruct-GGUF —-include "Qwen2.5-14B-Instruct-Q6_K.gguf" --local-dir ./Выйдите из виртуального окружения:
deactivateАналогичным образом можно загрузить и другие модели, например:
hf download bartowski/Qwen2.5-14B-Instruct-GGUF --include "Qwen2.5-14B-Instruct-Q4_K_M.gguf" --local-dir ./
hf download bartowski/Qwen2.5-14B-Instruct-GGUF --include "Qwen2.5-14B-Instruct-f16.gguf" --local-dir ./
hf download bartowski/Qwen2.5-14B-Instruct-GGUF --include "Qwen2.5-14B-Instruct-Q8_0.gguf" --local-dir ./Все файлы и скрипты, необходимые для установки сервера llama.cpp, доступны в моём репозитории на GitHub. Для запуска установки склонируйте репозиторий пользователем ubuntu:
sudo su — ubuntu
cd
git clone https://github.com/AlexandreFrolov/securemeet-ru-public.gitПосле клонирования запустите скрипт полной установки llama.cpp:
cd securemeet-ru-public
chmod +x full-install-debian.sh
./full-install-debian.shВ процессе довольно длительной работы этот скрипт будет запускать другие необходимые скрипты, загруженные из репозитория.
После завершения установки проверьте версию nvcc:
nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Wed_Nov_22_10:17:15_PST_2023
Cuda compilation tools, release 12.3, V12.3.107
Build cuda_12.3.r12.3/compiler.33567101_0Для тестового запуска сервера llama.cpp используйте такую команду:
Команда/home/ubuntu/llama.cpp/build/bin/llama-server -m /home/ubuntu/models/Qwen2.5-14B-Instruct-Q6_K.gguf -c 16384 --temp 0.1 --repeat-penalty 1.1 -e --host 127.0.0.1 --port 8080 -ngl 99 > llama_server.log 2>&1 &
Подождите, пока загрузится модель, отслеживая процесс по журналу:
tail -f llama_server.logДалее вызовите API модели и убедитесь, что сервер возвратил {"status":"ok"}:
curl http://127.0.0.1:8080/health
{"status":"ok"}Если это так, установка прошла успешно. Для остановки сервера используйте команду:
pkill -f llama-serverВы также можете запустить сервер в командной строке, аналогично тому, как мы это делали для Microsoft Windows. Для этого сначала установите утилиту llama-cli:
cd ~/llama.cpp
cmake --build build --target llama-cli -- -j$(nproc)После этого введите в консоли команду:
/home/ubuntu/llama.cpp/build/bin/llama-cli \
-m /home/ubuntu/models/Qwen2.5-14B-Instruct-Q6_K.gguf \
--temp 0.2 \
-n 8000 \
--ctx-size 16384 \
--repeat-penalty 1.1Вы увидите в консоли уже знакомое вам приглашение llama.cpp (рис. 7).

Убедитесь, что модель отвечает на ваши запросы.
Чтобы сервер llama.cpp запускался автоматически при загрузке ОС, я подготовил Unit-файл llama-server.service, который есть в репозитории.
Особенность этого файла — запуск через обёртку llama-server-wrapper.sh:
ExecStart=/usr/local/bin/llama-server-wrapper.shФайл обёртки определяет тип GPU, установленного в сервере, и настраивает параметры запуска llama.cpp соответствующим образом.
Если вы ранее запустили llama.cpp в консоли, завершите его работу с помощью комбинации клавиш Ctrl+C.
Далее для запуска сервера используйте такую команду:
sudo systemctl start llama-server.serviceПроверить доступность сервера можно с помощью команды:
curl http://127.0.0.1:8080/healthЕсли модель еще не загрузилась, вы увидите сообщение:
{"error":{"message":"Loading model","type":"unavailable_error","code":503}}После загрузки сообщение будет такое:
{"status":"ok"}В качестве примера применения сервера llama.cpp я приведу коды программы correct_report.py, предназначенной для проверки и исправления орфографии, синтаксиса и пунктуации в файле аналитического отчета, полученного в результате расшифровки аудио- и видеозаписей совещаний и конференций.
Если качество аудио- или видео материала не очень высокое, могут возникать ошибки на этапе распознавания речи. Программа correct_report.py исправляет такие ошибки.
Исходные файлы этой программы и файлов контейнера Docker вы можете загрузить из моего репозитория, выполнив эту команду в домашнем каталоге пользователя ubuntu:
git clone https://github.com/AlexandreFrolov/spelling-securemeet-ru-publicПрограмма отправляет текст отчёта на локальный llama-server через API и сохраняет исправленный результат.
При запуске программа проверяет доступность сервера llama‑server, вызывая функцию check_server_available.
Если сервер доступен и исходный файл существует, для выполнения коррекции вызывается функция correct_in_chunks. Она разбивает длинный текст на части (по размеру или заголовкам) и обрабатывает каждую часть.
Непосредственно исправление текста выполняет функция correct_text:
def correct_text(text, use_quick=False):
prompt = QUICK_CORRECTION_PROMPT if use_quick else CORRECTION_SYSTEM_PROMPT
try:
payload = {
"model": MODEL_NAME,
"messages": [
{"role": "system", "content": prompt},
{"role": "user", "content": f"Исправь ошибки:\n\n{text}"}
],
"temperature": TEMPERATURE,
"max_tokens": MAX_TOKENS,
"repeat_penalty": 1.05,
"stream": False
}
log_info(f"Отправка на коррекцию ({len(text)} симв.)...")
r = requests.post(f"{SERVER_URL}/v1/chat/completions", json=payload, timeout=TIMEOUT)
r.raise_for_status()
corrected = r.json().get("choices", [{}])[0].get("message", {}).get("content", "").strip()
if corrected:
log_info(f"Коррекция завершена ({len(corrected)} симв.)")
return corrected
log_error("Пустой ответ от LLM")
return text
except Exception as e:
log_error(f"Ошибка коррекции: {e}")
return textЭта функция вызывает эндпоинт "{SERVER_URL}/v1/chat/completions API сервера llama.cpp, передавая ему промпт, определенный в переменной prompt, а также корректируемый текст.
Функция correct_in_chunks возвращает исправленный текст, который записывается в выходной файл.
Программа коррекции correct_report.py работает в контейнере Docker. Установку Docker в Debian можно выполнить следующей последовательностью команд:
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl start docker
sudo systemctl enable docker
sudo systemctl status dockerПосле установки проверьте версию Docker и добавьте пользователя в группу docker:
docker --version
Docker version 29.3.1, build c2be9cc
sudo usermod -aG docker $USER
newgrp dockerПосле завершения установки проверьте работу Docker:
docker run hello-worldЭта команда должна вывести на консоль приглашение, содержащее строку «Hello from Docker!».
Чтобы программы, запущенные в Docker, могли работать с GPU, установите NVIDIA Container Toolkit:
sudo apt update
sudo apt install -y curl apt-transport-https ca-certificates gnupg
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt update
sudo apt install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart dockerПроверьте работу утилиты nvidia-smi в контейнере:
docker run --rm --gpus all nvidia/cuda:12.3.1-base-ubuntu22.04 nvidia-smiЕсли все сделано правильно, вы увидите на консоли уже знакомую вам информацию о GPU, полученную с помощью утилиты nvidia-smi. Только теперь эта утилита работает в контейнере Docker (рис. 8).

Для запуска и проверки работы программы коррекции я подготовил скрипт test_corrector.sh.
Перед его запуском создайте каталоги для исходного файла и файла с результатами коррекции:
mkdir -p /home/ubuntu/input
mkdir -p /home/ubuntu/outputРазрешите исполнение скрипта run_corrector.sh:
cd spelling-securemeet-ru-public
sudo chmod +x test_corrector.shПосле этого запустите тестовый скрипт коррекции:
./test_corrector.shВы увидите на консоли строки исходного текстового файла, а также строки с исправлениями (рис. 9).

На базе исходных текстов программы коррекции вы можете делать свои собственные программы, выполняющие коррекцию текстов или другие необходимые вам функции.
Программа correct_report.py используется на последнем шаге пайплайна моей системы для автоматической расшифровки и аналитики аудио- и видео записей совещаний с развертыванием на серверах заказчика.
Надеюсь, вам понравились эксперименты с llama.cpp в домашних условиях. А может быть, вы настроили эту нейросеть на сервере в своей компании для создания собственных нейросетевых сервисов.
Помимо корректора текста, вы можете реализовывать на своём оборудовании и другие функции, используя различные промпты. Это может быть, например, проверка кода, поиск рецептов для кухни, придумывание сказок для детей, решение задач системного администрирования и так далее. И всё это на ваших ресурсах, без дополнительной оплаты и блокировок.
Локальные серверы используются в нейросетевых агентах. Агенты на базе локальных LLM могут автоматизировать обработку документов, управлять инструментами, участвовать в многопользовательских чатах, выполнять роль персональных ассистентов с полным контролем над данными. Благодаря возможности работы без интернета такие решения востребованы в корпоративной среде, разработке ПО и исследованиях, где важны конфиденциальность, предсказуемость и гибкость настройки.
Напишите, насколько вам интересна тема применения готовых нейросетевых агентов и способы создания собственных агентов, работающих с llama.cpp.
Автор @AlexandreFrolov
НЛО прилетело и оставило здесь промокод для читателей нашего блога:
-15% на заказ любого VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.