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

news2024/11/28 22:37:45

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/524187.html

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

相关文章

1.环境搭建

1.Windows 系统GolangVisual Studio CodeMicrosoft Windows (x86-64)go1.20.1.windows-amd64.msihttps://code.visualstudio.com/DownloadMicrosoft Windows (x86-i386)go1.20.1.windows-386.msihttps://code.visualstudio.com/DownloadMicrosoft Windows (ARM64)go1.20.1.win…

《疯狂Java讲义》读书笔记4

初始化块 是构造器的补充&#xff0c;在构造器之前执行。 是一段固定的代码&#xff0c;不接受任何参数。 构造器其实是一个假象&#xff0c;编译Java类后&#xff0c;初始化块会消失&#xff0c;当中的代码被还原到构造器中&#xff0c;且位于构造器前面。 静态初始化块 用…

springboot+vue家政服务管理平台(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的家政服务管理平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风…

R语言相关系数的可视化

R相关系数的可视化 文章目录 R相关系数的可视化[toc]1、序列自相关2、序列偏自相关3、简单相关4、相关图可视化5、不同方法6、其他一些修饰 1、序列自相关 自相关是指同一时间序列在不同时间 t t t上取值的相关程度&#xff0c;假设时间序列 { X t } t 1 T \{X_t\}_{t1}^{T} …

电子电气架构——车载以太网防火墙

我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本文主要分享关于车用基础软件的内核和中间件核心技术—虚拟化的典型应用案例。 车辆内部的以太网网络是一个相对封闭的环境,没有因特网那么复杂。由于车辆…

[LeetCode周赛复盘] 第 345 场周赛20230514

[LeetCode周赛复盘] 第 345 场周赛20230514 一、本周周赛总结6430. 找出转圈游戏输家1. 题目描述2. 思路分析3. 代码实现 6431. 相邻值的按位异或1. 题目描述2. 思路分析3. 代码实现 6433. 矩阵中移动的最大次数1. 题目描述2. 思路分析3. 代码实现 6432. 统计完全连通分量的数…

多核与多处理器的区别

一、定义 多核&#xff1a;单块CPU上面能处理数据的芯片组的数量&#xff0c;比如&#xff0c;双核就是包括2个相对独立的CPU核心单元组&#xff0c;四核就包含4个相对独立的CPU核心单元组。 多处理器&#xff1a;主板上实际插入的cpu数量&#xff0c;一般有两个或者多个处理…

AutoSar之DaVinci开发环境

文章目录 前言一、AutoSar架构简介二、开发环境组成1.DaVinci Developer2.DaVinci Configurator3.SIP 总结 前言 作为初学者&#xff0c;接触AutoSar的开发&#xff0c;除了需要掌握基本的AutoSar架构知识外&#xff0c;还需要熟悉设计和配置AutoSar的工具链。接下来我会以Vec…

ChatGPT在小红书文案实践

今天聊一聊ChatGPT在小红书这个实际应用场景的案例。ChatGPT 以较低的门槛提高了使用者创作水平&#xff0c;有较高的下限&#xff0c;但如何创造更高质量的内容就要依靠使用者在领域的能力和AI使用技巧&#xff0c;作者无任何小红书推广和文案写作经验&#xff0c;文章内容来自…

【MySQL】C语言连接数据库

在使用数据库的时候&#xff0c;我们是操作客户端方的&#xff0c;向服务器请求数据。MySQL的端口号-3306 连接mysql需要头文件&#xff1a;#include<mysql/mysql.h> 基础连接步骤&#xff1a; 1.创建连接句柄 MYSQL mysql_con;//连接句柄 2.初始化连接句柄mysql_i…

LabVIEWCompactRIO 开发指南18 使用网络流发送消息和命令

LabVIEWCompactRIO 开发指南18 使用网络流发送消息和命令 默认情况下&#xff0c;网络流旨在最大化吞吐量&#xff0c;但可以轻松实现它们以最大化发送命令或消息的低延迟。 为本部分提供LabVIEW示例代码 命令发送器体系结构 命令发送器是CompactRIO控制器必须响应的任何命…

如何构建“Buy Me a Coffee”DeFi dApp

&#x1f978; 本教程来自官网&#xff1a;https://docs.alchemy.com/docs。对原文部分内容进行了修改。教程中所有实例经过本人实践&#xff0c;代码可见&#xff1a;https://github.com/ChuXiaoYi/web3Study 区块链技术令人惊叹&#xff0c;因为它使我们能够使用代码和软件编…

【Linux初阶】进程地址空间 | CUP与可执行程序的交互原理

&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f; &#x1f36d;&#x1f36d;系列专栏&#xff1a;【Linux初阶】 ✒️✒️本篇内容&#xff1a;计算机空间初识&#xff08;子进程变量修改实验&#xff09;&#xff0c;感性理解进程虚拟地址空间&#xff0…

Web自动化测试工具大对决:细致比较Selenium、Protractor和Cypress

目录 前言&#xff1a; Selenium Protractor Cypress 结论 Web自动化测试步骤结构图&#xff1a; 前言&#xff1a; 随着Web应用程序的广泛使用&#xff0c;Web自动化测试工具的需求也越来越高。Web自动化测试工具可以模拟用户在Web浏览器中的行为&#xff0c;并且可以快…

NICE-SLAM学习

NICE-SLAM简介&#xff1a; 是浙大和ETH提出的一种神经隐式SLAM方法主要创新点在于解决了基于传统nerf的方案如imap无法应用在较大场景的问题。 关于该工程的前身和当前领域的主要研究现状见&#xff1a;&#xff08;知乎&#xff1a;秦通&#xff09;基于神经辐射场的&#…

接口自动化测试-Pytest核心固件Fixture详解以及应用实战

目录 前言&#xff1a; 一、Fixture概述 二、Fixture分类 在Pytest中&#xff0c;Fixture可以分为4类&#xff1a; 三、Fixture使用 下面结合实例说明如何使用Fixture。 3.1 session级别的Fixture 3.2 module级别的Fixture 3.3 function级别的Fixture 3.4 class级别的F…

2023.5.13前端设计

SpringbootVue架构设计&#xff08;一&#xff09; 项目中的文件来自B站视频&#xff08;程序员青戈&#xff09; https://www.bilibili.com/video/BV1U44y1W77D 前端设计 assets 文件夹通常用于存放静态资源文件&#xff0c;例如图像、CSS、字体等。components 文件夹通常用…

2023.5.14数据库设计

SpringbootVue架构设计&#xff08;二&#xff09; 项目中的文件来自B站视频&#xff08;程序员青戈&#xff09; https://www.bilibili.com/video/BV1U44y1W77D 数据库设计 1、article 在关系型数据库中&#xff0c;text类型和varchar类型都是用来存储字符串的数据类型。它…

【ShaderToy中图形效果转译到UnityShaderlab案例分享_Flame】

ShaderToy内的源码与效果图如下: float noise(vec3 p) //Thx to Las^Mercury {vec3 i = floor(p);vec4 a = dot(i

电动力学专题:电磁波传播时的色散效应

本文中假定波动方程的性质足够好&#xff0c;不要杠&#xff0c;杠你就输了 数学分析中的问题和XX 波动方程&#xff1a;\frac{\partial^2 u}{\partial t^2} - a^2 \frac{\partial^2 u}{\partial x^2} 0......(1) 波的色散 波动方程描写的是以恒定速度a传播的非衰减波。方程&…