?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 日暮苍山远,天寒白屋贫。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服务。
官方提供一步创建镜像并安装依赖的脚本,这里为了更加细致化地了解各个环节,选择Step by Step安装,从而让小伙们更加清楚了解整个过程。由于TensorRT-LLM的编译对于CUDA的版本有要求,建议还是遵循以下的安装步骤,基于官方推荐的镜像环境进行编译安装。该环节如遇到问题,欢迎与小编进一步交流。
将官方仓库: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-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-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
运行脚本:
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]:?"你好!我叫通义千问,是阿里云推出的一种超大规模语言模型。我能够回答问题、创作文字,还能表达观点、撰写代码。如果您有任何问题或需要帮助,请随时告诉我,我会尽力提供支持。"
使用官方的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
测试如下:
#?默认的最大长度是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倍的速度。