Spaces и Gradio: демо за минуты

Учимся быстро собирать веб-демо модели без фронтенда и публиковать его в Spaces.

Gradio — Python-библиотека, которая по описанию входов и выходов автоматически строит веб-интерфейс для модели.

Зачем нужны демо

Модель в коде видят только разработчики. Чтобы её мог попробовать коллега, заказчик или потенциальный пользователь, нужен интерфейс: поле ввода и кнопка. Писать фронтенд ради этого дорого. Gradio решает задачу: вы описываете функцию и типы входов-выходов, а интерфейс генерируется сам.

Минимальное демо на Gradio

Код требует библиотеки gradio и не исполняется в браузере — он для чтения:

import gradio as gr
from transformers import pipeline

clf = pipeline("sentiment-analysis")

def analyze(text):
    return clf(text)[0]

demo = gr.Interface(
    fn=analyze,
    inputs="text",
    outputs="label",
)
demo.launch()

Этот код поднимает локальный веб-сервер с полем ввода и результатом. Функция analyze — это вся ваша логика; интерфейс вокруг неё строит Gradio.

Публикация в Spaces

Чтобы демо стало доступно всем, его кладут в Space — специальный репозиторий на Hub с файлом app.py и списком зависимостей в requirements.txt. Hugging Face сам разворачивает приложение и даёт публичную ссылку.

my-space/
├── app.py            (код Gradio)
├── requirements.txt  (transformers, gradio, ...)
└── README.md

Как работает под капотом

Gradio запускает лёгкий веб-сервер: фронтенд (HTML/JS) отправляет ввод на бэкенд, тот вызывает вашу функцию и возвращает результат. В Spaces этот же код выполняется на серверах Hugging Face в контейнере; бесплатный тариф даёт CPU, платный — GPU для тяжёлых моделей. Типы входов-выходов ("text", "image", "audio", "label") Gradio превращает в готовые виджеты, поэтому от вас не требуется верстать.

Частые ошибки

  • Забыть зависимость в requirements.txt. Space не соберётся, если не указать нужные библиотеки.
  • Грузить тяжёлую модель на бесплатном CPU. Демо будет работать медленно или падать по памяти.
  • Создавать pipeline внутри функции. Создавайте его один раз снаружи, иначе модель грузится на каждый запрос.

Итог

  • Gradio строит веб-интерфейс по описанию входов-выходов функции.
  • gr.Interface(fn, inputs, outputs) — минимальное демо.
  • Spaces разворачивает демо на серверах Hugging Face с публичной ссылкой.
  • Зависимости указывают в requirements.txt, код — в app.py.
Проверьте себя
1. Что делает Gradio?
AОбучает модели
BАвтоматически строит веб-интерфейс по описанию входов-выходов функции
CКвантует веса
DЗагружает датасеты
2. Какой файл с зависимостями нужен Space, чтобы он собрался?
Aconfig.json
Brequirements.txt
Ctokenizer.json
Dmodel.safetensors
3. Где выполняется код демо после публикации в Spaces?
AВ браузере пользователя
BНа серверах Hugging Face в контейнере
CНа GitHub
DЛокально у автора