Hub documentation

Spaces Dev Mode: бесшовная разработка в Spaces

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Spaces Dev Mode: бесшовная разработка в Spaces

Режим разработки Spaces входит в состав тарифных планов PRO или Team & Enterprise.

Spaces Dev Mode

Spaces Dev Mode — это функция, которая упрощает отладку вашего приложения и ускоряет итерации в Spaces.

Каждый раз, когда вы отправляете изменения в репозиторий вашего Space, базовый образ Docker пересобирается, а затем выделяется новая виртуальная машина для размещения нового контейнера.

Режим Dev позволяет значительно быстрее обновлять ваш Space, переопределяя Docker-образ.

Docker-образ Dev Mode запускает ваше приложение как дочерний процесс, что позволяет перезапускать его без остановки самого контейнера Space. Он также запускает в фоновом режиме SSH-сервер (для локальных редакторов и терминалов) и сервер VS Code (для встроенного в продукт VS Code Web), чтобы вы могли подключиться к Space.

Возможность подключаться к работающему Space открывает несколько вариантов использования:

  • Вы можете вносить изменения в код приложения без необходимости пересобирать Space каждый раз
  • Вы можете отлаживать работающее приложение и отслеживать ресурсы в реальном времени

В целом это значительно ускоряет разработку и эксперименты со Spaces, позволяя пропустить этап пересборки Docker-образа.

Интерфейс

После включения режима Dev на вашем Space вы должны увидеть модальное окно, подобное следующему.

screenshot of the dev mode controls interface.

Приложение не перезапускается автоматически при изменении кода. Чтобы изменения отобразились в Space, необходимо нажать кнопку Refresh, которая перезапустит приложение.

Если вы используете Gradio SDK или ваше приложение написано на Python, обратите внимание, что зависимости не устанавливаются автоматически. Вам нужно вручную выполнить pip install из VS Code или по SSH.

Подключение

Dev Mode предоставляет доступ к запущенному Space как к стандартному SSH-хосту. VS Code и любой другой редактор подключаются через тот же SSH-эндпоинт.

SSH

После запуска Dev Mode подключитесь с помощью:

ssh <space-subdomain>@ssh.hf.space

Поддомен отображается в модальном окне управления Dev Mode. Вы также можете получить его программно:

from huggingface_hub import HfApi
print(HfApi().space_info("namespace/repo").subdomain)

CLI Hugging Face может разрешить поддомен и открыть сессию за вас:

# SSH into the Space's Dev Mode container
hf spaces ssh username/my-space

# Print the SSH command instead of running it
hf spaces ssh username/my-space --dry-run

# Use a specific identity file
hf spaces ssh username/my-space -i ~/.ssh/id_ed25519

Передайте --auto, чтобы включить Dev Mode без запроса, если он ещё не запущен. Полный список параметров см. в справке по CLI hf spaces ssh.

Чтобы подключиться к Space по SSH, вам нужно добавить публичный SSH-ключ вашего компьютера в вашу учётную запись. Подробные инструкции приведены в документации Git over SSH.

VS Code

Вы также можете использовать локальную установку VS Code для подключения к контейнеру Space. Для этого установите расширение Remote - SSH и подключитесь к тому же хосту <space-subdomain>@ssh.hf.space.

Сохранение изменений

Изменения, внесённые при включённом режиме разработки, не сохраняются в репозиторий Space автоматически. По умолчанию они будут удалены при отключении режима разработки или при переходе Space в спящий режим.
If you wish to persist changes made while Dev Mode is enabled, you need to use `git` from inside the Space container (using VS Code or SSH). For example:
# Add changes and commit them
git add .
git commit -m "Persist changes from Dev Mode"

# Push the commit to persist them in the repo
git push

Модальное окно отобразит предупреждение, если в Space есть незакоммиченные или не отправленные изменения:

screenshot of the dev mode controls interface.

Включение режима разработки

Вы можете включить Dev Mode в вашем Space через веб-интерфейс или через API.

Через API

Вы можете переключить режим разработки программно:

POST https://huggingface.co/api/spaces/{namespace}/{repo}/dev-mode
Content-Type: application/json
Authorization: Bearer {token}

{
  "enabled": true
}

Через веб-интерфейс

screenshot of the dev mode toggle from the contextual menu.
screenshot of the dev mode toggle from the Space settings.
screenshot of the dev mode toggle from the Space logs.

Вы также можете создать Space с включенным режимом разработки:

screenshot of the dev mode toggle from the Space creation page.

Ограничения

Dev Mode в настоящее время недоступен для статических Spaces. Для Docker Spaces также существуют дополнительные требования.

Docker Spaces

Режим разработки поддерживается для Docker Spaces. Однако для корректной работы режима разработки ваш Space должен соответствовать следующим правилам.

  1. Необходимо установить следующие пакеты:
  • bash (необходим для установления SSH-соединений)
  • curl, wget и procps (необходимы для процесса сервера VS Code)
  • git и git-lfs для возможности коммитить и отправлять изменения из вашей среды Dev Mode
  1. Код вашего приложения должен находиться в папке /app, чтобы демон Dev Mode мог обнаруживать изменения.

  2. Папка /app должна принадлежать пользователю с uid 1000, чтобы вы могли вносить изменения в код.

  3. Dockerfile должен содержать инструкцию CMD для запуска. Подробности об инструкции CMD см. в документации Docker.

Dev Mode хорошо работает, если базовый образ основан на Debian (например, Ubuntu).

Более экзотические дистрибутивы Linux (например, alpine) не тестируются, и работа Dev Mode на них не гарантируется.

Примеры совместимых Dockerfile

Это пример Dockerfile, совместимый с Spaces Dev Mode.

Он устанавливает необходимые пакеты с помощью apt-get, а также несколько дополнительных для удобства разработчика (а именно: top, vim и nano). Затем он запускает приложение NodeJS из /app.

FROM node:19-slim

RUN apt-get update && \
    apt-get install -y \
      bash \
      git git-lfs \
      wget curl procps \
      htop vim nano && \
    rm -rf /var/lib/apt/lists/*


WORKDIR /app
COPY --link ./ /app
RUN  npm i 

RUN chown 1000 /app
USER 1000
CMD ["node", "index.js"]

В этой организации есть несколько примеров Docker Spaces, совместимых с Dev Mode. Смело дублируйте их в своём пространстве имён!

Пример приложения на Python (HTTP-сервер FastAPI): https://huggingface.co/spaces/dev-mode-explorers/dev-mode-python

Пример приложения на JavaScript (HTTP-сервер Express.js): https://huggingface.co/spaces/dev-mode-explorers/dev-mode-javascript

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

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

Update on GitHub