影墨·今颜生产环境部署:Docker Compose编排多用户并发服务

1. 项目概述与环境准备

「影墨·今颜」是一款基于FLUX.1生成引擎的高端AI影像创作系统,专注于提供具有电影质感和东方美学的人像生成体验。在生产环境中部署时,我们需要确保系统能够稳定处理多用户并发请求,同时保持高质量的图像生成效果。

1.1 系统架构概览

生产环境部署采用微服务架构,主要包含以下组件:

  • Web应用服务:处理用户请求和界面交互
  • AI推理服务:运行FLUX.1模型进行图像生成
  • Redis缓存:管理用户会话和任务队列
  • Nginx反向代理:负载均衡和静态资源服务
  • 监控服务:系统性能监控和日志收集

1.2 硬件和软件要求

最低硬件配置

  • GPU:NVIDIA RTX 4090 24GB 或同等级专业显卡
  • 内存:32GB DDR4
  • 存储:100GB SSD空间
  • CPU:8核心以上

软件依赖

  • Docker 20.10+
  • Docker Compose 2.0+
  • NVIDIA Container Toolkit
  • Ubuntu 20.04+ 或 CentOS 8+

2. Docker Compose编排配置

2.1 基础环境配置

创建docker-compose.yml文件,定义整个服务栈:

version: '3.8'

services:
  # Web应用服务
  webapp:
    build: ./webapp
    ports:
      - "8000:8000"
    environment:
      - REDIS_HOST=redis
      - MODEL_SERVICE_HOST=inference
      - MAX_WORKERS=4
    depends_on:
      - redis
      - inference
    deploy:
      replicas: 2
    networks:
      - ymjy-network

  # AI推理服务
  inference:
    build: ./inference
    environment:
      - DEVICE=cuda
      - MODEL_PRECISION=bf16
      - MAX_CONCURRENT=2
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]
    networks:
      - ymjy-network

  # Redis缓存服务
  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data
    command: redis-server --appendonly yes --maxmemory 2gb --maxmemory-policy allkeys-lru
    networks:
      - ymjy-network

  # Nginx负载均衡
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./ssl:/etc/ssl/certs
    depends_on:
      - webapp
    networks:
      - ymjy-network

volumes:
  redis_data:

networks:
  ymjy-network:
    driver: bridge

2.2 推理服务配置

创建推理服务的Dockerfile,优化FLUX.1模型性能:

FROM nvidia/cuda:12.2.0-runtime-ubuntu22.04

# 安装系统依赖
RUN apt-get update && apt-get install -y \
    python3.10 \
    python3-pip \
    libgl1 \
    libglib2.0-0 \
    && rm -rf /var/lib/apt/lists/*

# 设置工作目录
WORKDIR /app

# 复制依赖文件
COPY requirements.txt .

# 安装Python依赖
RUN pip install --no-cache-dir -r requirements.txt

# 复制应用代码
COPY . .

# 下载模型权重(生产环境建议预先下载)
RUN python download_models.py

# 启动服务
CMD ["python", "inference_server.py", "--host", "0.0.0.0", "--port", "5000"]

3. 多用户并发处理策略

3.1 任务队列管理

使用Redis实现任务队列,确保公平的资源分配:

import redis
import json
import uuid

class TaskQueue:
    def __init__(self, redis_host='redis', redis_port=6379):
        self.redis = redis.Redis(host=redis_host, port=redis_port, db=0)
        self.queue_key = 'ymjy_task_queue'
    
    def add_task(self, prompt_data):
        """添加生成任务到队列"""
        task_id = str(uuid.uuid4())
        task_data = {
            'id': task_id,
            'prompt': prompt_data['prompt'],
            'style_strength': prompt_data.get('style_strength', 7),
            'ratio': prompt_data.get('ratio', '9:16'),
            'user_id': prompt_data.get('user_id', 'anonymous')
        }
        
        # 将任务加入队列
        self.redis.rpush(self.queue_key, json.dumps(task_data))
        return task_id
    
    def get_task(self):
        """从队列获取任务"""
        task_data = self.redis.lpop(self.queue_key)
        if task_data:
            return json.loads(task_data)
        return None
    
    def get_queue_length(self):
        """获取队列长度"""
        return self.redis.llen(self.queue_key)

3.2 并发控制机制

实现基于信号量的并发控制,防止GPU过载:

import threading
import time

class ConcurrentController:
    def __init__(self, max_concurrent=2):
        self.semaphore = threading.Semaphore(max_concurrent)
        self.active_tasks = {}
    
    def acquire_slot(self, task_id):
        """获取执行槽位"""
        acquired = self.semaphore.acquire(blocking=False)
        if acquired:
            self.active_tasks[task_id] = time.time()
        return acquired
    
    def release_slot(self, task_id):
        """释放执行槽位"""
        if task_id in self.active_tasks:
            del self.active_tasks[task_id]
            self.semaphore.release()
    
    def get_active_count(self):
        """获取当前活跃任务数"""
        return len(self.active_tasks)

4. 性能优化与监控

4.1 GPU资源优化

配置NVIDIA容器工具包,确保GPU资源合理分配:

# 安装NVIDIA Container Toolkit
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker

4.2 监控配置

添加Prometheus和Grafana监控服务到docker-compose:

# 在docker-compose.yml中添加监控服务
monitoring:
  image: prom/prometheus:latest
  ports:
    - "9090:9090"
  volumes:
    - ./prometheus.yml:/etc/prometheus/prometheus.yml
    - prometheus_data:/prometheus
  networks:
    - ymjy-network

grafana:
  image: grafana/grafana:latest
  ports:
    - "3000:3000"
  environment:
    - GF_SECURITY_ADMIN_PASSWORD=admin123
  volumes:
    - grafana_data:/var/lib/grafana
  depends_on:
    - monitoring
  networks:
    - ymjy-network

volumes:
  prometheus_data:
  grafana_data:

4.3 性能监控指标

创建监控仪表板,跟踪关键性能指标:

# prometheus.yml 配置
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'ymjy-services'
    static_configs:
      - targets: ['webapp:8000', 'inference:5000']
  
  - job_name: 'redis'
    static_configs:
      - targets: ['redis:6379']
  
  - job_name: 'node'
    static_configs:
      - targets: ['node-exporter:9100']

5. 部署与运维实践

5.1 一键部署脚本

创建部署脚本,简化生产环境部署:

#!/bin/bash
# deploy.sh

echo "开始部署影墨·今颜生产环境..."

# 检查Docker和Docker Compose
if ! command -v docker &> /dev/null; then
    echo "错误: Docker未安装"
    exit 1
fi

if ! command -v docker-compose &> /dev/null; then
    echo "错误: Docker Compose未安装"
    exit 1
fi

# 创建必要的目录
mkdir -p logs/nginx logs/app logs/inference
mkdir -p ssl config

# 构建和启动服务
echo "构建Docker镜像..."
docker-compose build

echo "启动服务..."
docker-compose up -d

echo "等待服务启动..."
sleep 30

# 检查服务状态
echo "服务状态检查:"
docker-compose ps

echo "部署完成!"
echo "Web服务: http://服务器IP"
echo "监控面板: http://服务器IP:3000"

5.2 日常运维命令

提供常用的运维操作命令:

# 查看服务日志
docker-compose logs -f webapp
docker-compose logs -f inference

# 监控GPU使用情况
watch -n 1 nvidia-smi

# 扩展Web服务实例
docker-compose up -d --scale webapp=3

# 执行数据库备份
docker-compose exec redis redis-cli save

# 更新服务(代码更新后)
docker-compose build webapp
docker-compose up -d --no-deps webapp

5.3 健康检查配置

在Docker Compose中添加健康检查:

services:
  webapp:
    # ... 其他配置
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

  inference:
    # ... 其他配置
    healthcheck:
      test: ["CMD", "python", "-c", "import requests; requests.get('http://localhost:5000/health')"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 60s

  redis:
    # ... 其他配置
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 30s
      timeout: 10s
      retries: 3

6. 总结

通过Docker Compose编排部署「影墨·今颜」生产环境,我们实现了:

架构优势

  • 容器化部署确保环境一致性
  • 微服务架构支持水平扩展
  • 资源隔离保证服务稳定性

性能优化

  • 智能任务队列管理多用户请求
  • GPU资源合理分配避免过载
  • 监控系统实时追踪性能指标

运维便利

  • 一键部署脚本简化安装过程
  • 健康检查自动监控服务状态
  • 日志集中管理便于故障排查

这种部署方案能够支持中小规模的生产环境需求, typically可处理20-30个并发用户请求,具体性能取决于硬件配置和模型优化程度。对于更大规模的部署,可以考虑引入Kubernetes进行集群管理。

实际部署时,建议根据具体硬件配置调整docker-compose中的资源限制参数,特别是GPU内存和系统内存的分配,以达到最佳的性能表现。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐