CircularNet 云端部署实战:在 models 仓库中启动并验证 Triton 推理服务器
【免费下载链接】modelsModels and examples built with TensorFlow项目地址: https://gitcode.com/GitHub_Trending/mode/models
本篇基于waste_identification_ml项目的官方部署文档(start-server.md)整理而成,讲解如何在 GCP GPU 虚拟机或边缘设备上启动 Triton 推理服务器并加载 CircularNet 实例分割模型。读完本文,你将能够独立完成服务器端部署全流程:执行启动脚本、理解脚本背后的模型下载与容器化编排逻辑、通过screen会话验证模型READY状态,并掌握会话的挂起与恢复操作,为后续运行推理客户端管线做好准备。
1. 部署背景:CircularNet 与 Triton 的组合
CircularNet 是 models 仓库official/projects/waste_identification_ml项目提供的实例分割模型,用于在传送带图像中识别可回收物。根据项目 README,CircularNet 基于 RF-DETR 这一同时具备目标检测与实例分割能力的视觉 Transformer 模型,输出物材质类别(如 metal、paper,塑料还会细分 HDPE、PET、LDPE 等树脂类型)与物料形态(cup、bottle、bag 等)的组合标签,示例推理标签形如Plastics-PET_Bottle。项目提供的最新模型为 ONNX 格式的单模型,同时完成 material type 与 form 两类检测。
将这类视觉模型暴露给上游管线调用时,本项目选择了 NVIDIA Triton Inference Server 作为服务化框架:模型以model_repository目录组织,通过 Docker 容器方式运行,并以 gRPC/HTTP 端口对外提供推理服务。整个云端部署分为三步:创建 GCP GPU 虚拟机、启动服务器(本文主题)、运行预测管线(客户端)。前置步骤包括在 GCP 中创建 T4 GPU 实例并克隆仓库,可分别参考 clone-repo 文档。
注意(来自原文档):如果你正在 Google Cloud 上操作但已关闭了SSH-in-browser窗口,请打开VM instances页面,在你连接的 NVIDIA T4 GPU 实例所在行点击SSH,重新打开SSH-in-browser工具。
2. 第一步:进入 server 目录
在 GCP VM 实例的SSH-in-browser窗口(或边缘设备的本地终端)中,进入waste_identification_ml项目下的server文件夹:
cd models/official/projects/waste_identification_ml/Deploy/detr_cloud_deployment/server/该目录在仓库中的对应位置是 server 目录,其中仅包含一个核心文件:triton_inference_server.sh。
3. 第二步:运行启动脚本
执行以下命令创建 Triton 推理服务器并加载最新的 circularnet 模型:
bash triton_inference_server.sh原文档正文中提到脚本名为
triton_server.sh,但给出的实际命令是bash triton_inference_server.sh;以仓库中真实存在的文件 triton_inference_server.sh 为准。
服务器启动后会保持后台运行(通过一个screen会话维持)。
4. 脚本实现解析:从清理、下载到容器编排
阅读 triton_inference_server.sh 的源码,可以完整还原该脚本的四段式工作流:
4.1 清理旧的 model_repository
脚本首先检查当前目录下是否已存在model_repository目录,若存在则整体删除,确保本次部署从干净的模型仓库状态开始,避免旧模型配置与新版 ONNX 模型混用:
if [ -d "model_repository" ]; then echo "Removing existing model_repository directory..." rm -rf model_repository fi4.2 下载并解压模型
脚本用 bash 关联数组(associative array)维护“模型名 → 下载地址”的映射,便于未来扩展多模型部署:
declare -A models=( ["CircularNet_Segmentation_Model_v1"]="https://storage.googleapis.com/"\ "tf_model_garden/vision/waste_identification_ml/"\ "CN-ModelCheckpoints/CN-TritonInferenceServer/CircularNet_model_v2.zip" ) for model_name in "${!models[@]}"; do url=${models[$model_name]} zip_file="${url##*/}" wget "$url" && unzip "$zip_file" rm "$zip_file" done要点:
- 模型从 Google 云存储桶
tf_model_garden的vision/waste_identification_ml路径下载,该地址与项目 README 中公布的CircularNet_Segmentation_Model_v1模型桶路径一致; - 该模型压缩包解压后即形成符合 Triton 规范的
model_repository目录结构(Triton 要求模型仓库为model_repository/<模型名>/<版本>/...层级); - 下载完成后立即删除 zip 文件,保持工作目录整洁。
4.3 依赖检查与 screen 会话启动
脚本会检查系统是否安装了screen,未安装时自动执行sudo apt update && sudo apt install -y screen。随后通过下面这条核心命令,在名为server的分离式(detached)screen 会话中拉起 Docker 容器:
screen -dmS server bash -c ' sudo docker run --gpus all --rm -p 8000:8000 -p 8001:8001 -p 8002:8002 \ -v ${PWD}/model_repository:/models nvcr.io/nvidia/tritonserver:25.05-py3 tritonserver --model-repository=/models'各参数含义如下:
| 参数 | 说明 |
|---|---|
screen -dmS server | 在后台(-d)创建一个名为server(-S)的会话,脚本本身不阻塞 |
sudo docker run --gpus all | 将宿主机全部 GPU 直通进容器,Triton 通过 Triton backend 使用 GPU 执行 ONNX 推理 |
--rm | 容器退出后自动清理容器资源 |
-p 8000:8000 | 映射 Triton gRPC 推理端口(客户端管线主要走此端口) |
-p 8001:8001 | 映射 HTTP 服务端口(健康检查、REST 推理) |
-p 8002:8002 | 映射指标监控端口(Prometheus 格式指标) |
-v ${PWD}/model_repository:/models | 把宿主机的模型仓库挂载到容器内/models,与--model-repository=/models参数对应 |
nvcr.io/nvidia/tritonserver:25.05-py3 | 使用的 Triton 官方镜像版本 |
从源码结构看,这里使用screen而非nohup或 systemd,目的是让运维人员随时能重新接入会话查看服务器实时日志(见下一节)。
5. 验证服务器是否正常运行
进入screen会话可以直观看到服务器持续运行的日志输出,模型加载成功后会显示READY状态。操作步骤:
1)列出所有 screen 会话:
screen -ls输出中会显示server会话并带有(Detached)标记——这表示你当前在会话外部,会话仍在后台保持。
2)接入 server 会话:
screen -r server会话打开后即可看到服务器的持续运行日志;Triton 完成模型加载后,模型状态列显示READY,说明部署成功、服务已就绪。
3)挂起而不停止服务器:按下Ctrl + a,松开后再按d,会话进入 detach 状态回到普通终端,而 Triton 服务器继续在后台运行。
6. 常见问题与注意事项
- GCP SSH 窗口关闭:SSH-in-browser 会话断开不会终止 VM 上的 screen 会话与 Docker 容器,重新通过 VM instances 页面点击SSH进入后可用
screen -r server重新接入; - 权限要求:脚本内部使用
sudo docker run,执行账户必须具有 sudo 权限,且在 GCP 上需按 Docker 部署文档完成 NVIDIA Container Toolkit 等 GPU 运行环境准备(文档提示可参考 GCP 标准 SSH 连接方式); - 重复执行:脚本每次运行都会删除旧的
model_repository并重新下载模型,但不会主动停止已存在的server会话——若旧会话未退出,新容器可能因端口(8000/8001/8002)被占用而失败,重跑前建议先确认或清理旧会话; - 模型版本一致性:脚本中的关联数组键名为
CircularNet_Segmentation_Model_v1,实际下载文件为CircularNet_model_v2.zip,即“逻辑模型名”与“包内版本号”存在演进差异,排查问题时应以桶内实际文件为准。
7. 下一步
服务器就绪(模型显示READY)后,即可进入客户端流程,把图片送入推理管线:进入 client 目录,修改 run_images.sh 中的--input_directory(输入 GCS 桶,如gs://bucket/input-images)、--output_directory(输出桶)、--project_id与--bq_table_id(存储推理结果的 BigQuery 表)等参数后运行管线,详见 start-client 文档。
【免费下载链接】modelsModels and examples built with TensorFlow项目地址: https://gitcode.com/GitHub_Trending/mode/models
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考