当前位置:   article > 正文

Ubuntu部署StableDiffusion超级完全版(含Contronet,局域网访问,Lora,Flask项目调用API及相关疑难问题解决)_stable diffusion ubuntu

stable diffusion ubuntu

Linux部署StableDiffusion(Ubuntu18.04)

一. 前情提示

需要科学上网。。。

二. 创建虚拟环境

StableDiffusion最低支持的python版本是3.10.6,所以虚拟环境下的python版本应大于等于3.10.6。这里我使用的是3.11.2版本的python。

conda create -n SD python=3.11.2
  • 1

三. 激活虚拟环境

进入虚拟环境

conda activate SD
  • 1

切换进虚拟环境下的目录

cd xxxxxxxxxx
  • 1

四. 查看cuda和nvidia驱动版本

2张RTX 2070,NVIDIA驱动版本为525.60.13,CUDA版本为12.2(CUDA版本>=12.1 不然报错 难顶)。

nvidia-smi
  • 1

在这里插入图片描述

五. 下载项目源码

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git 
  • 1

在这里插入图片描述

六. 初步运行项目

cd进StableDiffusion目录

cd  xxxx
  • 1

运行项目

python launch.py
  • 1

or

./webui.sh
  • 1

自动下载安装torch,torchvision,clip,requirements等依赖文件,如果没有科学上网,很大概率由于网络原因出现报错,可以多试几次,随缘成功

在这里插入图片描述

七. 报错解决

报错一
上述依赖安装成功后,会自动启动StableDiffusion,但是由于没有手动部署模型,会报错,这里需要自己下载模型。
在这里插入图片描述

报错二
NansException: A tensor with all NaNs was produced in Unet. This could be either because there’s not enough precision to represent the picture, or because your video card does not support half type. Try setting the “Upcast cross attention layer to float32” option in Settings > Stable Diffusion or using the --no-half commandline argument to fix this. Use --disable-nan-check commandline argument to disable this check
这个错误提示意味着在 Unet 中生成了全为 NaN(Not a Number,非数值)的张量。这可能是因为图像表示精度不足,或者你的显卡不支持 half 类型。要解决这个问题,你可以尝试在设置中将 “Upcast cross attention layer to float32” 选项设置为 float32,或者在命令行中使用 --no-half 参数。另外,你也可以通过使用 --disable-nan-check 参数来禁用这个检查。

解决办法:打开stable-diffusion-webui的根目录,然后打开launch.py,修改如下: 来源 stable-diffusion-webui出现NansException: A tensor with all NaNs was produced in Unet
添加 import sys,sys.argv.append(“–no-half”)如下两行代码

def main():
    import sys   #添加这行
    sys.argv.append("--no-half") # 添加这行
    if args.dump_sysinfo:
        filename = launch_utils.dump_sysinfo()
        print(f"Sysinfo saved as {filename}. Exiting...")
        exit(0)
    launch_utils.startup_timer.record("initial startup")
    with launch_utils.startup_timer.subcategory("prepare environment"):
        if not args.skip_prepare_environment:
            prepare_environment()
    if args.test_server:
        configure_for_tests()
    start()

if __name__ == "__main__":
    main()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

百分之90的问题都是版本太老(cuda,python,pytorch),网络不好原因和缺相关库导致的

八. 下载模型

这里我推荐ChilloutMix模型,可以生成出高质量且真实的亚洲人物图片,审美非常符合亚洲印象。
首先cd进stable-diffusion-webui/models/Stable-diffusion目录

cd stable-diffusion-webui/models/Stable-diffusion
  • 1

下载模型

wget -O chilloutmix_NiPrunedFp32Fix.safetensors https://civitai.com/api/download/models/11745
  • 1

本人这里因网络报错死活下载不了,直接科学上网去网站下了。 模型下载链接

报错
在使用ChilloutMix模型or其他模型(maybe)生成图片时这里会有一个报错
OSError: Can’t load tokenizer for ‘openai/clip-vit-large-patch14’. If you were trying to load it from ‘https://huggingface.co/models’, make sure you don’t have a local directory with the same name. Otherwise, make sure ‘openai/clip-vit-large-patch14’ is the correct path to a directory containing all relevant files for a CLIPTokenizer tokenizer.
Stable diffusion model failed to load

解决方法:(stable-diffusion-webui报OSError: Can‘t load tokenizer for ‘openai/clip-vit-large-patch14‘的正确解决方法

在 stable-diffusion-webui根目录下的stable-diffusion-webui文件夹下创建openai文件夹,然后在openai文件夹下再创一个clip-vit-large-patch14文件夹(注意目录级别)。
huggingface网站上下载以下13个文件。
在这里插入图片描述

将下载的文件全部拖进/stable-diffusion-webui/openai/clip-vit-large-patch14/目录下,如下图所示。
在这里插入图片描述

九. 实现StableDiffusion局域网访问

来源(Stable Diffusion XL LoRA 训练webui Linux服务器部署(保姆级教程)
在/anaconda3/venv/lib/python3.10/site-packages/gradio/文件夹下,找到networking.py,在28行左右,把默认IP改成服务器的IP

LOCALHOST_NAME = os.getenv("GRADIO_SERVER_NAME", "127.0.0.1")
  • 1

改成

LOCALHOST_NAME = os.getenv("GRADIO_SERVER_NAME", "YOUR IP")
  • 1

在121行左右也是同样的修改:

server_name = server_name or LOCALHOST_NAME
  • 1

改成

server_name = "YOUR IP"
  • 1

十. Contronet插件安装及下载对应模型

插件安装地址(https://gitcode.net/ranting8323/sd-webui-controlnet.git)
在这里插入图片描述
点击install后,重启StableDiffusion即可
在这里插入图片描述

下载模型 地址【科学上网】
总共有 14 个基础模型,依次下载模型名为「.pth」的文件
在这里插入图片描述
下载好后,放进models\ControlNet目录下。
在这里插入图片描述

十一. Lora模型

1.Windows训练版

[训练好之后上传到Ubuntu](参考来源B站秋葉aaaki
建议在windows端使用B站秋葉aaaki大神的Lora训练器来训练Lora模型。
下载地址
我下的是lora-scripts-v1.7.3版本的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
根据自己需要选择对应的训练设置,默认参数如下:

pretrained_model_name_or_path = "./sd-models/model.safetensors"//底模文件路径
train_data_dir = "./train/aki" //训练数据集路径,必须是64的倍数
resolution = "512,512" //分辨率大小
enable_bucket = true //启用 arb 桶以允许非固定宽高比的图片
min_bucket_reso = 256 //arb 桶最小分辨率
max_bucket_reso = 1_024 //arb 桶最大分辨率
output_name = "aki" //默认输出模型名称
output_dir = "./output" //默认输出目录,在安装Lora训练器的子目录下
save_model_as = "safetensors"//safetensors(推荐),ckpt,pt
save_every_n_epochs = 2 //每n轮保存一次模型
max_train_epochs = 10   //10-20个训练周期
train_batch_size = 1  //显存8G及以下填1
network_train_unet_only = false //默认false
network_train_text_encoder_only = false //默认false
learning_rate = 0.0001 //总学习率,低点也可以
unet_lr = 0.0001
text_encoder_lr = 0.00001
lr_scheduler = "cosine_with_restarts"
optimizer_type = "AdamW8bit" //优化器设置
lr_scheduler_num_cycles = 1
network_module = "networks.lora" //训练网络模块
network_dim = 32  //32or64 太大会增加训练难度 太小效果不好
network_alpha = 32
logging_dir = "./logs"
caption_extension = ".txt"
shuffle_caption = true
keep_tokens = 0
max_token_length = 255
seed = 1_337
prior_loss_weight = 1
clip_skip = 2 // 玄学一般用2
mixed_precision = "fp16"
save_precision = "fp16"
xformers = true
cache_latents = true
persistent_data_loader_workers = true
lr_warmup_steps = 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

点击开始训练即可
在这里插入图片描述

训练ing在这里插入图片描述
训练结束后在输出目录下可以看到训练出来的Lora模型。将训练好的Lora模型拖入Ubuntu Stable Diffusion 对应目录下的Lora文件夹。
在这里插入图片描述
启动Stable Diffusion,就可以看见训练好的Lora模型了。
在这里插入图片描述

2.Linux训练版(持续更新)

鉴于显卡大多存储于Linux服务器上,如果本地显卡显存小于<=8G,建议在Linux服务器上训练(比较麻烦,需要手动部署)
在这里插入图片描述

训练器来源
为了避免冲突,建议再用conda创建一个虚拟环境

在这里插入图片描述
python:3.10.9(官方推荐) 不能高于3.11.0,所以就用3.10.9吧。

conda create -n HOKYA python=3.10.9
  • 1
conda activate HOKYA
  • 1

在新建目录下通过运行以下命令克隆存储库,如果不加–recursive 后续会报错。

git clone --recursive https://github.com/bmaltais/kohya_ss.git
  • 1

cd进子目录

cd kohya_ss
  • 1

如果遇到权限问题,请setup.sh运行以下命令使脚本可执行

chmod +x ./setup.sh
  • 1

通过执行以下命令来运行安装脚本

./setup.sh
  • 1

如果出现下图这个提示
在这里插入图片描述
执行

sudo apt update -y && sudo apt install -y python3-tk
  • 1

执行

./setup.sh
  • 1

创建虚拟环境中
在这里插入图片描述
出现报错
在这里插入图片描述
在这里插入图片描述
因为没有1.17.1版本的onnxruntime-gp,所以就安装1.18.1版本的了。

pip install --upgrade onnxruntime-gpu==1.18.1
  • 1

执行

./setup.sh
  • 1

环境创建成功
在这里插入图片描述
执行

./gui.sh
  • 1

报错
ERROR Could not load torch: cuDNN version incompatibility: PyTorch was compiled against (8, 7, 0) but found runtime version (8, 2, 0). PyTorch
already comes bundled with cuDNN. One option to resolving this error is to ensure PyTorch can find the bundled cuDNN.Looks like your
LD_LIBRARY_PATH contains incompatible version of cudnnPlease either remove it from the path or install cudnn (8, 7, 0)
这个错误提示意味着你安装的 PyTorch 版本与当前系统中的 cuDNN 版本不兼容。具体来说,PyTorch 编译时使用的 cuDNN 版本是 (8, 7, 0),但在你的系统中发现的 cuDNN 运行时版本是 (8, 2, 0)。这种不匹配会导致运行时错误。

解决方法
不多赘述
参考 (保姆级图文详解)ubuntu下深度学习cuda+cudnn+anaconda3环境配置(看这一篇就够了)

3.下载现有的Lora模型(科学上网)

下载地址
点击Filters,勾选LoRA即可。
在这里插入图片描述

十二. 调用API(待更新)

1.API参数设置

2.postman调用API

3.Flask项目调用API

十三. 启动StableDiffusion

./webui.sh --api --no-half-vae  --no-gradio-queue
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/991730
推荐阅读
相关标签
  

闽ICP备14008679号