跳到主要内容

Spaces ZeroGPU:动态 GPU 分配 for Spaces

ZeroGPU schema

ZeroGPU 是一套共享基础设施,用于优化 Hugging Face Spaces 上 AI 模型和 Demo 的 GPU 使用。它会按需动态分配和释放 NVIDIA H200 GPU,提供以下能力:

  1. Free GPU Access:让 Space 可低成本地使用 GPU。
  2. Multi-GPU Support:允许 Space 在单个应用中同时利用多块 GPU。

与传统的单 GPU 分配不同,ZeroGPU 通过更高的资源利用率和功耗效率,降低了开发者、研究者和组织部署 AI 模型的门槛。

使用和托管 ZeroGPU Spaces

  • 使用现有 ZeroGPU Spaces
    • 所有用户都可以免费使用 ZeroGPU Spaces(可以浏览精选列表)。
    • PRO 用户 在使用任意 ZeroGPU Space 时,拥有约 7 倍的每日配额,并在 GPU 队列中享有最高优先级。
  • 托管自己的 ZeroGPU Spaces

技术规格

  • GPU 类型:Nvidia H200 切片
  • 可用显存:每个工作负载 70GB

兼容性

ZeroGPU Spaces 设计为尽可能兼容大多数基于 PyTorch 的 GPU Spaces。对于 transformersdiffusers 等高层 Hugging Face 库,兼容性会更好。但仍需注意:

  • 目前 ZeroGPU Spaces 仅支持 Gradio SDK
  • 与标准 GPU Spaces 相比,ZeroGPU Spaces 的兼容性可能有所限制。
  • 某些场景下可能会出现一些意料之外的问题。

支持的版本

  • Gradio:4+

  • PyTorch:基本支持从 2.1.0 到最新版本

    See full list
    • 2.1.0
    • 2.1.1
    • 2.1.2
    • 2.2.0
    • 2.2.2
    • 2.4.0
    • 2.5.1
    • 2.6.0
    • 2.7.1
    • 2.8.0
  • Python:3.10.13

ZeroGPU 快速上手

要在 Space 中使用 ZeroGPU,请按照以下步骤操作:

  1. 在 Space 设置中选择 ZeroGPU 作为硬件。
  2. 引入 spaces 模块。
  3. 使用 @spaces.GPU 装饰依赖 GPU 的函数。

通过装饰器,Space 会在函数执行时请求 GPU,并在执行完成后释放。

使用示例

import spaces
from diffusers import DiffusionPipeline

pipe = DiffusionPipeline.from_pretrained(...)
pipe.to('cuda')

@spaces.GPU
def generate(prompt):
return pipe(prompt).images

gr.Interface(
fn=generate,
inputs=gr.Text(),
outputs=gr.Gallery(),
).launch()

注意:在非 ZeroGPU 环境中,@spaces.GPU 装饰器不会产生副作用,从而保证在不同环境中的兼容性。

Duration 管理

如果某些函数预计会超过默认 60 秒的 GPU 运行时间,你可以指定自定义时长:

@spaces.GPU(duration=120)
def generate(prompt):
return pipe(prompt).images

这会将该函数的最大运行时间设置为 120 秒。对于运行较快的函数,指定更短的 duration 还能提升访问者在队列中的优先级。

动态 duration

@spaces.GPU 也支持动态 duration。

你可以不直接传递时长,而是传入一个可调用对象,它接受与被装饰函数相同的入参,并返回一个时长值:

def get_duration(prompt, steps):
step_duration = 3.75
return steps * step_duration

@spaces.GPU(duration=get_duration)
def generate(prompt, steps):
return pipe(prompt, num_inference_steps=steps).images

编译

ZeroGPU 不支持 torch.compile,但你可以使用 PyTorch 的**预编译(ahead-of-time)**能力(需要 torch 2.8+)。

完整的 ZeroGPU 预编译使用说明,请参阅这篇博文

使用配额

GPU 使用受 每日 配额限制,并按账号类型区分:

Account typeDaily GPU quotaQueue priority
Unauthenticated2 minutesLow
Free account3.5 minutesMedium
PRO account25 minutesHighest
Team organization member25 minutesHighest
Enterprise organization member45 minutesHighest
备注

剩余配额会直接影响在 ZeroGPU 队列中的优先级。

托管限制

  • 个人账号(PRO 订阅:最多可创建 10 个 ZeroGPU Spaces。
  • 组织账号(Enterprise Hub:最多可创建 50 个 ZeroGPU Spaces。

通过 ZeroGPU,开发者可以构建更高效、更可扩展的 Spaces,在最大化 GPU 利用率的同时降低成本。

使用建议

如果你的 Demo 使用大模型,建议结合使用预编译和 flash-attention 3 等优化手段。你可以在这篇文章中学习如何在 ZeroGPU 上应用这些优化,它们会帮助你最大化 ZeroGPU 时长的价值,并提供更好的用户体验。

反馈

你可以在 HF Hub 上直接对 Spaces ZeroGPU 反馈建议:https://huggingface.co/spaces/zero-gpu-explorers/README/discussions