跳到主要内容

Spaces Dev Mode: Seamless development in Spaces

注意

此功能仍处于 Beta 阶段。

备注

Spaces Dev Mode 属于 PROTeam & Enterprise 订阅计划的一部分。

Spaces Dev Mode 是什么?

Spaces Dev Mode 用于简化应用的调试,并让在 Spaces 上迭代开发变得更快。

通常,当你向 Space 仓库提交变更时,底层 Docker 镜像会被重新构建,然后会新建一个虚拟机来运行新的容器。

Dev Mode 通过覆盖 Docker 镜像的方式,让你可以更快地更新 Space。

Dev Mode 构建的 Docker 镜像会将你的应用作为子进程启动,使你在无需停止整个 Space 容器的情况下重启应用。同时,它还会在后台启动 VS Code server 和 SSH server,方便你连接到 Space。

能够连接到正在运行的 Space 后,你可以:

  • 在不触发每次重建 Space 的前提下修改应用代码
  • 调试正在运行的应用并实时监控资源使用情况

总体来说,通过跳过 Docker 镜像重建阶段,Dev Mode 能显著加快在 Spaces 上的开发和实验迭代。

界面说明

启用 Dev Mode 后,你会看到如下弹窗:

Dev Mode ControlsDev Mode Controls

当你修改代码时,应用不会自动重启。要让变更在 Space 中生效,需要点击 Refresh 按钮以重启应用。

注意

如果你在使用 Gradio SDK,或者应用是基于 Python 的,需要注意依赖不会自动安装。 你需要通过 VS Code 或 SSH 手动运行 pip install

SSH 连接和 VS Code

Dev Mode 允许你通过 SSH 连接到 Space 的 Docker 容器。

连接方式会显示在 Dev Mode 控制弹窗中。

你需要先将本机的 SSH 公钥添加到个人账号,才能通过 SSH 连接到 Space。更详细的步骤可以参阅 Git over SSH 文档

你也可以在本地使用 VS Code 连接到 Space 容器,为此需要安装 SSH Remote 插件。

持久化变更

注意

当 Dev Mode 开启时,你在容器内做的修改不会自动持久化到 Space 仓库。 默认情况下,当 Dev Mode 被关闭或 Space 进入休眠,这些修改都会被丢弃。

如果你希望保留在 Dev Mode 下所做的修改,需要在 Space 容器内使用 git(通过 VS Code 或 SSH)进行提交。例如:

# 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 中存在未提交或未推送的变更,弹窗会提示你有修改尚未持久化到仓库:

Dev Mode Controls UncommittedDev Mode Controls Uncommitted

启用 Dev Mode

你可以通过 Web 界面为 Space 启用 Dev Mode。

Dev Mode Enable ContextualDev Mode Enable Contextual
Dev Mode Enable SettingsDev Mode Enable Settings
Dev Mode Enable LogsDev Mode Enable Logs

你也可以在创建 Space 时直接开启 Dev Mode:

Dev Mode Creation EnableDev Mode Creation Enable

限制

Dev Mode 当前不支持 static Spaces。Docker Spaces 也有一些额外要求。

Docker Spaces

Dev Mode 支持 Docker Spaces,但要正常工作,你的 Space 需要满足以下条件:

  1. 必须安装以下软件包:
  • bash(建立 SSH 连接所需)
  • curlwgetprocps(VS Code server 进程所需)
  • gitgit-lfs(在 Dev Mode 环境中提交与推送代码所需)
  1. 应用代码必须位于 /app 目录,Dev Mode 守护进程才能检测到代码变更。

  2. /app 目录必须属于 uid 为 1000 的用户,以允许你修改代码。

  3. Dockerfile 必须包含用于启动的 CMD 指令。更多细节可参考 Docker 文档

当基础镜像为 Debian 系(例如 ubuntu)时,Dev Mode 效果最好。

对于较为特殊的 Linux 发行版(例如 alpine)目前尚未覆盖测试,在这些环境上 Dev Mode 并不保证可用。

兼容的 Dockerfile 示例

下面是一个与 Spaces Dev Mode 兼容的 Dockerfile 示例。

它通过 apt-get 安装了必要的依赖,并额外安装了若干开发常用工具(如 topvimnano)。然后从 /app 目录启动 NodeJS 应用:

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"]

本组织下提供了多个 Dev Mode 兼容的 Docker Space 示例,你可以自由复制到自己的命名空间中使用。

Python 应用示例(FastAPI HTTP server):https://huggingface.co/spaces/dev-mode-explorers/dev-mode-python

Javascript 应用示例(Express.js HTTP server):https://huggingface.co/spaces/dev-mode-explorers/dev-mode-javascript

Feedback

你可以在 HF Hub 上直接为 Spaces Dev Mode 提交反馈:https://huggingface.co/spaces/dev-mode-explorers/README/discussions