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

引言

                                                        日暮苍山远,天寒白屋贫。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.hqwc.cn/news/294490.html

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

相关文章

一款基于.NET Core的快速开发框架、支持多种前端UI、内置代码生成器

前言 经常看到有小伙伴在技术群里问有没有什么好用且快速的开发框架推荐的&#xff0c;今天就给大家分享一款基于MIT License协议开源、免费的.NET Core快速开发框架、支持多种前端UI、内置代码生成器、一款高效开发的利器&#xff1a;WalkingTec.Mvvm框架&#xff08;简称WTM…

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

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

基于Spring自动注入快速实现策略模式+工厂模式优化过多的if..else

一、策略模式 1.1策略模式定义 在策略模式&#xff08;Strategy Pattern&#xff09;中一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式定义了一系列算法或策略&#xff0c;并将每个算法封装在独立的类中&#xff0c;使得它们可以互相…

echarts:设置折线图线条和端点的颜色

1、代码 <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>Echarts折线图</title> </head> <body> <div id"main" style"width: 600px;height:400px;"></div> <sc…

爬虫概念简述

爬虫简述 ⼀、什么是爬虫&#xff1f;二、爬虫有什么用?三、爬虫的分类四、所谓的“爬虫学的好&#xff0c;牢饭吃到饱 !”五、爬虫的大致流程 ⼀、什么是爬虫&#xff1f; ​ 简言之&#xff0c;爬虫可以帮助我们把网站上的信息快速提取并保存下来。 ​ 我们可以把互联网比…

2016年第五届数学建模国际赛小美赛C题对超级细菌的战争解题全过程文档及程序

2016年第五届数学建模国际赛小美赛 C题 对超级细菌的战争 原题再现&#xff1a; 最近有很多关于我们抗生素耐药性危机的讨论。进化出的能够抵抗抗生素的细菌每年杀死70万人&#xff0c;越来越强大的细菌正在世界各地传播。研究人员担心&#xff0c;我们将进入一个后抗生素时代…

U-Net: Convolutional Networks for Biomedical Image Segmentation(CVPR2015)

文章目录 AbstractIntroductionNetwork ArchitectureConclusiontorch code hh 源代码 Abstract 人们普遍认为&#xff0c;深度网络的成功训练需要成千上万个带注释的训练样本。在这篇论文中&#xff0c;我们提出了一个网络和训练策略&#xff0c;该策略依赖于数据增强的强大使…

红队打靶练习:DIGITALWORLD.LOCAL: MERCY V2

目录 信息收集 1、arp 2、netdiscover 3、nmap 4、nikto 5、whatweb 6、总结 目录探测 1、gobuster 2、dirsearch WEB enum4linux枚举工具 smbclient工具 knock工具 CMS 文件包含漏洞 Tomcat 提权 系统信息收集 本地提权 get root 信息收集 1、arp ┌──…

redis 从0到1完整学习 (六):Hash 表数据结构

文章目录 1. 引言2. redis 源码下载3. dict 数据结构4. 哈希表扩容与 rehash5. 参考 1. 引言 前情提要&#xff1a; 《redis 从0到1完整学习 &#xff08;一&#xff09;&#xff1a;安装&初识 redis》 《redis 从0到1完整学习 &#xff08;二&#xff09;&#xff1a;red…

HarmonyOS4.0系统性深入开发01应用模型的构成要素

应用模型的构成要素 应用模型是HarmonyOS为开发者提供的应用程序所需能力的抽象提炼&#xff0c;它提供了应用程序必备的组件和运行机制。有了应用模型&#xff0c;开发者可以基于一套统一的模型进行应用开发&#xff0c;使应用开发更简单、高效。 HarmonyOS应用模型的构成要…

数字信号的理解

1 数字信号处理简介 数字信号处理 digital signal processing&#xff08;DSP&#xff09;经常与实际的数字系统相混淆。这两个术语都暗示了不同的概念。数字信号处理在本质上比实际的数字系统稍微抽象一些。数字系统是涉及的硬件、二进制代码或数字域。这两个术语之间的普遍混…

cleanmymac和柠檬清理哪个好 cleanmymac有必要买吗

大家好&#xff0c;不定期分享正版软件激活安装、使用帮助&#xff0c;售后等知识。 在我们的日常使用中&#xff0c;电脑常常会出现卡顿、运行缓慢的情况。这时候&#xff0c;我们通常会想到清理电脑&#xff0c;以期望恢复电脑的正常运行状态。而在清理电脑时&#xff0c;有两…