Self-Hosting LLM с Docker и Proxmox: как запустить собственный GPT на домашнем сервере

от Администратор
0 Комментарии 39 просмотров 8 мин на чтение

Одной из самых интересных вещей, которые можно самостоятельно размещать, являются большие языковые модели (LLM), такие как GPT. ИИ изменил все — от написания контента до программирования. Однако, если вы хотите запустить свою собственную GPT-модель, это отличная идея для обеспечения конфиденциальности и безопасности. Вместо отправки данных облачному провайдеру вы можете хранить данные локально, используя такие инструменты, как Ollama и OpenWebUI. Вы можете сделать это, независимо от того, используете ли вы сервер Proxmox дома, простой автономный Docker-хост или Docker Desktop в Windows. Вы можете развернуть собственного чат-бота с полным контролем, без необходимости в API-ключах и зависимости от облака.

Зачем самостоятельно размещать GPT-модель?

Ответ на этот вопрос довольно очевиден: как и в случае с любым самостоятельно размещаемым решением, это дает вам контроль над данными. Это также позволяет:

  • Конфиденциальность и контроль: Ваши запросы и данные остаются локальными, так как модель размещается локально
  • Отсутствие затрат на API: Избегайте повторяющихся платежей от OpenAI или других облачных поставщиков ИИ
  • Оффлайн-возможности: Используйте свои собственные вычислительные ресурсы, даже без доступа к интернету
  • Экспериментирование: Самостоятельный хостинг позволяет настраивать, изменять и дорабатывать модели и инструменты

Хотя облачные модели мощны и предоставляют простой способ экспериментировать с GPT-моделями, самостоятельный хостинг дает полную свободу и прозрачность данных, что идеально подходит для домашней лаборатории.

Что нужно для начала

На самом деле, если у вас есть домашняя лаборатория и сервер с GPU, или даже просто рабочая станция Windows или Linux с GPU, у вас есть все необходимое.

Обратите внимание на следующие компоненты и требования:

  • Узел Proxmox (или любой Linux-компьютер с Docker), вы также можете использовать Docker Desktop с Windows и бэкендом WSL2
  • Не менее 16 ГБ ОЗУ (предпочтительно 32 ГБ+ для больших моделей)
  • Достаточно современный GPU (GPU NVIDIA с CUDA для ускорения, опционально, но настоятельно рекомендуется)
  • Установленный Docker — вы можете запускать необходимые компоненты на выделенном Docker-хосте или использовать что-то вроде Docker Desktop на Windows для размещения контейнеров OpenWebUI и Ollama
  • Около 10-20 ГБ свободного места на диске (в зависимости от размера модели) и достаточно места для хранения нескольких моделей для экспериментов

Если вы используете Proxmox, вы можете:

  1. Запускать Docker непосредственно в легковесном LXC-контейнере (с включенной опцией nesting=1), или
  2. Использовать виртуальную машину с установленным Docker (например, на базе Ubuntu или Debian)

Ollama и OpenWebUI

Есть два основных компонента, помимо Docker, которые делают возможным самостоятельный хостинг GPT-модели. Это Ollama и OpenWebUI. Во-первых, что такое Ollama?

Ollama

Ollama — это бэкенд-движок, который загружает и запускает модели LLM с открытым исходным кодом локально. Он позволяет запускать популярные модели, такие как:

  • llama3
  • mistral
  • gemma
  • codellama
  • phi3
  • neural-chat

Кроме того, он предоставляет API, который позволяет таким решениям, как OpenWebUI, взаимодействовать с моделями.

OpenWebUI

OpenWebUI, как следует из названия, — это компонент решения, который предоставляет веб-интерфейс, очень похожий на ChatGPT, и позволяет создавать и управлять чатами с различными моделями. Вы можете легко переключать модели или пользователей и контролировать доступ к различным моделям и чатам.

Как развернуть эти решения в Docker

Теперь, когда мы понимаем, что делает каждый из необходимых компонентов, давайте посмотрим, как развернуть их в Docker — это самый простой способ быстро начать работу. Мне нравится Docker, так как он предоставляет простой способ запуска приложений без необходимости заботиться о зависимостях, поскольку они упакованы как часть образа контейнера.

Эта настройка работает на любом Docker-хосте, будь то виртуальная машина на Proxmox или автономный Docker-сервер.

Шаг 1: Установка Docker

Первый шаг — установить Docker. Обратитесь к официальной документации Docker для вашей операционной системы, чтобы узнать, как правильно его установить. Для Windows вы можете загрузить Docker Desktop, который предоставляет удобный графический интерфейс для создания, настройки и управления контейнерами.

Для дистрибутивов на основе Debian, таких как Ubuntu, вы можете следовать руководству здесь: Ubuntu | Docker Docs. Для Windows установите Docker Desktop.

Установка Docker Desktop в Windows
Установка Docker Desktop в Windows

Шаг 2: Создание файла Docker Compose или использование Docker CLI для запуска контейнеров

Мне нравится создавать проектные каталоги для Docker-решений, с которыми я работаю:

mkdir ~/ollama-openwebui
cd ~/ollama-openwebui

Для командной строки Docker вы можете запустить контейнеры с помощью команд:

##OpenWebUI
docker run -d -p 3000:8080 --gpus all --add-host=host.docker.internal:host-gateway -e OLLAMA_BASE_URL=http://host.docker.internal:11434 -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:cuda

#Ollama
docker run -d --name ollama --restart always -p 11434:11434 --gpus all -v ollama:/root/.ollama ollama/ollama

Вы можете использовать docker-compose следующим образом. Создайте файл docker-compose.yml:

version: '3.9'

services:
  ollama:
    image: ollama/ollama
    container_name: ollama
    ports:
      - "11434:11434"
    volumes:
      - ollama:/root/.ollama
    deploy:
      resources:
        reservations:
          devices:
            - capabilities: [gpu]
    restart: always

  openwebui:
    image: ghcr.io/open-webui/open-webui:cuda
    container_name: open-webui
    ports:
      - "3000:8080"
    environment:
      - OLLAMA_BASE_URL=http://host.docker.internal:11434
    extra_hosts:
      - host.docker.internal:host-gateway
    volumes:
      - open-webui:/app/backend/data
    deploy:
      resources:
        reservations:
          devices:
            - capabilities: [gpu]
    restart: always

volumes:
  ollama:
  open-webui:

Этот файл делает следующее:

  • Запускает контейнер Ollama на порту 11434
  • Запускает OpenWebUI на порту 3000
  • Соединяет OpenWebUI с Ollama, используя внутреннюю сеть Docker
  • Предоставляет доступ ко всем GPU вашей системы (Учтите, что в традиционной Linux-системе вам также нужно будет установить nvidia-container-toolkit, упомянутый ниже в шаге 5) WSL в этом не нуждается.

Шаг 3: Запуск docker-compose up

Запустите стек с помощью:

docker-compose up -d

Теперь у вас должен быть запущен OpenWebUI на порту 3000 вашего Docker-хоста и Ollama на порту 11434. Если вы перейдете на порт 11434, вы должны увидеть сообщение «ollama is running» в браузере.

Ollama запущен
Ollama запущен

Если вы используете Docker Desktop в Windows, убедитесь, что оба контейнера работают:

Оба контейнера для локальных языковых моделей работают
Оба контейнера для локальных языковых моделей работают

Шаг 4: Настройка OpenWebUI

Теперь, когда вы запустили контейнеры, вы можете получить доступ к веб-интерфейсу по адресу:

http://<ваш-ip-сервера>:3000

Вам будет предложено настроить административный логин в OpenWebUI.

Настройка административного логина в OpenWebUI
Настройка административного логина в OpenWebUI

После настройки пользователя.

Административный пользователь настроен
Административный пользователь настроен

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

Настройки панели администратора
Настройки панели администратора

Затем перейдите в Настройки > Модели. Чтобы загрузить новые модели, нажмите на стрелку вниз в правом верхнем углу.

Переход к настройкам и моделям
Переход к настройкам и моделям

Ниже вы можете видеть, что я загружаю codellama:7b. После ввода модели и тега вам нужно нажать на маленькую стрелку вниз в правой части этого поля. Это начнет загрузку модели.

Загрузка новой модели
Загрузка новой модели

После нажатия на маленькую стрелку загрузки вы увидите прогресс загрузки модели. Это завершится автоматически.

Наблюдение за прогрессом загрузки модели
Наблюдение за прогрессом загрузки модели

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

Просмотр загруженных моделей
Просмотр загруженных моделей

Шаг 5: Опциональное ускорение GPU

При использовании Docker Desktop на Windows для самостоятельного хостинга LLM настройка поддержки GPU зависит от конфигурации вашей системы. Если вы используете Docker Desktop на основе WSL2 (что характерно для большинства современных настроек), вам не нужно вручную устанавливать NVIDIA Container Toolkit, как в Linux.

Вместо этого:

  • Docker Desktop интегрирует поддержку GPU через WSL2.
  • Вам просто нужно:
    • Windows 10 21H2+ или Windows 11
    • Драйверы NVIDIA GPU, поддерживающие WSL2 (с поддержкой CUDA)
    • Docker Desktop версии 3.3+ с бэкендом WSL2
    • Включить поддержку GPU в настройках Docker в разделе Настройки > Ресурсы > Интеграция WSL > Включить поддержку GPU

После выполнения всех этих условий вы можете запускать контейнеры с --gpus all, как вы уже делаете.

Если вы запускаете Docker нативно в Linux, то да, вам нужно установить и настроить NVIDIA Container Toolkit и nvidia-container-runtime для включения передачи GPU.

sudo apt install nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

Затем измените ваш docker-compose.yml, чтобы добавить поддержку GPU для службы ollama:

    deploy:
      resources:
        reservations:
          devices:
            - capabilities: [gpu]

Альтернативно, для docker run, просто добавьте:

--gpus all

Это может значительно сократить время вывода, особенно для моделей с 7B+ параметрами.

Запуск LLM на Proxmox: Контейнер против виртуальной машины

Если вы используете Proxmox, у вас есть несколько способов запустить эту настройку:

Вариант 1: LXC-контейнер (легковесный)

Создайте привилегированный LXC-контейнер (Ubuntu или Debian) и включите вложенность:

pct set <vmid> -features nesting=1

Затем установите Docker внутри него. Это дает вам легковесную настройку с меньшими накладными расходами.

Вариант 2: Виртуальная машина (больше совместимости)

Создайте виртуальную машину с 4+ ядрами и 16 ГБ+ ОЗУ. Установите Docker и Docker Compose, как на обычном Linux-хосте.

Этот метод более гибкий и может быть более совместимым с передачей GPU.

Советы по самостоятельному хостингу LLM локально

Вот несколько советов для максимально эффективного использования вашей самостоятельно размещенной LLM:

  • Уменьшайте размер модели: Используйте меньшие модели, которые поместятся в объем VRAM вашего GPU
  • Используйте SSD или NVMe: Загрузка моделей интенсивно использует диск
  • Создавайте снимки виртуальной машины или контейнера LLM: В Proxmox создавайте снимки для легкого отката, если вы вносите много изменений или экспериментируете
  • Защитите SSL с помощью Nginx Proxy Manager: Если вам нужен доступ извне вашей локальной сети, защитите его с помощью SSL и обратного прокси
  • Резервное копирование ваших томов: Сохраняйте резервные копии ваших Docker-томов, чтобы сохранить историю чатов и кэш моделей

Практические варианты использования локальной GPT

После запуска ваша самостоятельно размещенная GPT может служить многим целям:

  • Приватный помощник по программированию с CodeLlama
  • Чат-бот для локальных приложений или веб-сайтов
  • Изолированные среды без доступа к интернету, которым нужен доступ к ИИ
  • Генерация контента без привязки к облаку
  • Исследования и эксперименты с запросами

Вы даже можете писать скрипты для подключения REST API Ollama к другим инструментам, таким как Obsidian, VS Code или Home Assistant.

Заключение

Благодаря таким инструментам, как Ollama и OpenWebUI, самостоятельный хостинг LLM GPT-стиля в домашней лаборатории или самостоятельно размещенной среде очень прост и чрезвычайно мощный. Даже эти небольшие «дистиллированные» модели могут предоставить чрезвычайно мощное решение для инженерии запросов или общения с ИИ для обмена идеями. Надеюсь, приведенное выше пошаговое руководство поможет всем, кто хочет начать работу с запуском собственной LLM локально. Дайте мне знать в комментариях, какие локально размещенные инструменты ИИ вы используете и для чего.

Источник на английском языке

Даже просто подбор, перевод и оформление статей требуют времени. А самостоятельный обзор устройств требует еще и финансовых вложений. Если Вы хотите больше обзоров, Вы можете помочь автору.

Вам может понравиться

Оставить комментарий