在优云智算 | Compshare上编译TensorRT-LLM(v0.16.0)
准备工作
观察一下现有TensorRT-LLM容器中的系统配置。
截止2025年1月13日,最新版TensorRT-LLM版本是v0.16.0
通过观察该文件
ARG BASE_IMAGE = nvcr.io/nvidia/pytorch
ARG BASE_TAG = 24.11 -py3
可以看出目前基础容器是nvcr.io/nvidia/pytorch:24.11-py3
再去官网看看这个容器里面的详细信息,官网
下面是24.11-py3对应的系统组件版本
| 组件 | 版本 |
| ----------- | ----------- |
| Container OS | Ubuntu 24.04 |
| CUDA | NVIDIA CUDA 12.6.3 |
| cuDNN | 9.5.1.17 |
| Python | 3.10 |
TensorRT在编译的时候会另外安装,根据下面这个文件 ,可以看出TensorRT版本需要的是10.7.0.23
在优云智算 | Compshare选择合适的显卡和镜像
需要选择支持cuda12.6的显卡(这个一般由英伟达驱动决定,太老的驱动不支持太高的cuda),或者直接用CPU也可以编译,省钱。
需要选择系统为ubuntu 24.04的镜像
最好python也是3.10
由于平台镜像目前没有显示系统具体信息,我随便选了一个Cuda12.4的镜像,登录后发现系统就是Ubuntu 24.04,且Python是3.10
$ cat /etc/os-release
PRETTY_NAME = Ubuntu 24.04 .1 LTS
NAME = Ubuntu
VERSION_ID = 24.04
VERSION = 24.04 .1 LTS ( Noble Numbat)
VERSION_CODENAME = noble
ID = ubuntu
ID_LIKE = debian
HOME_URL = https://www.ubuntu.com/
SUPPORT_URL = https://help.ubuntu.com/
BUG_REPORT_URL = https://bugs.launchpad.net/ubuntu/
PRIVACY_POLICY_URL = https://www.ubuntu.com/legal/terms-and-policies/privacy-policy
UBUNTU_CODENAME = noble
LOGO = ubuntu-logo
$ python3 --version
Python 3.10 .15
$ nvcc -V
nvcv : NVIDIA( R) cuda compiler driver
copyright ( c) 2005 -2024 NVIDIA corporation
Built on Tue Feb 27 16 :19:38_PST_2024
cuda compilation tools, release 12.4 ,V12.4.99
Build cuda 12.4 .r12.4/compiler.33961263_0
安装cuda环境
下载cuda 12.6.3
wget https://developer.download.nvidia.com/compute/cuda/12.6.3/local_installers/cuda_12.6.3_560.35.05_linux.run
给予可执行权限
chmod +x cuda_12.6.3_560.35.05_linux.run
正式执行
./cuda_12.6.3_560.35.05_linux.run
输入accept
,然后回车
按空格勾选或者取消勾选和上下方向键上下移动,只勾选CUDA Toolkit 12.2
,其他均取消勾选,然后选中Install
即可。
┌──────────────────────────────────────────────────────────────────────────────┐
│ CUDA Installer │
│ - [ ] Driver │
│ [ ] 560.35 .05 │
│ + [ X] CUDA Toolkit 12.6 │
│ [ X] CUDA Demo Suite 12.6 │
│ [ X] CUDA Documentation 12.6 │
│ - [ ] Kernel Objects │
│ [ ] nvidia-fs │
│ Options │
│ Install │
│
输入Yes
确定。
再次确认cuda版本,看输出已经是cuda 12.6了
$nvcc -V
nvcc: NVIDIA ( R) Cuda compiler driver
Copyright ( c) 2005 -2024 NVIDIA Corporation
Built on Tue_Oct_29_23:50:19_PDT_2024
Cuda compilation tools, release 12.6 , V12.6.85
Build cuda_12.6.r12.6/compiler.35059454_0
删除安装包(可选)
rm cuda_12.6.3_560.35.05_linux.run
删除已存在的cuda 12.4(可选)
rm -rf /usr/local/cuda-12.4
安装cudnn+TensorRT
下载cudnn+nccl+cublas+tensorrt安装脚本
wget https://raw.githubusercontent.com/NVIDIA/TensorRT-LLM/refs/tags/v0.16.0/docker/common/install_tensorrt.sh
(可选)修改这个文件,下载TensorRT的时候增加进度条显示。
wget --no-verbose ${RELEASE_URL_TRT} -O /tmp/TensorRT.tar
wget ${RELEASE_URL_TRT} -O /tmp/TensorRT.tar
给予权限
chmod +x ./install_tensorrt.sh
执行脚本(中间可能会提示./install_tensorrt.sh: line 109: : No such file or directory
,没啥影响,后面补齐就行)
./install_tensorrt.sh
配置ldconfig,然后lib可以被系统找到
echo /usr/local/tensorrt/lib > /etc/ld.so.conf.d/tensorrt.conf
确定tensorrt版本是10.7.0
ldconfig -v | grep nvinfer
libnvinfer_vc_plugin.so.9 -> libnvinfer_vc_plugin.so.9.2.0
libnvinfer_dispatch.so.9 -> libnvinfer_dispatch.so.9.2.0
libnvinfer.so.9 -> libnvinfer.so.9.2.0
libnvinfer_plugin.so.9 -> libnvinfer_plugin.so.9.2.0
libnvinfer_lean.so.9 -> libnvinfer_lean.so.9.2.0
设置环境
echo export LD_LIBRARY_PATH = $LD_LIBRARY_PATH :/usr/local/tensorrt/lib:/usr/local/cuda/lib64/ >> /etc/profile
echo export LD_LIBRARY_PATH = $LD_LIBRARY_PATH :/usr/local/tensorrt/lib:/usr/local/cuda/lib64/ >> ~/.bashrc
source /etc/profile
source ~/.bashrc
echo ${LD_LIBRARY_PATH}
验证cudnn版本
$ldconfig -v | grep cudnn
libcudnn_heuristic.so.9 -> libcudnn_heuristic.so.9.5.1
libcudnn_graph.so.9 -> libcudnn_graph.so.9.5.1
libcudnn_engines_precompiled.so.9 -> libcudnn_engines_precompiled.so.9.5.1
libcudnn.so.9 -> libcudnn.so.9.5.1
libcudnn_ops.so.9 -> libcudnn_ops.so.9.5.1
libcudnn_cnn.so.9 -> libcudnn_cnn.so.9.5.1
libcudnn_adv.so.9 -> libcudnn_adv.so.9.5.1
安装并测试mpi4py
conda install mpi4py openmpi
$python3
Python 3.10 .15 ( main, Oct 3 2024 , 07:27:34) [ GCC 11.2 .0] on linux
Type help, copyright, credits or license for more information
>> > from mpi4py import MPI
>> > MPI.COMM_WORLD.Get_rank( )
0
>> > MPI.COMM_WORLD.Get_size( )
1
>> > exit( )
编译TensorRT-LLM
安装基础依赖
apt update
apt install -y --no-install-recommends ccache wget gdb git-lfs libffi-dev libopenmpi-dev screen
清理apt安装残留
apt-get clean
rm -rf /var/lib/apt/lists/*
下载TensorRT-LLM源码(下载不了则本机下载好再上传咯),目前v0.16.0
为最新稳定分支
git clone https://github.com/NVIDIA/TensorRT-LLM.git -b v0.16.0
git clone https://ghproxy.net/https://github.com/NVIDIA/TensorRT-LLM.git -b -b v0.16.0
进入项目路径
cd TensorRT-LLM
拉取子项目
git submodule update --init --recursive
手动拉取lfs大文件
git lfs install && git lfs pull
进入docker/common目录
cd docker/common/
安装polygraphy 和 cmake
chmod +x install_polygraphy.sh
chmod +x install_cmake.sh
./install_polygraphy.sh
./install_cmake.sh
echo export PATH = $PATH :/usr/local/cmake/bin >> /etc/profile
echo export PATH = $PATH :/usr/local/cmake/bin >> ~/.bashrc
source /etc/profile
source ~/.bashrc
cmake --version
返回项目根目录。
cd -
一键编译whl文件,大概需要3个小时左右
screen -S build
export BUILD_WHEEL_ARGS = --clean --trt_root /usr/local/tensorrt --python_bindings --benchmarks
python3 scripts/build_wheel.py ${BUILD_WHEEL_ARGS}
安装whl文件
cd build
pip install tensorrt_llm-0.16.0-cp310-cp310-linux_x86_64.whl
安装后清理一下cache。
rm ~/.cache/ -rf
测试安装后tensorrt-llm版本
pip list | grep tensorrt
tensorrt 10.7 .0
tensorrt_llm 0.16 .0
测试tensorrt-llm
python3 -c import tensorrt_llm; print( tensorrt_llm.__path__)
[ TensorRT-LLM] TensorRT-LLM version: 0.16 .0
[ /root/miniconda3/lib/python3.10/site-packages/tensorrt_llm]
测试TensorRT-LLM是否可用
测试tensorrt-llm中的attention,观察tensort-llm可否正常使用(这个操作可能需要显卡)
cd /root/TensorRT-LLM/tests/attention
pip install parameterized
python3 test_bert_attention.py
返回下面这个说明成功了,大概需要1分钟就能测试完成,请耐心等待。
.. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
----------------------------------------------------------------------
Ran 49 tests in 53 .018s
OK
最后,将其保存为镜像,镜像名称随意。(目前容器必须开机才能保存为镜像,而且保存为镜像的时间非常长,且保存镜像时无法做任何操作,建议保存后手动关闭实例)