В этой статье я расскажу, как установить нейросеть на своё оборудование. Так вы сможете изучить LLM и применить их на практике. При этом ваши данные не будут передаваться в чужие облака, что критично при работе с конфиденциальными данными. И вам не придётся платить за использование какого-либо внешнего сервиса или решать вопросы с заблокированным доступом.
Следуя этой статье, вы установите инструмент для запуска больших языковых моделей llama.cpp и модель нейросети Qwen на компьютер или сервер. Я расскажу об установке в тех случаях, когда в составе оборудования есть Nvidia GPU или интегрированная графика Intel Iris Xe Graphics (актуально для ноутбуков).
После установки llama.cpp вы сможете взаимодействовать с нейросетью, передавая ей промпты через консоль и получая от неё ответы. Это напоминает взаимодействие с нейросетями через браузер, хотя при таком способе общения нейросеть не будет запоминать диалог. Тем не менее при установке llama.cpp в режиме сервера и при использовании дополнительных инструментов такое можно реализовать.
В конце статьи я расскажу, как использовать локальную нейросеть для автоматического исправления орфографии в текстовых файлах. Я приведу ссылки на исходные коды программы, работающей в контейнере Docker и способной исправлять орфографию, синтаксис и пунктуацию. Эта программа обменивается данными с сервером llama.cpp через API. Модель Qwen при этом установлена на этот сервер локально. На примере этой программы вы сможете создавать собственные аналогичные программы и сервисы.
Краткое введение в 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 и Ollama
Движок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 в ОС MS Windows 11
Проще всего установить 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:
Если всё установлено правильно, на консоли появится информация о найденной видеокарте и версии. Для десктопа вы увидите:
Для ноутбука была получена такая информация:
В первом случае была обнаружена видеокарта 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 и введите такую команду:
После ввода этой команды начнется загрузка модели в память:
После ее завершения вы увидите на консоли заставку с информацией о найденной видеокарте, использованной модели, а также краткий список доступных команд:
Теперь в командном приглашении «>» вы можете задавать нейросети вопросы, и получать от неё ответы.
На рис. 3 в диспетчере задач видно, как после запуска llama-cli.exe уменьшилась доступная память GPU.
Для запуска на ноутбуке с Iris Xe может не хватить памяти для слоёв GPU в модели 14B. В этом случае можно уменьшить количество слоёв на GPU, указав такое значение параметра --n-gpu-layers:
Остальные слои уйдут на CPU.
Команда запуска будет выглядеть так:
На рис. 4 показано потребление памяти после загрузки модели на ноутбуке с видеокартой Intel Iris.
Обратите также внимание на вкладкуMemoryв менеджере задач (рис. 5).
Видно, что значительная часть оперативной памяти занята данными модели.
Для запуска только на CPU укажите этот параметр таким образом:
Учтите, что при этом модель будет работать медленно.
Эксперименты с нейросетью
Локально установленная нейросеть может решать многие задачи, которые вы обычно поручаете таким сервисам как 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-cli
Выше я запускал 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.cpp в Debian
В продакшене llama.cpp обычно разворачивают на Linux, например, с ОС Debian или Ubuntu. Я устанавливал подобные серверы для системы автоматической расшифровки и составления аналитических отчетов по записи звука или видео совещаний, конференций и встреч.
Здесь я расскажу про установку llama.cpp в Debian 12. Хотя для установки вы сможете воспользоваться готовыми скриптами из моего репозитория, вам могут пригодиться навыки системного администрирования Debian.
Прежде всего, обновите ОС и установите утилиту git:
Для удобства и совместимости с Ubuntu я создал пользователя ubuntu и добавил его в группу sudo:
Также необходимо добавить такие пути в ~/.bashrc:
Установка драйвера NVIDIA
Здесь я описал установку драйвера в облачное ядро, так как была использована арендованная виртуальная машина, оборудованная видеокартой с GPU.
Для установки проприетарного драйвера NVIDIA на Debian 12 включите необходимые репозитории (contrib, non-free и non-free-firmware):
Должно получиться так:
Обновите списки пакетов:
Установите заголовки для cloud-ядра и необходимые пакеты:
Если была предыдущая неудачная установка драйвера, полностью удалите старые остатки NVIDIA:
Затем установите драйвер NVIDIA из репозиториев Debian и перезагрузите сервер:
После перезагрузки запустите утилиту nvidia-smi:
Если все было установлено правильно, она покажет информацию о карте GPU, подключенной к серверу (рис. 6).
Загрузка моделей
Перед установкой и запуском сервера llama.cpp нужно загрузить модель. Я использовал модель Qwen2.5-14B-Instruct-Q6_K.gguf, доступную наэтой странице.
Для загрузки модели установите в виртуальном окружении утилиты командной строки пакета huggingface_hub:
Далее создайте каталог для моделей:
Загрузите в этот каталог файл модели Qwen2.5-14B-Instruct-Q6_K.gguf:
Выйдите из виртуального окружения:
Аналогичным образом можно загрузить и другие модели, например:
Запуск установки llama.cpp
Все файлы и скрипты, необходимые для установки сервера llama.cpp, доступны в моёмрепозитории на GitHub. Для запуска установки склонируйте репозиторий пользователем ubuntu:
После клонирования запустите скрипт полной установки llama.cpp:
В процессе довольно длительной работы этот скрипт будет запускать другие необходимые скрипты, загруженные из репозитория.
После завершения установки проверьте версию nvcc:
Тестовый запуск сервера llama.cpp
Для тестового запуска сервера 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 &
Подождите, пока загрузится модель, отслеживая процесс по журналу:
Далее вызовите API модели и убедитесь, что сервер возвратил {"status":"ok"}:
Если это так, установка прошла успешно. Для остановки сервера используйте команду:
Запуск в командной строке
Вы также можете запустить сервер в командной строке, аналогично тому, как мы это делали для Microsoft Windows. Для этого сначала установите утилиту llama-cli:
После этого введите в консоли команду:
Вы увидите в консоли уже знакомое вам приглашение llama.cpp (рис. 7).
Убедитесь, что модель отвечает на ваши запросы.
Запуск сервера через Unit-файл
Чтобы сервер llama.cpp запускался автоматически при загрузке ОС, я подготовил Unit-файл llama-server.service, который есть врепозитории.
Особенность этого файла — запуск через обёрткуllama-server-wrapper.sh:
Файл обёртки определяет тип GPU, установленного в сервере, и настраивает параметры запуска llama.cpp соответствующим образом.
Если вы ранее запустили llama.cpp в консоли, завершите его работу с помощью комбинации клавишCtrl+C.
Далее для запуска сервера используйте такую команду:
Проверить доступность сервера можно с помощью команды:
Если модель еще не загрузилась, вы увидите сообщение:
После загрузки сообщение будет такое:
Программа correct_report
В качестве примера применения сервера llama.cpp я приведу коды программы correct_report.py, предназначенной для проверки и исправления орфографии, синтаксиса и пунктуации в файле аналитического отчета, полученного в результате расшифровки аудио- и видеозаписей совещаний и конференций.
Если качество аудио- или видео материала не очень высокое, могут возникать ошибки на этапе распознавания речи. Программа correct_report.py исправляет такие ошибки.
Исходные файлы этой программы и файлов контейнера Docker вы можете загрузить из моегорепозитория, выполнив эту команду в домашнем каталоге пользователя ubuntu:
Программа отправляет текст отчёта на локальный llama-server через API и сохраняет исправленный результат.
При запуске программа проверяет доступность сервера llama‑server, вызывая функциюcheck_server_available.
Если сервер доступен и исходный файл существует, для выполнения коррекции вызывается функцияcorrect_in_chunks. Она разбивает длинный текст на части (по размеру или заголовкам) и обрабатывает каждую часть.
Непосредственно исправление текста выполняет функцияcorrect_text:
Эта функция вызывает эндпоинт "{SERVER_URL}/v1/chat/completions API сервера llama.cpp, передавая ему промпт, определенный в переменной prompt, а также корректируемый текст.
Функцияcorrect_in_chunksвозвращает исправленный текст, который записывается в выходной файл.
Установка Docker на сервер Debian
Программа коррекции correct_report.py работает в контейнере Docker. Установку Docker в Debian можно выполнить следующей последовательностью команд:
После установки проверьте версию Docker и добавьте пользователя в группу docker:
После завершения установки проверьте работу Docker:
Эта команда должна вывести на консоль приглашение, содержащее строку «Hello from Docker!».
Установка NVIDIA Container Toolkit
Чтобы программы, запущенные в Docker, могли работать с GPU, установите NVIDIA Container Toolkit:
Проверьте работу утилиты nvidia-smi в контейнере:
Если все сделано правильно, вы увидите на консоли уже знакомую вам информацию о GPU, полученную с помощью утилиты nvidia-smi. Только теперь эта утилита работает в контейнере Docker (рис. 8).
Запуск программы коррекции
Для запуска и проверки работы программы коррекции я подготовил скрипт test_corrector.sh.
Перед его запуском создайте каталоги для исходного файла и файла с результатами коррекции:
Разрешите исполнение скрипта run_corrector.sh:
После этого запустите тестовый скрипт коррекции:
Вы увидите на консоли строки исходного текстового файла, а также строки с исправлениями (рис. 9).
На базе исходных текстов программы коррекции вы можете делать свои собственные программы, выполняющие коррекцию текстов или другие необходимые вам функции.
Программа correct_report.pyиспользуется на последнем шаге пайплайна моейсистемыдля автоматической расшифровки и аналитики аудио- и видео записей совещаний с развертыванием на серверах заказчика.
Что дальше
Надеюсь, вам понравились эксперименты с llama.cpp в домашних условиях. А может быть, вы настроили эту нейросеть на сервере в своей компании для создания собственных нейросетевых сервисов.
Помимо корректора текста, вы можете реализовывать на своём оборудовании и другие функции, используя различные промпты. Это может быть, например, проверка кода, поиск рецептов для кухни, придумывание сказок для детей, решение задач системного администрирования и так далее. И всё это на ваших ресурсах, без дополнительной оплаты и блокировок.
Локальные серверы используются в нейросетевых агентах. Агенты на базе локальных LLM могут автоматизировать обработку документов, управлять инструментами, участвовать в многопользовательских чатах, выполнять роль персональных ассистентов с полным контролем над данными. Благодаря возможности работы без интернета такие решения востребованы в корпоративной среде, разработке ПО и исследованиях, где важны конфиденциальность, предсказуемость и гибкость настройки.
Напишите, насколько вам интересна тема применения готовых нейросетевых агентов и способы создания собственных агентов, работающих с llama.cpp.
Автор@AlexandreFrolov
НЛО прилетело и оставило здесь промокод для читателей нашего блога:-15% на заказ любого VDS(кроме тарифа Прогрев) —HABRFIRSTVDS.