Spaces:
Sleeping
Sleeping
File size: 2,229 Bytes
a3bfafd 8e80192 a3bfafd 8e80192 a3bfafd | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | # HuggingRun 设计
**Slogan:** Run anything on Hugging Face.
## 目标
- 把 Hugging Face Spaces 当成**通用容器**:只要应用能 Docker 化,就能在 HF 上跑。
- 参考 HuggingClaw 的持久化与入口模式,做成**可配置**的通用运行时。
- 通过至少一个「难例」部署验证(如 FastAPI+SQLite 或带状态的 Web 应用)。
## 架构
1. **单一 Docker 镜像**
- 使用 `ARG BASE_IMAGE` 选择基础镜像(默认 `python:3.11-slim`)。
- 在基础镜像上安装 Python3 + `huggingface_hub`(若基础镜像无),并加入通用脚本。
- 通过 `ENV RUN_CMD` 指定要执行的命令(应用由用户通过 CMD/环境变量提供)。
2. **入口脚本 `entrypoint.sh`**
- 调用 `sync_hf.py` 做启动时恢复与周期性上传(可选)。
- 最后 `exec` 执行 `RUN_CMD`(或 Dockerfile 的 CMD),使主进程为 PID 1。
3. **持久化 `sync_hf.py`**
- 可配置持久化目录 `PERSIST_PATH`(默认 `/data`)。
- 可配置 HF Dataset repo:`HF_DATASET_REPO` 或由 `SPACE_ID` 推导 `{SPACE_ID}-data`。
- 启动时:若存在 `HF_TOKEN` 与 repo,则 `snapshot_download` 到 `PERSIST_PATH`。
- 后台线程:按 `SYNC_INTERVAL` 将 `PERSIST_PATH` 上传到 Dataset。
- 退出时:最后一次上传。
4. **HF Spaces 约定**
- `sdk: docker`,`app_port: 7860`。
- 用户需在 Space 中设置 `RUN_CMD`(以及可选 `HF_TOKEN`、`HF_DATASET_REPO`、`PERSIST_PATH`)。
- 若使用默认 demo,`RUN_CMD` 启动监听 7860 的简单服务并读写 `PERSIST_PATH`,用于验证持久化。
## 完成标准(迭代开发)
- [ ] **通用工具**:README 与 docs/HF_LIMITATIONS.md 明确“通用接口 + HF 限制应对”;entrypoint/sync 可配置 PERSIST_PATH、APP_PORT、RUN_CMD。
- [ ] 本地 `docker build` 与 `docker run` 成功,默认 demo 在 7860 响应。
- [ ] 持久化:重启容器后,写入 `PERSIST_PATH` 的内容仍在(通过 HF Dataset 恢复)。
- [ ] 示例最小化:FastAPI+SQLite、Ubuntu 桌面等仅演示“用通用工具”的用法,不增加额外通用逻辑。
- [ ] 代码推送到 HF Space,且在该 Space 中成功运行并通过验证。
|