Hugging Face 远程 VAEs 用于推理端点

Hugging Face 推出了一项实验性试点,将变分自编码器(VAE)的解码过程委托给远程端点。此方法使用户能够通过将内存密集型解码阶段卸载到推理端点,在消费级 GPU 上执行高分辨率图像和视频合成,从而避免与本地 VAE 执行相关的显存瓶颈。

解决潜在空间扩散中的显存瓶颈

在潜在空间扩散模型中,VAE 解码器通常是生成最终阶段最耗内存的组件。对于使用消费级硬件的用户来说,这会成为高分辨率输出的重大障碍。Hugging Face 确定了两种常见的本地解决方案及其各自的缺点:

  • 卸载: 将 VAE 移动到 CPU RAM 会产生设备传输开销,从而增加整体推理延迟。
  • 平铺: 将图像分割成更小的块进行处理可以降低内存使用,但可能对最终图像质量产生负面影响。

通过将解码过程委托给远程端点,用户可以在不承受本地卸载延迟惩罚的情况下,保持高图像质量并降低本地显存消耗。

技术实现与集成

此实验功能由 Diffusers 团队开发,并使用带有自定义处理程序的 huggingface-inference-toolkit。实现是开源的,并且在过程中不会存储或跟踪任何数据。

与 Diffusers 的集成

要使用远程 VAEs,用户必须从 main 分支安装 diffusers 库:

pip install git+https://github.com/huggingface/diffusers@main

解码通过 diffusers.utils.remote_utils 中的 remote_decode 辅助方法处理。

模型支持与端点

Hugging Face 为几种流行模型提供了专用端点:

Model VAE Endpoint
Stable Diffusion v1 https://q1bj3bpq6kzilnsu.us-east-1.aws.endpoints.huggingface.cloud
Stable Diffusion XL https://x2dmsqunjd6k9prw.us-east-1.aws.endpoints.huggingface.cloud
Flux https://whhx50ex1aryqvw6.us-east-1.aws.endpoints.huggingface.cloud
HunyuanVideo https://o7ywnmrahorts457.us-east-1.aws.endpoints.huggingface.cloud

功能与用例

图像和视频生成

remote_decode 函数支持各种模态和模型特定的需求。例如,Flux 需要 heightwidth 参数,因为其潜在表示是打包的。HunyuanVideo 支持直接将结果输出为 .mp4 文件。

通过队列实现并发

由于解码发生在远程,用户可以实现队列系统以提高并发性。当远程端点正在解码当前潜在变量时,本地 GPU 可以继续在流水线中生成下一个潜在变量。这使得可以实现一个精简的生成-解码循环,以最大化硬件利用率。

性能与内存影响

本地 VAE 解码需求随着分辨率和 GPU 容量而急剧增加。对于分辨率为 1024x1024 的 Stable Diffusion v1.5,在 RTX 3070 上内存使用率可达 56.3%,而平铺解码可将其降低至 16%,但推理时间增加 77%。

对于分辨率为 1024x1024 的 SDXL,内存消耗更为严重,在 RTX 3080 上达到 93%,在 RTX 3070 上达到 96.4%,这使得远程解码成为无法在显存中容纳完整 VAE 过程的用户的可行替代方案。

Sources