Triton教程 --- Triton 响应缓存

news2024/12/28 19:48:28

Triton教程 — Triton 响应缓存

在这里插入图片描述

Triton系列教程:

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

概述

在本文档中,推理请求是模型名称、模型版本和输入张量(名称、形状、数据类型和张量数据),它们构成提交给 Triton 的请求。 推理结果是推理执行产生的输出张量(名称、形状、数据类型和张量数据)。 Triton 使用响应缓存来保存先前执行的推理请求生成的推理结果。 Triton 将维护响应缓存,以便命中缓存的推理请求不需要执行模型来生成结果,而是从缓存中提取结果。 对于某些用例,这可以显着减少推理请求延迟。

Triton 使用推理请求的哈希值访问响应缓存,其中包括模型名称、模型版本和模型输入。 如果在缓存中找到该哈希,则从缓存中提取相应的推理结果并用于请求。 当这种情况发生时,Triton 不需要执行模型来产生推理结果。 如果在缓存中找不到哈希,Triton 会执行模型以生成推理结果,然后将该结果记录在缓存中,以便后续推理请求可以(重新)使用这些结果。

用法

为了在给定模型上使用缓存,必须在服务器端和模型的模型配置中启用缓存。 有关更多详细信息,请参阅下面的以下部分。

在服务器端启用缓存
通过在启动 Triton 服务器时指定 <cache_implementation> 和相应的配置,在服务器端启用响应缓存。

通过 CLI,这会转换为设置 tritonserver --cache-config <cache_implementation>,<key>=<value> ...。例如:

tritonserver --cache-config local,size=1048576

对于进程内 C API 应用程序,这将转换为调用 TRITONSERVER_SetCacheConfig(const char* cache_implementation, const char* config_json)

这允许用户在服务器启动时全局启用/禁用缓存。

为模型启用缓存

默认情况下,即使使用 --cache-config 标志全局启用响应缓存,也没有模型使用响应缓存。

对于要使用响应缓存的给定模型,该模型还必须在其模型配置中启用响应缓存:

# config.pbtxt

response_cache {
  enable: true
}

这允许用户启用/禁用特定模型的缓存。

有关为每个模型启用响应缓存的更多信息,请参阅模型配置文档。

缓存实现

从 23.03 版本开始,Triton 拥有一组 TRITONCACHE API,用于与用户选择的缓存实现进行通信。

缓存实现是一个共享库,它实现所需的 TRITONCACHE API,并在服务器启动时动态加载(如果启用)。 对于 >=23.03 的标签,tritonserver 发布容器附带以下开箱即用的缓存实现:

local:

/opt/tritonserver/caches/local/libtritoncache_local.so

通过这些 TRITONCACHE API,tritonserver 公开了一个新的 --cache-config CLI 标志,该标志使用户可以灵活自定义要使用的缓存实现以及如何配置它。 与 --backend-config 标志类似,预期格式为 --cache-config <cache_name>,<key>=<value>,并且如果缓存实现需要,可以多次指定以指定多个键。

本地缓存

本地缓存实现相当于23.03版本之前内部使用的响应缓存。 有关更多具体实现的详细信息,请参阅本地缓存实现。

当使用非零 SIZE 指定 --cache-config local,size=SIZE 时,Triton 会在 CPU 内存中分配请求的大小,并在所有推理请求和所有模型之间共享缓存。

自定义缓存

借助新的 TRITONCACHE API 接口,用户现在可以实现自己的缓存以满足任何用例的特定需求。 要查看缓存开发人员必须实现的所需接口,请参阅 TRITONCACHE API 头文件。 本地缓存实现可以用作参考实现。

成功开发和构建自定义缓存后,生成的共享库(例如:libtritoncache_<name>.so)必须放置在与本地缓存实现所在位置类似的缓存目录中。 默认情况下,该目录为 /opt/tritonserver/caches,但可以根据需要使用 --cache-dir 指定自定义目录。

将此示例放在一起,如果自定义缓存被命名为“custom”(该名称是任意的),默认情况下 Triton 会期望在 /opt/tritonserver/caches/custom/libtritoncache_custom.so 中找到缓存实现。

执行

响应缓存旨在用于预计会出现大量重复请求(缓存命中)的用例,因此将从缓存中受益。 这里的术语“重要”取决于用例,但简单的解释是考虑预期缓存命中/未命中的比例,以及计算响应所花费的平均时间。

对于缓存命中常见且计算成本昂贵的情况,缓存可以显着提高整体性能。

对于所有或大多数请求都是唯一的(缓存未命中)的情况,由于管理缓存的开销,缓存可能会对整体性能产生负面影响。

已知限制

  • 只有位于 CPU 内存中的输入张量才可进行哈希处理以访问缓存。 如果推理请求包含不在 CPU 内存中的输入张量,则不会对请求进行哈希处理,因此不会缓存响应。

  • 只有所有输出张量都位于 CPU 内存中的响应才有资格进行缓存。 如果响应中的任何输出张量不在 CPU 内存中,则不会缓存响应。

  • 仅使用推理请求哈希来访问缓存。 因此,如果两个不同的推理请求生成相同的哈希(哈希冲突),则 Triton 可能会错误地将缓存结果用于推理请求。 哈希值是 64 位值,因此发生冲突的可能性很小。

  • 只有成功的推理请求才会缓存其响应。 如果请求失败或在推理期间返回错误,则不会缓存其响应。

  • 只有通过默认调度程序或动态批量调度程序的请求才有资格进行缓存。 Sequence Batcher 目前不支持响应缓存。

  • 响应缓存当前不支持解耦模型。

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

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

相关文章

ChatGPT从入门到精通,深入认识ChatGPT

ChatGPT从入门到精通&#xff0c;一站式掌握办公自动化/爬虫/数据分析和可视化图表制作 全面AI时代就在转角 道路已经铺好了 “局外人”or“先行者” 就在此刻 等你决定1、ChatGPT从入门到精通&#xff0c;一站式掌握办公自动化/爬虫/数据分析和可视( 点击观看完整版本 )https…

TreeMap数据结构及源码解析.跟学黑马

TreeMap数据结构及源码解析 1.TreeMap的特点2.TreeMap的数据结构2.1二叉查找树2.1.1二叉查找树的定义2.1.2二叉查找树的查找操作 2.2平衡二叉树2.2.1平衡二叉树的定义2.2.2平衡二叉树的旋转 2.3红黑树2.3.1红黑树的定义 2.TreeMap的源码分析2.1get()获取方法分析2.2put()添加方…

企业级开发项目和自学项目到底有什么区别

前言 好久不见了各位&#xff01;最近几个月都未更新&#xff0c;是因为从春招开始就在投简历面试实习岗位&#xff0c;然后入职&#xff0c;最后成功成为了一个半成品后端练习生&#xff0c;想说的话有太多太多 下面就站在一个在校实习生的身份&#xff0c;结合自己最近几个月…

科普 | 眼图

本文简要说明眼图相关的知识&#xff0c;参考是德科技的文章 1。 科普 | 眼图 基本知识串扰眼图眼图的产生原理及作用创建眼图 - 眼图波形的采样过程眼图的产生原理及作用眼图可以看出哪些性能指标&#xff1f;如何评判眼图质量&#xff1f;眼图测试模板眼图与存储深度实时的眼…

短视频seo源码开发部署技术解析

短视频seo开发需要哪些技术 应用程序优化技术&#xff1a;包括应用程序的各种元素&#xff08;如标题、描述、关键字、图标等&#xff09;的优化和设置&#xff0c;以及应用程序内部链接和导航的合理布局和设置。 视频内容优化技术&#xff1a;包括视频标题、描述、标签、封面…

人工智能数据集处理——数据获取

目录 1、从csv和txt文件中读取数据 pandas中可使用read_csv读取csv或txt文件中的数据 使用read_csv()函数读取phones.csv文件中的数据,并指定编码格式为gbk 使用head()方法指定获取phones.csv文件中前3行的数据 使用read_csv() 函数读取 itheima_books.txt文件中的数据,并指…

【Redis】2、Redis 的 Java 客户端(Jedis 和 SpringDataRedis)

目录 零、Redis 的 Java 客户端有哪些&#xff1f;二、Jedis 客户端(1) 引依赖(2) 连接 Redis 服务并测试(3) Redis 连接池 三、SpringDataRedis 介绍四、SpringBoot 中集成 SpringDataRedis(1) 引入依赖(2) 配置文件中书写相关配置(3) RedisTemplate 的默认序列化方式(4) 自定…

高校学生考勤系统

摘 要 在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括高校学生考勤系统的网络应用&#xff0c;在外国高校学生考勤系统已经是很普遍的方式&#xff0c;不过国内的高校学生考勤可能还处于起步阶段。高校学生考勤系统具有管理…

Linux网络-数据链路层,MAC帧解析,ARP协议

目录 数据链路层VS网络层 以太网概念 以太网的帧格式&#xff08;报文格式&#xff09;&#xff08;也可以称之为MAC帧&#xff09; MAC地址的概念 MAC帧格式 局域网通信原理 MTU MTU说明 MTU对IP协议的影响 MTU对UDP协议的影响 MTU对TCP协议的影响 ARP协议 ARP协…

【算法题解】41. 二叉树的中序遍历

这是一道 简单 题 https://leetcode.cn/problems/binary-tree-inorder-traversal/ 题目 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2] 示例 2&#xff1a; 输入&#…

[易语言][部署]使用易语言部署paddleocr的onnx模型api接口推理直接调用

易语言如何部署paddleocr模型&#xff0c;如今paddleocr模型广泛被使用各种编程&#xff0c;为了能在易语言上使用因此开发一个通用接口&#xff0c;开发基本思路如下&#xff1a; 可见我们并没有使用什么通信协议或者命令行之类的方法&#xff0c;这种直接封装接口比其他方法更…

TCP 学习笔记

Win R 打开控制台输入CMD 打开小黑窗&#xff0c; 输入ipconfig 查询本机地址 “外网IP是全世界唯一的IP地址,仅分配给一个网络设备。而内网IP是由路由器分配给每一部内部使用的IP地址,而内网的所有用户都是通过同一个外网IP地址进行上网的,而内网的IP地址每个人的都不一样…

(四)WPF - 布局

一、布局过程 WPF 布局包括两个阶段&#xff1a;一个测量阶段和排列阶段 在测量阶段&#xff0c;容器遍历所有子元素&#xff0c;并询问子元素它们所期望的尺寸。在排列阶段&#xff0c;容器在合适的位置放置子元素。&#xff08;每个元素都被其父元素告知它自己的尺寸是多少…

【软件设计师暴击考点】下午题高频考点暴击系列

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;软件…

电脑选购必备的六大技巧

目录 1、CPU方面 2、显卡方面 3、电脑主板方面 4、内存和硬盘方面 5、电脑机箱和电源方面 6、装机过程要全程参与 今天小编给大家分享电脑选购组装必备的六大技巧&#xff0c;希望对大家实际选购、组装电脑提供一些帮助&#xff01; 买电脑要注意哪些问题 1、CPU方面 C…

Qt Model-View架构领悟

1.架构的选择 1.1是否需要委托 模型视图架构图如下所示&#xff0c;模型视图架构源于MVC模式&#xff1a;模型&#xff08;Model&#xff09;是应用对象&#xff0c;表示数据&#xff1b;视图&#xff08;View&#xff09;是模型的用户界面&#xff0c;用以显示数据&#xff…

springboot基础(78):Freemarker模板生成word文档

文章目录 前言如何使用Freemakrer生成word文档1. 制作模板2. 编写工具类 遇到的问题下载失败如何只生成文件不下载 前言 利用Freemarker模板生成word文档。示例&#xff0c;将左侧的模板生成为右侧的文档并下载。 如何使用Freemakrer生成word文档 1. 制作模板 1.编辑一份a…

实现注册与登录(企业级)

目录 实现注册超级管理员功能&#xff08;持久层&#xff09; 一、判定系统是否已经绑定超级管理员 二、编写保存用户记录的代码 三、编写查询用户ID的代码 实现注册超级管理员功能&#xff08;业务层&#xff09; 一、获取OpenId 二、编写注册新用户的业务代码 掌握 R…

tuple 和数组区别

元组&#xff08;tuple&#xff09;和数组&#xff08;array&#xff09;都是 Python 中用于存储多个值的数据结构&#xff0c;但它们在实现和使用上有一些区别。 元组是不可变的&#xff0c;而数组是可变的。即元组一旦创建&#xff0c;其内容就不能被修改&#xff0c;而数组…

高数笔记1(第一章函数 极限 连续 第一节函数第二节极限-极限的概念与性质)

目录 第一章 函数 极限 连续第一节 函数第二节 极限一、极限的概念与性质数列的极限例1例2 函数的极限极限的性质&#xff08;保号性重点 有界性&#xff09;例12例13例14 函数极限与数列极限的关系例15 第一章 函数 极限 连续 第一节 函数 判断有界要用函数的绝对值&#xff…