docker内配置 stabel diffusion
docker内配置 stabel diffusion
简介
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 |
在物理机服务器工作区域,新建文件夹,我这边的名字为aigc
1 | mkdir aigcls |
构建基于anaconda镜像,构建容器,我这边容器的名字为aigc
1 | 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”。
其中,请结合自己的服务器实际情况,映射相对于的端口和文件目录
进入容器
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 |
激活环境
1 | conda activate one |
进入工作目录
1 | cd datacd aigc |
安装pytorch
1 | pip install torch torchvision torchtext torchaudio torchsummary |
下载并安装stable-diffusion-webui
1 | git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git |
然后切换到目录内
1 | cd stable-diffusion-webui/ |
下载所需要的依赖
1 | pip install -r requirements.txt |
这里最好用一点魔法
使用
安装完后,运行
1 | python launch.py |
这里注意的是,一开始我们运行时,端口号为127.0.0.1:7860
但是由于我们现在在一个服务器的docker里面,运行时,我们需要改一下端口,以及放行–listen
改端口
我们这里将127.0.0.1改成0.0.0.0
1.webui.py内改动
2.run_tests.yaml内改动
3.ngrok.py改动
4.ui.py改动
paths_internal.py改动
1 | commandline_args = os.environ.get('COMMANDLINE_ARGS', "--listen ") |
后面加上–listen