共计 7361 个字符,预计需要花费 19 分钟才能阅读完成。
随着人工智能技术的暴发,内容生成式人工智能(AIGC)成为了当下热门畛域。除了 ChatGPT 之外,文本生成图像技术更令人惊艳。
Stable Diffusion,是一款开源的深度学习模型。与 Midjourney 提供的间接将文本转化为图像的服务不同的是它容许用户自行搭配并训练本人的图像格调,这一个性吸引了泛滥的开发者。
也正因而,用户须要下载和装置模型数据来进行模型训练。模型数据是指用于训练和生成图像的数据集,它们通常占用很大的空间,并且须要常常更新和同步。模型文件小则几百 MB,大则几十上百 GB。 如果用户在不同的计算机上应用 Stable Diffusion,或者是团队进行共创,就须要在每台计算机上下载和装置雷同的模型数据,这样既浪费时间又节约空间。而且,如果用户没有及时备份模型数据,就有可能因为意外损坏或失落而造成不可挽回的损失 。
那么,有没有一种办法能够实现模型数据的长久化和共享存储呢?答案是必定的。
本文将介绍如何应用 JuiceFS 云服务创立一个文件系统,让它能够像移动硬盘一样,在任何部署了 Stable Diffusion 利用的计算机上插上即可应用,特地是对于团队应用的状况,JuiceFS 的共享存储能力能够令多个设施共享同一份预训练模型数据。
一、JuiceFS 简介
JuiceFS 是一款面向云原生设计的高性能分布式文件系统,在 Apache 2.0 开源协定下公布。提供齐备的 POSIX 兼容性,可将简直所有对象存储接入本地作为海量本地磁盘应用,亦可同时在跨平台、跨地区的不同主机上挂载读写。
如图所示,JuiceFS 文件系统由元数据引擎和对象存储组成,元数据引擎用来存储文件名、大小、权限等元数据信息,对象存储用来存储文件的数据块。应用基于网络的对象存储和数据库创立 JuiceFS 文件系统,它就具备了跨平台、跨网络的共享拜访能力。
为了解决对象存储和数据库的时延问题,JuiceFS 引入了缓存层,它会将频繁拜访的数据缓存到本地,晋升访问速度。缓存层能够依据用户的配置主动治理缓存空间和策略,保证数据的一致性和完整性。通过缓存层,JuiceFS 能够实现毫秒级的提早和近乎有限的吞吐量。
JuiceFS 文件系统反对多种拜访接口,包含 FUSE POSIX 挂载、S3 Gateway、CSI Driver、Hadoop HDFS API、WebDAV 等。既能够将 JuiceFS 挂载到本地像网盘一样应用,也能够通过专用接口将 JuiceFS 接入到特定平台应用。
二、应用 JuiceFS 创立共享存储
JuiceFS 有开源的社区版和付费的云服务版,它们的外围架构是统一的,区别在于社区版所需的数据库和对象存储均须要用户自行搭建,而云服务应用 JuiceFS 官网提供的数据库,同时提供了更多高级性能。应用 JuiceFS 云服务版,用户只需自备对象存储,在 JuiceFS 官网创立文件系统即可,整体会更简略不便。
因而本文会间接采纳 JuiceFS 云服务。对于想尝试上手的用户不必放心它的费用,创立一个 1TB 容量的文件系统目前是收费的。
阐明:JuiceFS 云服务价格计划中的容量是指用户在平台上能够创立的文件系统的最大容量。一个文件系统由平台提供的数据库和用户自备的对象存储组成,用户通过 JuiceFS 客户端拜访和读写文件系统,文件数据实际上是存储在用户本人的对象存储中的。换言之,收费档反对创立一个 1TB 的文件系统,就是指这个文件系统最多能够向用户的对象存储中存入 1TB 的数据。
创立文件系统
拜访 JuiceFS 官网 https://juicefs.com,注册并登录到云服务后盾。
点击“创立文件系统”按钮,填写信息并创立文件系统。
创立文件系统次要波及以下选项:
- 文件系统名称:依据格局要求设置,名称须要平台惟一;
- 服务器区域:如果你的 Stable Diffusion 装置在云服务器上,那么就抉择你所应用的云平台及所在的区域。如果你在本地电脑上装置应用 Stable Diffusion 则抉择你的对象存储所在的云平台及区域。
- 回收站保留工夫:这是 JuiceFS 的数据安全机制,开启回收站后,文件不会立刻删除而是依据设置的时长持续保留在对象存储中,超期后才会理论删除。对于 Stable Diffusion 模型数据存储的场景,能够设置 0 敞开回收站。
- Bucket 名称:即用户自备对象存储的桶名称,你能够提前在云平台上创立存储桶,而后把桶名称填写在这里,也能够在稍后挂载 JuiceFS 文件系统时由客户端主动创立。
- 其余选项:放弃默认即可
装置客户端并挂载文件系统
文件系统创立实现当前,会主动跳转到“设置”页面。当初,你能够在任何须要应用这个文件系统的计算机上执行以下命令装置客户端:
sudo curl -L https://juicefs.com/static/juicefs -o /usr/local/bin/juicefs && sudo chmod +x /usr/local/bin/juicefs
JuiceFS 是基于云的文件系统,收费档反对 100 台设施同时挂载应用,也就是说,你当初就能够在任意一台电脑上挂载并应用它,存入 Stable Diffusion 模型数据,而后在其余同样须要应用这些模型数据的服务器上同时挂载这个文件系统,让你所有的设施都能共享应用同一份预训练模型。
提醒:JuiceFS 云服务版目前仅反对 macOS 和 Linux 零碎,如果你心愿在 Windows 零碎上应用,能够通过 WSL 进行应用。你也能够尝试 JuiceFS 社区版,详情参考社区版文档。
三、应用 Stable Diffusion 访问共享存储
精确来说,Stable Diffusion 并不是一个繁多的软件,而是一系列开放源码的 AI 模型。要想应用这些模型来生成图像,就必须先装置或拜访能够运行模型的程序或平台,比方基于网页的 Stable Diffusion web UI、桌面版的 DiffusionBee、iPad 实用的 Draw Things 等。
如果你不想为了 AI 作图事后投入大量资金在电脑硬件上,能够思考应用云计算平台提供的 GPU 云服务器,一些抢占式实例每小时单价可能低至几元。下图是一台抢占式实例,它领有 8 核 CPU、32GB 内存、100GB SSD 硬盘和一块 NVIDIA Tesla T4 显卡(16GB GPU),单位价格绝对较低。 但抢占式实例的特点是会在平台上呈现更高的出价者时,服务器会被主动开释销毁,所以在应用这种云服务器时要分外留神模型数据的保留 。
接下来就以 GPU 云服务器为例,介绍如何装置 Stable Diffusion web UI。稍后你会发现,对于这种应用 Stable Diffusion 的形式而言,JuiceFS 的共享拜访个性几乎是锦上添花。
装置 Stable Diffusion web UI
这里假如在腾讯云创立了一个上述配置的 GPU 云服务器,它应用 Ubuntu 22.04 零碎。首先须要装置依赖的软件包和 NVIDIA 显卡驱动:
# 装置依赖
sudo apt install build-essential libgl1 dkms
# 切换至 root 用户
su
# 下载驱动(请到 NVIDIA 官网查找最新版链接,这里只是一个示例)wget https://cn.download.nvidia.com/tesla/460.106.00/NVIDIA-Linux-x86_64-460.106.00.run
# 装置显卡驱动
sh NVIDIA-Linux-x86_64-460.106.00.run --ui=none --disable-nouveau --no-install-libglvnd --dkms -s
# 查看驱动是否装置胜利(返回显卡信息代表装置胜利)nvidia-smi
显卡驱动装置结束,倡议重启零碎。而后,以普通用户身份装置 Stable Diffusion web UI 程序。
# 装置我的项目依赖
sudo apt install wget git python3 python3-venv
# 装置 Stable Diffusion web UI
bash <(wget -qO- https://raw.githubusercontent.com/AUTOMATIC1111/stable-diffusion-webui/master/webui.sh)
运行 Stable Diffusion web UI
Stable Diffusion web UI 装置在 Python venv 虚拟环境中,因而,在启动之前须要先激活虚拟环境。
# 激活虚拟环境
source venv/bin/activate
# 启动程序
python webui.py – –listen
程序启动胜利当前,就能够通过浏览器拜访了,假如云服务器的 IP 地址为 111.222.33.44,则拜访地址为 111.222.33.44:7860。
用 JuiceFS 存储模型
Stable Diffusion web UI 的模型文件位于 models 目录,依据类型把模型文件放到对应的文件夹即可,比方在 civitai 网站下载的 checkpoint 类型的模型就放到 models/Stable-diffusion 目录,而 VAE 模型则放到 models/VAE 目录。
理解了保留模型的目录构造,接下来就能够把 JuiceFS 文件系统挂载到模型目录了,回到 JuiceFS 官网控制台,关上文件系统的“设置”选项卡,如下图所示。
先将 JuiceFS 文件系统挂载到以后用户的 $HOME/jfs
目录,挂载过程中程序会询问文件系统的 token 以及对象存储 Access Key 和 Secret Key,依据提醒输出即可。
sudo /usr/local/bin/juicefs mount mymodels $HOME/jfs
提醒:请将挂载命令中 mymodels 替换成你的文件系统名,最初的挂载点门路也能够替换成你想要的门路。
文件系统挂载胜利当前,你当初能够把 $HOME/jfs
当作网盘来应用了,所有存入这个目录的文件都会保留到关联的对象存储中。与此同时,你能够在其余电脑上装置 JuiceFS 云服务客户端,执行雷同的挂载命令,共享读写其中存储的文件。
你能够把所有预训练模型都拷贝到 $HOME/jfs
目录,不过,为了科学管理不同类型的模型,倡议在 $HOME/jfs
中建设与 models 目录对应目录构造,比方创立一个 SD 目录专门存储 Stable-diffusion 实用的模型,建一个 VAE 目录存储 VAE 模型,再创立一个 Lora 目录存储 Lora 相干的模型,依此类推。
在 JuiceFS 文件系统中依据模型类别创立目录对之后的应用会很有帮忙,这便于应用 JuiceFS 的子目录挂载性能将特定的目录挂载到 models 下对应的子目录中,从而防止批改我的项目配置调整读取模型的地位。能够应用 JuiceFS 的子目录挂载性能,也能够应用软连贯将子目录映射到 Stable Diffusion 模型目录中。
比方,能够将 SD 目录挂载到 $HOME/stable-diffusion-webui/models/Stable-diffusion/jfs
,将 VAE 目录挂载到 $HOME/stable-diffusion-webui/models/VAE/jfs
等。
留神:这里假如 Stable Diffusion web UI 部署在
$HOME
目录,请依据理论信息替换子目录、挂载点门路和文件系统名称。
# 挂载子目录 SD 到 models/Stable-diffusion/jfs
sudo juicefs mount mymodels --subdir SD $HOME/stable-diffusion-webui/models/Stable-diffusion/jfs
# 挂载子目录 VAE 到 models/VAE/jfs
sudo juicefs mount mymodels --subdir VAE $HOME/stable-diffusion-webui/models/VAE/jfs
同样地,也能够应用软连贯来将 JuiceFS 的目录映射到模型目录:
# 假如文件系统挂载在 $HOME/jfs
ln -s $HOME/jfs/SD $HOME/stable-diffusion-webui/models/Stable-diffusion/jfs
挂载胜利当前,在利用界面的左上角点击刷新按钮即可看到所有可用的模型,如下图所示。
不要遗记,JuiceFS 是共享文件系统,应用同样的挂载形式,你能够把模型数据挂载到其余云服务器或本地电脑上。
四、训练本人的 Stable Diffusion 模型
除了应用预训练模型开箱即用的“文生图”、“图生图”性能以外,Stable Diffusion 的另一大劣势就是能够通过任意根底模型训练本人的模型。
Stable Diffusion 做模型训练的罕用形式次要有以下几种:
- 全模型微调 :用新数据集进一步训练根底模型,能够放弃根底模型能力,同时晋升模型的品质和成果。但须要更多的工夫和资源,也可能导致模型过拟合或欠拟合。
- Lora 微调 :为根底模型注入低秩矩阵,让模型可能适应新的数据和工作,能够简略的了解为给根底模型“打补丁”。长处是节省时间和计算资源,不会毁坏根底模型的能力。但这种形式也须要更多数据和训练技巧,根底模型的能力可能会成为它的局限。
- DreamBooth 微调 :应用大量特定主题图片对根底模型进行微调,产生一个能够独立应用的新模型。长处在于只须要筹备大量的训练图片,但可能导致新模型失去根底模型的特点或能力。
- 文本反转 :成果与 DreamBooth 原理相似,但实现办法不同。同样是让模型学会新的主题或格调,最终产生须要与根底模型一起应用的文件。毛病是在应用时须要通过特定的关键词来激活新训练的概念。
这里以 DreamBooth 为例介绍如何在 Stable Diffusion web UI 中进行微调训练。
DreamBooth 的原理
如上图所示,DreamBooth 的原理是用 3~5 张特定主题(比方一只小狗不同角度)照片对 Stable Diffusion 的根底模型进行训练,从而让模型把握这个特定的对象(比方,一只名为“Lafa”的狗)的特色。而后用“a Lafa dog in a bucket”(一只在桶里的 Lafa 狗)作为提醒词,模型就会生成这只小狗在桶里的照片。也就是说,只有提醒词中应用“a Lafa dog”,他就会间接应用这只小狗的特色来作图,而不是随机生成一只其余的狗。
在 Stable Diffusion web UI 中应用 DreamBooth
Stable Diffusion web UI 默认没有装置 DreamBooth 扩大,须要在 extensions 中搜寻并装置。
装置实现后,切换到 Installed 选项卡,点击 Apply and restart UI 按钮。如果依然没有显示 DreamBooth 的选项卡,则须要重启 Stable Diffusion web UI。
首次用 DreamBooth 微调,须要先创立一个新模型,如下图所示,输出新模型的名称,并抉择根底模型。创立新模型须要肯定的工夫,具体取决于硬件配置。
当初从新选中刚刚新创建的模型,咱们要对它进行微调训练。将筹备好的照片放到 Stable Diffusion web UI 可能读取到的地位。
而后在 Input 局部的 Concepts 选项卡中增加所筹备照片的实例提醒词、类别提醒词以及反向提醒词,另外还应该依据硬件配置调整训练的轮次、算法等设置。
值得注意的是,在筹备用于训练模型的图片时应该抉择一个人或物体不同角度的照片,尽量保障主体特色清晰没有遮挡,数量在 3~5 张即可,图片尺寸要放弃与训练参数设置的规格统一,默认为 512×512 像素。
设置就绪,点击 Train 开始训练,具体的训练时长取决于所采纳的硬件和训练周期等参数的设置。
默认状况下,训练时模型数据会主动写入新创建的模型,你能够随时切换到“文生图”查看模型的成果,在训练结束后,能够点击 Generate Ckpt 按钮将模型保留成 .ckpt 模型文件。
如下图所示,我用 5 张巧克力盒子作为输出,训练了一个名为 godi_box 的物体,只有在 Prompt 中应用这个关键词,他就会在场景中生成这个盒子。
同样地,应用 DreamBooth 训练的模型位于 models/dreambooth
目录,你能够用后面介绍的办法在 JuiceFS 文件系统中提前创立 DreamBooth 目录并挂载到 Stable Diffusion 中。
# 挂载子目录 dreambooth 到 models/dreambooth
sudo juicefs mount mymodels --subdir dreambooth $HOME/stable-diffusion-webui/models/dreambooth
五、总结和提醒
本文介绍了如何应用 JuiceFS 云服务创立一个共享存储,实现 Stable Diffusion 预训练模型数据的共享应用。JuiceFS 是一款面向云原生设计的高性能分布式文件系统,它能够将简直所有对象存储接入本地作为海量本地磁盘应用,亦可同时在跨平台、跨地区的不同主机上挂载读写。JuiceFS 为 Stable Diffusion 提供了一种高效、牢靠、易用的共享存储计划,解决了模型数据存储的难题。
在应用 JuiceFS 和 Stable Diffusion 的过程中,有一些注意事项和提醒,咱们在这里简要列举如下:
- 对象存储的存储和流量费用 :应用 JuiceFS 时,用户须要自行承当对象存储的存储和流量费用,特地是跨网络应用的上行流量费用,以及读写申请费用。倡议用户尽可能应用与云服务器雷同平台、雷同区域的对象存储,从而充分利用平台的内网线路节约开销。对于应用本地电脑的用户,对象存储倡议抉择与本人物理间隔近的地区,同时能够选用云平台的存储包、流量包、申请包等资源来升高应用老本。
- JuiceFS 的缓存空间和策略 :JuiceFS 会将频繁拜访的数据缓存到本地,晋升访问速度。用户能够依据本人的需要和硬盘空间来配置缓存空间和策略,如设置缓存大小、缓存有效期、缓存清理策略等。具体的配置办法能够参考 JuiceFS 的文档。
心愿本文可能帮忙您更好地应用 Stable Diffusion 来创作本人的数字艺术作品。如果您有任何问题或倡议,欢送分割咱们。感谢您的浏览和反对。
如有帮忙的话欢送关注咱们我的项目 Juicedata/JuiceFS 哟!(0ᴗ0✿)