Ubuntu20.04安装CUDA、cuDNN、onnxruntime、TensorRT

描述——名词解释

CUDA:
显卡厂商NVIDIA推出的运算平台,是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。 开发人员可以使用C语言来为CUDA架构编写程序,所编写出的程序可以在支持CUDA的处理器上以超高性能运行。(百度百科)
NVDIA开发出的,可以用于GPU计算的一个工具(我)

cuDNN:用于深度神经网络的GPU加速库

onnxruntime:微软推出的一款推理框架

TensorRT:用于高效实现已训练好的深度学习模型的推理过程的SDK

安装过程

只写三句话

这篇文章记录Ubuntu20.04系统安装CUDA、cuDNN、onnxruntime、TensorRT
版本一定要对应起来
装完要重启!

成功之后

我将它们都装在了/usr/local/下,最后在该目录下得到了安装后的三个目录

cuda
cuda-11.2
TensorRT-8.0.0.3

一、安装CUDA

官网安装参考:https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html
在官网安装参考中,有一些命令,用来确认你当前电脑的系统及GPU状态是否可以安装CUDA。如果是第一次安装CUDA,可以按照官网或者一些博客的提示,输入一些简单的查询命令来确定,这里不多说

CUDA以前版本的下载页面:https://developer.nvidia.com/cuda-toolkit-archive
我选择的是11.2.2版本,点击对应的版本会进入指定版本的下载页面,按照如下的配置进行选择
在这里插入图片描述

官网已经给出了下载和安装命令,依次执行它们

wget https://developer.download.nvidia.com/compute/cuda/11.2.2/local_installers/cuda_11.2.2_460.32.03_linux.runsudo 
sudo sh cuda_11.2.2_460.32.03_linux.run

在之后的安装指示中,第一次选择“continue”(图片里选中的是Abort,只是示意)
在这里插入图片描述
第二次输入“accept”
在这里插入图片描述

第三次移动到“Driver”,按下空格,以取消安装驱动(即使没装CUDA前,你的电脑之前也是有GPU驱动的,不需要再装)。再点击“Install”
在这里插入图片描述接下来就会自动安装了

安装完成后,添加路径

gedit ~/.bashrc

文件最后增加路径

export PATH=$PATH:/usr/local/cuda-11.2/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.2/lib
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda-11.2/lib64

路径生效

source ~/.bashrc

安装成功

nvcc -V

成功会显示CUDA版本

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Sun_Feb_14_21:12:58_PST_2021
Cuda compilation tools, release 11.2, V11.2.152
Build cuda_11.2.r11.2/compiler.29618528_0

CUDA错误1

在我运行一个以CUDA为核心的代码时,报了如下错误

/home/chen/anaconda3/envs/chen/lib/python3.9/site-packages/onnxruntime/capi/onnxruntime_inference_collection.py:53: UserWarning: Specified provider 'TensorrtExecutionProvider' is not in available provider names.Available providers: 'CUDAExecutionProvider, CPUExecutionProvider'
  warnings.warn("Specified provider '{}' is not in available provider names."
Traceback (most recent call last):
  File "/home/chen/CodeBase/yhseg_onnxrun/src/demo_onnx.py", line 160, in <module>
    demo(opt)
  File "/home/chen/CodeBase/yhseg_onnxrun/src/demo_onnx.py", line 41, in demo
    sess = rt.InferenceSession("./models/chen.onnx",
  File "/home/chen/anaconda3/envs/chen/lib/python3.9/site-packages/onnxruntime/capi/onnxruntime_inference_collection.py", line 283, in __init__
    self._create_inference_session(providers, provider_options, disabled_optimizers)
  File "/home/chen/anaconda3/envs/chen/lib/python3.9/site-packages/onnxruntime/capi/onnxruntime_inference_collection.py", line 321, in _create_inference_session
    sess.initialize_session(providers, provider_options, disabled_optimizers)
RuntimeError: /onnxruntime_src/onnxruntime/core/providers/cuda/cuda_call.cc:121 bool onnxruntime::CudaCall(ERRTYPE, const char*, const char*, ERRTYPE, const char*) [with ERRTYPE = cudaError; bool THRW = true] /onnxruntime_src/onnxruntime/core/providers/cuda/cuda_call.cc:115 bool onnxruntime::CudaCall(ERRTYPE, const char*, const char*, ERRTYPE, const char*) [with ERRTYPE = cudaError; bool THRW = true] CUDA failure 999: unknown error ; GPU=2045003264 ; hostname=chen ; expr=cudaSetDevice(info_.device_id);

解决方案: 装完要重启!

CUDA错误2

会有一些包的缺失,很简单,装上他们即可

ModuleNotFoundError: No module named 'tqdm'
ModuleNotFoundError: No module named 'matplotlib'
ModuleNotFoundError: No module named 'cv2'

安装命令

pip install tqdm
pip install matplotlib
pip install opencv-python

二、安装cuDNN

由于我选择安装的是CUDA11.2,因此我的cuDNN的版本要对应着来

在这里插入图片描述
上图已经说明了下载哪一个版本。点击后,会下载得到一个名为cudnn-11.2-linux-x64-v8.1.0.77.tgz的文件

执行命令把它装在/usr/local/

sudo tar -zxvf cudnn-11.2-linux-x64-v8.1.1.33.tgz -C /usr/local/

解压完毕后,会在/usr/local/路径下得到一个名为cuda的文件夹

安装成功

注意到,对于cuDNN的安装并没有和CUDA发生关联。
我查看了cuDNN安装路径/usr/local/cuda和CUDA安装路径/usr/local/cuda-11.2中,都存在着lib64的库目录,粗略的看了一下文件名近乎相同。一些安装博主将cudnn的库拷贝进了CUDA路径下。我暂时没有这样做,也没有深入分析二者库的区别。埋个坑,以后出问题再说把。

cat /usr/local/cuda/include/cudnn_version

显示出了cuDNN的版本为8.1.0

#define CUDNN_MAJOR 8
#define CUDNN_MINOR 1
#define CUDNN_PATCHLEVEL 0
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)

#endif /* CUDNN_VERSION_H */

三、安装onnxruntime

ONNXRuntime是微软推出的一款推理框架,用户可以非常便利的用其运行一个onnx模型。

onnxruntime的安装很简单,会涉及到与CUDA、cuDNN的版本对应问题
官网给出的版本对应:https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html
安装时应该会自动下载正确的版本

安装命令:

pip install onnxruntime-gpu

确认是否安装成功,执行python命令

python

依次输入语句,会有如下输出

Python 3.9.12 (main, Apr  5 2022, 06:56:58) 
[GCC 7.5.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import onnxruntime
>>> onnxruntime.get_device()
'GPU'
>>> onnxruntime.get_available_providers()
['CUDAExecutionProvider', 'CPUExecutionProvider']

四、安装TensorRT

TensorRT下载网址https://developer.nvidia.com/nvidia-tensorrt-8x-download

我的CUDA版本是11.2,因此我要选择TensorRT8.0版本。在网页中找到对应版本
“TensorRT 8.0 EA for Linux and CUDA 11.1, 11.2 & 11.3”
点击第一个“TensorRT 8.0 EA for Linux x86_64 and CUDA 11.1, 11.2 & 11.3 TAR package”
这样会下载tar压缩包格式的安装包,名字叫TensorRT-8.0.0.3.Linux.x86_64-gnu.cuda-11.3.cudnn8.2.tar.gz

安装

我把TensorRT安装在了/usr/local

cd ~/Downloads
sudo tar -xzvf TensorRT-8.0.0.3.Linux.x86_64-gnu.cuda-11.3.cudnn8.2.tar.gz -C /usr/local/

配置环境变量

gedit ~/.bashrc

.bashrc文件最后一行增加路径

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/TensorRT-8.0.0.3/lib

配置生效

source ~/.bashrc

编译TensorRT的示例,会在bin路径下生成一个针对MINIST数据集的sample_mnist可执行文件

cd /usr/local/TensorRT-8.0.0.3/samples/sampleMNIST
sudo make
cd ../../bin/
./sample_mnist

成功运行的提示

&&&& RUNNING TensorRT.sample_mnist [TensorRT v8000] # ./sample_mnist
[10/14/2022-17:01:44] [I] Building and running a GPU inference engine for MNIST
[10/14/2022-17:01:44] [I] [TRT] [MemUsageChange] Init CUDA: CPU +146, GPU +0, now: CPU 151, GPU 407 (MiB)
[10/14/2022-17:01:44] [I] [TRT] [MemUsageSnapshot] Builder begin: CPU 153 MiB, GPU 407 MiB
[10/14/2022-17:01:45] [W] [TRT] TensorRT was linked against cuBLAS/cuBLAS LT 11.4.2 but loaded cuBLAS/cuBLAS LT 11.4.1
[10/14/2022-17:01:45] [I] [TRT] [MemUsageChange] Init cuBLAS/cuBLASLt: CPU +182, GPU +76, now: CPU 335, GPU 483 (MiB)
[10/14/2022-17:01:45] [I] [TRT] [MemUsageChange] Init cuDNN: CPU +128, GPU +80, now: CPU 463, GPU 563 (MiB)
[10/14/2022-17:01:45] [W] [TRT] TensorRT was linked against cuDNN 8.2.0 but loaded cuDNN 8.1.0
[10/14/2022-17:01:45] [W] [TRT] Detected invalid timing cache, setup a local cache instead
[10/14/2022-17:01:50] [I] [TRT] Some tactics do not have sufficient workspace memory to run. Increasing workspace size may increase performance, please check verbose output.
[10/14/2022-17:01:50] [I] [TRT] Detected 1 inputs and 1 output network tensors.
[10/14/2022-17:01:50] [I] [TRT] Total Host Persistent Memory: 5440
[10/14/2022-17:01:50] [I] [TRT] Total Device Persistent Memory: 0
[10/14/2022-17:01:50] [I] [TRT] Total Scratch Memory: 0
[10/14/2022-17:01:50] [I] [TRT] [MemUsageStats] Peak memory usage of TRT CPU/GPU memory allocators: CPU 1 MiB, GPU 4 MiB
[10/14/2022-17:01:50] [W] [TRT] TensorRT was linked against cuBLAS/cuBLAS LT 11.4.2 but loaded cuBLAS/cuBLAS LT 11.4.1
[10/14/2022-17:01:50] [I] [TRT] [MemUsageChange] Init cuBLAS/cuBLASLt: CPU +0, GPU +8, now: CPU 619, GPU 629 (MiB)
[10/14/2022-17:01:50] [I] [TRT] [MemUsageChange] Init cuDNN: CPU +0, GPU +8, now: CPU 619, GPU 637 (MiB)
[10/14/2022-17:01:50] [W] [TRT] TensorRT was linked against cuDNN 8.2.0 but loaded cuDNN 8.1.0
[10/14/2022-17:01:50] [I] [TRT] [MemUsageChange] Init cuBLAS/cuBLASLt: CPU +0, GPU +0, now: CPU 619, GPU 621 (MiB)
[10/14/2022-17:01:50] [I] [TRT] [MemUsageChange] Init cuBLAS/cuBLASLt: CPU +0, GPU +0, now: CPU 619, GPU 605 (MiB)
[10/14/2022-17:01:50] [I] [TRT] [MemUsageSnapshot] Builder end: CPU 619 MiB, GPU 605 MiB
[10/14/2022-17:01:50] [W] [TRT] TensorRT was linked against cuBLAS/cuBLAS LT 11.4.2 but loaded cuBLAS/cuBLAS LT 11.4.1
[10/14/2022-17:01:50] [I] [TRT] [MemUsageChange] Init cuBLAS/cuBLASLt: CPU +0, GPU +8, now: CPU 617, GPU 613 (MiB)
[10/14/2022-17:01:50] [I] [TRT] [MemUsageChange] Init cuDNN: CPU +0, GPU +8, now: CPU 617, GPU 621 (MiB)
[10/14/2022-17:01:50] [W] [TRT] TensorRT was linked against cuDNN 8.2.0 but loaded cuDNN 8.1.0
[10/14/2022-17:01:50] [I] Input:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@%.:@@@@@@@@@@@@
@@@@@@@@@@@@@: *@@@@@@@@@@@@
@@@@@@@@@@@@* =@@@@@@@@@@@@@
@@@@@@@@@@@% :@@@@@@@@@@@@@@
@@@@@@@@@@@- *@@@@@@@@@@@@@@
@@@@@@@@@@# .@@@@@@@@@@@@@@@
@@@@@@@@@@: #@@@@@@@@@@@@@@@
@@@@@@@@@+ -@@@@@@@@@@@@@@@@
@@@@@@@@@: %@@@@@@@@@@@@@@@@
@@@@@@@@+ +@@@@@@@@@@@@@@@@@
@@@@@@@@:.%@@@@@@@@@@@@@@@@@
@@@@@@@% -@@@@@@@@@@@@@@@@@@
@@@@@@@% -@@@@@@#..:@@@@@@@@
@@@@@@@% +@@@@@-    :@@@@@@@
@@@@@@@% =@@@@%.#@@- +@@@@@@
@@@@@@@@..%@@@*+@@@@ :@@@@@@
@@@@@@@@= -%@@@@@@@@ :@@@@@@
@@@@@@@@@- .*@@@@@@+ +@@@@@@
@@@@@@@@@@+  .:-+-: .@@@@@@@
@@@@@@@@@@@@+:    :*@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@

[10/14/2022-17:01:50] [I] Output:
0: 
1: 
2: 
3: 
4: 
5: 
6: **********
7: 
8: 
9: 

[10/14/2022-17:01:50] [I] [TRT] [MemUsageChange] Init cuBLAS/cuBLASLt: CPU +0, GPU +0, now: CPU 617, GPU 605 (MiB)
&&&& PASSED TensorRT.sample_mnist [TensorRT v8000] # ./sample_mnist

执行到以上步骤后,我发现python命令并不能加载tensorrt,因此需要继续安装TensorRT

安装TensorRT

cd TensorRT-8.0.0.3/python/

根据自己环境安装,python是哪个版本cp后跟什么数。比如:

pip3 install tensorrt-8.0.0.3-cp37-none-linux_x86_64.whl # python3.7 --> cp37
或者
pip install tensorrt-8.0.0.3-cp27-none-linux_x86_64.whl # python2.7 --> cp27

安装uff

cd ../uff/
pip3 install uff-0.6.5-py2.py3-none-any.whl

安装graphsurgeon

cd ../graphsurgeon/
pip3 install graphsurgeon-0.4.1-py2.py3-none-any.whl

复制tensorrt库

cd ..
cp -r lib/* /usr/lib
cp -r include/* /usr/include

测试
没有报错说明安装成功:

python3
>>> import tensorrt
>>> import uff

TensorRT错误1

运行可执行文件时,我使用的是命令sudo ./sample_mnist,结果报错,提示错误

./sample_mnist: error while loading shared libraries: libnvinfer.so.8: cannot open shared object file: No such file or directory

脑残错误,不应该使用sudo,应该改成如下命令才对

./sample_mnist

TensorRT错误2

&&&& RUNNING TensorRT.sample_mnist [TensorRT v8000] # ./sample_mnist
[10/14/2022-15:44:05] [I] Building and running a GPU inference engine for MNIST
[10/14/2022-15:44:05] [W] [TRT] Unable to determine GPU memory usage
[10/14/2022-15:44:05] [W] [TRT] Unable to determine GPU memory usage
[10/14/2022-15:44:05] [I] [TRT] [MemUsageChange] Init CUDA: CPU +1, GPU +0, now: CPU 6, GPU 0 (MiB)
[10/14/2022-15:44:05] [F] [TRT] [runtime.cpp::isCudaInstalledCorrectly::39] Error Code 6: Internal Error (CUDA initialization failure with error 999. Please check your CUDA installation:  http://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html)
&&&& FAILED TensorRT.sample_mnist [TensorRT v8000] # ./sample_mnist

解决方案: 装完要重启!

总结

最大的坑就是,自信的我一直在试图解决配置问题,忘了NVIDIA驱动需要电脑重启一下。

  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值