模型推理加速系列 | 08:TensorRT-LLM助力LLM高性能推理

news2025/1/22 23:39:38

引言

                                                        日暮苍山远,天寒白屋贫。Created by DALL·E 3

小伙伴们好,我是《小窗幽记机器学习》的小编:卖汤圆的小女孩,今天是冬至,祝福小伙伴们幸福安康吧。紧接前文:

万字长文细说ChatGPT的前世今生

Llama 2实战(上篇):本地部署(附代码)

Llama 2实战(下篇)-中文语料微调(附代码)

Code Llama实战(上篇)-模型简介和评测

Code Llama实战(下篇)-本地部署、量化及GPT-4对比

多模态大模型:浦语·灵笔InternLM-XComposer解读、实战和思考

百川2模型解读、服务部署、微调(上篇)

百川2模型解读、服务部署、微调(下篇)

阿里千问Qwen模型解读、本地部署

天工大模型Skywork解读及揭露刷榜内幕引发的思考

今天这篇小作文主要介绍如何用TensorRT-LLM加速LLM的inference,具体包括TensorRT-LLM的安装、如何用TensorRT-LLM对Qwen做模型推理及其性能评测。如需与小编进一步交流(包括完整代码获取),可以通过《小窗幽记机器学习》添加小编好友。

简介

其实小编之前有介绍过关于如何用TensorRT提升模型推理速度,感兴趣的小伙伴可以回顾下:

TensorRT-LLM 是一个开源库,用于定义、优化和执行大型语言模型 (LLM) 在生产环境的推理。它在开源 Python API 中保留了 FasterTransformer 的核心功能,并与 TensorRT 的深度学习编译器配合使用,以快速支持新模型和定制模型。TensorRT-LLM提供了易于使用的Python API,用于定义大型语言模型(LLM)并构建包含最先进优化的TensorRT引擎,以在NVIDIA GPU上高效执行推理。TensorRT-LLM还包含用于创建执行这些TensorRT引擎的Python and C++运行时的组件。它还包括与NVIDIA Triton推理服务器集成的后端,用于在生产环境部署LLM服务。

安装TensorRT-LLM

官方提供一步创建镜像并安装依赖的脚本,这里为了更加细致化地了解各个环节,选择Step by Step安装,从而让小伙们更加清楚了解整个过程。由于TensorRT-LLM的编译对于CUDA的版本有要求,建议还是遵循以下的安装步骤,基于官方推荐的镜像环境进行编译安装。该环节如遇到问题,欢迎与小编进一步交流。

创建docker镜像

将官方仓库:https://github.com/NVIDIA/TensorRT-LLM/tree/main 拉取本地后,进入目录执行以下命令:

make -C docker build

如此会创建一个名为tensorrt_llm/devel:latest的镜像。

创建容器

make -C docker run

屏幕打印的内容如下:

docker run --rm -it --ipc=host --ulimit memlock=-1 --ulimit stack=67108864  \
                --gpus=all \
                --volume /data/home/you_name/Repository/LLM/TensorRT-LLM:/code/tensorrt_llm \
                --env "CCACHE_DIR=/code/tensorrt_llm/cpp/.ccache" \
                --env "CCACHE_BASEDIR=/code/tensorrt_llm" \
                --workdir /code/tensorrt_llm \
                --hostname VM-104-91-ubuntu-devel \
                --name tensorrt_llm-devel-root \
                --tmpfs /tmp:exec \
                tensorrt_llm/devel:latest

此后将创建一个名为tensorrt_llm-devel-root的容器。如果想要容器退出后不被销毁,注意需要修改docker run对应的参数,不要使用--rm!此外,如果想要将本地账号添加到容器内,可以如下命令:

make -C docker run LOCAL_USER=1

小编这里最终使用如下命令创建容器:

docker run -itd --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 --gpus=all --volume /data/home/:/home --env "CCACHE_DIR=/home/my_name/Repository/LLM/TensorRT-LLM/cpp/.ccache" --env "CCACHE_BASEDIR=/home/my_name/Repository/LLM" --workdir /home --hostname VM-104-91-ubuntu-devel --name tensorrt_llm-devel-jason --tmpfs /tmp:exec tensorrt_llm/devel:latest bash

编译TensorRT-LLM

进入容器tensorrt_llm-devel-root内的TensorRT-LLM目录下运行如下代码:

# To build the TensorRT-LLM code.
python3 ./scripts/build_wheel.py --trt_root /usr/local/tensorrt

为加快Python包的安装,可以预先将pip的安装源改为腾讯:

pip config set global.index-url http://mirrors.cloud.tencent.com/pypi/simple
pip config set global.trusted-host mirrors.cloud.tencent.com

build_wheel.py默认是增量编译,可以通过添加--clean参数清理编译目录:

python3 ./scripts/build_wheel.py --clean  --trt_root /usr/local/tensorrt

可以指定TensorRT-LLM的编译到特定的CUDA架构。为此,build_wheel.py脚本接受一个分号分隔的CUDA架构列表,如下例所示:

# Build TensorRT-LLM for Ampere.
python3 ./scripts/build_wheel.py --cuda_architectures "80-real;86-real" --trt_root /usr/local/tensorrt

更多支持的架构可以查看CMakeLists.txt

编译成功会有如下结果:

adding 'tensorrt_llm-0.6.1.dist-info/entry_points.txt'
adding 'tensorrt_llm-0.6.1.dist-info/top_level.txt'
adding 'tensorrt_llm-0.6.1.dist-info/zip-safe'
adding 'tensorrt_llm-0.6.1.dist-info/RECORD'
removing build/bdist.linux-x86_64/wheel
Successfully built tensorrt_llm-0.6.1-cp310-cp310-linux_x86_64.whl

安装编译成功的whl文件:

# Deploy TensorRT-LLM in your environment.
pip3 install ./build/tensorrt_llm*.whl

Qwen推理

下面以Qwen-7B-chat模型为例,演示如何用TensorRT-LLM加速Qwen模型推理。

环境准备

pip3 install transformers_stream_generator tiktoken -i https://mirrors.cloud.tencent.com/pypi/simple

格式转换

为能够在TensorRT中运行LLM,需要将原始的模型格式转为TensorRT中的engine格式。根据以下转换脚本进行模型格式转换:

python3 build.py --hf_model_dir /home/model_zoo/LLM/Qwen/Qwen-7B-Chat/ --dtype float16 \
                --remove_input_padding \
                --use_gpt_attention_plugin float16 \
                --enable_context_fmha \
                --use_gemm_plugin float16 \
                --output_dir /home/model_zoo/LLM/Qwen/Qwen-7B-Chat/trt_engines/fp16/1-gpu/

转换结果如下:

ls -lrth /home/model_zoo/LLM/Qwen/Qwen-7B-Chat/trt_engines/fp16/1-gpu/

total 15G
-rw-r--r-- 1 root root 1.5K Dec 19 09:19 config.json
-rw-r--r-- 1 root root  15G Dec 19 09:19 qwen_float16_tp1_rank0.engine
-rw-r--r-- 1 root root 173K Dec 19 09:19 model.cache

inference

运行脚本:

python3 run.py \
  --tokenizer_dir /home/model_zoo/LLM/Qwen/Qwen-7B-Chat/ \
  --engine_dir /home/model_zoo/LLM/Qwen/Qwen-7B-Chat/trt_engines/fp16/1-gpu/ \
  --max_output_len 128 \
  --input_text="你好, 能做个自我介绍吗?"

输出结果如下:

Input [Text 0]: "<|im_start|>system
You are a helpful assistant.<|im_end|>
<|im_start|>user
你好, 能做个自我介绍吗?<|im_end|>
<|im_start|>assistant
"
Output [Text 0 Beam 0]: "你好!我叫通义千问,是阿里云推出的一种超大规模语言模型。我能够回答问题、创作文字,还能表达观点、撰写代码。如果您有任何问题或需要帮助,请随时告诉我,我会尽力提供支持。"

性能测试(单GPU)

backend为hf

使用官方的benchmark脚本进行测试。

执行测试脚本:

# 测量huggingface模型
python3 benchmark.py --backend=hf \
  --hf_model_dir /home/model_zoo/LLM/Qwen/Qwen-7B-Chat/ \
  --tokenizer_dir /home/model_zoo/LLM/Qwen/Qwen-7B-Chat/ \
  --dataset=ShareGPT_V3_unfiltered_cleaned_split.json \
  --hf_max_batch_size=1

测试结果如下:

Throughput: 0.15 requests/s, 73.82 tokens/s

backend为tensorRT-LLM

测试如下:

# 默认的最大长度是2048
python3 benchmark.py --backend=trt_llm \
  --tokenizer_dir /home/model_zoo/LLM/Qwen/Qwen-7B-Chat/ \
  --engine_dir /home/model_zoo/LLM/Qwen/Qwen-7B-Chat/trt_engines/fp16/1-gpu/ \
  --dataset=ShareGPT_V3_unfiltered_cleaned_split.json \
  --trt_max_batch_size=1

执行脚本开始测试:

bash qwen_benchmark_trt_llm.sh

测试结果如下:

Throughput: 0.49 requests/s, 241.83 tokens/s

从测试结果可以看出,tensorRT-LLM确实显著提升了3倍的速度。

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

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

相关文章

DBeaver中使用外部格式化程序对进行sql格式化

本文介绍了如何在DBeaver中使用pgFormatter、sqlprase、sqlformatter等外部格式化程序对sql进行格式化。 目录 一、pgFormatter 1.准备工作 2.DBeaver中进行配置 二、sqlprase 1.准备工作 2.在DBeaver中配置 三、sql-formatter 1.准备工作 2.在DBeaver中配置 一、pgF…

机场信息集成系统系列介绍(6):机场协同决策支持系统ACDM

目录 一、背景介绍 1、机场协同决策支持系统是什么&#xff1f; 2、发展历程 3、机场协同决策参与方 4、相关定义 二、机场协同决策ACDM的建设目标 &#xff08;一&#xff09;机场协同决策支持系统的宏观目标 1、实现运行数据共享和前序航班信息透明化 2、实现地面资源…

基于Java web的住院管理系统论文

目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 2 系统开发环境 3 2.1 vue技术 3 2.2 JAVA技术 3 2.3 MYSQL数据库 3 2.4 B/S结构 4 2.5 SSM框架技术 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2 操作可行性 5 3…

otter-harbor同步

一. 部署及依赖 otter Github (一). 服务启动 1. mysql 5.6版本以上&#xff0c;作为 otter-manger 使用的数据库 # mysql docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD123456 -d mysql:5.7 --character-set-serverutf8mb4 --collation-serverutf8mb4_un…

第11章 GUI Page421~422 步骤六 支持文字

运行效果&#xff1a; 关键代码&#xff1a; 新增头文件&#xff1a; //item_text.hpp #ifndef ITEM_TEXT_HPP_INCLUDED #define ITEM_TEXT_HPP_INCLUDED #include "item_i.hpp"class TextItem : public IItem { public:TextItem(): _startPosition(0, 0), _endPos…

论文推荐:大型语言模型能自我解释吗?

这篇论文的研究主要贡献是对LLM生成解释的优缺点进行了调查。详细介绍了两种方法&#xff0c;一种是做出预测&#xff0c;然后解释它&#xff0c;另一种是产生解释&#xff0c;然后用它来做出预测。 最近的研究发现&#xff0c;即使LLM是在特定数据上训练的&#xff0c;也不能认…

SpringMVC系列之技术点定向爆破二

SpringMVC的运行流程 客户端发送请求 tomcat接收对应的请求 SpringMVC的核心调度器DispatcherServlet接收到所有请求 请求地址与RequestMapping注解进行匹配&#xff0c;定位到具体的类和具体的处理方法&#xff08;封装在Handler中&#xff09; 核心调度器找到Handler后交…

c语言:计算1+2+3……+n的和|练习题

一、题目 输入一个数n&#xff0c;计算123……n的和 二、代码截图【带注释】 三、源代码【带注释】 #include int main() { int num0; printf("请输入要运算的数:"); scanf("%d",&num); sumResult(num);//相加结果函数 } //计算打印…

关于“Python”的核心知识点整理大全37

目录 13.6.2 响应外星人和飞船碰撞 game_stats.py settings.py alien_invasion.py game_functions.py ship.py 注意 13.6.3 有外星人到达屏幕底端 game_functions.py 13.6.4 游戏结束 game_stats.py game_functions.py 13.7 确定应运行游戏的哪些部分 alien_inva…

3dsmax渲染太慢,用云渲染农场多少钱?

对于许多从事计算机图形设计的创作者来说&#xff0c;渲染速度慢是一个常见问题&#xff0c;尤其是对于那些追求极致出图效果的室内设计师和建筑可视化师&#xff0c;他们通常使用3ds Max这样的工具&#xff0c;而高质量的渲染经常意味着长时间的等待。场景复杂、细节丰富&…

恢复丢失数据,AnyMP4数据恢复软件帮您解忧

在现今数字化的时代&#xff0c;我们经常会面临着数据丢失的困扰。无论是因为误操作、病毒攻击、格式化、系统崩溃还是硬盘损坏等原因&#xff0c;重要数据的丢失都会给我们带来巨大的困扰和损失。为此&#xff0c;AnyMP4数据恢复软件应运而生&#xff0c;它为用户提供了一种高…

ssm基于BS的库存管理软件设计与实现论文

目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 2 系统开发环境 3 2.1 vue技术 3 2.2 JAVA技术 3 2.3 MYSQL数据库 3 2.4 B/S结构 4 2.5 SSM框架技术 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2 操作可行性 5 3…

Ubuntu 常用命令之 zip 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 Ubuntu系统下的zip命令是用来压缩文件的。这个命令可以将一个或多个文件或者目录压缩成一个.zip文件&#xff0c;也可以将整个目录树压缩成一个.zip文件。 zip命令的基本格式 zip [选项] [压缩文件名] [要压缩的文件或目录...]z…

机器视觉兄弟们,出身寒微,不是耻辱,能屈能伸,方为丈夫

人生过往&#xff0c;当时只道是寻常。 可以说&#xff0c;“社会边角料”这个词&#xff0c;即刺耳&#xff0c;又是那么难听。只是&#xff0c;无数的年轻人和中年人&#xff0c;都喜欢用这个词来自嘲。 特别是出身寒微&#xff0c;没啥资源的80后和90后&#xff0c;他们总是…

.NET中的Swagger使用

目录 前言 一、Swagger是什么&#xff1f; 二、如何Swagger文档说明的信息 1.在AddSwaggerGen方法中写入文档信息 2.运行效果 二、文档UI界面标题、路由设置 1.在中间件UseSwaggerUI方法中配置 三、文档UI界面添加接口注释 1.在 .csproj中配置 2.在AddSwaggerGen方法中配置Incl…

SLAM算法与工程实践——雷达篇:Livox激光雷达使用

SLAM算法与工程实践系列文章 下面是SLAM算法与工程实践系列文章的总链接&#xff0c;本人发表这个系列的文章链接均收录于此 SLAM算法与工程实践系列文章链接 下面是专栏地址&#xff1a; SLAM算法与工程实践系列专栏 文章目录 SLAM算法与工程实践系列文章SLAM算法与工程实践…

C++设计模式 #3策略模式(Strategy Method)

动机 在软件构建过程中&#xff0c;某些对象使用的的算法可能多种多样&#xff0c;经常改变。如果将这些算法都写在类中&#xff0c;会使得类变得异常复杂&#xff1b;而且有时候支持不频繁使用的算法也是性能负担。 如何在运行时根据需求透明地更改对象的算法&#xff1f;将…

ceph块存储学习

目录 ceph的组件和功能 ceph的数据读写流程 ceph存储池学习 ceph的组件和功能 Ceph OSD&#xff1a;功能是存储数据&#xff0c;处理数据的复制、恢复、平衡数据分布&#xff0c;并将一些相关数据提供给Ceph Monitor,。 Ceph Monitor: 功能是维护整个集群健康状态&…

关于“Python”的核心知识点整理大全36

目录 13.4.4 向下移动外星人群并改变移动方向 game_functions.py alien_invasion.py 13.5 射杀外星人 13.5.1 检测子弹与外星人的碰撞 game_functions.py alien_invasion.py 13.5.2 为测试创建大子弹 13.5.3 生成新的外星人群 game_functions.py alien_invasion.py …

怎么开启基于软件标签的kasan, CONFIG_KASAN_SW_TAGS=y

如果内核版本等于或大于5.0&#xff0c;那么需要在通用KASAN和基于软件标签的KASAN之间做出选择&#xff0c;前者的配置宏是CONFIG_KASAN_GENERIC&#xff0c;后者的配置宏是CONFIG_KASAN_SW_TAGS。menuconfig无法勾选CONFIG_KASAN_SW_TAGSy CONFIG_KASAN_SW_TAGS 依赖 CC_HAS…