Hub documentation

Spaces ZeroGPU: Alocação 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: Alocação Dinâmica de GPU para Spaces

ZeroGPU schema

ZeroGPU é uma infraestrutura compartilhada que otimiza o uso de GPUs para modelos e demonstrações de IA nos Hugging Face Spaces. Ele aloca e libera dinamicamente GPUs NVIDIA RTX Pro 6000 Blackwell conforme necessário, oferecendo:

  1. Acesso gratuito a GPUs: permite o uso de GPUs de forma econômica para os Spaces.
  2. Suporte a múltiplas GPUs: Permite que os Spaces utilizem várias GPUs simultaneamente em um único aplicativo.

Diferentemente das alocações tradicionais em uma única GPU, o sistema eficiente do ZeroGPU reduz as barreiras para que desenvolvedores, pesquisadores e organizações implantem modelos de IA, maximizando o uso de recursos e a eficiência energética.

Usando e hospedando Spaces ZeroGPU

  • Using existing ZeroGPU Spaces
    • Os Spaces ZeroGPU estão disponíveis gratuitamente para todos os usuários. (Visite a lista curada).
    • Usuários PRO têm 8x mais cota de uso diário, a maior prioridade nas filas de GPU e podem exceder sua cota diária usando créditos pré-pagos ao utilizar qualquer Space ZeroGPU.
  • Hosting your own ZeroGPU Spaces
    • Contas pessoais gratuitas: contas em dia (e-mail verificado, conta com mais de 30 dias) podem hospedar até 2 Spaces ZeroGPU gratuitamente.
    • Contas PRO: Assine o PRO para hospedar até 10 Spaces ZeroGPU em sua conta.
    • Organizações: Assine um plano Team ou Enterprise para habilitar Spaces ZeroGPU para todos os membros da organização.

Especificações Técnicas

ZeroGPU suporta dois tamanhos de GPU

Tamanho da GPUHardware de suporteVramCusto de cota
large (padrão)Metade de uma NVIDIA RTX Pro 6000 Blackwell48GB1×
xlargeNVIDIA RTX Pro 6000 Blackwell completo96GB2×

Veja seleção do tamanho da GPU para aprender a usar os tamanhos

Compatibilidade

Os Spaces ZeroGPU foram projetados para serem compatíveis com a maioria dos Spaces de GPU baseados em PyTorch. Embora a compatibilidade seja aprimorada para bibliotecas de alto nível do Hugging Face, como transformers e diffusers, os usuários devem estar cientes de que:

  • Atualmente, os Spaces ZeroGPU são compatíveis exclusivamente com o Gradio SDK.
  • Os Spaces ZeroGPU podem ter compatibilidade limitada em comparação com os Spaces GPU padrão.
  • Problemas inesperados podem surgir em alguns cenários.

Versões Suportadas

  • Gradio: 4+

  • PyTorch: Quase todas as versões de 2.8.0 até a latest são suportadas

    Veja a 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

Começando com o ZeroGPU

Para utilizar o ZeroGPU no seu Space, siga estas etapas:

  1. Certifique-se de que o hardware ZeroGPU esteja selecionado nas configurações do seu Space.
  2. Importe o módulo spaces.
  3. Decore as funções dependentes de GPU com @spaces.GPU.

Esse processo de decoração permite que o Space solicite uma GPU quando a função é chamada e a libere ao término.

O decorador @spaces.GPU foi projetado para ser sem efeitos em ambientes não-ZeroGPU, garantindo compatibilidade entre diferentes configurações.

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

Carregamento de modelos

Embora uma GPU real só esteja disponível dentro de funções @spaces.GPU, os modelos devem ser colocados em cuda no nível do módulo raiz (como mostrado no exemplo acima).

Carregar modelos de forma preguiçosa ou movê-los para a CUDA dentro de @spaces.GPU é desencorajado, pois é significativamente menos eficiente (as transferências de CUDA são otimizadas para posicionamentos feitos durante a inicialização).

Carregar modelos em cuda no nível do módulo funciona porque um modo de emulação de CUDA do PyTorch é ativado fora das funções @spaces.GPU, permitindo operações de CUDA sem uma GPU real. Dentro de @spaces.GPU, o CUDA real é utilizado.

Seleção do tamanho da GPU

O tamanho padrão usado por @spaces.GPU é large (metade de uma NVIDIA RTX Pro 6000 Blackwell).

Você pode solicitar explicitamente um NVIDIA RTX Pro 6000 Blackwell completo especificando size="xlarge":

@spaces.GPU(size="xlarge")
def generate(prompt):
    return pipe(prompt).images
  • xlarge consome 2× mais cota diária do que large (por exemplo, uma duração de tarefa efetiva de 45s consome 90s de cota)
  • xlarge geralmente significa maior probabilidade de fila e tempos de espera mais longos
  • Use xlarge apenas quando sua carga de trabalho se beneficiar genuinamente do aumento de computação ou memória

Gestão de Duração

Para funções que se espera exceder o tempo de execução padrão de 60 segundos na GPU, você pode especificar uma duração personalizada:

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

Isso define o tempo máximo de execução da função em 120 segundos. Especificar durações mais curtas para funções mais rápidas melhorará a prioridade da fila para os visitantes do Space.

Duração dinâmica

@spaces.GPU também suporta durações dinâmicas.

Em vez de passar diretamente uma duração, basta passar uma função chamável que recebe as mesmas entradas da sua função decorada e retorna um valor de duração:

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

Compilação

ZeroGPU não suporta torch.compile, mas você pode usar a compilação ahead-of-time do PyTorch (requer torch 2.8+)

Confira este blogpost para um guia completo sobre compilação antecipada no ZeroGPU.

Níveis de Uso

O uso de GPU está sujeito a cotas diárias, por nível de conta:

Tipo de contaCota diária de GPU incluídaPrioridade da fila
Não autenticado2 minutosBaixo
Conta gratuita5 minutosMédio
Conta PRO40 minutos (extensível)Mais alto
Membro da organização da equipe40 minutos (extensível)Mais alto
Membro de organização empresarial60 minutos (extensível)Mais alto

A cota diária incluída é redefinida exatamente 24 horas após o primeiro uso da sua GPU.

A cota restante impacta diretamente a prioridade nas filas do ZeroGPU.

Estendendo a cota com créditos

Usuários PRO, Team e Enterprise podem continuar usando Spaces ZeroGPU além da cota diária incluída, consumindo créditos pré-pagos na taxa de US$ 1 por 10 minutos de tempo de GPU. Quando sua cota diária for esgotada, qualquer uso adicional de GPU será cobrado automaticamente do seu saldo de créditos.

Você pode adicionar créditos em suas configurações de faturamento.

Limitações de Hospedagem

  • Contas pessoais gratuitas: Máximo de 2 Spaces ZeroGPU, para contas em bom estado (e-mail verificado, conta com mais de 30 dias).
  • Contas pessoais (assinantes PRO): Máximo de 10 Spaces ZeroGPU.
  • Contas de organização (Team & Enterprise): Máximo de 50 Spaces ZeroGPU.

Ao aproveitar o ZeroGPU, os desenvolvedores podem criar Spaces mais eficientes e escaláveis, maximizando o uso da GPU e minimizando os custos.

Recomendações

Se a sua demonstração usa um modelo grande, recomendamos usar otimizações como compilação antecipada e flash-attention 3. Você pode aprender a aproveitar esses recursos com ZeroGPU em este post. Essas otimizações ajudarão você a maximizar as vantagens das horas de ZeroGPU e fornecer uma melhor experiência para o usuário.

Feedback

Você pode compartilhar seu feedback sobre o Spaces ZeroGPU diretamente no HF Hub: https://huggingface.co/spaces/zero-gpu-explorers/README/discussions

Update on GitHub