# 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/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。 ``` 其它索引示例: ```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。