Spaces ZeroGPU:动态 GPU 分配 for Spaces
ZeroGPU 是一套共享基础设施,用于优化 Hugging Face Spaces 上 AI 模型和 Demo 的 GPU 使用。它会按需动态分配和释放 NVIDIA H200 GPU,提供以下能力:
- Free GPU Access:让 Space 可低成本地使用 GPU。
- Multi-GPU Support:允许 Space 在单个应用中同时利用多块 GPU。
与传 统的单 GPU 分配不同,ZeroGPU 通过更高的资源利用率和功耗效率,降低了开发者、研究者和组织部署 AI 模型的门槛。
使用和托管 ZeroGPU Spaces
- 使用现有 ZeroGPU Spaces
- 托管自己的 ZeroGPU Spaces
- 个人账号:在创建新的 Gradio SDK Space 时,硬件选项中启用 ZeroGPU 需要先订阅 PRO。
- 组织账号:需订阅 Team 或 Enterprise 方案,以便为所有组织成员启用 ZeroGPU Spaces。
技术规格
- GPU 类型:Nvidia H200 切片
- 可用显存:每个工作负载 70GB
兼容性
ZeroGPU Spaces 设计为尽可能兼容大多 数基于 PyTorch 的 GPU Spaces。对于 transformers、diffusers 等高层 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,请按照以下步骤操作:
- 在 Space 设置中选择 ZeroGPU 作为硬件。
- 引入
spaces模块。 - 使用
@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