Articles

Как развернуть llm на своем сервере: пошаговая инструкция с vLLM и Docker

Как развернуть llm на своем сервере: пошаговая инструкция с vLLM и Docker
Mikhail
Автор
Mikhail
Опубликовано 15.11.2025
0,0
Views 5

Сегодня я подробно расскажу, как развернуть собственную LLMна сервере с нуля. Это практическое руководство для тех, кто хочет перестать зависеть от сторонних провайдеров и получить полный контроль над своими языковыми моделями.

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

Выбор подходящего сервера под ваши задачи и LLM

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

Прежде чем арендовать сервер, критически важно понимать точные требования вашей модели. Я часто наблюдаю ситуацию, когда разработчики переплачивают в 3-4 раза за избыточные мощности или, наоборот, сталкиваются с постоянными ошибками из-за нехватки памяти.

Для популярной модели Qwen2.5-14B вот реальные требования:

  • GPU: NVIDIA с поддержкой CUDA (RTX 3090/4090/A100)
  • Видеопамять: минимум 16 ГБ для квантованной версии, 28+ ГБ для полной
  • Оперативная память: 32 ГБ (рекомендовано)
  • Диск: SSD объемом 100+ ГБ (модель занимает ~27 ГБ, плюс запас для кэша)

Как правильно оценить требования модели из HuggingFace

Выбирая модель на HuggingFace, обращайте внимание на несколько ключевых моментов:

  1. Размер файла: Файлы в формате .bin или .safetensors примерно соответствуют требуемому объему видеопамяти
  2. Теги квантования: Модели с пометками "AWQ", "GPTQ" или "GGUF" потребляют меньше памяти
  3. Документация авторов: В описании часто указывают минимальные требования
  4. История использования: Отзывы других пользователей в комментариях — ценный источник информации

Для начинающих я рекомендую начинать с квантованных версий моделей — они требуют меньше ресурсов, но при этом сохраняют 85-90% качества полных версий.

Пошаговая настройка сервера

Создание инстанса: правильная конфигурация под LLM

Рассмотрим детальный процесс создания сервера:

  1. Зарегистрируйтесь
  2. Перейдите в раздел "Виртуальные машины" → "Создать"
  3. Выберите параметры:
  4. ОС: Ubuntu 22.04 LTS
  5. Тариф: "GPU 1x RTX3090" (оптимальное соотношение цена/качество для 14B моделей)
  6. Диск: минимум 100 ГБ SSD (лучше взять 160 ГБ с запасом)
  7. Сеть: публичный IP-адрес с защитой DDoS

  8. Критически важный шаг: настройка SSH-ключа для безопасного доступа:

  9. Нажмите "Создать новый ключ" или загрузите существующий публичный ключ
  10. Сохраните приватную часть ключа в безопасном месте (файл с расширением .pem)
  11. Установите правильные права на файл: chmod 600 путь_к_ключу.pem

Генерация SSH-ключа в Windows для подключения к серверу

Пользователям Windows необходимо правильно настроить SSH-ключи для подключения. Вот оптимальный способ через PowerShell:

# Запустите PowerShell от имени администратора
ssh-keygen -t rsa -b 4096 -C "ваш_email@example.com"
# Нажимайте Enter для всех вопросов (используйте расположение по умолчанию)

После генерации: - Публичный ключ находится в C:\Users\<имя_пользователя>\.ssh\id_rsa.pub - Приватный ключ в C:\Users\<имя_пользователя>\.ssh\id_rsa - Скопируйте содержимое id_rsa.pub в панель при создании сервера

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

ssh -i "C:\path\to\your\key.pem" ubuntu@ВАШ_IP_АДРЕС

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

icacls "C:\path\to\your\key.pem" /reset
icacls "C:\path\to\your\key.pem" /grant:r "$($env:USERNAME):(R)"
icacls "C:\path\to\your\key.pem" /inheritance:r

Базовая настройка сервера и установка необходимых компонентов

Обновление системы и установка базовых пакетов

После успешного подключения к серверу выполняем первоначальную настройку:

# Обновляем систему
sudo apt update && sudo apt upgrade -y

# Устанавливаем необходимые пакеты
sudo apt install -y htop curl git ufw unzip wget net-tools

Эти пакеты необходимы для мониторинга системы (htop), загрузки файлов (wget, curl), управления сетью (net-tools) и дальнейшей настройки безопасности (ufw).

Установка NVIDIA драйверов для GPU

Правильная установка драйверов — ключевой этап для работы LLM:

sudo apt install -y ubuntu-drivers-common
sudo ubuntu-drivers autoinstall
sudo reboot

После перезагрузки проверяем работу драйверов:

nvidia-smi

Если команда выводит таблицу с информацией о вашей видеокарте, температуре и используемой памяти — драйверы установлены успешно. Если возникает ошибка, возможно, требуется установить конкретную версию драйвера под вашу модель GPU.

Установка Docker и NVIDIA Container Toolkit

Docker значительно упрощает развертывание и изоляцию LLM моделей. Устанавливаем его официальным способом:

curl -fsSL https://get.docker.com | sudo bash
sudo usermod -aG docker $USER
newgrp docker

Для работы GPU внутри Docker контейнеров необходим NVIDIA Container Toolkit:

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && 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

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

Проверяем корректность настройки:

docker run --rm --gpus all nvidia/cuda:12.1-base nvidia-smi

Если в выводе отображается информация о вашей GPU — всё готово к запуску LLM.

Обеспечение безопасности сервера с LLM

Настройка файрвола (UFW) для защиты сервера

Безопасность — неотъемлемая часть развертывания LLM. Начнем с базовой настройки файрвола:

sudo ufw allow OpenSSH
sudo ufw allow 8000/tcp
sudo ufw enable
sudo ufw status

Порт 8000 открываем, так как именно на нем будет работать наш vLLM API. Для повышенной безопасности рекомендуется ограничить доступ только с вашего IP:

sudo ufw allow from ВАШ_IP_АДРЕС to any port 8000 proto tcp

Защита от брутфорса с помощью Fail2Ban

Fail2Ban автоматически блокирует IP-адреса после нескольких неудачных попыток входа:

sudo apt install fail2ban -y
sudo systemctl enable fail2ban --now

По умолчанию Fail2Ban уже имеет настройки для защиты SSH. Для дополнительной защиты можно создать кастомные правила для защиты API.

Усиление безопасности SSH

Редактируем конфигурационный файл SSH:

sudo nano /etc/ssh/sshd_config

Вносим следующие изменения:

PermitRootLogin no
PasswordAuthentication no
MaxAuthTries 3
LoginGraceTime 30

Перезапускаем SSH-сервис:

sudo systemctl restart ssh

Эти настройки полностью отключают вход по паролю и запрещают вход под пользователем root, что значительно повышает безопасность сервера.

Запуск LLM через vLLM в Docker

Подготовка токена для доступа к моделям HuggingFace

Для загрузки моделей из HuggingFace Hub потребуется access token: 1. Перейдите на страницу настроек токенов 2. Создайте новый токен с правами "Read" (или "Write", если планируете загружать свои модели) 3. Сохраните токен в надежном месте — он понадобится при запуске контейнера. После закрытия окна, токен будет вам не доступен, поэтому запишите его.

Запуск контейнера с vLLM и моделью Qwen2.5-14B

Теперь мы готовы к запуску LLM. Используем официальный образ vLLM с поддержкой OpenAI API совместимости:

docker run --runtime nvidia --gpus all \
    --name my_vllm_container \
    -v ~/.cache/huggingface:/root/.cache/huggingface \
    --env "HUGGING_FACE_HUB_TOKEN=ваш_токен_здесь" \
    -p 8000:8000 \
    --ipc=host \
    vllm/vllm-openai:latest \
    --model Qwen/Qwen2.5-14B-Instruct

Разберем ключевые параметры команды: - --runtime nvidia --gpus all — предоставляет контейнеру доступ ко всем GPU - -v ~/.cache/huggingface:/root/.cache/huggingface — монтирует кэш для повторного использования загруженных моделей - --env "HUGGING_FACE_HUB_TOKEN=..." — передает токен для доступа к HuggingFace - -p 8000:8000 — пробрасывает порт для доступа к API - --ipc=host — предоставляет доступ к существующим ресурсам хоста - --model Qwen/Qwen2.5-14B-Instruct — указывает конкретную модель для загрузки

Проверка работоспособности API

После запуска контейнера (первый запуск может занять 10-15 минут из-за загрузки модели) проверяем доступность API:

curl http://localhost:8000/v1/models

Для тестового запроса:

curl http://localhost:8000/v1/completions \
  -H "Content-Type: application/json" \
  -d '{"model": "Qwen/Qwen2.5-14B-Instruct", "prompt": "Hello from vLLM!"}'

В ответе должна быть сгенерированная моделью текстовая последовательность.

Защита API с помощью ключа аутентификации

Для безопасности в публичном доступе добавляем API-ключ:

docker run --runtime nvidia --gpus all \
    [остальные параметры] \
    --api-key ваш_секретный_ключ_здесь \
    vllm/vllm-openai:latest \
    --model Qwen/Qwen2.5-14B-Instruct

Теперь для доступа к API требуется использовать заголовок авторизации:

Authorization: Bearer ваш_секретный_ключ_здесь

Работа с LLM API через Postman и другие инструменты

Настройка Postman для тестирования LLM API

Хотя в командной строке удобно выполнять простые запросы, для полноценной работы с API лучше использовать Postman:

  1. Создайте новую коллекцию "LLM API"
  2. Добавьте запрос типа POST
  3. URL: http://ВАШ_IP:8000/v1/completions
  4. Во вкладке Headers добавьте:
  5. Content-Type: application/json
  6. Authorization: Bearer ваш_ключ (если настроена защита)
  7. Во вкладке Body выберите raw и формат JSON, затем вставьте:
{
    "model": "Qwen/Qwen2.5-7B-Instruct-GPTQ-Int4",
    "messages": [
        {
            "role": "user",
            "content": "Привет!"
        }
    ]
}

Postman позволяет сохранять запросы, создавать переменные окружения (например, для IP и API-ключа) и визуализировать ответы — это значительно ускоряет работу с LLM API.

Интеграция с Python и другими языками программирования

Для интеграции LLM в свои приложения можно использовать стандартные библиотеки HTTP. Пример для Python:

import requests

API_URL = "http://ВАШ_IP:8000/v1/completions"
API_KEY = "ваш_ключ"

headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {API_KEY}"
}

payload = {
    "model": "Qwen/Qwen2.5-7B-Instruct-GPTQ-Int4",
    "messages": [
        {
            "role": "user",
            "content": "Привет!"
        }
    ]
}

response = requests.post(API_URL, headers=headers, json=payload)
print(response.json()['choices'][0]['text'])

Этот простой скрипт можно легко интегрировать в веб-приложения, чат-боты или системы автоматизации.

Типичные проблемы и их решение при развертывании LLM

Недостаточно видеопамяти для загрузки модели

Самая частая проблема при работе с большими моделями. Решения:

  1. Используйте квантованные версии моделей: bash --model Qwen/Qwen2.5-14B-Instruct-AWQ

  2. Уменьшите параллелизм: bash --tensor-parallel-size 1

  3. Выберите модель меньшего размера — например, Qwen2.5-7B вместо 14B

Проблемы с загрузкой модели из HuggingFace

Если модель не загружается или выдает ошибки доступа:

  1. Проверьте правильность токена HUGGING_FACE_HUB_TOKEN
  2. Убедитесь, что у токена есть права на доступ к конкретной модели (особенно для gated-моделей)
  3. Попробуйте предварительно скачать модель на локальный компьютер, а затем скопировать на сервер: bash git lfs install git clone https://huggingface.co/Qwen/Qwen2.5-14B-Instruct scp -i ключ.pem -r Qwen2.5-14B-Instruct ubuntu@IP:/путь/к/моделям

Длительное время запуска контейнера

Первый запуск всегда дольше из-за: - Скачивания Docker-образа (~5 ГБ) - Загрузки модели (~27 ГБ для Qwen2.5-14B) - Компиляции ядер для конкретной архитектуры GPU

Решение: После первого успешного запуска сохраните состояние контейнера с помощью Docker commit:

docker commit my_vllm_container vllm-qwen25:preloaded

Затем используйте этот сохраненный образ для последующих запусков — это сократит время старта в 3-4 раза.

Заключение: следующие шаги и приглашение в сообщество

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

Рекомендации для дальнейшего развития

Чтобы сделать вашу LLM инфраструктуру еще более эффективной и безопасной:

  1. Настройте Nginx reverse proxy с SSL-сертификатом для безопасного доступа по HTTPS
  2. Реализуйте автоматическое масштабирование — запускайте дополнительные инстансы при высокой нагрузке
  3. Добавьте мониторинг через Prometheus и Grafana для отслеживания использования ресурсов
  4. Настройте автоматическое резервное копирование моделей и конфигураций

Приглашение в закрытое сообщество

Я приглашаю вас присоединиться к нашему закрытому клубу. В сообществе мы:

  • Делимся рабочими конфигурациями для разных моделей и задач
  • Помогаем решать сложные технические проблемы
  • Тестируем новые инструменты и методики до их массового распространения
  • Организуем онлайн встречи
  • Помогаем с написанием промптов

Чтобы получить приглашение в закрытый чат, перейдите в Telegram бота.

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

Смотреть видео на YouTube

Смотреть видео на RuTube

Авторизуйтесь, чтобы оставить комментарий.

Комментариев: 0

Нет комментариев.