Spaces ZeroGPU: Dynamic GPU Allocation for Spaces
ZeroGPU is a shared infrastructure that optimizes GPU usage for AI models and demos on Hugging Face Spaces. It dynamically allocates and releases NVIDIA A100 GPUs as needed, offering:
- Free GPU Access: Enables cost-effective GPU usage for Spaces.
- Multi-GPU Support: Allows Spaces to leverage multiple GPUs concurrently on a single application.
Unlike traditional single-GPU allocations, ZeroGPU’s efficient system lowers barriers for developers, researchers, and organizations to deploy AI models by maximizing resource utilization and power efficiency.
Using and hosting ZeroGPU Spaces
- Using existing ZeroGPU Spaces
- ZeroGPU Spaces are available to use for free to all users. (Visit the curated list).
- PRO users get x5 more daily usage quota and highest priority in GPU queues when using any ZeroGPU Spaces.
- Hosting your own ZeroGPU Spaces
- Personal accounts: Subscribe to PRO to access ZeroGPU in the hardware options when creating a new Gradio SDK Space.
- Organizations: Subscribe to the Enterprise Hub to enable ZeroGPU Spaces for all organization members.
Technical Specifications
- GPU Type: Nvidia A100
- Available VRAM: 40GB per workload
Compatibility
ZeroGPU Spaces are designed to be compatible with most PyTorch-based GPU Spaces. While compatibility is enhanced for high-level Hugging Face libraries like transformers
and diffusers
, users should be aware that:
- Currently, ZeroGPU Spaces are exclusively compatible with the Gradio SDK.
- ZeroGPU Spaces may have limited compatibility compared to standard GPU Spaces.
- Unexpected issues may arise in some scenarios.
Supported Versions
- Gradio: 4+
- PyTorch: 2.0.1, 2.1.2, 2.2.2, 2.4.0 (Note: 2.3.x is not supported due to a PyTorch bug)
- Python: 3.10.13
Getting started with ZeroGPU
To utilize ZeroGPU in your Space, follow these steps:
- Make sure the ZeroGPU hardware is selected in your Space settings.
- Import the
spaces
module. - Decorate GPU-dependent functions with
@spaces.GPU
.
This decoration process allows the Space to request a GPU when the function is called and release it upon completion.
Example Usage
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()
Note: The @spaces.GPU
decorator is designed to be effect-free in non-ZeroGPU environments, ensuring compatibility across different setups.
Duration Management
For functions expected to exceed the default 60-second of GPU runtime, you can specify a custom duration:
@spaces.GPU(duration=120)
def generate(prompt):
return pipe(prompt).images
This sets the maximum function runtime to 120 seconds. Specifying shorter durations for quicker functions will improve queue priority for Space visitors.
Hosting Limitations
- Personal accounts (PRO subscribers): Maximum of 10 ZeroGPU Spaces.
- Organization accounts (Enterprise Hub): Maximum of 50 ZeroGPU Spaces.
By leveraging ZeroGPU, developers can create more efficient and scalable Spaces, maximizing GPU utilization while minimizing costs.
Feedback
You can share your feedback on Spaces ZeroGPU directly on the HF Hub: https://huggingface.co/spaces/zero-gpu-explorers/README/discussions
< > Update on GitHub