Запуск двух LLM контейнеров одновременно

В данном разделе описывается настройка для запуска двух языковых моделей одновременно на одном сервере с несколькими GPU.

Когда это нужно

Запуск двух LLM контейнеров полезен когда:

  • У вас есть несколько GPU и вы хотите использовать их для разных моделей

  • Нужно запустить разные модели одновременно (например, одна для чата, другая для специализированных задач)

  • Требуется распределить нагрузку между несколькими моделями

Требования

  • Сервер с минимум 2 GPU NVIDIA

  • Каждая GPU должна иметь достаточно памяти для выбранной модели

  • Docker и Docker Compose установлены

  • NVIDIA Container Toolkit установлен

Настройка

Шаг 1: Проверка доступных GPU

Убедитесь, что у вас есть минимум 2 GPU:

nvidia-smi

Ожидаемый результат: Вы должны увидеть минимум 2 GPU в списке.

Шаг 2: Раскомментирование второго LLM контейнера

Откройте файл docker-compose.yml и найдите закомментированный блок aiserver-llm-server2 (примерно строки 103-142).

Раскомментируйте весь блок, убрав символы # в начале каждой строки:

Шаг 3: Настройка портов

Убедитесь, что порты не конфликтуют:

  • aiserver-llm-server (первый контейнер): порт 3003:8000

  • aiserver-llm-server2 (второй контейнер): порт должен быть другим, например 3006:8000 или 3007:8000

В закомментированном блоке проверьте строку:

Шаг 4: Настройка GPU для каждого контейнера

Важно настроить, какая GPU будет использоваться каждым контейнером.

Для первого контейнера (aiserver-llm-server)

Обычно использует GPU 0 (по умолчанию). Проверьте переменные окружения в .env файле или в самом docker-compose.yml:

Для второго контейнера (aiserver-llm-server2)

В раскомментированном блоке найдите строку:

Убедитесь, что значение соответствует номеру второй GPU (обычно 1 для второй GPU).

Шаг 5: Настройка моделей

Убедитесь, что каждая модель настроена правильно:

Первый контейнер (aiserver-llm-server)

Использует настройки из .env файла или значения по умолчанию. Проверьте переменную:

Второй контейнер (aiserver-llm-server2)

В раскомментированном блоке найдите строку:

Измените на нужную модель, если требуется другая.

Шаг 6: Проверка конфигурации

Перед запуском проверьте конфигурацию:

Шаг 7: Запуск контейнеров

Ожидаемый результат: Вы должны увидеть два контейнера:

  • aiserver-llm-server (порт 3003)

  • aiserver-llm-server2 (порт 3006)

Шаг 8: Проверка работы

Ожидаемый результат:

  • Оба контейнера должны успешно запуститься

  • В nvidia-smi должны быть видны процессы на разных GPU

  • Логи не должны содержать критических ошибок

Настройка переменных окружения

Если нужно изменить настройки второго контейнера, отредактируйте блок environment в docker-compose.yml:

Возможные проблемы

Контейнер не запускается

Проблема: Второй контейнер не запускается или падает с ошибкой.

Решение:

  1. Проверьте логи: docker logs aiserver-llm-server2

  2. Убедитесь что GPU доступна: nvidia-smi

  3. Проверьте что порт свободен: netstat -tuln | grep 3006

  4. Проверьте что модель существует: ls -la llm-server/models/

Конфликт портов

Проблема: Ошибка "port is already allocated".

Решение:

  • Измените порт второго контейнера на свободный (например, 3007:8000)

  • Или остановите сервис, занимающий порт

Недостаточно памяти GPU

Проблема: Модель не загружается, ошибки памяти.

Решение:

  • Уменьшите LLM_GPU_MEMORY_UTILIZATION (например, до 0.7)

  • Используйте модели меньшего размера

  • Освободите память на GPU, остановив другие процессы

Оба контейнера используют одну GPU

Проблема: Оба контейнера используют GPU 0 вместо разных GPU.

Решение:

  • Убедитесь что LLM_CUDA_VISIBLE_DEVICES установлена правильно для каждого контейнера

  • Проверьте что переменная не переопределяется в .env файле

  • Перезапустите контейнеры после изменения настроек

Пример полной конфигурации

Пример настройки двух контейнеров в docker-compose.yml:

Дополнительные настройки

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

Вы можете запустить разные модели в каждом контейнере:

Настройка памяти

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

Мониторинг

Для мониторинга работы обоих контейнеров:

Ожидаемый результат: Оба контейнера должны работать стабильно, используя разные GPU.

Last updated