“程序员的双手是魔术师的双手,他们把枯燥无味的代码变成了丰富多彩的世界。”
十几年前还在上大学的我,在《疯狂的程序员》中第一次看到这句话时,忽然间仿佛就明白了我学习计算机专业的意义。代码本身是没有价值的,就像一块砖头放在路边是那么的不起眼,但当无数的砖瓦按照蓝图堆叠在一起时,矗立在大地上的那幢大楼就赋予了它们新的使命。电脑上运行的每一个软件、手机里的每一个App、甚至是洗衣机上的全自动洗涤烘干功能,背后都是由数不清不起眼的类和对象组成,当高低电平代表的0和1按照程序员的意志有序的组合在一起时,一个欣欣向荣的软件世界就诞生了。
那本书里提到了一个神奇的技术——遗传算法,在智能手机尚未普及的那个年代,普通人很难能够预知到在未来会有那么多人能够享受到软件行业发展所带来的便利。所以当看到作者绝影在书中提到可以利用遗传算法将老照片修复为高清图片时,着实还是让我吃了一惊。到了大四考研报名时,我也基于对这个技术的浓厚兴趣而选择了神经网络方向。只是因为提前找到了工作,所以后来并未去考试,此为后话。
一晃十几年过去了,技术革新的速度远比人的成长要快。在前几年我们提到人工智能生成照片还只是 DeepFake 这种常被用来伪造合成假照片的技术,而到了今年,在艺术创造领域AI甚至已经可以帮我们作画了。尽管网络上有一些画师带有偏见的认为AI只是“缝合”别人的作品,但其实只要想一下模型文件仅有几个G的大小,甚至远远小于用来训练的素材的文件体积,就可以很容易想通这个道理——尽管计算机不懂艺术,但它已经知道应该如何“创作”艺术来“取悦”人类了。
国庆节前后,网络上开始兴起基于AI绘画开源项目的讨论,甚至也有一些乐于助人的搬运工整理了“一键启动”级别的整合包让大家学习使用,门槛已经低到了让完全不同编程的人也能运行起来的地步。但作为一个十几年经验的老程序员,尝试使用经 Github 托管的第一方项目代码可能会更安全,且二次开发的可能性更高,所以本文将尝试为大家简单说明一个“纯净”的 Stable Diffusion WebUI 项目是如何部署的。
本文将假定读者具备初步的计算机编程领域知识,至少能够了解以下几点:
了解并掌握 git 最基础的使用,至少能够顺利安装;
了解并能够成功安装 python 环境;
了解显卡驱动最简单的配置方法,且知道如何安装 CUDA。
01
运行环境
环境的搭建可以不与下述配置给出的完全一致,本文仅以作者自用的笔记本(小米游戏本2019款)为例,建议有条件的读者可使用更高配置的机器代替或升级。但必须要拥有一块支持 CUDA 的 NVIDIA 显卡。注:没有 NVIDIA 显卡也可以借助 CPU 的能力绘图,但性能将会被极大降低。
操作系统:Windows 11 (版本号 10.0.22621.870)
显卡:NVIDIA GeForce RTX 2060
内存:16GB DDR4 2666MHz
显卡驱动版本:522.25
CUDA版本:11.8
请注意,由于 pytorch 需要使用指定版本的 CUDA,请在安装时选择符合自己电脑运行环境的版本。CUDA Toolkit官方下载地址如下:
https://developer.nvidia.com/cuda-downloads
至于 Git 及 Python 不做过多赘述,程序员的电脑基本都会安装,如未安装也可自行下载。
作者使用的版本分别为 Git 2.34.0 及 Python 3.10.8。
Git:https://git-scm.com/
Python:https://www.python.org/
请注意,Python 默认安装时是没有勾选 Add Python To PATH 的,请在安装过程中留意勾上,或自行在环境变量中配置。
考虑到默认的 pip 包地址在大陆地区访问较慢,可使用 pip -v config list 命令查询配置的优先级并进行修改,如全局配置可创建文件 C:\ProgramData\pip\pip.ini,并在文件中保存以下内容:
[global]trusted-host=mirrors.aliyun.comindex-url=http://mirrors.aliyun.com/pypi/simple/
该配置的作用是将为 pip 配置一个阿里云的镜像地址,访问及下载速度相比默认地址将大大加快。
到这一步为止,基础的运行环境及依赖已然搭建完毕。
02
部署项目
本文示例采用的是比较火的由 AUTOMATIC1111 集成的项目,项目地址为:
https://github.com/AUTOMATIC1111/Stable-Diffusion-webui
截至目前,该项目已收获近 2万 Star,超 3千 Fork,算是近期超级大热门项目之一了。
打开一个想放置项目的本地目录,假设为 D 盘根目录,使用以下命令将项目 clone 至本地:
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git |
命令执行成功后,将会自动在 D 盘根目录下生成一个名为stable-diffusion-webui 的文件夹,在网速良好、硬件配置比作者列出的更高的情况下,仅需要双击打开 webui-user.bat 文件即可开启依赖装载及执行。由于首次启动需要下载大量的依赖项目,可能需要一定时间才能启动完成,当看到命令行出现以下内容时,说明已经启动成功:
Running on local URL: http://127.0.0.1:7860 To create a public link, set `share=True` in `launch()`. |
这时仅需在浏览器中打开地址http://127.0.0.1:7860 即可开启你的绘图之旅。
但如果仅仅只是成功打开页面的话,并无法代表我们能够正常生成图片,我们还需要为系统配置一个模型文件,这种文件的后缀为 .ckpt,需要放置在项目的 models 目录中。关于模型文件的介绍可参考项目 wiki:
https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Dependencies
而关于模型文件的下载,可从上述 wiki 中得知,其项目地址为:
https://huggingface.co/CompVis/stable-diffusion-v-1-4-original
出于可能会涉及的版权风险,本文无法直接给出下载地址,请通过上述 wiki 自行查阅,并未涉及较深的专业知识,只需具备一定的英文阅读能力即可看懂。
有些情况下,系统可能会长时间地卡在 “Installing torch and torchvision” 这一步上,这是因为这两个依赖体积确实很大,且在网络不好的情况下确实是需要相当长的时间下载还不一定能够成功,在遇到这种情况时,我们可以手动修改webui-user.bat文件来指定安装命令。
我们增加一行默认不存在的配置,用来指定要安装的依赖版本,请注意,这里的版本需要与我们系统环境安装 CUDA 版本相对应或兼容:
set TORCH_COMMAND=pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116
有时候我们还需要让网络上的其他机器可以也可以访问到我们已经部署好的服务,但项目默认指定了仅可本机访问,通过查询源代码,我们发现项目启动时绑定 server name 的环境变量为:GRADIO_SERVER_NAME,因此当遇到这种场景时,也可以在文件中添加一行:
set GRADIO_SERVER_NAME=0.0.0.0
正如文章前面所说,有些没有配备N卡的机器也是可以借助CPU来实现绘制能力的,可以尝试在参数COMMANDLINE_ARGS 中添加--skip-torch-cuda-test 来跳过 CUDA 检查。但生成图像的尺寸、质量及速度确实是会受到很大的限制。 对于具备一定编程基础的读者,可自行尝试从代码中发现更多的环境变量配置来解决自己面临的各种问题,本文基于电脑硬件配置水平与项目实际需要,最终的webui-user.bat文件内容如下:
@echo off set TORCH_COMMAND=pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116set GRADIO_SERVER_NAME=0.0.0.0set PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:128set PYTHON=set GIT=set VENV_DIR=set COMMANDLINE_ARGS=--medvram callwebui.bat
如果读者在运行及部署过程中遇到一些自己难以解决的问题,也可以留言告诉我,我会尝试协助你解决。
03
开始绘画
本文定义为入门向的介绍,所以不会提及过多的使用技巧,仅是从个人经验给出一些简单的规范和建议。净化网络,你我有责,我也不会在文中告诉你 NSFW 相关的任何生成规则,如个人的确有需要,请自行百度查找。
我们最常用的通常是 文生图(txt2img) 以及 图生图(img2img) 的能力,分别是使用描述性的文字让 AI 根据已有的模型生成图片,或是根据现有的图,加以描述性的文字来生成图片,而这个描述性的文字可以理解为图片的特征,如果你是通过文章中的 wiki 设置的模型,那么它是只支持英文的,所以你需要用英文来描述你的构图。
你可以同时指定你希望的图片特征,并尽可能排除掉某些元素。比如你希望生成一张图片,会出现大海、星空,但是不希望出现月亮,而且最好图片质量高一些,此时你就可以在图片关键词(Prompt)中填写best quality, sea, starry, stars,然后在负面关键词(Negative prompt)中填写 moon 将月亮排除出去。使用 2060 显卡仅需要稍微等待几秒钟就可以得出一张图,而且在种子(Seed)不同的情况下,每次生成的图片都会不同。
上面那种图我们选择的提示词相关度(CFG Scale)为 7,但事实上我们很多人都不明白这个数值的含义到底代表着什么,由于人与AI理解的不一致,有时候我们拿不准到底设置成多少会比较好,所以我们除了每次生成时手动调整这个值以外,也可以尝试使用脚本(Script)协助我们利用同一批关键词生成多份不一样相关度的图,并加以选择与比较。
我们可以尝试将脚本(Script)设置为 XY图表( X/Y plot),并在 X轴 的文本框中填写:7-21 (+4),表示我们将生成多组不同相关度的图,范围从 7~21 ,每次迭代的值 +4,那么理论上我们一次运行就可以得出 7、11、15、23 四组图片,没错,你会发现 23 超过了 21 的范围,这也是系统的设置所致,你可以自行尝试发现这个系统更多的特点。
对于图生图功能,更可以在现有的图片基础上帮你添加要素,基础的使用方法也是通过增加描述性的关键词,并配置相关度等参数。但有一个参数是对图生图功能更为重要的——去噪强度(Denoising strength),该参数可以指定你新生成的图片与原图之间的差异,强度越大则差异越大,通常情况下对于动漫人物的图,将该值设置在 0.2 以内时不会发生显著性的差异,通常只是在细节处发生修改,而值在 0.6 以上时,甚至可能构图都会发生一定的变化。介于篇幅有限,我也不再给出过多的细节,还请使用者自行实验。
关于 StableDiffusion 还有非常非常多的细节可以讨论,但在这里不做赘述,还请读者根据自己的习惯与喜好调教出更好的作品,甚至有些画师也可以根据自己的画风训练出自己的专属风格。技术没有原罪,技术也一直在发展,而且技术的发展速度也远超所有人的想象。AI画图是不是艺术,并非由AI决定,而是由欣赏艺术的“人”才能定义。如果AI生成的图片也能让你感到愉悦,那么这难道不是艺术吗?
文章的最后,由甘雨镇楼。
本文作者:星之星愿 公众号:星空online
评论列表 (条)