基于趋动云部署秋葉aaaki的Stable Diffusion整合包v4–linux版

B站大V秋葉aaaki的Stable Diffusion整合V4版发布了,集成度比较高,在windows下解压缩直接就可以使用,整合的非常好。但是笔人没有RTX4090这样级别的显卡,又希望有个高速运行的效果。

所以索性到云GPU主机上来用秋叶aaaki的Stable Diffusion webui,一番研究后,在趋动云部署成功。运行良好,速度飞快。

特此分享。

一、安装包分析

秋叶aaaki的Stable Diffusion安装包下载下来后,目测主要进行了python环境的集成,以及windows下的git工具集成。这样再加上一个windows的启动器程序,就可以很好的控制环境变量的加载和一些安装包扩展组件的安装、升级等。

但是启动器在linux下是不能运行的,所以本文主要是把秋叶的V4版整合包,拿来主义的方式,在云端部署起来用起来。整体过程还算顺利。

为了减小上传云端的文件量首先要改版一下,秋叶的安装包,把里面的py310文件夹和git文件夹删掉,因为这些通常在云平台得用云平台环境的python环境和git环境。并且这2个主要是支持windows下作业的环境,上云之后都是linux,就没必要了。

 干掉之后。压缩包从9.44G降到6.58G。这样就比较轻巧了!

二、思路

我们主要是希望在云平台直接使用秋叶集成好的Stable Diffusion WebUI ,并且主要是垂涎pyTorch2.0更高的性能,和秋叶用心对webui的集成成果。所以核心并不是将启动器移植到linux。而是将webui在趋动云的linux平台跑起来。

那么就要选择合适的云平台镜像,进行改造之后,操作起来就方便了!

但是和大多数AI GPU云平台一样,趋动云的GPU主机都是docker镜像的,docker镜像的开发环境都是基于python来运行jupyter来支撑在线多用户的隔离开发。而sd-webui要基于python3.10+pyTorch2.0的环境来跑,这与大多数云平台提供的python3.8/3.9存在冲突,很多奋战在一线的AIGC战友估计都有自己试过,但python的改变,往往会导致保存之后,镜像再也无法启动等问题。

所以最关键的问题就是,以官方最接近的镜像为基础,要进行miniconda的整合,并且要确保整合后形成一个带visual env条件的python环境,这样我们就可以在官方3.8或者3.9的python环境中,起一个3.10的python环境。还互不影响。

三、官方镜像分析&基础镜像制作

目标确定后,我们开始研究官方镜像。目前趋动云只有一版PyTorch2.0的官方镜像,之所以要选这个,是因为我们是要跑torch to GPU的,而如果官方没有提供一个整合好CUDA和显卡驱动的基础镜像的话,由于云硬件的未知性,想要从显卡驱动+CUDA开始往上一路做到miniconda的基础镜像,是不具备信息条件的。所以只能借力发力。

经过分析,最关键是miniconda安装完成后的最后一步,会向/root/.bashrc写入conda的init环境信息,以确保镜像启动后,进入命令行就进入conda的env环境体系。但是就是这个,会破坏趋动云官方的镜像的启动机制,导致镜像保存后就无法再启动。

so,怎么办呢?

办法就是,安装完成之后,把.bashrc里最后miniconda增加的部分,剪切出来,保存到code路径下,以后每次手动运行。避开保存环节,不破坏镜像。

conda在bashrc的末尾就增加了这段儿,一定要删掉,或者剪切掉。保存到自己的code区,随便一个文本文件。注意“/usr/miniconda3”这个路径,是安装miniconda时指定的,根据你得安装路径的不同。可能会不同。

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/usr/miniconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/usr/miniconda3/etc/profile.d/conda.sh" ]; then
        . "/usr/miniconda3/etc/profile.d/conda.sh"
    else
        export PATH="/usr/miniconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<

为了方便后续的人使用(毕竟,每个人基于官方镜像,装个miniconda再,修改一下,保存个新镜像,除了浪费时间、浪费存储,没啥作用。)所以我做好镜像后,已开放了该镜像,在镜像开放区去搜就可以找到。

懒得自己制作基础镜像的,直接用这个镜像启动项目即可。

四、linux集成迁移

1、迁移思路

首先Stable Diffusion Webui是个web用户应用,秋叶aaaki已近把它该集成的都集成了,这东西本来就是运行在linux要比windows方便的,这一点要注意。我们下面做的所有操作,都是为了在趋动云这个平台的限制条件下把它启动起来。

趋动云的AI GPU环境。一般最关键的就是这3个路径:

/gemini/code   代码区,可读、可写、但是速度比较慢

/gemini/data-1  数据区,通过官方的web页面和传输通道可以往里写数据,但是一旦到运行环境里,就不可写,只能度,但是就使用感觉,读取速度是比code区要快的。

/gemini/data-2 数据区,同上。

基于这个特点,我们的迁移方案就是,要将整个sd-webui的cache缓冲区、python环境区都重定向到code区域。虽然慢一点,但是比如通过webui操作安装的更改,hugging face临时需要自动下载的模型,都可以顺利被保存。如果放在容器的其它路径,或者放在基础镜像里,容器一旦重启就会丢失改动,我想没有人愿意反复的安装里面的各种包和模型吧!

2、具体过程:

首先,通过百度网盘下载我们清理过的安装包sd-webui-aki-v4-linux.zip等文件,创建一个自有数据集,把里面的文件全部传上去。【文后提供百度下载链接】,并将数据集挂载在开发环境。

然后,我们通过Pytorch2.0_ miniconda3这个新做的基础镜像为镜像,启动工作环境。

第三步:把sd-webui-aki-v4-linux.zip解压缩到/gemini/code/sd-webui-aki-v4这个路径。

unzip /gemini/data-1/sd-webui-aki-v4-linux.zip -d /gemini/code >log.txt 

保证形成如图这样的路径结构:

第四步,把env.tar.gz,解压缩到/gemini/code/env这个路径

tar -zxf env.tar.gz -C /gemini/code/env

解压后形成这个样子。

至此,部署的99%的工作都完成了。只需要写个start.sh脚本,就可以把秋叶的V4版在趋动云启动起来了。需要的文件都齐了。

3、env环境的构建说明(写给那些想举一反三,奋进进取的队友,那些只想直接用的人可以避开这段,技术细节太多,新手估计要补1年课才能理解)

这里说个题外话:

这个env路径下,其实是最费时的。这整个路径里的.cache和sd-webui cnoda的python环境,都是一点点安装出来的。耗时大概有4个多小时(使用了国内镜像加速配置的)。

过程也可以说一下,满足一下看文的人的好奇,但是不建议自己再做了,执行的太慢了。

#背景:
##miniconda已集成进了基础镜像,并且不影响基础镜像启动的情况下,miniconda在指定路径的方式下,手动运行正常。
##miniconda对bashrc增加的内容已剪切至名字叫condainit的一个文本文件里。
##秋叶的sd-web文件已在code指定路径解压完成。

#在code路径下创建env路径
mkdir /gemini/code/env

#进入env路径开始环境构建
cd /gemini/code/env
mv ../condainit ../

## 初始化conda环境,注意如果你构建env的过程中,是分好几天进行的。每次进来都要手动运行这个来初始化环境 
source /gemini/code/env/condainit

# 迁移并映射/root/.cache等环境路径,映射到code路径,这样即使退出,相关的改动也会被保存,不会丢
# 注意这里.gitconfig,.config 有加速镜像配置,可以从tar包里得到。
export PATH="/root/.local/bin:$PATH"


rm -rf /root/.cache /root/.local 
ln -s /gemini/code/env/.gitconfig /root/.gitconfig
ln -s /gemini/code/env/.cache /root/.cache
ln -s /gemini/code/env/.config /root/.config
ln -s /gemini/code/env/.local /root/.local

## 创建conda虚拟环境,给秋叶V4版用的python3.10.11 +PyTorch2.0.0的环境。也就是之后大家在env.tar.gz里见到的那个sd-webui文件夹。注意这里创建环境是指定的路径的方式,所以是不需要指定name的,也不能以name方式active。

conda create python=3.10.11 pytorch=2.0  -p /gemini/code/env/sd-webui

#经过漫长、漫长的等待终于各种该安装的都装完了。sd-webui的基础环境算是ok了。
#激活环境,注意之后的所有操作,都要在激活sd-webui这个python环境的前提下操作。
#聪明的朋友估计已近发现了。如果自己断断续续的搞。那么这里就是个存盘点。每次进入环境,第一步先
#source condainit 进入到conda的base环境,然后再激活sd-webui环境,这两步,只要是你想手动对环境做什么变动,就必须要先操作。确保每次自己pip install也好,conda install也好,都是在sd-webui的虚拟环境启动的情况下来操作。迁移并映射确保能利用cache。
conda activate /gemini/code/env/sd-webui

#开始安装Stable Diffusion webui相关的python依赖,这个时间巨长务必,下载N个G的文件。记住有先后顺序!请依次安装
pip install  -r  requirements_version.txt
pip install  -r  requirements.txt 

最后一个requirements.txt 安装完。恭喜你,全部的需要安装的过程就完事了。
只差最后一步,写个,每次进入环境后,需要执行的start.sh


可以看到步骤不多,但是过程巨慢,很费时间。不想自己搞的,就直接解压我的env包,到指定路径。上面的env环境的构建步骤就都省了。

4、start.sh

最重要最好的放在最后。start.sh内容:

#!/bin/bash

#初始化conda环境
source /gemini/code/env/condainit
#激活sd-webui的python环境
conda activate /gemini/code/env/sd-webui

#gnu Lib的路径环境变量要声明一下,不然有些so找不到的问题
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu

#这个就和env构建过程一样,把容器的/root下的缓存、配置文件等路径全都映射到code来!这样退出不保存镜像,改动也不会丢
export PATH="/root/.local/bin:$PATH"

cache_path="/root/.cache"

#比env构建时复杂了点点,主要是防止start.sh反复执行的时候,把code里的文件、文件夹给删了
if [ -L $cache_path ]
then
       echo "$cache_path is a symlink,"
       rm $cache_path
else
       echo "$cache_path is a directory, deleting."
       rm -rf $cache_path
fi

local_path="/root/.local"

if [ -L $local_path ]
then
       echo "$local_path is a symlink,"
       rm $local_path
else    
       echo "$local_path is a directory, deleting."
       rm -rf $local_path
fi

#创建文件、文件夹链接
ln -s /gemini/code/env/.gitconfig /root/.gitconfig
ln -s /gemini/code/env/.cache /root/.cache
ln -s /gemini/code/env/.config /root/.config
ln -s /gemini/code/env/.local /root/.local



#注意这里把秋叶启动加的xformers去掉了,都上云平台了,还节省个什么显存,可劲的造吧!显存不够,就换更强的主机型号呗,我发现大部分模型在24G显存的large主机都是可以顺利跑的,如果有更大的,就用80G显存的呗。都上云了,就好好发挥!

export COMMANDLINE_ARGS="--deepdanbooru --share --port 19527 --theme dark --listen   --enable-insecure-extension-access"

python_cmd="python"
LAUNCH_SCRIPT="launch.py"

"${python_cmd}" "${LAUNCH_SCRIPT}" "$@"




5、运行

把start.sh复制到/gemini/code/sd-webui-aki-v4路径下,直接运行即可。注意加个 &,万一终端掉线,不影响使用。

cd /gemini/code/sd-webui-aki-v4

cp /gemini/data-1/start.sh /gemini/code/sd-webui-aki-v4

chmod 755 start.sh

./start.sh &

等到出现gradio的链接,就可以访问拉~~~~

模型装载的速度有点慢,一旦装载完,GPU全速跑起来还是很快的,而且图像质量普遍要高。xformers对速度和质量是有牺牲的。所以除非你得操作爆显存了,80G的large机型也不够用,再加这个参数。

6、模型的安装

通常模型都比较大,建议大家自己建好数据集之后,把模型文件放在数据集,然后通过ln -s的方式,映射到/gemini/code/sd-webui-aki-v4路径下对应的文件夹里即可。数据集的路径的文件的读取速度,还是显著的高于code路径的。

这是使用的经验。

ln -s  /gemini/data-1/xxxxxx你得模型   /gemini/code/sd-webui-aki-v4/models/xxxxx/xxxxx你得模型名字

这样就可以把数据集的模型,直接创建软连接到webui里,完成手动安装了。

至于webui界面上自动安装的那些。因为这个环境都配置了git和conda、pip的加速,所以只管直接按就行了。都会在code路径下。

 五、效果

 正向提示词:

space girl, standing alone on hill, centered, detailed gorgeous face, anime style, key visual, intricate detail, highly detailed, breathtaking, vibrant, panoramic, cinematic, Carne Griffiths, Conrad Roset, ghibli

 反向提示词:

easynegative,,badhandv4,nfixer, nartfixer, nrealfixer, (jewelry),(big breasts, large breasts), CGI, 3d, doll, octane, render, cartoon, anime, illustration, drawing, digital art, digital painting, sketch, lowres, text, cropped, worst quality, low quality, jpeg artifacts, ugly, duplicate, poorly drawn hands, poorly drawn face, deformed, blurry, logo, big hands, ugly mouth, ugly eyes, missing teeth, crooked teeth, close up, out of frame, morbid, mutilated, extra fingers, mutation, dehydration, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, fused fingers, too many fingers, long neck, (more than two arms per body:1.5),(more than two legs per body:1.5),(more than five fingers on one hand:1.5)

 

六、相关文件

百度云盘文件:

相关安装文件百度网盘分享

 

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>