Дата публикации
ai_products

Gradio Server: как подключить свой фронтенд к бэкенду Hugging Face за 50 строк кода

Что появилось / что изменилось

Hugging Face добавила в Gradio новый режим работы — gradio.Server. Это надстройка над FastAPI, которая даёт три ключевые вещи:

  1. Свой фронтенд на чём угодно
    Можно писать интерфейс на React, Svelte или чистом HTML/CSS/JS и при этом использовать бэкенд Gradio. Никакой привязки к компонентам Gradio.

  2. Очередь и управление GPU “из коробки”
    gradio.Server добавляет к FastAPI движок Gradio: очередь запросов, SSE-стриминг, контроль конкуренции и поддержку ZeroGPU на Hugging Face Spaces через декоратор @spaces.GPU.

  3. Единый API для людей и скриптов
    Эндпоинты, помеченные @app.api(), автоматически совместимы с gradio_client. Тот же бэкенд можно дергать из других приложений и пайплайнов.

Авторы демонстрируют это на реальном приложении Text Behind Image: весь бэкенд на Python занимает около 50 строк кода. Он загружает модель сегментации ZhengPeng7/BiRefNet, обрабатывает изображения на GPU и отдаёт прозрачные PNG.

Как это работает

gradio.Server — это FastAPI-приложение с дополнительным слоем Gradio:

  • Вы создаёте сервер так же, как обычный FastAPI:

    from gradio import Server
    app = Server()
    
  • Для обычных HTTP-страниц используется стандартный FastAPI-роутинг. Например, главная страница:

    @app.get("/")
    async def homepage():
        # читаем index.html с диска и отдаём как HTML
    
  • Для ML-эндпоинтов вместо @app.post() применяется @app.api() (пример есть в оригинале, в сокращённом коде он опущен, но логика описана явно). Этот декоратор:

    • ставит запросы в очередь,
    • контролирует число одновременных вызовов,
    • корректно работает с ZeroGPU на Spaces через @spaces.GPU.
  • В примере Text Behind Image бэкенд делает следующее:

    • загружает сегментационную модель ZhengPeng7/BiRefNet с trust_remote_code=True,
    • переводит её на cuda и включает torch.set_float32_matmul_precision("high"),
    • принимает файл через FileData,
    • прогоняет его через пайплайн torchvision.transforms до размера 1024×1024,
    • получает маску прозрачности, накладывает её как альфа-канал и сохраняет PNG.
  • Фронтенд — это обычный index.html примерно на 1300 строк: drag-and-drop канвас, слои (фон → текст → передний план), слайдеры шрифтов, цвета, тени, перспективы и экспорт в PNG. Никакого сборщика, только статический HTML/JS.

  • Тот же ML-эндпоинт можно вызвать из другого сервиса:

    from gradio_client import Client, handle_file
    
    client = Client("ysharma/text-behind-image")
    result = client.predict(
        image_path=handle_file("photo.jpg"),
        api_name="/remove_background",
    )
    

Что это значит для вас

Кому это полезно:

  • Веб-разработчикам, которые привыкли к React/Svelte/чистому JS и не хотят собирать UI из компонентов Gradio.
  • ML-инженерам, которым нужно быстро обернуть модель в продакшен-подобный сервис на Hugging Face Spaces, не разбираясь глубоко в FastAPI.
  • Тем, кто уже использует Gradio и хочет более сложный интерфейс: канвас, свои панели, кастомные анимации.

Типичные сценарии:

  • Редакторы изображений и видео с канвасом и слоями, как в примере Text Behind Image.
  • Веб-IDE для кода или SQL с подсветкой, автодополнением и живой проверкой через ML.
  • Конструкторы презентаций, генераторы баннеров и любые сложные UI, где стандартные компоненты Gradio не подходят.

Когда лучше не использовать:

  • Если вам нужен простой демо-интерфейс к модели — классический Gradio с компонентами быстрее в разработке.
  • Если команда не знакома с FastAPI и фронтендом, а нужен только минимальный UI.
  • Если вы разворачиваете всё в своей инфраструктуре и уже настроили очереди/оркестрацию — дополнительный слой Gradio может быть избыточен.

Gradio и Hugging Face Spaces официально доступны через веб-интерфейс. Если доступ к Hugging Face у вас ограничен, может понадобиться VPN или собственный хостинг.

Место на рынке

По сути gradio.Server конкурирует не с GPT-5 или Claude 4, а с типовым стеком: FastAPI + Celery/Redis + самописный фронтенд.

Отличия по ключевым параметрам:

  • Развёртывание на Spaces
    Вместо ручной настройки инфраструктуры вы получаете ZeroGPU, очереди и хостинг в одном месте. Для небольших и средних проектов это снижает порог входа.

  • Интеграция с экосистемой Hugging Face
    Модели из Transformers, Spaces, gradio_client — всё сразу работает вместе. В стандартном FastAPI это нужно собирать самому.

  • Контроль конкуренции и GPU
    В чистом FastAPI при двух одновременных запросах к GPU-модели вы легко получите падения или странные результаты. @app.api() добавляет предсказуемое поведение без дополнительного кода.

Прямых цифр по скорости обработки или стоимости запросов авторы не приводят. Основной упор — на том, что полноценный ML-бэкенд с очередью и ZeroGPU в примере укладывается примерно в 50 строк Python, а сложный фронтенд можно написать на привычном стеке без ограничений Gradio-компонентов.


Читайте также