简介

Stable diffusion是一个基于Latent Diffusion Models(潜在扩散模型,LDMs)的文图生成(text-to-image)模型

docker是一个用Go语言实现的开源项目,可以让我们方便的创建和使用容器,docker将程序以及程序所有的依赖都打包到docker container,这样你的程序可以在任何环境都会有一致的表现,这里程序运行的依赖也就是容器就好比集装箱,容器所处的操作系统环境就好比货船或港口,程序的表现只和集装箱有关系(容器),和集装箱放在哪个货船或者哪个港口(操作系统)没有关系。

部署

默认目标服务器上安装好了docker与cuda

拉取镜像

这里我采用的是最原始的conda镜像,拉取命令为

1
docker pull continuumio/anaconda3

若不想从头开始配置pytorch,可以拉去我自己常用的镜像,拉取命令为

1
docker pull relucy/relucybase:v1

查看自己服务器上是否有anaconda镜像

1
docker images

alt

在物理机服务器工作区域,新建文件夹,我这边的名字为aigc

1
2
mkdir aigc
ls

alt

构建基于anaconda镜像,构建容器,我这边容器的名字为aigc
alt

1
2
3
4
5
6
7
8
9
docker run -i -t -d --gpus all --restart=unless-stopped \
-v /etc/timezone:/etc/timezone \
-v /etc/localtime:/etc/localtime \
-v /home/czq/aigc:/data/aigc \
-p 3022:22 \
-p 3060:7860 \
-e NVIDIA_DRIVER_CAPABILITIES=compute,utility \
-e NVIDIA_VISIBLE_DEVICES=all \
--name aigc continuumio/anaconda3:latest

逐个解释每个参数和选项:

  • -i:保证即使在没有附加到容器的情况下,也保持输入流打开。
  • -t:为容器分配一个虚拟终端。
  • -d:在后台模式下运行容器。
  • --gpus all:使容器可以访问所有可用的GPU资源。
  • --restart=unless-stopped:在容器退出时自动重新启动容器,除非显式停止。
  • -v /etc/timezone:/etc/timezone:将主机系统的时区文件映射到容器中。
  • -v /etc/localtime:/etc/localtime:将主机系统的当前时间映射到容器中。
  • -v /home/czq/aigc:/data/aigc:将主机中的”/home/czq/aigc”目录映射到容器中的”/data/aigc”目录。
  • -p 3022:22:将主机的3022端口映射到容器的22端口(用于SSH访问)。
  • -p 3060:7860:将主机的3060端口映射到容器的7860端口。
  • -e NVIDIA_DRIVER_CAPABILITIES=compute,utility:设置容器可以使用NVIDIA GPU的计算和工具功能。
  • -e NVIDIA_VISIBLE_DEVICES=all:设置所有可用的NVIDIA GPU都可见于容器。
  • --name aigc:将容器命名为”aigc”,以便于识别和操作。

这些选项将确保运行一个后台模式的容器,可以访问主机的时间和文件系统,同时还能使用GPU资源。容器通过SSH端口3022和自定义端口3060进行访问。使用的镜像是基于Anaconda3的”continuumio/anaconda3:latest”。

其中,请结合自己的服务器实际情况,映射相对于的端口和文件目录

进入容器

alt

1
docker exec -it aigc bash
  • docker: 这是指向Docker引擎的命令行标识符,用于运行与Docker相关的命令。
  • exec: 这是Docker的一个子命令,用于在正在运行的容器中执行命令。
  • -it: 这是两个选项的组合。-i 表示”交互模式”,允许我们与新终端进行交互。-t 表示为新的终端分配一个伪终端。
  • aigc: 这是容器的名称或标识符。在这里,它是您指定的容器名称。
  • bash: 这是要在容器中执行的命令,即启动一个新的Bash终端。

由于我们拉去的镜像是anaconda的,所以我们的容器里面已经自带conda,接下来我们只要创建一个新的conda环境

1
conda create --name one python=3.10

alt

激活环境

1
conda activate one

alt

进入工作目录

1
2
cd data
cd aigc

安装pytorch

1
pip install torch torchvision torchtext torchaudio torchsummary

alt

下载并安装stable-diffusion-webui

1
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git

alt

然后切换到目录内

1
cd stable-diffusion-webui/

下载所需要的依赖

1
pip install -r requirements.txt

这里最好用一点魔法
alt

使用

安装完后,运行

1
python launch.py

这里注意的是,一开始我们运行时,端口号为127.0.0.1:7860
但是由于我们现在在一个服务器的docker里面,运行时,我们需要改一下端口,以及放行–listen

改端口

我们这里将127.0.0.1改成0.0.0.0

1.webui.py内改动

alt
alt


2.run_tests.yaml内改动

alt


3.ngrok.py改动

alt


4.ui.py改动

alt

paths_internal.py改动

alt

1
commandline_args = os.environ.get('COMMANDLINE_ARGS', "--listen ")

后面加上–listen

alt

alt