找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 2092|回复: 2

【Python】Windows 10 搭建本地 dall-e playground 人工智障绘图

[复制链接]
发表于 2022-9-6 15:42:06 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
简介

DALL-E 人工智障绘图功能会根据你输入的文本句子进行绘图。它对中文的支持不是很好,输入一个英文的句子,生成出来的效果比较好。
不过实际上不管你输入什么、它效果都只能算是玩具级别。属于是恐怖谷玩具。因为这个 AI 在绘制人物,尤其是人脸、人体的时候,它并没有把人当人来绘制,所以很容易就缺胳膊少腿等。
根据群友 Kiemnagishra 的测试,发现使用 Unicode Emoji 颜文字来描述,可以达到较为准确的生成效果。

官方 repo:https://github.com/saharmor/dalle-playground

本教程教你如何在 Windows 上配置 DALL-E playground 后端。

准备工作

  • DALL-E 源码。
  • Windows 版 Python,推荐版本 3.8.10
  • NVIDIA 显卡,注意显存至少 6 GB,否则在绘图过程中会出现“资源耗尽”的报错。
    我的 RTX 2070 有 8 GB 显存,在同时生成多张图片的时候偶尔也会出现“资源耗尽”的报错。平均生成一张图需要 30 秒。
  • CUDA 11.0 驱动软件。如果你安装 CUDA 11.1 或者更高的版本,也行。
  • cuDNN 8 工具。
  • zlibwapi.dll。
  • 能够上外网的条件。此处所说的“外网”指的是你能访问 github,以及你能用 pip 安装 python 包的时候不至于下载速度太慢。


如果你没有 N 卡独显,却想要强行配环境运行 DALL-E playground,那么你可以不用配置 CUDA、cuDNN,也不用担心显存不足,但是生成的速度会变得极慢,一张图需要半小时才能生成。

安装 Windows 版 Python

下载:https://www.python.org/ftp/python/3.8.10/python-3.8.10-amd64.exe
下载后打开安装。

python38.PNG
如图所示,不需要安装 Python launcher,但是需要添加到 PATH 以便之后的命令行操作。

prog.PNG
装完退出即可。

安装 CUDA 11.0

打开这个链接:https://developer.nvidia.com/cuda-11.0-download-archive
根据下图逐步点开按钮进行下载。
cuda.png

下载后安装。

取得 cuDNN 8.4

不能直接点开下载直链来安装,而是要自己去老黄家官网找:
https://developer.nvidia.com/rdp/cudnn-archive

如果你找不到,你可以回帖后从百度云下载我上传的。
游客,如果您要查看本帖隐藏内容请回复
下载后备用。

取得 zlibwapi.dll

http://www.winimage.com/zLibDll/zlib123dllx64.zip

下载后备用。

下载 DALL-E 源码

从官方 repo 下载。
https://github.com/saharmor/dall ... refs/heads/main.zip

下载后解压到一个合理的位置,作为你的 DALL-E 环境的工作目录。

搭建后端

首先说明要点:
  • 需要在命令行使用 python -m pip install -r requirements.txt 来安装需要的包。
    安装的包数量很多,而且有一个包(jaxlib)默认没有 Windows 版,需要你手动安装这个包。
    手动安装方法:运行这个命令:
    python -m pip install jax==0.3.13 https://whls.blob.core.windows.net/unstable/cuda111/jaxlib-0.3.7+cuda11.cudnn82-cp38-none-win_amd64.whl
    安装后,这个 jaxlib 有个 bug,它的 cuda_prng.py 这个源码文件需要被删除,你需要手动删除。
  • 初次运行后端的时候,需要下载一堆东西。这个过程中,你需要以管理员身份运行,并且你必须确保运行的时候,环境变量 PATH 里面包含了你的 cuDNN 的 bin 目录(里面是 cuDNN 的 dll,但是这堆 dll 还不够,它们还要依赖 zlibwapi.dll)。
    没有必要将 cuDNN 的文件夹加入到 Windows 系统的环境变量里。它只需要你用 cmd 脚本运行它的时候,环境变量有这些 dll 即可。
    我在教程里会让你写一个 cmd 脚本,这个脚本设置它自己的 PATH 环境变量到 cuDNN 的目录里。每次双击这个脚本即可启动后端。
  • 后端运行起来后,你就可以用 POST 方法(使用 json 编码参数放到 POST 体里面)来使其绘图了。因此你需要写一个前端脚本,负责帮你生成 POST。
    后端的 API 可以直接通过观察 app.py 源码来看到。非常简单,就一个 ping 和一个 dalle。json 的字段也在里面写好了。返回的内容是图像数据的 base64 编码,直接解码为 bin 数组然后存储为 jpg 文件就行。

具体内容请继续看下文。

安装依赖的包。

首先找到你解压好的 dall-e 目录:
dalle.png

在空白处按住 Shift 点右键,在菜单里找到“在此处打开 Powershell 窗口”
ps.png

安装 jaxlib:

python -m pip install jax==0.3.13 https://whls.blob.core.windows.net/unstable/cuda111/jaxlib-0.3.7+cuda11.cudnn82-cp38-none-win_amd64.whl

jax.png

删除 jaxlib 的 bug 源码:
打开 Windows 文件资源管理器,并进入这个目录:

%AppData%\..\Local\Programs\Python\Python38\Lib\site-packages\jaxlib

找到 cuda_prng.py将其删除,或者将其改名为别的名字(比如 cuda_prng.pyunused)

cuda_prng.png

安装其他依赖项:(此时应当确保你的网络能上 github,如果你有 socks5 代理,你可以在使用 pip 安装了 pysocks 之后,在下面的命令的 pip 的后面和 install 的前面插入 --proxy=socks5h://代理地址:端口 )

python -m pip install -r backend\requirements.txt

clone.png

注意这一步比较慢。安装好了以后,回到之前的 dall-e 目录。然后把之前下载好了的 cudnn 丢进去:
cudnn.png

把压缩包的内容直接解压到当前目录:
extract.png

把解压出来的文件夹改名为 cudnn:(改好后,压缩包就不需要了,可以删了)
rename.png

打开 cudnn 文件夹,然后找到 bin 文件夹,打开它:
bin.png
inbin.png

找到你刚才下载好了的 zlib123dllx64.zip,进入 dll_x64 文件夹,找到 zlibwapi.dll,将 zlibwapi 解压到 cudnn 的 bin 文件夹:
zlib.png
zlibwapi.png

此时我们已经把各种该配好的都配好了,但我们现在需要以管理员身份运行一下 dall-e 的后端,它下载它的东西后,才能建立后端,然后就不用再以管理员身份运行了。
运行的方法是先以管理员身份打开 CMD,然后切换当前工作目录为你的 dall-e 目录,并启动后端一次。
adm.png

运行以下命令:

cd /d 你的dall-e目录
python backend\app.py --port 8000 --model_version Mega

adminrun.png

后端开始自己下载安装数据。等着它下载完它自己的包就行。

started.png

它下载好了以后,此时我们要编写一个启动后端的启动脚本,方便以后可以双击脚本运行后端。
回到 dall-e 目录,新建文本文档:
newtext.png

用记事本打开文本文档,并添加以下内容,然后保存:

@echo off
set PATH=%~dp0\cudnn\bin;%PATH%
python backend\app.py --port 8000 --model_version Mega
pause


保存后,将新建的文本文档改名改后缀为 runback.cmd。
runback.png

然后它这个后端就搭建好了。接下来是前端。其实 dalle-playground 的 repo 是提供了 frontend 的,但是它很大,需要你使用 npm 来安装。
俺寻思没必要。它的前后端协议非常简洁明了,直接查看 app.py 的源码就可以看到它后端吃一个路径为 /dalle 的一个 POST json,内容就是 { "text": 文本内容, "num_images": 生成图像个数 }

backe.png

于是我瞎几把写了个前端。
jsdom.png

前端代码下载:
front.html (3.24 KB, 下载次数: 2)

双击打开 front.html,输入英文的文本,就可以进行瞎几把 AI 绘图了。注意不要输入中文的文本,否则绘图效果很烂;而输入 emoji 则效果准确很多。
绘图的时候注意用任务管理器看 GPU 占用。

dalle.png

回复

使用道具 举报

发表于 2022-9-6 20:43:32 | 显示全部楼层
看到狗吃IPHONE那个图,忽然想起李云龙的那句“wolves go thousands of miles to eat meat, dogs go thousands of miles to eat shit”。
回复 赞! 靠!

使用道具 举报

 楼主| 发表于 2022-9-6 23:03:48 | 显示全部楼层
Golden Blonde 发表于 2022-9-6 20:43
看到狗吃IPHONE那个图,忽然想起李云龙的那句“wolves go thousands of miles to eat meat, dogs go thousa ...

狼行万里路以食肉,狗行万里路以吃屎,人行万里路以赛博朋克。
回复 赞! 靠!

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-12-22 09:03 , Processed in 0.040587 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表