Hub documentation

Spaces ZeroGPU: Asignación dinámica de GPU para Spaces

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Spaces ZeroGPU: Asignación dinámica de GPU para Spaces

ZeroGPU schema

ZeroGPU es una infraestructura compartida que optimiza el uso de GPU para modelos y demostraciones de IA en Hugging Face Spaces. Asigna y libera dinámicamente GPU NVIDIA RTX Pro 6000 Blackwell según sea necesario, ofreciendo:

  1. Acceso gratuito a GPU: Permite el uso de GPU rentable para Spaces.
  2. Soporte para múltiples GPU: Permite que los Spaces aprovechen varias GPU de forma concurrente en una sola aplicación.

A diferencia de las asignaciones tradicionales de una sola GPU, el sistema eficiente de ZeroGPU reduce las barreras para que los desarrolladores, investigadores y organizaciones implementen modelos de IA al maximizar la utilización de recursos y la eficiencia energética.

Uso y alojamiento de Spaces ZeroGPU

  • Using existing ZeroGPU Spaces
    • Los Spaces de ZeroGPU están disponibles para que todos los usuarios los utilicen de forma gratuita. (Visita la lista curada).
    • Los usuarios de PRO obtienen una cuota de uso diario 8 veces mayor, la máxima prioridad en las colas de GPU y pueden superar su cuota diaria utilizando créditos prepagados al usar cualquier Space de ZeroGPU.
  • Hosting your own ZeroGPU Spaces
    • Cuentas personales gratuitas: las cuentas en buen estado (correo electrónico verificado, cuenta con más de 30 días de antigüedad) pueden alojar hasta 2 Spaces ZeroGPU de forma gratuita.
    • Cuentas PRO: Suscríbete a PRO para alojar hasta 10 Spaces ZeroGPU en tu cuenta.
    • Organizaciones: Suscríbase a un plan Team o Enterprise para habilitar los espacios ZeroGPU para todos los miembros de la organización.

Especificaciones técnicas

ZeroGPU admite dos tamaños de GPU

Tamaño de la GPUHardware de respaldoVramCosto de la cuota
large (predeterminado)Mitad de NVIDIA RTX Pro 6000 Blackwell48GB1×
xlargeNVIDIA RTX Pro 6000 Blackwell completo96GB2×

Consulte selección del tamaño de GPU para aprender a usar los tamaños

Compatibilidad

Los Spaces de ZeroGPU están diseñados para ser compatibles con la mayoría de los Spaces de GPU basados en PyTorch. Si bien la compatibilidad se mejora para las bibliotecas de alto nivel de Hugging Face como transformers y diffusers, los usuarios deben tener en cuenta que:

  • Actualmente, los Spaces ZeroGPU son exclusivamente compatibles con el Gradio SDK.
  • Los espacios ZeroGPU pueden tener una compatibilidad limitada en comparación con los espacios GPU estándar.
  • Es posible que surjan problemas inesperados en algunos escenarios.

Versiones compatibles

  • Gradio: 4+

  • PyTorch: Se admiten casi todas las versiones desde 2.8.0 hasta latest

    Ver lista completa
    • 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

Primeros pasos con ZeroGPU

Para utilizar ZeroGPU en tu Space, sigue estos pasos:

  1. Asegúrate de que el hardware ZeroGPU esté seleccionado en la configuración de tu Space.
  2. Importa el módulo spaces.
  3. Decore las funciones dependientes de GPU con @spaces.GPU.

Este proceso de decoración permite que el Space solicite una GPU cuando se llama a la función y la libere al completarse.

El decorador @spaces.GPU está diseñado para no tener efectos en entornos que no son ZeroGPU, lo que garantiza la compatibilidad en diferentes configuraciones.

Ejemplo de uso

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

Carga de modelos

Aunque una GPU real solo está disponible dentro de las funciones @spaces.GPU, los modelos deben colocarse en cuda a nivel de módulo raíz (como se muestra en el ejemplo anterior).

Se desaconseja la carga diferida o el traslado de modelos a CUDA dentro de @spaces.GPU, ya que es significativamente menos eficiente (las transferencias de CUDA están optimizadas para las ubicaciones realizadas durante el inicio).

Cargar modelos en cuda a nivel de módulo funciona porque se habilita un modo de emulación de CUDA de PyTorch fuera de las funciones @spaces.GPU, lo que permite realizar operaciones de CUDA sin una GPU real. Dentro de @spaces.GPU, se utiliza CUDA real.

Selección del tamaño de la GPU

El tamaño predeterminado utilizado por @spaces.GPU es large (media NVIDIA RTX Pro 6000 Blackwell).

Puede solicitar explícitamente una NVIDIA RTX Pro 6000 Blackwell completa especificando size="xlarge":

@spaces.GPU(size="xlarge")
def generate(prompt):
    return pipe(prompt).images
  • xlarge consume 2× más cuota diaria que large (p. ej., una duración de tarea efectiva de 45 s consume 90 s de cuota)
  • xlarge suele significar una mayor probabilidad de estar en cola y tiempos de espera más largos
  • Utilice xlarge solo cuando su carga de trabajo se beneficie realmente del cómputo o la memoria adicionales

Gestión de la duración

Para las funciones que se espera que superen el tiempo de ejecución predeterminado de 60 segundos en la GPU, puede especificar una duración personalizada:

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

Esto establece el tiempo de ejecución máximo de la función en 120 segundos. Especificar duraciones más cortas para funciones más rápidas mejorará la prioridad de la cola para los visitantes del Space.

Duración dinámica

@spaces.GPU también admite duraciones dinámicas.

En lugar de pasar directamente una duración, simplemente pase una función invocable que reciba las mismas entradas que su función decorada y devuelva un valor de duración:

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

Compilación

ZeroGPU no admite torch.compile, pero puedes usar la compilación ahead-of-time de PyTorch (requiere torch 2.8+)

Echa un vistazo a este blogpost para una guía completa sobre la compilación previa en ZeroGPU.

Niveles de uso

El uso de GPU está sujeto a cuotas diarias, según el nivel de la cuenta:

Tipo de cuentaCuota diaria de GPU incluidaPrioridad de la cola
No autenticado2 minutosBajo
Cuenta gratuita5 minutosMedio
Cuenta PRO40 minutos (ampliable)Más alto
Miembro de la organización del equipo40 minutos (ampliable)Más alto
Miembro de una organización empresarial60 minutos (ampliable)Más alto

La cuota diaria incluida se restablece exactamente 24 horas después de tu primer uso de GPU.

La cuota restante afecta directamente la prioridad en las colas de ZeroGPU.

Extender la cuota con créditos

Los usuarios PRO, Team y Enterprise pueden seguir usando Spaces ZeroGPU más allá de su cuota diaria incluida, consumiendo créditos prepagados a un precio de 1 USD por 10 minutos de tiempo de GPU. Una vez que se agote su cuota diaria, cualquier uso adicional de la GPU se facturará automáticamente contra su saldo de créditos.

Puedes añadir créditos desde tus configuraciones de facturación.

Limitaciones de alojamiento

  • Cuentas personales gratuitas: Máximo de 2 Spaces ZeroGPU, para cuentas en buen estado (correo electrónico verificado, cuenta con más de 30 días de antigüedad).
  • Cuentas personales (suscriptores PRO): Máximo de 10 Spaces ZeroGPU.
  • Cuentas de organización (Team & Enterprise): Máximo de 50 Spaces ZeroGPU.

Aprovechando ZeroGPU, los desarrolladores pueden crear Spaces más eficientes y escalables, maximizando el uso de la GPU y minimizando los costos.

Recomendaciones

Si tu demo utiliza un modelo grande, te recomendamos usar optimizaciones como la compilación previa y flash-attention 3. Puedes aprender a aprovechar estas con ZeroGPU en esta publicación. Estas optimizaciones te ayudarán a maximizar las ventajas de las horas de ZeroGPU y a ofrecer una mejor experiencia de usuario.

Comentarios

Puedes compartir tus comentarios sobre Spaces ZeroGPU directamente en HF Hub: https://huggingface.co/spaces/zero-gpu-explorers/README/discussions

Update on GitHub