基于趋动云部署B站大V秋葉aaaki的Stable Diffusion整合包v4--linux版

news2024/11/27 10:36:12

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)

 

六、相关文件

百度云盘文件:

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


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/513228.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows机制初探

Windows内存管理 EPROCESS结构体&#xff1a;在内核中表示一个进程 VAD树 二叉树&#xff0c;存储进程在内核层申请的虚拟内存信息 (x86 EPROCESS0x11c) (x64 EPROCESS0x7d8)指向VadRoot(VAD树) 可以看到两种内存&#xff1a;Private(私有内存)、 Mapped(映射内存) 私有内…

Elasticsearch 入门

Elasticsearch 是一种开源搜索引擎&#xff0c;它基于 Apache Lucene 构建&#xff0c;提供了一个分布式、多租户、全文搜索和分析引擎。Elasticsearch 可以处理海量数据&#xff0c;能够快速、准确地搜索、分析和可视化数据。 Elasticsearch 最初是为了解决日志搜索和分析而开…

2018年下半年 软件设计师 答案及详解

2018年下半年 软件设计师 答案详解 主要记录刷题相关笔记&#xff0c;方便日后温习&#xff01;&#xff01;&#xff01; 一、选择题 CPU 在执行指令的过程中&#xff0c;会自动修改_____的内容&#xff0c;以使其保存的总是将要执行的下一条指令的地址。 A.指令寄存器B.程…

makefile 变量的扩展

文章目录 前言一、环境变量&#xff08;全局变量&#xff09;二、目标变量&#xff08;局部变量&#xff09;三、模式变量总结 前言 一、环境变量&#xff08;全局变量&#xff09; Makefile 中的环境变量&#xff0c;是指在执行 Makefile 时&#xff0c;从外部传入 Make 命令…

m4a音频怎么转换成mp3?

m4a音频怎么转换成mp3&#xff1f;如果你遇到了m4a音频格式的文件&#xff0c;但却无法在音频播放器中打开它&#xff0c;通常我们会将其转换成mp3格式。因为M4A属于苹果专用的音频格式&#xff0c;而MP3则是一种通用音频格式。M4A属于高品质压缩类型的音乐文件&#xff0c;而M…

Django框架之使用Session保持HTTP状态

HTTP协议是无状态的&#xff0c;每次请求都是新的请求&#xff1b; 客户端与服务器端的一次通信就是一次会话。 可使用cookie和session在客户端或者服务端存储有关会话的数据&#xff0c;来进行状态保持&#xff1b; cookie使用在上篇。本篇是使用session进行状态保持及使用Red…

外观数列----2023/5/11

外观数列----2023/5/11 给定一个正整数 n &#xff0c;输出外观数列的第 n 项。 「外观数列」是一个整数序列&#xff0c;从数字 1 开始&#xff0c;序列中的每一项都是对前一项的描述。 你可以将其视作是由递归公式定义的数字字符串序列&#xff1a; countAndSay(1) “1”…

Omniverse Replicator环境配置和使用说明

Omniverse Replicator使用说明 本教程将介绍Omniverse Replicator的环境配置和使用说明, 参加Sky Hackathon的同学可以参考本教程来合成训练数据集. 文章目录 Omniverse Replicator使用说明1. Omniverse环境配置1.a.安装Omniverse Launcher1.a.1.在下面的地址下载Omniverse La…

案例分享:ChatGPT写python脚本,轻松文本处理

大家好&#xff0c;我是可夫小子&#xff0c;关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。加&#xff1a;keeepdance&#xff0c;备注&#xff1a;chatgpt&#xff0c;拉你进群。 在工作中&#xff0c;需要对数据进行筛选、分割和整理&#xff0c;当你接受到一个长长…

浅谈Android PMS解析APP信息流程

前言 前面我们了解了Zygote的启动流程&#xff0c;知道AMS、PMS都是由SystemServer进程启动的&#xff0c;我们都知道PMS主要负责App管理工作&#xff0c;这里我们简单从源码角度分析下PMS是如何解析APP解析的&#xff1b; 源码分析(API 30为例) 我们还是从PackageManagerSe…

SpringBoot缓存技术详解

文章目录 一、 缓存技术介绍1. 缓存技术简介2. JSR107核心接口3. JSR107 图示3. SpringBoot缓存抽象4. 缓存常用注解和接口 一、 缓存技术实战1. Cacheable注解2. 缓存的工作原理4. Cacheable注解的工作流程 一、 缓存技术介绍 1. 缓存技术简介 缓存技术主要分为两大类缓存可…

6 进程的环境

6.1 main函数 C程序总是从main函数开始执行。main函数的原型是&#xff1a; int main(int argc, char *argv[]) 6.2 进程终止 有五种方式使进程终止&#xff1a; &#xff08;1&#xff09;正常终止&#xff1a; &#xff08;a&#xff09;从main返回。 &#xff08;b&…

Pycharm十种不为人所知的技巧,不得不知道

Pycharm是Python语言开发中的一个非常强大的IDE工具&#xff0c;其高度的定制能力、日常开发中常用的工具和各种快捷键等功能&#xff0c;都能帮助Pycharm用户提高开发效率。但是&#xff0c;Pycharm中的许多功能并不为人所知。因此&#xff0c;以下是十种Pycharm技巧&#xff…

【MCS-51】51单片机指令系统大全

指令是指挥微型计算机工作的的计算机命令&#xff0c;对于51单片机来说&#xff0c;其主要使用的指令有两种形式&#xff1a;机器语言指令和汇编语言指令。 机器语言指令是指使用二进制代码表示的指令&#xff1b; 汇编语言指令是指使用容易我们记忆的缩写符号表示的机器语言…

YOLO入门指南:理解YOLO原理及构建第一个目标检测模型

YOLO&#xff08;You Only Look Once&#xff09;是一种快速且准确的目标检测算法&#xff0c;可以在图像或视频中检测出多个对象的位置和类别。在本篇文章中&#xff0c;我们将介绍YOLO的基本原理&#xff0c;并使用TensorFlow构建第一个目标检测模型。 YOLO的基本原理 YOLO的…

linux 安装jdk、tomcat

文章目录 前言一、Linux上安装jdk1、jdk安装与配置过程2、linux查看jdk安装路径 二、Linux上安装tomcat1、tomcat安装与配置过程2、对外开放访问的端口、重启防火墙、查看日志 三、在window系统中通过浏览器访问 前言 先检察是否安装jdk java -jar ## 查看是否安装jdk java -…

K8S—Helm

一、Helm介绍 helm通过打包的方式&#xff0c;支持发布的版本管理和控制&#xff0c;很大程度上简化了Kubernetes应用的部署和管理。 Helm本质就是让k8s的应用管理&#xff08;Deployment、Service等&#xff09;可配置&#xff0c;能动态生成。通过动态生成K8S资源清单文件&a…

文笔润色-文本校对改写工具

文段改写软件 写作是一项对于很多人来说都需要频繁进行的活动&#xff0c;无论是工作中的商业写作还是学术写作&#xff0c;在完成优质内容的同时也需要付出大量的时间和精力进行语言润色和修改。然而&#xff0c;现在有了147ChatGPT改写润色软件&#xff0c;该软件可以全自动…

近期分享学习心得

1、数据类型 原始类型undefined null number string boolean symbol bigint 引用类型 对象 2、大厂为什么不允许赋值undifined&#xff1f; 必须let avoid 0;效果一样 void是关键字&#xff0c;后面跟表达式&#xff0c;无论跟啥最终制造undefined&#xff0c;但是习惯写0。…

动态规划设计

文章目录 动态规划设计一、什么是最长递增子序列&#xff1f;[300. 最长递增子序列](https://leetcode.cn/problems/longest-increasing-subsequence/)注意子序列和子串的区别&#xff1a; 二、动态规划解法2.1什么是数学归纳法&#xff1f;2.2最长递增子序列中数学归纳的实际应…