LLM推理引擎怎么選?TensorRT vs vLLM vs LMDeploy vs MLC-LLM

LLM擅長文本生成應用程序,如聊天和代碼完成模型,能夠高度理解和流暢。但是它們的大尺寸也給推理帶來了挑戰。有很多個框架和包可以優化LLM推理和服務,所以在本文中我將整理一些常用的推理引擎并進行比較。

TensorRT-LLM

TensorRT-LLM是NV發布的一個推理引擎。llm被編譯成TensorRT后與triton服務器一起部署并支持多GPU-多節點推理和FP8。

我們將比較HF模型、tensorrt模型和TensorRT-INT8模型(量化)的執行時間、ROUGE分數、延遲和吞吐量。

我這里在Linux上安裝Nvidia-container-toolkit,初始化Git LFS(用于下載HF Models),并下載所需的軟件包如下:

 !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的量化應用

 !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分數、延遲和吞吐量。

可以看到速度提高了不少,所有結果我們最后一起總結。

vLLM

vLLM提供LLM推理和服務,具有SOTA吞吐量,分頁注意力,連續批處理,量化(GPTQ, AWQ, FP8)的支持和優化的CUDA內核。

我們首先安裝相應的包

 !pip install -q vllm!git clone https://github.com/vllm-project/vllm.git!pip install -q datasets!pip install transformers scipyfrom vllm import LLM, SamplingParamsfrom datasets import load_datasetimport timefrom tqdm import tqdmfrom 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, takengenerated_text = []time_taken = 0for sample in tqdm(prompts):text, taken = generate_with_time(sample)time_taken += takengenerated_text.append(text)# Tokenize the outputs and calculate the throughputtokenizer = AutoTokenizer.from_pretrained("microsoft/Phi-3-mini-4k-instruct")token = 1for sample in generated_text:tokens = tokenizer(sample)tok = len(tokens.input_ids)token += tokprint(token)print("tok/s", token // time_taken)

通過vLLM在ShareGPT數據集上對模型的性能進行基準測試

 !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

LMDeploy

LMDeploy允許壓縮、部署和服務llm,同時提供高效的推理(持久批處理、阻塞KV緩存、動態分裂和融合、張量并行、高性能CUDA內核)、有效的量化(4位推理性能比FP16高2.4倍)。跨多臺機器和GPU部署多模型服務。此外,它還允許分析令牌延遲和吞吐量、請求吞吐量、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。我們來使用PyTorch引擎。

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

它在多個回合中對引擎進行配置,并報告每個回合的令牌延遲和吞吐量。

MLC-LLM

MLC-LLM提供了一個高性能的部署和推理引擎,稱為MLCEngine。

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格式。通過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)

總結

TensorRT INT8模型在推理速度上優于HF模型和TensorRT模型,而TensorRT模型在總結任務上表現更好,ROUGE得分最高。可以看到這幾個推理引擎都要比使用HF模型的速度快2倍左右,這是因為HF使用的是Python和Pytorch,也沒有進行任何的優化。而者4個引擎在推理速度上相差不大,差距在5%-10%左右,這是因為目前這幾個引擎都是用了優化的技術,區別只是代碼實現的方式不同會產生一些差距,所以在實際使用時,我們只要選擇一個兼容性好(或者符合你正在使用的大語言模型)的框架就可以了。

最后這里有個列表 TGI我不熟,就沒測,不過結果應該差不多


https://avoid.overfit.cn/post/33f6420c91e74c0eb8d6737cb9471e27

作者:Zain ul Abideen

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/43248.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/43248.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/43248.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

imazing電腦怎么下載 imazing怎么下載軟件 使用iMazing下載和卸載Apple設備上的應用程序

iMazing官方版是一款管理蘋果設備的軟件,是一款幫助用戶管理 iOS手機的PC端應用程序,能力遠超 iTunes 提供的終極 iOS 設備管理器。在iMazing官方版上與蘋果設備連接后,可以輕松傳輸文件,瀏覽保存信息等,功能比iTunes更…

泛微開發修煉之旅--35關于基于頁面擴展和自定義按鈕實現與后端交互調用的方法

文章鏈接:35關于基于頁面擴展和自定義按鈕實現與后端交互調用的方法

vue3中使用 tilwindcss報錯 Unknown at rule @tailwindcss

解決方法: vscode中安裝插件 Tailwind CSS IntelliSense 在項目中的 .vscode中 settings.json添加 "files.associations": {"*.css": "tailwindcss"}

基于YOLOv9的腦腫瘤區域檢測

數據集 腦腫瘤區域檢測,我們直接采用kaggle公開數據集,Br35H 數據中已對醫學圖像中腦腫瘤位置進行標注 數據集我已經按照YOLO格式配置好,數據內容如下 數據集中共包含700張圖像,其中訓練集500張,驗證集200張 模型訓…

Perl語言入門到高級學習

Perl語言介紹 Perl,全稱為Practical Extraction and Report Language,即“實用報表提取語言”,是一種高級、通用、直譯式、動態的編程語言。Perl最初由Larry Wall設計,并于1987年12月18日首次發布。經過多年的不斷發展和更新,Perl已經成為一種功能豐富且應用廣泛的計算機程…

AI繪畫:藝術與科技的交融,創新浪潮與無限可能

在科技日新月異的當下,AI 繪畫作為人工智能領域的一顆璀璨新星,正以驚人的速度在國內嶄露頭角,引發了藝術與技術交融的全新變革。隨著人工智能技術的飛速發展,AI繪畫已成為藝術與科技交融的新寵。2024年,AI繪畫行業在國…

昇思MindSpore學習筆記2-03 LLM原理和實踐--基于MindSpore通過GPT實現情感分類

摘要: 昇思MindSpore AI框架中使用openai-gpt的方法、步驟。 沒調通,存疑。 一、環境配置 %%capture captured_output # 實驗環境已經預裝了mindspore2.2.14,如需更換mindspore版本,可更改下面mindspore的版本號 !pip uninsta…

Autogen智能體實戰-Autogen框架介紹

文章目錄 一,Autogen簡介二,Autogen原理1,Autogen原理圖解2,拆解Autogen是如何完成繪制特斯拉股票趨勢圖的 這篇文章介紹一個開源的Agent框架-微軟的Autogen。 一,Autogen簡介 官網:https://microsoft.github.io/aut…

前端頁面操作防抖函數封裝及應用

1、使用背景 函數防抖其實是作為一名前端同學必備的技能了,之前一直偷懶都借用頁面loading或者按鈕loading來實現。最近在開發微信小程序,過多的loading會帶來不好的體驗,同時在跳轉頁面的時候,不好用loading來防抖。所以就會出現…

【Unity】RPG2D龍城紛爭(九)戰斗系統之角色移動

更新日期:2024年7月8日。 項目源碼:第五章發布(正式開始游戲邏輯的章節) 索引 簡介一、角色戰斗狀態二、角色移動1.角色起飛(移動前)2.角色降落(移動后)3.生成移動路徑4.角色移動三、整合簡介 之前的章節做了這么多準備工作,現在終于要進入我們最為核心的戰斗系統的編…

在idea中查看某個接口的所有實現類圖

一、選中某個接口右鍵 ---> Diagrams ---> show Diagrams,然后就會進入一個新的 tab 頁; 二、然后在出來的圖上選中某個接口右鍵 ---> show Implementations,就會顯示選中接口的所有實現類列表; 三、最后 ctrl A 全部選…

Defender Cloud Apps部署方案

目錄 Defender Cloud Apps是什么? Defender Cloud Apps:保護您的云應用程序免受威脅 1. 全面的云應用發現與評估 2. 實時的用戶活動監控 3. 深度的數據保護 4. 合規性管理與報告 5. 統一的安全管理 Defender Cloud Apps主要功能 1. 可見性和洞察 2. 數據保…

uniapp父頁面調用子頁面 組件方法記錄

文章目錄 導文如何點擊父頁面,觸發子頁面函數先寫一個子頁面的基礎內容父元素 如何點擊父頁面,修改子頁面的值先寫一個子頁面的基礎內容父元素 導文 如何點擊父頁面,觸發子頁面函數? 如何點擊父頁面,修改子頁面的值&am…

英區PayPal賬號3分鐘綁定WISE英鎊的銀行收款賬戶

正文開始,我們先登錄英區PayPal賬號后 有很多銀行給我們選擇,但是沒有WISE的選項,所以我們手動輸入“WISE”,然后如下圖所示點擊“Enter Your Bank Detailds”輸入銀行詳細信息按鈕。 然后輸入我們的WISE英鎊賬戶的收款銀行信息&a…

Advanced Electronic Materials:磁性智能皮膚作為人機界面

近年來,電子可穿戴設備的普及率迅速上升,柔性可穿戴設備因其高生物相容性、功能性、適應性和低成本而在人機界面上引起了極大的關注。柔性磁性智能皮膚是這一快速發展的柔性可穿戴電子領域的一部分,為人類感知發展開辟了一條新的道路。磁感是…

SpringCloud第一篇Docker基礎

文章目錄 一、常見命令二、數據卷三、數據掛載四、自定義鏡像五、網絡 一、常見命令 Docker最常見的命令就是操作鏡像、容器的命令,詳見官方文檔: https://docs.docker.com/ 需求: 在DockerHub中搜索Nginx鏡像,查看鏡像的名稱 …

k8s集群如kubeadm init和kube-flannel.yam問題

查看k8s中角色內容kubectl get all (顯示pod和server以及delment) 刪除應用資源選擇刪除先刪除部署查看部署和pod沒了服務還在,但資源和功能以及刪除,刪除服務kubectl delete 服務名(部署名),get pods 獲取默認空間的容…

A133 Android10 root修改

1.前言 客戶應用需求root相關的權限,我們需要修改系統的權限才可以滿足客戶需求 2.修改方法 frameworks層:注釋掉 diff --git a/frameworks/base/core/jni/com_android_internal_os_Zygote.cpp b/frameworks/base/core/jni/com_android_internal_os_…

從資金到未來:技術融資如何重塑IT顧問在AI與網絡安全的角色?

一方面是人工智能 (AI) 和機器學習 (ML) 的雙引擎,另一方面是網絡安全和數據泄露威脅中不斷變化的威脅形勢,IT 格局正在經歷翻天覆地的變化。這場數字革命對 IT 顧問來說既是挑戰也是機遇,但要成…

三級_網絡技術_09_IP地址規劃技術

1.某企業產品部的IP地址塊為211.168.15.192/26,市場部的為211.168.15.160/27,財務部的為211.168.15.128/27,這三個地址塊經聚合后的地址為()。 211.168.15.0/25 211.168.15.0/26 211.168.15.128/25 211.168.15.128/26 2.若某大學分配給計…