Локальные серверы: LM Studio, llama.cpp и vLLM

Подключим один локальный сервер модели к Open WebUI. Разберём LM Studio, llama.cpp и vLLM, адрес для контейнера, авторизацию и проверку ответа.

После урока вы сможете

  • Выбрать один локальный сервер для своей среды
  • Определить адрес API со стороны сервера Open WebUI
  • Согласовать авторизацию и ID модели и проверить полный ответ

Проверяемый результат: Один выбранный локальный сервер возвращает полный ответ через Open WebUI. Понятно, где он запущен и какой адрес использует серверная часть интерфейса.

Если языковая модель уже работает на вашем компьютере или на отдельном сервере в локальной сети, подключим её к существующему Open WebUI. Для этого включим у сервера модели программный интерфейс (API), совместимый со стандартом OpenAI, и добавим его адрес в знакомом разделе подключений. Переустанавливать Open WebUI или менять способ его запуска не требуется.

Для этого подходят LM Studio, llama-server из пакета llama.cpp и серверный движок vLLM. Все три подключаются через OpenAI-совместимое соединение, а не через настройки Ollama. Ваш способ запуска Open WebUI сохраняется: контейнер Docker, проект Docker Compose, локальная серверная служба или настольный клиент.

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

Дальше мы выберем один инструмент под свою задачу, подготовим сервер, определим правильный сетевой адрес со стороны серверной части Open WebUI и проверим работу подключения коротким учебным вопросом.

Выберем один сервер модели

Устанавливать и запускать LM Studio, llama.cpp и vLLM одновременно не нужно. В этом упражнении подключим к Open WebUI одну уже работающую локальную модель и получим от неё законченный ответ. Выберите вариант под свою задачу:

  • LM Studio пригодится, если вы хотите искать, скачивать и запускать модели через наглядный графический интерфейс, а локальный API включать одной кнопкой.
  • llama-server (llama.cpp) подойдёт, если у вас уже есть собранный исполняемый файл и готовая модель в формате GGUF, которую удобно запустить одной явной командой в терминале.
  • vLLM рассчитан на уже подготовленную совместимую среду Linux и задачи серверного обслуживания моделей (serving).

Это варианты для выбора маршрута в уроке, а не рейтинг скорости или полный список возможностей программ. Например, у LM Studio тоже есть консольные инструменты и режим работы без графического окна, а llama.cpp умеет задействовать графические ускорители.

Основным сквозным примером урока станет LM Studio. Если вы планируете идти по этому маршруту, проверьте системные требования LM Studio: актуальная настольная версия работает на Mac с Apple Silicon и macOS 14.0 или новее (поддержка Intel Mac не заявлена), Windows (x64 с поддержкой AVX2 или ARM) и Linux (x64 или ARM64, AppImage).

Если на компьютере, который запускает модель (компьютере инференса), уже настроен llama-server или подготовлено окружение vLLM в Linux, пропустите настройку LM Studio. Сверьтесь с правилами выбора сетевого адреса и перейдите к памяткам команд в разделе «Добавим выбранное подключение».

Подготовим API в LM Studio

Все действия этого раздела выполняются в программе LM Studio на том компьютере, где непосредственно запускается языковая модель. Открывать LM Studio внутри контейнера Open WebUI или переносить её внутрь служебной среды Ubuntu WSL2, если само приложение установлено в Windows, не нужно.

Сначала убедимся, что сама модель способна отвечать локально:

  1. Откройте вкладку поиска Discover в LM Studio и скачайте модель, которая подходит под объём памяти и возможности вашего оборудования.
  2. Перейдите в раздел Chat, выберите скачанную модель в верхнем загрузчике, дождитесь окончания загрузки в память и отправьте любое короткое сообщение. Ответ в окне LM Studio подтверждает, что модель загрузилась и отвечает локально. Названия моделей из других программ (например, короткие теги из Ollama) здесь не подойдут.

Теперь включим API-сервер. Перейдите на вкладку Developer. Подписи кнопок могут немного отличаться в зависимости от версии и перевода интерфейса. В настройках сервера (Server Settings) проверьте поле порта (Server Port): для этого урока мы явно выбираем порт 1234, если он свободен на вашем компьютере.

Если вы планируете обращаться к LM Studio из контейнера или с другого устройства в своей сети, заранее включите проверку подлинности. Начиная с версии 0.4.0, локальный сервер LM Studio поддерживает токены доступа:

  1. Включите переключатель Require Authentication.
  2. Нажмите Manage Tokens, затем Create Token, задайте нужные разрешения и создайте секретный токен.
  3. Сразу скопируйте полученное значение в надёжное место. Это внутренний ключ вашего локального сервера LM Studio, а не платная подписка или ключ платформы OpenAI.

После этого запустите сервер кнопкой Start server.

Остаётся узнать точный идентификатор модели, который ожидает программный интерфейс. В режиме совместимости с OpenAI LM Studio отдаёт список доступных идентификаторов по запросу GET /v1/models и показывает их в интерфейсе разработчика. Скопируйте оттуда точную строку идентификатора (id), а не произвольное название файла на диске.

При включённой автоматической подгрузке по запросу (JIT loading) список /v1/models может перечислять все скачанные в LM Studio модели, даже если они прямо сейчас не загружены в оперативную память или видеопамять. Поэтому различайте три состояния: модель скачана на диск, модель загружена в память сервера и модель реально возвращает ответ. Само присутствие имени в списке ещё не означает, что модель готова мгновенно ответить.

Определим адрес со стороны backend WebUI

Чтобы выбрать адрес сервера, проследим путь запроса:

Браузер (или окно настольного приложения) → серверная часть (backend) Open WebUI → API локального сервера модели → загруженная модель.

Сетевой запрос к порту 1234 отправляет не ваша вкладка браузера и не графическое окно Open WebUI Desktop, а именно серверная часть Open WebUI. Браузер или настольный клиент может быть открыт на компьютере с LM Studio, а серверная часть Open WebUI работать в контейнере или на другой машине. Тогда адрес 127.0.0.1 (localhost) для неё указывает внутрь контейнера или удалённого хоста, а не на компьютер с моделью.

Выберем правильный базовый адрес (Base URL) для порта 1234 по расположению серверной части Open WebUI:

Где работает серверная часть (backend) Open WebUIКакой Base URL указывать в настройкахОбязательное условие для работы маршрута
Нативно (без Docker) на том же самом компьютере, где запущена LM Studiohttp://127.0.0.1:1234/v1Оба процесса работают в одной системе на одном хосте, сервер LM Studio слушает локальный интерфейс (loopback).
В контейнере под управлением Docker Desktop (Windows или macOS), а LM Studio на этом же хостеhttp://host.docker.internal:1234/v1Специальное имя поддерживается средой Docker Desktop, а сам порт сервера модели реально достижим для контейнера; при выходе за пределы loopback включите токен и ограничения частной сети.
В контейнере Docker Engine на Linux или на отдельном компьютере в частной сетиhttp://<фактический-доступный-IP>:1234/v1Замените обозначение в угловых скобках реальным частным IP-адресом компьютера с LM Studio. Сервер должен слушать доступный сетевой интерфейс, а маршрут и межсетевой экран должны разрешать доступ от хоста Open WebUI.
  • Особенности контейнеров и host.docker.internal. В сетевой документации Docker Desktop имя host.docker.internal описано как внутреннее DNS-имя для обращения из контейнера к службам хоста. При этом само наличие имени не гарантирует, что сервер LM Studio, привязанный только к локальному localhost хост-машины, окажется доступен из контейнера в любой конфигурации. В среде Linux Docker Engine опция host-gateway (если вы добавляли её при создании контейнера) решает только задачу преобразования имени в IP-адрес, но не открывает доступ к службам, которые слушают исключительно внутренний интерфейс 127.0.0.1 хоста.
  • Переход к локальной сети в LM Studio. Если серверная часть Open WebUI работает в контейнере Linux Docker Engine или на соседнем компьютере, один только localhost не подойдёт. В LM Studio для этого предусмотрен режим Serve on Local Network. Прежде чем включать его, обязательно активируйте проверку токена (Require Authentication) и убедитесь, что вы находитесь в доверенной частной сети, а межсетевой экран разрешает входящие подключения к порту 1234 только с узла, где работает Open WebUI. Никогда не пробрасывайте этот порт на роутере в открытый интернет.
  • Какой адрес копировать после включения сетевого режима. Когда вы включаете Serve on Local Network, LM Studio меняет привязку сетевого интерфейса и показывает в окне актуальный адрес для подключения. В поле Base URL используйте фактический частный IP-адрес компьютера с моделью. Запись с угловыми скобками в таблице служит шаблоном; копировать её буквально нельзя. Служебное обозначение 0.0.0.0, которое иногда встречается в настройках серверов, означает «слушать все доступные интерфейсы», но в качестве адреса подключения в Open WebUI никогда не вводится. Передача токена по протоколу http:// не шифрует сетевой трафик.

Добавим выбранное подключение

Когда сервер модели запущен, а подходящий сетевой адрес определён, откроем интерфейс Open WebUI с правами администратора. Поля URL, Auth и Model IDs разобраны в уроке про настройку OpenAI-совместимых подключений. Как различать одинаковые ID с помощью Prefix ID, объясняется в уроке «Облачные модели». Здесь укажем значения для локального сервера. Существующие подключения (например, ранее настроенные локальные или облачные провайдеры) удалять или отключать не нужно.

Перейдите в Settings → Admin → Connections, найдите блок Manage OpenAI API Connections и нажмите кнопку добавления нового подключения (Add Connection). Заполните поля:

  1. URL (Base URL). Укажите выбранный в предыдущем разделе адрес, который обязательно заканчивается суффиксом /v1 (например, http://127.0.0.1:1234/v1 для нативной установки на том же компьютере). Не вставляйте сюда собственный внутренний адрес LM Studio вида /api/v1/chat и не дописывайте в конец полный путь /chat/completions.
  2. Проверка подлинности (Auth). Если вы включили проверку токена в LM Studio, выберите режим Bearer и вставьте созданный вами токен сервера. Если же вы используете локальный сервер, в котором проверка ключа действительно отключена, выберите вариант None (не нужно вводить поддельные строки вроде sk-... или оставлять пустой Bearer в качестве обходного пути).
  3. Идентификатор модели (Model IDs). Вставьте точный идентификатор модели, который вы скопировали из LM Studio или из вывода /v1/models, и добавьте его в список. Если в вашем Open WebUI уже есть модель с точно таким же именем от другого источника, вы можете задать Prefix ID, разобранный в уроке «Облачные модели», чтобы легко различать их в списке.

Нажмите Verify Connection, затем сохраните настройки кнопкой Save.

Если вместо LM Studio вы подключаете уже установленный на компьютере инференса llama-server или подготовленную среду vLLM, воспользуйтесь соответствующей памяткой ниже. Обе карточки рассчитаны на то, что сам инструмент и модель у вас уже есть: мы не выполняем здесь сборку или установку драйверов.

Вариант для готового llama-server (llama.cpp)

Эта карточка подойдёт, если на компьютере инференса у вас уже есть исполняемый файл llama-server и совместимый файл модели в формате .gguf. Команда выполняется на самом компьютере инференса в каталоге с бинарным файлом, а не внутри контейнера Open WebUI. Замените условный путь к файлу модели на ваш реальный полный путь. Мы явно задаём порт 8080, чтобы адрес был предсказуемым.

В терминале Linux или macOS:

./llama-server --model /ABS/PATH/model.gguf --alias local-model --host 127.0.0.1 --port 8080

В окне Windows PowerShell:

.\llama-server.exe --model C:\ABS\PATH\model.gguf --alias local-model --host 127.0.0.1 --port 8080

Как указано в официальном руководстве llama-server, флаг --alias позволяет задать понятное имя модели для API.

Параметры для добавления в Open WebUI:

  • Условие для адреса: так как в команде указан --host 127.0.0.1, базовый адрес http://127.0.0.1:8080/v1 сработает только в том случае, если серверная часть Open WebUI запущена нативно на этом же самом компьютере. Если backend Open WebUI работает в контейнере Docker или на другом узле, сервер llama-server должен слушать доступный частный интерфейс, а в качестве Base URL нужно выбрать адрес по правилам из таблицы предыдущего раздела, сохранив порт 8080 из этой команды.
  • Model ID: local-model (значение, переданное во флаге --alias).
  • Auth: выберите None, так как в команде выше ключ не задан. Если вы запускаете сервер с флагом --api-key или --api-key-file, выберите в Open WebUI режим Bearer и укажите свой ключ (не подставляйте секретные ключи прямо в публичные заметки или общие скрипты). Оставить тип провайдера в значении по умолчанию достаточно для обычного чата; специальный режим управления llama.cpp в настройках нужен только для дополнительных административных функций.

Вариант для подготовленной среды vLLM в Linux

Этот вариант подходит, если на Linux-хосте инференса уже развёрнуто совместимое окружение vLLM и проверена поддержка оборудования. Здесь описан стандартный официальный маршрут для Linux. Нативная работа в Windows не поддерживается; специализированные ветки и плагины для других платформ выходят за рамки урока. Упомянутая в документации быстрого старта vLLM модель Qwen/Qwen2.5-1.5B-Instruct приведена только как документированный пример синтаксиса, а не как универсальная рекомендация под любое оборудование.

Команда выполняется в терминале Linux на самом хосте инференса (не внутри контейнера Open WebUI и не в локальном терминале ноутбука, если сервер удалённый):

vllm serve Qwen/Qwen2.5-1.5B-Instruct --host 127.0.0.1 --port 8000

Параметры для добавления в Open WebUI:

  • Условие для адреса: при запуске с --host 127.0.0.1 базовый адрес http://127.0.0.1:8000/v1 подходит только для нативной серверной части Open WebUI, работающей на том же самом Linux-хосте. Для контейнерного или удалённого backend Open WebUI потребуется запуск на доступном частном сетевом интерфейсе, защита периметра и адрес по правилам предыдущего раздела с портом 8000 из этой команды.
  • Model ID: скопируйте точный идентификатор из ответа GET /v1/models вашего сервера (для команды из примера это Qwen/Qwen2.5-1.5B-Instruct).
  • Auth: выберите None, если сервер запущен без проверки ключа. Если вы задали ключ флагом --api-key или через переменную окружения VLLM_API_KEY, выберите Bearer и введите этот токен. Ключ проверяет доступ к API, но не заменяет межсетевой экран и не шифрует трафик. Не публикуйте порт vLLM в интернет.

Получим ответ и найдём место сбоя

Проверка соединения в настройках оценивает отклик сервера, но ещё не генерацию ответа. Одно появление имени модели в списке тоже не подтверждает её работу. Проверим весь путь до ответа:

  1. Откройте новый чат в Open WebUI.
  2. В селекторе моделей сверху выберите именно то локальное подключение и тот точный идентификатор модели (Model ID), который вы только что добавили.
  3. Отправьте короткий проверочный запрос:
Ответь одним коротким предложением: для чего нужен список дел?

Упражнение успешно завершено, когда выбранная локальная модель вернула в окно чата один законченный осмысленный ответ обычным текстом без сообщений об ошибке. Конкретная формулировка фразы у разных моделей будет отличаться, главное, чтобы ответ пришёл именно через созданный вами локальный маршрут.

Если проверка соединения не проходит или вместо ответа в чате появляется ошибка, не спешите переустанавливать Open WebUI или удалять тома с данными. Проверьте цепочку по шагам от сервера модели к интерфейсу:

  1. Состояние модели и сервера на хосте инференса. Посмотрите в окно или в терминал вашего локального сервера (LM Studio, llama-server или vLLM). Запущен ли сам API-сервер? Загружена ли модель в память, или сервер пытается подгрузить слишком тяжёлую модель по запросу (JIT) и сталкивается с нехваткой ресурсов? В журналах (логах) сервера на компьютере инференса поищите, дошёл ли запрос от Open WebUI и не возникла ли ошибка при генерации.
  2. Сетевая достижимость со стороны backend Open WebUI. Если сервер модели исправно отвечает в браузере на самом компьютере инференса, это ещё не доказывает, что до него есть маршрут из изолированного контейнера Docker. Проверьте, не оставили ли вы в настройках контейнера адрес 127.0.0.1 вместо host.docker.internal или фактического частного IP-адреса. При работе через частный IP убедитесь, что в LM Studio включён режим Serve on Local Network (или указан нужный --host в консольных серверах), а межсетевой экран разрешает подключение именно от хоста Open WebUI. Не отключайте брандмауэр полностью и не открывайте порт для всех внешних сетей ради быстрой проверки.
  3. Точность параметров в Open WebUI. Проверьте, что Base URL заканчивается на /v1 без лишних сегментов, режим Auth точно соответствует настройкам сервера (None для сервера без ключа или Bearer с актуальным токеном), а Model ID скопирован без опечаток из /v1/models.

Правила заполнения полей и коды ошибок доступа разобраны в уроке про настройку OpenAI-совместимых подключений, а работа с префиксами при совпадении ID моделей — в уроке «Облачные модели». Первый законченный ответ от выбранной локальной модели подтверждает работу базового текстового чата по этому маршруту.

Материалы урока

Отметить прохождение

Отметьте урок после того, как получили проверяемый результат из практической части.

stro-island>