Hub documentation

Spaces ZeroGPU: динамическое выделение GPU для Spaces

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Spaces ZeroGPU: динамическое выделение GPU для Spaces

ZeroGPU schema

ZeroGPU — это общая инфраструктура, оптимизирующая использование GPU для AI-моделей и демо на Hugging Face Spaces. Она динамически выделяет и освобождает NVIDIA RTX Pro 6000 Blackwell по мере необходимости, предоставляя:

  1. Бесплатный доступ к GPU: обеспечивает экономичное использование GPU для Spaces.
  2. Поддержка нескольких GPU: позволяет Spaces использовать несколько GPU одновременно в одном приложении.

В отличие от традиционных выделений на одном GPU, эффективная система ZeroGPU снижает барьеры для разработчиков, исследователей и организаций при развертывании моделей ИИ, максимизируя использование ресурсов и энергоэффективность.

Использование и размещение ZeroGPU Spaces

  • Using existing ZeroGPU Spaces
    • ZeroGPU Spaces доступны для бесплатного использования всем пользователям. (Посетите отобранный список).
    • Пользователи тарифа PRO получают в 8 раз больший дневной лимит использования, наивысший приоритет в очередях GPU и могут превышать свой дневной лимит, используя предоплаченные кредиты при работе с любыми 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 Blackwell48 ГБ1×
xlargeПолная NVIDIA RTX Pro 6000 Blackwell96 ГБ2×

См. выбор размера GPU, чтобы узнать, как использовать размеры

Совместимость

Spaces ZeroGPU разработаны для обеспечения совместимости с большинством GPU Spaces на базе PyTorch. Совместимость улучшена для высокоуровневых библиотек Hugging Face, таких как transformers и diffusers, однако пользователям следует учитывать, что:

  • В настоящее время ZeroGPU Spaces поддерживают только Gradio SDK.
  • Spaces на базе ZeroGPU могут иметь ограниченную совместимость по сравнению со стандартными Spaces на базе GPU.
  • В некоторых сценариях могут возникать непредвиденные проблемы.

Поддерживаемые версии

  • 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

Чтобы использовать ZeroGPU в вашем Space, выполните следующие шаги:

  1. Убедитесь, что в настройках вашего Space выбрано оборудование ZeroGPU.
  2. Импортируйте модуль spaces.
  3. Декорируйте функции, зависящие от GPU, с помощью @spaces.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 на уровне корневого модуля (как показано в примере выше).

Ленивая загрузка моделей или их перемещение на CUDA внутри @spaces.GPU не рекомендуется, так как это значительно менее эффективно (передачи в CUDA оптимизированы для размещений, выполняемых при запуске).

Загрузка моделей на cuda на уровне модуля работает, потому что вне функций @spaces.GPU включён режим эмуляции CUDA в PyTorch, что позволяет выполнять операции CUDA без реального GPU. Внутри @spaces.GPU используется реальный CUDA.

Выбор размера GPU

Размер по умолчанию, используемый @spaces.GPU, — large (половина NVIDIA RTX Pro 6000 Blackwell).

Вы можете явно запросить полную NVIDIA RTX Pro 6000 Blackwell, указав size="xlarge":

@spaces.GPU(size="xlarge")
def generate(prompt):
    return pipe(prompt).images
  • xlarge потребляет в 2 раза больше дневной квоты, чем large (например, задача с эффективной длительностью 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 does not support torch.compile, but you can use PyTorch ahead-of-time compilation (requires torch 2.8+)

См. эту статью в блоге с полным руководством по компиляции ahead-of-time на ZeroGPU.

Уровни использования

Использование GPU подчинено суточным квотам в зависимости от уровня аккаунта:

Тип аккаунтаВключенный ежедневный лимит GPUПриоритет очереди
Неаутентифицированный2 минутыНизкий
Бесплатный аккаунт5 минутСредний
PRO-аккаунт40 минут (с возможностью расширения)Наивысший
Участник организации команды40 минут (с возможностью расширения)Наивысший
Участник организации Enterprise60 минут (с возможностью расширения)Наивысший

Включенная ежедневная квота сбрасывается ровно через 24 часа после первого использования GPU.

Оставшаяся квота напрямую влияет на приоритет в очередях ZeroGPU.

Расширение квоты с помощью кредитов

Пользователи тарифов PRO, Team и Enterprise могут продолжать использовать Spaces с ZeroGPU сверх включённого в тариф ежедневного лимита, расходуя предоплаченные кредиты по ставке 1 доллар за 10 минут времени работы GPU. После исчерпания ежедневного лимита любое дополнительное использование GPU автоматически списывается с вашего баланса кредитов.

Вы можете добавить кредиты в своих настройках биллинга.

Ограничения хостинга

  • Бесплатные личные аккаунты: максимум 2 ZeroGPU Spaces для аккаунтов в хорошем состоянии (подтверждённый адрес электронной почты, возраст аккаунта более 30 дней).
  • Личные аккаунты (подписчики PRO): максимум 10 ZeroGPU Spaces.
  • Организационные аккаунты (Team & Enterprise): максимум 50 ZeroGPU Spaces.

Благодаря ZeroGPU разработчики могут создавать более эффективные и масштабируемые Spaces, максимально используя GPU при минимизации затрат.

Рекомендации

Если ваша демонстрация использует большую модель, мы рекомендуем применять оптимизации, такие как компиляция ahead-of-time и flash-attention 3. Вы можете узнать, как использовать эти возможности с ZeroGPU, в этой статье. Эти оптимизации помогут вам максимально использовать преимущества часов ZeroGPU и обеспечить более комфортный пользовательский опыт.

Обратная связь

Вы можете поделиться своим мнением о Spaces ZeroGPU напрямую на HF Hub: https://huggingface.co/spaces/zero-gpu-explorers/README/discussions

Update on GitHub