Hub documentation
Spaces ZeroGPU:Spaces 的动态 GPU 分配
Spaces ZeroGPU:Spaces 的动态 GPU 分配
ZeroGPU 是一种共享基础设施,旨在优化 Hugging Face Spaces 上 AI 模型和演示的 GPU 使用。它会根据需求动态分配和释放 NVIDIA RTX Pro 6000 Blackwell GPU,提供以下功能:
- 免费 GPU 访问:为 Spaces 提供高性价比的 GPU 使用方式。
- 多 GPU 支持:允许 Spaces 在单个应用程序中同时利用多个 GPU。
与传统的单 GPU 分配不同,ZeroGPU 的高效系统通过最大化资源利用率和能效,降低了开发者、研究人员和机构部署 AI 模型的门槛。
使用和托管 ZeroGPU Spaces
- Using existing 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 Blackwell | 48GB | 1× |
xlarge | 完整的 NVIDIA RTX Pro 6000 Blackwell | 96GB | 2× |
请参阅 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,请按照以下步骤操作:
- 请确保在您的 Space 设置中选择了 ZeroGPU 硬件。
- 导入
spaces模块。 - 使用
@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