NVIDIA Triton系列02-功能与架构简介

NVIDIA Triton系列02-功能与架构简介

B站:肆十二-的个人空间-肆十二-个人主页-哔哩哔哩视频 (bilibili.com)

博客:肆十二-CSDN博客

问答:(10 封私信 / 72 条消息) 肆十二 - 知乎 (zhihu.com)

前面文章介绍微软 Teams 会议系统、微信软件与腾讯 PCG 服务三个 Triton 推理服务器的成功案例,让大家对 Triton 有初步的认知,但别误以为这个软件只适合在大型的服务类应用中使用,事实上 Triton 能适用于更广泛的推理环节中,并且在越复杂的应用环境中就越能展现其执行成效。

在说明 Triton 推理服务器的架构与功能之前,我们需要先了解一个推理服务器所需要面对并解决的问题

与大部分的服务器软件所需要的基本功能类似,一个推理服务器也得接受来自不同用户端所提出的各种要求(request)然后做出回应(response),并且对系统的处理进行性能优化与稳定性管理。

但是推理计算需要面对深度学习领域的各式各样推理模型,包括图像分类、物件检测、语义分析、语音识别等不同应用类别,每种类别还有不同神经网络算法与不同框架所训练出来的模型格式等。此外,我们不能对任务进行单纯的串行队列(queue)方式处理,这会使得任务等待时间拖得很长,影响使用的体验感,因此必须对任务进行并行化处理,这里就存在非常复杂的任务管理技巧。

下面列出一个推理服务器所需要面对的技术问题:

1. 支持多种模型格式**:**至少需要支持普及度最高的

2. TensorFlow 的 GraphDef 与 SavedMode 中一种以上格式

(1) PyTorch 的 TorchScript 格式

(2) ONNX 开放标准格式

(3) 其他:包括自定义模型格式

3. **支持多种查询类型****,**包括

(1) 在线的实时查询:尽量降低查询的延迟(latency)时间

(2) 离线的批量处理:尽量提高查询的通量(throughput)

(3) 流水线传输的识别号管理等工作

4. **支持多种部署方式****:**包括

(1) 企业的 GPU 或 CPU 计算设备

(2) 公共云或数据中心

5. **对模型进行最佳缩放处理****:**让个别模型提供更好的性能

6. **优化多个 KPI****:**包括

(1) 硬件利用率

(2) 模型推理识别时间

(3) 总体成本(TCO)

7. **提高系统稳定性****:**需监控模型状态并解决问题以防止停机

在了解推理服务器所需要解决的关键问题之后,接着来看看下方的 Triton 系统高阶架构图,就能更清楚每个板块所负责的任务与使用的对应技术。

img

Triton 推理服务器采用属于 “主从(client-server)” 架构的系统,由图中的四个板块所组成:

**1. *模型仓(Model Repostory)***:****存放 Triton 服务器所要使用的模型文件与配置文件的存储设备,可以是本地服务器的文件系统,也可以使用 Google、AWS、Azure 等云存储空间,只要遵循 Triton 服务器所要求的规范就可以;

**2. *客户端应用(Client Application)***:****基于 Triton 用户端 Python / C++ / Java 库所撰写,可以在各种操作系统与 CPU 架构上操作,对 Triton 服务器提交任务请求,并且接受返回的计算结果。这是整个 Triton 推理应用中代码量最多的一部分,也是开发人员需要花费最多心思的部分,在后面会有专文讲解。

**3. **HTTP / gPRC 通讯协议:****作为用户端与服务端互动的通讯协议,开发人员可以根据实际状况选择其中一种通讯协议进行操作,能透过互联网对服务器提出推理请求并返回推理结果,如下图所示:

img

使用这类通讯协议有以下优点:

(1) 支持实时、批处理和流式推理查询,以获得最佳应用程序体验

(2) 提供高吞吐量推理,同时使用动态批处理和并发模型执行来满足紧张的延迟预算

(3) 模型可以在现场制作中更新,而不会中断应用程序

**4. **推理服务器(Inference Server):****这是整个 Triton 服务器最核心且最复杂的部分,特别在 “性能”、“稳定”、“扩充” 这三大要求之间取得平衡的管理,主要包括以下几大功能板块:

(1) C 开发接口:

在服务器内的代码属于系统底层机制,主要由 NVIDIA 系统工程师进行维护,因此只提供性能较好的 C 开发接口,一般应用工程师可以忽略这部分,除非您有心深入 Triton 系统底层进行改写。

(2) 模型管理器(Model Management):

支持多框架的文件格式并提供自定义的扩充能力,目前已支持 TensorFlow 的 GraphDef 与 SavedModel 格式、ONNX、PyTorch TorchScript、TensorRT、用于基于树的 RAPIDS FIL 模型、OpenVINO 等模型文件格式,还能使用自定义的 Python / C++ 模型格式;

(3) 模型的推理队列调度器(Per-Model Scheduler Queues):

将推理模型用管道形式进行管理,将一个或多个模型的预处理或后处理进行逻辑排列,并管理模型之间的输入和输出张量的连接,任何的推理请求都会触发这个模型管道。这部分还包含以下两个重点:

并发模型执行(Concurrent Model Execution):允许同一模型的多个模型和 / 或多个实例在同一系统上并行执行,系统可能有零个、一个或多个 GPU。

模型和调度程序(Models And Schedulers):支持多种调度和批量处理算法,可为每个模型单独选择无状态(stateless)、有状态(stateful)或集成(ensemble)模式。对于给定的模型,调度器的选择和配置是通过模型的配置文件完成的。

(4) 计算资源的优化处理:

这是作为服务器软件的最重要工作之一,就是要将设备的计算资源充分调度,并且优化总体计算性能,主要使用以下三种技术。

**支持异构计算模式:**可部署在纯 x86 与 ARM CPU 的计算设备上,也支持装载 NVIDIA GPU 的计算设备。

动态批量处理(Dynamic batching)技术:对支持批处理的模型提供多个内置的调度和批处理算法,并结合各个推理请求以提高推理吞吐量,这些调度和批量处理决策对请求推理的客户端是透明的。

批量处理推理请求分为客户端批量处理和服务器批量处理两种,通过将单个推理请求组合在一起来实现服务器批处理,以提高推理吞吐量;

构建一个批量处理缓存区,当达到配置的延迟阈值后便启动处理机制;

调度和批处理决策对请求推断的客户机是透明的,并且根据模型进行配置。

c. **并发模型(Concurrent model)**运行:多个模型或同一模型的多个实例,可以同时在一个 GPU 或多个 GPU 上运行,以满足不同的模型管理需求。

(5) 框架后端管理器(Framework Backends):

Triton 的后端就是执行模型的封装代码,每种支持的框架都有一个对应的后端作为支持,例如 tensorrt_backend 就是支持 TensorRT 模型推理所封装的后端、openvino_backend 就是支持 openvine 模型推理所封装的后端,目前在 Triton 开源项目里已经提供大约 15 种后端,技术人员可以根据开发无限扩充。

要添加一个新的后台是相当复杂的过程,因此在本系列文章中并不探索,这里主要说明以下 Triton 服务器对各个后端的管理机制,主要是以下重点:

采用 KFServing 的新社区标准 gRPC 和 HTTP/REST 数据平面(data plane)v2 协议(如下图),这是 Kubernetes 上基于各种标准的无服务器推理架构

img

通过配置自动化和自动扩展简化 Kubernetes 中的推理服务部署

透明地处理负载峰值,即使请求数量显著增加,请求的服务也将继续顺利运行

可以通过定义转换器,轻松地将标记化和后处理等预处理步骤包含在部署中

可以用 NGC 的 Helm 命令在 Kubernetes 中部署 Triton,也可以部署为容器微服务,为 GPU 和 CPU 上的预处理或后处理和深度学习模型提供服务,也能轻松部署在数据中心或云平台上

将推理实例进行微服务处理,每个实例都可以在 Kubernetes 环境中独立扩展,以获得最佳性能

通过这种新的集成,可以轻松地在 Kubernetes 使用 Triton 部署高性能推理

以上是 Triton 推理服务器的高级框架与主要特性的简介,如果看完本文后仍感觉有许多不太理解的部分,这是正常的现象,因为整个 Triton 系统集成非常多最先进的技术在内,并非朝夕之间就能掌握的。

后面的内容就要进入 Triton 推理服务器的环境安装与调试,以及一些基础范例的执行环节,透过这些实际的操作,逐步体验 Triton 系统的强大。

出处:NVIDIA Triton系列文章(1):应用概论 - 最新资讯 - 英伟达AI计算专区 - 智东西 (zhidx.com)

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

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

相关文章

Thinkphp一文鸡富贵鸡玫瑰庄园富农场仿皮皮果理财农场源码

Thinkphp一文鸡富贵鸡玫瑰庄园富农场仿皮皮果理财农场源码,喜欢的朋友可以下载研究 一文鸡富贵鸡玫瑰庄园富农场仿皮皮果理财农场源码

Django初学者指南

文章目录 Django初学者指南1 Django简介1.1 Django的历史1.2 使用Django的知名网站1.4 Django的主要特点1.5 Django的工作原理 2 Django 使用2.1 Django 支持的 Python 版本2.2 Django 版本 3 Django 开发 Web 程序3.1 安装Django3.2 创建Django项目3.3 运行开发服务器3.4 创建…

数据结构02 队列及其应用【C++实现】

目录 队列及其特点 利用数组模拟队列的基本操作 创建队列 空队条件 元素入队 元素出队 模拟超市收银问题 队列操作 初始化 入队操作 出队操作 取出队首元素 STL模板中队列的基本使用 训练:约瑟夫问题 参考程序 队列及其特点 队列是一种特殊的线性表&am…

求导,积分

求导公式: 复合函数求导法则:两个函数导函数的乘积. 例如:f(x)2x1,f(x)2,g(x)x^24x4,g(x)2x4 那么复合函数: g(f(x))(2x1)^24(2x1)4 把(2x1)看做整体,则g2(2x1)4 然后再求(2x1)的导函…

Stable Diffusion vs DALL·E3

大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型新阅读。而最新科技(Mamba,xLSTM,KAN)则提…

基于System-Verilog的流水灯设计与仿真

文章目录 一、system Verilog1.语言基本介绍2.过程赋值和连续赋值 二、编写testbench仿真1.流水灯testbench2.2位全加器3.实验结果 一、system Verilog 1.语言基本介绍 像 Verilog 和 VHDL 之类的硬件描述语言 (HDL) 主要用于描述硬件行为,以便将其转换为由组合门…

海底管缆先敷后埋与边敷边埋有什么区别?

海缆铺设有两种方式:“边敷边埋”和“先敷后埋”。 “边敷边埋”冲埋式埋设犁施工法———通过埋设犁(水力开沟机)泵送高压水,在海底冲出一条沟槽的同时,将海缆平铺下去,然后利用在潮汐作用下海床面自行回填(必要时采取压盖保护施工)。主要施…

[linux]如何跟踪linux 内核运行的流程呢

前面已经可以把内核编译出来,但是作为技术狗想看到内核是怎么运行的怎么办? 内核很多代码都是C语言写的,那简单,添加2行代码: include/linux/printk.h 529和530原来的: #define pr_info(fmt, ...) \ …

vue input 限制输入,小数点后保留两位 以及 图片垂直居中显示 和 分享 git 小技巧

&#xff08;1&#xff09;input 限制输入&#xff0c;小数点后保留两位 <template><div><el-input v-model"number" input"checkNumber" blur"completeNumber" placeholder"请输入"></el-input></div>…

文章解读与仿真程序复现思路——电工技术学报EI\CSCD\北大核心《计及台风时空特性和灵活性资源协同优化的配电网弹性提升策略》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

鸿蒙轻内核M核源码分析系列二一 03 文件系统LittleFS

2.2 文件信息数组操作 函数LfsAllocFd()设置文件信息数组元素信息。参数fileName为文件路径信息&#xff0c;传出参数fd为文件描述符即数组索引。遍历文件信息数组&#xff0c;遍历到第一个未使用的元素标记其为已使用状态&#xff0c;设置文件路径信息&#xff0c;把数组索引…

gbase8s数据库阻塞检查点和非阻塞检查点的执行机制

1. 检查点的描述 为了便于数据库系统的复原和逻辑恢复&#xff0c;数据库服务器生成的一致性标志点&#xff0c;称为检查点&#xff0c;其是建立在数据库系统的已知和一致状态时日志中的某个时间点检查点的目的在于定期将逻辑日志中的重新启动点向前移动 如果存在检查点&#…

Windows 服务器Nginx 下载、部署、配置流程(图文教程)

不定期更新 目录 一、下载Nginx安装包 二、上传安装包 三、启动Nginx 四、Nginx常用命令 五、Nginx&#xff08;最小&#xff09;配置详解 六、Nginx&#xff08;基础&#xff09;配置详解 七、反向代理 八、负载均衡 九、动静分离 十、报错 一、下载Nginx安装包 四…

【源码】综合股票币币合约交易所源码/etf交易所源码/美股港股台股交易所源码

支持多国语言 全开源可二开的一个版本&#xff01;支持虚拟货币 ETF 外汇 美股 A股 港股 台股。 前端是VUE开发&#xff08;带vue工程源码&#xff09;后端JAVA开发&#xff01;搭建也相对简单。 总的来说功能非常强大&#xff0c;适合线上运营的一个版本&#xff0c;有兴趣的可…

【因果推断python】38_预测模型1

目录 工业界中的机器学习 之前的部分涵盖了因果推理的核心。那里的技术是众所周知和成熟的。他们经受住了时间的考验。第一部分建立了我们可以依赖的坚实基础。用更专业的术语来说&#xff0c;第一部分侧重于定义什么是因果推理&#xff0c;哪些偏差会阻止相关性成为因果关系&…

Techo TVP技术 沙龙

Techo TVP技术 沙龙 今天参加了 在上海 徐汇 腾讯云大厦 举办的 Techo TVP 技术沙龙&#xff08;主要介绍 AI agent 让我感受很深&#xff09; &#xff0c;那什么是 AI Agent呢&#xff1f; 是一个智能体&#xff0c;由大语言模型驱动&#xff0c;具有自主理解、感知、规划、…

MISSING COURSE-shell

shell 01 what is the shell q: linux如何操作计算机硬件cpu 内存 磁盘 显示器等 a:使用linux的内核操作 1.shell -is命令 shell通过编写shell命令 发送给linux内核 去执行 操作就是计算机硬件 so shell 是用户操作计算机 类似于windows里的dos命令 shell是一门程序设计语言…

《分析模式》漫谈03- Unified Method并不是RUP

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 在《分析模式》第2章 &#xff0c;Fowler提到了“Rational Softwares Unified Method”&#xff0c; 而且给出了引用的参考文献&#xff0c;是Rational公司的一份文档&#xff1a; 200…

数字电路中二进制的数据表达

文章目录 1. 二进制数据表达 1.1 二进制简介 1.2 用二进制表达文字 1.2.1 最开始的表达方式 1.2.2 通讯系统的编码和解码 1.2.3 集成电路 1.2.4 ASCII编码 1.2.5 GBK编码 1.2.6 Unicode编码 2. 用二进制表达图像 2.1 图片像素化 2.2 像素数字化 2.3 二值图像 2.4…

Git冲突解决指南:如何优雅地解决代码合并冲突

在团队协作开发中&#xff0c;使用版本控制系统Git是非常常见的。然而&#xff0c;在多人同时对同一文件进行修改时&#xff0c;就可能出现代码合并冲突。这时就需要我们学会如何优雅地解决这些冲突&#xff0c;保证代码的完整性和质量。本文将为您介绍Git冲突解决的基本原则和…