当前位置: 首页 > news >正文

【Triton-ONNX】如何使用 ONNX 模型服务与 Triton 通信执行推理任务上-Triton快速开始

模型部署系列文章

  • 前置-docker 理解:【 0 基础 Docker 极速入门】镜像、容器、常用命令总结
  • 前置-http/gRPC 的理解: 【HTTP和gRPC的区别】协议类型/传输效率 /性能等对比
  • 【保姆级教程附代码】Pytorch (.pth) 到 TensorRT (.plan) 模型转化全流程
  • 【保姆级教程附代码(二)】Pytorch (.pth) 到 TensorRT (.plan) 模型转化全流程细化
  • 前面介绍了模型从 PyTorch 到 TensoRT 转化的过程(属于整体流程图的 Model Repo 那部分),接下来几篇则是将重点放到 client-server 之间的部分,需要我们加深对 triton_client 以及不同的 triton inference server 的理解。
  • 【Triton Inference Server 多输入|多输出|无输出】如何用 triton_client.infer 调用多输入、多输出的模型进行推理呢?
  • 本篇重点是解释如何使用 Python 库与 Triton 通信执行推理任务,参考官方 repo。

文章目录

  • 模型部署系列文章
  • Client-Server 整体流程
      • 关键步骤
  • 一、前置特性了解
  • 二、创建模型存储库
  • 三、启动 Triton(docker)
  • 四、Client 发送推理请求


Client-Server 整体流程

在这里插入图片描述

关键步骤

  1. Creating a Model Repository / 创建模型存储库
  2. Launching Triton / 启动 Triton
  3. Send an Inference Request / 发送推理请求

一、前置特性了解

  1. Python 客户端库使用 numpy 来表示输入和输出张量。

    • 其它框架(如 PyTorch)支持张量,其中张量中的每个元素都位于 可变长度二进制数据。
    • 每个元素可以包含一个字符串或 任意字节序列。
    • 在客户端上,此数据类型为 BYTES(请参阅 数据类型 有关支持的数据类型的信息)。
  2. 在某些情况下,使用系统共享内存在客户端库和 Triton 之间通信张量可以显著提高性能。

    • Python 示例应用程序 simple_http_shm_client.py 和 simple_grpc_shm_client.py 中演示了如何使用系统共享内存。
    • Python 没有分配和访问共享内存的标准方法,因此举个例子,一个简单的系统共享内存模块 提供了,可以与 Python 客户端库一起使用来创建, 设置和销毁系统共享内存。
  3. 在某些情况下,使用 CUDA 共享内存在客户端库和 Triton 之间传递张量可以显著提高性能。

    • Python 示例应用程序 simple_http_cudashm_client.py 和 simple_grpc_cudashm_client.py 中演示了如何使用 CUDA 共享内存。
    • Python 没有分配和访问共享内存的标准方法,因此举个例子,一个简单的 CUDA 共享内存模块 提供了,可以与 Python 客户端库一起使用来创建, 设置和销毁 CUDA 共享内存。该模块目前支持 numpy 数组(示例用法)和 DLPack 张量(示例用法)。

正式动手,以👉快速开始为案例。

二、创建模型存储库

  • 可以在示例中下载模型来进行尝试
cd docs/examples
./fetch_models.sh
  • 本文这里只下载了 densenet 作为尝试
# ONNX densenet
mkdir -p model_repository/densenet_onnx/1
wget -O model_repository/densenet_onnx/1/model.onnx \https://github.com/onnx/models/raw/main/validated/vision/classification/densenet-121/model/densenet-7.onnx

三、启动 Triton(docker)

docker run --gpus all --rm -p 8000:8000 -p 8001:8001 -p 8002:8002 -v $(pwd)/densenet_onnx:/models/densenet_onnx docker.io/xxx:v1 tritonserver --model-repository=/models
  1. 启动特定 Triton 的 docker 时过程中遇到了: Error response from daemon: could not select device driver “” with capabilities,参考方案得到了解决。
  2. 启动时要注意所在的路径和 docker 命令对应上。
    • 如下 -v $(pwd)/densenet_onnx:/models/densenet_onnx:这部分将当前工作目录下的 densenet_onnx 目录挂载到容器内的 /models/densenet_onnx 目录。
    • 那么当前目录下就需要有以下的结构才行。
      在这里插入图片描述
  3. 验证 Triton 是否正确运行
    • 正常运行后会有以下提示,可以看到模型是处于 READY 状态。
      在这里插入图片描述
    • 新开一个 terminal 后输入以下 curl 的语句。
    • 用 Triton 的就绪端点来验证服务器和模型是否已准备好进行推理。
    • 从主机系统使用curl 访问指示服务器状态的HTTP 端点。
curl -v localhost:8000/v2/health/ready# 输出为
*   Trying 127.0.0.1:8000...
* Connected to localhost (127.0.0.1) port 8000 (#0)
> GET /v2/health/ready HTTP/1.1
> Host: localhost:8000
> User-Agent: curl/7.81.0
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Content-Length: 0
< Content-Type: text/plain
< 
* Connection #0 to host localhost left intact
  • 这个输出说明 Triton Inference Server 已经准备好(ready)。返回的 200 OK 状态码表示服务器正常运行并能够处理请求。
  • 通过访问 /v2/health/ready 端点,你确认了 Triton Inference Server 的健康状态,表明它已成功启动并准备好接受推理请求。

四、Client 发送推理请求

  • 可以通过 docker 中的客户端来实现。
docker pull nvcr.io/nvidia/tritonserver:<xx.yy>-py3-sdkdocker run -it --rm --net=host nvcr.io/nvidia/tritonserver:24.08-py3-sdk
  • 从 nvcr.io/nvidia/tritonserver:<xx.yy>-py3-sdk 映像中,运行示例图像客户端应用程序,以使用示例 dendensenet_onnx 模型执行图像分类。

  • 要发送 dendensenet_onnx 模型的请求,请使用 /workspace/images 目录中的图像。在本例中,我们要求前 3 个分类。

    $ /workspace/install/bin/image_client -m densenet_onnx -c 3 -s INCEPTION /workspace/images/mug.jpg
    Request 0, batch size 1
    Image '/workspace/images/mug.jpg':15.346230 (504) = COFFEE MUG13.224326 (968) = CUP10.422965 (505) = COFFEEPOT
    

在这里插入图片描述

http://www.lryc.cn/news/514358.html

相关文章:

  • CertiK《Hack3d:2024年度安全报告》(附报告全文链接)
  • TIOBE 指数 12 月排行榜公布,VB.Net排行第九
  • 【网络协议】开放式最短路径优先协议OSPF详解(一)
  • 嵌入式Linux驱动开发的基本知识(驱动程序的本质、常见的设备类型、设备号的本质理解、设备实例的注册过程)
  • 爱死机第四季(秘密关卡)4KHDR国语字幕
  • kubelet状态错误报错
  • <div>{{ $t(“collectionPlan“) }}</div> 中的$t是什么
  • [C++刷题] 求回文素数
  • SQLALchemy如何将SQL语句编译为特定数据库方言
  • [卫星遥感] 解密卫星目标跟踪:挑战与突破的深度剖析
  • I2C(一):存储器模式:stm32作为主机对AT24C02写读数据
  • scrapy 教程
  • 2025元旦源码免费送
  • 高级架构五 设计模式
  • RFID手持机与RFID工业平板在仓储物流管理系统中的选型
  • IoC设计模式详解:控制反转的核心思想
  • 《云原生安全攻防》-- K8s安全配置:CIS安全基准与kube-bench工具
  • LINUX下载编译gtk
  • 基于VSCode软件框架的RISC-V IDE MRS2正式上线发布
  • AWS re:Invent 2024 - Dr. Werner Vogels 主题演讲
  • 前端小案例——520表白信封
  • FPGA随记——过约束
  • 如何利用云计算进行灾难恢复?
  • 【华为OD-E卷 - 九宫格按键输入 100分(python、java、c++、js、c)】
  • 基于AI大模型的医院SOP优化:架构、实践与展望
  • Linux快速入门-一道简单shell编程题目
  • Hive如何创建自定义函数(UDF)?
  • 聊聊前端框架中的process.env,env的来源及优先级(next.js、vue-cli、vite)
  • linux shell脚本 【分支结构case...in 、循环结构、函数】内附练习
  • VSCode 终端显示“pnpm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本”