Files
FishServer/docs/conda-deploy.md
2026-04-16 14:53:01 +08:00

123 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 使用 Conda 单环境部署 FishServer方案 A
本文说明在另一台 **Linux x86_64** 机器上,用 **一个 conda 环境** 安装 Fish API、FishMeasure、FishAction 所需依赖并启动服务。子进程与 uvicorn 共用同一 Python 解释器,**无需**在 `fish_api/.env` 中设置 `PYTHON_FISH_MEASURE` / `PYTHON_FISH_ACTION`(保持为空即可)。
---
## 前置条件
- 已克隆本仓库,目录中包含 `fish_api/``FishMeasure/``FishAction/`
- **模型权重**:将原机器上的 `models/``.env` 中引用的 checkpoint 拷贝到新机器;空目录会导致推理失败。
- **GPU可选**:若使用 `SAM_DEVICE=cuda` 或 PyTorch CUDA需安装与 PyTorch 版本匹配的 **NVIDIA 驱动与 CUDA**
- **ZED SDK处理 `.svo2` 时)**:在新机器安装 **Stereolabs ZED SDK** 及 Python API版本尽量与现有开发/生产环境一致。
- **ffmpeg**:用于视频转码;可用系统包(`apt install ffmpeg` 等),或使用仓库内 `scripts/setup_ffmpeg.sh`(需将脚本中的 `PROJECT_ROOT` 改为本机仓库路径)。
---
## 1. 创建并激活 conda 环境
Fish API 要求 **Python ≥ 3.11**(见 `fish_api/pyproject.toml`)。
```bash
conda create -n fishserver python=3.11 -y
conda activate fishserver
```
后续所有 `pip`/`python` 命令均在该环境中执行。
---
## 2. 安装 Fish APIFastAPI 网关)
```bash
cd /path/to/FishServer/fish_api
pip install -e .
# 或pip install -r requirements.txt
```
可选开发依赖(本地冒烟测试等):
```bash
pip install -e ".[dev]"
```
---
## 3. 在同一环境中安装 FishMeasure / FishAction 依赖
**方案 A 的核心**:测量与行为脚本由 API 以子进程调用,默认使用 **当前 `python`(与 uvicorn 相同)**,因此 PyTorch、OpenCV、ZED、X3D 等必须**全部**装进 **`fishserver`** 这一环境。
本仓库未提供单一的 `FishMeasure/requirements.txt`,请按以下方式之一对齐依赖:
1. **从已有机器导出**(推荐):在已能跑通测量的环境中执行 `pip freeze > requirements-frozen.txt`,在新环境中用 `pip install -r requirements-frozen.txt`(注意需人工剔除/替换与平台、CUDA 不兼容的包)。
2. **按模块 README 与脚本逐步安装**:参考 `FishMeasure/README.md`、各子目录说明,以及 `FishAction/predict_video_x3d_3class.py` 的实际 import至少安装 `FishAction/requirements.txt` 中的依赖,并补齐 PyTorch、torchvision、与 ZED 文档匹配的包。
安装完成后,在 **`conda activate fishserver`** 下验证:
```bash
python -c "import torch; print(torch.__version__)"
# 若使用 ZED按 Stereolabs 文档验证 pyzed 等
```
---
## 4. 配置 `fish_api/.env`
从旧机器复制 `fish_api/.env` 到新机器,**全部路径改为本机绝对路径**,例如:
- `PUBLIC_BASE_URL`:客户端可访问的 API 根地址,**不要**末尾 `/`
- `ACTION_WATCH_DIR``MEASURE_WATCH_DIR`:若启用目录监控,填本机目录。
- `YOLO_MODEL``WEIGHT_CHECKPOINT``ACTION_CHECKPOINT` 等:指向本机真实文件。
- `SAM_DEVICE``cuda``cpu`
**方案 A 下不要填写** `PYTHON_FISH_MEASURE``PYTHON_FISH_ACTION`(留空),让子进程使用当前环境的 `python`
启动前请 **`conda activate fishserver`**,使 `which python` / `which uvicorn` 指向该环境。`fish_api/start_fresh.sh` 使用环境变量 **`PYTHON`**(可选)覆盖解释器,默认 **`python3`**。
---
## 5. 启动服务
在**仓库根目录**执行:
```bash
conda activate fishserver
cd /path/to/FishServer
bash scripts/start_fresh.sh
```
默认监听 `0.0.0.0:8000`。可覆盖:
```bash
HOST=0.0.0.0 PORT=8000 bash scripts/start_fresh.sh
```
可选环境变量(见 `fish_api/start_fresh.sh` 注释):
- `CLEAR_SQLITE_DATABASE=1`:清空 SQLite谨慎
- `CLEAR_MEASURE_OUTPUT=1` / `CLEAR_ACTION_OUTPUT=1`:清空中间输出目录。
浏览器访问:`http://<主机>:8000/docs`
---
## 6. 自检清单
| 检查项 | 说明 |
|--------|------|
| 环境 | `conda activate fishserver``python -V` 为 3.11+ |
| API 包 | 在 `fish_api` 目录下 `python -c "import app"` 无报错 |
| 可执行文件 | `which uvicorn` 指向 `fishserver``bin` |
| 权重 | `.env` 中模型路径在本机存在 |
| 测量SVO | ZED 与 PyTorch 在同一 conda 环境中可用 |
| ffmpeg | `ffmpeg -version` 成功(若走视频转码路径) |
---
## 7. 参考
- 根目录 `README.md``fish_api/README.md`:环境变量表与启动说明。
- `fish_api/start_fresh.sh`:启动前 `prestart_fresh` 与 uvicorn 参数。
若需将 FishMeasure / FishAction 拆到**独立 conda 环境**,请在 `fish_api/.env` 中填写 `PYTHON_FISH_MEASURE``PYTHON_FISH_ACTION`(不在本文「方案 A」范围内