搭建和配置TensorFlow环境

本文详细介绍如何在Ubuntu 18.04环境下,从零开始搭建和配置TensorFlow 2.1,包括Nvidia驱动、CUDA 10.1、cuDNN 7.x的安装过程及版本匹配要点,帮助读者快速上手GPU加速的深度学习模型训练。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

搭建和配置TensorFlow环境

前言

由于工作需要,近期准备深入学习和使用深度模型。前期调研了一番各大深度学习的开发框架,常用的有TensorFlow (Google), Pytouch (Facebook),Mxnet (Amazon),PaddlePaddle (Baidu), Caffe等。各有各的用户基础和功能特点。对于刚进该领域的新人,个人还是觉得选择用户基础大,背后厂牌硬的框架比较安全和保险。于是选择TensorFlow。

虽然TensorFlow的社区已经非常成熟,文档也齐全,但是作为新手,还是在搭建环境的过程中踩了不少的坑。因此写下这篇文档,希望后来者在开始搭建和使用TensorFlow的环境时,能少走弯路,更快上手

选型参数

系统模块版本
Ubuntu18.04
TensorFlow2.1
CUDA10.1
cuDNN7.x
Nvidia Driver440.x

重要提醒

  1. 如果要使用GPU加速(通常都会使用,不然模型训练会很慢),必须准确安装对应的TensorFlow版本和cuda的版本。目前我个人验证的可行的版本匹配如上;
  2. TensorFlow的文档里面有说明哪个版本需要对应cuda的哪个版本。版本要是对应不上,在使用过程中会引发各种各样的问题;

安装TensorFlow

参考TensorFlow官方文档

# 更新最新的pip
pip install --upgrade pip

# 安装当前最新稳定版的tensorflow,目前2.0以上版本同时支持CPU and GPU
pip install tensorflow
# (可选择)安装预览版tensorflow (unstable)
pip install tf-nightly

验证是否安装成功,进入python的console

import tensorflow as tf

正确返回,没报错就代表已经安装成功。通常会弹出一堆提示信息,类似如下

2020-01-20 11:46:50.881093: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libnvinfer.so.6'; dlerror: libnvinfer.so.6: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: :/usr/local/protobuf/lib:/usr/local/lib
2020-01-20 11:46:50.881169: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libnvinfer_plugin.so.6'; dlerror: libnvinfer_plugin.so.6: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: :/usr/local/protobuf/lib:/usr/local/lib
2020-01-20 11:46:50.881178: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:30] Cannot dlopen some TensorRT libraries. If you would like to use Nvidia GPU with TensorRT, please make sure the missing libraries mentioned above are installed properly.

这些信息时提示当前系统没有安装TensorRT相关的内容,如果不需要GPU支持,直接忽略即可。

备注

  1. TensorFlow2.0之后的版本跟1.X的版本在配置和语法上都有较大的不同,在选择版本时,请慎重考虑需求;
  2. 如果不需要GPU的支持,恭喜您,以上已经完成了TensorFlow的搭建。后文可以不需要了解;
  3. 如果需要支持GPU,请继续阅读后面的内容。重要的事情说三遍,版本要匹配!版本要匹配!版本要匹配!

安装Nvidia驱动

通过Nvidia官网下载安装。

下载安装包之后,执行以下命令:

sudo sh NVIDIA-Linux-x86_64-440.44.run

备注

  1. 如果使用cuda的runfile安装cuda,通常会同时安装驱动程序的
  2. cuda10.1所支持的Nvidia驱动为418以上,本人验证过440版本的驱动不会有问题

安装cuda

因为安装了tensorflow 2.1要求使用cuda10.1,点击官网下载页面,根据要求选择操作系统和安装方式,个人推荐runfile (local)的选项。

下载完成后,执行以下命令:

sudo sh cuda_10.1.105_418.39_linux.run

安装时可以选择将Samples也一起安装,当安装完成后可以用于验证cuda是否正确使用。我安装完之后,在我的$HOME目录下面有一个NVIDIA_CUDA-10.1_Samples文件夹,进入该文件夹后,执行以下命令

# 编译例子
make clean & make

# 等待编译完成后,进入其中一个例子clock
cd 0_Simple/clock

# 执行clock文件,看到Test passed说明cuda安装成功
clock

安装cuDNN

完成cuda安装之后,还需要安装cuDNN。cuDNN是Nvidia为了深度学习提供支持显卡加速库。安装的详细说明参考官网指引

不想看上面全英文的文档的话,可以根据下面的指引安装。

  1. 注册Nvidia的账户
  2. 完成后进入cuDNN下载页面
  3. 选择Download cuDNN v7.6.5 (November 5th, 2019), for CUDA 10.1
  4. 根据自己的系统选择安装包。本人是Ubuntu系统,常用deb包来安装,因此下载Runtime、Developer和Code Sample三个包

执行相关命令

# 安装Runtime
sudo dpkg -i libcudnn7_7.6.5.32-1+cuda10.1_amd64.deb

# 安装Developer包
sudo dpkg -i libcudnn7-dev_7.6.5.32-1+cuda10.1_amd64.deb

# 安装文档包
udo dpkg -i libcudnn7-deoc_7.6.5.32-1+cuda10.1_amd64.deb

环境验证

经过了上面一系列的步骤,恭喜你,终于可以使用TensorFlow并且利用GPU的强大性能了。下面我们可以通过一个例子验证环境是否正确安装

进入Python Console,执行以下命令

import tensorflow as tf

print("Num GPUs Available: ", len(tf.config.experimental.list_physical_devices('GPU')))

当看见下面的输出,说明GPU已经成功加载

Num GPUs Available:  1

同时,你也可以运行以下tensorflow的计算命令

a = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
b = tf.constant([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])
c = tf.matmul(a, b)

print(c)

如果有以下输出,说明tensorflow的计算正常

tf.Tensor(
[[22. 28.]
 [49. 64.]], shape=(2, 2), dtype=float32)

问题与解决

查询NVidia显存的使用

nvidia-smi

程序占用全部GPU显存

在使用过程中,我发现我的机器显存在没有执行复杂操作的时候已经占用很高。经过调查发现,tensorflow默认是占用所有显卡和全部显存,用户可以通过以下设置,让tensorflow按需要占用显存。

以下命令为TensorFlow 2.x的命令,如果是1.x的版本,语法稍有不同,度娘上通常都是1.x的语法,可以直接搜索可得

import tensorflow as tf
gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
  try:
    # Currently, memory growth needs to be the same across GPUs
    for gpu in gpus:
      tf.config.experimental.set_memory_growth(gpu, True)
    logical_gpus = tf.config.experimental.list_logical_devices('GPU')
    print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
  except RuntimeError as e:
    # Memory growth must be set before GPUs have been initialized
    print(e)

在每次运行tensorflow之前先运行上面一段程序,可以调整tensorflow的默认配置。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值