DD Course-01: 从0到1,在浏览器里运行 Disco Diffusion (全网最详细教程)
部分章节由团队小吴撰写
首先来澄清一个常见的误解:
有一些人认为 Disco Diffusion (以下简称 DD) 是由 Google 开发的,其实它只是运行在 Google 免费提供的计算资源上。
DD 是 2021 年上半年诞生的一个开源项目,是一个年轻的 TTI 开发社区的集体努力的成果。它还是机器学习-文字转图像生成领域的一个新生阶段的实验性应用模型,而非一个成熟的商业产品。所以 DD 并不像常见的绘图或设计软件/App 有一个友好的界面。而是使用一个 2600 行多代码的 ipynb 文件来完成交互和运行。
而我们使用 DD 的过程也就是修改和运行这个 ipynb 文件的过程。
>> 点这里了解 Disco Diffusion 能画出什么
什么是 ipynb 文件?
.ipynb 是 Jupyter Notebook 所创建的文件格式,就像 .docx 是 Word 文件一样。
Jupyter Notebook 是一款能在浏览器里运行的交互式开发环境。设计初衷是用于科学计算和数据科学的交互应用。编写和运行 Python 是最常见的用法,还能支持 R 和 JavaScript 40 多种编程语言。人们喜欢用它编写教程和代码、实时运行、跑数学方程和可视化。
它方便协作和共享,使用起来比传统的开发环境简单灵活很多(当然缺点也有,此处不提)。所以成为数据科学/机器学习社区内一款非常流行的工具。
Jupyter Notebook 是开源的。而 Colab 就是 Google 二次开发并托管的 Jupyter Notebook 服务。无需设置,你就可以直接使用,同时还能免费使用 Google 提供的 GPU 等计算资源。
Google 账号 和 Google Driver
(下面有详尽的如何注册设置账号的图文教程)
Colab 需注册/登陆后才能使用。所以你首先得开一个 Google(Gmail)账号
Google 的服务在国内无法直接使用,这部分请自己解决
每个 Google 账号都提供了 15G 的免费 Google Driver (云盘空间)。你运行 DD 需要的模型会被下载到你的 Driver 里
使用 DD 时会用到的 initial_image (底图)需要你上传到 Driver
每次运行完生成的作品图片也会被自动保存到 Driver 。包括不同进度时的中间步骤结果预览(需修改一处设置,随后介绍)
运行过程中,Colab 会请求授权取得你 Driver 的访问权限,请允许。
关于 GPU
运行所有 DD 这类的 AI 创作工具都需要消耗惊人的 GPU(显卡)计算资源。假设你希望在自己机器上本地部署DD,显存起码要有 10G,约等于 1080 ti 这个级别的 Nvidia 显卡起步(可以生成 1024*1024 尺寸的作品)。如果你显卡是 AMD 的,或指望在一台几年前的笔记本上跑个试试,我的建议是:想都不要想。
使用部署在 Colab 上的 DD,使用的 GPU 都是 Google 免费提供的(财大气粗)
Colab notebook 需要连接云端提供计算资源的虚拟机才能运行,免费账号最长有机会运行 12 小时,注意是有机会
Colab notebook 如果处于空闲状态的时间过长,会与虚拟机断开连接
每次你打开 Colab 开始运行,都会先随机抽到一款 GPU (像开箱子抽武器)。同一个 IP 地址在一段时间内刷新页面,被分配到也是同一款显卡(此结论未经过充分验证)
你会从这五款武器里随机抽取:
NVIDIA® Tesla® K80 (普通大剑)
NVIDIA® Tesla® T4 (标准重剑)
NVIDIA® Tesla® P100 (银骑士的剑)
NVIDIA® Tesla® V100(深渊大剑)
NVIDIA® Tesla® A100(霜之哀伤)
如果你抽到 V100,记得截屏转发锦鲤。
如果你抽到 A100,记得跟屏幕合影,把照片留给你孙子做纪念。
V100 VS A100
https://lambdalabs.com/blog/nvidia-a100-vs-v100-benchmarks/
Colab 的用量限制
由于是免费的,Colab 随机分配给你 GPU 资源供应没有保证,也不会无限量供应,用量限额会随用户们的总体用量消耗而变化。
Google 并没有公布免费用户每天的用量限额,因为整体系统消耗状况是快速变化、不可预测的。
长时间占着 Notebook 运行计算,或 GPU 资源消耗量大的用户,更有可能遇到用量限额,导致你暂时无法使用 GPU。但这个限制会在一天后重置,所以当你看到下面这个弹窗提示,第二天再来就行了,不用着急掏出钱包买 Pro。
Colab 不希望用户独占有限资源,所以在不用的时候,请关闭浏览器里 Colab 的标签页,并在不跑图的时候避免选用 GPU。这样会减少你遇到用量限制的情况。
关于要付钱的 Colab Pro 服务
每月支付折合 74 人民币,可以升级为 Pro 服务。升级后 Colab 承诺提供
更快的GPU——意味着出图的等待时间会变短
更长的运行时间——意味每天可拥有更多的 notebook 运行时长,闲置超时断开服务的频率也会更低)
更大的存储空间——但不是 Google Driver 的空间,如果试用了四五款模型不通用的TTI 工具,15 G 的默认存储空间很容易会被撑满。升级 Google Driver 需要另外付费。记得满了以后清理不需要的文件,并清空回收站。清空后回收的存储空间要等一段时间才可供 Colab 使用
我在 Colab 里干什么?
你在 DD 里修改的 Prompt、参数 这些操作相当在修改这个 ipynb 里的代码。所以,没错,你使用 DD 的过程,相当于你在改 Python 代码。
同学,你在写码了哦 ~~
但不用担心,你不会改坏它,每次刷新这个页面,这个ipynb 文件都会重置为原始状态,除非你把它另存为你自己的版本。
如果你还有一些额外的兴趣多学习一点 Python,可以访问 XUE.cn。是一个我团队之前开发的自学编程平台,基于Jupyter魔改。有很多 Python 自学课程和习题。浏览器里学写码,你可以从下面这本自学课程开始:
https://xue.cn/hub/app/books/1
下面是在 Colab 里运行 DD 的图文教程,从 0 到 1。
Colab 支持大多数主流浏览器,并且在Chrome、Firefox 和 Safari 的最新版本上进行了最全面的测试。但我们还是推荐使用谷歌浏览器 Chrome,下载地址:
https://www.google.com/intl/zh-CN/chrome/
设置浏览器语言
如果已有Google 账号,直接跳到下一主题。
注册前,如果浏览器语言是中文,需要将浏览器设置为纯英文,注册完再改回中文,不然手机验证时会有如下图提示 This phone number cannot be used for verification.(该手机号不能用于验证):
点击浏览器右上角三个小圆点,点击设置:
点击 高级 (Advanced),语言 (Language),添加语言 (Add language)
在弹窗里拖拽滚动条,将 英语 添加进来。也可以在弹窗右上角输入 EN 快速搜索到 英语。
点击 英语 这一行右端的 三个点,从设置框里 勾选 以这种语言显示 Google Chrome
点击 中文 这一行右端的三个点,从设置框里 移除(中文)。
点击 重新启动按钮 重启浏览器。
注册完,同样的操作可将中文添加进来。
下面是英文界面的引导(等你完成账号注册后,再视需求,改回为中文界面)
Google 账号注册
开始注册。浏览器打开谷歌登录页:
https://accounts.google.com/signin
点击创建账号,为自己创建:
如下图,填写完用户、账号名,密码,点 Next:
国家选择中国,输入你的手机号,点 Next:
输入手机收到的 6 为数验证码,点验证 Verify:
输入生日(年龄不能太小,否则会拒绝注册),选择性别:
点跳过 Skip:
拉到最下面,点同意 I agree:
账号就注册成功啦。准备好,进入 Disco Diffusion 的魔法世界。
第一次运行 Colab notebook
点击打开 Disco Diffusion v5.2 的 colab notebook:
https://colab.research.google.com/github/alembics/disco-diffusion/blob/main/Disco_Diffusion.ipynb
https://colab.research.google.com/drive/10HUmA5laY1e1q7sYGg19Ys2lFM60M_T5(这个是最新版本,加了对 ViT/L-14@336px 模型的支持和对称优化。但 ViT/L-14@336px 需要抽到非常好的 GPU 资源才能勾选)
从来没有使用过 Notebook 的同学看见这个页面可能有点心慌,Don’t panic!非常简单。我做了一个极简的 ipynb 的文件用来演示结构,一看就明白。
Tip:如果无意间点开了显示所有代码,将鼠标放代码上,右键选择 [表单]--[隐藏代码],将代码隐藏:
这个 DD 的 ipynb 分两部分, “前言” 和 “设置”( 5 步)
第一部分 Credits & Changelog + Tutorial
包含了 Disco Diffusion 的简短介绍,项目历史,贡献者及其贡献,更新日志,授权协议和教程。
这里的文档已经严重过时。完全可以不看,所以不需要打开 “Tutorial” 前面的折叠箭头。
跟当前版本匹配的文档需要查看非官方指南:Zippy's Disco Diffusion Cheatsheet
https://docs.google.com/document/d/1l8s7uS2dGqjztYSjPpzlmXLjl5PM3IGkRWI3IiCuK7g/edit
这个文档我已经取得了作者 Zippy 的翻译授权,跟团队里的小吴同学一起翻译了完整版本,工作接近尾声,这周就会分章节发布。
授权协议使用 MIT License,说明 DD 是开源,免费,可商用的(但是,使用这个工具生成的艺术品,如果商用,可能需要注意避免使用风格特别明显的艺术家的风格,有侵权风险)
第二部分 包含了 DD 的 5 步设置,新手也不需要动里面的大部分设置:
1. Set Up,运行模型的资源准备工作。包括:
检查 GPU 状态(这里可以看到你抽到了什么GPU)
连接谷歌云盘
安装、配置依赖项
定义功能函数等
Set up 的准备工作会需要你在多个弹窗里点确认。一律允许就可以。只要没有卡住不动 或 出现红色 就算运行通过。
2. Diffusion and CLIP model settings,图片生成和Clip 引导模型的设置。(在这可以选择和配置模型。暂时不用管)
3. Settings,设置要生成的图像/动画的参数。包括:
基础设置(重要)
动画设置
高级设置
提词 Prompts 修改(重要)
4. Diffuse!,运行工具正式生成图像。(这里你能实时看到图片生成过程)
5. Create the video,运行工具正式生成视频。(暂时我们不用看这块)
使用默认设置生成第一张图片
点击菜单栏里的 代码执行程序(Runtime),点击 全部运行(Run all)
如果你没找到菜单栏,请复习上面 极简 ipynb demo 截图说明。
点击 仍然运行:
点 确定:(用的不是你本地的内存,不要怕)
点击 连接到 Google 云端硬盘
弹出对话框选择你想授权给 Colab 的 Google Driver 账号:
下拉弹窗的滚动条,点击底部的 允许:
多点耐心,第一次运行 DD 会下载多达 3G 的模型到你的 Google driver 里。但以后运行都不再需要等下载了。。
单元格的运行状态是你需要关注的。
长得像播放器图标的运行按钮前面有绿色对勾代表已运行通过
中间变方块的运行按钮代表正在运行中。点击它可以中止运行
运行按钮变成红色意味着遇到问题。需要查看出错信息
点击变成红色的运行按钮尝试再次运行
常见出错可能包括
Google Driver 空间不足
跟云端提供计算资源的虚拟机的连接终端
超过本日免费试用限额
运行过程中你可以随时点击菜单里的 代码执行程序(Runtime),中断执行(interrupt execution),来结束程序运行。
但第一次使用 DD 建议不要中止,让程序自动执行完成初始化。
等候的过程中,你可以在目录里点击1.1 Check GPU Status,看看自己是不是抽到了史诗级 GPU。图中显示我们这次抽到了 标准重剑 T4:
在目录里点击 3. Settings 找到 Prompts ,有一个 DD 默认写好的 Prompt :
"A beautiful painting of a singular lighthouse, shining its light across a tumultuous sea of blood by greg rutkowski and thomas kinkade, Trending on artstation", "yellow color scheme"
"一幅美丽的画,画的是一座奇特的灯塔在,光芒照耀着一片动荡的血海,参考艺术家 Greg Rutkowski 和 Thomas Kinkade,Artstation 流行画风, 黄色配色。"
第一次运行我们不修改 Prompt,让这个 ipynb 完整执行。
一切顺利的话,你将会在 4. Diffuse ! 的单元格里看到图片正在生成。
初始是一片灰色的噪点,色彩和形状慢慢从噪点里浮现出来。你的第一张 AI 绘画作品正在穿越神经网络,前来和你相遇。
图片上面的 batches 进度条:代表这个 Prompt 会一次生成 50 张,目前正在生成第一张。什么人想要 50 张灯塔???
而当前正在生成这张作品的进度条在图片底部。如下图底部,
2%:当前进度。
4/240:已经运行完 240 步里的前 4 步。
[00:16<16:15]: 已耗时16 秒,还需要 16 分 15 秒出结果。
完成后,每个人都会收获一张跟下图风格类似的作品,但每个人每次执行,结果都会有所不同,是独一无二的。
此后你也要经常意识到,跟你打交道的是概率模型,没有什么确定的,意外和随机是 DD 不可分离的属性。
把灯塔留作纪念吧,你不会再想生成它了。
再往前一步
如果你想再来一张别的, 先点击下面截图 Do the Run ! 前面的运行按钮,让它中止。
顺便把 n_batches:50 改为 1 或者2,这样每个 Prompt 就只会出 1 或 2 张图。
修改 prompt:试试下面的
a detailed matte painting of blue ocean, waves, a black whale flying in the sky, by Caspar David Friedrich, Trending on artstation
这段文字替换掉原来的 prompt。注意要保留 两端的 英文双引号。如果 prompt 在一行里包含了太长的文本会报错。需要如下拆成 2 行,用英文逗号隔开两组双引号包围的文本。
"the first line",
"the second line"
注意是替换掉 0: ["_________"], 而不是 100: ["________"]。
100 的给动画设置用的。你可以再 “100” 前面加一个 # 注释掉它。眼不见心不烦。
是的,你又在写码了。
改完后要先运行一次 Prompt 这个单元格,你的修改后才能生效。
再运行 Do the RUN! ,开始生成图片。
回收作品文件
所有生成完的图片都保留在你的 Google Driver。当然你也可以页面上直接图片右键另存为。下面网址访问:
https://drive.google.com/
按图示路径找到 TimeToDisco 目录。
如果你不喜欢DD,想清理掉占空间的模型文件,请按图示路径找到 models 目录,删除,清空回收桶。
祝玩得愉快
——————
下一篇教程讲 如何有效构建 Prompt
关于 Colab:https://research.google.com/colaboratory/faq.html?hl=zh-CN