4个顶级的大模型推理引擎

LLM 在文本生成应用中表现出色,例如具有高理解度和流畅度的聊天和代码完成模型。然而,它们的庞大规模也给推理带来了挑战。基本推理速度很慢,因为 LLM 会逐个生成文本标记,需要对每个下一个标记进行重复调用。随着输入序列的增长,处理时间也会增加。此外,LLM 有数十亿个参数,很难在内存中存储和管理所有这些权重。

为了优化 LLM 推理和服务,有多个框架和软件包,在本博客中,我将使用和比较以下推理引擎:TensorRT-LLM、vLLM、LMDeploy 和 MLC-LLM。

NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - AI模型在线查看 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割 

1、TensorRT-LLM

TensorRT-LLM 是另一个推理引擎,可加速和优化 NVIDIA GPU 上最新 LLM 的推理性能。 LLM 被编译到 TensorRT Engine 中,然后与 triton 服务器一起部署,以利用推理优化,例如 In-Flight Batching(减少等待时间并允许更高的 GPU 利用率)、分页 KV 缓存、MultiGPU-MultiNode 推理和 FP8 支持。

我们将比较 HF 模型、TensorRT 模型和 TensorRT-INT8 模型(量化)的执行时间、ROUGE 分数、延迟和吞吐量。

你需要为你的 Linux 系统安装 Nvidia-container-toolkit,初始化 Git LFS(以下载 HF 模型),并下载必要的软件包,如下所示:

!curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
!apt-get update
!git clone https://github.com/NVIDIA/TensorRT-LLM/
!apt-get update && apt-get -y install python3.10 python3-pip openmpi-bin libopenmpi-dev
!pip3 install tensorrt_llm -U --pre --extra-index-url https://pypi.nvidia.com
!pip install -r TensorRT-LLM/examples/phi/requirements.txt
!pip install flash_attn pytest
!curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash
!apt-get install git-lfs

现在检索模型权重:

PHI_PATH="TensorRT-LLM/examples/phi"
!rm -rf $PHI_PATH/7B
!mkdir -p $PHI_PATH/7B && git clone https://huggingface.co/microsoft/Phi-3-small-128k-instruct $PHI_PATH/7B

将模型转换为 TensorRT-LLM 检查点格式并从检查点构建 TensorRT-LLM。

!python3 $PHI_PATH/convert_checkpoint.py --model_dir $PHI_PATH/7B/ \--dtype bfloat16 \--output_dir $PHI_PATH/7B/trt_ckpt/bf16/1-gpu/
# Build TensorRT-LLM model from checkpoint
!trtllm-build --checkpoint_dir $PHI_PATH/7B/trt_ckpt/bf16/1-gpu/ \--gemm_plugin bfloat16 \--output_dir $PHI_PATH/7B/trt_engines/bf16/1-gpu/

类似地,现在将 INT8 仅权重量化应用于 HF 模型并将检查点转换为 TensorRT-LLM。

!python3 $PHI_PATH/convert_checkpoint.py --model_dir $PHI_PATH/7B \--dtype bfloat16 \--use_weight_only \--output_dir $PHI_PATH/7B/trt_ckpt/int8_weight_only/1-gpu/
!trtllm-build --checkpoint_dir $PHI_PATH/7B/trt_ckpt/int8_weight_only/1-gpu/ \--gemm_plugin bfloat16 \--output_dir $PHI_PATH/7B/trt_engines/int8_weight_only/1-gpu/

现在在总结任务上测试基础 phi3 和两个 TensorRT 模型:

%%capture phi_hf_results
# Huggingface
!time python3 $PHI_PATH/../summarize.py --test_hf \--hf_model_dir $PHI_PATH/7B/ \--data_type bf16 \--engine_dir $PHI_PATH/7B/trt_engines/bf16/1-gpu/
%%capture phi_trt_results
# TensorRT-LLM
!time python3 $PHI_PATH/../summarize.py --test_trt_llm \--hf_model_dir $PHI_PATH/7B/ \--data_type bf16 \--engine_dir $PHI_PATH/7B/trt_engines/bf16/1-gpu/
%%capture phi_int8_results
# TensorRT-LLM (INT8)
!time python3 $PHI_PATH/../summarize.py --test_trt_llm \--hf_model_dir $PHI_PATH/7B/ \--data_type bf16 \--engine_dir $PHI_PATH/7B/trt_engines/int8_weight_only/1-gpu/

现在,在捕获结果后,你可以解析输出并绘制它以比较所有模型的执行时间、ROUGE 分数、延迟和吞吐量。

延迟和吞吐量的比较

2、vLLM

vLLM 提供 LLM 推理和服务,具有 SOTA 吞吐量、分页注意、连续批处理、量化(GPTQ、AWQ、FP8)和优化的 CUDA 内核。

让我们评估 microsoft/Phi3-mini-4k-instruct 的吞吐量和延迟。首先设置依赖项并导入库。

!pip install -q vllm
!git clone https://github.com/vllm-project/vllm.git
!pip install -q datasets
!pip install transformers scipy
from vllm import LLM, SamplingParams
from datasets import load_dataset
import time
from tqdm import tqdm
from transformers import AutoTokenizer

现在让我们加载模型并在数据集的一小部分上生成其输出。

dataset = load_dataset("akemiH/MedQA-Reason", split="train").select(range(10))
prompts = []
for sample in dataset:prompts.append(sample)
sampling_params = SamplingParams(max_tokens=524)
llm = LLM(model="microsoft/Phi-3-mini-4k-instruct", trust_remote_code=True)
def generate_with_time(prompt):start = time.time()outputs = llm.generate(prompt, sampling_params)taken = time.time() - startgenerated_text = outputs[0].outputs[0].textreturn generated_text, taken
generated_text = []
time_taken = 0
for sample in tqdm(prompts):text, taken = generate_with_time(sample)time_taken += takengenerated_text.append(text)# Tokenize the outputs and calculate the throughput
tokenizer = AutoTokenizer.from_pretrained("microsoft/Phi-3-mini-4k-instruct")
token = 1
for sample in generated_text:tokens = tokenizer(sample)tok = len(tokens.input_ids)token += tok
print(token)
print("tok/s", token // time_taken)

我们还通过 ShareGPT 数据集上的 vLLM 对模型的性能进行基准测试

!wget https://huggingface.co/datasets/anon8231489123/ShareGPT_Vicuna_unfiltered/resolve/main/ShareGPT_V3_unfiltered_cleaned_split.json
%cd vllm
!python benchmarks/benchmark_throughput.py --backend vllm --dataset ../ShareGPT_V3_unfiltered_cleaned_split.json --model microsoft/Phi-3-mini-4k-instruct --tokenizer microsoft/Phi-3-mini-4k-instruct --num-prompts=1000

3、LMDeploy

此软件包还允许压缩、部署和服务 LLM,同时提供高效推理(持久批处理、块 KV 缓存、动态拆分和融合、张量并行、高性能 CUDA 内核)、有效量化(4 位推理性能比 FP16 高 2.4 倍)、轻松的分发服务器(跨多台机器和卡部署多模型服务)和交互式推理模式(记住对话历史并避免重复处理历史会话)。此外,它还允许分析令牌延迟和吞吐量、请求吞吐量、API 服务器和 triton 推理服务器性能。

安装依赖项并导入包:

!pip install -q lmdeploy
!pip install nest_asyncio
import nest_asyncio
nest_asyncio.apply()
!git clone --depth=1 https://github.com/InternLM/lmdeploy
%cd lmdeploy/benchmark

LMdeploy 开发了两个推理引擎 TurboMind 和 PyTorch。

让我们在 microsoft/Phi3-mini-128k-instruct 上分析一下 PyTorch 引擎。

!python3 profile_generation.py microsoft/Phi-3-mini-128k-instruct --backend pytorch

它在多轮中对引擎进行分析,并报告每轮的令牌延迟和吞吐量。

Pytorch 引擎配置文件,用于标记延迟和吞吐量

4、MLC-LLM

MLC-LLM 提供高性能部署和推理引擎,称为 MLCEngine。

让我们安装依赖项,包括使用 conda 设置依赖项和创建 conda 环境。然后克隆 git 存储库并进行配置。

conda activate your-environment
python -m pip install --pre -U -f https://mlc.ai/wheels mlc-llm-nightly-cu121 mlc-ai-nightly-cu121
conda env remove -n mlc-chat-venv
conda create -n mlc-chat-venv -c conda-forge \"cmake>=3.24" \rust \git \python=3.11
conda activate mlc-chat-venv
git clone --recursive https://github.com/mlc-ai/mlc-llm.git && cd mlc-llm/
mkdir -p build && cd build
python ../cmake/gen_cmake_config.py
cmake .. && cmake --build . --parallel $(nproc) && cd ..
set(USE_FLASHINFER ON)
conda activate your-own-env
cd mlc-llm/python
pip install -e .

要使用 MLC LLM 运行模型,我们需要将模型权重转换为 MLC 格式。通过 Git LFS 下载 HF 模型,然后转换权重。

mlc_llm convert_weight ./dist/models/Phi-3-small-128k-instruct/ \--quantization q0f16 \--model-type "phi3" \-o ./dist/Phi-3-small-128k-instruct-q0f16-MLC

现在将你的 MLC 格式模型加载到 MLC 引擎中:

from mlc_llm import MLCEngine
# Create engine
model = "HF://mlc-ai/Phi-3-mini-128k-instruct-q0f16-MLC"
engine = MLCEngine(model)# Now let’s calculate throughput
import time
from transformers import AutoTokenizer
start = time.time()
response = engine.chat.completions.create(messages=[{"role": "user", "content": "What is the Machine Learning?"}],model=model,stream=False,
)
taken = time.time() - start
tokenizer = AutoTokenizer.from_pretrained("microsoft/Phi-3-mini-128k-instruct")
print("tok/s", 82 // taken)

5、结束语

TensorRT INT8 模型在推理速度方面优于 HF 模型和常规 TensorRT,而常规 TensorRT 模型在总结任务上表现更好,在三个模型中 ROUGE 得分最高。LMDeploy 在 A100 上提供的请求吞吐量比 vLLM 高出 1.8 倍。


原文链接:4个顶级LLM推理引擎 - BimAnt

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

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

相关文章

【CKA】七、七层负载-Ingress应用

7、七层负载-Ingress应用 1. 考题内容: 2. 答题思路: 1、要先查到集群中使用的ingressclass 2、编写yaml 我考的题只是把 hi 服务换成了 hello,其他都一模一样 3. 官网地址: https://kubernetes.io/zh-cn/docs/concepts/serv…

Pytorch实现RNN实验

一、实验要求 用 Pytorch 模块的 RNN 实现生成唐诗。要求给定一个字能够生成一首唐诗。 二、实验目的 理解循环神经网络(RNN)的基本原理:通过构建一个基于RNN的诗歌生成模型,学会RNN是如何处理序列数据的,以及如何在…

LabVIEW提高开发效率技巧----快速实现原型和测试

在LabVIEW开发中,DAQ助手(DAQ Assistant)和Express VI为快速构建原型和测试功能提供了极大的便利,特别适合于简单系统的开发和早期验证阶段。 DAQ助手:是一种可视化配置工具,通过图形界面轻松设置和管理数据…

HISTCITE分析进阶

不可否认histcite是一个很好的文献分析的工具,他能很好的找到最重要的那几篇文章,同时也能找到研究的发文趋势、研究机构和著名的研究学者等。但是它是一个很老的软件,因而很多东西都没能跟上下载的分析。我在使用过程中,尝试做一些改变使其更好用,同时也做一些记录。 1.…

C语言数组和指针笔试题(四)

目录 二维数组例题一例题二例题三例题四例题五例题六例题七例题八例题九例题十例题十一 结果 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 🐒🐒🐒个人主页 🥸🥸🥸C语言 🐿️…

vulnhub-Matrix 1靶机

vulnhub:https://www.vulnhub.com/entry/matrix-1,259/ 导入靶机,扫描IP 靶机在192.168.81.6,扫描端口 存在三个端口,有两个都是http服务,访问 80端口的网页没什么信息,31337的网页元素里有注释 ZWNobyAi…

加密与安全_HTOP 一次性密码生成算法

文章目录 HOTP 的基础原理HOTP 的工作流程HOTP 的应用场景HOTP 的安全性安全性增强措施Code生成HOTP可配置项校验HOTP可拓展功能计数器(counter)计数器在客户端和服务端的作用计数器的同步机制客户端和服务端中的计数器表现服务端如何处理计数器不同步计…

dubbo微服务

一.启动nacos和redis 1.虚拟机查看是否开启nacos和redis docker ps2.查看是否安装nacos和redis docker ps -a3.启动nacos和redis docker start nacos docker start redis-6379 docker ps二.创建三个idea的maven项目 1.第一个项目dubboapidemo 2.1.1向pom.xml里添加依赖 …

MES(软件)系统是什么?MES系统为何如此重要呢?

一、MES系统的定义与功能 MES系统是一套面向制造企业车间执行层的生产信息化管理系统,它涵盖了多种功能模块,包括但不限于: 订单管理:处理客户订单,确保生产需求与市场需求相匹配。生产调度:根据订单和生…

快乐数——双指针算法

题目链接 快乐数https://leetcode.cn/problems/happy-number/description/ 题目要求 样例 算法原理 根据上述的题目分析,我们可以知道,当重复执行 x 的时候,数据会陷入到⼀个”循环“之中。 而”快慢指针“有⼀个特性,就是在⼀个…

英文网站建设意义

英文网站建设是一项至关重要的任务,对于企业和个人而言都具有巨大的战略意义。一个精心设计的英文网站不仅可以提升品牌形象,还能够为用户提供良好的体验,从而增加流量、促进业务发展。在进行英文网站建设时,有几个关键方面需要特…

[MAUI]数据绑定和MVVM:MVVM的属性验证

一、MVVM的属性验证案例 Toolkit.Mvvm框架中的ObservableValidator类,提供了属性验证功能,可以使用我们熟悉的验证特性对属性的值进行验证,并将错误属性提取和反馈给UI层。以下案例实现对UI层的姓名和年龄两个输入框,进行表单提交验证。实现效果如下所示 View<ContentP…

五、Drf权限组件

五、权限组件 权限组件=[权限类,权限类,权限类…] 执行所有权限类的has_permission方法,通过返回True,不通过返回False 默认情况下,所有的权限类都通过,才返回True 5.1简单应用权限组件 #ext.per class MyPermission1(BasePermission):def has_permission(self, requ…

初识算法 · 双指针(1)

目录 前言&#xff1a; 双指针算法 题目一&#xff1a; ​编辑 题目二: 前言&#xff1a; 本文作为算法部分的第一篇文章&#xff0c;自然是少不了简单叭叭两句&#xff0c;对于算法部分&#xff0c;多刷是少不了&#xff0c;我们刷题从暴力过度到算法解法&#xff0c;自…

试试号称最好的7B模型(论文复现)

试试号称最好的7B模型&#xff08;论文复现&#xff09; 本文所涉及所有资源均在传知代码平台可获取 文章目录 试试号称最好的7B模型&#xff08;论文复现&#xff09;概述论文原理部署与复现推理微调adapter 融合 概述 Mistral 7B 是一个新型的具有 7.3 万亿参数的大语言模型。…

sql-labs靶场第一关测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、寻找注入点 2、注入数据库 ①Order by判断列数 ②判断回显地方 ③爆库&#xff0c;查看数据库名称 ④爆表&#xff0c;查看security库的所有表 ⑤爆列&#xff0c;查看users表的所有…

IT新秀系列:Go语言的兴起

Go语言&#xff08;Golang&#xff09;由谷歌于2007年发起&#xff0c;并于2009年正式开源。它的诞生背景可以追溯到互联网技术的高速发展时期。那时&#xff0c;软件开发面临着多核计算、大规模并发处理、部署和维护效率低下等挑战。作为一种新型的编程语言&#xff0c;Go主要…

win11 升级报 0x80073713 错误

安装错误 - 0x80073713 通常是由于系统文件损坏或 Windows Update 组件异常引起的。‌ 这个问题可能阻止您的系统正常接收和安装更新&#xff0c;影响系统的稳定性和安全性。 可以尝试如下如下方法&#xff1a; 首先&#xff0c;您可以尝试使用命令提示符运行系统文件检查器…

四、Drf认证组件

四、Drf认证组件 4.1 快速使用 from django.shortcuts import render,HttpResponse from rest_framework.response import Response from rest_framework.views import APIView from rest_framework.authentication import BaseAuthentication from rest_framework.exception…

.NET 一款支持冰蝎的免杀WebShell

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…