Новинка NVIDIA B300 · серверы 288 ГБ HBM3e — от 4 019 $/мес. за GPU

Посмотреть B300

Документация · Приложения

Запуск Ollama и Open WebUI на GPU-сервере

Ollama запускает открытые модели на ваших GPU, а Open WebUI добавляет к ним интерфейс в стиле ChatGPT: получается свой ChatGPT на GPU-сервере, который вы контролируете. Держите оба сервиса на localhost и обращайтесь к ним через SSH или TLS-прокси с аутентификацией.

Обновлено 12 мин чтения

Ollama и Open WebUI на GPU-сервере: что вы получаете

Чтобы запустить Ollama и Open WebUI на GPU-сервере, установите Ollama официальным скриптом — он настроит её как службу systemd на 127.0.0.1:11434, — скачайте модель, затем запустите Open WebUI в Docker с подключением к этому локальному экземпляру Ollama и откройте интерфейс через SSH-туннель. Ollama загружает модели на GPU и отдаёт их через собственный API и API, совместимый с OpenAI. Open WebUI добавляет интерфейс в стиле ChatGPT с учётными записями и историей чатов: вместе они дают свой ChatGPT на собственном сервере.

Ollama + Open WebUIvLLM
МоделиСкачиваются по тегу из библиотеки Ollama; тег по умолчанию обычно 4-битныйЧекпоинты Hugging Face в BF16, FP8 или 4-битных форматах
Параллельные запросыПо умолчанию один запрос на модель за раз (OLLAMA_NUM_PARALLEL)Непрерывный батчинг входящих запросов
Несколько GPUРаспределяет модель по нескольким GPU, только если она не помещается на одинТензорный и конвейерный параллелизм, параллелизм данных
Веб-интерфейсOpen WebUIВстроенного нет; к нему можно подключить Open WebUI

Ollama подходит, если нужен приватный чат-интерфейс для вас или небольшой команды и быстрое переключение между моделями; vLLM (Инференс-сервер) — если к API одновременно обращается много пользователей или приложений. Если при заказе вы выбрали Ollama с Open WebUI на шаге «ПО», оба сервиса уже установлены вместе с вашей моделью; в этом руководстве они настраиваются вручную. Зачем всё это на своём сервере — в статье приватный ChatGPT на своём GPU-сервере.

Установка Ollama на Ubuntu

Сначала установите драйвер GPU (Драйверы NVIDIA и CUDA или ROCm на MI355X): если установщик найдёт GPU NVIDIA без драйвера, он сам поставит пакет NVIDIA cuda-drivers, и драйверы окажутся из разных источников. Затем запустите скрипт со страницы Ollama о Linux:

sudo apt update && sudo apt install -y zstd    # установщику нужен zstd для распаковки
curl -fsSL https://ollama.com/install.sh | sh
ollama -v                                        # установленная версия
systemctl status ollama --no-pager               # active (running)
nvidia-smi                                       # NVIDIA: в списке все GPU
amd-smi list                                     # AMD MI355X

Скрипт создаёт пользователя ollama (в группах render и video), устанавливает и запускает службу systemd ollama на 127.0.0.1:11434, а на хостах с AMD добавляет библиотеки ROCm от Ollama, но не драйвер ядра.

  • NVIDIA: Ollama нужна Compute Capability 5.0 или выше и драйвер версии 550 или новее (страница о GPU). На этой странице нет строк для B200 и B300 (в примечаниях к выпуску 0.32.3 упоминается поддержка B200 через CUDA 12); на любом из этих GPU проверьте с помощью ollama ps (см. ниже), что модели загружаются на GPU.
  • AMD: Ollama нужен драйвер ROCm v7. Страница о GPU перечисляет Instinct MI350X и целевую архитектуру gfx950, общую с MI355X, но сам MI355X по имени не называет: проверьте эту страницу, прежде чем на неё полагаться.

Настройка Ollama: OLLAMA_HOST, модели на NVMe, параметры GPU

Ollama читает переменные окружения. Задавайте их в drop-in-файле systemd, а не в ollama.service, который скрипт установки перезаписывает при каждом запуске (sudo systemctl edit ollama открывает drop-in-файл в редакторе). Модели храните на NVMe-диске для данных (Хранилище и данные), владелец — пользователь ollama:

sudo mkdir -p /data/ollama/models
sudo chown -R ollama:ollama /data/ollama

sudo mkdir -p /etc/systemd/system/ollama.service.d
sudo tee /etc/systemd/system/ollama.service.d/override.conf >/dev/null <<'EOF'
[Service]
Environment="OLLAMA_HOST=127.0.0.1:11434"
Environment="OLLAMA_MODELS=/data/ollama/models"
Environment="OLLAMA_NO_CLOUD=1"
Environment="OLLAMA_CONTEXT_LENGTH=32768"
Environment="OLLAMA_NUM_PARALLEL=4"
Environment="OLLAMA_KEEP_ALIVE=30m"
Environment="OLLAMA_KV_CACHE_TYPE=q8_0"
EOF
sudo systemctl daemon-reload
sudo systemctl restart ollama
journalctl -u ollama -b --no-pager | grep -i "cloud disabled"    # Ollama cloud disabled: true
ПеременнаяДействие
OLLAMA_HOSTАдрес API (по умолчанию 127.0.0.1:11434). Оставьте его на localhost: Ollama не проверяет API-ключи.
OLLAMA_MODELSКаталог моделей (по умолчанию /usr/share/ollama/.ollama/models; уже скачанные модели остаются там).
OLLAMA_NO_CLOUD1 отключает облачные модели и веб-поиск Ollama, чтобы модели работали только на ваших GPU.
OLLAMA_CONTEXT_LENGTHКонтекстное окно в токенах; по умолчанию 4k при памяти GPU менее 24 ГиБ, 32k — от 24 до 48 ГиБ, 256k — от 48 ГиБ (длина контекста).
OLLAMA_NUM_PARALLELЧисло запросов, которые каждая модель обрабатывает одновременно (по умолчанию 1). Память под контекст растёт пропорционально произведению этого значения на длину контекста.
OLLAMA_KEEP_ALIVEСколько времени простаивающая модель остаётся загруженной (по умолчанию 5m; -1 — не выгружать).
OLLAMA_MAX_LOADED_MODELSЧисло моделей, загруженных одновременно, если они помещаются (по умолчанию 3 на GPU).
OLLAMA_FLASH_ATTENTIONВключается автоматически там, где поддерживается; 1 включает принудительно, 0 отключает.
OLLAMA_KV_CACHE_TYPEТочность KV-кэша при включённом Flash Attention: f16 (по умолчанию), q8_0 (примерно половина памяти, очень небольшие потери) или q4_0 (примерно четверть).
CUDA_VISIBLE_DEVICES, ROCR_VISIBLE_DEVICESОграничивают Ollama отдельными GPU; UUID из nvidia-smi -L или rocminfo надёжнее номеров.

Несколько GPU

Ollama загружает модель на один GPU, если она там помещается, — согласно FAQ Ollama, обычно это даёт лучшую производительность (по шине PCI передаётся меньше данных), — и распределяет её по всем GPU, только если не помещается. Остальные GPU тогда занимают другие модели, вплоть до OLLAMA_MAX_LOADED_MODELS.

Скачивание и запуск моделей

ollama pull gpt-oss:20b
ollama run gpt-oss:20b "Explain a KV cache in two sentences."
ollama ls                     # модели на диске
ollama ps                     # загруженные модели: SIZE, PROCESSOR, CONTEXT, UNTIL
ollama stop gpt-oss:20b       # выгрузить модель сейчас
ollama rm gpt-oss:20b         # удалить модель с диска

Без промпта ollama run открывает чат. В выводе ollama ps в столбце PROCESSOR должно быть 100% GPU; разделение вроде 48%/52% CPU/GPU означает, что часть модели работает на CPU из системной памяти (см. раздел «Устранение неполадок»). CONTEXT — заданная модели длина контекста.

Теги по умолчанию обычно 4-битные (qwen3.5:9b — это Q4_K_M). В списках тегов есть и версии q8_0 и bf16: они занимают больше памяти, но ближе к исходным весам. Если они помещаются, сравните их с тегом по умолчанию на своих промптах.

Ollama держит в памяти GPU весь тег целиком плюс KV-кэш, который растёт вместе с контекстом. Правило подбора CryptGPU добавляет 20% к размеру тега и считает доступными 92% памяти GPU:

ТегРазмер в библиотекеСамый дешёвый подходящий GPU NVIDIA (один GPU)
qwen3.5:9b6,6–7,6 ГБRTX 5080 (16 ГБ)
gpt-oss:20b14 ГБRTX 4090 (24 ГБ)
gemma4:31b19–20 ГБRTX 5090 (32 ГБ)
gemma4:31b-it-bf1663 ГБRTX PRO 6000 (96 ГБ)
gpt-oss:120b65 ГБRTX PRO 6000 (96 ГБ)

Длинным контекстам, значению OLLAMA_NUM_PARALLEL больше 1 и нескольким загруженным моделям нужно больше. Подбор GPU под модель и страницы моделей показывают, что нужно каждой модели из каталога.

Запуск Open WebUI в Docker

Сначала установите Docker (см. Контейнеры); самому Open WebUI GPU не нужен.

В руководстве по быстрому старту Open WebUI обращается к Ollama по адресу host.docker.internal — внутреннему адресу хоста в Docker, а не по адресу 127.0.0.1, на котором слушает Ollama. Решение даёт его руководство по ошибкам подключения: сеть хоста (host networking) с OLLAMA_BASE_URL=http://127.0.0.1:11434. Тогда Docker не публикует порты, а приложение слушает прямо на хосте, поэтому привяжите его к localhost с помощью HOST и PORT, которые читает скрипт запуска образа:

# один раз: постоянный секретный ключ (файл доступен только root) сохраняет вход пользователей после обновлений
sudo install -m 600 /dev/null /etc/open-webui.env
echo "WEBUI_SECRET_KEY=$(openssl rand -hex 32)" | sudo tee /etc/open-webui.env >/dev/null

sudo docker run -d --network=host \
  --env-file /etc/open-webui.env \
  -e OLLAMA_BASE_URL=http://127.0.0.1:11434 \
  -e HOST=127.0.0.1 -e PORT=3000 \
  -v open-webui:/app/backend/data \
  --name open-webui --restart always \
  ghcr.io/open-webui/open-webui:main

sudo docker logs -f open-webui       # дождитесь запуска, затем Ctrl-C
ss -tln | grep -E "3000|11434"       # оба порта только на 127.0.0.1

В томе open-webui хранятся учётные записи, чаты и настройки. Откройте http://localhost:3000 через SSH-туннель (см. следующий раздел) и сразу создайте свою учётную запись: первая учётная запись становится администратором, и после её создания регистрация новых пользователей отключается. Чтобы добавить людей, администратор снова включает регистрацию в Settings > Admin > Authentication; новые учётные записи ждут одобрения в статусе Pending.

Не используйте другое решение из руководства по подключению — OLLAMA_HOST=0.0.0.0: Ollama не проверяет API-ключи, поэтому её API отвечал бы любому, кто доберётся до порта 11434, а защищал бы его только файрвол. Если вы всё же запускаете Open WebUI в сети bridge, публикуйте его как -p 127.0.0.1:3000:8080: правила портов Docker обходят ufw.

Удалённый доступ к Ollama и Open WebUI

Оба сервиса остаются на 127.0.0.1. Обращайтесь к ним через SSH или поставьте TLS-прокси с аутентификацией перед Open WebUI — но никогда перед Ollama.

SSH-туннель: для вас и нескольких коллег

# на вашем компьютере; gpu1 — запись хоста из руководства по SSH
ssh -N -L 3000:127.0.0.1:3000 -L 11434:127.0.0.1:11434 gpu1

Затем откройте http://localhost:3000. Второй проброс нужен для примеров с API ниже; если Ollama работает и на вашем компьютере, используйте другой локальный порт, например -L 11435:127.0.0.1:11434. Ключи и ~/.ssh/config описаны в разделе Доступ по SSH.

Caddy с TLS: для команды

Open WebUI сам не терминирует TLS, а его руководство по усилению защиты требует, чтобы при доступе из интернета перед ним был дополнительный уровень контроля доступа, например список разрешённых диапазонов IP-адресов. Направьте DNS-имя на сервер и установите Caddy из его официального репозитория; он сам получит сертификат и пропустит WebSocket-соединения и потоковую передачу без дополнительных настроек (страница Open WebUI о Caddy).

sudo tee /etc/caddy/Caddyfile >/dev/null <<'EOF'
chat.example.com {
    @team remote_ip 198.51.100.7 203.0.113.0/24
    handle @team {
        reverse_proxy 127.0.0.1:3000
    }
    handle {
        respond 403
    }
}
EOF
sudo systemctl reload caddy
sudo ufw allow 80,443/tcp

# разрешите публичный origin для WebSocket, затем пересоздайте контейнер (см. «Обновление»)
echo "CORS_ALLOW_ORIGIN=https://chat.example.com;http://localhost:3000" | sudo tee -a /etc/open-webui.env

Укажите адреса своей команды после remote_ip; каждый человек при этом всё равно входит под своей учётной записью Open WebUI.

Держите Open WebUI на HOST=127.0.0.1 за прокси, чтобы прокси оставался единственным путём внутрь, и никогда не проксируйте и не публикуйте порт Ollama 11434.

Используйте API Ollama, совместимый с OpenAI

Ollama предоставляет API, совместимый с OpenAI, по пути /v1: chat completions, completions, models, embeddings и responses. Через туннель, описанный выше:

curl -s http://localhost:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model": "gpt-oss:20b", "messages": [{"role": "user", "content": "Say hello in five words."}]}'

curl -s http://localhost:11434/api/tags     # собственный API: модели на диске

В клиенте OpenAI укажите в base_url адрес http://localhost:11434/v1/, а в api_key — любое значение, например ollama: поле обязательно, но игнорируется.

Для людей или сервисов без доступа по SSH используйте собственный эндпоинт Open WebUI, совместимый с OpenAI, — /api/chat/completions — за прокси Caddy. Он проверяет персональный API-ключ пользователя, созданный в Settings > Account; обычным пользователям (не администраторам) нужно, чтобы администратор сначала разрешил ключи (эндпоинты API).

Обновление и устранение неполадок

Обновление

curl -fsSL https://ollama.com/install.sh | sh    # обновить Ollama; drop-in-файл сохраняется
ollama -v

# Open WebUI: сделайте резервную копию тома, затем замените контейнер
sudo docker run --rm -v open-webui:/data -v /data/backups:/backup alpine \
  tar czf /backup/openwebui-$(date +%Y%m%d).tar.gz /data
sudo docker rm -f open-webui
sudo docker pull ghcr.io/open-webui/open-webui:main
# затем повторите команду docker run из раздела про Open WebUI

Руководство по обновлению Open WebUI предупреждает, что миграции базы данных необратимы, — отсюда и резервная копия. Чтобы оставаться на проверенных версиях, устанавливайте Ollama командой curl -fsSL https://ollama.com/install.sh | OLLAMA_VERSION=<version> sh и замените :main на тег выпуска, :v<x.y.z>. Если срок аренды не продлён, модели и том Open WebUI стираются вместе с сервером: храните копии в другом месте.

Устранение неполадок

СимптомЧто проверить
ollama ps показывает 100% CPUНет доступного GPU, или его память занята. Проверьте nvidia-smi или amd-smi list, затем journalctl -u ollama --no-pager --follow --pager-end; для подробностей добавьте Environment="OLLAMA_DEBUG=1" в drop-in-файл. На AMD вывод id ollama должен содержать render и video.
Разделение CPU/GPU или ошибки нехватки памятиМодель и её контекст не помещаются. Уменьшите OLLAMA_CONTEXT_LENGTH или OLLAMA_NUM_PARALLEL, задайте OLLAMA_KV_CACHE_TYPE=q8_0, выгрузите другие модели командой ollama stop, остановите другие задачи на GPU или выберите тег поменьше.
Open WebUI не показывает моделейНа сервере curl -s http://127.0.0.1:11434/api/tags должен их выводить. Затем проверьте URL Ollama в Settings > Admin > Connections и sudo docker logs open-webui.
Запросы ждут или завершаются ошибкой 503Каждая модель одновременно обрабатывает OLLAMA_NUM_PARALLEL запросов (по умолчанию 1). Остальные встают в очередь; сверх OLLAMA_MAX_QUEUE (по умолчанию 512) Ollama отвечает ошибкой 503.

Другие решения, например перезагрузка модуля nvidia_uvm, — на странице Ollama об устранении неполадок.

Нужна помощь с этим руководством?

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

Личный кабинет

Войти в CryptGPU

Ваши заказы, счета и серверы в одном месте.

Новичок в CryptGPU?

Аккаунты создаются при оформлении заказа: выберите сервер и программное обеспечение, затем создайте аккаунт на шаге Аккаунт первого заказа.

Запустить сервер