Проблема: облачный AI — это дорого и неконтролируемо
Вы когда-нибудь считали, сколько стоит месяц активного использования GPT-4 через API? Если ваша команда из 5-10 человек активно работает с ИИ, счета легко достигают $500-1000 в месяц. Но главная проблема даже не в деньгах — это зависимость от внешнего провайдера, ограничения по токенам, задержки и, что критично, конфиденциальность данных.
Многие энтузиасты, прочитавшие мою статью «Как собрать мощную станцию для локальных LLM за $15 000», спрашивали: «А что дальше? Как превратить железо в работающую инфраструктуру для команды?» Именно об этом сегодняшний гайд.
Ключевое отличие инфраструктуры от просто «запущенной модели»: это система, которая позволяет нескольким пользователям работать параллельно, имеет веб-интерфейс, управление моделями и работает 24/7 без вашего вмешательства.
Решение: домашний сервер как корпоративная AI-платформа
Конфигурация, которую мы будем разворачивать:
- Аппаратная часть: Сервер с 192 ГБ ОЗУ, 2× NVIDIA RTX 4090 (или аналоги), SSD NVMe 2 ТБ
- Виртуализация: Proxmox VE 8.x — бесплатная платформа для управления виртуальными машинами и контейнерами
- Инфраструктура: LXC-контейнеры для изоляции сервисов, GPU passthrough для прямого доступа к видеокартам
- Софт: OpenWebUI (ранее Ollama WebUI) как фронтенд, Ollama + Llama.cpp как бэкенд для моделей
- Сетевой доступ: Reverse proxy (Nginx) с HTTPS для доступа из интернета
Почему именно такая связка? Proxmox дает стабильность и возможность разграничения ресурсов, а LXC-контейнеры потребляют минимум накладных расходов по сравнению с полноценными VM. OpenWebUI — это современный, активно развивающийся интерфейс с поддержкой многопользовательского режима, истории чатов и управления моделями.
Пошаговый план развертывания
1Подготовка железа и установка Proxmox
Первым делом устанавливаем Proxmox VE на ваш сервер. Скачайте ISO-образ с официального сайта и запишите на флешку.
# После установки обновляем систему и устанавливаем утилиты
apt update && apt upgrade -y
apt install -y sudo curl wget gnupg gitВажный нюанс: если у вас несколько GPU, убедитесь, что они определяются системой. Проверьте командой:
lspci | grep -i nvidia
# Должны увидеть ваши видеокарты, например:
# 04:00.0 VGA compatible controller: NVIDIA Corporation AD102 [GeForce RTX 4090]
# 08:00.0 VGA compatible controller: NVIDIA Corporation AD102 [GeForce RTX 4090]2Настройка GPU Passthrough для LXC-контейнеров
В отличие от полноценных виртуальных машин, для LXC мы используем не PCIe passthrough, а проброс устройств (device passthrough). Это проще и не требует драйверов внутри контейнера.
Сначала находим ID наших GPU устройств:
ls -la /dev/dri/
# Обычно это renderD128 и card0 (и card1 для второй карты)Создаем новый LXC-контейнер (я использую Ubuntu 22.04 LTS). В интерфейсе Proxmox при создании контейнера в разделе «Resources» добавляем устройство:
# Альтернативно можно добавить в конфиг контейнера вручную
# Файл: /etc/pve/lxc/<CTID>.conf
devices:
render1:
gid: 44
major: 226
minor: 128
mode: 0666
path: /dev/dri/renderD128
card1:
gid: 44
major: 226
minor: 0
mode: 0666
path: /dev/dri/card0Важно: major и minor числа могут отличаться! Проверьте их через `ls -la /dev/dri/`. Также убедитесь, что в контейнере есть группа video (gid 44).
3Установка Ollama и Llama.cpp в контейнере
Зайдите в контейнер через Proxmox или SSH и установите Ollama:
curl -fsSL https://ollama.com/install.sh | sh
# Проверяем, что GPU виден внутри контейнера
ollama serve
# В логах должна быть строка "CUDA is available"Теперь устанавливаем Llama.cpp для максимальной производительности:
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make -j$(nproc) CUDA=1
# Копируем бинарник в удобное место
cp ./bin/main /usr/local/bin/llamacpp4Развертывание OpenWebUI для многопользовательского доступа
OpenWebUI — это веб-интерфейс с поддержкой регистрации пользователей, истории чатов и управления моделями. Устанавливаем его через Docker:
# Устанавливаем Docker если еще нет
apt install -y docker.io docker-compose
# Запускаем OpenWebUI
docker run -d \
--name openwebui \
-p 3000:8080 \
-v openwebui:/app/backend/data \
--add-host=host.docker.internal:host-gateway \
-e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
ghcr.io/open-webui/open-webui:mainТеперь у вас есть веб-интерфейс на порту 3000. Но мы пойдем дальше и настроим безопасный доступ через Nginx с HTTPS.
5Настройка Nginx как Reverse Proxy с HTTPS
Создаем конфигурацию для Nginx (устанавливаем его в отдельном LXC или в том же):
apt install -y nginx certbot python3-certbot-nginx
# Создаем конфиг /etc/nginx/sites-available/openwebui
server {
listen 80;
server_name ваш-домен.ру; # Или IP, если нет домена
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}Получаем SSL-сертификат через Let's Encrypt:
certbot --nginx -d ваш-домен.ру
# Если нет домена, можно использовать самоподписанный сертификат,
# но тогда будет предупреждение в браузере6Загрузка моделей и оптимизация производительности
Теперь самое интересное — загрузка моделей. Для начала возьмем Llama 3.1 70B в 4-битном квантовании:
ollama pull llama3.1:70b-q4_K_M
# Альтернативно через Llama.cpp
wget https://huggingface.co/TheBloke/Llama-3.1-70B-GGUF/resolve/main/llama-3.1-70b.Q4_K_M.gguf
llamacpp -m llama-3.1-70b.Q4_K_M.gguf -ngl 99 -c 8192Ключевые параметры:
-ngl 99— загружать все слои на GPU (если не хватает VRAM, часть уйдет в RAM)-c 8192— размер контекста (можно увеличить до 32K для некоторых моделей)
Для управления несколькими GPU и распределения слоев между ними используйте параметр -t в Llama.cpp или настройки в OpenWebUI.
Нюансы и возможные ошибки
| Проблема | Решение |
|---|---|
| GPU не виден в контейнере | Проверьте major/minor числа, права доступа (chmod 666 /dev/dri/*). Перезапустите контейнер. |
| Модель загружается только на CPU | Убедитесь, что CUDA доступна (nvidia-smi внутри контейнера). Проверьте параметры запуска (-ngl). |
| Скорость генерации низкая | Используйте квантованные модели (Q4_K_M оптимальны). Увеличьте batch size. Проверьте температуру CPU/GPU. |
| Не хватает VRAM для больших моделей | Используйте распределение между GPU или часть слоев на RAM. Или выберите меньшую модель. |
Если вы сталкиваетесь с проблемами производительности, рекомендую мою статью «Практический гайд: как избежать основных ошибок при локальном запуске больших LLM».
FAQ: Частые вопросы
Сколько пользователей может одновременно работать?
Зависит от модели и железа. Для Llama 3.1 70B на 2× RTX 4090 — комфортно 3-5 пользователей с короткими запросами. Для 7B моделей — 10+ пользователей.
Можно ли использовать AMD карты?
Да, но через ROCm. Процесс сложнее, чем с NVIDIA. Подробности в статье «AMD vs NVIDIA для локального ИИ в 2025».
Как обновлять модели?
В OpenWebUI есть встроенный менеджер моделей. Или через командную строку: `ollama pull новое-имя-модели`.
Заключение
Развертывание локальной LLM-инфраструктуры — это не просто техническое упражнение, а реальная альтернатива облачным сервисам для небольших команд и энтузиастов. Вы получаете полный контроль над данными, неограниченное использование и гибкость в выборе моделей.
Да, начальные инвестиции в железо значительны (хотя можно начать и с меньшего, как описано в статье «Собираем бюджетную 4-GPU ферму для LLM»), но за 3-6 месяцев экономия на облачных API покроет эти расходы. А главное — вы строите собственную экосистему, которую можно масштабировать и адаптировать под свои нужды.
Следующий шаг — автоматизация развертывания через Ansible, мониторинг через Grafana и настройка балансировки нагрузки между несколькими серверами. Но это уже тема для отдельной статьи.