准备工作
- 一张英伟达显卡,8GB以上显存,30系/40系新卡。
- 安装了英伟达显卡驱动,版本大于等于530。
- 安装了cuda,这里推荐12.1(主要跟着pytorch需要的cuda版本走,并且trt-llm需要cuda>=12)官网链接,下载后双击安装即可,安装位置默认即可。
- 安装cudnn,一般来说选最新的就可以了,这里我选择8.9.7,官网链接,这里需要登录才能下载。将cudnn的压缩包解压,找到cuda的安装目录,比如我的cuda12.1是安装在
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1
目录,然后你将cudnn里面的对应目录的文件复制到对应文件夹即可。下面是一个简单的例子:
- 将
cudnn-windows-x86_64-8.9.7.29_cuda12-archive\bin
目录下面的dll文件,复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\bin
目录下面 - 将
cudnn-windows-x86_64-8.9.7.29_cuda12-archive\include
目录下面的.h文件,复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\include
目录下面 - 将
cudnn-windows-x86_64-8.9.7.29_cuda12-archive\lib\x64
目录下面的.lib文件,复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\lib\x64
目录下面
- 安装anaconda,清华镜像站下载地址
- 安装MPI Windows库,mpi4py依赖它运行,没有会报错。官网链接,下载安装
msmpisetup.exe
即可。
正式开始
- 创建一个叫trt-llm的虚拟环境,python版本3.10.12(因为官方docker里面的python版本是这个版本,这里保持一致)
conda create -n trt_llm python==3.10.12
conda activate trt_llm
- 安装TensorRT-LLM,目前最新版是0.7.1,这里先推荐安装0.7.0(因为最新trtion是对应0.7.0的,所以我这里暂时还是用0.7.0),安装时候会自动将pytorch也安装上去,所以这里需要将pytorch的pypi源加上。
pip install tensorrt_llm==0.7.0 --extra-index-url https://pypi.nvidia.com --extra-index-url https://download.pytorch.org/whl/cu121
- 运行该命令会自动从Nvidia官网下载并安装TensorRT,这个过程需要
比较好的网络
,请耐心等待。
- 顺手测试一下pytorch的cuda是否可用,运行下面的命令,输出为
True
则说明Ok
python -c "import torch; print(torch.cuda.is_available())"
- 再测试一下TensorRT-LLM是否ok
python -c "import tensorrt_llm; print(tensorrt_llm.__version__)"
[01/04/2024-14:32:30] [TRT-LLM] [W] A required package 'psutil' is not installed. Will not monitor the device memory usages. Please install the package first, e.g, 'pip install pynvml>=11.5.0'.
0.7.0
- 然后,我们来测试一下TensorRT-LLM对Qwen进行加速,使用我之前的项目:https://github.com/Tlntin/Qwen-TensorRT-LLM,测试结果输出正常,下面给出一个简单示例,完整说明请看项目Readme
# 克隆项目
git clone https://github.com/Tlntin/Qwen-TensorRT-LLM.git
# 进入qwen目录
cd examples\qwen
# 复制huggingface的qwen权重过来(比如1.8b的权重https://huggingface.co/Qwen/Qwen-1_8B-Chat),重命名为qwen_7b_chat
# 安装依赖
pip install -r requirements.txt
# 编译fp16 Engine
python3 build.py --remove_input_padding --enable_context_fmha
# 试运行
python3 run.py
# 运行终端chat
python3 cli_chat.py
# 运行api
python3 api.py
# 再开一个终端运行web_demo.py(此demo依赖上面的api.py)
# 然后访问:http://localhost:7860/
python3 web_demo.py
- 运行run.py的时候其实遇到了一个小坑,就是第6行的
import tensorrt as trt
会导致windows找不到pytorch,正好这一行没用上,所以我就注释掉了。
- 最后,顺手测试一下windows下,huggingface原版和trt-llm版的吞吐差别吧,暂时都只测试batch_size=1的差异。
- 选择模型为Qwen-1_8B-Chat
- 限制最大输入6k,最大输出2k
- TRT-LLM那边使用smooth quant做量化
- 测量模型吞吐速度和生成速度。需要下载ShareGPT_V3_unfiltered_cleaned_split.json这个文件。
- 可以通过wget/浏览器直接下载,下载链接
- 测量huggingface模型
python3 benchmark.py --backend=hf --dataset=ShareGPT_V3_unfiltered_cleaned_split.json --hf_max_batch_size=1
python3 benchmark.py --backend=trt_llm --dataset=ShareGPT_V3_unfiltered_cleaned_split.json --trt_max_batch_size=1
# hf(bf16原版)
Throughput: 0.18 requests/s, 93.45 tokens/s
# trt-llm(int8 smooth quant)
Throughput: 1.35 requests/s, 719.49 tokens/s