如果要使用tensorRT进行推理加速的话,cuda,cudnn之类的库是必不可少的。整个安装流程花了我将近一天的时间。先将整个流程给出:
- GPU驱动安装
- cuda(C++)
- 注册一个nvidia的账户
- cudnn(C++)
- tensorRT(C++)
- mnist验证tensorRT
- tensorrt(python)
- pycuda(python)
- 验证pycuda
了解系统信息
在安装之前,我们需要了解系统的版本,驱动的版本。
# cuda检查
nvcc -V # 检查是否已经安装了cuda
# 系统版本查看
cat /etc/redhat-release # 查看centos的系统版本
cat /proc/version # 查看ubuntu的系统版本
# 检查驱动版本和对应最高可安装cuda版本
nvidia-smi
# 如果找不到该命令,则需要安装gpu驱动,但是没关系
# 在安装cuda的时候,可以选择一起安装GPU 驱动
CUDA安装
根据之前得到的驱动版本,系统选择自己要安装的cuda版本。
进入cuda工具箱,选择版本。获得安装命令。
wget https://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run
sudo sh cuda_10.2.89_440.33.01_linux.run
因为我的是centos系统,选择的以run file形式安装,所以生成了上面的命令。
接着运行命令按照步骤安装就行了。
vim ~/.bashrc # 配置系统环境:打开系统环境配置文件
# 将cuda的头文件和库文件路径加入系统环境
export PATH=/usr/local/cuda-10.1/bin:$PATH
export CPATH=/usr/local/cuda-10.1/targets/x86_64-linux/include:$CPATH
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64:$LD_LIBRARY_PATH
source ~/.bashrc # 更新配置
nvcc -V # 检查安装是否成功?
注册NVIDIA账户
去官网注册:https://developer.nvidia.cn
后面的cudnn和tensorRT的安装都要用到
cudnn安装
cudnn的版本,需要根据cuda的版本来决定,我一般选择gz压缩包的形式下载。(下载地址)
下载完之后解压,就会得到3个文件:
include:cudnn的头文件
lib64:cudnn的库文件
只要将它们分别复制到cuda对应的头文件和库文件的文件夹就好了。
TensorRT安装
根据cuda的版本和系统选择对应的TensorRT版本(下载地址)
和cudnn一样,我也是下载的压缩包,然后解压之后生成了一个文件夹。
将cuda的头文件和库文件路径加入系统环境,和之前一样
vim ~/.bashrc
export LD_LIBRARY_PATH=/data/cai_test/TensorRT-6.0.1.5/lib:$LD_LIBRARY_PATH
source ~/.bashrc
正常来说,安装基本完成,但是我们还要验证是否安装成功
TensorRT验证
我们使用mnist来进行验证,tensorRT自带了很多不同的例子。
cd .../TensorRT-6.0.1.5/samples/sampleMNIST/
make # 编译
如果之前cuda,cudnn安装成功,且库链接成功的话,make应该会顺利进行。
但是我出现了找不到库文件的错误
/usr/bin/ld: cannot find -lcudnn
/usr/bin/ld: cannot find -lcublas
/usr/bin/ld: cannot find -lcudart
解决方案:建立symlink,链接过去
sudo ln -s /usr/local/cuda/lib64/libcudart.so /usr/lib/libcudart.so
但是还是没有找到libcublas,原来cuda-10.1之后,就不会将libcublas.so发到cuda的目录下,而是放在别的地方,所以用下面命令来查找这个库文件。然后再链接过去。
find /usr -name libcublas.so*
这样大概就能顺利的编译了。
下载mnist数据集:mnist数据集(下载4个gz格式的压缩包)
根据报错,将/data/generate_pgms.py里过期的fromstring函数替换成frombuffer
运行这个python文件,就是生成几个pgm的文件。
然后回到TensorRT的主目录
bin/sample_mnist # 运行mnist的测试程序
出现这个结果,说明之前安装的cuda,cudnn和tensorRT都安装成功了。
python API的tensorrt安装
这个比较简单:在解压C++的TensorRT的主目录下,有个python文件夹,内部有一些tensorrt不同python版本的whl。
根据当前环境选择合适的whl文件,cp37代表python3.7版本。
pip install tensorrt-6.0.1.5-cp37-none-linux_x86_64.whl
运行上面指令即可完成安装
import一下tensorrt的包就能知道是否安装成功了。
还有一些相关的支持可以查看:TensorRt安装指南
pycuda
怎么确定自己安装的版本:window的pycuda库
上面的链接虽然是window的,但是可以根据自己的python版本和cuda版本,确定pycuda的版本。
例如,通过python3.7和64位系统,还有cuda10.1的版本,就大概可以确定pycuda-2019.1.2这个版本
pip install pycuda==2019.1.2
即可完成pycuda的安装
pycuda的验证
我们需要实际的跑一个简单的程序来验证一下pycuda是否安装成功:
根据这个文章里面的代码。
简单的跑一下,如果没有出错的话,pycuda就安装成功了。
至此,整个环境的配置流程就结束了,可以愉快的进行开发了。
后话
2023/03/03:今天因为要帮公司组装centos测试机,从装系统开始,到环境搭建完成,花了好几天的时间,linux下的安装确实简单方便很多。但是不知道为啥使用yum安装cudnn和tensorrt的rpm文件的时候,虽然显示安装成功了,但是哪里都找不到他们的包,最后还是通过直接下载压缩文件,然后拷贝到对应的头文件和库文件到cuda对应的文件夹下完成的安装。
- 新版tensorrt的测试也简单了很多,不需要手动下载mnist的数据库了,模型也是onnx模型。
- 现在nvidia的中国官网可以直接下载了,速度也比com的快多了,我也将文中的链接换成了cn结尾的。