随着人工智能技术的爆发,内容生成式人工智能(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,注册并登录到云服务后台。

点击“创建文件系统”按钮,填写信息并创建文件系统。

创建文件系统主要涉及以下选项:

  1. 文件系统名称:根据格式要求设置,名称需要平台唯一;
  2. 服务器区域:如果你的 Stable Diffusion 安装在云服务器上,那么就选择你所使用的云平台及所在的区域。如果你在本地电脑上安装使用 Stable Diffusion 则选择你的对象存储所在的云平台及区域。
  3. 回收站保存时间:这是 JuiceFS 的数据安全机制,开启回收站后,文件不会立即删除而是根据设置的时长继续保留在对象存储中,超期后才会实际删除。对于 Stable Diffusion 模型数据存储的场景,可以设置 0 关闭回收站。
  4. Bucket 名称:即用户自备对象存储的桶名称,你可以提前在云平台上创建存储桶,然后把桶名称填写在这里,也可以在稍后挂载 JuiceFS 文件系统时由客户端自动创建。
  5. 其他选项:保持默认即可

安装客户端并挂载文件系统

文件系统创建完成以后,会自动跳转到“设置”页面。现在,你可以在任何需要使用这个文件系统的计算机上执行以下命令安装客户端:

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 张即可,图片尺寸要保持与训练参数设置的规格一致,默认为 512x512 像素。

设置就绪,点击 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✿)

云上使用 Stable Diffusion ,模型数据如何共享和存储的更多相关文章

  1. 在英特尔 CPU 上加速 Stable Diffusion 推理

    前一段时间,我们向大家介绍了最新一代的 英特尔至强 CPU (代号 Sapphire Rapids),包括其用于加速深度学习的新硬件特性,以及如何使用它们来加速自然语言 transformer 模型的 ...

  2. 在腾讯云上创建一个玩具docker-mysql数据服务

    有时候开发需求会自己做一下测试数据,在自己电脑本地安装的服务多了电脑环境会搞的很乱,这时使用云服务器安装个docker服务是一个不错的寻找. 下面步骤是在腾讯云上安装docker-mysql镜像,并导 ...

  3. Lambda plus: 云上大数据解决方案

    本文会简述大数据分析场景需要解决的技术挑战,讨论目前主流大数据架构模式及其发展.最后我们将介绍如何结合云上存储.计算组件,实现更优的通用大数据架构模式,以及该模式可以涵盖的典型数据处理场景. 大数据处 ...

  4. 一面数据: Hadoop 迁移云上架构设计与实践

    背景 一面数据创立于 2014 年,是一家领先的数据智能解决方案提供商,通过解读来自电商平台和社交媒体渠道的海量数据,提供实时.全面的数据洞察.长期服务全球快消巨头(宝洁.联合利华.玛氏等),获得行业 ...

  5. 使用 LoRA 进行 Stable Diffusion 的高效参数微调

    LoRA: Low-Rank Adaptation of Large Language Models 是微软研究员引入的一项新技术,主要用于处理大模型微调的问题.目前超过数十亿以上参数的具有强能力的大 ...

  6. 如何在云上使用confd+ACM管理敏感数据

    在前面的一些文章中,我们介绍了如何在云上安全的存放配置数据,但是上面的方法都是有代码侵入性的,也就是说需要修改应用程序,本文会讲解如何使用 confd+ACM 在不修改代码的情况下动态修改应用所需的配 ...

  7. 手把手教你:将 ClickHouse 集群迁至云上

    前言 随着云上 ClickHouse 服务完善,越来越多的用户将自建 ClickHouse 服务迁移至云上.对于不同数据规模,我们选择不同的方案: 对于数据量比较小的表,通常小于10GB 情况下,可以 ...

  8. 终于可以从百度云上BOS读取数据到本地了

    终于可以从百度云上BOS读取数据到本地了

  9. ARIMA模型——本质上是error和t-?时刻数据差分的线性模型!!!如果数据序列是非平稳的,并存在一定的增长或下降趋势,则需要对数据进行差分处理!ARIMA(p,d,q)称为差分自回归移动平均模型,AR是自回归, p为自回归项; MA为移动平均,q为移动平均项数,d为时间序列成为平稳时所做的差分次数

    https://www.cnblogs.com/bradleon/p/6827109.html 文章里写得非常好,需详细看.尤其是arima的举例! 可以看到:ARIMA本质上是error和t-?时刻 ...

  10. 云计算之路-阿里云上:原来“黑色0.1秒”发生在socket读取数据时

    在昨天的博文(云计算之路-阿里云上:读取缓存时的“黑色0.1秒”)中我们犯了一个很低级的错误——把13ms算成了130ms(感谢陈硕发现这个错误!),从而对问题的原因作出了错误的推断,望大家谅解! 从 ...

随机推荐

  1. FileReader之获取文本文件内容为字符串

    FileReader之获取文本文件内容为字符串 FileReader官网描述: FileReader 对象允许 Web 应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 Fil ...

  2. 使用frp进行内网穿透

    frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP.UDP.HTTP.HTTPS 等多种协议.可以将内网服务以安全.便捷的方式通过具有公网 IP 节点的中转暴露到公网. frp is a ...

  3. 五月十三号Java基础知识点

    1.getFields()和getMethods()方法获得权限为public的本类的以及父类继承的成员变量和成员方法2.getDeclaredFields()和getDeclaredMethods( ...

  4. Java 异常处理:使用和思考

    概念 异常处理的概念起源于早期的编程语言,如 LISP.PL/I 和 CLU.这些编程语言首次引入了异常处理机制,以便在程序执行过程中检测和处理错误情况.异常处理机制随后在 Ada.Modula-3. ...

  5. Java:如何加密或解密PDF文档?

    在工作中,我们会将重要的文档进行加密,并且设置用户的访问权限,其他外部人员均无法打开,只有获取该权限的用户才有资格打开文档.此外,限制用户的使用权限,极大程度上阻止了那些有意要篡改.拷贝其中内容的人, ...

  6. Midjourney:一步一步教你如何使用 AI 绘画 MJ

    一步一步如何使用 Midjourney 教程:教学怎么用 MJ? 一.Midjourney(MJ)是什么? Midjourney是一款使用文字描述来生成高质量图像的AI绘画工具.这篇文章主要介绍了Mi ...

  7. CopyOnWriteArrayList的使用和优缺点

    CopyOnWriteArrayList允许并发读,读操作无锁,性能较高: 而写操作(含删除),比如向容器中添加/删除一个元素,则首先将当前容器复制一份,然后在新副本上执行写操作,结束之后再将原容器的 ...

  8. 解密Prompt系列6. lora指令微调扣细节-请冷静,1个小时真不够~

    上一章介绍了如何基于APE+SELF自动化构建指令微调样本.这一章咱就把微调跑起来,主要介绍以Lora为首的低参数微调原理,环境配置,微调代码,以及大模型训练中显存和耗时优化的相关技术细节 标题这样写 ...

  9. AWS CLI入门教程(亲测)

    背景 因为公司有用到S3,所以整理了一个S3的简单入门教程.当然,入门之后有其他更高级的用法需求,就靠自己去查文档了.入门的教程能让你快速上手,不至于翻阅一堆文档,容易被劝退.这里主要是介绍如何用cl ...

  10. Prism Sample 7 Module xaml

    这一节使用xaml标记甚为不解. 本节注册module 的方式同directory一节很类似.在那一节中,用工厂方法创建一模块目录: protected override IModuleCatalog ...