模型广场全新上线,注册即免费体验 4090 高性能 GPU! 马上体验
行业资讯
优化 AI 图像生成:在容器化环境中使用 ControlNet 简化稳定扩散
发布时间: 2024-08-19 11:52

在任何容器化环境中使用 ControlNet 实现稳定扩散都会面临诸多挑战,主要是因为需要在图像中加入大量额外的模型权重。在本篇博文中,我们将讨论这些挑战以及如何缓解这些挑战。


用于稳定扩散的 ControlNet 是什么?


ControlNet 是一种网络结构,它使用户能够通过设置额外条件来管理扩散模型。它使用户能够使用单一参考图像对使用稳定扩散生成的图像进行极大的控制,而不会明显增加 VRAM 要求。ControlNet 彻底改变了 AI 图像生成,展示了稳定扩散等开放模型相对于 Midjourney 等专有竞争对手的关键优势。


用于稳定扩散的 ControlNet:参考图像(左)、Depth-Midas(中)、输出图像(右)

用于稳定扩散的 ControlNet:参考图像(左)、Depth-Midas(中)、输出图像(右)


请注意,参考图和最终图像之间的图像构图保持不变。这是通过使用深度图作为控制图像来实现的。此图像使用了Dreamshaper 模型、  MiDas 深度估计和 深度控制网。


实施 ControlNet 实现稳定扩散的挑战


然而,这一显著特点也带来了挑战。(截至撰写本文时)有 14 个不同的控制网与稳定扩散兼容,每个控制网都提供对输出的独特控制,因此需要不同的“控制图像”。


所有这些模型都可以在 Huggingface 上免费访问,位于不同的存储库中,每个模型大约有 4.3GB,总共需要额外的 60.8GB 存储空间。与最小的稳定扩散图像相比,这几乎增加了十倍。


此外,每个 ControlNet 模型都带有一个或多个 图像预处理器 ,用于解密“控制图像”。例如,从图像生成深度图是 ControlNet 的先决条件。这些额外的模型权重进一步增加了总 VRAM 需求,超过了 RTX3060 12GB 等常用显卡的容量。


在容器化环境中实现 ControlNet 的基本方法

在容器化环境中实现 ControlNet 的基本方法


在分布式云上的容器化环境中优化 ControlNet 实施


如果不考虑优化,构建用于连续 ControlNet 稳定扩散推理的容器映像可能会迅速膨胀。这会导致在将映像下载到运行它的服务器上时冷启动时间过长。这个问题在数据中心很突出,在 Salad等分布式云中更为明显,因为它依赖于速度和可靠性各异的住宅互联网连接。


双管齐下的策略可以有效解决这个问题。首先,将 ControlNet 注释隔离为单独的服务,或者利用提供的预构建服务。这种分工不仅可以减少稳定扩散服务中的 VRAM 要求和模型存储,还可以提高从单个输入图像和提示创建大量输出图像时的效率。


其次,不要为每个模型克隆整个存储库,而是在不使用git lfs 的情况下对模型存储库进行浅层克隆 。然后,使用 wget有选择地仅下载必要的权重,如稳定扩散服务 的 Dockerfile 所示 。仅此策略就可以节省超过 40GB 的存储空间。


稳定的扩散分割服务控制网

稳定的扩散分割服务控制网


最终结果是什么?两种服务均具有可管理的容器映像大小。ControlNet 预处理器服务包括所有注释器模型,大小高达 7.5GB,可在 RTX3060 12GB 上无缝运行。


即使包含所有 ControlNet,稳定扩散服务也高达 21.1GB,并且可在 RTX3060 12GB 上顺利运行。通过定制要支持的 ControlNet,可以进一步减少空间。例如,其生产映像中排除了 MLSD、Shuffle 和 Segmentation ControlNet,从而节省了大约 4GB 的存储空间。

  • 捷智算联系人