深度学习TensorFlow环境配置及遗留的问题(cudatoolkit版本,TensorFlow版本)(四)

小白装Ubuntu20.04-系列记录(四)

目录

小白装Ubuntu20.04-系列记录(四)

虚拟环境创建

cudatoolkit安装

TensorFlow是否成功安装测试

运行时发现遗留问题

 


虚拟环境创建

为了方便管理,我使用conda命令创建了一个名为TF的虚拟环境,拷贝base的基础环境,存放目前项目需用的TensorFlow环境。


cudatoolkit安装

安装与对应TensorFlow版本相匹配的版本即可,参见:2021最新:TensorFlow各个GPU版本CUDA和cuDNN对应版本整理(最简洁)

这里我安装的版本是

使用conda install cudatoolkit==11.0.221命令安装

TensorFlow版本是:

使用pip install tf-nightly-gpu==2.6.0.dev20210427命令安装

这里,大家可能会疑惑,为什么你的cudatoolkit和你之前装的CUDA版本不一致呢?

我想,这篇文章,大概可以解答大家的疑惑:

cuda和cudatoolkit

在使用 Anaconda 安装 Pytorch 深度学习框架时,可以发现 Anaconda 会自动为我们安装 cudatoolkit,如下图所示。

  

  上述安装的 cudatoolkit 与通过 Nvidia 官方提供的 CUDA Toolkit 是不一样的。具体而言,Nvidia 官方提供的 CUDA Toolkit 是一个完整的工具安装包,其中提供了 Nvidia 驱动程序、开发 CUDA 程序相关的开发工具包等可供安装的选项。使用 Nvidia 官网提供的 CUDA Toolkit 可以安装开发 CUDA 程序所需的工具,包括 CUDA 程序的编译器、IDE、调试器等,CUDA 程序所对应的各式库文件以及它们的头文件。上述 CUDA Toolkit 的具体组成可参考 CUDA Toolkit Major Components.

  实际上,Nvidia 官方提供安装的 CUDA Toolkit 包含了进行 CUDA 相关程序开发的编译、调试等过程相关的所有组件。但对于 Pytorch 之类的深度学习框架而言,其在大多数需要使用 GPU 的情况中只需要使用 CUDA 的动态链接库支持程序的运行( Pytorch 本身与 CUDA 相关的部分是提前编译好的 ),就像常见的可执行程序一样,不需要重新进行编译过程,只需要其所依赖的动态链接库存在即可正常运行。故而,Anaconda 在安装 Pytorch 等会使用到 CUDA 的框架时,会自动为用户安装 cudatoolkit,其主要包含应用程序在使用 CUDA 相关的功能时所依赖的动态链接库。在安装了 cudatoolkit 后,只要系统上存在与当前的 cudatoolkit 所兼容的 Nvidia 驱动,则已经编译好的 CUDA 相关的程序就可以直接运行,而不需要安装完整的 Nvidia 官方提供的 CUDA Toolkit .

  通过 Anaconda 安装的应用程序包位于安装目录下的 /pkg 文件夹中,如笔者的目录即为 /home/xxx/anaconda3/pkgs/ ,用户可以在其中查看 conda 安装的 cudatoolkit 的内容,如下图所示。可以看到 conda 安装的 cudatoolkit 中主要包含的是支持已经编译好的 CUDA 程序运行的相关的动态链接库。( Ubuntu 环境下 )

  

  在大多数情况下,上述 cudatoolkit 是可以满足 Pytorch 等框架的使用需求的。但对于一些特殊需求,如需要为 Pytorch 框架添加 CUDA 相关的拓展时( Custom C++ and CUDA Extensions ),需要对编写的 CUDA 相关的程序进行编译等操作,则需安装完整的 Nvidia 官方提供的 CUDA Toolkit.

  本文的后续内容,即对应的是当 Pytorch 等框架需要编译对应的 CUDA 相关拓展程序时,如何设置使用不同版本的 cuda toolkit( 完整的包含有编译器的安装包 )对程序进行编译,进而满足特定的 CUDA 版本依赖。

 

Pytorch 使用不同版本的 cuda


TensorFlow是否成功安装测试

import tensorflow as tf
tf.test.is_gpu_available()

代码不报错,并且结果输出True,一般就没有问题了


运行时发现遗留问题

2021-04-28 14:14:38.109245: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX2 AVX512F FMA
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2021-04-28 14:14:40.814874: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1418] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 8102 MB memory:  -> device: 0, name: GeForce RTX 3080, pci bus id: 0000:af:00.0, compute capability: 8.6
2021-04-28 14:14:41.200352: I tensorflow/core/profiler/lib/profiler_session.cc:126] Profiler session initializing.
2021-04-28 14:14:41.200389: I tensorflow/core/profiler/lib/profiler_session.cc:141] Profiler session started.
2021-04-28 14:14:41.201296: I tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1611] Profiler found 1 GPUs
2021-04-28 14:14:41.201620: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcupti.so.11.2'; dlerror: libcupti.so.11.2: cannot open shared object file: No such file or directory
2021-04-28 14:14:41.201692: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcupti.so'; dlerror: libcupti.so: cannot open shared object file: No such file or directory
2021-04-28 14:14:41.201719: E tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1663] function cupti_interface_->Subscribe( &subscriber_, (CUpti_CallbackFunc)ApiCallback, this)failed with error CUPTI could not be loaded or symbol could not be found.
2021-04-28 14:14:41.201745: I tensorflow/core/profiler/lib/profiler_session.cc:159] Profiler session tear down.
2021-04-28 14:14:41.201763: E tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1754] function cupti_interface_->Finalize()failed with error CUPTI could not be loaded or symbol could not be found.
WARNING:tensorflow:From /home/xin/anaconda3/envs/TF/lib/python3.8/site-packages/tensorflow/python/ops/array_ops.py:5043: calling gather (from tensorflow.python.ops.array_ops) with validate_indices is deprecated and will be removed in a future version.
Instructions for updating:
The `validate_indices` argument has no effect. Indices are always validated on CPU and never validated on GPU.
2021-04-28 14:14:41.870952: I tensorflow/compiler/mlir/mlir_graph_optimization_pass.cc:180] None of the MLIR Optimization Passes are enabled (registered 2)

出现E的地方,让我很后怕,但是代码运行时正常且调用GPU,我就暂且留着这个隐患,后面遇到再解决吧……

 

你可能感兴趣的:(机器学习,tensorflow,cuda)