CentOS7部署Stable-Diffusion(AI)

最近看到群里面都在讨论显卡,有人说买显卡就是为了部署Stable-Diffusion,于是我就自己动手一边查文献一边部署。因为没钱,所以只能用普通服务器部署下,没有GPU,但是原理都一样,有GPU的就多装个cuda和驱动

一、环境

CentOS7
Python3.10.6 https://www.python.org/downloads/release/python-3106/
Stable-Diffusion-webui https://github.com/AUTOMATIC1111/stable-diffusion-webui
Git https://www.kernel.org/pub/software/scm/git
OpenSSL https://openssl.org/source/
模型 https://huggingface.co/runwayml/stable-diffusion-v1-5/tree/main

二、更新系统软件包并安装依赖

1
2
3
yum -y update
yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc gcc perl-ExtUtils-MakeMaker epel-release libffi-devel
yum install gperftools

三、编译安装Openssl

我这里用的openssl是3.2.1的版本

1
2
3
4
wget https://openssl.org/source/openssl-3.2.1.tar.gz
tar -zxvf openssl-3.2.1.tar.gz
./configure --prefix=/usr/local/openssl321
make && make install

四、编译安装git

1、编译并安装git

我这里用的git是2.43.0的版本

1
2
3
4
5
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.43.0.tar.gz
tar -zxvf git-2.43.0.tar.gz
cd git-2.43.0.tar.gz
./configure --prefix=/usr/local/git
make && make install
2、配置系统变量
1
vim /etc/profile

1
2
unset i
unset -f pathmunge

上添加

1
export PATH=$PATH:/usr/local/git/bin

然后保存退出。
让变量生效

1
source /etc/profile

查看git版本,看变量是否生效

1
git --version

这时候你会得到一个结果

1
git version 2.43.0

这就说明成功了

五、编译并安装python

1、编译安装
1
2
3
4
5
我这里用的是Gzipped source tarball也就是.tgz后缀的压缩包
# wget https://www.python.org/ftp/python/3.10.6/Python-3.10.6.tgz
# tar -xvf Python-3.10.6.tgz
# ./configure --enable-optimizations --with-openssl=/usr/local/openssl321 --with-openssl-rpath=auto --prefix=/usr/local/python3106
# make && make install
2、设置软链接
1
2
3
4
# unlink python
# ln -s /usr/local/python3106/bin/python3.10 /usr/bin/python3.10
# ln -s /usr/bin/python3.10 /usr/bin/python3
# ln -s /usr/bin/python3 /usr/bin/python

六、修改yum配置

因为修改了python的软链,现在python版本是3.10.6了,如果不改yum的话,后面yum安装东西会报错

1
vim /usr/bin/yum

把开头的

1
#!/usr/bin/python

改成

1
#!/usr/bin/python2

yum修改了,自然urlgrabber-ext-down也要修改

1
vim /usr/libexec/urlgrabber-ext-down

跟yum一样,把第一行的

1
#! /usr/bin/python

改成

1
#! /usr/bin/python2

七、下载并修改stable-diffusion-webui

1、下载stable-diffusion-webui
1
2
cd /www
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
2、下载stable-diffusion-webui底层模型文件
1
2
3
4
5
cd /www/stable-diffusion-webui/models/Stable-diffusion
wget https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.safetensors
mkdir -p /www/stable-diffusion-webui/openai
cd /www/stable-diffusion-webui/openai
git clone git clone https://www.modelscope.cn/AI-ModelScope/clip-vit-large-patch14.git

如果还需要其他模型文件,可以在文章开头的模型链接里面下,文件都好大,好几个G

3、修改stable-diffusion-webui文件
3.1、设置允许root用户运行
1
2
cd /www/stable-diffusion-webui
vim webui.sh


1
can_run_as_root=0

修改成

1
can_run_as_root=1

webui

3.2、禁用SSL证书

修改launch.py文件,添加代码禁用SSL证书验证,防止后续生成图片的时候出现证书问题

1
vim launch.py

添加下面两句

1
2
import ssl
ssl._create_default_https_context = ssl._create_unverified_context

launch

3.3、跳过GPU测试

因为博主比较穷,买不起GPU,所以在部署的时候得改下文件,让它跳过检测,如果不配置的话启动会报

1
RuntimeError: Torch is not able to use GPU; add --skip-torch-cuda-test to COMMANDLINE_ARGS variable to disable this check

所以我们要编辑webui-user.sh

1
vim webui-user.sh

把默认的注释去掉

1
2
3
默认是这样
# Commandline arguments for webui.py, for example: export COMMANDLINE_ARGS="--medvram --opt-split-attention"
# export COMMANDLINE_ARGS=""

1
2
3
我们改成这样
# Commandline arguments for webui.py, for example: export COMMANDLINE_ARGS="--medvram --opt-split-attention"
export COMMANDLINE_ARGS="--lowvram --precision full --no-half --skip-torch-cuda-test"

然后保存并退出
launch

3.4、修改modules.py中的模型路径
1
vim /www/stable-diffusion-webui/stable-diffusion-webui/repositories/stable-diffusion-stability-ai/ldm/modules/encoders/modules.py

把这两个地方的version=”openai/clip-vit-large-patch14”路径

1
2
3
4
5
6
7
8
9
10
11
class FrozenCLIPEmbedder(AbstractEncoder):
"""Uses the CLIP transformer encoder for text (from huggingface)"""
LAYERS = [
"last",
"pooled",
"hidden"
]

def __init__(self, version="openai/clip-vit-large-patch14", device="cuda", max_length=77,
freeze=True, layer="last", layer_idx=None): # clip-vit-base-patch32
super().__init__()

1
2
3
4
5
6
7
8
class FrozenCLIPT5Encoder(AbstractEncoder):
def __init__(self, clip_version="openai/clip-vit-large-patch14", t5_version="google/t5-v1_1-xl", device="cuda",
clip_max_length=77, t5_max_length=77):
super().__init__()
self.clip_encoder = FrozenCLIPEmbedder(clip_version, device, max_length=clip_max_length)
self.t5_encoder = FrozenT5Embedder(t5_version, device, max_length=t5_max_length)
print(f"{self.clip_encoder.__class__.__name__} has {count_params(self.clip_encoder) * 1.e-6:.2f} M parameters, "
f"{self.t5_encoder.__class__.__name__} comes with {count_params(self.t5_encoder) * 1.e-6:.2f} M params.")

修改成自己刚才创建openai的那个路径

1
2
3
4
5
6
7
8
9
10
11
class FrozenCLIPEmbedder(AbstractEncoder):
"""Uses the CLIP transformer encoder for text (from huggingface)"""
LAYERS = [
"last",
"pooled",
"hidden"
]

def __init__(self, version="/www/stable-diffusion-webui/openai/clip-vit-large-patch14", device="cuda", max_length=77,
freeze=True, layer="last", layer_idx=None): # clip-vit-base-patch32
super().__init__()

modules

1
2
3
4
5
6
7
8
class FrozenCLIPT5Encoder(AbstractEncoder):
def __init__(self, clip_version="/www/stable-diffusion-webui/openai/clip-vit-large-patch14", t5_version="google/t5-v1_1-xl", device="cuda",
clip_max_length=77, t5_max_length=77):
super().__init__()
self.clip_encoder = FrozenCLIPEmbedder(clip_version, device, max_length=clip_max_length)
self.t5_encoder = FrozenT5Embedder(t5_version, device, max_length=t5_max_length)
print(f"{self.clip_encoder.__class__.__name__} has {count_params(self.clip_encoder) * 1.e-6:.2f} M parameters, "
f"{self.t5_encoder.__class__.__name__} comes with {count_params(self.t5_encoder) * 1.e-6:.2f} M params.")

modules

八、创建虚拟环境和python依赖

1
2
3
cd stable-diffusion-webui/
python -m venv venv
source venv/bin/activate

九、启动 stable-diffusion

1
2
3
4
5
6
7
cd /www/stable-diffusion-webui
./webui.sh --no-gradio-queue --gradio-auth abc:Aa123456*
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip config set install.trusted-host mirrors.aliyun.com
pip install --upgrade pip
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install -r requirements_versions.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
1、参数说明

1.1、–no-gradio-queue
是为了解决在访问页面的时候无法生成图片,提示Something went wrong Connection errored out.错误

1.2、–gradio-auth abc:Aa123456*
当中的abc是你设置的账号,Aa123456*为你登录时的密码

十、配置nginx代理

我系统之前就装过nginx的,不会装的话,点击下面传送门参考我之前的帖子
Nginx安装教程传送门

我的nginx一般都装在 /usr/local/

1
vim /usr/local/nginx/conf/v_host/sd.conf

把这个配置贴进去然后保存退出

1
2
3
4
5
6
7
8
9
10
11
server {
listen 80;
    server_name abc.com; //这里填你的域名或服务器IP

location / {
proxy_pass http://127.0.0.1:7860;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

重启nginx是配置文件生效

1
/usr/local/nginx/sbin/nginx -s reload

然后打开网站就可以用了

UI
UI2

十一、设置中文界面

英文界面也不是不能用,就是看着累,所以把它弄成中文
UI3
UI4
UI5
UI6
UI7

设置完后就能看到界面是中文的了
UI8
UI9

总结

到这里基本就部署好了,记得用代理,不然在部署的时候很多git不了。
因为我没有GPU,全靠CPU在跑,所以速度会比较慢,如果真想弄个自己玩而且有经济实力的话,建议还是弄块好点的显卡




参考:

https://blog.csdn.net/qq_43610975/article/details/131031866
https://zhuanlan.zhihu.com/p/683518602
https://blog.csdn.net/qq_21138747/article/details/132033416
https://www.jianshu.com/p/f32ec5c9bd30
https://www.cnblogs.com/91donkey/p/13802982.html

微信扫一扫关注我吧

戴戴的Linux 戴戴的Linux

文章目录
  1. 1. 最近看到群里面都在讨论显卡,有人说买显卡就是为了部署Stable-Diffusion,于是我就自己动手一边查文献一边部署。因为没钱,所以只能用普通服务器部署下,没有GPU,但是原理都一样,有GPU的就多装个cuda和驱动
  • 一、环境
  • 二、更新系统软件包并安装依赖
  • 三、编译安装Openssl
  • 四、编译安装git
    1. 1、编译并安装git
    2. 2、配置系统变量
  • 五、编译并安装python
    1. 1、编译安装
    2. 2、设置软链接
  • 六、修改yum配置
  • 七、下载并修改stable-diffusion-webui
    1. 1、下载stable-diffusion-webui
    2. 2、下载stable-diffusion-webui底层模型文件
    3. 3、修改stable-diffusion-webui文件
      1. 1. 3.1、设置允许root用户运行
      2. 2. 3.2、禁用SSL证书
    4. 3.3、跳过GPU测试
    5. 3.4、修改modules.py中的模型路径
  • 八、创建虚拟环境和python依赖
  • 九、启动 stable-diffusion
    1. 1、参数说明
  • 十、配置nginx代理
  • 十一、设置中文界面
    1. 总结
    2. 微信扫一扫关注我吧


  • 本站总访问量 本文总阅读量