colab运行stable diffusion以及本地部署方法

新闻 2023-02-19
437

colab不需要下载东西, 网页运行;

本地部署就是本地,没啥好介绍的.

也是跟着网上一些大佬分享的方法, 自己各种坑踩了一遍记录一下详尽的流程. 一开始是给鸦鸦群里朋友们做小指南的hhh搬运一下~

目录

一、colab运行stable diffusion

0.准备: 获取Tokens和SD访问权限

前往huggingface主页注册账号,验证邮箱:https://huggingface.co/

*这里国内网路ip有可能出现400 captcha failed (就是i am not robot那个), 因为google验证被墙了,可以自行搜寻recaptcha的镜像添加使用教程. 还有一个邪道方法是用流量注册.(?)

点击下面页面获取new tokens, Role项改为write:https://huggingface.co/settings/tokens

生成后复制保存.

进入下面页面, 获取SD的model使用权限:

https://huggingface.co/CompVis/stable-diffusion-v1-4

第一块勾选已阅读, 点击Access reppsitory就可以了.

1.Setup

前往Stable diffusion的google colab page:https://colab.research.google.com/github/huggingface/notebooks/blob/main/diffusers/stable_diffusion.ipynb

打开后,保存副本至自己的账号云端并打开. (需要注册)

在菜单栏-代码执行程序-更改运行时的类型, 修改硬件加速器为GPU.运行前三个代码块:

!nvidia-smi
!pip install diffusers==0.2.4

!pip install transformers scipy ftfy

!pip install "ipywidgets>=7,<8"
from google.colab import output

output.enable_custom_widget_manager()

运行这部分最后一个代码块:

from huggingface_hub import notebook_login

notebook_login()

随后, 提示你输入Token. 把先前生成的Token填入, 显示login successful即可.

2.开始你的调教之旅, Run the pipeline

依次运行前两格, 这可能需要一些时间.

import torch
from diffusers import StableDiffusionPipeline

# make sure youre logged in with `huggingface-cli login`
pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", revision="fp16", torch_dtype=torch.float16, use_auth_token=True)
pipe = pipe.to("cuda")

*有兴趣的朋友可以看看每一代码块之前是如何一步步引导说明的, 当然也包括了一些参数设置是发挥了什么作用~ 可以玩得更加得心应手(●◡●)

来到第三块, 你可以修改一下prompt内容 (也就是关键词填写) 再run. 如果想生成不同的图片玩儿, 使用这一块已经足够了.

from torch import autocast

#下一行修改
prompt = "a photograph of an astronaut riding a horse"
with autocast("cuda"):
image = pipe(prompt)["sample"][0]

#图片保存
image.save(f"astronaut_rides_horse.png")

#或者你可以直接在这个notebook里显示查看.
image

下一块加入了Seed, 当你规定一个具体的seed值时, 每一次的图像将是一样的. 所以接着, notebook里告诉你, 调整一些参数, 观察发生了什么变化.

import torch

generator = torch.Generator("cuda").manual_seed(1024)

with autocast("cuda"):
image = pipe(prompt, num_inference_steps=15,
generator=generator)["sample"][0]
#显示
image

num_inference_steps越大, 一般而言效果越好.

后面还有同时生成几个的设置(row和col), 以及更改默认大小(512*512, )跟着它的提示修改相应参数就可以了.

二、本地部署stable diffusion

0.准备

打开github, 下载Stable Diffusion源码 (全部文件). 解压到目录 YOUR_PATHGitHub - CompVis/stable-diffusion点击下载anaconda. *最好不要安装在C盘, 但是空间大你随意. 要装python哦https://www.anaconda.com/打开anaconda powershell prompt. 输入:

conda install git

需要先授权, 再下载huggingface提供的模型(权重):https://huggingface.co/CompVis/stable-diffusion-v-1-4-original

sd-v1-4.ckpt(4G) sd-v1-4-full-ema.ckpt(7.4G)

二者择一即可. 放到一个目录 YOUR_MODEL (要用). 下载有点久,可以继续下面的.

1.环境搭建

进入之前的源码解压目录YOUR_PATH

cd YOUR_PATH
conda env create -f environment.yaml

*setup.py 这个文件在的目录就是你要cd的文件夹. 如果不熟悉操作的朋友, 可以一行一行改好了直接粘贴进去.

此时会很大可能会报错,如果出现 openAI/CLIP和taming-transformers这两个包的安装失败提示,继续输入命令:

git clone -q https://github.com/CompVis/taming-transformers.git YOUR_PATH\src\taming-transformers

git clone -q https://github.com/openai/CLIP.git YOUR_PATH\src\clip

保险起见, 之后进入YOUR_PATH\src中找到上面那两个文件夹,复制到:Anaconda安装目录 - anaconda\envs\ldm\Lib\site-packages中.激活环境

conda activate ldm
python setup.py install

你还需要继续安装几个重要的依赖包:

conda install pytorch torchvision -c pytorch
pip install transformers==4.19.2 diffusers invisible-watermark
pip install -e .

装pytorch时可能因为网路问题会很慢, 也有挺快的, 反正很玄学...

万事俱备, 连接你的模型.

之前下载好模型放的的目录为YOUR_MODEL 还记得吧?

依次输入命令:

mkdir -p models/ldm/stable-diffusion-v1/
ln -s <path/to/model.ckpt> models/ldm/stable-diffusion-v1/model.ckpt

第2行的<path/to/model.ckpt> 改为 YOUR_MODEL\下载模型的文件名.

比如: D:/123abc/sd-v1-4-full-ema.ckpt

这里需要花一两分钟等待, 不要着急 然后就可以开始使用啦!

之后运行还是缺包或者直接一步到位不想一个个安装的话, 根绝yaml更新环境配置, 绝对好用

conda env update -n ldm --file environment.yaml

2.快乐跑图

最少配置:

python scripts/txt2img.py --prompt "a painting of Mads Mikkelsen smoking"

--prompt "键入你的调教"

一些说明--ckpt ./stable-diffusion-main/models/ldm/sd-v1-4.ckpt 权重文件, 主页提到那4种, 我们用之前下载的那个模型就可以了. 所以这里默认不用改也不用加上这个关键词和seed不变时, 生成图片不变.outdir: 输出目录. 外面加引号""init-img: 如果一开始给了指定图片, 这是你放图片的地址.下面代码块的prompt里我删掉了50词的举例, 所以尽量具体地喂它, 或许可以生成更让你惊喜的图片.不熟悉指令的朋友可以观察一下格式: --xxxx(参数) 你的值

!!非常重要!!! 根据配置要设置好batch size(即n_samples=) 和图像分辨率大小

我本地3080ti 12g 生成默认大小(512*512) 不改batch size会超过显存, 改为1~2可以.

虽说是要1.5-2G的显存但是占用率一下子从0到了97%.

step不影响.

①text2img -文字描述生成图

python scripts/txt2img.py --prompt "a painting of Mads Mikkelsen smoking"
--plms
--outdir "output/"
--ckpt
--ddim_steps 100
--H 512
--W 512
--seed 8

②img+text 2 img- 图+描述生成图

python scripts/img2img.py --prompt "a painting of Mads Mikkelsen smoking"
--init-img ./input/yourpic.jpg
--strength 0.8
--outdir ./SD/output
--ckpt ./SD/models/ldm/sd-v1-4.ckpt
--ddim_steps 100

参数格式直接copy过来了, 可以看https://github.com/CompVis/stable-diffusion 主页的命令说明::>ω<::

usage: txt2img.py [-h] [--prompt [PROMPT]] [--outdir [OUTDIR]] [--skip_grid] [--skip_save] [--ddim_steps DDIM_STEPS] [--plms] [--laion400m] [--fixed_code] [--ddim_eta DDIM_ETA]
[--n_iter N_ITER] [--H H] [--W W] [--C C] [--f F] [--n_samples N_SAMPLES] [--n_rows N_ROWS] [--scale SCALE] [--from-file FROM_FILE] [--config CONFIG] [--ckpt CKPT]
[--seed SEED] [--precision {full,autocast}]

optional arguments:
-h, --help show this help message and exit
--prompt [PROMPT] the prompt to render
--outdir [OUTDIR] dir to write results to
--skip_grid do not save a grid, only individual samples. Helpful when evaluating lots of samples
--skip_save do not save individual samples. For speed measurements.
--ddim_steps DDIM_STEPS
number of ddim sampling steps
--plms use plms sampling
--laion400m uses the LAION400M model
--fixed_code if enabled, uses the same starting code across samples
--ddim_eta DDIM_ETA ddim eta (eta=0.0 corresponds to deterministic sampling
--n_iter N_ITER sample this often
--H H image height, in pixel space
--W W image width, in pixel space
--C C latent channels
--f F downsampling factor
--n_samples N_SAMPLES
how many samples to produce for each given prompt. A.k.a. batch size
--n_rows N_ROWS rows in the grid (default: n_samples)
--scale SCALE unconditional guidance scale: eps = eps(x, empty) + scale * (eps(x, cond) - eps(x, empty))
--from-file FROM_FILE
if specified, load prompts from this file
--config CONFIG path to config which constructs model
--ckpt CKPT path to checkpoint of model
--seed SEED the seed (for reproducible sampling)
--precision {full,autocast}
evaluate at this precision

版权声明: 发表于 2023-02-19。
转载请注明:colab运行stable diffusion以及本地部署方法 | 非常AI

相关文章