Запуск LLM сервера на отдельном сервере#
В данном разделе описывается настройка для запуска только LLM сервера на отдельном сервере, без остальных компонентов Sherpa AI Server.
Когда это нужно#
Запуск LLM сервера на отдельном сервере полезен когда:
- Нужно распределить нагрузку между серверами
- LLM сервер требует мощных GPU и его лучше вынести на отдельный сервер
- Требуется масштабирование - несколько LLM серверов для балансировки нагрузки
- Нужно изолировать LLM сервер от основного приложения
Требования#
- Сервер с GPU NVIDIA (CUDA 11.8+)
- Docker и Docker Compose установлены
- NVIDIA Container Toolkit установлен
- Модели LLM загружены в директорию
llm-server/models/
Настройка#
Шаг 1: Подготовка сервера#
Убедитесь, что на сервере установлены все необходимые компоненты
# Проверьте GPU
nvidia-smi
# Проверьте Docker
docker --version
docker compose version
Шаг 2: Подготовка файлов#
Скопируйте на сервер следующие файлы и директории:
# Необходимые файлы:
# - docker-compose.yml (или docker-compose.main.yml)
# - .env файл с настройками
# - llm-server/models/ - директория с моделями
# - llm-server/templates/ - директория с шаблонами (если используется)
Шаг 3: Комментирование ненужных сервисов#
Откройте файл docker-compose.yml и закомментируйте все сервисы кроме aiserver-llm-server.
Пример: Закомментированные сервисы
services:
# aiserver-pg:
# container_name: aiserver-pg
# image: aiserver-pg:latest
# ...
# aiserver-embed:
# container_name: aiserver-embed
# ...
# aiserver:
# container_name: aiserver
# ...
# Единственный активный сервис:
aiserver-llm-server:
container_name: aiserver-llm-server
image: aiserver-llm-server:latest
restart: always
env_file:
- .env
ports:
- 3003:8000
ipc: host
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [ gpu ]
volumes:
- "./llm-server/models:/model-store"
- "./llm-server/templates:/model-templates"
networks:
- llm-net
# aiserver-code_interpreter:
# ...
# aiserver-whisper:
# ...
# aiserver-bge_reranker:
# ...
Шаг 5: Настройка переменных окружения#
Создайте или отредактируйте файл .env с настройками LLM сервера:
# Настройки LLM сервера
LLM_CUDA_VISIBLE_DEVICES=0
LLM_TENSOR_PARALLEL_SIZE=1
LLM_GPU_MEMORY_UTILIZATION=0.90
LLM_COMPLETION_MODEL_NAME=/model-store/meta-llama/Meta-Llama-3-8B-Instruct
LLM_DTYPE=auto
LLM_TRUST_REMOTE_CODE=false
LLM_QUANTIZATION=false
LLM_MAX_MODEL_LEN=8192
LLM_HOST=0.0.0.0
LLM_PORT=8000
LLM_MAX_NUM_BATCHED_TOKENS=16384
LLM_MAX_NUM_SEQS=16
LLM_ENABLE_TOOLS=true
LLM_TOOL_CALL_PARSER=llama3_json
LLM_EXCLUDE_TOOLS_WHEN_NONE=true
Важно:
- Убедитесь что путь к модели правильный:
LLM_COMPLETION_MODEL_NAME=/model-store/название-модели
Шаг 6: Проверка конфигурации#
Перед запуском проверьте конфигурацию:
# Проверьте синтаксис docker-compose файла
docker compose -f docker-compose.yml config
# Проверьте что порт свободен
netstat -tuln | grep 3003
# Проверьте наличие модели
ls -la llm-server/models/
Шаг 7: Запуск LLM сервера#
# Запустите только LLM сервер
docker compose -f docker-compose.yml up -d aiserver-llm-server
# Или запустите все (но будут запущены только незакомментированные сервисы)
docker compose -f docker-compose.yml up -d
# Проверьте статус
docker compose -f docker-compose.yml ps
Ожидаемый результат: Должен запуститься только контейнер aiserver-llm-server.
Шаг 8: Проверка работы#
# Проверьте логи
docker logs aiserver-llm-server
# Проверьте использование GPU
nvidia-smi
# Проверьте доступность API (должен вернуть информацию о модели)
curl http://localhost:3003/v1/models
Ожидаемый результат:
- Контейнер должен успешно запуститься
- В логах не должно быть критических ошибок
- API должен отвечать на запросы
- GPU должна использоваться для загрузки модели
Подключение с другого сервера#
Если LLM сервер запущен на отдельном сервере, настройте подключение с основного сервера.
На основном сервере#
В файле .env основного сервера укажите адрес LLM сервера:
# Адрес LLM сервера (замените на IP или домен вашего LLM сервера)
LLM_SERVER_URL=http://192.168.1.100:3003
# или
LLM_SERVER_URL=http://llm-server.example.com:3003
Минимальная конфигурация docker-compose#
Пример минимального docker-compose.yml только для LLM сервера:
services:
aiserver-llm-server:
container_name: aiserver-llm-server
image: aiserver-llm-server:latest
restart: always
env_file:
- .env
ports:
- "3003:8000"
ipc: host
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [ gpu ]
volumes:
- "./llm-server/models:/model-store"
- "./llm-server/templates:/model-templates"
networks:
- llm-net
networks:
llm-net:
name: llm-net
driver: bridge
Сохраните этот файл как docker-compose.llm-only.yml и используйте:
docker compose -f docker-compose.llm-only.yml up -d
Возможные проблемы#
Контейнер не запускается#
Проблема: Контейнер падает сразу после запуска.
Решение:
- Проверьте логи:
docker logs aiserver-llm-server - Убедитесь что GPU доступна:
nvidia-smi - Проверьте что модель существует:
ls -la llm-server/models/ - Проверьте права доступа к директории моделей
Модель не загружается#
Проблема: Ошибки при загрузке модели.
Решение:
- Проверьте путь к модели в
.env:LLM_COMPLETION_MODEL_NAME - Убедитесь что модель загружена:
ls -la llm-server/models/ - Проверьте логи на ошибки загрузки:
docker logs aiserver-llm-server | grep -i error
Недостаточно памяти GPU#
Проблема: Модель не помещается в память GPU.
Решение:
- Уменьшите
LLM_GPU_MEMORY_UTILIZATIONв.env - Используйте квантованную версию модели (установите
LLM_QUANTIZATION=true) - Используйте модель меньшего размера
Порт недоступен извне#
Проблема: Не могу подключиться к LLM серверу с другого сервера.
Решение:
- Проверьте firewall:
sudo ufw status - Проверьте что порт проброшен:
docker port aiserver-llm-server - Проверьте сетевые настройки Docker
Мониторинг#
Для мониторинга работы LLM сервера:
# Статус контейнера
docker ps | grep llm-server
# Использование ресурсов
docker stats aiserver-llm-server
# Использование GPU
watch -n 1 nvidia-smi
# Логи в реальном времени
docker logs -f aiserver-llm-server
# Проверка API
curl http://localhost:3003/health
curl http://localhost:3003/v1/models
Оптимизация производительности#
Для оптимизации производительности LLM сервера:
Настройка памяти GPU:
LLM_GPU_MEMORY_UTILIZATION=0.90 # Используйте максимум доступной памятиНастройка батчинга:
LLM_MAX_NUM_BATCHED_TOKENS=16384 LLM_MAX_NUM_SEQS=16Использование квантования:
LLM_QUANTIZATION=true # Для моделей с поддержкой квантования
После выполнения всех шагов у вас должен быть запущен только LLM сервер на отдельном сервере, который можно использовать с основного сервера или других приложений через API на порту 3003.