运行LaserNet前的环境配置

运行LaserNet前的环境配置

  • 环境
  • 1 安装Anaconda
  • 2 新建conda虚拟环境
    • 2.1 确定依赖版本
    • 2.2 创建虚拟环境
  • 3 安装CUDA
    • 3.1 确认驱动是否兼容
    • 3.2 安装
  • 4 安装cuDNN
    • 4.1 理论安装方式
    • 4.2 其他源中检索
    • 4.3 本地安装
    • 4.4 分析conda安装本质
  • 5 安装CUPTI
    • 5.1 面临的问题
    • 5.2 主系统安装CUDA
  • 6 安装waymo-open-dataset工具
  • 7 屏蔽之前安装的CUDA和cuDNN
  • 7 重启
  • 8 验证环境是否安装完成
    • 8.1 检测是否安装
    • 8.2 验证TensorFlow的GPU环境
    • 8.3 验证调用的是codna环境中的so库
  • 9 Anaconda是如何把CUDA的环境添加到系统中的?
    • 9.1 扩展资料
    • 9.2 主系统环境中添加CUDA此类库的方式
  • 10 新显卡的配置
    • 10.1新的版本组合
    • 10.2 一个报错
    • 10.4 CUDA安装
    • 10.4 cuDNN安装
    • 10.5 测试
    • 10.5 waymo-open-dataset

LaserNet是Gregory P. Meyer博士供职于Uber期间,在CVPR2019和CVPRW2019的两篇论文中提出的三维识别神经网络框架,前者是激光雷达三维识别,后者(称为LaserNet++)是图像+激光雷达融合三维识别。作者本人并没有开源代码,但是github上atyshka复现了LaserNet,本文面阐述对象就是这篇复现的代码。

环境

显卡 系统 虚拟环境
RTX2070 Ubuntu 18.04 LTS Anaconda3

如果你的显卡是比较新的显卡如RTX3090,安装流程跟本文档类似,但是具体版本需要更新一下,具体注意事项请先调到最后一部分,再回来看其他安装流程。

1 安装Anaconda

由于运行环境众多,本文采用Anaconda进行环境配置。其安装过程比较简单,网上有很多教程。

2 新建conda虚拟环境

2.1 确定依赖版本

经实际测试,LaserNet需要依赖TensorFlow2.4.0(并不是作者README中写的2.0)才可运行,故查表得依赖库的版本如下表所示,另外这个对应版本官网解释是经过测试的,也就是说这个组合没有问题,但其他组合也不一定不行,但不建议换版本。

版本 Python 版本 编译器 构建工具 cuDNN CUDA
tensorflow-2.4.0 3.6-3.8 GCC 7.3.1 Bazel 3.1.0 8.0 11.0

但是LaserNet使用了waymo-open-dataset,参考waymo官方文档,其只针对python3.7、3.8、3.9进行了编译,故配置一个基于python3.7的虚拟环境不会错。

2.2 创建虚拟环境

$ conda activate base #进入conda base 环境
(base) $ conda create --name tf2.4 python=3.7

1

打印出确认信息,输入“y”继续

Proceed ([y]/n)? y

完成之后你会在{anaconda安装路径}/envs/}看到一个{刚才创立的环境名}
进入刚刚创建的环境

(base) $ conda activate tf2.4

检查是否正确切换环境,若返回的是tf2.4路径下的pip路径说明切换成功。

which pip

检查环境变量是否添加,若未添加请看这里

(tf2.4) $ echo $PATH
/home/.../anaconda3/envs/tf2.4/bin:/home/.../anaconda3/condabin:...

3 安装CUDA

注意TensorFlow自2.0以后就不再区分CPU和GPU版本,但由于我们依然希望使用GPU对程序进行加速,故仍然需要安装CUDA和cuDNN。且若仅使用CPU,程序在运行过程中可能会报错:

...
2022-05-04 16:57:10.295908: I tensorflow/core/platform/profile_utils/cpu_utils.cc:112] CPU Frequency: 2499950000 Hz
已杀死
OMEN:~$ Process ForkPoolWorker-27:
...
...
BrokenPipeError: [Errno 32] Broken pipe
...

3.1 确认驱动是否兼容

本文默认你已经安装好了N卡驱动,运行下面的指令查看驱动信息

nvidia-smi

打印下图信息,选中区域就是当前驱动所能支持CUDA的最高版本
运行LaserNet前的环境配置_第1张图片

3.2 安装

# 安装CUDA
conda install cudatoolkit=11.0 # 指定版本

安装过程可能需要访问国外的服务器,故过程可能比较慢,可以通过改源进行安装,但试了一下不好用,还是使用虚拟专用网络等技术吧。

conda install cudatoolkit=11.0 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/linux-64/

4 安装cuDNN

4.1 理论安装方式

理论上应该使用下面的指令进行安装,但是conda官方库中并没有cuDNN 8.0

# 安装cudnn,如果不指定版本,在安装CUDA之后,会自动匹配对应版本的cudnn安装
(tf2.4) $ conda install cudnn=8.0 #直接安装8.0可能会报错

将会报错:

PackagesNotFoundError: The following packages are not available from current channels:

  - cudnn=8.0

这里和这里两个网址中提供了很多其他源以供参考,这里我们搜索一下conda-forge中cudnn的信息。

(tf2.4) $ conda search cudnn -c conda-forge #列出conda-forge和默认源下cudnn的版本如下所示,此外源还有esri等

4.2 其他源中检索

从下面的打印信息中可以看到有我们需要的cudnn 8.0,但具体是哪一个呢?

# Name                       Version           Build  Channel             
cudnn                          7.0.5       cuda8.0_0  pkgs/main           
cudnn                          7.1.2       cuda9.0_0  pkgs/main           
cudnn                          7.1.3       cuda8.0_0  pkgs/main           
...
...
cudnn                          7.6.5       cuda9.0_0  pkgs/main           
cudnn                          7.6.5       cuda9.2_0  pkgs/main           
cudnn                       7.6.5.32      h01f27c4_0  conda-forge         
cudnn                       7.6.5.32      h01f27c4_1  conda-forge         
...
...
cudnn                       8.0.5.39      h01f27c4_1  conda-forge         
cudnn                       8.0.5.39      ha5ca753_1  conda-forge         
cudnn                       8.0.5.39      hc0a50b0_1  conda-forge         
...
...
cudnn                       8.2.1.32      h86fa8c9_0  conda-forge

查询该源下详细的cudnn信息

(tf2.4) $ conda search cudnn --info -c conda-forge

可以从下面的打印信息中,找到他的依赖有cudatoolkit 11.0|11.0.*,故cudnn 8.0.5.39 ha5ca753_1时我们需要的。我们可以使用下载工具(比如浏览器),通过访问下面提供的url https://conda.anaconda.org/conda-forge/linux-64/cudnn-8.0.5.39-ha5ca753_1.tar.bz2直接下载到本地。

cudnn 8.0.5.39 ha5ca753_1
-------------------------
file name   : cudnn-8.0.5.39-ha5ca753_1.tar.bz2
name        : cudnn
version     : 8.0.5.39
build       : ha5ca753_1
build number: 1
size        : 535.4 MB
license     : cuDNN Software License Agreement
subdir      : linux-64
url         : https://conda.anaconda.org/conda-forge/linux-64/cudnn-8.0.5.39-ha5ca753_1.tar.bz2
md5         : 8a89f290d4175f8f11c5ddba81fd16d6
timestamp   : 2020-12-29 22:33:47 UTC
dependencies: 
  - __glibc >=2.17
  - __glibc >=2.17,<3.0.a0
  - cudatoolkit 11.0|11.0.*
  - libgcc-ng >=3.0
  - libstdcxx-ng >=3.4

4.3 本地安装

然后进行conda本地包安装

conda install --use-local '/home/bit202/桌面/cudnn-8.0.5.39-ha5ca753_1.tar.bz2'

4.4 分析conda安装本质

通过对比cudnn的主系统安装和conda环境安装,发现conda环境中的安装本质就是,将Nvidia官方安装包里面的lib文件夹下的文件复制到conda环境目录下的lib文件夹下,包括如下文件:

libcudnn.so
libcudnn.so.8
libcudnn.so.8.0.5
libcudnn_adv_infer.so
libcudnn_adv_train.so
libcudnn_cnn_infer.so
libcudnn_cnn_train.so
libcudnn_ops_infer.so
libcudnn_ops_train.so
libcudnn_adv_infer.so.8
libcudnn_adv_train.so.8
libcudnn_cnn_infer.so.8
libcudnn_cnn_train.so.8
libcudnn_ops_infer.so.8
libcudnn_ops_train.so.8
libcudnn_adv_infer.so.8.0.5
libcudnn_adv_train.so.8.0.5
libcudnn_cnn_infer.so.8.0.5
libcudnn_cnn_train.so.8.0.5
libcudnn_ops_infer.so.8.0.5
libcudnn_ops_train.so.8.0.5

把安装包include文件夹复制到conda环境目录下的include文件夹中

cudnn.h
cudnn_adv_infer.h
cudnn_adv_train.h
cudnn_backend.h
cudnn_cnn_infer.h
cudnn_cnn_train.h
cudnn_ops_infer.h
cudnn_ops_train.h
cudnn_version.h

并且在conda环境目录下的bin中生成一个.cudnn-post-link.sh文件,或许是用于初始化环境变量,以保证程序可以找到库文件目录。Nvidia官方安装包的info中的文件应该未进行安装,是否有其他配置(如环境变量)没有验证。

故,也可以采用从官网下载压缩包解压复制到对应的路径下完成安装,但对比了一下官网的压缩包内容,其与conda的压缩包的文件有区别,或许这种方法不一定有效,如计划尝试可以参考这里。

5 安装CUPTI

5.1 面临的问题

由于conda安装的cudatoolkit没有CUPTI插件,这和使用官方的安装文件安装效果是不同的,若没有该工具会报错如下信息:

Could not load dynamic library 'libcupti.so.11.0'

可以尝试在codna环境安装cupti,但是运行下面指令检索不到兼容我们之前安装的cudatoolkit11.0.2的版本的cupti。

conda search cupti --info

5.2 主系统安装CUDA

故只好进入官网下载对应版本的CUDA安装文件,再次在系统上进行安装,之后再找到对应的库文件拷贝到conda环境中。

按照官网教程下载和安装,运行之后稍微等一下程序在加载文件

wget https://developer.download.nvidia.com/compute/cuda/11.0.2/local_installers/cuda_11.0.2_450.51.05_linux.run
sudo sh cuda_11.0.2_450.51.05_linux.run

如果之前安装过显卡驱动将打印如下提示信息,这里忽略它上下建选择Continue ,回车键确认。

 Existing package manager installation of the driver found. It is strongly
 recommended that you remove this before continuing.
 Abort
 Continue 

则将打印如下信息,输入accept接受许可证声明,回车确认

Do you accept the above EULA? (accept/decline/quit):

接下来选择所要安装的内容,由于此处我们只需要CUPTI,故之选择按照如下信息进行选择,右键展开,回车选择,最后选择install安装

 CUDA Installer 
 - [ ] Driver
      [ ] 465.19.01
 - [X] CUDA Toolkit 11.3
    + [X] CUDA Tools 11.3
    + [X] CUDA Compiler 11.3
    + [X] CUDA Libraries 11.3
   [ ] CUDA Samples 11.3
   [ ] CUDA Demo Suite 11.3
   [ ] CUDA Documentation 11.3
   Options
   Install

如果你之前安装了CUDA,他会提示你如下信息,这里我们不更改环境的超链接设置,选择No

 A symlink already exists at /usr/local/cuda. Update to this installation?
 Yes
 No

安装完成打印如下信息,里面PATHLD_LIBRARY_PATH包含了CUDA的安装路径

===========
= Summary =
===========

Driver:   Not Selected
Toolkit:  Installed in /usr/local/cuda-11.0/
Samples:  Not Selected

Please make sure that
 -   PATH includes /usr/local/cuda-11.0/bin
 -   LD_LIBRARY_PATH includes /usr/local/cuda-11.0/lib64, or, add /usr/local/cuda-11.0/lib64 to /etc/ld.so.conf and run ldconfig as root

To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-11.0/bin

将路径/usr/local/cuda-11.0/extras/CUPTI/lib64/下的文件全部拷贝到{anaconda安装路径}/envs/tf2.4/lib/下即可完成conda环境下cupti安装。

6 安装waymo-open-dataset工具

waymo数据集工具包名的格式是waymo-open-dataset-tf-{对应tensorflow版本号}。由于LaserNet依赖tensorflow 2.4.0,故我们需要安装waymo-open-dataset-tf-2-4-0。安装过程可以参考官方教程,安装过程中会自动将对应版本的TensorFlow(这里是2.4.01)安装上。指令如下,其中加入-i https://pypi.tuna.tsinghua.edu.cn/simple是指定国内源,下载速度比较快。

(tf2.4) $ pip3 install waymo-open-dataset-tf-2-4-0 -i https://pypi.tuna.tsinghua.edu.cn/simple

安装完成之后,在{anaconda安装路径}/envs/tf2.4/lib/python3.7/site-packages/下可以看到waymo_open_datasetwaymo_open_dataset_tf_2_4_0-1.4.1.dist-infotensorflowtensorflow-2.4.0.dist-info四个文件夹。注意pip尽量不要使用--user指令,否则会安装到~/.local/lib/python3.7/site-packages/下。

7 屏蔽之前安装的CUDA和cuDNN

这一步或许可以不做。
3 安装CUDA
因为在调用过程中如果你安装的版本和系统中的版本只是小版本不同,那么极有可能会导致动态库调用过程中调用系统中的。屏蔽方式也很简单,只需要将系统中的安装路径更改一下,让系统加载CUDA和cuDNN的动态链接库时找不到即可,也就是保证找到的是conda中的动态链接库。
因为我无法确定在系统中和conda虚拟环境中有相同的库的情况下优先调用谁的库,以及这个调用顺序是谁保证的,难道是在使用conda activate进入虚拟环境时进行了初始化以保证conda环境中的动态库优先被调用?请知道的大神留言告诉我。
如:

/usr/lib/x86_64-linux-gnu$ sudo mkdir 0libcudnn8.3.3屏蔽
[sudo]  的密码: 
/usr/lib/x86_64-linux-gnu$ sudo mv ./libcudnn* ./0libcudnn8.3.3屏蔽

当然卸载也是可以的,卸载方式可以参考这里和这里

7 重启

很重要,因为环境变量重新设置,生效很可能需要重启,否则很可能报错:

 ... cuda_driver.cc:328] failed call to cuInit: CUDA_ERROR_UNKNOWN: unknown error

关于该错误的产生原因多半跟驱动有关,详情请参考这里

8 验证环境是否安装完成

8.1 检测是否安装

(tf2.4) $ conda list

从下面的打印信息,可以看到以上所有库都已经安装完成(除了CUPTI,因为他是插件)

# packages in environment at /home/....../anaconda3/envs/tf2.4:
#
# Name                    Version                   Build  Channel
_libgcc_mutex             0.1                        main    defaults
...
cudatoolkit               11.0.221             h6bb024c_0    defaults
cudnn                     8.0.5.39             ha5ca753_1    <unknown>
...
tensorboard               2.9.0                    pypi_0    pypi
tensorboard-data-server   0.6.1                    pypi_0    pypi
tensorboard-plugin-wit    1.8.1                    pypi_0    pypi
tensorflow                2.4.0                    pypi_0    pypi
tensorflow-estimator      2.4.0                    pypi_0    pypi
...
waymo-open-dataset-tf-2-4-0 1.4.1                    pypi_0    pypi
...

8.2 验证TensorFlow的GPU环境

验证TensorFlow应用GPU的环境是否安装好

(tf2.4) $ python3
>>> import tensorflow as tf
>>> tf.test.is_gpu_available() 
>>> tf.test.is_built_with_cuda() #推荐

若最后两条指令都返回Ture则,表示配置完成。下面是第二条指令的打印信息:

WARNING:tensorflow:From <stdin>:1: is_gpu_available (from tensorf3 安装CUDAlow.python.framework.test_util) is deprecated and will be removed in a future version.
Instructions for updating:
Use `tf.config.list_physical_devices('GPU')` instead.
2022-05-06 21:34:17.185046: I tensorflow/compiler/jit/xla_gpu_device.cc:99] Not creating XLA devices, tf_xla_enable_xla_devices not set
2022-05-06 21:34:17.187128: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcuda.so.1
2022-05-06 21:34:17.213906: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:941] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2022-05-06 21:34:17.214473: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1720] Found device 0 with properties: 
pciBusID: 0000:01:00.0 name: NVIDIA GeForce RTX 2070 with Max-Q Design computeCapability: 7.5
coreClock: 1.125GHz coreCount: 36 deviceMemorySize: 7.79GiB deviceMemoryBandwidth: 327.88GiB/s
2022-05-06 21:34:17.214505: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.11.0
2022-05-06 21:34:17.216746: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcublas.so.11
2022-05-06 21:34:17.216789: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcublasLt.so.11
2022-05-06 21:34:17.217701: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcufft.so.10
2022-05-06 21:34:17.217910: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcurand.so.10
2022-05-06 21:34:17.220225: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcusolver.so.10
2022-05-06 21:34:17.220758: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcusparse.so.11
2022-05-06 21:34:17.220876: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudnn.so.8
2022-05-06 21:34:17.220966: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:941] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2022-05-06 21:34:17.221682: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:941] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero3 安装CUDA
2022-05-06 21:34:17.222093: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1862] Adding visible gpu devices: 0
2022-05-06 21:34:17.222126: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.11.0
2022-05-06 21:34:17.595925: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1261] Device interconnect StreamExecutor with strength 1 edge matrix:
2022-05-06 21:34:17.595956: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1267]      0 
2022-05-06 21:34:17.595963: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1280] 0:   N 
2022-05-06 21:34:17.596104: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:941] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2022-05-06 21:34:17.596473: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:941] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2022-05-06 21:34:17.596786: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:941] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2022-05-06 21:34:17.597084: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1406] Created TensorFlow device (/device:GPU:0 with 6498 MB memory) -> physical GPU (device: 0, name: NVIDIA GeForce RTX 2070 with Max-Q Design, pci bus id: 0000:01:00.0, compute capability: 7.5)
True

上述打印信息中有一条下面的信息

Not creating XLA devices, tf_xla_enable_xla_devices not set

XLA(Accelerated Linear Algebra,即加速线性代数)一种深度学习编译器,长期以来被作为Tensorflow框架的一个试验特性被开发,其加速性能显著。

关于该信息产生原因,一种说法:据说是Tesorflow-gpu 2.4.1,默认情况下,不再注册XLA:CPU和XLA:GPU设备。另一种说法是:随着Tensorflow 2.X的发布,XLA也终于从试验特性变成了默认打开的特性;还有一种说法:它仍处于实验阶段。但是还有博主说该打印信息对运行没有影响,另外还有其他博主也说没有影响。

解决方案是在程序前部加入下面代码以将其使能。

import os
os.environ['TF_XLA_FLAGS'] = '--tf_xla_enable_xla_devices'

在运行程序你就可以看到如下打印信息,说明设置成功

...xla/service/service.cc:168] XLA service 0x562d092df680 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
...xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version

或许你也可以按照官方教程为 TensorFlow 模型启用 XLA(未尝试)。

 tf.function(jit_compile=True)

8.3 验证调用的是codna环境中的so库

将上述成功调用的conda环境中的几个库文件名更改一下,

libcudart.so.11.0
libcublas.so.11
libcublasLt.so.11
libcufft.so.10
libcurand.so.10
libcusolver.so.10
libcusparse.so.11 
libcudnn.so.8

然后在进行8.2的检验,若不能成功加载(如出现如下报错信息)说明调用的就是该文件

... W tensorflow/stream_executor/platform/default/dso_loader.cc:60] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /home/...

9 Anaconda是如何把CUDA的环境添加到系统中的?

(本部分可以略过)

估计是在进入conda对应环境时,通过某个程序执行文件anaconda3/envs/tf2.4/x86_64-conda_cos6-linux-gnu/bin/ldanaconda3/envs/tf2.4/x86_64-conda-linux-gnu/bin/ld来完成。因为这两个文件的链接目标都是文件../../bin/x86_64-conda-linux-gnu-ld

估计该程序的执行将导致动态链接库anaconda3/envs/tf2.4/lib中的关于CUDA的库文件文件被添加到环境变量中(可能是$LD_LIBRARY_PATH,但是在其中并未找到),使系统gcc编译器其可以正常调用这些库。具体的工作原理应该跟/usr/lib/x86_64-linux-gnu目录下的库文件的添加原理相同。

9.1 扩展资料

在x86_64架构下, 在 /usr/lib/x86_64-linux-gnu 文件夹下默认存放的是Gnu C/C++ 编译器的系统库。在Ubuntu系统安装好GNU编译器后自动生成/usr/lib/x86_64-linux-gnu文件夹。有时候安装其它软件时,产生的动态库也可能出现在该文件夹下。
引用动态库,可以通过如下三种方式实现:

  1. 可以在环境变量加入LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/**lib.
  2. 或者在编译的时候指定 -L/usr/lib/x86_64-linux-gnu -l**
  3. 或者在/etc/ld.so.conf.d文件中加入/usr/lib/x86_64-linux-gnu/,然后运行命令ldconfig(或许需要sudo才能生效)。ldconfig这个程序,位于/sbin下,它的作用是将文件/etc/ld.so.conf列出的路径下的库文件缓存到/etc/ld.so.cache以供使用(引用自此文)

9.2 主系统环境中添加CUDA此类库的方式

即是通过/etc/ld.so.conf.d文件调用/etc/ld.so.conf.d/下所有的.conf文件进行添加,应该是在主系统中安装CUDA时,安装程序会在/etc/ld.so.conf.d/下创建一个cuda-10-2.conf配置文件,其中就写了CUDA安装路径下的对应的库文件位置(如:/usr/local/cuda-10.2/targets/x86_64-linux/lib)。

同时,可以看到/etc/ld.so.conf.d/下的x86_64-linux-gnu.conf文件正是将上述/usr/lib/x86_64-linux-gnu目录添加进环境变量的。

10 新显卡的配置

10.1新的版本组合

经测试,下面的配置满足要求

版本 Python 版本 编译器 构建工具 cuDNN CUDA
tensorflow-2.5.0 3.6-3.9 GCC 7.3.1 Bazel 3.7.2 8.1 11.2

如果还是使用上面的配置,会报出下面的警告,这个警告表示当前CUDA版本不能发挥GPU的最大性能,需要更新CUDA,故我们将CUDA更新为了11.2,其他详情请参考这里。

2022-05-29 14:31:03.165863: W tensorflow/stream_executor/gpu/redzone_allocator.cc:314] Unimplemented: /usr/local/cuda-11.0/bin/ptxas ptxas too old. Falling back to the driver to compile.
Relying on driver to perform ptx compilation. 
Modify $PATH to customize ptxas location.
This message will be only logged once.

2022-05-29 14:33:33.874918: W tensorflow/stream_executor/gpu/asm_compiler.cc:235] Your CUDA software stack is old. We fallback to the NVIDIA driver for some compilation. Update your CUDA version to get the best performance. The ptxas error was: ptxas fatal   : Value 'sm_86' is not defined for option 'gpu-name'

10.2 一个报错

但是使用本版本组合,也会出现一个新的报错,如下所示。该报错主要是跟数据集加载有关,或许数据集不再用GZIP加载就不会报错。笔者在全网也没有找到解决该错误的解决方案,但是经过实践该错误好像不会对性能造成什么影响。

Unimplemented: Cannot merge options for dataset of type LoadDataset, because the dataset does not implement `InputDatasets`.

10.4 CUDA安装

再按照上述3 安装CUDA过程中,发现conda默认库中没有CUDA 11.2,但是conda-forge中有但是安装出了问题,故直接安装Nvidia官方版本的CUDA到系统环境,即可。由于使用的主系统中的CUDA已经有了CUPTI,故不需要再将CUPTI拷贝到conda环境中。

10.4 cuDNN安装

跟上面4 安装cuDNN方式一致,从conda-forge中下载cudnn8.1,进行本地安装

wget https://conda.anaconda.org/conda-forge/linux-64/cudnn-8.1.0.77-h90431f1_0.tar.bz2

10.5 测试

import tensorflow as tf可能会报错如下

TypeError: Descriptors cannot not be created directly.
If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0.
If you cannot immediately regenerate your protos, some other possible workarounds are:
 1. Downgrade the protobuf package to 3.20.x or lower.
 2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and will be much slower).

这是protobuf版本不兼容导致的,解决方案如下,卸载重新安装兼容版本即可。

pip uninstall protobuf
pip install protobuf==3.20.1

10.5 waymo-open-dataset

waymo-open-dataset工具依赖tensorflow,由于tensorflow版本更新到了2.5.0,则应该安装waymo-open-dataset-tf-2-5-0。

点赞 收藏不迷路!!


  1. 若要参考其他官方教程中没提到的版本请参考:https://mmdetection3d.readthedocs.io/zh_CN/latest/datasets/waymo_det.html ↩︎ ↩︎

你可能感兴趣的:(计算机视觉,tensorflow,python,深度学习,LaserNet,融合感知)