Files
FishServer/packaging/README.md

113 lines
4.3 KiB
Markdown
Raw Normal View History

# Fishserver 单一 Conda 环境(网关 + 双算法)
**fish_api**、**FishMeasure**、**FishAction** 放进同一个 Conda 环境 `fishserver` 后:
- 启动 **uvicorn** 时不需要再设置 `PYTHON_FISH_MEASURE` / `PYTHON_FISH_ACTION`
- 子进程与网关共用同一解释器,减少多环境混用问题。
## 1. 创建环境
在仓库根目录(`FishServer` 即本仓库根)执行。**GPU 默认固定为 PyTorch 的 CUDA 12.4 轮子**`--index-url https://download.pytorch.org/whl/cu124`),避免从 PyPI 主索引拉到 `+cu130`。其余依赖仍走 `pypi.org`
```bash
bash packaging/bootstrap_fishserver.sh
conda activate fishserver
```
若之前失败留下半成品,可先删环境再建:
```bash
conda env remove -n fishserver -y
bash packaging/bootstrap_fishserver.sh
```
### 装到了 base(cp312) / `conda activate fishserver` 找不到?
多根安装(**miniconda3** 与 **miniforge3** 并存)时,脚本用的 `conda info --base` 必须和你终端里是**同一套 conda**。脚本结束时也会打印 `Conda base was: ...`
```bash
which conda
conda info --base
ls /home/ubuntu/miniforge3/envs/fishserver/bin/python
ls /home/ubuntu/miniconda3/envs/fishserver/bin/python
```
在哪条路径下存在 `fishserver`,就用对应的:
```bash
source /home/ubuntu/miniforge3/etc/profile.d/conda.sh # 示例:改为实际有 fishserver 的根
conda activate fishserver
```
`bootstrap` 已全部改为 **`…/envs/fishserver/bin/python -m pip`**,不会再依赖脚本里的 `conda activate`
仅 CPU 时可选用 CPU 轮子(示例):
```bash
TORCH_INDEX=https://download.pytorch.org/whl/cpu bash packaging/bootstrap_fishserver.sh
```
## 2.(可选)换其它 CUDA 版 PyTorch
生产若 **必须 CUDA 12.4**,保持默认 `TORCH_INDEX` 即可。若 **已激活 fishserver** 里误装成了 `+cu130`,可强制重装:
```bash
export TORCH_INDEX=https://download.pytorch.org/whl/cu124
bash packaging/patch_cuda_torch.sh
# 若脚本里显示的 python 仍是 …/miniforge3/bin/pythonbase说明未进到 fishserver请显式指定
# FISHSERVER_PY="$HOME/miniforge3/envs/fishserver/bin/python" bash packaging/patch_cuda_torch.sh
#
# 若曾装过 cu130 / PyPI 版 torch`patch_cuda_torch.sh` 会先 uninstall 再从 cu124 索引重装;全局 pip
# 若配置了 extra-index-url如 NGC安装步骤会临时用 PIP_CONFIG_FILE=/dev/null 避免混索引。
# 若仍因残留 nvidia-*-cu13 冲突,可先: pip uninstall -y torch torchvision && pip list | grep -E 'cuda|nvidia'
# 按需删掉旧 cu13 包后再跑一次 patch。
```
其它索引示例:
```bash
export TORCH_INDEX=https://download.pytorch.org/whl/cu118 # 示例
bash packaging/patch_cuda_torch.sh
```
或到 [pytorch.org](https://pytorch.org/get-started/locally/) 复制与你驱动匹配的命令。
## 3.(跑 SVO 必需ZED SDK 与 pyzed
1. 按 Stereolabs 文档安装 **ZED SDK**(与 Ubuntu / CUDA 版本一致)。
2. 再安装 Python 绑定,例如 SDK 附带说明中的:
```bash
pip install pyzed
# 或安装官方提供的 pyzed-*.whl需与 Python 3.11 + SDK 版本匹配)
```
未安装 pyzed 时,网关仍可启动,但 **SVO ingest 会在子进程里失败**MP4 行为分支不依赖 ZED。
## 4. 启动服务
```bash
conda activate fishserver
export PUBLIC_BASE_URL="http://192.168.x.x:8001" # 与对外访问一致,影响 JSON 里 video_* URL
PORT=8001 bash scripts/run_fishserver.sh
```
## 5. 与「多环境」方案对比
| 方案 | 优点 | 缺点 |
|------|------|------|
| **本目录:单 env fishserver** | 配置简单;无需 `PYTHON_FISH_*` | 依赖冲突时需自己调版本(尤其 ZED / torch / opencv |
| 网关 + 两个独立 env | 隔离最好 | 需设置 `PYTHON_FISH_MEASURE``PYTHON_FISH_ACTION` |
## 6. 校验(可选)
```bash
conda activate fishserver
python -c "import torch; print('torch', torch.__version__, 'cuda', torch.cuda.is_available())"
python -c "import fastapi, uvicorn; print('gateway ok')"
python -c "import pytorchvideo; print('pytorchvideo ok')"
python -c "import pyzed.sl as sl; print('pyzed ok')" # 仅装 SDK 后成功
```
若某一步 import 失败按报错补装或调整版本FishMeasure 体量较大,首次建议在有 GPU 的机器上试跑一条短 SVO / 短 MP4。