[AIGC] Stable Diffusion LoRA 训练 – 消费级 GPU 分析测评

英文原文:https://www.pugetsystems.com/labs/articles/stable-diffusion-lora-training-consumer-gpu-analysis/

介绍

开发和微调人工智能模型可能是一个资源密集型过程,通常需要在大型数据中心中协同工作的大量强大显卡。从头开始训练新模型或调整现有模型所有参数的另一种方法称为Low-Rank Adaptation低阶适应 (LoRA)。 LoRA 涉及通过显着减少的参数组来微调模型,从而实现更高效的过程,并且只需要以前所需资源的一小部分。

正如我们在最近的文章中所承诺的那样,我们比较了各种专业级 GPU 的性能,我们继续进行 LoRA 测试,这次重点关注一些消费级 GPU。 LoRA 是一种流行的方法,可引导 SD 等模型获得更具体、更可靠的输出。例如,您可以添加一个经过“DeLorean”图像训练的 LoRA,以输出可靠模仿该特定车辆特征的汽车图像,而不是提示输入“汽车”并接收 SD 对汽车特征的想法。

根据数据集的大小,训练 LoRA 仍可能需要大量的计算时间,通常是几个小时,甚至可能是几天。此外,根据您使用的设置,它可能需要大量 VRAM,这使得 NVIDIA RTX 卡等专业 GPU 成为您经常做的事情的理想选择。然而,如果您只是进行测试,或者不投资此类卡,那么尽管它们的 VRAM 容量比较有限,并且它们不是为高持续负载而设计的,消费类 GPU(如 NVIDIA GeForce)绝对可以完成工作。

在本文中,我们将使用 kohya_ss 训练脚本和 bmaltais 的 GUI 来检查在 Ubuntu 22.04.3 中训练 SDXL 标准 LoRA 模型时的性能和 VRAM 要求。尽管除了标准 LoRA 之外还有更多选项,例如 LoHa、LoCon、iA3 等,但我们更感兴趣的是测量性能基线,而不是针对文件大小、保真度或其他因素进行优化。这也意味着我们不会关注影响最终产品行为但不会影响训练期间性能的各种设置,例如学习率。

测试设置

Threadripper PRO Test Platform
CPU: AMD Threadripper PRO 5995WX 64-Core
CPU散热器:Noctua NH-U14S TR4-SP3 (AMD TR4)
主板:华硕 Pro WS WRX80E-SAGE SE WIFI,BIOS版本:1201
内存: 8x Micron DDR4-3200 16GB ECC Reg. (共 128GB)
GPUs:
AMD Radeon RX 7900 XTX
Driver Version: 6.2.4-1683306.22.04
NVIDIA GeForce RTX 4090
NVIDIA GeForce RTX 4080
NVIDIA GeForce RTX 3090
NVIDIA GeForce RTX 2080 Ti
Driver Version: 535.129.03
电源:Super Flower LEADEX Platinum 1600W
存储:三星 980 Pro 2TB
操作系统:Ubuntu 22.04.3 LTS
基准测试软件
Kohya’s GUI v22.2.1
Python: 3.10.6
SD Model: SDXL
AMD: PyTorch 2.1.1 + ROCm 5.6
NVIDIA: PyTorch 2.1.0 + CUDA 12.1
xFormers 0.0.22.post7
优化器:Adafactor
参数:scale_parameter=False,
relative_step=False, warmup_init=False
其他参数:network_train_unet_only,
cache_text_encoder_outputs, cache_latents_to_disk

为了了解各种专业级显卡的性能,我们决定研究一些 NVIDIA 的顶级 GPU,以及 AMD Radeon PRO W7900。 NVIDIA 绝对是目前 AI 工作负载的首选(这就是我们测试多个 NVIDIA GPU 的原因),但 AMD 最近一直在做大量工作来赶上这一领域。在大多数情况下,NVIDIA 仍然是我们的首选,但我们希望尽可能包含至少一个 AMD GPU,以便密切关注他们的进展。

如果您拥有 AMD GPU 并且有兴趣利用 ROCm 来训练 LoRA 和其他 ML 任务,我们建议您遵循 AMD 的 ROCm 安装指南,以确保您的系统已正确安装和配置 ROCm。

确认 ROCm 安装正确后,我们继续使用 conda 为 kohya_ss 设置两个虚拟环境(一个 AMD 和一个 NVIDIA),克隆存储库并安装要求。默认情况下,会安装基于 CUDA 的 PyTorch 版本,因此对于 AMD 虚拟环境,我们卸载了该版本并安装了 ROCm 版本

安装正确版本的 PyTorch 后,我们就可以配置并运行 kohya_ss!

我们决定使用 StabilityAI 提供的基础模型来训练 SDXL LoRA,使用我自己的一组 13 张照片,每张照片的大小调整为 1024×1024,与 SDXL 的默认图像大小相匹配。由于我们不关心输出的质量,因此我们不使用任何标题或正则化图像。

由于我们正在训练相对较大的图像,如果没有适当的配置,即使具有 48GB VRAM 的 GPU 也可能在训练期间耗尽内存。要启用的最有影响力的设置之一是某种形式的Cross-Attention(交叉注意力),无论是 SDPA 还是 xFormers。我们测试了启用 SDPA 的 AMD 卡以及同时启用 SPDA 和 xFormers 的 NVIDIA 卡。

根据 SDXL 训练的建议,我们启用了以下设置:network_train_unet_only、cache_text_encoder_outputs、cache_latents_to_disk

值得庆幸的是,这些选项不仅节省了一些 VRAM,还提高了训练速度。

Gradient checkpointing(梯度检查点)可用于显着减少 VRAM 使用量,但会带来显着的性能损失。然而,我们在这里测试的 GPU 都不需要使用梯度检查点,因为它们具有足够的 VRAM。

因为我们发现报告的速度和 VRAM 使用情况在几分钟的训练后趋于平稳,并且额外的 epoch 产生了相同的结果,所以我们选择使用每个图像 40 个步骤的 1 个 epoch 来测试每个 GPU,使用批次总共 520 个步骤大小为 1。

最后,我们使用带有以下参数的 Adafactor 优化器:scale_parameter=False、relative_step=False、warmup_init=False

性能 – 1024×1024

Insufficient VRAM (显存不足)

第一张图表是我们为何扩展本轮测试参数的完美示例。由于 VRAM 限制,唯一能够完成整套测试的 GPU 是 RTX 4090 和 RTX 3090。

正如我们在 Radeon PRO W7900 中看到的那样,我们发现 Radeon RX 7900 XTX 在(Net Dim)网络维度 1 上表现不佳,尽管所有 NVIDIA GPU 都在该设置下获得了最高分数。我们仍然没有很好的解释,但这至少证实了这是 AMD 范围内的问题,而不是特定于单个型号的问题,也不是我们其中一张卡的硬件问题。

此外,我们发现 SDPA 和 xFormers 性能之间的模式(图表 #3)在这一轮测试中也成立:Ada 一代卡在使用 SDPA 时表现更好,而老一代卡在使用 xFormers 时表现稍好。

第二张图介绍了使用梯度检查点的第一个结果,它降低了 VRAM 要求,足以完成所有测试,除了 2080 Ti 的 256 维测试之外。我们可以看到,启用梯度检查点后,Radeon RX 7900 XTX 和 RTX 3090 的性能下降了约 22%,而 RTX 4090 的性能下降了约 17%。

这里最大的收获是,如果您想在 1024×1024 下训练 LoRA,获得最佳性能的两个关键因素是:获得尽可能多的 VRAM(至少 24GB),并且目前坚持使用NVIDIA 胜过 AMD。

显存使用 – 1024×1024

深入研究 VRAM 使用情况,正如我们在 Radeon PRO W7900 中看到的那样,我们发现 Radeon RX 7900 XTX 的 VRAM 使用率比 NVIDIA 同类产品高得多。这导致 256 维测试无法成功完成,尽管它与 RTX 4090 和 RTX 3090 一样拥有 24GB 内存。

然而,我们可以看到,启用梯度检查点后(图 #2),VRAM 要求下降了令人印象深刻的 30-50%,甚至使 11GB RTX 2080 Ti 也能参与除 256 维测试之外的所有测试。

与我们之前的文章一样,我们没有发现 SDPA 和 xFormers VRAM 使用情况存在显着差异。

性能 – 512×512

正如我们在本文开头提到的,由于这些消费类 GPU 上的 VRAM 容量较低,我们选择扩展测试范围以包含数据集的较低分辨率版本,这会产生一些有趣的结果。我们就看到我们测试过的 AMD GPU 消除了网络维度 1 性能不佳的问题。

在这种较低的分辨率下,很难进行有意义的比较,因为使用 512×512 数据集的性能数据在所有测试的 GPU 上几乎相同

这有点奇怪,因为您会期望 RTX 4090 击败更老的 RTX 2080 Ti,这表明我们可能正在系统或软件的其他地方寻找瓶颈。由于我们使用的是强大的 64 核 Threadripper PRO 处理器和 8 通道 RAM,因此这可能是任何其他用户也会遇到的相同瓶颈。

换句话说,如果您只使用 512×512 图像训练 LoRA,那么更快的 GPU 在性能上的差异可能小得惊人

显存使用 – 512×512

与 1024×1024 相比,512×512 数据集的 VRAM 要求相当适中,通常下降约 40-50%。这足以减少除 RTX 2080 Ti 之外的所有 GPU 都能够在不使用梯度检查点的情况下完成测试套件。

与原始数据集相比,为较低分辨率的数据集启用梯度检查点对 VRAM 使用量的影响并不显着,最多仅减少约 15-20% 的使用量。它确实让 RTX 2080 Ti 完成了 128 维度的测试,但即使使用 512×512 的梯度检查点,256 维度的测试对于 11GB 卡来说仍然太多了。

结论

这些结果表明消费级 GPU 能够训练 LoRas,特别是在使用 512×512(SD1.5 的默认分辨率)等较小分辨率时。然而,当使用更高分辨率的图像(例如 SDXL 的 1024×1024)进行训练时,我们很快就会开始遇到 VRAM 小于 24GB 的 GPU 上的 VRAM 限制。

尽管如此,梯度检查点选项可减少 VRAM 使用量,甚至可以使用 10-12GB 卡进行具有一系列网络维度和数据集分辨率的 LoRA 训练。然而,配备 24GB VRAM 的 GPU 将为训练参数提供最大的灵活性,并且 NVIDIA 的 Ada 一代 GPU 在此类工作负载方面继续优于竞争对手。

除了 VRAM 问题之外,消费级 GPU 面临的一个大问题是,它们不像专业 GPU 那样专为长期、持续的重负载而设计。 LoRA 的偶尔训练不太可能导致任何硬件问题,但如果您希望 ML 训练工作负载运行数月或数年,我们强烈建议您投资专业级 GPU,例如我们在 Stable Diffusion LoRA 中测试的 GPU训练 – 专业 GPU 分析文章

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"AIGC稳定扩散"是指人工智能全球中心(AIGC)通过稳定的扩散方法来推广和普及人工智能技术。 首先,AIGC稳定扩散的目标是将人工智能技术应用于各个领域,从而促进社会的发展和进步。通过稳定的扩散,AIGC能够确保人工智能技术的普及和应用是在可靠和可持续的基础上进行的。 其次,在AIGC稳定扩散的过程中,重点关注技术的质量和适用性。AIGC积极筛选和评估现有的人工智能技术,并与专家和机构合作改进和优化。通过确保技术的高质量和适用性,AIGC能够提供可靠和稳定的解决方案,满足不同行业和领域的需求。 另外,AIGC稳定扩散还注重普及和教育。AIGC通过举办培训、研讨会和交流活动,向各界人士普及人工智能技术的基础知识和应用方法。定期发布人工智能技术的最新发展和成果,提供资源和支持,帮助更多的人了解和应用人工智能技术。 最后,AIGC稳定扩散还重视合作和共享。AIGC与各国和地区的研究机构、企业和政府合作,共享资源和经验,促进人工智能技术的交流和发展。通过建立良好的合作网络,AIGC能够更好地推广人工智能技术,建立全球范围内的合作关系,实现共同的发展目标。 总而言之,AIGC稳定扩散是为了推广和普及人工智能技术而采取的稳定方法。通过质量和适用性的保证、普及和教育的重视,以及合作和共享的策略,AIGC致力于实现人工智能技术的广泛应用,推动社会的发展和进步。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值