depth-anything-3 / SPACES_SETUP.md
linhaotong
update
4845d25
|
raw
history blame
4.67 kB
# Hugging Face Spaces 部署指南
## 📋 概述
这个项目已经配置好可以部署到 Hugging Face Spaces,使用 `@spaces.GPU` 装饰器来动态分配 GPU 资源。
## 🎯 关键文件
### 1. `app.py` - 主应用文件
```python
import spaces
from depth_anything_3.app.gradio_app import DepthAnything3App
from depth_anything_3.app.modules.model_inference import ModelInference
# 使用 monkey-patching 将 GPU 装饰器应用到推理函数
original_run_inference = ModelInference.run_inference
@spaces.GPU(duration=120) # 请求 GPU,最多 120 秒
def gpu_run_inference(self, *args, **kwargs):
return original_run_inference(self, *args, **kwargs)
ModelInference.run_inference = gpu_run_inference
```
**工作原理:**
- `@spaces.GPU` 装饰器在函数调用时动态分配 GPU
- `duration=120` 表示单次推理最多使用 GPU 120 秒
- 通过 monkey-patching,我们将装饰器应用到已有的推理函数上,无需修改核心代码
### 2. `README.md` - Spaces 配置
```yaml
---
title: Depth Anything 3
sdk: gradio
sdk_version: 5.49.1
app_file: app.py
pinned: false
license: cc-by-nc-4.0
---
```
这个 YAML 前置内容告诉 Hugging Face Spaces:
- 使用 Gradio SDK
- 入口文件是 `app.py`
- 使用的 Gradio 版本
### 3. `pyproject.toml` - 依赖配置
已经更新,包含了 `spaces` 依赖:
```toml
[project.optional-dependencies]
app = ["gradio>=5", "pillow>=9.0", "spaces"]
```
## 🚀 部署步骤
### 方式 1:通过 Hugging Face 网页界面
1. 在 Hugging Face 创建一个新的 Space
2. 选择 **Gradio** 作为 SDK
3. 上传你的代码(包括 `app.py`, `src/`, `pyproject.toml` 等)
4. Space 会自动构建并启动
### 方式 2:通过 Git
```bash
# 克隆你的 Space 仓库
git clone https://huggingface.co/spaces/YOUR_USERNAME/YOUR_SPACE_NAME
cd YOUR_SPACE_NAME
# 添加你的代码
cp -r /path/to/depth-anything-3/* .
# 提交并推送
git add .
git commit -m "Initial commit"
git push
```
## 🔧 配置选项
### GPU 类型
Hugging Face Spaces 支持不同的 GPU 类型:
- **Free (T4)**: 免费,适合小型模型
- **A10G**: 付费,更强大
- **A100**: 付费,最强大
### GPU Duration
在 `app.py` 中可以调整:
```python
@spaces.GPU(duration=120) # 120 秒
```
- 设置太短:复杂推理可能超时
- 设置太长:浪费资源
- 推荐:根据实际推理时间设置(可以先设长一点,然后根据日志调整)
### 环境变量
可以在 Space 设置中配置环境变量:
- `DA3_MODEL_DIR`: 模型目录路径
- `DA3_WORKSPACE_DIR`: 工作空间目录
- `DA3_GALLERY_DIR`: 图库目录
## 📊 监控和调试
### 查看日志
在 Spaces 界面点击 "Logs" 标签可以看到:
```
🚀 Launching Depth Anything 3 on Hugging Face Spaces...
📦 Model Directory: depth-anything/DA3NESTED-GIANT-LARGE
📁 Workspace Directory: workspace/gradio
🖼️ Gallery Directory: workspace/gallery
```
### GPU 使用情况
在装饰的函数内部,可以检查 GPU 状态:
```python
print(torch.cuda.is_available()) # True
print(torch.cuda.device_count()) # 1 (通常)
print(torch.cuda.get_device_name(0)) # 'Tesla T4' 或其他
```
## 🎓 示例代码
查看 `example_spaces_gpu.py` 了解 `@spaces.GPU` 装饰器的基本用法。
## ❓ 常见问题
### Q: 为什么使用 monkey-patching?
A: 这样可以在不修改核心代码的情况下添加 Spaces 支持。如果你想更优雅的方式,可以:
1. 直接在 `ModelInference.run_inference` 方法上添加装饰器
2. 创建一个继承自 `ModelInference` 的新类
### Q: 如何测试本地是否能运行?
A: 本地运行时,`spaces.GPU` 装饰器会被忽略(如果没有安装 spaces 包),或者会直接执行函数而不做特殊处理。
```bash
# 本地测试
python app.py
```
### Q: 可以装饰多个函数吗?
A: 可以!你可以给任何需要 GPU 的函数添加 `@spaces.GPU` 装饰器。
```python
@spaces.GPU(duration=60)
def function1():
pass
@spaces.GPU(duration=120)
def function2():
pass
```
### Q: 如何优化 GPU 使用?
A: 一些建议:
1. **只装饰必要的函数**:不要装饰整个 app,只装饰实际使用 GPU 的推理函数
2. **设置合适的 duration**:根据实际需求设置
3. **清理 GPU 内存**:在函数结束时调用 `torch.cuda.empty_cache()`
4. **批处理**:如果可能,批量处理多个请求
## 🔗 相关资源
- [Hugging Face Spaces 文档](https://huggingface.co/docs/hub/spaces)
- [Spaces GPU 使用指南](https://huggingface.co/docs/hub/spaces-gpus)
- [Gradio 文档](https://gradio.app/docs)
## 📝 许可证
Apache-2.0