news 2026/9/7 4:20:48

CircularNet 云端部署实战:在 models 仓库中启动并验证 Triton 推理服务器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CircularNet 云端部署实战:在 models 仓库中启动并验证 Triton 推理服务器

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 fi

4.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_gardenvision/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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/7 4:18:51

YOLOv8结构拆解与改进实战:从数据诊断到消融实验

做毕业设计选 YOLOv8&#xff0c;是目前很多同学的目标检测标配。但一个常见的现象是&#xff1a;代码下载很顺利&#xff0c;训练完一看 mAP&#xff0c;效果并不理想。于是很多人开始在网上搜索各种改进模块&#xff0c;注意力机制、小目标检测头、BiFPN、新损失函数……一样…

作者头像 李华
网站建设 2026/9/7 4:16:38

精读Mask2Former:掩码注意力如何统一语义、实例与全景分割

分割这个方向&#xff0c;论文多到什么程度呢&#xff1f;光是用关键词去搜&#xff0c;语义分割、实例分割、全景分割、点云分割、遥感分割、医疗分割&#xff0c;每一类都能拉出几十上百篇&#xff0c;更不用说这两年Transformer和Mask类方法爆发之后&#xff0c;几乎每周都有…

作者头像 李华
网站建设 2026/9/7 4:14:38

旋转机械臂PID控制与前馈补偿:Java实现与参数整定指南

旋转机械臂运动控制里&#xff0c;PID 是最常被先拿来用的闭环算法&#xff0c;但真正想让关节停得稳、偏得小、跟得上轨迹&#xff0c;通常还要在 PID 之外加前馈补偿。这个话题在 Java 机器人编程里经常被提&#xff0c;尤其是写上位机控制逻辑时&#xff0c;很多人卡住的点不…

作者头像 李华