一键解锁本地AI超能力!Docker + Ubuntu 极速部署 Stable Diffusion WebUI 绘画平台(NVIDIA GPU 加速超详解)

相信不少兄弟都想在自己的服务器或者本地机器上跑一些有趣的WebUI应用,比如最近火到不行的AI绘画工具Stable Diffusion WebUI。但是,传统部署方式那一套环境配置、依赖安装、版本冲突,简直能把人折磨疯!“在我这儿明明好好的,怎么到服务器上就不行了?”这种灵魂拷问,咱都懂。

所以,今天的主角就是Docker!这玩意儿简单来说,就是个集装箱,能把你的应用程序和它所需要的所有环境(比如特定版本的Python、各种库文件等)一股脑儿打包起来。这样一来,无论你把这个“集装箱”搬到哪里(别的服务器、你的笔记本),里面的应用都能保证一个姿势运行,完美解决环境一致性问题。对于咱们要部署的Stable Diffusion WebUI(以AUTOMATIC1111版本为例,这是目前最流行、功能最全的社区版本之一),它是一个基于Web的用户界面,让你可以通过浏览器直观地与Stable Diffusion模型互动,输入文本提示词(Prompt)就能生成各种风格的图片。这东西对Python版本、CUDA版本、PyTorch版本以及一大堆依赖库都有特定要求,手动配起来,那叫一个酸爽。

废话不多说,今天咱就用Docker这把瑞士军刀,在Ubuntu系统下,利索地把Stable Diffusion WebUI给它安排得明明白白,而且还要用上NVIDIA的GPU来给它加速,让出图速度嗖嗖的!

一、战前准备:检查你的“弹药库”(环境要求)

在咱们撸起袖子加油干之前,先确保你的Ubuntu服务器(或者带Ubuntu的个人电脑)满足以下基本条件:

  1. 一个能打的Ubuntu系统: 推荐Ubuntu 20.04 LTS或Ubuntu 22.04 LTS。老版本可能有些坑。
  2. 一块给力的NVIDIA显卡: AI绘画可是个吃显存的家伙,没有N卡,或者N卡太老(比如GTX 9系以下),体验会比较差。至少也得有个6GB显存吧,8GB以上更佳。
  3. NVIDIA显卡驱动已正确安装: 这是让Docker能使唤你显卡的前提。你可以通过 nvidia-smi 命令来检查驱动是否正常工作。如果没装,赶紧去NVIDIA官网找对应你显卡型号的最新驱动装上。
  4. 足够的磁盘空间: Docker镜像、模型文件(一个模型动辄几个G)、生成的图片,这些都会占用不少空间。建议至少留个50GB以上的空闲空间,多多益善。
  5. 一颗爱折腾的心和稳定的网络: 毕竟要下载不少东西。

二、核心步骤:Docker化部署Stable Diffusion WebUI

步骤1:更新你的Ubuntu系统包列表

养成好习惯,开搞前先更新一波:

sudo apt update && sudo apt upgrade -y

这条命令的意思是:

  • sudo: 以超级用户权限执行命令。
  • apt update: 从软件源更新可用的软件包列表。
  • &&: 逻辑与操作符,表示前一个命令成功执行后,再执行后一个命令。
  • apt upgrade -y: 升级所有已安装的软件包到最新版本,-y 参数表示自动确认所有提示。
步骤2:安装Docker引擎 (Docker Engine)

如果你的系统上还没有Docker,或者有很老的版本,咱们先来装个新的。

  1. 卸载旧版本(如果存在):

    sudo apt-get remove docker docker-engine docker.io containerd runc
    
  2. 设置Docker的APT软件源:

    sudo apt-get update
    sudo apt-get install \
        ca-certificates \
        curl \
        gnupg \
        lsb-release -y
    

    这些是添加新的HTTPS软件源所必需的包。

  3. 添加Docker的官方GPG密钥:

bash sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

这步是为了验证后续下载的Docker软件包的真实性。
  1. 设置稳定版Docker软件源:

    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
      $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    

    这条命令会根据你的系统架构(比如amd64)和Ubuntu版本代号(比如jammy, focal)来配置正确的Docker软件源。

  2. 安装Docker引擎、CLI和Containerd:

    sudo apt-get update
    sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
    
    • docker-ce: Docker Community Edition,社区版引擎。
    • docker-ce-cli: Docker命令行界面工具。
    • containerd.io: 一个核心的容器运行时。
    • docker-compose-plugin: 新版Docker Compose的插件形式(老版本是docker-compose独立二进制)。
  3. 验证Docker是否安装成功:

    sudo docker run hello-world
    

    如果看到 "Hello from Docker!" 的信息,那就说明Docker已经成功安装并运行了。

  4. (可选但强烈推荐) 将当前用户添加到docker用户组: 这样你以后执行docker命令就不用每次都加sudo了,省事儿!

    sudo usermod -aG docker $USER
    

    执行完这条命令后,你需要退出当前终端会话(或者直接重启下系统)并重新登录,这样用户组的更改才会生效。之后你就可以直接用 docker version 这样的命令了。

步骤3:安装NVIDIA Container Toolkit (让Docker认识你的N卡)

为了让Docker容器能用上宿主机的NVIDIA GPU,我们需要安装NVIDIA Container Toolkit。

  1. 设置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
    

    这两条命令是组合起来的,第一条获取GPG密钥,第二条添加软件源信息并指定使用该密钥。

  2. 更新包列表并安装NVIDIA Docker工具包

    sudo apt-get update
    sudo apt-get install -y nvidia-container-toolkit
    

    旧版本可能叫nvidia-docker2,现在统一为nvidia-container-toolkit

  3. 配置Docker运行时并重启Docker服务: 通常安装工具包后会自动配置,但为了保险,可以手动执行(或者检查)并重启。

    sudo nvidia-ctk runtime configure --runtime=docker
    sudo systemctl restart docker
    

    nvidia-ctk runtime configure --runtime=docker 会确保Docker的 daemon.json 文件中正确设置了NVIDIA运行时。

  4. 测试NVIDIA Docker是否工作正常:

    docker run --rm --gpus all nvidia/cuda:12.1.0-base-ubuntu22.04 nvidia-smi
    
    • --rm: 容器退出后自动删除。
    • --gpus all: 把宿主机所有可用的NVIDIA GPU都分配给这个容器。
    • nvidia/cuda:12.1.0-base-ubuntu22.04: 这是一个NVIDIA官方提供的包含CUDA环境的Docker基础镜像。你可以根据你的驱动和需求选择合适的CUDA版本和基础系统版本。如果你的驱动比较老,可能需要用旧一点的CUDA镜像,比如nvidia/cuda:11.8.0-base-ubuntu20.04
    • nvidia-smi: 在容器内执行nvidia-smi命令。

    如果这条命令成功运行,并且输出了和你宿主机上执行nvidia-smi类似的显卡信息,那么恭喜你,Docker已经可以愉快地使用你的NVIDIA GPU了!

步骤4:准备Stable Diffusion WebUI的持久化数据目录

为了让我们的模型、配置、生成的图片等数据在Docker容器重启甚至删除后依然存在,我们需要把这些数据存储在宿主机上,然后映射到容器里。

在你的用户主目录下(或者其他你喜欢的地方)创建一些文件夹:

mkdir -p ~/stable-diffusion-webui/data
mkdir -p ~/stable-diffusion-webui/models/Stable-diffusion
mkdir -p ~/stable-diffusion-webui/models/VAE
mkdir -p ~/stable-diffusion-webui/models/Lora
mkdir -p ~/stable-diffusion-webui/models/ControlNet
mkdir -p ~/stable-diffusion-webui/models/ESRGAN # 用于超分模型
mkdir -p ~/stable-diffusion-webui/outputs
mkdir -p ~/stable-diffusion-webui/config
mkdir -p ~/stable-diffusion-webui/extensions
  • mkdir -p: -p参数确保如果父目录不存在也会一并创建。
  • ~/stable-diffusion-webui/data: 可以用来存放一些通用的数据。
  • ~/stable-diffusion-webui/models/...: 分门别类存放你的主模型(checkpoints)、VAE、Lora、ControlNet模型、超分模型等。
  • ~/stable-diffusion-webui/outputs: 所有生成的图片、网格图等都会默认保存在这里。
  • ~/stable-diffusion-webui/config: 存放WebUI的配置文件,如config.json, ui-config.json
  • ~/stable-diffusion-webui/extensions: 存放你安装的各种WebUI扩展。

你可以根据自己的需求调整目录结构。记住这些你创建的宿主机路径,后面Docker命令或Compose文件里会用到。

步骤5:选择并拉取一个Stable Diffusion WebUI的Docker镜像

社区里有很多大佬打包好了Stable Diffusion WebUI的Docker镜像,我们可以直接用。在Docker Hub上搜索"stable diffusion webui gpu"之类的关键词,你会找到不少选择。一些流行的镜像,比如 AUTOMATIC1111/stable-diffusion-webui (官方可能没有直接提供Docker,但社区有很多基于它的)或者一些第三方维护的比如 hlky/sd-webui (这个比较老了,找更新的)、continueai/continue-stable-diffusion 等等。

这里我们假设使用一个常见的社区镜像,比如 someuser/stable-diffusion-webui-docker:latest-cuda (请替换为你实际找到并选择的镜像名)。

拉取镜像:

docker pull someuser/stable-diffusion-webui-docker:latest-cuda

请将 someuser/stable-diffusion-webui-docker:latest-cuda 替换成你选择的实际镜像名称和标签。标签通常会指明CUDA版本或GPU支持,比如 cu118 (CUDA 11.8), cu121 (CUDA 12.1)等,确保它和你上一步测试 nvidia-smi 时所用的CUDA版本兼容或接近。

步骤6:运行Stable Diffusion WebUI容器

这是最关键的一步。我们可以用 docker run 命令,也可以用 docker-compose.yml 文件来管理。对于参数比较多的应用,强烈推荐后者。

方法一:使用 docker run 命令

docker run -d --name sd-webui \
  --gpus all \
  -p 7860:7860 \
  -v ~/stable-diffusion-webui/data:/data \
  -v ~/stable-diffusion-webui/models:/app/models \
  -v ~/stable-diffusion-webui/outputs:/app/outputs \
  -v ~/stable-diffusion-webui/config:/app/config \
  -v ~/stable-diffusion-webui/extensions:/app/extensions \
  -e CLI_ARGS="--xformers --enable-insecure-extension-access --listen --port 7860" \
  someuser/stable-diffusion-webui-docker:latest-cuda

参数详解:

  • docker run: 运行一个新容器。
  • -d: 后台运行容器 (detached mode)。
  • --name sd-webui: 给容器取个名字,方便管理,比如叫sd-webui
  • --gpus all: 将所有可用的NVIDIA GPU分配给容器。
  • -p 7860:7860: 端口映射。将宿主机的7860端口映射到容器的7860端口(这是Stable Diffusion WebUI的默认端口)。如果你宿主机的7860端口被占用了,可以改成比如 -p 8888:7860,那么你访问时就用 http://你的IP:8888
  • -v HOST_PATH:CONTAINER_PATH: 卷映射 (Volume mounting)。
    • ~/stable-diffusion-webui/data:/data: 将宿主机的 ~/stable-diffusion-webui/data 目录映射到容器内的 /data 目录 (具体容器内路径可能因镜像而异,请参考你所用镜像的文档)。
    • ~/stable-diffusion-webui/models:/app/models: 将宿主机的模型目录映射到容器内WebUI读取模型的路径 (通常是 /app/models/stable-diffusion-webui/models,具体看镜像打包结构)。
    • ~/stable-diffusion-webui/outputs:/app/outputs: 输出目录。
    • ~/stable-diffusion-webui/config:/app/config: 配置文件目录。
    • ~/stable-diffusion-webui/extensions:/app/extensions: 扩展目录。 注意: 容器内的路径 (/data, /app/models 等) 需要根据你选择的Docker镜像的实际文件结构来定,务必查阅该镜像的说明文档。
  • -e CLI_ARGS="--xformers --enable-insecure-extension-access --listen --port 7860": 设置环境变量 CLI_ARGS。这个变量会被传递给WebUI的启动脚本作为命令行参数。
    • --xformers: 启用xformers库,可以显著提升NVIDIA显卡的生图速度并降低显存消耗(需要你的显卡支持,并且镜像内已安装)。
    • --enable-insecure-extension-access: 允许从WebUI界面安装第三方扩展(请注意安全风险,只安装信任的扩展)。
    • --listen: 让WebUI监听所有网络接口(0.0.0.0),这样局域网内其他机器也能通过服务器IP访问。如果只想本机访问,可以去掉这个参数或改为 --listen --share (会生成一个gradio的公网分享链接,但不推荐长期使用)。
    • --port 7860: 指定WebUI在容器内监听的端口。
  • someuser/stable-diffusion-webui-docker:latest-cuda: 你要运行的Docker镜像名称和标签。

方法二:使用 docker-compose.yml 文件 (推荐)

在你的 ~/stable-diffusion-webui 目录下创建一个名为 docker-compose.yml 的文件,内容如下:

version: '3.8'

services:
  stable-diffusion-webui:
    image: someuser/stable-diffusion-webui-docker:latest-cuda # 替换成你的镜像
    container_name: sd-webui
    ports:
      - "7860:7860"
    volumes:
      - ./data:/data  # 假设容器内WebUI的数据根目录是/data
      - ./models:/app/models # 假设容器内WebUI的模型根目录是/app/models
      - ./outputs:/app/outputs
      - ./config:/app/config
      - ./extensions:/app/extensions
      # 如果需要更细致的映射,可以像下面这样:
      # - ./models/Stable-diffusion:/app/models/Stable-diffusion
      # - ./models/VAE:/app/models/VAE
      # - ./models/Lora:/app/models/Lora
    environment:
      - CLI_ARGS=--xformers --enable-insecure-extension-access --listen --port 7860
      # - TZ=Asia/Shanghai # 可选:设置时区
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all # 或者指定 capabilities: [gpu]
              capabilities: [gpu]
    restart: unless-stopped

配置文件详解:

  • version: '3.8': 指定Compose文件格式版本。
  • services: 定义服务。
    • stable-diffusion-webui: 服务名,可以自定义。
    • image: 使用的Docker镜像。
    • container_name: 容器名。
    • ports: 端口映射,格式同 docker run -p
    • volumes: 卷映射。这里使用了相对路径 ./data,它相对于 docker-compose.yml 文件所在的目录。
    • environment: 环境变量,同 docker run -e
    • deploy.resources.reservations.devices: 这是Docker Compose v2.1+ 版本中声明GPU资源的方式,确保容器能使用NVIDIA GPU。
    • restart: unless-stopped: 定义重启策略。unless-stopped 表示除非手动停止,否则容器总会自动重启(比如Docker服务重启或宿主机重启后)。

然后在 docker-compose.yml 文件所在的目录 (~/stable-diffusion-webui) 执行:

docker-compose up -d
  • docker-compose up: 创建并启动服务。
  • -d: 后台运行。

第一次启动时,WebUI可能会下载一些基础模型或依赖,需要耐心等待。你可以通过以下命令查看容器日志:

docker logs -f sd-webui

(-f 参数表示持续跟踪日志输出,按 Ctrl+C 退出跟踪)

当你在日志中看到类似 "Running on local URL: http://0.0.0.0:7860" 或 "Uvicorn running on http://0.0.0.0:7860" 的信息时,就表示WebUI已经成功启动了!

步骤7:访问你的Stable Diffusion WebUI

打开你的浏览器,输入 http://你的服务器IP地址:7860 (如果修改了宿主机端口,则使用修改后的端口)。如果一切顺利,你应该能看到Stable Diffusion WebUI的界面了!

现在,你可以去网上下载你喜欢的模型文件(.ckpt 或 .safetensors 后缀),放到之前创建的宿主机 ~/stable-diffusion-webui/models/Stable-diffusion 目录下,然后在WebUI界面的左上角刷新模型列表,选择模型,输入你的奇思妙想,开始AI创作之旅吧!

三、后续维护与小技巧

  1. 停止与启动:

    • 如果用docker run启动的: 
      docker stop sd-webui
      docker start sd-webui
      
    • 如果用docker-compose启动的: 在docker-compose.yml所在目录执行
      docker-compose stop
      docker-compose start
      
      或者直接 docker-compose down (停止并移除容器,但不删除卷) 和 docker-compose up -d (重新创建并启动)。
  2. 更新WebUI镜像: 当你想更新到最新版的WebUI时(假设镜像维护者发布了新版本):

    # 对于 docker run 用户
    docker stop sd-webui
    docker rm sd-webui # 先删除旧容器
    docker pull someuser/stable-diffusion-webui-docker:latest-cuda # 拉取新镜像
    # 然后重新执行之前的 docker run 命令
    
    # 对于 docker-compose 用户
    cd ~/stable-diffusion-webui
    docker-compose pull # 拉取配置文件中指定镜像的最新版本
    docker-compose down # 停止并移除旧容器
    docker-compose up -d # 使用新镜像重新创建并启动容器
    
  3. 查看日志:

    docker logs sd-webui # 查看全部日志
    docker logs -f sd-webui # 实时跟踪日志
    docker logs --tail 100 sd-webui # 查看最后100行日志
    
  4. 进入容器内部(调试用):

    docker exec -it sd-webui /bin/bash
    

    这样你就可以进入容器的命令行环境,进行一些排错或检查。

四、总结

通过Docker部署Stable Diffusion WebUI,咱们不仅大大简化了安装配置流程,还能享受到环境隔离、轻松迁移、便捷更新等诸多好处。特别是对于NVIDIA GPU的利用,NVIDIA Container Toolkit 和 Docker 的结合使得这一切都变得相对简单。

希望这篇“保姆级”教程能帮到各位想玩AI绘画但又被环境劝退的兄弟们。现在,你已经拥有了一个属于自己的、跑在Docker里的、由NVIDIA GPU加速的AI绘画平台了!赶紧去生成一些令人惊艳的作品

要在CentOS 7上部署stable-diffusion-webuiNVIDIA GPU,首先需要确保您的系统满足以下要求: 1. 确保您的计算机上已经安装了合适版本的CentOS 7操作系统,可以通过官方渠道下载并安装。 2. 确保您的计算机上具备NVIDIA GPU,并安装了NVIDIA的驱动程序。您可以从NVIDIA的官方网站下载并安装适合您GPU型号和CentOS版本的驱动程序。 接下来,您可以按照以下步骤进行stable-diffusion-webui部署: 1. 安装Docker:在CentOS 7上安装Docker以便运行容器化应用程序。您可以使用以下命令安装Docker: ``` sudo yum install docker ``` 2. 启动Docker服务并将其设置为开机自启动: ``` sudo systemctl start docker sudo systemctl enable docker ``` 3. 下载并运行stable-diffusion-webui容器: ``` sudo docker run -e GPU_INDEX=0 -p 80:80 diffusionai/stable-diffusion-webui ``` - 通过"GPU_INDEX=0"参数指定使用的GPU索引,如果您有多个GPU,可以根据需要进行调整。 - 使用"-p 80:80"参数将容器的80端口映射到主机的80端口,使得Web界面可以通过主机的IP地址进行访问。 4. 这样,您就成功地将stable-diffusion-webui部署在CentOS 7上了。现在,您可以在任意浏览器中访问http://您的主机IP地址,即可使用stable-diffusion-webui进行图像处理和分析。 请注意,上述步骤假设您已经正确地安装了操作系统和GPU驱动程序,并且系统中只有一个NVIDIA GPU可用。如果您遇到任何问题,建议参考各种文档和安装指南,或者咨询相关领域的专业人士。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值