Linux Ubuntu配置CPU与GPU版本tensorflow库的方法

news2024/11/18 19:40:33

  本文介绍在Linux操作系统的发行版本Ubuntu中,配置可以用CPUGPU运行的Python新版本深度学习库tensorflow的方法。

  在文章Anaconda配置Python新版本tensorflow库(CPU、GPU通用)的方法(https://blog.csdn.net/zhebushibiaoshifu/article/details/129285815)以及新版本GPU加速的tensorflow库的配置方法(https://blog.csdn.net/zhebushibiaoshifu/article/details/129291170)中,我们已经介绍了Windows平台下,配置CPUGPU版本的tensorflow库的方法;而在本文中,我们就介绍一下在Linux Ubuntu环境中,CPUGPU版本tensorflow库的配置方法。

  本文分文两部分,第1部分为CPU版本的tensorflow库的配置方法,第2部分则为GPU版本的tensorflow库的配置方法;如果大家的电脑有GPU,那么就直接跳过第1部分,从本文的第2部分开始看起就好。需要明确的是,本文的Python版本为3.10,是一个比较新的版本;但是如果大家的Python是其他版本也没问题,整体配置的思路都是一样的。

1 CPU版本

  首先,我们介绍一下CPU版本的tensorflow库的配置方法。

  配置CPU版本的tensorflow库可以说是非常简单。首先,建议大家按照文章Linux Ubuntu配置Anaconda与Python的方法(https://blog.csdn.net/zhebushibiaoshifu/article/details/130807267)中提及的内容,首先配置好Anaconda环境;其次,如果大家需要在虚拟环境中配置tensorflow库,那么就可以自行创建一个虚拟环境后开始后续的操作——我这里就直接在默认的环境,也就是base环境中加以配置了。关于Anaconda创建虚拟环境,大家可以参考文章Anaconda中Python虚拟环境的创建、使用与删除(https://blog.csdn.net/zhebushibiaoshifu/article/details/128334614),这里就不再赘述了。

  我们可以通过在终端中输入如下的代码,查看当前Anaconda环境中的环境。

conda info -e

  运行上述代码,将得到如下图所示的情况。其中,可以看到我这里因为没有创建虚拟环境,因此就是只有一个base环境。

  随后,我们在终端中输入如下的代码,安装tensorflow库。

conda install tensorflow

  运行上述代码,我们将自动开始安装当前环境(也就是Python版本)支持的最新版本的tensorflow库;如下图所示。

  安装完毕后,就将出现如下图所示的界面。

  至此,我们就完成了CPU版本的tensorflow库的配置。我们按照文章新版本GPU加速的tensorflow库的配置方法(https://blog.csdn.net/zhebushibiaoshifu/article/details/129291170)中提及的方法,在Python中输入如下的代码,检验当前tensorflow库是否支持GPU运算。

import tensorflow as tf
print(tf.config.list_physical_devices("GPU"))

  运行上述代码,如果得到如下图所示的一个空列表[],则表示当前tensorflow库并不支持GPU运算——当然这个是肯定的,我们这里配置的就是CPU版本的tensorflow库,自然是无法在GPU中加以运算了。

  至此,tensorflow库也可以正常使用了,但是他只能支持CPU运算。这里有必要提一句,其实我们通过前述方法配置的tensorflow库,其自身原理上也是支持GPU运算的——因为在Linux操作系统中,从tensorflow库的1.15版本以后,就不再区分CPUGPU版本了,只要下载了tensorflow库,那么他自身就是CPUGPU都支持的;我们目前到此为止配置的tensorflow库之所以不能在GPU中加以运行,是因为我们还没有将GPU运算需要的其他依赖项配置好(或者是电脑中完全就没有GPU)。

2 GPU版本

  接下来,我们介绍一下GPU版本的tensorflow库的配置方法。

2.1 NVIDIA Driver配置

  首先,我们需要对NVIDIA驱动程序加以配置。NVIDIA驱动程序是用于NVIDIA显卡的软件,它可以控制NVIDIA显卡的功能和性能,并确保它们与操作系统和其他软件正常配合工作。

  首先,我们可以先在终端中输入如下的代码。

nvidia-smi

  随后,正常情况下应该出现如下图所示的情况。如果大家此时出现的是其他情况,就表明要么没有安装任何NVIDIA驱动程序,要么是安装了NVIDIA驱动程序但是这一驱动的版本有问题。这里我们可以先不管,大家继续往下看即可。

  接下来,我们就开始安装NVIDIA驱动程序。其中,这里提供3种不同的方法,但是建议大家用最后一种。

2.1.1 方法一(不推荐)

  第1种方法,我们直接在终端中输入如下的代码即可。

sudo ubuntu-drivers autoinstall

  一般情况下,这一代码将会自动下载或更新我们电脑中的驱动,其中NVIDIA驱动程序也会跟着一并下载或更新。但是这一方法我尝试之后发现,并没有效果,因此这一方法应该是和大家电脑的状态有关系,不一定百分之百成功,因此并不推荐。

2.1.2 方法二(不推荐)

  第2种方法,是直接到NVIDIA驱动程序的官方网站中下载;但是这一方法比较麻烦,因此我这里也并不推荐。

  首先,我们进入NVIDIA驱动程序的官方网站(https://www.nvidia.cn/Download/index.aspx?lang=cn),并在如下图所示的界面处,依据自己电脑中显卡的型号、电脑的系统等加以选择。

  随后,点击“搜索”选项,将会出现最合适大家的NVIDIA驱动程序,并点击“下载”即可。

  随后,大家在终端中,安装刚刚下载好的NVIDIA驱动程序即可。

2.1.3 方法三(推荐)

  第3种方法,是最为推荐的方法。

  首先,大家在终端中输入如下的代码。

ubuntu-drivers devices

  随后,将出现如下图所示的界面;其中,出现recommendedNVIDIA驱动程序版本,就是我们电脑中最合适的版本;大家此时需要记录一下这个版本号,后续需要用到。

  接下来,我们在终端中输入如下的代码。

sudo apt install nvidia-driver-525

  其中,上述代码最后的525就是我们上图中,记录下来的版本号,大家依据自己的实际情况来修改上述代码即可。运行代码后,将出现如下图所示的情况,即这一版本的NVIDIA驱动程序将开始下载与安装。

  如果大家随后的下载、安装都很顺利,那么久没事了;但是有的时候,会出现如下图所示的错误提示。

  此时,表明我们电脑中原有的NVIDIA驱动程序与新下载的版本有了冲突,导致新的版本无法正常安装。此时,我们需要在终端中,依次输入如下的代码,记得每次输入一行即可。

sudo apt-get purge nvidia*
sudo apt-get purge libnvidia*
sudo apt-get --purge remove nvidia-*
sudo dpkg --list | grep nvidia-*

  上述代码中,前3行表示删除原有的NVIDIA驱动程序及其相关内容,最后一句用来检测,原有的NVIDIA驱动程序是不是被删除干净了。如果大家出现如下图所示的情况,即输入上述最后一句代码后什么提示信息都没有出现,那么就说明原有的NVIDIA驱动程序已经删除干净了。

  此时,我们可以再执行一次如下的代码。

ubuntu-drivers devices

  但此时,和前文中不一样的是,或许可以看到出现recommendedNVIDIA驱动程序版本发生了变化,例如我这里不再是前面的525了,而是另一个版本;但是这里我们不用管这个变化,之后还是下载525版本即可。

  接下来,我们还是运行以下代码。

sudo apt install nvidia-driver-525

  其中,上述代码最后的525就是我这里的版本号,大家还是要记得修改一下。此时,我们就可以正常下载、安装指定版本的NVIDIA驱动程序了。

  此时,我们再一次在终端中输入如下的代码。

nvidia-smi

  随后,正常情况下应该出现如下图所示的情况。其中,可以留意一下下图的右上角,表示CUDA版本最高支持12.0,再新的版本就不支持了——当然,这个CUDA具体是什么,以及怎么配置,我们接下来会提到,这里就是先留意一下即可。

  还有一点需要注意,如果输入前述代码后,出现的是如下图所示的情况,那么还是说明我们此时电脑中原有的NVIDIA驱动程序与新下载的版本有了冲突,大家重新执行一下前文中删除电脑中原有的NVIDIA驱动程序的3句代码即可。

  随后,我们还可以输入如下的代码。

nvidia-settings

  如果出现如下图所示的情况,即一个新的名为“NVIDIA X Server Settings”的窗口被打开,即说明我们前述的配置没有问题。

  至此,我们完成了NVIDIA驱动程序的配置工作。

2.2 CUDA配置

  接下来,我们进行CUDA的配置;CUDANVIDIA发明的一种并行计算平台和编程模型。

  首先,我们需要到tensorflow库的官方网站(https://www.tensorflow.org/install/source)中,下拉找到如下图所示的tensorflow库版本与对应的CUDAcuDNN版本匹配表格,并结合自己的Python版本,选择确定自己需要哪一个版本的tensorflow库,并进一步确定自己CUDAcuDNN的版本。其中,如下图紫色框所示,由于我这里Python版本是3.10的,因此只能选择紫色框内的版本;随后,想着用新版本的tensorflow库,因此我就选择用第一行对应的CUDAcuDNN版本了。

  随后,我们到CUDA的官方网站(https://developer.nvidia.com/cuda-downloads)中,首先按照如下图所示的方法,基于自己电脑的型号选择对应的内容;其中,注意最后一个选项要选择runfile (local)

  随后,网站将根据我们的选择,自动展示最新版本的CUDA。但是要注意,网站中给我们的选择,默认是最新的版本,而我们需要根据前文提到的tensorflow库版本与对应的CUDAcuDNN版本匹配表格,确定我们需要的版本。例如,如下图前3个紫色框所示,网站中给出的CUDA版本是12.1.1的,而我需要的版本是11.8的,因此就需要通过下图中“Archive of Previous CUDA Releases”选项,找到老版本的CUDA

  如下图所示,我们这里找到11.8版本的CUDA,点击即可。

  随后,将出现11.8版本的CUDA的安装方法,我们就在终端中,先后输入网站中此时展示出来的两句代码即可。

  随后,即可开始安装CUDA。其中,如果大家在安装时,出现如下图所示的提示,一般情况下是由于电脑中安装有老版本CUDA导致的;但是也不用专门去管他,选择“Continue”选项即可。

  随后,大家要注意,在如下图所示的界面中,取消选中Driver前面的叉号,从而取消NVIDIA驱动程序的安装,因为我们已经在前面安装过这个驱动了。随后,即可选择“Install”。

  接下来,我们即可开始安装CUDA,安装完毕后将会出现如下图所示的界面。

  至此,我们完成了CUDA的安装操作,但是需要进一步配置对应的环境变量。首先,在终端中输入如下的代码。

vim ~/.bashrc

  这句代码表示,我们将打开bashrc这一文件,并对其加以编辑,从而实现对环境变量的配置。运行上述代码后,我们将看到类似如下图所示的界面。

  随后,我们按下i键,开始对bashrc这一文件加以编辑。通过调整鼠标的位置,从而在bashrc文件的末尾增添如下的内容。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
export PATH=$PATH:/usr/local/cuda/bin
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda

  此时,我们将得到如下图所示的情况。

  接下来,我们首先按下Esc键退出编辑模式;接下来,输入:wq,表示保存并退出bashrc这一文件。此时,应该会出现如下图所示的界面。

  接下来,我们分别在终端中输入如下所示的两句代码。

source ~/.bashrc
nvcc --version

  其中,第一句表示更新bashrc文件,使得我们刚刚修改的环境变量立即生效;第二句则是验证CUDA安装情况的代码。如果运行以上两句代码后,出现如下图所示的界面,则表明我们的CUDA配置与环境变量配置都已经完成。

  至此,我们就完成了这一部分的配置工作。

2.3 cuDNN配置

  接下来,我们开始配置cuDNNcuDNN是一个GPU加速的深度神经网络基元库,能够以高度优化的方式实现标准例程(如前向和反向卷积、池化层、归一化和激活层)。这里还是要看一下前文提及的那个tensorflow库版本与对应的CUDAcuDNN版本匹配表格,明确我们需要下载哪一个版本的cuDNN

  首先,我们进入cuDNN的官方网站(https://developer.nvidia.com/rdp/cudnn-download);要下载cuDNN之前,我们需要先注册一下,不过注册流程也比较快,几分钟就可以完成。

  随后,我们在网站中找到对应版本的cuDNN。这里需要注意,如果我们需要的cuDNN版本并不是最新的,那么就需要在下图中“Archived cuDNN Releases”选项中找到老版本。

  我这里需要8.6版本的cuDNN,因此就需要从上图所示的位置中找到这一个版本的下载链接,并开始下载。

  下载完毕后,我们首先在终端中通过如下的命令进入下载路径;当然如果大家的下载路径不一样的话,就自行对下面这句代码加以修改即可。

cd ~/Downloads

  随后,输入如下的代码;这里需要注意,下面代码中的8.x.x.x这一部分,大家需要结合自己下载后获得安装包中具体的版本数字来修改。这一句代码的作用是启动我们本地的存储库。

sudo dpkg -i cudnn-local-repo-${OS}-8.x.x.x_1.0-1_amd64.deb

  运行上述代码,如下图所示。

  接下来,依次逐行输入如下所示的代码。其中,下面代码中的8.x.x.x这一部分,大家还是需要结合自己下载后获得安装包中具体的版本数字来修改;而同时X.Y这一部分,我们则需要根据前面选择的CUDA的版本来修改。例如,我前面下载的CUDA版本是11.8的,因此这个X.Y就是11.8。这三句代码的作用依次是:导入CUDAGPG密钥、刷新存储库的元数据、安装运行时库。

sudo cp /var/cudnn-local-repo-*/cudnn-local-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get install libcudnn8=8.x.x.x-1+cudaX.Y

  如下图第一行、第二行代码所示,就是我这里输入的上述第三句代码的具体内容。

  随后,我们继续在终端中输入如下的代码,同样记得修改自己的版本号。这句代码的作用是安装开发者库。

sudo apt-get install libcudnn8-dev=8.x.x.x-1+cudaX.Y

  如下图所示,就是我这里输入的具体内容。

  随后,我们继续在终端中输入如下的代码,同样记得修改自己的版本号。这句代码的作用是安装代码样例。

sudo apt-get install libcudnn8-samples=8.x.x.x-1+cudaX.Y

  如下图所示,就是我这里输入的具体内容。

  以上就是cuDNN的安装具体过程,接下来我们需要验证其是否安装正确。这一个验证过程稍微麻烦一些,但是其实流程也比较快。我们在终端中,依次逐行输入如下的代码即可。

cp -r /usr/src/cudnn_samples_v8/ $HOME
cd  $HOME/cudnn_samples_v8/mnistCUDNN
sudo apt-get install libfreeimage3 libfreeimage-dev
make clean && make
./mnistCUDNN

  如果大家运行完上述代码后,得到如下图所示的结果,出现Test passed!这个字样,就表明我们的cuDNN也已经配置完毕。

  至此,cuDNN就已经成功配置了。

2.4 tensorflow库配置

  接下来,我们终于到了最后一步,也就是tensorflow库的配置了。

  我们在终端中,输入如下的代码即可。

pip install tensorflow

  随后,将出现如下图所示的情况。这里大家需要注意一下,大家看一下下图紫色框内的字样,如果我们此时开始下载的tensorflow库是我们需要的版本,那么就没有问题;如果是我们当前无法使用的版本(也就是和CUDAcuDNN版本不匹配的版本),那么就可以通过指定版本的方式重新下载tensorflow库。

  完成tensorflow库的配置后,我们在Python中输入如下的代码,检验当前tensorflow库是否支持GPU运算。

import tensorflow as tf
print(tf.config.list_physical_devices("GPU"))

  运行上述代码,如果得到如下图紫色框内所示的字样,则表明我们的tensorflow库已经配置完毕,且可以使用GPU加速运算了。

  至此,大功告成。

欢迎关注:疯狂学习GIS

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/563136.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Elasticsearch 7.x 基本操作 (CRUD)

1.概述 Elasticsearch 是一个流行的开源搜索引擎,用于存储、搜索和分析数据。下面是 Elasticsearch 7.x 版本的基本操作(CRUD): 1、创建索引: PUT /index_name {"settings": {"number_of_shards"…

最近公司招了一个华为拿30K出来的,真是砂纸擦屁股,给我露了一手....

今年的金三银四已经结束,很多小伙伴收获不错,拿到了心仪的 offer。 各大论坛和社区里也看见不少小伙伴慷慨地分享了常见的面试题和八股文,为此咱这里也统一做一次大整理和大归类,这也算是划重点了。 俗话说得好,他山…

【C++】位图(海量数据处理)

文章目录 抛出问题:引入位图位图解决 位图的概念位图的实现结构构造函数设置位清空位判断这个数是否存在反转位size与count打印函数 位图的应用 抛出问题:引入位图 问题:给40亿个不重复的无符号整数,没排序,给一个无符号整数,如何…

基于 MapReduce 的分布式计算系统

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 本文以 MapReduce 为基础,实现了一套基于浏览器实现的分布式系统。加之如今 Chrome 对各个平台近乎完美的兼容性,实现了一次编写,处处运行的目标。同时得力于个人移动设备的普及&#xff0c…

java云HIS系统源码 医院HIS管理系统源码 Java医院系统源码 SaaS医院his系统源码

技术框架: 1、前端:AngularNginx 2、后台:JavaSpring,SpringBoot,SpringMVC,SpringSecurity,MyBatisPlus,等 3、数据库:MySQL MyCat 4、缓存:RedisJ2Cac…

day6 - 使用图像运算进行图像美化

本期将了解图像的基础运算,包含算数运算和位运算等。我们所使用的图像处理技术其实都是靠一些简单的基础运算来完成的,例如加法运算、位运算等,这些简单运算是我们后续研究更复杂的图像处理的基础。 完成本期内容,你可以&#xf…

HiveSQL基础练习题

HiveSQL基础练习题 1.环境准备1.1建表语句1.2数据准备1.3插入数据 2.查询2.1 查询姓名中带“华”的学生名单2.2 查询姓“王”老师的个数2.3 检索课程编号为“04”且分数小于60的学生学号&#xff0c;结果按分数降序排列2.4 查询语文成绩 < 90分的学生和其对应的成绩&#xf…

day16 Servlet交互作用域ELJSTL

转发和重定向 **作用:**为了让jsp和servlet做到责任分离,用于web组件的跳转 **web组件:**jspservlet 转发的方法 request.getRequestDispatcher("跳转的地址").forward(request,response)**跳转的位置:**在服务端进行跳转 重定向的方法 response.sendRedirect(…

2.9 playwright之python实现

1、目录结构如下 2、main.py import os import shutilfrom playwright.sync_api import sync_playwright from config.setting import config from utils.template import Template from utils.md5 import Md5 from utils.delete import del_files import pytest from utils.d…

面试被问麻了...

前几天组了一个软件测试面试的群&#xff0c;没想到效果直接拉满&#xff0c;看来大家对面试这块的需求还是挺迫切的。昨天我就看到群友们发的一些面经&#xff0c;感觉非常有参考价值&#xff0c;于是我就问他还有没有。 结果他给我整理了一份非常硬核的面筋&#xff0c;打开…

全网最全性能测试总结,分析性能测试问题+性能调优方案...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 性能分析和优化一…

【录用案例】2区毕业快刊仅34天录用,新增8篇录用、9篇见刊、13篇检索

2023年5月13日-2023年5月19日&#xff0c;经核实&#xff0c;由我处Unionpub学术推荐的8篇论文已被期刊部录用、9篇见刊、13篇检索&#xff1a; 2区系统类SSCI 【期刊简介】IF:2.5-3.0&#xff0c;JCR2区&#xff0c;中科院4区 【检索情况】SSCI 在检&#xff0c;正刊 【征稿…

本地项目上传到Git(Gitee)仓库

一、步骤解答&#xff08;详细图解步骤见第二大点&#xff09; 1、打开我们的项目所在文件夹&#xff0c;我们发现是不存在.git文件 2、在你的项目文件夹外层【鼠标右击】弹出菜单&#xff0c;在【鼠标右击】弹出的菜单中&#xff0c;点击【Git Bash Here】&#xff0c;弹出运…

循环队列+OJ题之设计循环队列

生命不是要等待风暴过去&#xff0c;而是要学会在风暴中跳舞。 ——卡莉尔吉布朗目录 &#x1f33a;前言&#xff1a; &#x1f341;一.循环队列是什么&#xff1f; &#x1f34f;二.循环队列有什么作用&#xff1f; &#x1f340;三.OJ题之设计循环队列 1…

实战演练 | Navicat 数据生成功能

数据生成的目的是依据某个数据模型&#xff0c;从原始数据通过计算得到目标系统所需要的符合该模型的数据。数据生成与数据模型是分不开的&#xff0c;数据生成的结果应该符合某个数据模型对于数据的具体要求。所以&#xff0c;随着数据模型的发展&#xff0c;数据生成的方法相…

window 利用Qt-windeployqt打包exe程序 一个简单的实例

用一个简单的实例展示下window 如何使用QT-windeployqt打包exe程序使得其可以在别的电脑上运行 一、release模式获得exe可执行文件 新建一个QT项目 构建选择使用CMake base class选择QMainWindow Kit Selection一定要注意&#xff0c;我选的是MinGW 32-bit UI设计 mainwindow.…

手机充电宝电子充气泵方案

该充气泵产品方案的运行原理是通过电动机将电能转化为机械能&#xff0c;带动电机做往复运动&#xff0c;从而产生大量压缩空气&#xff0c;达到快速充气的效果。该充气泵可用于气垫床、汽车轮胎、自行车轮胎、足球、游泳圈等各类充气物品。产品设计以人性化为主&#xff0c;简…

VMware重新安装后没有VMnet1和VMnet8网络

问题&#xff1a; VMware重新安装后&#xff0c;没有自动生成VMnet1和VMnet8网络, 并且使用VMware自带的虚拟网络编辑器也无法生成。 导致主机无法ping通虚拟机。 如下图&#xff1a;点击该选项&#xff0c;然后应用&#xff0c;转一会圈也没有产生对应的网络适配器。 问题原…

物联网技术助力物流智能化:从货物追踪到配送优化

目录 前言 物流领域的IoT设备 物流领域的应用 二、仓库管理 三、物流配送 IoT组合应用 区块链在物流领域应用 展望 前言 随着全球贸易和物流业的快速发展&#xff0c;物流领域的智能化和自动化已成为不可避免的趋势。而物联网技术作为一种重要的数字技术&#xff0c;已经在物流…

VIsual Studio内引用Lua解释器,编译Lua源码,执行Lua脚本

前言 本篇在讲什么 在Visual Studio中引入lua的解释器 使用C调用Lua文件 本篇适合什么 适合初学Lua的小白 适合需要C/C和lua结合开发的人 本篇需要什么 对Lua语法有简单认知 对C/C语法有简单认知 依赖Lua5.1的环境 依赖VS 2017编辑器 本篇的特色 具有全流程的图文…