# Полное руководство: локальный Qwen3-Coder на видеокарте NVIDIA с 24 ГБ VRAM и Open WebUI
Актуальность руководства: 20 июля 2026 года
Основной сценарий: одна видеокарта NVIDIA с 24 ГБ видеопамяти, Ubuntu 22.04 или Ubuntu 24.04, Docker Compose, Ollama и Open WebUI.
Рекомендуемая модель:qwen3-coder:30bв квантизации Q4_K_M.
Рекомендуемый начальный контекст: 16 384 токена.
Рекомендуемый тип KV-кэша:q8_0.
---
## Содержание
1. Что именно мы будем устанавливать
2. Что такое Qwen-Coder, Ollama и Open WebUI
3. Какую версию Qwen-Coder выбрать для 24 ГБ VRAM
4. Почему размер контекста влияет на видеопамять
5. Требования к компьютеру
6. Итоговая архитектура
7. Подготовка Ubuntu
8. Установка драйвера NVIDIA
9. Установка Docker Engine и Docker Compose
10. Установка NVIDIA Container Toolkit
11. Создание Docker Compose-конфигурации
12. Запуск Ollama и Open WebUI
13. Загрузка Qwen3-Coder
14. Проверка работы через командную строку и API
15. Проверка загрузки модели в видеокарту
16. Создание вариантов модели с контекстом 8K, 16K и 32K
17. Первоначальная настройка Open WebUI
18. Рекомендуемые параметры генерации
19. Системный промпт для программирования
20. Как правильно ставить задачи Qwen-Coder
21. Работа с файлами и базой знаний
22. Настройка производительности
23. Что делать при нехватке VRAM
24. Доступ к Open WebUI по SSH
25. Доступ к Open WebUI из локальной сети
26. Публикация Open WebUI через Nginx и HTTPS
27. Обновление Ollama, Open WebUI и модели
28. Резервное копирование
29. Альтернативная установка Ollama без Docker
30. Установка на Windows 11
31. Типичные ошибки и их устранение
32. Полезные команды администратора
33. Поисковые запросы и ключевые слова
34. Финальный чек-лист
35. Официальные источники
---
# 1. Что именно мы будем устанавливать
В результате получится локальный сервер программной модели:
Код:
Браузер
|
| HTTP / WebSocket
v
Open WebUI, порт 3000
|
| Ollama API
v
Ollama, порт 11434
|
| CUDA
v
NVIDIA GPU, 24 ГБ VRAM
Компоненты будут разделены:
- Qwen3-Coder — языковая модель, специализирующаяся на программировании.
- Ollama — движок, который загружает модель, размещает её в GPU и выполняет генерацию.
- Open WebUI — веб-интерфейс для общения с моделью через браузер.
- Docker Compose — управляет контейнерами Ollama и Open WebUI.
- NVIDIA Container Toolkit — предоставляет Docker-контейнеру доступ к видеокарте.
- Docker volumes — сохраняют модели, аккаунты, настройки и историю чатов.
После установки вы сможете:
- общаться с Qwen3-Coder через браузер;
- генерировать и исправлять код;
- разбирать ошибки;
- просить модель писать тесты;
- загружать файлы и документацию;
- хранить историю диалогов;
- использовать несколько локальных моделей;
- обращаться к Ollama через HTTP API;
- подключать IDE, скрипты и программных агентов.
---
# 2. Что такое Qwen-Coder, Ollama и Open WebUI
## 2.1. Что такое Qwen-Coder
Qwen-Coder — семейство языковых моделей команды Qwen компании Alibaba, оптимизированных для задач программирования.
Модель может:
- писать код;
- объяснять существующий код;
- исправлять ошибки;
- выполнять рефакторинг;
- создавать тесты;
- анализировать журналы ошибок;
- писать Dockerfile и Docker Compose;
- работать с SQL;
- создавать Bash- и PowerShell-скрипты;
- предлагать архитектуру приложения;
- работать с инструментами и function calling;
- анализировать несколько файлов, если они помещаются в контекст.
Важно понимать, что Qwen-Coder — не полноценная IDE и не операционная система. Без подключения дополнительных инструментов модель:
- не запускает код автоматически;
- не проверяет, существует ли указанный пакет;
- не имеет доступа к вашей файловой системе;
- не видит Git-репозиторий целиком;
- не выполняет команды в терминале;
- не знает о свежих версиях библиотек без доступа к актуальной документации.
Сгенерированные команды и код необходимо проверять перед выполнением.
---
## 2.2. Что такое Ollama
Ollama — локальный сервер инференса языковых моделей.
Он отвечает за:
- загрузку модели;
- хранение скачанных моделей;
- использование CPU и GPU;
- управление видеопамятью;
- токенизацию;
- генерацию ответа;
- работу с контекстом;
- HTTP API;
- выгрузку неиспользуемой модели из памяти;
- создание производных моделей через
Modelfile.
По умолчанию API Ollama работает на порту:
Код:
11434
Пример адреса:
Код:
http://127.0.0.1:11434
---
## 2.3. Что такое Open WebUI
Open WebUI — самостоятельная веб-платформа для работы с локальными и облачными языковыми моделями.
Она предоставляет:
- интерфейс, похожий на современные AI-чаты;
- аккаунты пользователей;
- историю диалогов;
- поиск по истории;
- выбор модели;
- системные промпты;
- управление параметрами генерации;
- загрузку файлов;
- базы знаний и RAG;
- подключение инструментов;
- подключение Ollama;
- подключение OpenAI-совместимых API;
- многопользовательский режим;
- административную панель.
Open WebUI не заменяет Ollama.
Распределение ролей выглядит так:
Код:
Ollama:
- загружает Qwen3-Coder;
- использует видеокарту;
- генерирует токены;
- предоставляет API.
Open WebUI:
- показывает веб-интерфейс;
- хранит аккаунты и чаты;
- отправляет запросы в Ollama;
- показывает потоковый ответ;
- управляет файлами, знаниями и инструментами.
Для обычного чата Open WebUI не требуется прямой доступ к GPU. Видеокарту использует контейнер Ollama.
Поэтому в этом руководстве для Open WebUI используется стандартный образ:
Код:
ghcr.io/open-webui/open-webui:main
CUDA-образ Open WebUI нужен только тогда, когда вы хотите ускорять на GPU собственные задачи Open WebUI, например некоторые варианты распознавания речи или создания эмбеддингов.
---
# 3. Какую версию Qwen-Coder выбрать для 24 ГБ VRAM
Название «Qwen-Coder» относится сразу к нескольким моделям. Для установки необходимо выбрать конкретный тег.
## 3.1. Рекомендуемый вариант
Для одной видеокарты с 24 ГБ VRAM рекомендуется:
Код:
qwen3-coder:30b
Характеристики сборки Ollama:
- архитектура: Qwen3 MoE;
- общие параметры: приблизительно 30,5 млрд;
- активные параметры на токен: приблизительно 3,3 млрд;
- квантизация весов: Q4_K_M;
- размер файла модели: приблизительно 19 ГБ;
- лицензия: Apache 2.0;
- нативный максимальный контекст модели: 262 144 токена;
- режим работы: non-thinking, без блоков
<think>.
Команда запуска:
Bash:
ollama run qwen3-coder:30b
Почему эта модель подходит:
1. Файл весов занимает около 19 ГБ.
2. На 24-гигабайтной карте остаётся некоторое место для KV-кэша и служебных буферов.
3. MoE-архитектура активирует не все параметры одновременно.
4. Модель существенно сильнее маленьких 7B-моделей во многих сложных задачах программирования.
5. Она поддерживается Ollama без ручной конвертации.
---
## 3.2. Почему не Qwen3-Coder-Next
Более новая модель называется:
Код:
qwen3-coder-next
Её Q4_K_M-сборка Ollama занимает приблизительно:
Код:
52 ГБ
Это больше 24 ГБ VRAM.
Такую модель можно попытаться запускать с частичной выгрузкой в оперативную память, но результат будет зависеть от движка и объёма RAM. Скорость обычно сильно снизится из-за передачи данных между RAM и GPU.
Для нормальной работы
qwen3-coder-next целиком на GPU одной 24-гигабайтной видеокарты недостаточно.Не следует путать:
Код:
3 млрд активных параметров
и:
Код:
52 ГБ весов, которые всё равно необходимо где-то хранить.
MoE уменьшает объём вычислений на один токен, но не превращает 52-гигабайтную модель в 3-гигабайтную.
---
## 3.3. Почему не Qwen3-Coder 480B
Полная версия Qwen3-Coder 480B требует приблизительно 250 ГБ памяти или объединённой памяти даже в локальной квантизированной сборке Ollama.
Для одной 24-гигабайтной видеокарты она не подходит.
---
## 3.4. Альтернативные модели
| Модель | Примерный размер | Когда использовать |
|---|---:|---|
|
qwen3-coder:30b | 19 ГБ | Основная рекомендация для 24 ГБ ||
qwen2.5-coder:14b | 9 ГБ | Нужна высокая скорость и большой запас VRAM ||
qwen2.5-coder:32b | 20 ГБ | Более старая плотная 32B-модель, мало запаса VRAM ||
qwen3-coder-next:q4_K_M | 52 ГБ | Не помещается целиком в 24 ГБ ||
qwen3-coder:480b | Не менее 250 ГБ памяти | Не подходит для одной потребительской GPU |Команды загрузки альтернатив:
Bash:
ollama pull qwen2.5-coder:14b
ollama pull qwen2.5-coder:32b
Практический выбор:
Код:
Нужно максимальное качество в пределах 24 ГБ:
qwen3-coder:30b
Нужна высокая скорость и больше контекста:
qwen2.5-coder:14b
Нужно несколько одновременных пользователей:
лучше использовать меньшую модель или несколько GPU
---
# 4. Почему размер контекста влияет на видеопамять
## 4.1. Что такое контекст
Контекст — объём текста, который модель может учитывать в одном запросе.
В контекст входят:
- системный промпт;
- сообщения пользователя;
- предыдущие ответы;
- содержимое прикреплённых файлов;
- схемы инструментов;
- найденные RAG-фрагменты;
- генерируемый ответ.
Контекст измеряется в токенах, а не в символах.
Очень грубая оценка для русского и программного текста:
Код:
1 токен может соответствовать примерно 2–4 символам,
но реальное соотношение сильно зависит от языка и содержимого.
---
## 4.2. Максимальный контекст не означает, что он поместится в вашу GPU
Qwen3-Coder архитектурно поддерживает до 262 144 токенов.
Это не означает, что 262 144 токена можно использовать вместе с 19-гигабайтной моделью на видеокарте с 24 ГБ памяти.
Помимо весов модели видеопамять расходуется на:
- KV-кэш;
- рабочие буферы;
- CUDA-контекст;
- графический интерфейс рабочего стола;
- браузер с аппаратным ускорением;
- другие программы;
- дополнительные параллельные запросы.
Чем больше контекст, тем больше KV-кэш.
---
## 4.3. Практические значения для 24 ГБ
Рекомендуется начинать со следующих значений:
| Контекст | Назначение | Оценка для 24 ГБ |
|---:|---|---|
| 8192 | Короткие задачи, один-два файла | Очень надёжный вариант |
| 16384 | Обычная разработка | Рекомендуемый старт |
| 32768 | Крупные файлы и длинные диалоги | Нужно тестировать |
| 65536 | Большие части репозитория | Часто слишком тяжело для 30B на 24 ГБ |
| 262144 | Архитектурный максимум | Практически нереалистично с этой моделью на 24 ГБ |
В этом руководстве используется:
Код:
OLLAMA_CONTEXT_LENGTH=16384
---
## 4.4. Квантизация весов и квантизация KV-кэша — разные вещи
Модель
qwen3-coder:30b использует квантизацию весов:
Код:
Q4_K_M
Отдельно можно квантизировать KV-кэш:
Код:
OLLAMA_KV_CACHE_TYPE=q8_0
Это разные настройки.
Код:
Q4_K_M:
уменьшает размер весов модели.
q8_0 для KV-кэша:
уменьшает память, расходуемую контекстом.
Ollama поддерживает следующие варианты KV-кэша:
Код:
f16
- максимальная точность;
- максимальный расход памяти.
q8_0
- примерно вдвое меньше памяти по сравнению с f16;
- обычно почти незаметная потеря качества;
- рекомендуемый компромисс.
q4_0
- примерно вчетверо меньше памяти по сравнению с f16;
- потеря качества может быть заметнее;
- использовать, если q8_0 недостаточно.
Для 24 ГБ рекомендуется начать с:
Код:
OLLAMA_FLASH_ATTENTION=1
OLLAMA_KV_CACHE_TYPE=q8_0
---
# 5. Требования к компьютеру
## 5.1. Видеокарта
Нужна NVIDIA GPU с 24 ГБ VRAM, например:
- GeForce RTX 3090;
- GeForce RTX 3090 Ti;
- GeForce RTX 4090;
- RTX A5000;
- Titan RTX;
- Tesla P40;
- другая совместимая карта с 24 ГБ.
Для старых карт могут потребоваться дополнительные настройки и более новый драйвер.
Актуальные требования Ollama для NVIDIA:
Код:
Compute Capability: 5.0 или выше
Драйвер NVIDIA: 550 или новее
Для GPU с Compute Capability от 5.0 до 6.2 требуется драйвер версии 570 или новее.
К этой категории относятся некоторые старые Maxwell- и Pascal-карты, включая Tesla P40.
---
## 5.2. Оперативная память
Практические рекомендации:
Код:
Минимум: 32 ГБ RAM
Рекомендуется: 64 ГБ RAM
Комфортно для экспериментов и CPU offload: 96–128 ГБ RAM
Если модель полностью помещается в VRAM, большой объём RAM не всегда используется постоянно. Однако RAM потребуется:
- операционной системе;
- Docker;
- Open WebUI;
- файловому кэшу;
- распаковке и загрузке моделей;
- CPU offload;
- обработке документов;
- эмбеддингам;
- нескольким контейнерам.
---
## 5.3. Накопитель
Рекомендуется SSD или NVMe.
Минимальный свободный объём:
Код:
50 ГБ
Рекомендуемый свободный объём:
Код:
100 ГБ или больше
Место потребуется для:
- 19-гигабайтной модели;
- временных файлов;
- Docker-образов;
- дополнительных моделей;
- обновлений;
- истории и файлов Open WebUI;
- резервных копий.
---
## 5.4. Процессор
Для инференса на GPU процессор не является основным ограничением, но влияет на:
- токенизацию;
- обработку HTTP-запросов;
- работу Docker;
- подготовку промпта;
- RAG;
- CPU offload.
Практически рекомендуется:
Код:
8 физических или производительных ядер и больше
---
## 5.5. Операционная система
Основная инструкция рассчитана на:
Код:
Ubuntu 22.04 LTS
Ubuntu 24.04 LTS
В конце статьи приведён отдельный раздел для Windows 11.
---
# 6. Итоговая архитектура
Мы будем использовать два контейнера:
Код:
qwen-stack
├── ollama
│ ├── порт хоста: 127.0.0.1:11434
│ ├── доступ к NVIDIA GPU
│ └── volume с моделями
│
└── open-webui
├── порт хоста: 127.0.0.1:3000
├── подключение к http://ollama:11434
└── volume с аккаунтами, чатами и настройками
Почему порты привязываются к
127.0.0.1:
Код:
127.0.0.1:3000:8080
127.0.0.1:11434:11434
Это не позволяет напрямую открыть сервисы из интернета или локальной сети.
Для удалённого доступа можно использовать:
- SSH-туннель;
- VPN;
- Tailscale;
- Nginx с HTTPS;
- другой защищённый reverse proxy.
---
# 7. Подготовка Ubuntu
## 7.1. Проверяем архитектуру и версию системы
Bash:
uname -m
cat /etc/os-release
Ожидаемая архитектура:
Код:
x86_64
Проверяем оборудование:
Bash:
lspci | grep -i nvidia
free -h
df -h
Проверяем занятые порты:
Bash:
sudo ss -ltnp | grep -E ':(3000|11434)\b' || true
Если команда ничего не вывела, порты свободны.
---
## 7.2. Обновляем систему
Bash:
sudo apt update
sudo apt full-upgrade -y
Устанавливаем необходимые утилиты:
Bash:
sudo apt install -y \
ca-certificates \
curl \
gnupg \
gnupg2 \
jq \
openssl \
ubuntu-drivers-common
После большого обновления ядра желательно перезагрузить сервер:
Bash:
sudo reboot
---
# 8. Установка драйвера NVIDIA
## 8.1. Проверяем существующий драйвер
Bash:
nvidia-smi
Если драйвер уже установлен, команда покажет:
- модель GPU;
- версию драйвера;
- температуру;
- загрузку;
- использованную видеопамять;
- процессы, использующие GPU.
Примерно так:
Код:
NVIDIA-SMI ...
Driver Version: 5xx.xx
CUDA Version: 12.x
GPU Name: NVIDIA GeForce RTX 4090
Memory-Usage: ... MiB / 24564 MiB
Важно:
Код:
Строка CUDA Version в nvidia-smi показывает максимальную версию CUDA,
поддерживаемую драйвером. Это не обязательно означает, что полный
CUDA Toolkit установлен в Ubuntu.
Для запуска Ollama в Docker полный CUDA Toolkit на хосте обычно не нужен. Нужны:
- рабочий драйвер NVIDIA;
- Docker;
- NVIDIA Container Toolkit.
---
## 8.2. Устанавливаем рекомендуемый драйвер Ubuntu
Показываем доступные драйверы:
Bash:
ubuntu-drivers devices
Автоматически устанавливаем рекомендуемый пакет:
Bash:
sudo ubuntu-drivers install
Перезагружаем систему:
Bash:
sudo reboot
После перезагрузки:
Bash:
nvidia-smi
Дополнительно:
Bash:
nvidia-smi -L
Пример:
Код:
GPU 0: NVIDIA GeForce RTX 4090 (UUID: GPU-...)
---
## 8.3. Если включён Secure Boot
При включённом Secure Boot модуль NVIDIA может не загрузиться без подтверждения MOK-ключа.
Типичные симптомы:
Код:
nvidia-smi has failed because it couldn't communicate with the NVIDIA driver
или:
Код:
NVIDIA kernel module is not loaded
Проверка:
Bash:
mokutil --sb-state
lsmod | grep nvidia
Возможные решения:
1. Во время установки драйвера создать пароль MOK.
2. После перезагрузки выбрать в синем меню:
-
Enroll MOK;-
Continue;-
Yes;- ввести созданный пароль.
3. Либо отключить Secure Boot в UEFI/BIOS.
4. Повторно загрузить систему и проверить
nvidia-smi.Не переходите к Docker, пока обычная команда
nvidia-smi на хосте не работает.---
# 9. Установка Docker Engine и Docker Compose
## 9.1. Добавляем официальный репозиторий Docker
Bash:
sudo apt-get update
sudo apt-get install -y ca-certificates curl
Создаём каталог ключей:
Bash:
sudo install -m 0755 -d /etc/apt/keyrings
Загружаем ключ Docker:
Bash:
sudo curl -fsSL \
https://download.docker.com/linux/ubuntu/gpg \
-o /etc/apt/keyrings/docker.asc
Выдаём права на чтение:
Bash:
sudo chmod a+r /etc/apt/keyrings/docker.asc
Добавляем репозиторий:
Bash:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Обновляем индекс пакетов:
Bash:
sudo apt-get update
Устанавливаем Docker Engine и Compose Plugin:
Bash:
sudo apt-get install -y \
docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin
---
## 9.2. Включаем автозапуск Docker
Bash:
sudo systemctl enable --now docker
Проверяем статус:
Bash:
sudo systemctl status docker --no-pager
Проверяем версию:
Bash:
sudo docker version
sudo docker compose version
Обратите внимание на синтаксис:
Код:
Правильно:
docker compose
Старый синтаксис:
docker-compose
---
## 9.3. Проверяем Docker
Bash:
sudo docker run --rm hello-world
Если контейнер успешно запустился, Docker работает.
---
## 9.4. Необязательно: разрешаем запуск Docker без sudo
Bash:
sudo usermod -aG docker "$USER"
Применяем группу в текущем сеансе:
Bash:
newgrp docker
Проверяем:
Bash:
docker ps
Предупреждение: членство в группеdockerпрактически эквивалентно root-доступу. Не добавляйте в эту группу недоверенных пользователей.
Далее в статье команды приведены без
sudo. Если пользователь не добавлен в группу docker, ставьте sudo перед командами Docker.---
# 10. Установка NVIDIA Container Toolkit
Обычный Docker не предоставляет контейнеру доступ к NVIDIA GPU. Для этого устанавливается NVIDIA Container Toolkit.
## 10.1. Устанавливаем зависимости
Bash:
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
ca-certificates \
curl \
gnupg2
---
## 10.2. Добавляем официальный репозиторий NVIDIA
Bash:
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \
| sudo gpg --dearmor \
-o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
Bash:
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
---
## 10.3. Устанавливаем NVIDIA Container Toolkit
Bash:
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
---
## 10.4. Подключаем NVIDIA Runtime к Docker
Bash:
sudo nvidia-ctk runtime configure --runtime=docker
Перезапускаем Docker:
Bash:
sudo systemctl restart docker
---
## 10.5. Проверяем GPU внутри Docker
Bash:
sudo docker run --rm \
--runtime=nvidia \
--gpus all \
ubuntu \
nvidia-smi
Внутри контейнера должна появиться таблица
nvidia-smi с вашей видеокартой.Это обязательная проверка.
Не продолжайте установку Ollama, если данная команда не видит GPU.
---
# 11. Создание Docker Compose-конфигурации
## 11.1. Создаём рабочий каталог
Bash:
sudo mkdir -p /opt/qwen-stack/modelfiles
sudo mkdir -p /opt/qwen-stack/backups
sudo chown -R "$USER":"$USER" /opt/qwen-stack
Переходим в каталог:
Bash:
cd /opt/qwen-stack
---
## 11.2. Генерируем секретный ключ Open WebUI
Bash:
printf 'WEBUI_SECRET_KEY=%s\n' "$(openssl rand -hex 32)" > .env
chmod 600 .env
Проверяем наличие файла:
Bash:
ls -la .env
Не публикуйте содержимое
.env.Не добавляйте его в открытый Git-репозиторий.
Создаём
.gitignore:
Bash:
cat > .gitignore <<'EOF'
.env
backups/
EOF
---
## 11.3. Создаём compose.yaml
Bash:
nano compose.yaml
Вставляем:
YAML:
name: qwen-stack
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
restart: unless-stopped
ports:
- "127.0.0.1:11434:11434"
volumes:
- ollama_data:/root/.ollama
- ./modelfiles:/modelfiles:ro
environment:
OLLAMA_HOST: "0.0.0.0:11434"
# Начальный размер контекста.
# Для 24 ГБ и qwen3-coder:30b рекомендуется начинать с 16K.
OLLAMA_CONTEXT_LENGTH: "16384"
# На одной 24-гигабайтной GPU лучше обрабатывать
# только один запрос к модели одновременно.
OLLAMA_NUM_PARALLEL: "1"
# Не держим несколько больших моделей в VRAM одновременно.
OLLAMA_MAX_LOADED_MODELS: "1"
# После последнего запроса модель остаётся загруженной 10 минут.
OLLAMA_KEEP_ALIVE: "10m"
# Снижает потребление памяти на длинном контексте.
OLLAMA_FLASH_ATTENTION: "1"
# KV-кэш q8_0 использует примерно вдвое меньше памяти, чем f16.
OLLAMA_KV_CACHE_TYPE: "q8_0"
# Необязательно: запрет облачных моделей Ollama.
# Удалите эту строку, если планируется использовать Ollama Cloud.
OLLAMA_NO_CLOUD: "1"
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities:
- gpu
healthcheck:
test:
- CMD
- ollama
- list
interval: 30s
timeout: 10s
retries: 10
start_period: 20s
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
restart: unless-stopped
depends_on:
ollama:
condition: service_healthy
ports:
- "127.0.0.1:3000:8080"
environment:
OLLAMA_BASE_URL: "http://ollama:11434"
WEBUI_SECRET_KEY: "${WEBUI_SECRET_KEY}"
WEBUI_NAME: "Local Qwen Coder"
volumes:
- open_webui_data:/app/backend/data
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
volumes:
ollama_data:
name: qwen-stack-ollama
open_webui_data:
name: qwen-stack-open-webui
Сохраняем файл.
В
nano:
Код:
Ctrl+O
Enter
Ctrl+X
---
## 11.4. Что означает конфигурация Ollama
###
OLLAMA_CONTEXT_LENGTH
YAML:
OLLAMA_CONTEXT_LENGTH: "16384"
Устанавливает контекст по умолчанию в 16 384 токена.
###
OLLAMA_NUM_PARALLEL
YAML:
OLLAMA_NUM_PARALLEL: "1"
Разрешает только один одновременно обрабатываемый запрос.
При нескольких параллельных запросах память под контекст умножается. Для одной почти полностью занятой 24-гигабайтной карты значение
1 безопаснее.###
OLLAMA_MAX_LOADED_MODELS
YAML:
OLLAMA_MAX_LOADED_MODELS: "1"
Не позволяет держать в VRAM несколько больших моделей одновременно.
###
OLLAMA_KEEP_ALIVE
YAML:
OLLAMA_KEEP_ALIVE: "10m"
Оставляет модель в памяти на 10 минут после последнего запроса.
Преимущества:
- следующий ответ начинается быстрее;
- модель не загружается заново после каждого сообщения.
Недостаток:
- видеопамять остаётся занятой ещё 10 минут.
###
OLLAMA_FLASH_ATTENTION
YAML:
OLLAMA_FLASH_ATTENTION: "1"
Принудительно включает Flash Attention, если выбранный backend и GPU его поддерживают.
На старых картах при проблемах эту строку можно удалить или заменить на:
YAML:
OLLAMA_FLASH_ATTENTION: "0"
###
OLLAMA_KV_CACHE_TYPE
YAML:
OLLAMA_KV_CACHE_TYPE: "q8_0"
Уменьшает расход видеопамяти на контекст.
---
## 11.5. Что означает конфигурация Open WebUI
YAML:
OLLAMA_BASE_URL: "http://ollama:11434"
Внутри Docker Compose контейнер Ollama доступен по имени сервиса:
Код:
ollama
Поэтому Open WebUI обращается не к
localhost, а к:
Код:
http://ollama:11434
localhost внутри контейнера Open WebUI означает сам контейнер Open WebUI, а не контейнер Ollama.---
## 11.6. Почему Open WebUI не получает GPU
В этой схеме GPU использует Ollama.
Open WebUI выполняет роль веб-приложения и не нуждается в GPU для обычного общения с моделью.
Неправильная схема:
Код:
GPU передан только Open WebUI,
а Ollama работает без GPU.
Правильная схема:
Код:
GPU передан контейнеру Ollama.
Open WebUI подключается к API Ollama.
---
# 12. Запуск Ollama и Open WebUI
## 12.1. Проверяем синтаксис Compose
Bash:
cd /opt/qwen-stack
docker compose config
Если ошибок нет, загружаем образы:
Bash:
docker compose pull
Запускаем контейнеры:
Bash:
docker compose up -d
---
## 12.2. Проверяем статус
Bash:
docker compose ps
Ожидаемый результат:
Код:
ollama running / healthy
open-webui running
Показываем контейнеры:
Bash:
docker ps
---
## 12.3. Проверяем журналы Ollama
Bash:
docker compose logs --tail=100 ollama
Потоковый просмотр:
Bash:
docker compose logs -f ollama
Для выхода:
Код:
Ctrl+C
---
## 12.4. Проверяем журналы Open WebUI
Bash:
docker compose logs --tail=100 open-webui
Потоковый просмотр:
Bash:
docker compose logs -f open-webui
---
# 13. Загрузка Qwen3-Coder
Загружаем рекомендуемую модель:
Bash:
docker exec -it ollama ollama pull qwen3-coder:30b
Будет загружено приблизительно 19 ГБ данных.
Если соединение прервалось, повторите ту же команду:
Bash:
docker exec -it ollama ollama pull qwen3-coder:30b
Ollama обычно повторно использует уже загруженные слои.
---
## 13.1. Проверяем список моделей
Bash:
docker exec ollama ollama list
В списке должна появиться модель:
Код:
qwen3-coder:30b
---
## 13.2. Проверяем место на диске
Bash:
df -h
docker system df
Проверяем каталог Ollama внутри контейнера:
Bash:
docker exec ollama du -sh /root/.ollama
---
# 14. Проверка через командную строку и API
## 14.1. Интерактивный запуск
Bash:
docker exec -it ollama ollama run qwen3-coder:30b
Пример запроса:
Код:
Напиши на Python функцию чтения большого JSONL-файла без загрузки
всего файла в оперативную память. Добавь обработку повреждённых строк,
аннотации типов и тесты pytest.
Для выхода используйте:
Код:
Ctrl+D
или команду:
Код:
/bye
---
## 14.2. Проверка API
Проверяем список моделей:
Bash:
curl -s http://127.0.0.1:11434/api/tags | jq
Отправляем запрос:
Bash:
curl -s http://127.0.0.1:11434/api/chat \
-H 'Content-Type: application/json' \
-d @- <<'JSON' | jq -r '.message.content'
{
"model": "qwen3-coder:30b",
"stream": false,
"messages": [
{
"role": "system",
"content": "Ты опытный разработчик. Пиши безопасный и проверяемый код."
},
{
"role": "user",
"content": "Напиши HTTP-сервер на Go с эндпоинтом /health и корректным graceful shutdown."
}
]
}
JSON
---
## 14.3. Потоковый запрос
По умолчанию Ollama может возвращать ответ частями.
Bash:
curl -N http://127.0.0.1:11434/api/chat \
-H 'Content-Type: application/json' \
-d @- <<'JSON'
{
"model": "qwen3-coder:30b",
"stream": true,
"messages": [
{
"role": "user",
"content": "Объясни разницу между mutex и semaphore и приведи пример на Rust."
}
]
}
JSON
---
## 14.4. Получение скорости генерации
Bash:
curl -s http://127.0.0.1:11434/api/chat \
-H 'Content-Type: application/json' \
-d @- <<'JSON' \
| jq '{
response: .message.content,
prompt_tokens: .prompt_eval_count,
generated_tokens: .eval_count,
tokens_per_second:
(if .eval_duration > 0
then (.eval_count / (.eval_duration / 1000000000))
else 0
end)
}'
{
"model": "qwen3-coder:30b",
"stream": false,
"messages": [
{
"role": "user",
"content": "Напиши итеративную реализацию быстрой сортировки на C++20."
}
]
}
JSON
Скорость зависит от:
- модели видеокарты;
- частоты GPU;
- температуры;
- длины входного контекста;
- длины ответа;
- наличия CPU offload;
- текущей загрузки GPU;
- версии Ollama;
- выбранной квантизации.
---
# 15. Проверка загрузки модели в видеокарту
## 15.1. Открываем мониторинг GPU
В отдельном терминале:
Bash:
watch -n 1 nvidia-smi
После отправки запроса должны увеличиться:
Memory-Usage;GPU-Util;- энергопотребление.
Для выхода:
Код:
Ctrl+C
---
## 15.2. Проверяем Ollama PS
Во время или сразу после генерации:
Bash:
docker exec ollama ollama ps
Пример ожидаемого вывода:
Код:
NAME PROCESSOR CONTEXT
qwen3-coder:30b 100% GPU 16384
Главное поле:
Код:
PROCESSOR
Желательно увидеть:
Код:
100% GPU
Если вывод показывает смесь CPU и GPU, например:
Код:
70% GPU / 30% CPU
часть модели или рабочих данных была выгружена в оперативную память.
Это не обязательно ошибка, но скорость будет ниже.
---
## 15.3. Более подробный мониторинг
Bash:
nvidia-smi dmon
Или:
Bash:
nvidia-smi \
--query-gpu=timestamp,name,temperature.gpu,power.draw,memory.used,memory.total,utilization.gpu \
--format=csv \
-l 1
---
# 16. Создание вариантов модели с контекстом 8K, 16K и 32K
Даже если сервер имеет значение контекста по умолчанию, удобно создать отдельные имена моделей.
Так в Open WebUI будет понятно, какой контекст выбран.
---
## 16.1. Вариант 8K
Bash:
cd /opt/qwen-stack
Bash:
cat > modelfiles/qwen3-coder-8k.Modelfile <<'EOF'
FROM qwen3-coder:30b
PARAMETER num_ctx 8192
EOF
Создаём модель:
Bash:
docker exec ollama \
ollama create qwen3-coder-30b-8k \
-f /modelfiles/qwen3-coder-8k.Modelfile
---
## 16.2. Вариант 16K
Bash:
cat > modelfiles/qwen3-coder-16k.Modelfile <<'EOF'
FROM qwen3-coder:30b
PARAMETER num_ctx 16384
EOF
Bash:
docker exec ollama \
ollama create qwen3-coder-30b-16k \
-f /modelfiles/qwen3-coder-16k.Modelfile
---
## 16.3. Вариант 32K
Bash:
cat > modelfiles/qwen3-coder-32k.Modelfile <<'EOF'
FROM qwen3-coder:30b
PARAMETER num_ctx 32768
EOF
Bash:
docker exec ollama \
ollama create qwen3-coder-30b-32k \
-f /modelfiles/qwen3-coder-32k.Modelfile
---
## 16.4. Проверяем созданные модели
Bash:
docker exec ollama ollama list
Ожидаемые имена:
Код:
qwen3-coder:30b
qwen3-coder-30b-8k:latest
qwen3-coder-30b-16k:latest
qwen3-coder-30b-32k:latest
Производные модели используют те же базовые слои, поэтому не должны создавать три независимые копии 19-гигабайтных весов.
---
## 16.5. Какой вариант использовать
Код:
qwen3-coder-30b-8k
- короткие задачи;
- максимальный запас VRAM;
- высокая стабильность.
qwen3-coder-30b-16k
- основной вариант;
- несколько файлов;
- длинные технические задания;
- обычные диалоги о коде.
qwen3-coder-30b-32k
- крупные файлы;
- большие логи;
- длинные обсуждения;
- необходимо внимательно следить за VRAM.
Если вариант 32K вызывает CPU offload или ошибку нехватки памяти, возвращайтесь к 16K.
---
# 17. Первоначальная настройка Open WebUI
## 17.1. Открываем интерфейс
Если браузер находится на том же компьютере:
Код:
http://127.0.0.1:3000
Если Ubuntu работает на удалённом сервере, используйте SSH-туннель. Инструкция приведена ниже.
---
## 17.2. Создаём администратора
При первом открытии Open WebUI предложит создать аккаунт.
Первый созданный аккаунт автоматически получает права администратора.
Последующие регистрации обычно получают статус
Pending и требуют подтверждения администратора.Рекомендации:
1. Используйте уникальный пароль.
2. Не используйте пароль от почты или другого сервиса.
3. После входа откройте административную панель.
4. Отключите свободную регистрацию, если другие пользователи не нужны.
Обычно настройка находится примерно здесь:
Код:
Admin Panel
→ Settings
→ Authentication
→ Enable Sign Up
Интерфейс может меняться между версиями.
---
## 17.3. Проверяем соединение с Ollama
Откройте:
Код:
Admin Panel
→ Settings
→ Connections
→ Ollama
Адрес должен быть:
Код:
http://ollama:11434
Не используйте внутри контейнера:
Код:
http://localhost:11434
Потому что
localhost в контейнере Open WebUI указывает на сам Open WebUI.---
## 17.4. Проверяем список моделей
В поле выбора модели должны появиться:
Код:
qwen3-coder:30b
qwen3-coder-30b-8k
qwen3-coder-30b-16k
qwen3-coder-30b-32k
Для начала выберите:
Код:
qwen3-coder-30b-16k
Если модели не появились:
Bash:
docker exec ollama ollama list
docker compose restart open-webui
docker compose logs --tail=100 open-webui
---
## 17.5. Важная настройка num_ctx
В Open WebUI параметр:
Код:
num_ctx
может переопределить серверное значение:
Код:
OLLAMA_CONTEXT_LENGTH
Есть два корректных варианта.
### Вариант A: наследовать значение Ollama
Не включайте ручной параметр
num_ctx в Open WebUI.Тогда будет использоваться значение из:
YAML:
OLLAMA_CONTEXT_LENGTH: "16384"
или значение, записанное в
Modelfile.### Вариант B: задать значение вручную
Установите:
Код:
num_ctx = 16384
Не оставляйте случайно:
Код:
num_ctx = 2048
Контекст 2048 токенов слишком мал для большинства задач программирования, особенно при использовании файлов и инструментов.
---
# 18. Рекомендуемые параметры генерации
Универсальных параметров не существует. Для программирования полезно создать несколько пресетов.
---
## 18.1. Точный и предсказуемый режим
Используется для:
- исправления конкретной ошибки;
- написания патча;
- генерации конфигурации;
- SQL-миграций;
- кода, который должен соответствовать точному формату.
Рекомендуемые значения:
Код:
temperature: 0.2–0.4
top_p: 0.8
top_k: 20
repeat_penalty: 1.05
num_ctx: 16384
num_predict: 2048–4096
---
## 18.2. Стандартный режим Qwen
Официально для Qwen3-Coder рекомендуются приблизительно такие sampling-параметры:
Код:
temperature: 0.7
top_p: 0.8
top_k: 20
repeat_penalty: 1.05
Такой режим подходит для:
- проектирования архитектуры;
- поиска нескольких решений;
- мозгового штурма;
- генерации вариантов реализации;
- подробных объяснений.
---
## 18.3. Не ставьте слишком большой num_predict без необходимости
num_predict ограничивает максимальную длину ответа.Не следует по умолчанию ставить:
Код:
65536
на каждое сообщение.
Это может привести к:
- очень долгой генерации;
- лишнему расходу контекста;
- повторениям;
- зависанию интерфейса на длинном ответе;
- большому энергопотреблению.
Практический старт:
Код:
2048
Для крупных файлов:
Код:
4096–8192
---
# 19. Системный промпт для программирования
В Open WebUI можно создать собственную модель или пресет с системным промптом.
Пример:
Код:
Ты — опытный senior software engineer и специалист по безопасной разработке.
Правила ответа:
1. Отвечай на языке пользователя.
2. Не выдумывай несуществующие API, параметры команд и библиотеки.
3. Если версия языка, фреймворка или базы данных важна, явно укажи,
для какой версии написано решение.
4. Перед большим изменением кратко опиши план.
5. При изменении проекта перечисляй затрагиваемые файлы.
6. Для каждого файла указывай полный путь относительно корня проекта.
7. Возвращай готовый код без пропущенных участков и без комментариев
вида "остальной код без изменений", если пользователь просит полный файл.
8. Добавляй обработку ошибок, валидацию входных данных и логирование,
когда это уместно.
9. Учитывай безопасность: SQL injection, XSS, CSRF, SSRF, path traversal,
command injection, утечки секретов и неправильную авторизацию.
10. Не помещай пароли, токены и API-ключи в исходный код.
11. После реализации предложи команды запуска и тестирования.
12. Добавляй автоматические тесты, когда задача допускает тестирование.
13. Если запрос содержит противоречие, укажи на него до написания кода.
14. Если информации недостаточно, сделай минимальные явно обозначенные
предположения и продолжи решение.
15. Не утверждай, что код был запущен, если он фактически не запускался.
16. Для потенциально опасных команд объясняй последствия.
17. При разборе ошибки сначала выдели наиболее вероятную первопричину,
затем предложи диагностику, затем исправление.
18. Сохраняй существующий стиль и архитектуру проекта, если они показаны.
---
# 20. Как правильно ставить задачи Qwen-Coder
Качество результата сильно зависит от качества запроса.
---
## 20.1. Плохой запрос
Код:
Сделай мне API.
Проблемы:
- не указан язык;
- не указан фреймворк;
- неизвестна база данных;
- неизвестна схема авторизации;
- неизвестны эндпоинты;
- неизвестен формат ответа;
- неизвестны требования к развёртыванию.
---
## 20.2. Хороший запрос
Код:
Создай REST API на Python 3.12 и FastAPI.
Требования:
- PostgreSQL 16;
- SQLAlchemy 2.x в async-режиме;
- Alembic;
- Pydantic 2;
- JWT access token сроком 15 минут;
- refresh token хранится в HttpOnly cookie;
- эндпоинты регистрации, входа, обновления токена и выхода;
- пароли хешировать Argon2;
- добавить rate limiting для /login;
- добавить pytest;
- подготовить Dockerfile и compose.yaml;
- конфигурацию читать из переменных окружения;
- не помещать секреты в репозиторий.
Сначала покажи дерево проекта.
Затем выведи каждый файл отдельным блоком с полным путём.
После кода приведи команды запуска и тестирования.
---
## 20.3. Запрос для исправления ошибки
Код:
Ниже приведены:
1. версия среды;
2. полный stack trace;
3. проблемный файл;
4. ожидаемое поведение;
5. фактическое поведение.
Среда:
- Ubuntu 24.04;
- Python 3.12;
- FastAPI 0.x;
- SQLAlchemy 2.x;
- PostgreSQL 16.
Сначала определи первопричину.
Затем покажи минимальный патч.
Не переписывай архитектуру без необходимости.
После патча добавь тест, воспроизводящий ошибку.
---
## 20.4. Запрос для ревью кода
Код:
Проведи code review.
Проверяй:
- логические ошибки;
- race conditions;
- утечки ресурсов;
- безопасность;
- обработку исключений;
- производительность;
- читаемость;
- тестируемость;
- обратную совместимость.
Для каждой проблемы укажи:
- серьёзность: critical, high, medium или low;
- файл и участок кода;
- почему это проблема;
- сценарий воспроизведения;
- исправленный код.
---
## 20.5. Запрос для работы с существующим проектом
Передайте модели:
- дерево файлов;
- конфигурацию зависимостей;
- версии технологий;
- содержимое затрагиваемых файлов;
- требования к обратной совместимости;
- тесты;
- точный ожидаемый результат.
Пример дерева:
Код:
project/
├── pyproject.toml
├── src/
│ ├── main.py
│ ├── config.py
│ └── users/
│ ├── router.py
│ ├── service.py
│ └── repository.py
└── tests/
└── test_users.py
---
# 21. Работа с файлами и базой знаний
Open WebUI позволяет прикреплять документы и создавать базы знаний.
Но необходимо различать два режима.
---
## 21.1. Прямое помещение файла в контекст
Содержимое файла передаётся модели непосредственно.
Преимущества:
- модель видит точный текст;
- удобно для одного или нескольких небольших файлов;
- хорошо подходит для конкретного патча.
Недостатки:
- расходуется контекст;
- большие файлы могут быть обрезаны;
- история диалога тоже занимает контекст.
---
## 21.2. RAG
RAG означает Retrieval-Augmented Generation.
Упрощённо процесс выглядит так:
Код:
Документ
→ разбиение на фрагменты
→ создание эмбеддингов
→ сохранение в векторной базе
→ поиск релевантных фрагментов
→ передача найденных фрагментов модели
RAG подходит для:
- документации;
- внутренних инструкций;
- спецификаций;
- базы знаний;
- большого количества справочных текстов.
Для точного изменения исходного кода RAG может быть недостаточен, потому что модель получит только найденные фрагменты, а не обязательно весь связанный код.
Для критического патча лучше явно передать:
- полный проблемный файл;
- используемые интерфейсы;
- связанные типы;
- тесты;
- stack trace.
---
## 21.3. Open WebUI не выполняет код автоматически
Обычная установка Open WebUI не означает, что модель может:
- запускать shell-команды;
- изменять файлы;
- делать Git commit;
- выполнять тесты;
- устанавливать пакеты.
Для этого нужны дополнительные инструменты или агенты.
При подключении терминала или инструмента выполнения кода используйте изоляцию:
- отдельный непривилегированный контейнер;
- отсутствие Docker socket;
- ограниченный каталог;
- ограничение CPU и RAM;
- отсутствие секретов;
- запрет доступа к домашнему каталогу;
- запрет доступа к production-среде;
- контроль сетевого доступа.
Никогда не передавайте AI-контейнеру без необходимости:
Код:
/var/run/docker.sock
/root
/home
/etc
~/.ssh
~/.aws
production.env
---
# 22. Настройка производительности
## 22.1. Базовый профиль для 24 ГБ
Рекомендуемая конфигурация:
YAML:
OLLAMA_CONTEXT_LENGTH: "16384"
OLLAMA_NUM_PARALLEL: "1"
OLLAMA_MAX_LOADED_MODELS: "1"
OLLAMA_FLASH_ATTENTION: "1"
OLLAMA_KV_CACHE_TYPE: "q8_0"
OLLAMA_KEEP_ALIVE: "10m"
---
## 22.2. Закройте приложения, использующие GPU
Если видеокарта одновременно выводит рабочий стол, часть VRAM используют:
- браузер;
- Discord;
- Telegram;
- IDE с аппаратным ускорением;
- игры;
- видеоредактор;
- OBS;
- локальные генераторы изображений;
- другие AI-модели.
Проверка:
Bash:
nvidia-smi
Закройте ненужные процессы перед запуском большого контекста.
---
## 22.3. Одна модель и один запрос
Для 24 ГБ не рекомендуется одновременно держать:
- Qwen3-Coder 30B;
- модель эмбеддингов на той же GPU;
- модель генерации изображений;
- Whisper;
- вторую большую LLM.
Также не рекомендуется несколько параллельных запросов с большим контекстом.
Оставьте:
Код:
OLLAMA_NUM_PARALLEL=1
OLLAMA_MAX_LOADED_MODELS=1
---
## 22.4. Проверяйте реальный контекст
Bash:
docker exec ollama ollama ps
Не ориентируйтесь только на значение в Compose.
Параметр
num_ctx из Open WebUI может переопределить серверную настройку.---
## 22.5. Измеряйте первый и последующие запросы отдельно
Первый запрос включает:
- загрузку модели с диска;
- выделение памяти;
- инициализацию CUDA;
- подготовку KV-кэша.
Последующий запрос при загруженной модели будет начинаться быстрее.
---
## 22.6. Температура GPU и throttling
Мониторинг:
Bash:
watch -n 1 nvidia-smi
Следите за:
- температурой;
- частотой;
- энергопотреблением;
- загрузкой GPU;
- использованием VRAM.
Если карта перегревается:
- очистите систему охлаждения;
- улучшите вентиляцию корпуса;
- проверьте вентиляторы;
- ограничьте power limit;
- убедитесь, что блок питания соответствует карте.
Пример ограничения мощности:
Bash:
sudo nvidia-smi -pl 300
Значение зависит от конкретной карты. Не копируйте
300 вслепую — сначала проверьте допустимый диапазон:
Bash:
nvidia-smi -q -d POWER
---
# 23. Что делать при нехватке VRAM
Типичные признаки:
Код:
CUDA out of memory
model runner process has terminated
failed to allocate CUDA buffer
модель частично работает на CPU
контейнер Ollama перезапускается
ответ очень медленный
Выполняйте действия по порядку.
---
## Шаг 1. Уменьшить контекст
Перейдите:
Код:
32768 → 16384 → 8192
В Open WebUI выберите:
Код:
qwen3-coder-30b-16k
или:
Код:
qwen3-coder-30b-8k
---
## Шаг 2. Проверить num_ctx в Open WebUI
Откройте Advanced Parameters и убедитесь, что там не установлено неожиданное значение:
Код:
65536
131072
262144
Либо отключите ручной
num_ctx, либо задайте:
Код:
16384
---
## Шаг 3. Убедиться, что включён q8_0 KV-кэш
В
compose.yaml:
YAML:
OLLAMA_FLASH_ATTENTION: "1"
OLLAMA_KV_CACHE_TYPE: "q8_0"
После изменения:
Bash:
cd /opt/qwen-stack
docker compose up -d
Проверяем журналы:
Bash:
docker compose logs --tail=100 ollama
---
## Шаг 4. Закрыть другие GPU-приложения
Bash:
nvidia-smi
Закройте браузеры, игры и другие AI-сервисы.
---
## Шаг 5. Выгрузить модель
Bash:
docker exec ollama ollama stop qwen3-coder:30b
Или через API:
Bash:
curl -s http://127.0.0.1:11434/api/generate \
-H 'Content-Type: application/json' \
-d '{
"model": "qwen3-coder:30b",
"keep_alive": 0
}'
---
## Шаг 6. Перезапустить Ollama
Bash:
docker compose restart ollama
---
## Шаг 7. Попробовать q4_0 для KV-кэша
Если
q8_0 недостаточно:
YAML:
OLLAMA_KV_CACHE_TYPE: "q4_0"
Применяем:
Bash:
docker compose up -d
Учитывайте, что потеря качества может стать заметнее.
---
## Шаг 8. Перейти на меньшую модель
Bash:
docker exec -it ollama ollama pull qwen2.5-coder:14b
Меньшая модель оставит значительно больше VRAM для контекста.
---
# 24. Доступ к Open WebUI по SSH
Это рекомендуемый способ для удалённого сервера, который не нужно публиковать в интернет.
На локальном компьютере выполните:
Bash:
ssh -N \
-L 3000:127.0.0.1:3000 \
username@SERVER_IP
Например:
Bash:
ssh -N \
-L 3000:127.0.0.1:3000 \
[email protected]
После подключения откройте на локальном компьютере:
Код:
http://127.0.0.1:3000
Трафик пойдёт через SSH.
Преимущества:
- порт 3000 не публикуется;
- не нужен Nginx;
- не нужен отдельный TLS-сертификат;
- работает через существующий SSH-доступ.
---
# 25. Доступ к Open WebUI из локальной сети
По умолчанию в Compose указано:
YAML:
ports:
- "127.0.0.1:3000:8080"
Это означает доступ только с самого сервера.
Для доступа из LAN можно указать конкретный IP сервера:
YAML:
ports:
- "192.168.1.50:3000:8080"
Или все интерфейсы:
YAML:
ports:
- "3000:8080"
Первый вариант безопаснее.
После изменения:
Bash:
cd /opt/qwen-stack
docker compose up -d
Открываем:
Код:
http://192.168.1.50:3000
---
## 25.1. Не публикуйте Ollama API без необходимости
Оставьте:
YAML:
- "127.0.0.1:11434:11434"
Не меняйте на:
YAML:
- "11434:11434"
без аутентификации, reverse proxy или надёжного сетевого ограничения.
Сам Ollama API обычно не предназначен для прямой публикации в интернет без защитного слоя.
---
## 25.2. Важное замечание о Docker и UFW
Опубликованные Docker-порты могут обрабатываться правилами Docker до некоторых правил UFW.
Поэтому не полагайтесь только на:
Bash:
sudo ufw deny 3000
Более надёжные меры:
- привязать порт к
127.0.0.1; - привязать порт к конкретному LAN-IP;
- использовать SSH-туннель;
- использовать reverse proxy;
- использовать внешний firewall;
- не делать port forwarding на роутере.
---
# 26. Публикация Open WebUI через Nginx и HTTPS
Для интернет-доступа рекомендуется:
Код:
Интернет
→ HTTPS 443
→ Nginx
→ 127.0.0.1:3000
→ Open WebUI
→ Ollama
Ollama при этом остаётся недоступен извне.
---
## 26.1. Предварительные условия
Нужны:
- домен, например
ai.example.com; - DNS A- или AAAA-запись;
- открытые порты 80 и 443;
- Open WebUI, привязанный к
127.0.0.1:3000.
---
## 26.2. Устанавливаем Nginx и Certbot
Bash:
sudo apt update
sudo apt install -y \
nginx \
certbot \
python3-certbot-nginx
---
## 26.3. Создаём конфигурацию Nginx
Bash:
sudo nano /etc/nginx/sites-available/open-webui
Вставляем:
NGINX:
server {
listen 80;
listen [::]:80;
server_name ai.example.com;
client_max_body_size 100M;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 3600;
proxy_send_timeout 3600;
proxy_connect_timeout 60;
}
}
Замените:
Код:
ai.example.com
на свой домен.
---
## 26.4. Включаем сайт
Bash:
sudo ln -s \
/etc/nginx/sites-available/open-webui \
/etc/nginx/sites-enabled/open-webui
Проверяем конфигурацию:
Bash:
sudo nginx -t
Перезагружаем Nginx:
Bash:
sudo systemctl reload nginx
---
## 26.5. Получаем HTTPS-сертификат
Bash:
sudo certbot --nginx -d ai.example.com
Проверяем автоматическое обновление:
Bash:
sudo certbot renew --dry-run
После этого интерфейс должен открываться по адресу:
Код:
https://ai.example.com
---
## 26.6. Настраиваем WEBUI_URL и CORS
Для публичной установки в сервис
open-webui можно добавить:
YAML:
environment:
OLLAMA_BASE_URL: "http://ollama:11434"
WEBUI_SECRET_KEY: "${WEBUI_SECRET_KEY}"
WEBUI_NAME: "Local Qwen Coder"
WEBUI_URL: "https://ai.example.com"
CORS_ALLOW_ORIGIN: "https://ai.example.com"
Применяем:
Bash:
docker compose up -d
Некоторые параметры Open WebUI сохраняются во внутренней базе и после первого запуска могут иметь приоритет над переменными окружения.
Если изменение не применяется, откройте административную панель и измените соответствующее значение там.
Для нескольких допустимых адресов
CORS_ALLOW_ORIGIN использует разделитель ;, например:
YAML:
CORS_ALLOW_ORIGIN: "https://ai.example.com;http://192.168.1.50:3000"
---
## 26.7. Минимальные меры безопасности публичного сервера
Обязательно:
1. Использовать HTTPS.
2. Отключить свободную регистрацию.
3. Использовать длинный уникальный пароль администратора.
4. Не публиковать порт
11434.5. Не публиковать Docker socket.
6. Регулярно обновлять Open WebUI.
7. Делать резервные копии.
8. Ограничить доступ по VPN или IP, если публичный доступ не нужен.
9. Не хранить секреты в чатах.
10. Не подключать опасные инструменты без sandbox.
11. Не использовать один пароль для Open WebUI и SSH.
12. Настроить firewall и защиту SSH.
---
# 27. Обновление Ollama, Open WebUI и модели
## 27.1. Обновление контейнеров
Bash:
cd /opt/qwen-stack
docker compose pull
docker compose up -d
Проверяем:
Bash:
docker compose ps
docker compose logs --tail=100 ollama
docker compose logs --tail=100 open-webui
Удаляем неиспользуемые старые образы:
Bash:
docker image prune -f
---
## 27.2. Обновление модели
Bash:
docker exec -it ollama ollama pull qwen3-coder:30b
После обновления базовой модели при необходимости пересоздайте производные варианты:
Bash:
docker exec ollama \
ollama create qwen3-coder-30b-8k \
-f /modelfiles/qwen3-coder-8k.Modelfile
Bash:
docker exec ollama \
ollama create qwen3-coder-30b-16k \
-f /modelfiles/qwen3-coder-16k.Modelfile
Bash:
docker exec ollama \
ollama create qwen3-coder-30b-32k \
-f /modelfiles/qwen3-coder-32k.Modelfile
---
## 27.3. Закрепление версии Open WebUI
Тег:
Код:
main
движется вместе с новыми релизами.
Для production-сервера лучше закрепить конкретную версию:
YAML:
image: ghcr.io/open-webui/open-webui:vX.Y.Z
Перед заменой:
1. прочитайте release notes;
2. сделайте резервную копию;
3. запишите текущий тег;
4. обновите образ;
5. проверьте миграцию базы;
6. проверьте вход, чаты и подключение к Ollama.
Не копируйте старый номер версии из случайной статьи. Найдите актуальный стабильный релиз.
---
# 28. Резервное копирование
## 28.1. Что необходимо сохранять
Данные Open WebUI:
Код:
qwen-stack-open-webui
Модели Ollama:
Код:
qwen-stack-ollama
Конфигурация:
Код:
/opt/qwen-stack/compose.yaml
/opt/qwen-stack/.env
/opt/qwen-stack/modelfiles/
.env необходимо хранить как секрет.---
## 28.2. Резервная копия Open WebUI
Bash:
cd /opt/qwen-stack
mkdir -p backups
Bash:
docker run --rm \
-v qwen-stack-open-webui:/data:ro \
-v "$PWD/backups":/backup \
alpine \
sh -c 'tar czf /backup/open-webui-$(date +%F-%H%M%S).tar.gz -C /data .'
Проверяем:
Bash:
ls -lh backups
---
## 28.3. Резервная копия моделей Ollama
Модели можно скачать повторно, поэтому их резервная копия необязательна. Но она ускоряет восстановление при медленном интернете.
Bash:
docker run --rm \
-v qwen-stack-ollama:/data:ro \
-v "$PWD/backups":/backup \
alpine \
sh -c 'tar czf /backup/ollama-$(date +%F-%H%M%S).tar.gz -C /data .'
Архив получится большим.
---
## 28.4. Копия конфигурации
Bash:
tar czf \
"backups/qwen-config-$(date +%F-%H%M%S).tar.gz" \
compose.yaml \
.env \
modelfiles
Ограничиваем доступ:
Bash:
chmod 600 backups/qwen-config-*.tar.gz
---
## 28.5. Восстановление Open WebUI
Сначала остановите сервис:
Bash:
cd /opt/qwen-stack
docker compose down
Очистите или создайте volume только после проверки имени.
Пример восстановления:
Bash:
docker run --rm \
-v qwen-stack-open-webui:/data \
-v "$PWD/backups":/backup:ro \
alpine \
sh -c 'rm -rf /data/* /data/.[!.]* /data/..?* 2>/dev/null || true; tar xzf /backup/ИМЯ_АРХИВА.tar.gz -C /data'
После восстановления:
Bash:
docker compose up -d
Перед удалением данных обязательно сделайте дополнительную копию.
---
# 29. Альтернативная установка Ollama без Docker
Иногда Ollama удобнее установить непосредственно в Ubuntu, а Open WebUI оставить в Docker.
Основной Docker Compose-вариант обычно проще переносить и резервировать, но нативная установка тоже работоспособна.
---
## 29.1. Устанавливаем Ollama
Bash:
curl -fsSL https://ollama.com/install.sh | sh
Проверяем:
Bash:
ollama --version
sudo systemctl status ollama --no-pager
---
## 29.2. Настраиваем переменные systemd
Bash:
sudo systemctl edit ollama
Вставляем:
INI:
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_CONTEXT_LENGTH=16384"
Environment="OLLAMA_NUM_PARALLEL=1"
Environment="OLLAMA_MAX_LOADED_MODELS=1"
Environment="OLLAMA_KEEP_ALIVE=10m"
Environment="OLLAMA_FLASH_ATTENTION=1"
Environment="OLLAMA_KV_CACHE_TYPE=q8_0"
Environment="OLLAMA_NO_CLOUD=1"
Сохраняем и выполняем:
Bash:
sudo systemctl daemon-reload
sudo systemctl restart ollama
Проверяем:
Bash:
sudo systemctl status ollama --no-pager
journalctl -u ollama --no-pager -n 100
---
## 29.3. Загружаем модель
Bash:
ollama pull qwen3-coder:30b
ollama run qwen3-coder:30b
---
## 29.4. Запускаем Open WebUI отдельно
Создаём постоянный секрет:
Bash:
printf 'WEBUI_SECRET_KEY=%s\n' "$(openssl rand -hex 32)" > open-webui.env
chmod 600 open-webui.env
Запускаем:
Bash:
docker run -d \
--name open-webui \
--restart unless-stopped \
-p 127.0.0.1:3000:8080 \
--add-host=host.docker.internal:host-gateway \
--env-file open-webui.env \
-e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
-v open-webui:/app/backend/data \
ghcr.io/open-webui/open-webui:main
В этой схеме:
Код:
Ollama работает на хосте.
Open WebUI работает в Docker.
Open WebUI обращается к host.docker.internal.
---
## 29.5. Предупреждение об OLLAMA_HOST
Для доступа из Docker нативный Ollama слушает:
Код:
0.0.0.0:11434
Это потенциально делает API доступным через сетевые интерфейсы сервера.
Не пробрасывайте порт 11434 на роутере.
Ограничьте доступ firewall или используйте основной вариант, где Ollama и Open WebUI находятся в одной Docker-сети.
---
# 30. Установка на Windows 11
Для Windows удобна схема:
Код:
Ollama работает как Windows-приложение.
Open WebUI работает в Docker Desktop.
---
## 30.1. Требования
Нужны:
- Windows 11;
- свежий драйвер NVIDIA;
- Ollama for Windows;
- Docker Desktop;
- WSL 2;
- включённая аппаратная виртуализация;
- 24 ГБ VRAM;
- достаточно свободного места на диске.
---
## 30.2. Проверяем GPU
Откройте PowerShell:
Код:
nvidia-smi
Команда должна увидеть видеокарту.
---
## 30.3. Устанавливаем Ollama
Скачайте установщик с официального сайта:
Код:
https://ollama.com/download
После установки откройте новый PowerShell:
Код:
ollama --version
---
## 30.4. Настраиваем Ollama через переменные пользователя
Код:
[Environment]::SetEnvironmentVariable(
"OLLAMA_CONTEXT_LENGTH",
"16384",
"User"
)
Код:
[Environment]::SetEnvironmentVariable(
"OLLAMA_NUM_PARALLEL",
"1",
"User"
)
Код:
[Environment]::SetEnvironmentVariable(
"OLLAMA_MAX_LOADED_MODELS",
"1",
"User"
)
Код:
[Environment]::SetEnvironmentVariable(
"OLLAMA_FLASH_ATTENTION",
"1",
"User"
)
Код:
[Environment]::SetEnvironmentVariable(
"OLLAMA_KV_CACHE_TYPE",
"q8_0",
"User"
)
После изменения полностью завершите Ollama через значок в системном трее и запустите заново.
Можно также перезагрузить Windows.
---
## 30.5. Перенос моделей на другой диск
Например, на диск
D::
Код:
New-Item -ItemType Directory -Force D:\OllamaModels
Код:
[Environment]::SetEnvironmentVariable(
"OLLAMA_MODELS",
"D:\OllamaModels",
"User"
)
Перезапустите Ollama.
---
## 30.6. Загружаем модель
Код:
ollama pull qwen3-coder:30b
Запускаем:
Код:
ollama run qwen3-coder:30b
Проверяем загрузку:
Код:
ollama ps
В отдельном окне:
Код:
nvidia-smi -l 1
---
## 30.7. Устанавливаем Docker Desktop
Скачайте Docker Desktop:
Код:
https://www.docker.com/products/docker-desktop/
В настройках Docker Desktop убедитесь, что используется WSL 2 backend.
Проверяем PowerShell:
Код:
docker version
docker compose version
---
## 30.8. Запускаем Open WebUI
Сначала создайте volume:
Код:
docker volume create open-webui
Запускаем контейнер:
Код:
docker run -d `
--name open-webui `
--restart unless-stopped `
-p 127.0.0.1:3000:8080 `
--add-host=host.docker.internal:host-gateway `
-e OLLAMA_BASE_URL=http://host.docker.internal:11434 `
-v open-webui:/app/backend/data `
ghcr.io/open-webui/open-webui:main
Открываем:
Код:
http://127.0.0.1:3000
---
## 30.9. Если Open WebUI не видит Windows Ollama
Установите:
Код:
[Environment]::SetEnvironmentVariable(
"OLLAMA_HOST",
"0.0.0.0:11434",
"User"
)
Полностью перезапустите Ollama.
Проверьте:
Код:
curl.exe http://127.0.0.1:11434/api/tags
Проверьте журналы Open WebUI:
Код:
docker logs --tail 100 open-webui
Не публикуйте порт 11434 в интернет. В Windows Firewall разрешайте доступ только из доверенных сетей.
---
# 31. Типичные ошибки и их устранение
## Ошибка 1. Docker не видит GPU
Сообщение:
Код:
could not select device driver "" with capabilities: [[gpu]]
Проверяем:
Bash:
nvidia-smi
Bash:
dpkg -l | grep nvidia-container
Повторно настраиваем runtime:
Bash:
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
Тестируем:
Bash:
sudo docker run --rm \
--runtime=nvidia \
--gpus all \
ubuntu \
nvidia-smi
---
## Ошибка 2. nvidia-smi работает на хосте, но не в контейнере
Проверьте:
Bash:
docker info | grep -i runtime
Bash:
cat /etc/docker/daemon.json
Повторите:
Bash:
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
---
## Ошибка 3. Ollama использует CPU
Проверяем:
Bash:
docker exec ollama ollama ps
nvidia-smi
docker compose logs --tail=200 ollama
Возможные причины:
- GPU не передан контейнеру;
- NVIDIA Container Toolkit не настроен;
- модель и контекст не помещаются в VRAM;
- после suspend/resume драйвер перестал обнаруживаться;
- запущены другие GPU-приложения;
- используется неподдерживаемая карта;
- установлен слишком старый драйвер.
После suspend/resume в Linux иногда помогает:
Bash:
sudo rmmod nvidia_uvm
sudo modprobe nvidia_uvm
docker compose restart ollama
Если модуль занят, проще перезагрузить систему.
---
## Ошибка 4. CUDA out of memory
Уменьшите:
Код:
num_ctx
Порядок:
Код:
32768 → 16384 → 8192
Проверьте:
Bash:
docker exec ollama ollama ps
nvidia-smi
Убедитесь, что:
YAML:
OLLAMA_NUM_PARALLEL: "1"
OLLAMA_MAX_LOADED_MODELS: "1"
OLLAMA_KV_CACHE_TYPE: "q8_0"
---
## Ошибка 5. Open WebUI не подключается к Ollama
Проверяем API на хосте:
Bash:
curl -s http://127.0.0.1:11434/api/tags | jq
Проверяем Docker-сеть из отдельного временного контейнера:
Bash:
docker run --rm \
--network qwen-stack_default \
curlimages/curl:latest \
-sS http://ollama:11434/api/tags
Проверяем переменную:
Bash:
docker inspect open-webui \
--format '{{range .Config.Env}}{{println .}}{{end}}' \
| grep OLLAMA
Должно быть:
Код:
OLLAMA_BASE_URL=http://ollama:11434
Проверяем журналы:
Bash:
docker compose logs --tail=200 open-webui
docker compose logs --tail=200 ollama
---
## Ошибка 6. Модель не отображается в Open WebUI
Bash:
docker exec ollama ollama list
docker compose restart open-webui
В Open WebUI проверьте:
Код:
Admin Panel
→ Settings
→ Connections
→ Ollama
→ http://ollama:11434
---
## Ошибка 7. Контекст остаётся маленьким
Проверяем:
Bash:
docker exec ollama ollama ps
В Open WebUI найдите параметр:
Код:
num_ctx
Он может переопределять
OLLAMA_CONTEXT_LENGTH.Либо выключите ручной
num_ctx, либо задайте:
Код:
16384
---
## Ошибка 8. После включения num_ctx модель возвращает пустой ответ
Если параметр автоматически получил значение:
Код:
2048
увеличьте его до:
Код:
8192
или:
Код:
16384
Маленького контекста может не хватать для:
- истории;
- системного промпта;
- tool schemas;
- содержимого файлов;
- ответа модели.
---
## Ошибка 9. Порт уже занят
Bash:
sudo ss -ltnp | grep ':3000'
sudo ss -ltnp | grep ':11434'
Или:
Bash:
sudo lsof -iTCP:3000 -sTCP:LISTEN
sudo lsof -iTCP:11434 -sTCP:LISTEN
Измените внешний порт, например:
YAML:
ports:
- "127.0.0.1:3001:8080"
Тогда адрес:
Код:
http://127.0.0.1:3001
---
## Ошибка 10. Permission denied при обращении к Docker
Сообщение:
Код:
permission denied while trying to connect to the Docker daemon socket
Временно используйте:
Bash:
sudo docker ps
Либо:
Bash:
sudo usermod -aG docker "$USER"
newgrp docker
---
## Ошибка 11. Мало места на диске
Bash:
df -h
docker system df
Удаляем неиспользуемые образы:
Bash:
docker image prune -a
Перед подтверждением внимательно проверьте список.
Не выполняйте без понимания:
Bash:
docker system prune --volumes
Эта команда может удалить volumes и данные.
Удаление ненужной модели:
Bash:
docker exec ollama ollama rm ИМЯ_МОДЕЛИ
---
## Ошибка 12. Open WebUI теряет авторизацию после обновления
Причина может заключаться в изменившемся
WEBUI_SECRET_KEY.Проверьте:
Bash:
cd /opt/qwen-stack
cat .env
Секрет должен оставаться постоянным.
Не генерируйте новый ключ при каждом обновлении.
Изменение ключа завершит существующие пользовательские сессии и может нарушить расшифровку некоторых сохранённых токенов инструментов.
---
## Ошибка 13. Nginx показывает 502 Bad Gateway
Проверяем:
Bash:
curl -I http://127.0.0.1:3000
docker compose ps
docker compose logs --tail=100 open-webui
sudo nginx -t
sudo journalctl -u nginx --no-pager -n 100
Убедитесь, что Nginx использует:
NGINX:
proxy_pass http://127.0.0.1:3000;
---
## Ошибка 14. Через Nginx не работает потоковый ответ
Убедитесь, что присутствуют:
NGINX:
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 3600;
proxy_send_timeout 3600;
Проверьте
CORS_ALLOW_ORIGIN.---
## Ошибка 15. Модель отвечает медленно
Проверяем:
Bash:
docker exec ollama ollama ps
nvidia-smi
Причины:
- часть модели находится в CPU;
- слишком большой контекст;
- длинная история чата;
- GPU перегревается;
- другое приложение использует GPU;
- старый GPU;
- медленный CPU offload;
- одновременно поступает несколько запросов;
- модель каждый раз выгружается и загружается;
- накопитель медленно читает модель.
---
## Ошибка 16. Flash Attention вызывает проблему на старой GPU
Удалите:
YAML:
OLLAMA_FLASH_ATTENTION: "1"
OLLAMA_KV_CACHE_TYPE: "q8_0"
Или временно установите:
YAML:
OLLAMA_FLASH_ATTENTION: "0"
OLLAMA_KV_CACHE_TYPE: "f16"
Затем уменьшите контекст:
YAML:
OLLAMA_CONTEXT_LENGTH: "8192"
Примените:
Bash:
docker compose up -d
---
# 32. Полезные команды администратора
## Статус контейнеров
Bash:
cd /opt/qwen-stack
docker compose ps
## Запуск
Bash:
docker compose up -d
## Остановка
Bash:
docker compose stop
## Перезапуск
Bash:
docker compose restart
## Полное удаление контейнеров без удаления volumes
Bash:
docker compose down
## Удаление контейнеров вместе с данными
Bash:
docker compose down -v
Опасно: последняя команда удалит модели, аккаунты, чаты и настройки.
## Журнал Ollama
Bash:
docker compose logs -f ollama
## Журнал Open WebUI
Bash:
docker compose logs -f open-webui
## Список моделей
Bash:
docker exec ollama ollama list
## Запущенные модели
Bash:
docker exec ollama ollama ps
## Загрузка модели
Bash:
docker exec -it ollama ollama pull qwen3-coder:30b
## Удаление модели
Bash:
docker exec ollama ollama rm qwen3-coder:30b
## Выгрузка модели из памяти
Bash:
docker exec ollama ollama stop qwen3-coder:30b
## Проверка API
Bash:
curl -s http://127.0.0.1:11434/api/tags | jq
## Проверка GPU
Bash:
nvidia-smi
## Постоянный мониторинг GPU
Bash:
watch -n 1 nvidia-smi
## Проверка Docker volumes
Bash:
docker volume ls
docker volume inspect qwen-stack-ollama
docker volume inspect qwen-stack-open-webui
## Проверка сети
Bash:
docker network ls
docker network inspect qwen-stack_default
## Проверка итоговой Compose-конфигурации
Bash:
docker compose config
## Обновление
Bash:
docker compose pull
docker compose up -d
---
# 33. Поисковые запросы и ключевые слова
Ниже приведены запросы, которые удобно использовать в Google, Яндекс, Bing, GitHub Issues, Reddit и официальной документации.
При поиске ошибки помещайте её точный текст в кавычки.
Пример:
Код:
"could not select device driver" "capabilities: [[gpu]]" Ubuntu
---
## 33.1. Выбор модели
Код:
Qwen3-Coder 30B 24GB VRAM Ollama
Код:
qwen3-coder:30b 19GB Q4_K_M
Код:
Qwen3-Coder 30B A3B 24GB GPU
Код:
Qwen3-Coder 30B RTX 3090
Код:
Qwen3-Coder 30B RTX 4090
Код:
Qwen3-Coder 30B context length VRAM
Код:
Qwen3-Coder-Next 52GB Q4_K_M
Код:
Qwen3-Coder-Next 24GB VRAM offload
Код:
Qwen2.5-Coder 14B vs Qwen3-Coder 30B
Код:
Qwen coder best model for 24GB VRAM
---
## 33.2. Ollama
Код:
Ollama qwen3-coder 30b install
Код:
Ollama qwen3-coder 30b Docker
Код:
Ollama qwen3-coder 30b 100% GPU
Код:
Ollama context length 24GB VRAM
Код:
OLLAMA_CONTEXT_LENGTH qwen3-coder
Код:
OLLAMA_NUM_PARALLEL VRAM usage
Код:
OLLAMA_MAX_LOADED_MODELS one GPU
Код:
OLLAMA_FLASH_ATTENTION qwen3-coder
Код:
OLLAMA_KV_CACHE_TYPE q8_0
Код:
Ollama q8_0 KV cache memory
Код:
Ollama Modelfile PARAMETER num_ctx
Код:
Ollama ps 100% GPU
Код:
Ollama model CPU offload slow
---
## 33.3. NVIDIA и Docker
Код:
NVIDIA Container Toolkit Ubuntu install
Код:
Docker NVIDIA GPU Ubuntu 24.04
Код:
Docker Compose NVIDIA GPU reservation
Код:
docker compose capabilities gpu nvidia
Код:
nvidia-ctk runtime configure docker
Код:
Docker container nvidia-smi not found
Код:
Docker GPU not detected Ubuntu
Код:
"could not select device driver" gpu docker
Код:
"nvidia-container-cli: initialization error"
Код:
NVIDIA Container Toolkit driver library mismatch
Код:
Ollama NVIDIA GPU not detected
Код:
Ollama CUDA out of memory qwen3-coder 30b
---
## 33.4. Open WebUI
Код:
Open WebUI Ollama Docker Compose
Код:
Open WebUI qwen3-coder
Код:
Open WebUI Ollama connection error
Код:
Open WebUI http ollama 11434 Docker network
Код:
Open WebUI OLLAMA_BASE_URL
Код:
Open WebUI host.docker.internal Ollama
Код:
Open WebUI first user administrator
Код:
Open WebUI disable signup
Код:
Open WebUI WEBUI_SECRET_KEY
Код:
Open WebUI num_ctx overrides OLLAMA_CONTEXT_LENGTH
Код:
Open WebUI num_ctx 2048 blank response
Код:
Open WebUI qwen coder system prompt
Код:
Open WebUI RAG source code repository
Код:
Open WebUI Docker volume backup
---
## 33.5. Nginx и удалённый доступ
Код:
Open WebUI Nginx reverse proxy
Код:
Open WebUI Nginx WebSocket
Код:
Open WebUI HTTPS Certbot
Код:
Open WebUI CORS_ALLOW_ORIGIN
Код:
Open WebUI 502 Bad Gateway Nginx
Код:
Open WebUI WebSocket connection failed Nginx
Код:
Open WebUI SSH tunnel port 3000
Код:
Open WebUI Tailscale
---
## 33.6. Windows
Код:
Ollama Windows qwen3-coder 30b
Код:
Ollama Windows OLLAMA_CONTEXT_LENGTH
Код:
Ollama Windows OLLAMA_MODELS D drive
Код:
Open WebUI Docker Desktop Ollama Windows
Код:
Open WebUI host.docker.internal Windows Ollama
Код:
Ollama Windows NVIDIA GPU not detected
Код:
Ollama Windows qwen3-coder CUDA out of memory
---
## 33.7. Поиск по официальным сайтам
Код:
site:ollama.com/library/qwen3-coder qwen3-coder 30b
Код:
site:docs.ollama.com context length
Код:
site:docs.ollama.com OLLAMA_KV_CACHE_TYPE
Код:
site:docs.ollama.com hardware support NVIDIA
Код:
site:docs.openwebui.com starting with Ollama
Код:
site:docs.openwebui.com OLLAMA_BASE_URL
Код:
site:docs.openwebui.com num_ctx
Код:
site:docs.openwebui.com WEBUI_SECRET_KEY
Код:
site:huggingface.co/Qwen Qwen3-Coder-30B-A3B-Instruct
Код:
site:docs.nvidia.com nvidia container toolkit install guide
Код:
site:docs.docker.com engine install ubuntu
---
## 33.8. Поиск по GitHub Issues
Добавляйте к запросу:
Код:
site:github.com/issues
Примеры:
Код:
site:github.com/issues ollama qwen3-coder CUDA out of memory 24GB
Код:
site:github.com/issues open-webui Ollama connection refused
Код:
site:github.com/issues nvidia-container-toolkit Ubuntu 24.04 GPU
Также полезно искать прямо в репозиториях:
Код:
github ollama ollama issues qwen3-coder
Код:
github open-webui open-webui issues num_ctx
---
## 33.9. Как составлять хороший поисковый запрос
Используйте шаблон:
Код:
[программа] [версия] [GPU] [ОС] "[точный текст ошибки]"
Пример:
Код:
Ollama RTX 4090 Ubuntu 24.04 "failed to allocate CUDA buffer"
Ещё один шаблон:
Код:
[модель] [квантизация] [VRAM] [контекст] [движок]
Пример:
Код:
Qwen3-Coder 30B Q4_K_M 24GB 32768 Ollama
Для Open WebUI:
Код:
Open WebUI [способ установки] [backend] "[ошибка]"
Пример:
Код:
Open WebUI Docker Compose Ollama "connection refused"
---
# 34. Финальный чек-лист
Перед использованием проверьте каждый пункт.
## GPU и драйвер
- [ ]
nvidia-smiработает на хосте. - [ ] Драйвер NVIDIA версии 550 или новее.
- [ ] Для старых Compute Capability 5.0–6.2 используется драйвер 570 или новее.
- [ ] В
nvidia-smiотображается приблизительно 24 ГБ VRAM.
## Docker
- [ ]
docker versionработает. - [ ]
docker compose versionработает. - [ ] Контейнер
hello-worldзапускается. - [ ] NVIDIA Container Toolkit установлен.
- [ ] Команда
docker run --gpus all ... nvidia-smiвидит GPU.
## Ollama
- [ ] Контейнер
ollamaзапущен. - [ ] API отвечает на
127.0.0.1:11434. - [ ] Модель
qwen3-coder:30bзагружена. - [ ]
ollama psпоказывает использование GPU. - [ ] Контекст начинается с 16 384 токенов.
- [ ]
OLLAMA_NUM_PARALLEL=1. - [ ]
OLLAMA_MAX_LOADED_MODELS=1. - [ ] Включён Flash Attention.
- [ ] KV-кэш использует
q8_0.
## Open WebUI
- [ ] Контейнер
open-webuiзапущен. - [ ] Интерфейс открывается на
127.0.0.1:3000. - [ ] Первый аккаунт администратора создан.
- [ ] Свободная регистрация отключена, если она не нужна.
- [ ] Подключение Ollama использует
http://ollama:11434. - [ ] Модель отображается в списке.
- [ ]
num_ctxне зафиксирован случайно на 2048. - [ ] Volume Open WebUI подключён.
- [ ]
WEBUI_SECRET_KEYсохранён и не меняется при обновлении.
## Безопасность
- [ ] Порт 11434 не опубликован в интернет.
- [ ] Порт 3000 привязан к
127.0.0.1, если LAN-доступ не нужен. - [ ] Для удалённого доступа используется SSH, VPN или HTTPS.
- [ ] Пароль администратора уникален.
- [ ] Docker socket не подключён к Open WebUI.
- [ ] AI не имеет доступа к SSH-ключам и production-секретам.
- [ ] Созданы резервные копии Open WebUI.
- [ ] Конфигурационный
.envзащищён правами600.
---
# 35. Краткий итог
Для одной NVIDIA GPU с 24 ГБ видеопамяти оптимальная базовая конфигурация выглядит так:
Код:
Модель:
qwen3-coder:30b
Квантизация весов:
Q4_K_M
Размер модели:
около 19 ГБ
Контекст:
16 384 токена
KV-кэш:
q8_0
Параллельные запросы:
1
Одновременно загруженные модели:
1
Backend:
Ollama
Интерфейс:
Open WebUI
Оркестрация:
Docker Compose
Самая важная проверка:
Bash:
docker exec ollama ollama ps
Желательный результат:
Код:
100% GPU
Самая важная настройка при нехватке памяти:
Код:
уменьшить num_ctx
Самая частая ошибка Open WebUI:
Код:
использование localhost вместо имени ollama внутри Docker-сети
Правильный адрес в Compose:
Код:
http://ollama:11434
Самая важная мера безопасности:
Код:
не публиковать Ollama API на порт 11434 в открытый интернет
---
# Официальные источники
Qwen3-Coder в Ollama:
Код:
https://ollama.com/library/qwen3-coder
Qwen3-Coder-Next в Ollama:
Код:
https://ollama.com/library/qwen3-coder-next
Официальная карточка Qwen3-Coder-30B-A3B-Instruct:
Код:
https://huggingface.co/Qwen/Qwen3-Coder-30B-A3B-Instruct
Документация Ollama:
Код:
https://docs.ollama.com/
Установка Ollama в Linux:
Код:
https://docs.ollama.com/linux
Ollama в Docker:
Код:
https://docs.ollama.com/docker
Поддержка GPU в Ollama:
Код:
https://docs.ollama.com/gpu
Настройка контекста Ollama:
Код:
https://docs.ollama.com/context-length
FAQ Ollama:
Код:
https://docs.ollama.com/faq
Open WebUI:
Код:
https://docs.openwebui.com/
Быстрый запуск Open WebUI:
Код:
https://docs.openwebui.com/getting-started/quick-start/
Подключение Open WebUI к Ollama:
Код:
https://docs.openwebui.com/getting-started/quick-start/connect-a-provider/starting-with-ollama/
Переменные окружения Open WebUI:
Код:
https://docs.openwebui.com/reference/env-configuration/
Установка Docker Engine в Ubuntu:
Код:
https://docs.docker.com/engine/install/ubuntu/
Установка NVIDIA Container Toolkit:
Код:
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
Проверка NVIDIA Container Toolkit:
Код:
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/sample-workload.html
Последнее редактирование:
