环境搭建与模型准备:打好地基才能盖高楼

说实话,做TensorRT-LLM流式推理这件事,我最怕的不是模型调优,而是环境搭建。你想想看,NVIDIA驱动、CUDA、cuDNN、TensorRT,这一套下来,版本稍微对不上,后面全是坑。我刚开始接触这个领域时,就吃过这个亏——花了两天时间排查,最后发现是CUDA版本和驱动不匹配。嗯,咱们今天就把这事彻底说清楚。

1. NVIDIA驱动:一切的基础

驱动是GPU和系统之间的桥梁。没有它,后面什么都跑不起来。我个人习惯用nvidia-smi来检查驱动状态。你可以在终端输入:

nvidia-smi

如果能看到GPU信息,说明驱动已经装好了。如果没有,那就得去NVIDIA官网下载对应型号的驱动。这里有个小技巧:驱动版本不是越新越好。我建议你查一下TensorRT-LLM官方文档里推荐的驱动版本,跟着走最稳。

注意:我曾经遇到过驱动版本太高,导致CUDA工具链不兼容的情况。后来我学乖了,每次装驱动前都会先确认CUDA版本要求。

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
小提示:我个人习惯把CUDA版本号写在路径里,比如/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
核心要点:TensorRT-LLM需要TensorRT 8.6及以上版本。我建议直接用最新稳定版,避免踩坑。

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. 知识体系总览

为了让你更直观地理解这一整套流程,我画了一张图:

TensorRT-LLM 环境搭建与模型准备流程 第1层:硬件与驱动 NVIDIA GPU → 安装NVIDIA驱动 → 验证 nvidia-smi 第2层:CUDA 安装CUDA Toolkit → 配置环境变量 → 验证 nvcc --version 第3层:cuDNN 下载对应CUDA版本的cuDNN → 解压到CUDA目录 → 验证版本 第4层:TensorRT 安装TensorRT → 配置LD_LIBRARY_PATH → 验证 trtexec --version 第5层:模型准备 下载LLaMA/ChatGLM → 转换为TensorRT-LLM格式 → 验证推理

这张图清晰地展示了从硬件到模型的完整链路。每一层都依赖下一层,所以搭建时一定要按顺序来。我见过不少新手跳过驱动直接装CUDA,结果各种报错。

8. 避坑指南

最后,分享几个我踩过的坑:

  • 版本匹配:驱动、CUDA、cuDNN、TensorRT的版本必须匹配。我建议用TensorRT-LLM官方文档里推荐的版本组合。
  • 磁盘空间:模型文件很大,7B模型大概13GB,13B模型25GB。确保/tmp和模型目录有足够空间。
  • Python环境:我习惯用conda创建独立环境,避免包冲突。比如conda create -n trtllm python=3.10
  • 权限问题:安装驱动和CUDA时需要sudo权限。但模型转换和推理建议用普通用户,避免权限混乱。
总结一下:环境搭建是TensorRT-LLM的第一步,也是最容易出问题的一步。按顺序来、版本匹配、多验证,基本不会有大问题。模型转换时注意数据类型和路径,跑通一个简单推理就算成功了。

好了,这一章就到这里。环境搭好了,下一章咱们就可以开始真正的流式推理实战了。

专注资料整理