4.3 KiB
4.3 KiB
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 packaging/bootstrap_fishserver.sh
conda activate fishserver
若之前失败留下半成品,可先删环境再建:
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: ...。
which conda
conda info --base
ls /home/ubuntu/miniforge3/envs/fishserver/bin/python
ls /home/ubuntu/miniconda3/envs/fishserver/bin/python
在哪条路径下存在 fishserver,就用对应的:
source /home/ubuntu/miniforge3/etc/profile.d/conda.sh # 示例:改为实际有 fishserver 的根
conda activate fishserver
bootstrap 已全部改为 …/envs/fishserver/bin/python -m pip,不会再依赖脚本里的 conda activate。
仅 CPU 时可选用 CPU 轮子(示例):
TORCH_INDEX=https://download.pytorch.org/whl/cpu bash packaging/bootstrap_fishserver.sh
2.(可选)换其它 CUDA 版 PyTorch
生产若 必须 CUDA 12.4,保持默认 TORCH_INDEX 即可。若 已激活 fishserver 里误装成了 +cu130,可强制重装:
export TORCH_INDEX=https://download.pytorch.org/whl/cu124
bash packaging/patch_cuda_torch.sh
# 若脚本里显示的 python 仍是 …/miniforge3/bin/python(base),说明未进到 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。
其它索引示例:
export TORCH_INDEX=https://download.pytorch.org/whl/cu118 # 示例
bash packaging/patch_cuda_torch.sh
或到 pytorch.org 复制与你驱动匹配的命令。
3.(跑 SVO 必需)ZED SDK 与 pyzed
- 按 Stereolabs 文档安装 ZED SDK(与 Ubuntu / CUDA 版本一致)。
- 再安装 Python 绑定,例如 SDK 附带说明中的:
pip install pyzed
# 或安装官方提供的 pyzed-*.whl(需与 Python 3.11 + SDK 版本匹配)
未安装 pyzed 时,网关仍可启动,但 SVO ingest 会在子进程里失败;MP4 行为分支不依赖 ZED。
4. 启动服务
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. 校验(可选)
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。