当前位置: 首页 > news >正文

使用TensorRT-LLM进行高性能推理

LLM的火爆之后,英伟达(NVIDIA)也发布了其相关的推理加速引擎TensorRT-LLM。TensorRT是nvidia家的一款高性能深度学习推理SDK。此SDK包含深度学习推理优化器和运行环境,可为深度学习推理应用提供低延迟和高吞吐量。而TensorRT-LLM是在TensorRT基础上针对大模型进一步优化的加速推理库,它号称可以增加4倍的推理速度。

所以本文将对其做一个简单的使用介绍。

前所未有的优化

在AI世界中优化不仅是一种福利而且是必要的。TensorRT-LLM引入了一系列在模型和运行时级别都具有开创性的优化。

在模型级别,TensorRT-LLM采用复杂的策略,如内核融合,将其中多个操作合并到单个内核中,以减少启动多个内核的开销。它还利用量化,大大加快了计算速度,减少了内存需求,而不影响模型精度。

 import tensorrtllm as trtllm# Initialize the modelmodel = trtllm.LargeLanguageModel('./path_to_your_model')# Apply kernel fusion and quantizationoptimization_flags = trtllm.OptimizationFlag.FUSE_OPERATIONS | trtllm.OptimizationFlag.QUANTIZEoptimized_model = model.optimize(flags=optimization_flags)

在运行时级别,TensorRT-LLM具有连续批处理等功能,允许同时计算多个推理请求,有效地提高GPU利用率和吞吐量。分页注意力是另一个新特性,优化了注意力计算过程中的内存使用,这是大型语言模型的一个常见瓶颈。

 # Enable in-flight batching and paged attentionruntime_parameters = {'in_flight_batching': True,'paged_attention': True}# Build the engine with these runtime optimizationsengine = optimized_model.build_engine(runtime_parameters=runtime_parameters)

这些优化提供了实质性的性能改进,但它们需要仔细调优和彻底的测试。验证优化后模型的功能和性能完整性非常重要,以确保增强不会对模型的准确性或可靠性产生不利影响。

加速推理

在当今的数字时代,速度是至关重要的。TensorRT-LLM可与传统方法相比,提供高达8倍的吞吐量。

这种性能上的飞跃在很大程度上归功于in_flight_batching。与传统的批处理不同,在传统的批处理中,推理请求是分组处理的(导致单个请求的延迟),而在线批处理重叠了不同请求的计算,在不影响批大小的情况下大大减少了推理时间。

 input_data = [...]  # your input data hereresults = engine.execute_with_inflight_batching(input_data)

另一个主要改进是针对GPU密集型操作优化的内存管理,这确保了GPU的最大计算能力得到利用。

为了充分利用加速推理,平衡CPU和GPU之间的负载至关重要,确保两者都不会成为瓶颈。需要管理输入模型的数据管道和在GPU上执行的计算。监测系统的功率性能也非常重要,持续的高利用率操作可能会使系统资源紧张。

广泛的模型支持

丰富多样的大型语言模型(llm),每个模型都是为特定任务量身定制的。推理工具的效用因其与各种模型无缝集成的能力而大大增强。TensorRT-LLM在这一领域表现出色,并且提供了广泛的兼容性,从Meta的Llama 1和2到ChatGLM、Falcon、MPT、Baichuan、Starcoder等一系列llm。

 import tensorrtllm as trtllm# Define and load different LLMsllama_model = trtllm.LargeLanguageModel('./path_to_llama_model')chatglm_model = trtllm.LargeLanguageModel('./path_to_chatglm_model')# Build optimized engines for different LLMsllama_engine = llama_model.build_engine()chatglm_engine = chatglm_model.build_engine()

节约成本

部署人工智能的经济方面通常是人工智能驱动项目可行性的决定性因素。除了原始计算性能之外,TensorRT-LLM的设计还具有成本效益,解决了包括直接和间接费用在内的总拥有成本(TCO)问题。通过提高计算效率,TensorRT-LLM减少了对大量硬件资源的依赖,从而降低了能耗。

 import tensorrtllm as trtllm# Initialize the modelmodel = trtllm.LargeLanguageModel('./path_to_your_model')# Optimize the model with energy-efficient settingsoptimized_model = model.optimize(energy_efficient=True)# Monitor energy consumptionenergy_usage = optimized_model.monitor_energy_usage()

为了最大限度地节省成本,对性能指标进行持续的监控和分析是必不可少的。利用日志记录和监视工具跟踪能源使用情况、计算效率和硬件运行状况。这样可以定期审查运营成本,并准备根据这些见解调整使用模式或配置。

易用性

进入大型语言模型(llm)的世界不需要计算机科学博士学位或多年的编程经验。TensorRT-LLM的设计以用户友好为核心。通过其直观的Python API, TensorRT-LLM使LLM优化和推理平民化,使这些先进技术能够为更广泛的受众所使用。

 import tensorrtllm as trtllm# Initialize and load the modelmodel = trtllm.LargeLanguageModel('./path_to_your_model')# Perform common operations through easy-to-understand methodsmodel.optimize()model.build_engine()model.execute(input_data)

即使有了易于使用的API,可以极大地平滑学习曲线,并为更有效的使用提供有价值的见解。

量化的支持

模型的规模呈指数级增长,管理计算资源至关重要。TensorRT-LLM的量化支持允许使用较低的精度(如FP8)进行计算,TensorRT-LLM在资源消耗、执行速度和模型精度之间实现了良好的平衡。这不仅加快了推理速度,还减少了内存使用,这对于在受限环境中部署大型模型至关重要。

 import tensorrtllm as trtllm# Initialize the modelmodel = trtllm.LargeLanguageModel('./path_to_your_model')# Enable quantizationquantized_model = model.enable_quantization(precision='FP8')# Build and execute the quantized modelengine = quantized_model.build_engine()result = engine.execute(input_data)

生态集成

作为NVIDIA官方产品,TensorRT-LLM在构建时考虑了适应性,准备与新兴的LLM生态系统集成。随着新模型架构的出现和现有模型的完善,TensorRT-LLM支持与前沿开发的无缝集成。

 import tensorrtllm as trtllm# Initialize the modelmodel = trtllm.LargeLanguageModel('./path_to_your_model')# Update the model with new kernels or architecturesupdated_model = model.update_components(new_kernels='./path_to_new_kernels', new_architectures='./path_to_new_architectures')# Re-optimize and deploy the updated modelupdated_engine = updated_model.build_engine()

总结

为什么选择TensorRT-LLM呢?

因为它是NVIDIA官方产品,兼容性和速度优化肯定是有保障的,它提供了无与伦比的速度增强、广泛的模型支持和显著的成本降低,同时简化了LLM优化的任务。它对多种模型的强大支持,通过节能计算实现成本效益的承诺,以及与动态AI生态系统的无缝集成,使TensorRT-LLM成为经验丰富的开发人员和新手都不可或缺的资产。

https://avoid.overfit.cn/post/9601a73924024e2895957627f8e35bda

相关文章:

使用TensorRT-LLM进行高性能推理

LLM的火爆之后,英伟达(NVIDIA)也发布了其相关的推理加速引擎TensorRT-LLM。TensorRT是nvidia家的一款高性能深度学习推理SDK。此SDK包含深度学习推理优化器和运行环境,可为深度学习推理应用提供低延迟和高吞吐量。而TensorRT-LLM是在TensorRT基础上针对大模型进一步…...

怎么去别人的github工程下载

1、网络 确保网络能够顺利访问github,有的地方的公共网络不能访问github,我之前开过科学上网的会员,发现没必要特意开去访问它。可以直接开手机热点,一般是可以顺利访问的。 2、下载 以我的github开源笔记qq-hh/C_review (gith…...

【java基础-实战3】list遍历时删除元素的方法

插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 坚持不懈,越努力越幸运,大家一起学习鸭~~~ 在实际的业务开发中,容器的遍历可以说是非…...

云计算与云服务

云计算与云服务 1、云计算与云服务概述2、云服务模式(IaaS、PaaS、SaaS、DaaS)3、公有云、私有云和混合云1、云计算与云服务概述 什么是云计算? “云”实质上就是一个网络,狭义上讲,云计算就是一种提供资源的网络,使用者可以随时获取“云”上的资源,按需求量使用,并且…...

Ubuntu20.4 设置代理

主要是涉及2个代理 涉及apt 可以在、/etc/apt/apt.conf 中进行修改 在系统全局可以在/etc/profile中进行修改...

RustDay06------Exercise[71-80]

71.box的使用 说实话这题没太看懂.敲了个模板跟着提示就过了 // box1.rs // // At compile time, Rust needs to know how much space a type takes up. This // becomes problematic for recursive types, where a value can have as part of // itself another value of th…...

Leetcode—2525.根据规则将箱子分类【简单】

2023每日刷题(五) Leetcode—2525.根据规则将箱子分类 实现代码 char * categorizeBox(int length, int width, int height, int mass){long long volume;long long len (long long)length;long long wid (long long)width;long long heig (long lo…...

RustDay05------Exercise[51-60]

51.使用?当作错误处理符 ? 是 Rust 中的错误处理操作符。通常用于尝试解析或执行可能失败的操作,并在出现错误时提前返回错误,以避免程序崩溃或出现未处理的错误。 具体来说,? 用于处理 Result 或 Option 类型的返回值。 // errors2.rs…...

hdlbits系列verilog解答(或非门)-07

文章目录 wire线网类型介绍一、问题描述二、verilog源码三、仿真结果 wire线网类型介绍 wire线网类型是verilog的一种数据类型,它是一种单向的物理连线。它可以是输入也可以是输出,它与reg寄存器数据类型不同,它不能存储数据,只能…...

Node学习笔记之path模块

path 模块提供了 操作路径 的功能,我们将介绍如下几个较为常用的几个 API: API 说明 path.resolve 拼接规范的绝对路径常用 path.sep 获取操作系统的路径分隔符 path.parse 解析路径并返回对象 path.basename 获取路径的基础名称 path.dirname…...

使用LangChain与chatGPT API开发故事推理游戏-海龟汤

项目概述 海龟汤简述: 主持人提出一个难以理解的事件,玩家通过提问来逐步还原事件,主持人仅能告知玩家:“是、不是、是也不是、不重要”。引入chatGPT API原因 想通过程序自动化主持人,可通过chatGPT来判断玩家推理正确与否。LangChain是什么 LangChain是一个强大的框架,…...

用ChatGPT编写Excel函数公式进行表格数据处理分析,so easy!

在用Excel进行数据处理分析时,经常需要编写不同的公式,需要了解大量的函数。有了ChatGPT,就很简单了,直接用自然语言描述自己的需求,然后让ChatGPT写出公式就好了。 例子1: Excel某个单元格的内容是&#…...

超全全国所有城市人力资本测算数据集(1990-2021年)

参考《管理世界》中詹新宇(2020)的做法,本文对地级市的人力资本水平进行测算,其中人力资本水平用地级市的普通高等学校在校学生数占该地区总人口比重来反映 一、数据介绍 数据名称:地级市-人力资本测算 数据年份&…...

(二)docker:建立oracle数据库mount startup

这章其实我想试一下startup部分做mount,因为前一章在建完数据库容器后,需要手动创建用户,授权,建表等,好像正好这部分可以放到startup里,在创建容器时直接做好;因为setup部分我实在没想出来能做…...

Hash Join(PostgreSQL 14 Internals翻译版)

一阶段哈希连接(One-Pass Hash Joins) 散列连接使用预构建的散列表搜索匹配的行。下面是一个使用这种连接的计划的例子: 在第一阶段,哈希连接节点1调用哈希节点2,哈希节点2从其子节点提取整个内部行集,并将…...

《SQLi-Labs》04. Less 23~28a

title: 《SQLi-Labs》04. Less 23~28a date: 2023-10-19 19:37:40 updated: 2023-10-19 19:38:40 categories: WriteUp:Security-Lab excerpt: 联合注入,注释符过滤绕过之构造闭合,%00 截断、二次注入、报错注入,空格过滤绕过&…...

文件打包下载excel导出和word导出

0.文件下载接口 请求 GET /pm/prj/menu/whsj/download/{affixId} 文件affixId多个id以逗号隔开。多个文件会以打包得形式。 1.Excel导出 1.0接口 POST 127.0.0.1:8400/pm/io/exportExcel/year-plan-table-workflow/report 参数 [{"org":"011","re…...

模拟退火算法求解TSP问题(python)

模拟退火算法求解TSP的步骤参考书籍《Matlab智能算法30个案例分析》。 问题描述 TSP问题描述在该书籍的第4章 算法流程 部分实现代码片段 坐标轴转换成两点之间直线距离长度的代码 coordinates np.array([(16.47, 96.10),(16.47, 94.44),(20.09, 92.54),(22.39, 93.37),(2…...

电路基础元件

文章目录 每周电子w5——电路元件基本电路元件电阻元件电容元件电感元件 每周电子w5——电路元件 基本电路元件 电路元件:是电路中最基本的组成单元 电路元件通过其端子与外部相连接;元件的特性则通过与端子有关的物理量描述每一种元件反映某种确定的电…...

百度地图API:JavaScript开源库几何运算判断点是否在多边形内(电子围栏)

百度地图JavaScript开源库,是一套基于百度地图API二次开发的开源的代码库。目前提供多个lib库,帮助开发者快速实现在地图上添加Marker、自定义信息窗口、标注相关开发、区域限制设置、几何运算、实时交通、检索与公交驾车查询、鼠标绘制工具等功能。 判…...

7.4.分块查找

一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

基于服务器使用 apt 安装、配置 Nginx

🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...

【机器视觉】单目测距——运动结构恢复

ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛&#xf…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...