使用trtllm部署流行的llama3模型
关于tensorrt-llm
TensorRT-LLM是由NVIDIA提供的一种优化工具,专门用于在NVIDIA GPU上进行大语言模型(LLM)的推理。它提供了一个易于使用的Python API,可以定义LLM并构建包含最先进优化技术的TensorRT引擎,以高效地执行推理任务 。
以下是TensorRT-LLM的一些关键特性:
高性能推理:利用最新的NVIDIA GPU架构(如Hopper和Ampere)来加速LLM的推理性能 。
量化支持:支持多种数值精度,包括INT4、INT8和FP16,以减少内存占用并提高执行速度 。
模块化设计:提供了类似于PyTorch API的功能模块,如einsum、softmax和matmul,以及用于构建LLM的层模块,例如Attention block和Transformer layer 。
集成与扩展:支持与NVIDIA Triton推理服务器的集成,并包含预定义的流行模型,易于修改和扩展以满足自定义需求 。
TensorRT-LLM旨在作为NVIDIA NeMo框架中的优化骨干,帮助开发、定制和部署生成式AI应用 。
关于使用
我目前觉得最简单的使用方法就是下载nvidia官方的容器,因为他需要很多的c,c++的底层依赖,如果自己安装当然也可以,但是遇到问题的话,linux的环境容易和官方的不一致,遇到很多的麻烦还需要自己去解决,自己去查询资料,这样对于我们这些小白来说不是很方便。所以为了简单起见,还不如直接下载官方的容器。官方的容器有有拥有一模一样的官方的安装的预装包。所以容易成功。增加自己的信心和对于这个工具的使用。
容器的下载
安装docker,需要按照nvidia的container toolkit安装
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
sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
这样docker就可以使用显卡了。
docker run --rm --runtime=nvidia --gpus all --entrypoint /bin/bash -it nvidia/cuda:12.4.0-devel-ubuntu22.04
apt-get update && apt-get -y install python3.10 python3-pip openmpi-bin libopenmpi-dev git git-lfs
# Install the latest preview version (corresponding to the main branch) of TensorRT-LLM.
# If you want to install the stable version (corresponding to the release branch), please
# remove the `--pre` option.
pip3 install tensorrt_llm -U --pre --extra-index-url https://pypi.nvidia.com
# Check installation
python3 -c "import tensorrt_llm"
那么在这个容器里面已经完全变成了该工具能够正常运行的环境了。
需要注意的是容器的驱动cuda和宿主机上的cuda最好版本一致。以免发生不必要的麻烦。
接下来的操作都是在这个容器里面进行的,因为容器本身也是一个linux。
下载trtllm的github repo
git clone https://github.com/NVIDIA/TensorRT-LLM
cd TensorRT-LLM/examples/llama
要进到哪个目录,这要取决于你要运行哪个模型。因为我要运行的是这个模型llama系列,所以我进到这个目录llama。
下载hf模型
我去https://huggingface.co/shenzhi-wang/Llama3-8B-Chinese-Chat下载了llama3的模型,然后用trtllm的转换脚本转成下面的模型
下载模型的代码是
git lfs install
git clone https://huggingface.co/shenzhi-wang/Llama3-8B-Chinese-Chat
转换代码
python3 convert_checkpoint.py --model_dir ./Llama3-8B-Chinese-Chat --output_dir llama-3-8b-ckpt
再把下载的模型编译成tensorrt-llm的engine
trtllm-build --checkpoint_dir llama-3-8b-ckpt
–gemm_plugin float16
–output_dir ./llama-3-8b-engine
然后运行tensorrt-llm的engine
python3 …/run.py --engine_dir ./llama-3-8b-engine --max_output_len 100 --tokenizer_dir ./Llama3-8B-Chinese-Chat --input_text “鲁迅打了周树人”
得到了结果是
总结
我觉得模型的性能很满意,版本是0.11.0.dev2024062500
其实本身来说这个工具已经做的相当好了,因为不同的模型与不同的运行方法我建议应该该工具要佩戴一个网页的界面,然后让用户很容易很方便的操作。但是后来我觉得这个工作应该是我们这种小白的。使用者来使用的时候,为了自己的方便去开发一个这样子的网页。来增加它的应用性,根本不需要把这个次要的功能添加到本来的代码仓库。增加代码仓库对于这种次要功能的维护精力。所以我觉得以后我要是有时间的话,我会自己去开发一个这样的应用性的界面。来帮助大家更好的操作各种模型的转换以及运行。其实本身的这个仓库的Python代码已经做的非常好了。