Hub documentation

Spaces ZeroGPU:Spaces 的动态 GPU 分配

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Spaces ZeroGPU:Spaces 的动态 GPU 分配

ZeroGPU schema

ZeroGPU 是一种共享基础设施,旨在优化 Hugging Face Spaces 上 AI 模型和演示的 GPU 使用。它会根据需求动态分配和释放 NVIDIA RTX Pro 6000 Blackwell GPU,提供以下功能:

  1. 免费 GPU 访问:为 Spaces 提供高性价比的 GPU 使用方式。
  2. 多 GPU 支持:允许 Spaces 在单个应用程序中同时利用多个 GPU。

与传统的单 GPU 分配不同,ZeroGPU 的高效系统通过最大化资源利用率和能效,降低了开发者、研究人员和机构部署 AI 模型的门槛。

使用和托管 ZeroGPU Spaces

  • Using existing ZeroGPU Spaces
    • ZeroGPU Spaces 可供所有用户免费使用。(请访问精选列表)。
    • PRO 用户可获得 8 倍的每日使用配额,在 GPU 队列中享有最高优先级,并且在使用任何 ZeroGPU Spaces 时,可以通过预付费额度超出每日配额。
  • Hosting your own ZeroGPU Spaces
    • 免费个人账户:状态良好的账户(已验证邮箱、注册超过 30 天)可以免费托管最多 2 个 ZeroGPU Spaces。
    • PRO 账户:订阅 PRO 即可在您的账户下托管多达 10 个 ZeroGPU Spaces。
    • 组织:订阅 Team 或 Enterprise 计划,即可为所有组织成员启用 ZeroGPU Spaces。

技术规格

ZeroGPU 支持两种 GPU 规格

GPU 大小底层硬件Vram配额成本
large (默认)半张 NVIDIA RTX Pro 6000 Blackwell48GB1×
xlarge完整的 NVIDIA RTX Pro 6000 Blackwell96GB2×

请参阅 GPU 尺寸选择 以了解如何使用尺寸

兼容性

ZeroGPU Spaces 旨在与大多数基于 PyTorch 的 GPU Spaces 兼容。虽然针对 transformers 和 diffusers 等高级 Hugging Face 库的兼容性得到了增强,但用户应注意:

  • 目前,ZeroGPU Spaces 仅与 Gradio SDK 兼容。
  • 与标准 GPU Spaces 相比,ZeroGPU Spaces 的兼容性可能较为有限。
  • 在某些情况下,可能会出现意外问题。

支持的版本

  • Gradio:4+

  • PyTorch:支持从 2.8.0 到 latest 的几乎所有版本

    查看完整列表
    • 2.8.0
    • 2.9.1
    • 2.10.0
    • 2.11.0
    • 2.12.1
    • 2.13.0
  • Python:

    • 3.12.12
    • 3.10.13

开始使用 ZeroGPU

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

  1. 请确保在您的 Space 设置中选择了 ZeroGPU 硬件。
  2. 导入 spaces 模块。
  3. 使用 @spaces.GPU 装饰依赖 GPU 的函数。

此装饰过程允许 Space 在函数被调用时请求 GPU,并在完成后释放它。

@spaces.GPU 装饰器旨在非 ZeroGPU 环境中不产生任何副作用,以确保在不同配置下的兼容性。

使用示例

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()

模型加载

尽管真实的 GPU 仅在 @spaces.GPU 函数内部可用,但模型必须在根模块级别放置在 cuda 上(如上文示例所示)。

在 @spaces.GPU 内部延迟加载模型或将模型移至 CUDA 是不推荐的,因为这种方式效率显著较低(CUDA 传输针对启动期间完成的放置操作进行了优化)。

在模块级别将模型加载到 cuda 上之所以可行,是因为在 @spaces.GPU 函数之外启用了 PyTorch CUDA 模拟模式,从而允许在没有真实 GPU 的情况下执行 CUDA 操作。在 @spaces.GPU 内部,则使用真实的 CUDA。

GPU 尺寸选择

@spaces.GPU 使用的默认大小为 large(半块 NVIDIA RTX Pro 6000 Blackwell)。

您可以通过指定 size="xlarge" 来明确请求一台完整的 NVIDIA RTX Pro 6000 Blackwell:

@spaces.GPU(size="xlarge")
def generate(prompt):
    return pipe(prompt).images
  • xlarge 消耗的每日配额是 large 的 2 倍(例如,有效 任务时长为 45 秒会消耗 90 秒的配额)
  • xlarge 通常意味着更高的排队概率和更长的等待时间
  • 仅当您的工作负载确实能从额外的计算或内存中受益时,才使用 xlarge

持续时间管理

对于预计 GPU 运行时间超过默认 60 秒的函数,您可以指定自定义时长:

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

这将最大函数运行时间设置为 120 秒。为运行更快的函数指定更短的时长,将提高 Space 访问者的队列优先级。

动态时长

@spaces.GPU 也支持动态时长。

与其直接传递持续时间,只需传递一个可调用对象,该对象接受与被装饰函数相同的输入并返回一个持续时间值:

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 的 提前 编译(需要 torch 2.8+)

请参阅这篇博客文章,了解有关 ZeroGPU 上提前编译的完整指南。

使用层级

GPU 使用量受账户等级对应的每日配额限制:

账户类型包含每日 GPU 配额队列优先级
未认证2 分钟低
免费账户5 分钟中等
PRO 账户40 分钟(可扩展)最高
团队组织成员40 分钟(可扩展)最高
企业组织成员60 分钟(可扩展)最高

包含的每日配额会在您首次使用 GPU 后的 24 小时整重置。

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

使用积分扩展配额

PRO、Team 和 Enterprise 用户可以通过消耗预付费额度,以每 10 分钟 GPU 时间 1 美元 的费率,在每日包含的配额之外继续使用 ZeroGPU Spaces。 一旦您的每日配额用尽,任何额外的 GPU 使用量都会自动从您的额度余额中扣除。

您可以从您的账单设置中添加额度。

托管限制

  • 免费个人账户:最多可创建 2 个 ZeroGPU Spaces,适用于状态良好的账户(已验证邮箱,账户注册超过 30 天)。
  • 个人账户(PRO 订阅者):最多可拥有 10 个 ZeroGPU Spaces。
  • 组织账户(团队与企业版):最多可拥有 50 个 ZeroGPU Spaces。

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

建议

如果您的演示使用大型模型,我们建议使用提前编译和 flash-attention 3 等优化技术。您可以在 这篇文章 中了解如何利用 ZeroGPU 来应用这些优化。这些优化将帮助您最大化 ZeroGPU 时长的优势,并提供更好的用户体验。

反馈

您可以直接在 HF Hub 上分享您对 Spaces ZeroGPU 的反馈:https://huggingface.co/spaces/zero-gpu-explorers/README/discussions

Update on GitHub