软萌拆拆屋部署教程:Docker Compose多模型服务编排方案

想不想拥有一个能“看穿”衣服的魔法终端?今天要介绍的“软萌拆拆屋”,就是这样一个神奇的工具。它能把一件复杂的衣服,像拆开棉花糖一样,变成一张张整齐、治愈的零件布局图,专业又可爱。

对于开发者来说,部署和管理这样的AI应用,尤其是涉及多个模型(底座模型和LoRA模型)时,往往会遇到环境配置复杂、依赖冲突、资源管理麻烦等问题。本文将手把手教你,如何利用 Docker Compose 这个强大的工具,一键部署并优雅地编排“软萌拆拆屋”及其所需的多个模型服务,让你轻松拥有这个“服饰解构”魔法。

1. 项目概览:软萌拆拆屋是什么?

在开始部署之前,我们先快速了解一下我们要部署的是什么。

“软萌拆拆屋”是一个基于Web的AI图像生成应用。它的核心魔法是“服饰解构”:

  • 输入:一段对衣服的文字描述(例如:“一件带蝴蝶结的洛丽塔裙子”)。
  • 处理:应用结合了强大的Stable Diffusion XL(SDXL)基础模型和专门的“Nano-Banana”服饰拆解LoRA模型。
  • 输出:生成一张风格独特的“Knolling”式平铺拆解图,所有服装部件整齐排列在白色背景上,清晰又可爱。

它的界面设计也非常有特色,采用了马卡龙粉渐变、圆角卡片等“软萌”元素,让生成图片的过程充满乐趣。

为了实现这个功能,我们需要两个核心的AI模型文件:

  1. SDXL 1.0 Base模型:这是图像生成的“底座引擎”,负责理解你的描述并绘制基础图像。
  2. Nano-Banana LoRA模型:这是“拆解魔法卷轴”,它教会SDXL如何以特定的“平铺拆解”风格来绘制服装。

传统的部署方式需要你手动下载这两个大模型文件(每个可能好几GB),配置复杂的Python环境,解决版本依赖,过程繁琐且容易出错。而我们将使用Docker Compose,把这一切都打包成标准化的、可重复的部署流程。

2. 环境准备与快速部署

我们的目标是使用Docker Compose,通过一个简单的配置文件,一键启动所有服务。请确保你的系统已经安装了Docker和Docker Compose。

2.1 第一步:创建项目目录结构

首先,在你的电脑上找一个合适的位置,创建一个项目文件夹,并按照“软萌拆拆屋”要求的魔法阁结构来组织。

打开终端(Linux/macOS)或命令提示符/PowerShell(Windows),执行以下命令:

# 1. 创建一个名为 `soft-disassemble-house` 的项目目录
mkdir soft-disassemble-house
cd soft-disassemble-house

# 2. 创建模型存储目录,这对应了应用代码中硬编码的路径
mkdir -p ai-models/SDXL_Base
mkdir -p ai-models/Nano_Banana_LoRA

# 3. 创建应用代码目录(稍后我们会把应用文件放这里)
mkdir app

现在你的文件夹结构应该是这样的:

soft-disassemble-house/
├── ai-models/
│   ├── SDXL_Base/          # 用于存放SDXL基础模型
│   └── Nano_Banana_LoRA/   # 用于存放Nano-Banana LoRA模型
└── app/                    # 用于存放“软萌拆拆屋”的源代码

2.2 第二步:准备模型文件

这是最关键的一步。你需要手动下载两个模型文件,并放到正确的目录下。由于模型文件较大,通常从Hugging Face等平台下载。

  1. 下载 SDXL 1.0 Base 模型

    • 访问 Stability AI 的 SDXL 1.0 页面
    • 找到名为 sd_xl_base_1.0.safetensors 的文件并下载。
    • 将下载好的文件放入 soft-disassemble-house/ai-models/SDXL_Base/ 目录下。
    • 重要:根据“软萌拆拆屋”的代码,它期望在这个目录下找到一个名为 48.safetensors 的文件。因此,你需要将下载的 sd_xl_base_1.0.safetensors 重命名48.safetensors
    # 假设下载的文件在当前目录,移动并重命名
    mv /path/to/your/download/sd_xl_base_1.0.safetensors ./ai-models/SDXL_Base/48.safetensors
    
  2. 下载 Nano-Banana LoRA 模型

    • 访问 Nano-Banana LoRA 页面
    • 找到模型文件(通常是一个 .safetensors 文件)并下载。
    • 将下载好的文件放入 soft-disassemble-house/ai-models/Nano_Banana_LoRA/ 目录下。
    • 同样,根据代码要求,将其重命名为 20.safetensors
    # 移动并重命名LoRA文件
    mv /path/to/your/download/nano_banana_lora.safetensors ./ai-models/Nano_Banana_LoRA/20.safetensors
    

注意:模型文件很大(SDXL约7GB,LoRA约100MB),请确保你的磁盘空间充足,并耐心等待下载完成。

2.3 第三步:编写 Docker Compose 配置文件

在项目根目录 (soft-disassemble-house/) 下,创建一个名为 docker-compose.yml 的文件。这个文件定义了我们的整个服务栈。

将以下内容复制到 docker-compose.yml 中:

version: '3.8'

services:
  # 服务一:软萌拆拆屋 Web 应用
  soft-disassemble-app:
    # 使用包含PyTorch和CUDA的基础镜像,确保能运行Stable Diffusion
    image: pytorch/pytorch:2.1.0-cuda11.8-cudnn8-runtime
    container_name: soft-disassemble-house
    restart: unless-stopped
    ports:
      - “8501:8501” # 将容器的8501端口映射到主机的8501端口,Streamlit默认端口
    volumes:
      # 挂载两个模型目录到容器内,这样容器就能访问我们下载的模型了
      - ./ai-models:/root/ai-models
      # 挂载应用代码目录,便于开发和管理
      - ./app:/app
    working_dir: /app # 设置容器启动后的工作目录
    environment:
      - PYTHONUNBUFFERED=1
    # 容器启动后执行的命令:安装依赖并启动Streamlit应用
    command: >
      sh -c “pip install streamlit torchvision --index-url https://download.pytorch.org/whl/cu118 &&
             streamlit run app.py --server.port=8501 --server.address=0.0.0.0”
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu] # 声明需要GPU资源,如果只有CPU,请移除整个`deploy`部分

配置文件解读

  • services:定义了两个服务(这里只有一个主应用服务,模型通过卷挂载共享)。
  • volumes:这是关键!它将我们主机上的 ./ai-models./app 目录,分别映射到容器内的 /root/ai-models/app 目录。这样,容器里的应用就能直接读取我们下载好的模型文件了。
  • ports:将容器内的8501端口暴露给主机,我们通过访问 http://localhost:8501 来使用应用。
  • command:容器启动后,会自动安装必要的Python包,然后启动Streamlit应用。
  • deploy:这部分配置告诉Docker这个容器需要GPU。如果你在没有NVIDIA GPU的机器上运行,需要删除整个 deploy 部分,并且基础镜像可能需要换成CPU版本(如 pytorch/pytorch:2.1.0-cpu)。

2.4 第四步:获取应用代码

现在我们需要“软萌拆拆屋”的应用本体代码。根据输入描述,主文件是 app.py

  1. 将提供的 app.py 文件(包含所有软萌UI和SD逻辑的代码)复制到 soft-disassemble-house/app/ 目录下。
  2. 通常还需要一个 requirements.txt 来明确依赖,但我们在 docker-compose.ymlcommand 里已经直接安装了。为了更规范,你可以在 app 目录下也创建一个 requirements.txt,内容包含 streamlit, torch 等。

至此,所有文件准备完毕。最终的项目结构如下:

soft-disassemble-house/
├── docker-compose.yml       # 服务编排核心文件
├── ai-models/               # 模型仓库(已放入重命名后的模型文件)
│   ├── SDXL_Base/48.safetensors
│   └── Nano_Banana_LoRA/20.safetensors
└── app/                     # 应用代码
    ├── app.py              # 软萌拆拆屋主程序
    └── requirements.txt    # Python依赖列表(可选)

2.5 第五步:一键启动魔法屋

万事俱备,只差一个命令。在项目根目录 (soft-disassemble-house/) 下,运行:

docker-compose up -d

这个命令会:

  1. 拉取 pytorch 基础镜像(如果本地没有)。
  2. 根据 docker-compose.yml 的配置创建一个容器。
  3. 在容器内安装依赖。
  4. 启动 app.py 这个Streamlit应用。
  5. -d 参数表示在后台运行。

启动过程可能需要几分钟,特别是第一次运行需要下载基础镜像和安装包。你可以使用以下命令查看日志:

docker-compose logs -f

当看到日志中出现类似 “You can now view your Streamlit app in your browser.” 的提示时,说明应用已经成功启动。

3. 使用与验证:施展你的第一次拆解魔法

打开你的浏览器,访问 http://localhost:8501。你应该能看到那个充满马卡龙粉色调的“软萌拆拆屋”界面了。

现在,让我们来施展第一次魔法:

  1. 准备咒语:在“🌸 描述你想拆解的衣服”输入框中,输入一段描述。例如:一件带蝴蝶结的洛丽塔裙子,上面有草莓图案
  2. 调节口味(可选):你可以调整下方的“变身强度”、“甜度系数”等参数,感受不同设置对出图效果的影响。初次尝试可以先用默认值。
  3. 启动魔法:点击那个Q弹的 “✨ 变出拆解图!✨” 按钮。
  4. 等待与收获:系统会开始生成图片。第一次生成可能需要较长时间(1-3分钟),因为需要从硬盘加载模型到显存。请耐心等待。完成后,一幅精美的服饰拆解图就会呈现在你面前!

提示词技巧:你可以直接使用作者推荐的提示词,效果通常不错:

disassemble clothes, knolling, flat lay, a cute lolita dress with ribbons, strawberry patterns, clothing parts neatly arranged, exploded view, white background, masterpiece, best quality

4. 管理、维护与进阶配置

服务运行起来后,你还需要知道如何管理它。

4.1 常用管理命令

  • 停止服务docker-compose down
    • 这会停止并移除容器,但不会删除你的模型文件和应用代码(因为它们保存在主机上)。
  • 重启服务docker-compose restart
  • 查看服务状态docker-compose ps
  • 查看实时日志docker-compose logs -f
  • 进入容器内部(调试用)docker-compose exec soft-disassemble-app bash

4.2 如何更新应用或模型?

  • 更新应用代码:直接替换 app 目录下的文件(如 app.py),然后重启服务即可:docker-compose restart
  • 更新模型:替换 ai-models 目录下对应的模型文件,然后重启服务。Docker卷挂载保证了容器内能立即访问到新的文件。

4.3 针对无GPU环境的调整

如果你只有CPU,需要修改 docker-compose.yml

  1. image 换成CPU版本的PyTorch镜像,例如:pytorch/pytorch:2.1.0-cpu
  2. 删除整个 deploy: 资源配置块。
  3. 注意:在CPU上运行SDXL模型会非常慢,生成一张图可能需要10分钟甚至更久,主要用于测试或学习。

4.4 模型路径与多项目管理

本例中,模型路径 (/root/ai-models) 是硬编码在 app.py 中的。Docker Compose方案的美妙之处在于,你可以通过修改 volumes 映射,轻松地将模型放在宿主机的任何位置,甚至是一个所有AI项目共享的中央模型仓库。

例如,如果你所有AI项目的模型都放在 /data/ai-models/,你可以这样修改:

volumes:
  - /data/ai-models/SDXL_Base:/root/ai-models/SDXL_Base
  - /data/ai-models/Nano_Banana_LoRA:/root/ai-models/Nano_Banana_LoRA
  - ./app:/app

这样,多个不同的AI应用容器可以共享同一份模型文件,节省大量磁盘空间。

5. 总结

通过本教程,我们完成了一个从零开始,使用Docker Compose部署“软萌拆拆屋”的完整流程。我们来回顾一下关键步骤和优势:

核心步骤回顾

  1. 规划结构:创建清晰的项目目录,分离模型、代码和配置。
  2. 准备资源:手动下载并正确放置、重命名模型文件。
  3. 编写编排:用 docker-compose.yml 定义服务、挂载卷、配置端口和启动命令。
  4. 一键启动:通过 docker-compose up -d 实现自动化部署。

Docker Compose方案的优势

  • 环境隔离:所有依赖被封装在容器内,不会污染主机环境,也避免了“在我的机器上能跑”的问题。
  • 一键部署:复杂的安装、配置流程简化为一条命令,极大提升了部署效率和可重复性。
  • 易于管理:启动、停止、重启、查看日志都有统一命令,管理起来像管理一个系统服务一样简单。
  • 资源优化:通过卷挂载,可以实现模型文件的共享,避免重复存储。
  • 便于迁移:整个项目就是几个目录和一个YAML文件,可以轻松地在任何安装了Docker的机器上复现。

现在,你的“软萌拆拆屋”已经稳定运行。无论是用于有趣的创意生成,还是作为学习Docker和AI应用部署的案例,它都是一个很好的起点。你可以尝试修改提示词、调整参数,生成更多可爱又专业的服饰拆解图,享受AI带来的创作乐趣。


获取更多AI镜像

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

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐