环境搭建与模型准备:打好地基才能盖高楼
说实话,做TensorRT-LLM流式推理这件事,我最怕的不是模型调优,而是环境搭建。你想想看,NVIDIA驱动、CUDA、cuDNN、TensorRT,这一套下来,版本稍微对不上,后面全是坑。我刚开始接触这个领域时,就吃过这个亏——花了两天时间排查,最后发现是CUDA版本和驱动不匹配。嗯,咱们今天就把这事彻底说清楚。
1. NVIDIA驱动:一切的基础
驱动是GPU和系统之间的桥梁。没有它,后面什么都跑不起来。我个人习惯用nvidia-smi来检查驱动状态。你可以在终端输入:
nvidia-smi
如果能看到GPU信息,说明驱动已经装好了。如果没有,那就得去NVIDIA官网下载对应型号的驱动。这里有个小技巧:驱动版本不是越新越好。我建议你查一下TensorRT-LLM官方文档里推荐的驱动版本,跟着走最稳。
2. CUDA:GPU的编程语言
CUDA是NVIDIA的并行计算平台。说白了,它让咱们能用GPU做通用计算。TensorRT-LLM依赖CUDA来加速矩阵运算和注意力机制。
安装CUDA时,我推荐用runfile方式,而不是deb包。为什么?因为runfile可以让你自由选择安装路径,方便多版本共存。我在项目中经常需要同时维护CUDA 11.8和12.1,runfile方式就特别灵活。
# 下载CUDA 12.1 runfile
wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux.run
sudo sh cuda_12.1.0_530.30.02_linux.run
安装完成后,记得配置环境变量:
export PATH=/usr/local/cuda-12.1/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH
/usr/local/cuda-12.1,这样切换版本时只需要改环境变量就行。
3. cuDNN:深度学习的加速器
cuDNN是NVIDIA专门为深度学习优化的库。它提供了卷积、池化、归一化等操作的GPU加速实现。TensorRT-LLM在推理时会大量调用cuDNN的API。
安装cuDNN其实很简单:下载对应CUDA版本的cuDNN压缩包,然后解压到CUDA目录下就行。
# 假设你下载了cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz
tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda-12.1/include
sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda-12.1/lib64
sudo chmod a+r /usr/local/cuda-12.1/include/cudnn*.h /usr/local/cuda-12.1/lib64/libcudnn*
这里有个坑:cuDNN版本必须和CUDA版本严格对应。我曾经因为cuDNN版本不对,导致TensorRT编译时疯狂报错。后来我学了一招:用cat /usr/local/cuda-12.1/include/cudnn_version.h | grep CUDNN_MAJOR -A 2来确认版本。
4. TensorRT:推理优化的王牌
TensorRT是NVIDIA的推理优化引擎。它能把训练好的模型转换成高度优化的推理引擎。TensorRT-LLM就是在TensorRT基础上专门为LLM打造的。
安装TensorRT时,我建议用tar包方式,这样方便管理。下载地址在NVIDIA官网,记得选对CUDA版本。
# 下载TensorRT 8.6.1
wget https://developer.nvidia.com/compute/machine-learning/tensorrt/secure/8.6.1/tars/TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-12.0.tar.gz
tar -xzvf TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-12.0.tar.gz
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/TensorRT-8.6.1.6/lib
5. 模型下载与转换:从HuggingFace到TensorRT-LLM
环境搭好了,接下来就是准备模型。咱们以LLaMA和ChatGLM为例,走一遍流程。
5.1 下载LLaMA模型
LLaMA模型可以从HuggingFace下载。你需要先申请访问权限,然后使用huggingface_hub库下载。
pip install huggingface_hub
huggingface-cli download meta-llama/Llama-2-7b-chat-hf --local-dir ./llama-2-7b-chat
这里要注意:LLaMA模型比较大,7B版本大概13GB。下载前确保磁盘空间充足。我一般会用df -h先检查一下。
5.2 下载ChatGLM模型
ChatGLM是清华开源的模型,下载方式类似:
huggingface-cli download THUDM/chatglm3-6b --local-dir ./chatglm3-6b
5.3 转换为TensorRT-LLM格式
TensorRT-LLM提供了转换脚本。以LLaMA为例:
# 进入TensorRT-LLM目录
cd TensorRT-LLM/examples/llama
# 转换模型
python convert_checkpoint.py --model_dir ./llama-2-7b-chat \
--output_dir ./tllm_checkpoint \
--dtype float16
转换完成后,你会得到一个tllm_checkpoint目录,里面就是TensorRT-LLM能用的模型文件。
--dtype参数很关键。我一般用float16,既能保证精度,又能节省显存。如果你显存紧张,可以试试int8量化。
6. 验证环境:跑一个简单的推理
环境搭好、模型转换完,咱们得验证一下。TensorRT-LLM提供了run.py脚本,可以直接跑推理:
python run.py --engine_dir ./tllm_checkpoint \
--tokenizer_dir ./llama-2-7b-chat \
--input_text "你好,请介绍一下你自己" \
--max_output_len 100
如果能看到模型输出,恭喜你,环境搭建成功了!
libnvinfer.so.8: cannot open shared object file,说明TensorRT的库路径没配置好。检查一下LD_LIBRARY_PATH是否包含TensorRT的lib目录。
7. 知识体系总览
为了让你更直观地理解这一整套流程,我画了一张图:
这张图清晰地展示了从硬件到模型的完整链路。每一层都依赖下一层,所以搭建时一定要按顺序来。我见过不少新手跳过驱动直接装CUDA,结果各种报错。
8. 避坑指南
最后,分享几个我踩过的坑:
- 版本匹配:驱动、CUDA、cuDNN、TensorRT的版本必须匹配。我建议用TensorRT-LLM官方文档里推荐的版本组合。
- 磁盘空间:模型文件很大,7B模型大概13GB,13B模型25GB。确保
/tmp和模型目录有足够空间。 - Python环境:我习惯用conda创建独立环境,避免包冲突。比如
conda create -n trtllm python=3.10。 - 权限问题:安装驱动和CUDA时需要sudo权限。但模型转换和推理建议用普通用户,避免权限混乱。
好了,这一章就到这里。环境搭好了,下一章咱们就可以开始真正的流式推理实战了。