NetrunНа главную

Сайты и приложения

Как выложить Gradio-приложение в интернет без Hugging Face Spaces

· 6 мин чтения

Коротко

Gradio-приложение можно выложить на любой хостинг, который постоянно запускает Python: нужен файл requirements.txt с gradio и запуск на адресе 0.0.0.0 вместо 127.0.0.1. Ссылка share=True для этого не подходит — она временная и ведёт через серверы Gradio. В Netrun встроенная сборка сама узнаёт Gradio и запускает его на нужном адресе и порту, поэтому обычно ничего настраивать не нужно. Видеокарт в Netrun нет, поэтому большие модели лучше вызывать по API, а на сервере держать лёгкие.

  • По умолчанию Gradio слушает только адрес 127.0.0.1 и порт 7860, поэтому снаружи такое приложение недоступно.
  • Адрес и порт Gradio задаются переменными окружения GRADIO_SERVER_NAME и GRADIO_SERVER_PORT, а явные аргументы launch() их перекрывают.
  • Публичная ссылка от share=True ведёт через серверы Gradio и перестаёт работать через неделю.
  • По умолчанию Gradio обрабатывает одно обращение к функции за раз, а остальные ждут в очереди.
  • Новые Gradio-приложения в Hugging Face Spaces требуют платного плана, кроме двух приложений на ZeroGPU для бесплатных личных аккаунтов.

Gradio любят за то, что интерфейс к модели собирается в десяток строк: поле ввода, кнопка, результат. Дальше демо хочется показать заказчику, преподавателю или подписчикам, и тут выясняется, что локальный адрес 127.0.0.1:7860 никому, кроме вас, не откроется, а ссылка от share=True через неделю перестаёт работать. Привычный ответ — Hugging Face Spaces, но новые Gradio-приложения там теперь требуют платного плана, кроме ограниченного бесплатного варианта на ZeroGPU.

Хорошая новость в том, что Gradio — это обычное веб-приложение на Python, и запустить его можно на любом хостинге, который держит Python постоянно. Ниже — как подготовить проект, что делать с адресом и портом и как не упереться в память. Если вы уже выкладывали дашборд, многое будет знакомо по инструкции про Streamlit.

Где разместить Gradio-приложение
КритерийHugging Face SpacesNetrunСвой сервер
Как попадает кодЧерез git-репозиторий Space, пересборка на каждый коммитАрхивом, папкой, из GitHub или из редактора с ИИКак настроите сами
ВидеокартаЕсть платные GPU и ZeroGPU с ограничениямиНет, только процессорЕсли арендуете машину с GPU
Запуск GradioПлатформа сделана под GradioСборка находит Gradio и запускает его на нужном адресе и портуВручную: адрес, порт, автозапуск, прокси, сертификат
Сон без посетителейБесплатное оборудование засыпает примерно через 48 часов без использованияНа бесплатном тарифе засыпает и просыпается при открытии, на Pro не засыпаетНе засыпает
Сохранность файловДиск Space по умолчанию не постоянныйПапка /data переживает обновление кода и перезапускиВсё на вашем диске
Подходит дляПубличных демо в сообществе Hugging Face и моделей, которым нужна видеокартаДемо на процессоре и приложений, которые вызывают модели по APIПолного контроля и собственных видеокарт
  1. Соберите зависимости в requirements.txt#

    Положите рядом с главным файлом, обычно app.py, файл requirements.txt со списком библиотек — вместе с самим gradio. По нему хостинг поставит зависимости, а Netrun ещё и поймёт, что перед ним Gradio-приложение. Если вы используете torch, а видеокарты на сервере нет, ставьте сборку для процессора: она заметно меньше и быстрее устанавливается.

  2. Не прописывайте адрес и порт в launch()#

    Gradio берёт адрес и порт из переменных окружения GRADIO_SERVER_NAME и GRADIO_SERVER_PORT, но явные аргументы server_name и server_port в launch() их перекрывают. В Netrun встроенная сборка сама запускает Gradio на 0.0.0.0 и порту 8080, поэтому достаточно вызвать demo.launch() без аргументов. Если в коде стоит server_name="127.0.0.1" или server_port=7860, уберите их, иначе ссылка не откроется. В собственном Dockerfile задайте server_name="0.0.0.0" и порт из переменной PORT.

  3. Уберите share=True#

    Параметр share=True создаёт временную публичную ссылку через серверы Gradio, и через неделю она перестаёт работать. На хостинге он не нужен: у приложения и так есть собственный адрес с HTTPS. Кроме того, такая ссылка ведёт к приложению через чужие серверы, а не напрямую.

  4. Оцените, сколько памяти нужно модели#

    Модель обычно загружается в оперативную память целиком, и большие модели легко превышают лимит тарифа — тогда система останавливает процесс, а в логах появляется Killed. Видеокарт в Netrun нет, всё считается на процессоре, поэтому языковые модели и генерация картинок будут медленными или не поместятся вовсе. Лёгкие модели вроде классификаторов и небольших моделей для текста работают нормально, а тяжёлые лучше вызывать по API у сервиса, который их запускает.

  5. Храните скачанные модели в постоянной папке#

    Если приложение скачивает модель при старте, без постоянной папки оно будет качать её заново после каждой публикации. Укажите переменную окружения HF_HOME со значением /data/huggingface — в Netrun это делается во вкладке «Секреты». Тогда кэш библиотек Hugging Face окажется в постоянной папке /data и переживёт обновление кода. Помните, что модель занимает место на диске тарифа.

  6. Опубликуйте и отправьте ссылку#

    Загрузите проект архивом, папкой или из GitHub, ключи внешних сервисов укажите в «Секретах» и дождитесь сборки. Netrun поставит зависимости, запустит приложение и выдаст ссылку с HTTPS, а живые логи покажут ошибку загрузки модели сразу. Если много людей пользуются демо одновременно, учтите очередь Gradio: по умолчанию функция обрабатывает одно обращение за раз.

Hugging Face Spaces по-прежнему хорош для публичных демо и моделей, которым нужна видеокарта. Если же демо работает на процессоре или вызывает модели по API, его проще держать на обычном хостинге: в Netrun Gradio запускается из кода без настройки адреса и порта, ключи лежат в секретах, а модели в /data не скачиваются заново. На бесплатном тарифе приложение засыпает без посетителей и просыпается при открытии ссылки, первое открытие после паузы занимает несколько секунд. Для демо, которое показывают вживую, подойдёт Pro. Попробовать Netrun.

Частые вопросы

Почему Gradio-приложение не открывается на сервере?

Чаще всего оно слушает 127.0.0.1, как Gradio делает по умолчанию, или в launch() прописан порт 7860, а хостинг ждёт другой. Уберите server_name и server_port из launch() или задайте адрес 0.0.0.0 и порт из переменной PORT. Точная причина обычно видна в логах при запуске.

Можно ли оставить share=True вместо хостинга?

Для быстрой демонстрации на пару дней — можно, но ссылка через серверы Gradio перестаёт работать через неделю и живёт только пока запущен ваш компьютер. Для постоянного адреса нужен хостинг, где приложение работает без вас.

Потянет ли сервер без видеокарты большую модель?

Обычно нет: большие языковые модели и генерация картинок на процессоре работают очень медленно и часто не помещаются в память тарифа. Практичный вариант — держать на сервере интерфейс Gradio, а саму модель вызывать по API у сервиса, который её запускает. Лёгкие модели при этом спокойно работают на процессоре.

Почему приложение падает с ошибкой Killed?

Так система останавливает процесс, которому не хватило оперативной памяти, и чаще всего это происходит при загрузке модели. Возьмите модель поменьше, загружайте её один раз при старте, а не на каждый запрос, или перенесите тяжёлую часть на внешний API. Если памяти не хватает самому приложению, нужен тариф с большими ресурсами.

Чем Gradio отличается от Streamlit при публикации?

Оба — веб-приложения на Python, и публикуются они одинаково: файл requirements.txt, главный файл с кодом и запуск на 0.0.0.0. Gradio удобнее для интерфейса к одной модели с входом и выходом, Streamlit — для дашбордов и отчётов. В Netrun оба фреймворка распознаются автоматически.

Можно ли запустить проект на Python — Django, Flask или FastAPI?

Да. Положите зависимости в requirements.txt — Netrun определит Python и соберёт проект сам. Django, Flask и FastAPI поддерживаются; приложение должно слушать порт из переменной окружения, а ключи и доступ к базе задаются как секреты, а не в коде.

Почему мой сайт иногда засыпает?

На бесплатном тарифе сайты засыпают после простоя и просыпаются за пару секунд при первом запросе. На тарифе Pro проект работает без сна.

Где указать токены и другие секретные значения?

В проекте есть вкладка «Секреты» — там задаются значения из кода, например токен от BotFather. Мы храним их в зашифрованном виде: названия переменных вы видите, сами значения не показываем никому, включая вас.

Запустите свой проект

Загрузите код, ответьте на пару вопросов — и получите рабочую ссылку. Есть бесплатный тариф

Попробовать Netrun
Все статьи блога