英文原文:https://www.pugetsystems.com/labs/articles/stable-diffusion-lora-training-professional-gpu-analysis/
介绍
训练人工智能模型需要大量时间,并且可能需要使用数百甚至数千个显卡(通常在数据中心)一起工作才能完成任务。作为从头开始训练新模型或微调现有模型所有参数的替代方案,LoRA 被引入。 LoRA 是“Low-Rank Adaptation”的缩写,是一种使用更小的参数集微调模型的方法,并且不会从根本上改变底层模型。与传统的微调相比,这只需一小部分所需的资源即可进行微调。
今天,我们将在训练 LoRA 与 Stable Diffusion 一起使用时探索各种专业显卡的性能。 LoRA 是一种流行的方法,可引导 SD 等模型获得更具体、更可靠的输出。例如,您可以包含一个经过“M1 Abrams”图像训练的 LoRA,以输出可靠模仿该特定车辆特征的坦克图像,而不是提示输入“坦克”并接收 SD 对坦克特征的任何想法。
然而,根据数据集的大小,训练 LoRA 仍然需要大量的计算时间,通常是几个小时,甚至可能是几天。因此,如果您想训练 LoRA 或探索其他微调模型的方法而不仅仅是一种爱好,那么获得合适的 GPU 最终可以为您节省大量时间并减少挫败感。
在本文中,我们将使用 kohya_ss 训练脚本和 bmaltais’s GUI 来检查在 Ubuntu 22.04.3 中训练 SDXL 标准 LoRA 模型时的性能和 VRAM 要求。尽管除了标准 LoRA 之外还有更多选项,例如 LoHa、LoCon、iA3 等,但我们更感兴趣的是测量性能基线,而不是针对文件大小、保真度或其他因素进行优化。这也意味着我们不会关注影响最终产品行为但不会影响训练期间性能的各种设置,例如学习率。
我们将特别关注 NVIDIA (RTX) 和 AMD (Radeon PRO) 的专业 GPU,因为它们的大量 VRAM 和大量计算核心使它们非常适合此类专业 AI 工作流程。不过,我们将在即将发表的文章中测试消费级 GPU。它们通常不具备此类训练所需的 VRAM 容量,并且不适合长时间满负载运行,但其相对较低的成本使得此类卡对于那些刚刚入门的人来说很有吸引力在人工智能中。
测试设置
Threadripper PRO 测试平台 |
---|
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 PRO W7900 Driver Version: 6.2.4-1683306.22.04 NVIDIA RTX 6000 Ada NVIDIA RTX A6000 NVIDIA RTX 5000 Ada NVIDIA RTX A5000 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 也可能在训练期间耗尽内存。要启用的最有影响力的设置之一是某种形式的交叉注意力,无论是 SDPA 还是 xFormers。我们测试了启用 SDPA 的 AMD 卡以及同时启用 SPDA 和 xFormers 的 NVIDIA 卡。
根据 SDXL 训练的建议,我们启用了以下设置:network_train_unet_only、cache_text_encoder_outputs、cache_latents_to_disk
值得庆幸的是,这些选项不仅节省了一些 VRAM,还提高了训练速度。
梯度检查点可用于显着减少 VRAM 使用量,但会带来显着的性能损失。然而,我们在这里测试的 GPU 都不需要使用梯度检查点,因为它们具有足够的 VRAM。
因为我们发现报告的速度和 VRAM 使用情况在几分钟的训练后趋于平稳,并且额外的 epoch 产生了相同的结果,所以我们选择使用每个图像 40 个步骤的 1 个 epoch 来测试每个 GPU,使用批次总共 520 个步骤大小为 1。
最后,我们使用带有以下参数的 Adafactor 优化器:scale_parameter=False、relative_step=False、warmup_init=False
表现
![](https://i-blog.csdnimg.cn/blog_migrate/8192d748fa203b860c3285580e9379b7.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8512e43f46dfccba3302ffac69f0505d.png)
总的来说,我们在 SDPA 性能测试中没有发现任何异常情况,除了 AMD Radeon PRO W7900 在使用 Net Dim 1 时表现不佳。通常情况下,我们发现 Net Dim1 的每秒迭代次数最高,但出于某种原因,W7900 在这一维度上却很吃力。
尽管 xFormers 不适用于 AMD GPU,但我们决定使用 xFormers 测试 NVIDIA 端(图表 #2),并发现了一些有趣的结果。最新的 Ada 一代卡并没有随着网络尺寸的增加而降低性能,而是在某些级别上获得了轻微的性能提升:RTX 6000 Ada 在 Net Dim 64 处加速,RTX 5000 Ada 在 Net Dim 128 处加速。但是,Ada 的整体性能SPDA 的生成效果比 xFormers 更好,因此似乎没有太多理由将 xFormers 与这些卡一起使用进行 LoRA 训练。
对于上一代英伟达™(NVIDIA®)显卡,我们发现使用 xFormers 比使用 SDPA 性能略有提升,因此这些显卡可能值得使用 xFormers 而不是 SDPA。
W7900 的性能落后于此处测试的所有 NVIDIA 卡,与 6000 Ada 相比,平均性能差异约为 55-65%。
显存使用情况
![](https://i-blog.csdnimg.cn/blog_migrate/4ca95b13390735863c46ad133e72120d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6d70d5eeec07eb482269314bcbcca323.png)
对于像这样的大图像数据集 (1024×1024),VRAM 使用率相当高。正如预期的那样,我们发现 VRAM 使用量随着网络尺寸的增加而增加。 SDPA 和 xFormers 之间的 VRAM 使用情况没有显着差异,但我们确实发现 AMD Radeon W7900 在每个级别上使用的 VRAM 比每个级别上的 NVIDIA GPU 多出约 7GB。
在NVIDIA方面,令人高兴的是VRAM使用量没有超过20GB,这对于那些拥有24GB GPU的人来说是个好消息。根据此测试,具有 24GB VRAM 的 NVIDIA GPU 在不使用梯度检查点的情况下训练 SDXL LoRA 似乎不会遇到任何问题。然而,如果在我们即将进行的消费者级 GPU 测试中,我们发现 AMD 较高的 VRAM 使用率也适用于这些模型,那么更高的网络维度可能需要在训练 SDXL LoRA 时使用梯度检查点,这将导致性能损失。
总结
很高兴看到 AMD 在 ROCm 生态系统方面取得的进步,特别是在 2023 年下半年,而且现在比以往任何时候都更容易利用 AMD GPU 执行机器学习任务。尽管我们仍然看到 NVIDIA 在这一轮 LoRA 测试中占据了性能桂冠,但能够对两家制造商进行比较还是令人耳目一新,而且我相信,随着 ROCm 支持的成熟,我们将看到性能的提升。
本文介绍的任何 GPU 都能够训练 LoRA,但如果您经常训练 LoRA 以实现稳定Stable Diffusion,那么 Ada 一代 NVIDIA GPU 提供的性能可以为您节省大量时间花费了训练。这些结果表明,最新的 NVIDIA RTX 6000 Ada 48GB 比上一代 NVIDIA RTX A6000 48GB 快 24%,比 AMD 目前最好的产品 Radeon PRO W7900 48GB 快 55%。
虽然如果您经常进行此类工作,您应该使用这些专业级卡来最大限度地提高性能和灵活性,但它们肯定非常昂贵,并且如果您刚刚开始,可能很难证明其合理性。在即将发布的文章中,我们将使用一些更实惠的消费级 GPU 继续进行此测试,敬请关注更多 LoRA 训练结果!