feat: docker integration
This commit is contained in:
+29
@@ -0,0 +1,29 @@
|
|||||||
|
# Базовый образ среды выполнения PyTorch
|
||||||
|
FROM pytorch/pytorch:2.2.1-cuda12.1-cudnn8-runtime
|
||||||
|
|
||||||
|
# Конфигурация интерпретатора Python (отключение генерации байткода и буферизации вывода)
|
||||||
|
ENV PYTHONDONTWRITEBYTECODE=1
|
||||||
|
ENV PYTHONUNBUFFERED=1
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Системные библиотеки для низкоуровневой обработки изображений
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
libglib2.0-0 \
|
||||||
|
libsm6 \
|
||||||
|
libxext6 \
|
||||||
|
libxrender-dev \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Интеграция Python-зависимостей
|
||||||
|
COPY requirements.txt .
|
||||||
|
RUN pip install --no-cache-dir -r requirements.txt
|
||||||
|
|
||||||
|
# Модули программного комплекса
|
||||||
|
COPY src/ /app/src/
|
||||||
|
|
||||||
|
# Сетевой интерфейс UI
|
||||||
|
EXPOSE 8080
|
||||||
|
|
||||||
|
# Точка входа контейнера
|
||||||
|
CMD ["streamlit", "run", "src/main.py", "--server.port", "8080", "--server.address", "0.0.0.0"]
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
.PHONY: up down logs restart status
|
||||||
|
|
||||||
|
# Сборка и запуск контейнеров в фоновом режиме
|
||||||
|
up:
|
||||||
|
docker compose up --build -d
|
||||||
|
|
||||||
|
# Остановка и удаление контейнеров
|
||||||
|
down:
|
||||||
|
docker compose down
|
||||||
|
|
||||||
|
# Просмотр логов в реальном времени
|
||||||
|
logs:
|
||||||
|
docker compose logs -f
|
||||||
|
|
||||||
|
# Быстрый перезапуск
|
||||||
|
restart: down up
|
||||||
|
|
||||||
|
# Проверка статуса
|
||||||
|
status:
|
||||||
|
docker compose ps
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
# Определение общих сетей для изоляции трафика
|
||||||
|
networks:
|
||||||
|
ai_mesh:
|
||||||
|
driver: bridge
|
||||||
|
|
||||||
|
services:
|
||||||
|
# ----------------------------------------------------
|
||||||
|
# SERVICE 1: Frontend (Пользовательский интерфейс)
|
||||||
|
# Не требует GPU, может быть вынесен на отдельный сервер
|
||||||
|
# ----------------------------------------------------
|
||||||
|
web_ui:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
container_name: emom_frontend
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "8080:8080"
|
||||||
|
networks:
|
||||||
|
- ai_mesh
|
||||||
|
environment:
|
||||||
|
- STREAMLIT_RUN=1
|
||||||
|
# Указываем UI, где искать LLM-бэкенд (внутри Docker-сети)
|
||||||
|
- OLLAMA_HOST=http://llm_backend:11434
|
||||||
|
volumes:
|
||||||
|
- ./src:/app/src
|
||||||
|
# Модели пока остаются здесь, так как код монолитный,
|
||||||
|
# но архитектурно сервис уже изолирован
|
||||||
|
- /home/zin/projects/Thesis/src/emoset_resnet50_best.pth:/app/emoset_resnet50_best.pth:ro
|
||||||
|
- /home/zin/projects/Thesis/src/music_engine/va_regressor.pkl:/app/src/music_engine/va_regressor.pkl:ro
|
||||||
|
- /home/zin/projects/Thesis/dataset/DEAM:/app/dataset/DEAM:ro
|
||||||
|
# Временно оставляем GPU для PyTorch (пока он не вынесен в API)
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
reservations:
|
||||||
|
devices:
|
||||||
|
- driver: nvidia
|
||||||
|
count: 1
|
||||||
|
capabilities: [gpu]
|
||||||
|
|
||||||
|
# ----------------------------------------------------
|
||||||
|
# SERVICE 2: LLM Inference Backend (Ollama)
|
||||||
|
# Изолированный сервис для языковой модели на GPU
|
||||||
|
# ----------------------------------------------------
|
||||||
|
llm_backend:
|
||||||
|
image: ollama/ollama:latest
|
||||||
|
container_name: ollama_gpu_inference
|
||||||
|
restart: always
|
||||||
|
networks:
|
||||||
|
- ai_mesh
|
||||||
|
ports:
|
||||||
|
- "11434:11434"
|
||||||
|
volumes:
|
||||||
|
# Проброс локальных моделей Ollama, чтобы не качать их заново внутри докера
|
||||||
|
- ~/.ollama:/root/.ollama
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
reservations:
|
||||||
|
devices:
|
||||||
|
- driver: nvidia
|
||||||
|
count: 1
|
||||||
|
capabilities: [gpu]
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
streamlit==1.32.0
|
||||||
|
torch==2.2.1
|
||||||
|
torchvision==0.17.1
|
||||||
|
timm==0.9.16
|
||||||
|
pandas==2.2.1
|
||||||
|
scikit-learn==1.4.1.post1
|
||||||
|
joblib==1.3.2
|
||||||
|
transformers==4.38.2
|
||||||
|
requests==2.31.0
|
||||||
|
Before Width: | Height: | Size: 851 KiB After Width: | Height: | Size: 851 KiB |
@@ -0,0 +1,72 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Остановка скрипта при возникновении любой ошибки
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Цвета для красивого вывода в консоль
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
RED='\033[0;31m'
|
||||||
|
BLUE='\033[0;34m'
|
||||||
|
NC='\033[0m'
|
||||||
|
|
||||||
|
echo -e "${BLUE}[INFO]${NC} Инициализация проверки окружения для проекта EmoM..."
|
||||||
|
|
||||||
|
# 1. ПРОВЕРКА DOCKER
|
||||||
|
if ! command -v docker &> /dev/null; then
|
||||||
|
echo -e "${YELLOW}[SETUP]${NC} Docker не найден. Начинаем установку..."
|
||||||
|
# Использование официального скрипта установки Docker
|
||||||
|
curl -fsSL https://get.docker.com -o get-docker.sh
|
||||||
|
sudo sh get-docker.sh
|
||||||
|
rm get-docker.sh
|
||||||
|
|
||||||
|
# Добавляем текущего пользователя в группу docker, чтобы не писать sudo docker
|
||||||
|
sudo usermod -aG docker $USER
|
||||||
|
echo -e "${GREEN}[OK]${NC} Docker успешно установлен."
|
||||||
|
echo -e "${YELLOW}[ВНИМАНИЕ]${NC} Для применения прав группы docker потребуется перезайти в сессию SSH после завершения скрипта."
|
||||||
|
else
|
||||||
|
echo -e "${GREEN}[OK]${NC} Docker установлен ($(docker --version))."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 2. ПРОВЕРКА DOCKER COMPOSE
|
||||||
|
if ! docker compose version &> /dev/null; then
|
||||||
|
echo -e "${YELLOW}[SETUP]${NC} Плагин Docker Compose не найден. Устанавливаем..."
|
||||||
|
sudo apt-get update && sudo apt-get install -y docker-compose-plugin
|
||||||
|
echo -e "${GREEN}[OK]${NC} Docker Compose успешно установлен."
|
||||||
|
else
|
||||||
|
echo -e "${GREEN}[OK]${NC} Плагин Docker Compose доступен."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 3. ПРОВЕРКА NVIDIA И ПРОБРОСА GPU В DOCKER
|
||||||
|
if command -v nvidia-smi &> /dev/null; then
|
||||||
|
echo -e "${GREEN}[OK]${NC} Драйверы NVIDIA обнаружены."
|
||||||
|
|
||||||
|
# Проверяем наличие NVIDIA Container Toolkit
|
||||||
|
if ! dpkg -l | grep -q nvidia-container-toolkit; then
|
||||||
|
echo -e "${YELLOW}[SETUP]${NC} NVIDIA Container Toolkit не найден. Выполняется установка..."
|
||||||
|
|
||||||
|
# Настройка репозиториев NVIDIA
|
||||||
|
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
|
||||||
|
|
||||||
|
# Конфигурация Docker для работы с NVIDIA
|
||||||
|
echo -e "${YELLOW}[SETUP]${NC} Конфигурация runtime NVIDIA для Docker..."
|
||||||
|
sudo nvidia-ctk runtime configure --runtime=docker
|
||||||
|
sudo systemctl restart docker
|
||||||
|
|
||||||
|
echo -e "${GREEN}[OK]${NC} NVIDIA Container Toolkit установлен и настроен."
|
||||||
|
else
|
||||||
|
echo -e "${GREEN}[OK]${NC} NVIDIA Container Toolkit уже установлен."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -e "${RED}[WARN]${NC} Утилита nvidia-smi не найдена! Убедитесь, что драйверы видеокарты установлены, иначе Docker будет использовать только CPU."
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "\n${BLUE}[INFO]${NC} ========================================="
|
||||||
|
echo -e "${GREEN}[SUCCESS]${NC} Окружение готово к работе!"
|
||||||
|
echo -e "Теперь вы можете запустить проект командой: ${YELLOW}make up${NC}"
|
||||||
Reference in New Issue
Block a user