深度学习部署:Triton(Triton inference server)【旧称:TensorRT serving,专门针对TensorRT设计的服务器框架,后来变为Triton,支持其他推理后端】

2023-10-27

triton作为一个NVIDIA开源的商用级别的服务框架,个人认为很好用而且很稳定,API接口的变化也不大,我从2020年的20.06切换到2022年的22.06,两个大版本切换,一些涉及到代码的工程变动很少,稍微修改修改就可以直接复用,很方便。

本系列讲解的版本也是基于22.06。

本系列讲解重点是结合实际的应用场景以及源码分析,以及写一些triton周边的插件、集成等。非速成,适合同样喜欢深入的小伙伴。

什么是triton inference server?

肯定很多人想知道triton干啥的,学习这个有啥用?这里简单解释一下:

  • triton可以充当服务框架去部署你的深度学习模型,其他用户可以通过http或者grpc去请求,相当于你用flask搭了个服务供别人请求,当然相比flask的性能高很多了
  • triton也可以摘出C-API充当多线程推理服务框架,去除http和grpc部分,适合本地部署多模型,比如你有很多模型要部署,然后分时段调用,或者有pipeline,有了triton就省去你处理显存、内存和线程的麻烦
注意,还有一个同名的 triton是GPU编程语言,类似于TVM的TVMscript,需要区分,这篇文章中的triton指的是triton inference server

借用官方的图,triton的使用场景结构如下:

涉及到运维部分,我也不是很懂,抛去K8S后,结构清爽了些:

triton的一些优点

通过上述的两个结构图,可以大概知道triton的一些功能和特点

  • 支持HTTP/GRPC
  • 支持多backend,TensorRT、libtorch、onnx、paddle、tvm啥的都支持,也可以自己custom,所以理论上所有backend都可以支持
  • 单GPU、多GPU都可以支持,CPU也支持
  • 模型可以在CPU层面并行执行
  • 很多基本的服务框架的功能都有,模型管理比如热加载、模型版本切换、动态batch,类似于之前的tensorflow server
  • 开源,可以自定义修改,很多问题可以直接issue,官方回复及时
  • NVIDIA官方出品,对NVIDIA系列GPU比较友好,也是大厂购买NVIDIA云服务器推荐使用的框架
  • 很多公司都在用triton,真的很多,不管是互联网大厂还是NVIDIA的竞品都在用,用户多代表啥不用我多说了吧

如何学习triton

两年前开始学习的时候,官方资料比较匮乏, 只能通过看源码来熟悉triton的使用方式,所幸知乎上有个关于TensorRT serving不错的教程,跟着看了几篇大致了解了triton的框架结构。那会triton叫做TensorRT serving,专门针对TensorRT设计的服务器框架,后来才变为triton,支持其他推理后端的

现在triton的教程比较多了,官方的docs写着比较详细,还有issue中各种用例可以参考,B站上也有 视频教程,比两年前的生态要好了不少。

当然,最重要的,还是上手使用,然后看源码, 然后客制化。

源码学习

从triton的源码中可以学到:

  • C++各种高级语法
  • 设计模式
  • 不同backend(libtorch、TensorRT、onnxruntime等)如何正确创建推理端,如何多线程推理
  • C++多线程编程/互斥/队列
  • API接口暴露/SDK设计
  • CMAKE高级用法

等等等等,不列举了,对于程序员来说,好的源码就是好的学习资料。当然,也可以看老潘的文章哈。

triton系列教程计划

triton相关系列也会写一些文章,目前大概规划是这些:

  • 什么是triton以及triton入门、triton编译、triton运行
  • triton管理模型、调度模型的方式
  • triton的backend介绍、自定义backend
  • 自定义客户端,python和c++
  • 高级特性、优先级、rate limiter等等

编译和安装

一般来说,如果想快速使用triton,直接使用官方的镜像最快。 但是官方镜像有个尴尬点,那就是编译好的镜像需要的环境一般都是最新的,和你的不一定一致 !

比如22.09版本的镜像需要的显卡驱动为520及以上,如果想满足自己的显卡驱动,就需要自行编译了。 官方也提供了使用镜像的快速使用方法

# 第一步,创建 model repository 
git clone -b r22.09 https://github.com/triton-inference-server/server.git
cd server/docs/examples
./fetch_models.sh

# 第二步,从 NGC Triton container 中拉取最新的镜像并启动
docker run --gpus=1 --rm --net=host -v ${PWD}/model_repository:/models nvcr.io/nvidia/tritonserver:22.09-py3 tritonserver --model-repository=/models

# 第三步,发送
# In a separate console, launch the image_client example from the NGC Triton SDK container
docker run -it --rm --net=host nvcr.io/nvidia/tritonserver:22.09-py3-sdk
/workspace/install/bin/image_client -m densenet_onnx -c 3 -s INCEPTION /workspace/images/mug.jpg

# Inference should return the following
Image '/workspace/images/mug.jpg':
    15.346230 (504) = COFFEE MUG
    13.224326 (968) = CUP
    10.422965 (505) = COFFEEPOT

triton官方仓库

两年前的triton只有一个大仓库,tensorrt_backend也默认在triton主仓库中,但是现在tensorrt_backend被拆分出来了,很显然triton除了支持tensorrt还支持很多其他的后端,我们可以自定义使用很多后端。

现在是目前的triton包含的一些仓库:

  • [server] triton服务外层框架,包含了http收发请求,服务内存分配等一些功能代码
  • [core] triton主框架,如果处理请求、后端管理、模型调度啥的全在这里
  • [common] 通用工具,没啥好说的,打日志的代码在这里
  • [
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习部署:Triton(Triton inference server)【旧称:TensorRT serving,专门针对TensorRT设计的服务器框架,后来变为Triton,支持其他推理后端】 的相关文章

随机推荐

  • Android SDK & AVD Manager

    0 前言 Android源码中的prebuilts devtools tools android程序可根据不同的参数来启动SDK Manager或AVD Manager 1 SDK Manager 1 启动 android or andro
  • Chrome 基于 Wappalyzer 查看网站所用的前端技术栈

    1 找到谷歌商店 https chrome google com webstore search wappalyzer utm source ext app menu 2 搜索 Wappalyzer 3 添加至Chrome 4 使用 插件
  • MySQL的脏读、幻读、不可重复读

    首先我们要知道 我们的脏读 幻读 不可重复读这些概念是在事务中的概念 脏读 也就是读取了未提交的数据 比如我开启了一个事务A 在里面操作一个用户表 获取里面一个用户的积分 比如此时这个用户的积分是100 此时有另外一个事务B也操作了这个用户
  • LD3320语音识别

    芯片介绍 LD3320 不需要外接任何辅助的Flash芯片 RAM芯片和AD芯片 就可以完成语音识别功能 每次识别最多可以设置50项候选识别句 每个识别句可以是单字 词组或短句 另一方面 识别句内容可以动态编辑修改 只需要主控MCU把识别关
  • 碎碎念,浅浅饮-------Day30

    这不是一篇关乎技术的文章 它偏离了我原本的计划轨迹 但是 相信它的意义会远超出任何一项技术带给我的价值 高考已经开始了 不知道在这片宁静的夜空下有多少人已经美美的睡了 香甜憨然 又有多少人这睡着的眼角还挂着泪滴 偶尔蹙起眉头 却也记载不下那
  • 固态硬盘接口类型介绍

    固态硬盘接口类型介绍 现在装机硬盘肯定会首选SSD 容量小一点不怕 后面再补一个机械硬盘不迟 SSD有着稳固和高速的优势 深受用户喜爱 然而SSD有着各种各样的尺寸和接口 并不是每一个用户的电脑都能通用 所以选购SSD硬盘前必须先了解SSD
  • ajax请求出现闪屏,jquery $.Ajax 火狐浏览器闪屏解决办法

    本文章介绍了关于jquery的async false Ajax 火狐浏览器闪屏解决办法 jquery的async false 这个属性 默认是true 异步 false 同步 代码如下 复制代码 ajax type post url pat
  • vue2知识点梳理

    Vue梳理 对于Vue 我们并不陌生 现在我们来梳理一下关于它的东西吧 知识点 1 生命周期 最基本的就是它的生命周期 beforeCreate 在 beforeCreate 生命周期函数执行时 data 和 methods 中的数据都还没
  • Open3D (C++) 点云按坐标值大小进行排序

    目录 一 概述 二 点云排序 三 结果展示 一 概述 如题 点云按坐标大小进行排序 二 点云排序 代码以按照Z坐标的大小按照从小到大进行排序为例 include
  • java输出1~100之间的全部素数的5种方法

    文章目录 一 前言 二 需求分析 2 1 什么是素数 2 2 分析 三 代码实现 3 1 方法一 根据素数的定义来遍历检查 3 2 方法二 根据判断条件2进行遍历检查 减少遍历次数 3 3 方法三 根据判断条件3进行遍历检查 减少遍历次数
  • 达梦数据库调优组合索引的使用

    调优工程中对组合索引的使用的一个小总结 一 组合索引的执行计划 首先关于几个概念 等值条件和范围条件 1 等值条件 C1 X C1 X OR C1 Y 会被优化成C1 IN X Y C1 IN X Y 这种形式的我们都叫做等值条件 2 范围
  • Linux 安装Xrdp,实现RDP连接

    linux 安装xrdp RDP 连接 安装前提 root 权限 root server 76 conf yum install xrdp root 权限 安装 yum install xrdp Loaded plugins fastest
  • Eigen不同的方法来求矩阵的逆的效率

    背景 不同尺寸的矩阵 求逆使用不同的方法 会有不同的效率的 16x16矩阵的直接求逆与PartialPivLU的效率对比 本人亲测 1 实现代码 GetSystemTimeInMacroSecond的实现 boost posix time
  • 自适应卡尔曼滤波_【导师论坛】

    复杂噪声情况下的新型卡尔曼滤波器研究 主讲 黄玉龙 副教授 哈尔滨工程大学 时间 2019年1月17日 周四 14 30 16 30 地点 智能科学学院主楼401会议室 主讲人介绍 黄玉龙 博士 哈尔滨工程大学自动化学院副教授 2018年1
  • 远程代码执行漏洞的利用与防御

    什么是RCE漏洞 全称 remote command code execute 分为远程命令执行和远程代码执行 1 命令执行漏洞 直接调用操作系统命令 2 代码执行漏洞 靠执行脚本代码调用操作系统命令 一般出现这种漏洞 是因为应用系统从设计
  • 第十届蓝桥杯省赛Java B组 数的分解

    试题 D 数的分解 本题总分 10 分 问题描述 把 2019 分解成 3 个各不相同的正整数之和 并且要求每个正整数都不包 含数字 2 和 4 一共有多少种不同的分解方法 注意交换 3 个整数的顺序被视为同一种方法 例如 1000 100
  • mysql 数据恢复 binlog

    被删库勒索的一次记录 项目在云服务器运行了一年多了 中间迁移过一次 从阿里迁到华为了 迁移的时候把数据库文件 test sql 用完了之后就扔在了服务器上 最近访问系统的时候 忽然系统崩溃 表不存在了 数据库连接工具也连不上了 到服务器上的
  • torch.fx介绍

    Node Node类构造函数的各项参数如下 参考torch fx下的node py graph 指明实例化的Node属于哪个Graph op 节点的类型 一共有如下的几种类型 placeholder 占位符 一般代表输入 call meth
  • 【LeetCode刷题】169 多数元素

    给定一个大小为 n 的数组 找到其中的多数元素 多数元素是指在数组中出现次数 大于 n 2 的元素 你可以假设数组是非空的 并且给定的数组总是存在多数元素 方法一 HashMap 每个值初始value都为1 每重复一次 value 1 最后
  • 深度学习部署:Triton(Triton inference server)【旧称:TensorRT serving,专门针对TensorRT设计的服务器框架,后来变为Triton,支持其他推理后端】

    triton作为一个NVIDIA开源的商用级别的服务框架 个人认为很好用而且很稳定 API接口的变化也不大 我从2020年的20 06切换到2022年的22 06 两个大版本切换 一些涉及到代码的工程变动很少 稍微修改修改就可以直接复用 很