Triton教程 --- 优化

news/2024/9/16 18:36:04/

Triton教程 — 优化

在这里插入图片描述

文章目录

  • Triton教程 --- 优化
    • 优化设置
      • 动态批处理程序
      • 模型实例
    • 特定于框架的优化
      • 带有 TensorRT 优化的 ONNX (ORT-TRT)
      • 具有 OpenVINO 优化的 ONNX
      • TensorFlow 与 TensorRT 优化 (TF-TRT)
      • TensorFlow JIT 图优化
      • TensorFlow 自动 FP16 优化
    • NUMA优化
      • 主机策略

Triton 推理服务器具有许多功能,您可以使用这些功能来减少延迟并增加模型的吞吐量。 本节讨论这些功能并演示如何使用它们来提高模型的性能。 作为先决条件,您应该按照 QuickStart 获取 Triton 和使用示例模型存储库运行的客户端示例。

本节重点了解单个模型的延迟和吞吐量权衡。 模型分析器部分介绍了一种工具,可帮助您了解模型的 GPU 内存利用率,以便您决定如何在单个 GPU 上最好地运行多个模型。

除非您已经拥有适合在 Triton 上测量模型性能的客户端应用程序,否则您应该熟悉性能分析器。 性能分析器是优化模型性能的重要工具。

作为演示优化功能和选项的运行示例,我们将使用 TensorFlow Inception 模型,您可以按照快速入门获得该模型。 作为基线,我们使用 perf_analyzer 使用不启用任何性能特征的基本模型配置来确定模型的性能。

$ perf_analyzer -m inception_graphdef --percentile=95 --concurrency-range 1:4
...
Inferences/Second vs. Client p95 Batch Latency
Concurrency: 1, throughput: 62.6 infer/sec, latency 21371 usec
Concurrency: 2, throughput: 73.2 infer/sec, latency 34381 usec
Concurrency: 3, throughput: 73.2 infer/sec, latency 50298 usec
Concurrency: 4, throughput: 73.4 infer/sec, latency 65569 usec

结果表明,我们未优化的模型配置提供了每秒约 73 个推理的吞吐量。 请注意,从一个并发请求到两个并发请求,吞吐量如何显着增加,然后吞吐量趋于平稳。 对于一个并发请求,Triton 在响应返回给客户端和服务器接收到下一个请求期间处于空闲状态。 吞吐量随着并发数的增加而增加,因为 Triton 将一个请求的处理与另一个请求的通信重叠。 因为我们在与 Triton 相同的系统上运行 perf_analyzer,所以两个请求足以完全隐藏通信延迟。

优化设置

对于大多数模型,提供最大性能改进的 Triton 功能是动态批处理。 这个例子更清楚地说明了概念细节。 如果您的模型不支持批处理,那么您可以跳到模型实例。

动态批处理程序

动态批处理程序将单个推理请求组合成一个更大的批处理,这通常比单独执行单个请求的执行效率更高。 要启用动态批处理程序停止 Triton,请将以下行添加到 inception_graphdef 模型配置文件的末尾,然后重新启动 Triton。

dynamic_batching { }

动态批处理程序允许 Triton 处理更多的并发请求,因为这些请求被组合起来进行推理。 要查看此运行 perf_analyzer,并发请求从 1 到 8。

$ perf_analyzer -m inception_graphdef --percentile=95 --concurrency-range 1:8
...
Inferences/Second vs. Client p95 Batch Latency
Concurrency: 1, throughput: 66.8 infer/sec, latency 19785 usec
Concurrency: 2, throughput: 80.8 infer/sec, latency 30732 usec
Concurrency: 3, throughput: 118 infer/sec, latency 32968 usec
Concurrency: 4, throughput: 165.2 infer/sec, latency 32974 usec
Concurrency: 5, throughput: 194.4 infer/sec, latency 33035 usec
Concurrency: 6, throughput: 217.6 infer/sec, latency 34258 usec
Concurrency: 7, throughput: 249.8 infer/sec, latency 34522 usec
Concurrency: 8, throughput: 272 infer/sec, latency 35988 usec

对于八个并发请求,与不使用动态批处理程序相比,动态批处理程序允许 Triton 每秒提供 272 次推理,而不会增加延迟。

我们可以使用一些简单的规则,而不是让 perf_analyzer 收集一系列请求并发值的数据,这些规则通常适用于 perf_analyzer 与 Triton 在同一系统上运行的情况。 第一条规则是为了实现最小延迟,将请求并发设置为 1 并禁用动态批处理程序并仅使用一个模型实例。 第二条规则是,对于最大吞吐量,将请求并发设置为 2 * <maximum batch size> * <model instance count>。 我们将在下面讨论模型实例,目前我们正在处理一个模型实例。 因此,对于 maximum-batch-size 4,我们希望以 2 * 4 * 1 = 8 的请求并发运行 perf_analyzer。

$ perf_analyzer -m inception_graphdef --percentile=95 --concurrency-range 8
...
Inferences/Second vs. Client p95 Batch Latency
Concurrency: 8, throughput: 267.8 infer/sec, latency 35590 usec

模型实例

Triton 允许您指定要为推理提供的每个模型的副本数量。 默认情况下,您会获得每个模型的一个副本,但您可以使用实例组在模型配置中指定任意数量的实例。 通常,拥有一个模型的两个实例会提高性能,因为它允许内存传输操作(例如,CPU 到/从 GPU)与推理计算重叠。 多个实例还通过允许在 GPU 上同时执行更多推理工作来提高 GPU 利用率。 较小的模型可能受益于两个以上的实例; 您可以使用 perf_analyzer 进行实验。

要指定 inception_graphdef 模型的两个实例:停止 Triton,删除您之前可能添加到模型配置中的任何动态批处理设置(我们在下面讨论结合动态批处理程序和多个模型实例),将以下行添加到模型配置的末尾 文件,然后重新启动 Triton。

instance_group [ { count: 2 }]

现在使用与基线相同的选项运行 perf_analyzer。

$ perf_analyzer -m inception_graphdef --percentile=95 --concurrency-range 1:4
...
Inferences/Second vs. Client p95 Batch Latency
Concurrency: 1, throughput: 70.6 infer/sec, latency 19547 usec
Concurrency: 2, throughput: 106.6 infer/sec, latency 23532 usec
Concurrency: 3, throughput: 110.2 infer/sec, latency 36649 usec
Concurrency: 4, throughput: 108.6 infer/sec, latency 43588 usec

在这种情况下,与一个实例相比,拥有两个模型实例可将吞吐量从每秒约 73 个推理增加到每秒约 110 个推理。

可以同时启用动态批处理程序和多个模型实例,例如,更改模型配置文件以包含以下内容。

dynamic_batching { }
instance_group [ { count: 2 }]

当我们使用与上述动态批处理程序相同的选项运行 perf_analyzer 时。

$ perf_analyzer -m inception_graphdef --percentile=95 --concurrency-range 16
...
Inferences/Second vs. Client p95 Batch Latency
Concurrency: 16, throughput: 289.6 infer/sec, latency 59817 usec

我们看到,与仅使用动态批处理程序和一个实例相比,两个实例在增加延迟的同时并没有提高吞吐量。 发生这种情况是因为对于此模型,单独的动态批处理程序能够充分利用 GPU,因此添加额外的模型实例不会提供任何性能优势。 一般来说,动态批处理程序和多个实例的好处是特定于模型的,因此您应该尝试使用 perf_analyzer 来确定最能满足您的吞吐量和延迟要求的设置。

特定于框架的优化

Triton 有几个优化设置,仅适用于受支持模型框架的一个子集。 这些优化设置由模型配置优化策略控制。 访问本指南以进行端到端的讨论。

带有 TensorRT 优化的 ONNX (ORT-TRT)

一个特别强大的优化是将 TensorRT 与 ONNX 模型结合使用。 作为应用于 ONNX 模型的 TensorRT 优化示例,我们将使用 ONNX DenseNet 模型,您可以按照快速入门获得该模型。 作为基线,我们使用 perf_analyzer 使用不启用任何性能特征的基本模型配置来确定模型的性能。

$ perf_analyzer -m densenet_onnx --percentile=95 --concurrency-range 1:4
...
Inferences/Second vs. Client p95 Batch Latency
Concurrency: 1, 113.2 infer/sec, latency 8939 usec
Concurrency: 2, 138.2 infer/sec, latency 14548 usec
Concurrency: 3, 137.2 infer/sec, latency 21947 usec
Concurrency: 4, 136.8 infer/sec, latency 29661 usec

要为模型启用 TensorRT 优化:停止 Triton,将以下行添加到模型配置文件的末尾,然后重新启动 Triton。

optimization { execution_accelerators {gpu_execution_accelerator : [ {name : "tensorrt"parameters { key: "precision_mode" value: "FP16" }parameters { key: "max_workspace_size_bytes" value: "1073741824" }}]
}}

当 Triton 启动时,您应该检查控制台输出并等待 Triton 打印“Staring endpoints”消息。 启用 TensorRT 优化后,ONNX 模型加载速度可能会明显变慢。 在生产中,您可以使用模型预热来避免此模型启动/优化速度减慢。 现在使用与基线相同的选项运行 perf_analyzer。

$ perf_analyzer -m densenet_onnx --percentile=95 --concurrency-range 1:4
...
Inferences/Second vs. Client p95 Batch Latency
Concurrency: 1, 190.6 infer/sec, latency 5384 usec
Concurrency: 2, 273.8 infer/sec, latency 7347 usec
Concurrency: 3, 272.2 infer/sec, latency 11046 usec
Concurrency: 4, 266.8 infer/sec, latency 15089 usec

TensorRT 优化提供了 2 倍的吞吐量改进,同时将延迟减少了一半。 TensorRT 提供的好处会因模型而异,但总的来说它可以提供显着的性能提升。

具有 OpenVINO 优化的 ONNX

在 CPU 上运行的 ONNX 模型也可以使用 OpenVINO 进行加速。 要为 ONNX 模型启用 OpenVINO 优化,请将以下行添加到模型配置文件的末尾。

optimization { execution_accelerators {cpu_execution_accelerator : [ {name : "openvino"}]
}}

TensorFlow 与 TensorRT 优化 (TF-TRT)

应用于 TensorFlow 模型的 TensorRT 优化与上述 TensorRT 和 ONNX 的工作方式类似。 要启用 TensorRT 优化,您必须适当地设置模型配置。 对于 TensorFlow 模型的 TensorRT 优化,您可以启用多个选项,包括选择计算精度。

optimization { execution_accelerators {gpu_execution_accelerator : [ {name : "tensorrt"parameters { key: "precision_mode" value: "FP16" }}]
}}

这些选项在模型配置 protobuf 的 ModelOptimizationPolicy 部分中有详细描述。

作为应用于 TensorFlow 模型的 TensorRT 优化示例,我们将使用 TensorFlow Inception 模型,您可以按照快速入门获得该模型。 作为基线,我们使用 perf_analyzer 使用不启用任何性能特征的基本模型配置来确定模型的性能。

$ perf_analyzer -m inception_graphdef --percentile=95 --concurrency-range 1:4
...
Inferences/Second vs. Client p95 Batch Latency
Concurrency: 1, throughput: 62.6 infer/sec, latency 21371 usec
Concurrency: 2, throughput: 73.2 infer/sec, latency 34381 usec
Concurrency: 3, throughput: 73.2 infer/sec, latency 50298 usec
Concurrency: 4, throughput: 73.4 infer/sec, latency 65569 usec

要为模型启用 TensorRT 优化:停止 Triton,将上面的行添加到模型配置文件的末尾,然后重新启动 Triton。 当 Triton 启动时,您应该检查控制台输出并等待服务器打印“Staring endpoints”消息。 现在使用与基线相同的选项运行 perf_analyzer。 请注意,第一次运行 perf_analyzer 可能会超时,因为 TensorRT 优化是在收到推理请求时执行的,并且可能需要很长时间。 在生产中,您可以使用模型预热来避免此模型启动/优化速度减慢。 现在,如果发生这种情况,只需再次运行 perf_analyzer。

$ perf_analyzer -m inception_graphdef --percentile=95 --concurrency-range 1:4
...
Inferences/Second vs. Client p95 Batch Latency
Concurrency: 1, throughput: 140 infer/sec, latency 8987 usec
Concurrency: 2, throughput: 195.6 infer/sec, latency 12583 usec
Concurrency: 3, throughput: 189 infer/sec, latency 19020 usec
Concurrency: 4, throughput: 191.6 infer/sec, latency 24622 usec

TensorRT 优化提供了 2.5 倍的吞吐量改进,同时将延迟减少了一半以上。 TensorRT 提供的好处会因模型而异,但总的来说它可以提供显着的性能提升。

TensorFlow JIT 图优化

Tensorflow 允许其用户在通过 GlobalJitLevel 设置运行模型图时指定优化级别。 有关详细信息,请参阅 config.proto。 在 Triton 中运行 TensorFlow 模型时,用户可以通过提供如下图级别来提供此设置:

optimization {graph { level: 1
}}

用户还可以在启动 Triton 之前通过设置 TF_XLA_FLAGS 环境变量来利用 XLA 优化。 使用 GPU 和 CPU 自动集群启动 Triton 的示例:

$ TF_XLA_FLAGS="--tf_xla_auto_jit=2 --tf_xla_cpu_global_jit" tritonserver --model-repository=...

与上述 TensorRT 优化的情况一样,这些优化发生在第一个推理请求运行时。 要缓解生产系统中模型启动速度减慢的情况,您可以使用模型预热。

TensorFlow 自动 FP16 优化

TensorFlow 有一个选项可以提供可以在模型配置中启用的 FP16 优化。 与上述 TensorRT 优化一样,您可以使用 gpu_execution_accelerator 属性启用此优化。

optimization { execution_accelerators {gpu_execution_accelerator : [{ name : "auto_mixed_precision" }]
}}

模型配置 protobuf 的 ModelOptimizationPolicy 部分详细描述了这些选项。

您可以按照上面针对 TensorRT 描述的步骤,通过使用 perf_analyzer 来评估模型在优化和不优化的情况下的性能,从而了解这种自动 FP16 优化如何使模型受益。

NUMA优化

许多现代 CPU 由多个内核、内存和互连组成,它们根据线程和数据的分配方式展现不同的性能特征。 Triton 允许您为您的系统设置描述此 NUMA 配置的主机策略,然后将模型实例分配给不同的主机策略以利用这些 NUMA 属性。

主机策略

Triton 允许您在启动时指定与策略名称关联的主机策略。 如果使用实例组中的主机策略字段指定了具有相同策略名称的实例,则主机策略将应用于模型实例。 请注意,如果未指定,主机策略字段将根据实例属性设置为默认名称。

要指定主机策略,您可以在命令行选项中指定以下内容:

--host-policy=<policy_name>,<setting>=<value>

目前,支持的设置如下:

  • numa-node:主机策略将绑定到的 NUMA 节点 ID,主机策略将内存分配限制到指定的节点。

  • cpu-cores:要运行的 CPU 核心,设置了此主机策略的实例将在其中一个 CPU 核心上运行。

假设系统配置为将 GPU 0 与 NUMA 节点 0 绑定,NUMA 节点 0 的 CPU 核心数为 0 到 15,下面显示了为“gpu_0”设置 numa-node 和 cpu-cores 策略:

$ tritonserver --host-policy=gpu_0,numa-node=0 --host-policy=gpu_0,cpu-cores=0-15 ...

http://www.ppmy.cn/news/478787.html

相关文章

一、动画 - 过渡效果transition

内容目录&#xff1a; 过渡动画&#xff1b;过渡动画的属性&#xff1b; 一、过渡动画 过渡&#xff08;transition&#xff09;作用&#xff1a;- 通过过渡可以指定一个属性发生变化时的切换方式- 通过过渡可以创建一些非常好的效果&#xff0c;提升用户的体验现在我们通过一…

如何让我们的人生,拥有更多的可能性?

一一道出的第52篇原创 本文6200字&#xff0c;阅读时长13分钟 作者|柳一一 来源|一一道出&#xff08;ID:yiyidaochu&#xff09; 转载|请联系&#xff08;微信&#xff1a;liu82029088&#xff09; 大家好&#xff0c;我是柳一一。 思维定式存在于我们每个人的大脑中。一…

【翻译】数据人文主义:连接人与数字

豆皮粉儿们&#xff0c;又见面了&#xff0c;今天这一期&#xff0c;由字节跳动数据平台的玄魂&#xff0c;给大家带来一篇关于可视化作品诞生流程的翻译文章。 原文链接&#xff1a;https://devikakhowala.com/data-humanism注&#xff1a;部分内容未完全遵照原文进行翻译 为什…

SaaS模式、技术与案例详解——第11章 可配置性

【本章导读语】 东临碣石&#xff0c;以观沧海。 ________曹操&#xff0c;《观沧海》 就成熟的SaaS应用而言&#xff0c;元数据服务供应商为客户提供了定制和配置应用、满足其特定需求的主要手段。 SaaS模式的可配置性体现了SaaS不同于ASP的特性。SaaS的可配置性表现在用户…

清晰明了,什么是贝叶斯定理?朴素贝叶斯又是什么?

什么是贝叶斯定理&#xff1f;朴素贝叶斯又是什么&#xff1f; 一、提出问题&#xff1f;二、什么是贝叶斯定理1. 贝叶斯派和频率派2. 贝叶斯推断与应用 三、朴素贝叶斯有多“朴素”四、每个人都懂贝叶斯 来源&#xff1a;大数据 导读&#xff1a;如果有一天&#xff0c;我们知…

什么是贝叶斯定理?朴素贝叶斯有多“朴素”?终于有人讲明白了

导读&#xff1a;如果有一天&#xff0c;我们知道的统计规律和现实生活发生了冲突&#xff0c;又或者前人的经验不符合亲身经历&#xff0c;那么该怎么办&#xff1f;面对经验与现实的矛盾&#xff0c;我们需要一种应对方案。 作者&#xff1a;徐晟 来源&#xff1a;大数据DT&a…

win10控制面板快捷键_你没玩过的全新版本Win10,这些操作你知多少?

不知不觉&#xff0c;Windows 10与我们相伴已经整整四个年头了&#xff0c;从最开始的组团抗拒到现在的默默接受&#xff0c;个中滋味相信谁心里都有个数。近日微软开始推送“Win10更新五月版”&#xff0c;那么Win10中到底都有哪些“骚”操作&#xff1f;一起来看看吧。 1、夜…

win10照片查看器_19个Win10使用小技巧,看看你知道哪些?

从Windows10发布之日算起&#xff0c;它已经问世7个年头了。虽然这几年&#xff0c;它出现了各种小bug&#xff0c;但依然不妨碍它是一款好用的系统。毕竟是9102年了&#xff0c;你想用老系统也回不去了。 与其抗拒&#xff0c;不如敞开胸怀接受。今天分享给大家15个非常好用的…

win10照片查看器_非常好用的19个Win10小技巧,学会之后事半功倍

1、卓越性能模式 Win10内部包含多种电源模式&#xff0c;比如“高性能”模式&#xff0c;可以最大程度榨干系统的潜能。但除了这个“高性能”以外&#xff0c;Win10还有一种级别更高的电源模式&#xff0c;称为“卓越性能模式”。 卓越性能模式并非公开功能&#xff0c;我们需要…

win10控制面板快捷键_你没玩过的全新版本 Win10这些操作你知多少

不知不觉&#xff0c;Win10与我们相伴已经整整四个年头了&#xff0c;从最开始的组团抗拒到现在的默默接受&#xff0c;个中滋味相信谁心里都有个数。 近日微软开始推送“Win10更新五月版”&#xff0c;那么Win10中到底都有哪些“骚”操作&#xff1f;一起来看看吧。 1、夜间模…

win10控制面板快捷键_你没玩过的全新版本:Win10这些操作你知多少

不知不觉&#xff0c;Windows 10与我们相伴已经整整四个年头了&#xff0c;从最开始的组团抗拒到现在的默默接受&#xff0c;个中滋味相信谁心里都有个数。近日微软开始推送“Win10更新五月版”&#xff0c;那么Win10中到底都有哪些“骚”操作&#xff1f;一起来看看吧。 1、夜…

win10照片查看器_Win10小技巧,帮你事半功倍

win10已经发布4年了&#xff0c;还有很多小技巧你知道吗&#xff1f;今天分享给大家15个非常好用的Win10小技巧&#xff0c;学会之后让你娱乐办公都事半功倍。 1、卓越性能模式 Win10内部包含多种电源模式&#xff0c;比如“高性能”模式&#xff0c;可以最大程度榨干系统的潜能…

基本知识 100155

基本知识 100155 单选题 A1 1.外伤性眼内炎的治疗首选( ) 答案&#xff1a;( B ) A:充分散瞳 B:大剂量抗生素 C:糖皮质激素 D:玻璃体切割术 E:玻璃体内药物灌注 单选题 A1 2.放射性视神经病变的发病机制主要是 放射性视神经病变确切的发病机制尚不清楚&#xff0c;…

西瓜视频 iOS Voice Over 无障碍适配实践

动手点关注 干货不迷路 &#x1f446; 为了解决老年人、残疾人等群体在使用互联网等智能技术时遇到的困难&#xff0c;自 2021 年春季开始&#xff0c;西瓜视频开展了无障碍与适老化改造专项行动。陆续完成了无障碍影院、色弱模式、护眼模式、大字号模式、外挂字幕等多个改造需…

自媒体运营、平面设计封面如何搭配?3大色彩搭配网站推荐

之前给大家分享了很多无版权的图片网站、音乐素材网站&#xff0c;但日常设计我们常常会遇到配色的问题&#xff0c;不管是设计作图、动效制作还是自媒体封面都需要用到配色&#xff0c;不同的色彩搭配也会出现不同的效果。今天就来跟大家分享一波神仙配色设计网站。 一、Cool…

关于电气工程及其自动化学科,国家电网的这些事你都知道吗?

对电气工程及其自动化的认识 1.专业认识 1.电气工程及其自动化学科 电气工程及其自动化涉及电力电子技术&#xff0c;计算机技术&#xff0c;电机电器技术&#xff0c;信息与网络控制技术&#xff0c;机电一体化技术等诸多领域&#xff0c;是一门综合性较强的学科&#xf…

音视频开发系列(38)OpenGL ES 滤镜 (篇一)

一、颜色和滤镜的基本知识 我们是如何看到图不同颜色的&#xff1f; 图片来源&#xff1a;[播放器色觉辅助功能开发&#xff0c;助力提升色觉障碍用户的视频观看体验] 不同波长的光具有不同的颜色&#xff0c;在我们可见光范围内蓝色光波长是短波&#xff0c;长波长的光呈现红…

挺难过的,测完后发现自已有点色盲--色盲、色弱测试图

色盲、色弱测试图 通过下面一组图片&#xff0c;测测您的辨色能力&#xff1a;红绿色盲者中的红色盲者只能找到紫色的线&#xff0c;而绿色盲者只能找到红色的线&#xff0c;但红绿色弱者、正常者则两线都找得到。红绿色盲者中的红色盲者能读出&#xff16;&#xff0c;而绿色…

与孩童家长的一段奇异的对话:父母视觉正常,孩子却患色盲

一位陌生孩童家长的求助 我写过一篇关于色盲的博客。前不久&#xff0c;一位女孩的妈妈看过后与我联系&#xff0c;她说孩子患有红色盲&#xff0c;很是为孩子担心。简单地交流后&#xff0c;知道这位女士和孩子的爸爸视觉都是正常的&#xff0c;但是孩子却是色盲&#xff0c;…

每日 30 秒 ⏱ 无障碍世界

简介 无障碍、DOM 小细节、前端开发、a11y、Accessibility 无障碍的英文为 Accessibility 由于单词拼写过长往往被缩写为 a11y 其中 11 指的是中间有11个字母。 无障碍指的是在使用过程中&#xff0c;不管什么类型的用户都可以正常使用。生活中最常见的就是无障碍设施 相信很多…