Triton教程 --- 自定义操作

news2024/9/23 13:26:53

Triton教程 — 自定义操作

在这里插入图片描述

Triton系列教程:

  1. 快速开始
  2. 利用Triton部署你自己的模型
  3. Triton架构
  4. 模型仓库
  5. 存储代理
  6. 模型设置
  7. 优化
  8. 动态批处理
  9. 速率限制器
  10. 模型管理

自定义操作

Triton 推理服务器部分支持允许自定义操作的建模框架。 自定义操作可以在构建时或启动时添加到 Triton,并可供所有加载的模型使用。

TensorRT

TensorRT 允许用户创建自定义层,然后可以在 TensorRT 模型中使用。 对于要在 Triton 中运行的这些模型,必须提供自定义层。

为了使自定义层可供 Triton 使用,TensorRT 自定义层实现必须编译为一个或多个共享库,然后必须使用 LD_PRELOAD 将这些共享库加载到 Triton 中。 例如,假设您的 TensorRT 自定义层被编译到 libtrtcustom.so 中,使用以下命令启动 Triton 将使这些自定义层可用于所有 TensorRT 模型。

这种方法的一个限制是自定义层必须与模型存储库本身分开管理。 更严重的是,如果多个共享库之间存在自定义层名称冲突,目前还没有办法处理它。

构建自定义层共享库时,使用与 Triton 中使用的 TensorRT 版本相同的版本非常重要。 您可以在 Triton 发行说明中找到 TensorRT 版本。 确保您使用正确版本的 TensorRT 的一个简单方法是使用与 Triton 容器对应的 NGC TensorRT 容器。 例如,如果您使用的是 23.05 版本的 Triton,请使用 23.05 版本的 TensorRT 容器。

TensorFlow

TensorFlow 允许用户添加自定义操作,然后可以在 TensorFlow 模型中使用这些操作。 您可以通过两种方式将自定义 TensorFlow 操作加载到 Triton 中:

  • 在模型加载时,通过在模型配置中列出它们。

  • 在服务器启动时,通过使用 LD_PRELOAD。

要通过模型配置注册自定义操作库,您可以将其包含为附加字段。 请参阅以下配置示例。

$ model_operations { op_library_filename: "path/to/libtfcustom.so" }

请注意,即使模型是在运行时加载的,多个模型也可以使用自定义运算符。 目前无法取消分配自定义操作符,因此它们将保持可用状态,直至 Triton 关闭。

您还可以通过 LD_PRELOAD 注册您的自定义操作库。 例如,假设您的 TensorFlow 自定义操作被编译到 libtfcustom.so 中,使用以下命令启动 Triton 将使这些操作可用于所有 TensorFlow 模型。

$ LD_PRELOAD=libtfcustom.so:${LD_PRELOAD} tritonserver --model-repository=/tmp/models ...

通过这种方法,所有 TensorFlow 自定义操作都依赖于 TensorFlow 共享库,该库在加载时必须可供自定义共享库使用。 实际上,这意味着在发出上述命令之前,您必须确保 /opt/tritonserver/backends/tensorflow1 /opt/tritonserver/backends/tensorflow2 位于库路径上。 有多种方法可以控制库路径,最常见的一种是使用 LD_LIBRARY_PATH。 您可以在“docker run”命令中或容器内设置LD_LIBRARY_PATH。

$ export LD_LIBRARY_PATH=/opt/tritonserver/backends/tensorflow1:$LD_LIBRARY_PATH

这种方法的一个限制是自定义操作必须与模型存储库本身分开管理。 更严重的是,如果多个共享库之间存在自定义层名称冲突,目前还没有办法处理它。

在构建自定义操作共享库时,使用与 Triton 中使用的相同版本的 TensorFlow 非常重要。 您可以在 Triton 发行说明中找到 TensorFlow 版本。 确保您使用正确版本的 TensorFlow 的一种简单方法是使用与 Triton 容器相对应的 NGC TensorFlow 容器。 例如,如果您使用的是 23.05 版本的 Triton,请使用 23.05 版本的 TensorFlow 容器。

PyTorch

Torchscript 允许用户添加自定义操作,然后可以在 Torchscript 模型中使用。 通过使用 LD_PRELOAD,您可以将自定义 C++ 操作加载到 Triton 中。 例如,如果您按照 pytorch/extension-script 存储库中的说明进行操作,并且您的 Torchscript 自定义操作被编译到 libpytcustom.so 中,则使用以下命令启动 Triton 将使这些操作可用于所有 PyTorch 模型。 由于所有 Pytorch 自定义操作都依赖于一个或多个 PyTorch 共享库,这些 PyTorch 共享库在加载时必须可供自定义共享库使用。 实际上,这意味着您必须确保 /opt/tritonserver/backends/pytorch 在启动服务器时位于库路径上。 有多种方法可以控制库路径,最常见的一种是使用 LD_LIBRARY_PATH。

$ LD_LIBRARY_PATH=/opt/tritonserver/backends/pytorch:$LD_LIBRARY_PATH LD_PRELOAD=libpytcustom.so:${LD_PRELOAD} tritonserver --model-repository=/tmp/models ...

这种方法的一个限制是自定义操作必须与模型存储库本身分开管理。 更严重的是,如果多个共享库之间或用于在 PyTorch 中注册它们的句柄之间存在自定义层名称冲突,则当前无法处理它。

从 Triton 20.07 版本开始,TorchVision 操作将包含在 PyTorch 后端中,因此不必将它们显式添加为自定义操作。

在构建自定义操作共享库时,使用与 Triton 中使用的相同版本的 PyTorch 非常重要。 您可以在 Triton 发行说明中找到 PyTorch 版本。 确保您使用正确版本的 PyTorch 的一个简单方法是使用与 Triton 容器对应的 NGC PyTorch 容器。 例如,如果您使用的是 23.05 版本的 Triton,请使用 23.05 版本的 PyTorch 容器。

ONNX

ONNX 运行时允许用户添加自定义操作,然后可以在 ONNX 模型中使用这些操作。 要注册自定义操作库,您需要将其作为附加字段包含在模型配置中。 例如,如果您遵循 microsoft/onnxruntime 存储库中的此示例,并且您的 ONNXRuntime 自定义操作被编译到 libonnxcustom.so 中,则将以下内容添加到您的模型的模型配置中,使这些操作可用于该特定的 ONNX 模型。

$ model_operations { op_library_filename: "/path/to/libonnxcustom.so" }

构建自定义操作共享库时,使用与 Triton 中使用的相同版本的 ONNXRuntime 非常重要。 您可以在 Triton 发行说明中找到 ONNXRuntime 版本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/673166.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端3D Three.js 在本地搭建一个官方网站

上文Web前端 3D开发入门规划 3D效果将不再是桌面应用的专利我们说了说 WEB 3D的一个发展和学习方向 那么 我们还是先搞定文档使用的问题 我们可以访问http://www.yanhuangxueyuan.com/Three.js/这里面可以查到使用方法 但不是最新的 而是别人用官方文档改的 真正的官方文档地址…

30 linux 新建进程的进程号是如何分配的?

前言 呵呵 进程号是我们经常使用到的, 但是 却从来 没有深究过的东西 这里 就来看一下 具体的进程号的生成方式 linux 新建进程是以 fork exec 的形式创建进程的 子进程 是 复制自 父进程 pid 是怎么生成的? 分配 pid 的地方调用堆栈如下, fork 之后, 会为 新进程 申…

全志V3S嵌入式驱动开发(基于usb otg的spi-nand镜像烧入)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们说过spi nand驱动,但是这个驱动是建立在linux系统从sd卡加载的情况下进行的。开发测试的情况下,这么做或许是可以的…

PWM详解(嵌入式学习)

这里写目录标题 前言定义参数工作原理应用练习 前言 在STM32微控制器中,PWM代表脉冲宽度调制(Pulse Width Modulation)。PWM是一种用于控制电子设备的技术,通过调整信号的脉冲宽度和周期,可以模拟出不同的电压或功率级…

【python】—— 基础语法(一)

序言: 在之前,我们已经对【python】的开发环境进行了相应的安装,紧接着本期我就讲给大家介绍它的相关语法。对于学过【C/C】或者其他语言的小伙伴来说,语法内容学习起来就会掌握的很快了。 目录 前言 (一&#xff0…

【架构师】零基础到精通——网关策略

博客昵称:架构师Cool 最喜欢的座右铭:一以贯之的努力,不得懈怠的人生。 作者简介:一名退役Coder,软件设计师/鸿蒙高级工程师认证,在备战高级架构师/系统分析师,欢迎关注小弟! 博主小…

vue服务端渲染SSR

一:ssr的理解 1、服务端渲染 Server Side Render SSR解决方案,后端渲染出完整的首屏的dom结构返回,前端拿到的内容包括首屏及完整spa结构,应用激活后依然按照spa方式运行,这种页面渲染方式被称为服务端渲染 (server si…

ISO C++ 26 并发和并行性重大完善

ISO C 委员会举行会议正式通过了 C 26 的时间表。ISO C 标准委员会主席兼微软语言架构师 Herb Sutte,并发和并行小组仍在按计划推进 C26 的 std::execution 和 SIMD 并行 一、 C23 与C 26 开发时间表: 二、C26标准属性三大规则。非正式总结是: [已经在c …

【Python 基础篇】Python数据序列推导式

文章目录 前言一、列表推导式二、字典推导式三、集合推导式总结 前言 在Python中,推导式(Comprehension)是一种简洁而强大的语法,用于快速创建列表、字典和集合。推导式使得在一个简单的语句中就能生成一个新的数据结构&#xff…

忘记Gmail谷歌账号密码或者密码错误怎么办?用这种方法轻松搞定

有些朋友以前注册过谷歌邮箱,但很久很久没有再去使用。现在注册ChatGPT需要谷歌邮箱,于是打算把尘封已久的谷歌邮箱找出来,可是这时候你突然发现,谷歌邮箱的密码忘了。 今天重点来说说如何找回谷歌账号的密码,希望能够…

英语口语进阶:让你的疲劳与口渴表达更地道

前言 🏠个人主页:我是沐风晓月 🧑个人简介:大家好,我是沐风晓月,阿里云社区博客专家 😉😉 💕 座右铭: 先努力成长自己,再帮助更多的人,一起加油进…

Web网页制作期末复习(4)——CSS盒子模型、弹性盒模型(flex box)、文档流、浮动、清除浮动、定位、圆角、阴影

目录 CSS盒子模型 概念 弹性盒模型(flex box) 内容 父元素上的属性 display属性 flex-direction属性 justify-content属性 align-items属性 子元素上的属性 flex 文档流(标准流) 浮动 定义 浮动的原理 清除浮动 …

用OpenCV进行OCR字符分割

1. 引言 本文重点介绍如何利用传统的图像处理的方法来进行OCR字符切分,进而可以用分割后的单个字符做相应的后续任务,虽然现在计算机视觉依然是卷积神经网络的天下,但是对于一些相对简单的落地场景传统方案还是很有效的。 闲话少说&#xff…

底盘线控悬架智能化趋势

摘要: 汽车的底盘主要由行驶系、传动系、转向系和制动系四部分组成,其中行驶系又由汽车的车架、车桥、车轮和悬架等系统组成。底盘的悬架系统不仅是汽车重要的组成部分,而且还关乎到一辆汽车在行驶过程中的质感,影响车辆的操控性…

CSDN周赛59期简要题解

本期题目相对比较友好,而且在比赛报名界面还提示了非编程题考察的章节——诚不欺我: 本期非编程题需要选手阅读的章节是第2章“逆向思考——从递推到递归”—2.3节“堆栈和队列:遍历的数据结构” 选择和判断都考到了栈的数据结构&#xff0…

【MySQL进阶】:子查询与HAVING/SELECT的完美结合

前言 ✨欢迎来到小K的MySQL专栏,本节将为大家带来MySQL子查询在HAVING/SELECT字句中使用、及相关子查询和WITH/EXISTS字句的讲解✨ 目录 前言一、在HAVING/SELECT字句中使用子查询二、相关子查询三、WITH/EXISTS、NOT EXISTS字句四、总结 一、在HAVING/SELECT字句中…

【Python 基础篇】Python 字典及字典常用函数

文章目录 导言一、字典的创建和访问二、字典的增删改查1、增加元素2、删除元素3、修改元素4、查找元素 三、字典常用函数及操作1、len()2、keys()3、values()4、items()5、字典的遍历 总结 导言 在Python中,字典(Dictionary)是一种无序的数据…

使用它或失去它!谷歌即将清理不活跃账号

如果你很长时间没有登录你的谷歌账号,最好尽快登录,否则你很可能会失去账号。 2023年5月16号,谷歌宣布,将开始删除至少两年不活跃的账号。 如果谷歌帐户至少两年未被使用或登录,可能会删除该帐户及其内容,包…

04. 青龙面板通知配置 邮箱 pushPlus 企业微信机器人(保姆级图文)

目录 1. qq邮箱通知2. pushPlus通知3. 企业微信机器人总结 欢迎关注 『青龙面板』 专栏,持续更新中 欢迎关注 『青龙面板』 专栏,持续更新中 1. qq邮箱通知 emailUser:填写你的邮箱 emailPass:填写邮箱密钥授权码 邮箱密钥获取教…

【从零开始学习JAVA | 第六篇】面向对象综合训练

目录 前言: 1.文字版格斗游戏: 2.对象数组1 前言: 前面我们已经讲解了JAVA面向程序对象思想的关键要素:封装。我们将利用本篇进行几个小型的练习,帮助我们更好的理解面向对象编程这种思想。 1.文字版格斗游戏&#x…