利用GPU加速TensorFlow

一、写在前面

我们已经依靠keras和TensorFlow给大家做了一些机器学习在图像处理中的应用(影像组学学习手册,基于深度学习的图像分类任务),此前的教程中我们没有用GPU进行加速,但是相较于CPU而言,GPU是设计用于处理大规模并行计算任务的硬件,具有大量的小型处理单元(CUDA核心或流处理器),这使得它们能够同时执行多个计算任务。GPU的并行性能远远超过了CPU,因此能够加速机器学习过程中的训练和推断过程。而当下流行的深度学习框架如TensorFlow和PyTorch均提供了GPU加速的支持,使得在GPU上运行模型变得更加容易。这些框架通过CUDA或OpenCL等接口与GPU通信,从而简化了GPU的使用。不过,为了让TensorFlow能够顺利调用GPU,我们还需要额外安装软件并配置环境。

需要GPU算力的同学可参考:终于上架啦

也可以来找找组织:生信Linux交流群

计算资源不足的同学可参考:
生信分析为什么要使用服务器?
足够支持你完成硕博生涯的生信环境
独享用户硬件升级对比报告

二、依赖知识

为了顺利完成以下操作,你需要有Linux和Python的基础知识:

十小时学会Linux

生信Python速查手册

三、win11+GTX 1650下的GPU加速环境配置

1、确认系统版本与显卡型号

首先我在我的笔记本上测试了一下,系统版本为Windows11 家庭中文版,显卡型号为NVIDIA GeForce GTX 1650(不要问我AMD的显卡以及其它品牌的显卡怎么配置,因为我没有)。确认好以上信息后,再进行下面的操作。

2、确认显卡驱动与CUDA版本 

如果大家不知道自己显卡的版本型号,可以现在windows的检索栏中打开显卡控制中心:

图片

界面中自然有对应的版本与驱动型号:

图片


按下键盘上的Win + R组合键,然后在运行对话框中键入cmd,然后按Enter键。可以进入windows的终端,输入:

    nvidia-smi

    回车后即可返回对应信息,这里由于我已经装好了cuda,所以cuda的版本号也显能够显示:

    图片

    3、安装驱动

    如果你的驱动未能正常安装/不确定自己的驱动是否适配/需要安装指定的驱动,可以前往NVIDIA官网[1]填上对应的信息后获得驱动文件。以我的环境为例:

    图片

    搜索出来的页面点击download到本地后,管理员模式运行安装即可。

    图片

    有了你的驱动之后,需要根据版本号选择cuda版本[2],这里由于我的驱动时546.33,所以下列的cuda版本理论上我都可以兼容

    图片

    接下来,由于我的Python环境是3.8,经过查阅Tensorflow的推荐配置[3],因此我的最终选择是2.4.0的tensorflow、11.0的CUDA。

    图片

    3、动手安装

    在终端中先安装好tensorflow

      pip install tensorflow-gpu==2.4.0pip install numpy==1.2.0# tensorflow-gpu的2.4.0依赖的是1.9.0的numpy,但我实际运行时会报错

      cuda需要去官方列表页面[4]下载:

      图片

      填写好信息后进行下载:

      图片

      下载后安排到默认位置即可。

      在终端中输入:

        nvcc -V

        能成功返回cuda的版本信息则安装成功:

        图片

        前往页面下载[5]对应版本的cudnn:

        图片

        下载得到的是一个压缩包,解压后有以下目录:

        图片

        cudnn实际上是库文件,所以你需要把这个文件夹下bin里的文件拷贝到cuda的bin目录下(对应我系统中的路径就是C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\bin),把include中的文件拷贝到cuda的include目录中(对应我的系统就是:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\include),把lib/x64的文件拷贝到cuda的对应位置(对应我的系统就是:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\lib\x64)。

        完成上述的文件迁移操作后,找到bandwidthTest.exe程序(在我的系统中在:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\extras\demo_suite\bandwidthTest.exe)并在终端中运行:

          "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\extras\demo_suite\bandwidthTest.exe"

          注意上面的命令要有双引号,否则空格会不识别。运行后有以下提示说明cudnn安装成功:

          图片

          至此,为tensorflow搭建的GPU加速环境配置完成。

          四、验证GPU加速

          导包验证

            import osimport pandas as pdimport tensorflowtensorflow.config.experimental.list_physical_devices('GPU')

            在Python中输入以上命令若能返回GPU的相关参数,则说明上述配置成功

            图片

            如果报错缺少dll,则需要在终端声明以下变量(需要改为你系统中的对应位置)

              SETPATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\bin;%PATH%SETPATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\extras\CUPTI\lib64;%PATH%SETPATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\include;%PATH%

              在Python中也可以提前申明dll文件路径后加载tensorflow:

                import osos.add_dll_directory("C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v11.0\\bin")import pandas as pdimport tensorflowtensorflow.config.experimental.list_physical_devices('GPU')

                成功返回GPU信息即可

                图片

                我使用了GPU加速,一个epoch大约是10s+:

                图片

                而不用GPU加速的结果为35s+的样子:

                图片

                当然,我的CPU是I7-9750H,GPU是GTX 1650(已经沦为亮机卡了,相信拥有更高端显卡的你一定能够跑通这个教程),因此加速效果虽然显著,但是不离谱,如果换成目前主流的显卡,计算速度会相差数个量级。

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

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

                相关文章

                模型预测专题:强鲁棒性DPCC

                0 1 前言 在进行DPCC的学习过程中,于下面链接看到了一篇强鲁棒性算法;感觉挺有意思的,学习一下。 永磁同步电机高性能控制算法(12)——基于预测电流误差补偿的强鲁棒预测控制/参数辨识&有限集预测控制与连续集预…

                修复opensuse 风滚草rabbitmq的Error: :plugins_dir_does_not_exist问题

                https://wiki.archlinux.org/title/Talk:RabbitMQ 报错 yqh192 /u/l/r/l/r/plugins> sudo rabbitmq-plugins enable rabbitmq_management Error: :plugins_dir_does_not_exist Arguments given:enable rabbitmq_managementUsagerabbitmq-plugins [--node <node>] [--…

                前端做gis地图有哪些库

                以下是前端开发GIS地图常用的库&#xff1a; Leaflet&#xff1a;轻量级、易于使用的开源JavaScript库&#xff0c;具有丰富的地图功能和插件生态系统&#xff0c;支持多种地图数据源&#xff0c;适合初学者和专业开发者。其优势在于简洁性和易用性&#xff0c;代码结构清晰&am…

                赋能城市安全韧性|众智鸿图总裁扈震受邀出席智慧城市大会发表主题报告

                ——“众智鸿图作为城市基础设施智能化综合服务提供商&#xff0c;以地理信息科学、时空大数据、人工智能为核心能力&#xff0c;长期深耕于燃气、供水、排水等城市基础设施生命线领域及港口、园区等工业领域&#xff0c;致力于为城市稳定运行与高效发展提供坚实保障。” 2025年…

                【大语言模型入门】—— 浅析LLM基座—Transformer原理

                【大语言模型入门】—— 浅析LLM基座—Transformer原理 解密GPT核心技术&#xff1a;Transformer架构深度解析被反复强调的核心概念意味着什么&#xff1f; GPT预测机制解析&#xff1a;从Next Token Prediction到任务推理核心机制的本质案例驱动的机制解析解构策略&#xff1a…

                Django打造智能Web机器人控制平台

                Django 实现 Web 机器人控制 以下是关于 Django 实现 Web 机器人控制管理的实例思路和关键代码片段,涵盖多个常见场景。由于篇幅限制,剩余的可通过类似模式扩展。 基础机器人模型定义 # models.py from django.db import modelsclass Robot(models.Model):name = models.C…

                周赛98补题

                题目意思&#xff1a; 给定一个数字判断加上自身任意因子数&#xff0c;是否能成为一个奇数。 思路&#xff1a; 我们想一个最简单的判断方法&#xff0c; 任意的数字的因子数都有1&#xff0c;故&#xff0c;最简单的方法就是判断奇偶。 奇数1成偶数&#xff0c;偶数1成奇…

                【STM32】 STM32低功耗模式详解:睡眠模式与唤醒机制【待测试】

                本篇知识点基于F0讲解 一、STM32三种低功耗模式参考表格 模式功耗唤醒时间保持状态典型应用场景睡眠模式中等 (mA级)最短 (μs级)CPU停止&#xff0c;外设保持短暂待机&#xff0c;快速响应停止模式低 (μA级)中等 (ms级)RAM保持&#xff0c;时钟停止长时间待机&#xff0c;电…

                【Vue入门学习笔记】Vue核心语法

                目录 准备工作删除不需要的代码 模版语法文本插值使用JavaScript表达式无效写法原始HTML 属性绑定简写布尔型Attribute动态绑定多个值 准备工作 删除不需要的代码 删除components下的文件 进入App.vue 删掉代码&#xff0c;只保留如下内容 <template></template&g…

                ClickHouse 窗口分析 argMax() / argMin()

                argMin() 是 ClickHouse 中一个非常有用的聚合函数&#xff0c;它可以找出某个列的最小值&#xff0c;并返回该最小值对应的另一个列的值 函数语法 argMin(arg, val) arg&#xff1a;要返回的列&#xff08;当找到最小值时返回该列的值&#xff09; val&#xff1a;用于比较的…

                k8s client 通过KubeConfig和证书方式连接api server

                一、背景 本文以kubePi这样一个k8s客户端为示例,使用证书方式,怎么连接k8s集群。 然后告诉你证书是如何生成的, 最后通过一个Python编程示例,在程序里如何使用。 api server地址:比如https://110.206.56.308:6443 Certificate:证书内容 Certificate Key:证书的私钥 先…

                (2025.07)解决——ubuntu20.04系统开机黑屏,左上角光标闪烁

                前面一些碎碎念&#xff1a; 电脑装的双系统&#xff0c;之前都还好着&#xff0c;今天突然ubuntu开机的时候黑屏了&#xff0c;左上角有光标在闪烁&#xff0c;也查了一些资料&#xff0c;基本上大家的都是驱动有问题&#xff0c;还有内存问题。&#xff08;个人建议&#xff…

                一文讲清libmodbus在STM32上基于FreeRTOS的移植

                libmodbus 开发库概述 libmodbus是一个免费的跨平台支持RTU和TCP的Modbus库&#xff0c;遵循LGPL V2.1协议。libmodbus支持Linux、 Mac Os X、 FreeBSD、 QNX和Windows等操作系统。 libmodbus可以向符合Modbus协议的设备发送和接收数据&#xff0c;并支持通过串口或者TCP网络进…

                go语言安装达梦数据完整教程

                一、安装 go-dm 驱动 1. 使用 go get 命令安装 # 打开PowerShell或命令提示符 go get github.com/dmdbms/go-dm# 若网络问题&#xff0c;配置代理 go env -w GOPROXYhttps://goproxy.cn,direct2. 验证驱动安装 go list -m github.com/dmdbms/go-dm# 预期输出类似 github.com…

                华为云Flexus+DeepSeek征文|基于Dify构建音视频内容转录工作流

                华为云FlexusDeepSeek征文&#xff5c;基于Dify构建音视频内容转录工作流 一、构建音视频内容转录工作流前言二、构建音视频内容转录工作流环境2.1 基于FlexusX实例的Dify平台2.2 基于MaaS的模型API商用服务 三、构建音视频内容转录工作流实战3.1 配置Dify环境3.2 配置Dify工具…

                Pandas6(数据清洗2)——置换和随机采样、get_dummies、扩展数据类型、字符串处理函数

                数据清洗2 一、置换和随机采样&#xff08;permutation,sample&#xff09; 随机置换&#xff08;打乱排序&#xff08;洗牌&#xff09;&#xff09;函数&#xff1a;numpy.random.permutation &#xff0c;可以对一个序列进行随机排序&#xff0c;常用于数据集随机划分等场景…

                按月设置索引名的完整指南:Elasticsearch日期索引实践

                按月设置索引名的完整指南:Elasticsearch日期索引实践 在时序数据场景中,按月设置索引名(如logs-2024-01)是优化查询效率、降低管理成本的关键策略。以下是三种实现方案及详细步骤: 方案一:索引模板 + 日期数学表达式(推荐) 原理:利用ES内置的日期数学表达式动态生成…

                西南交通大学【机器学习实验7】

                实验目的 理解和掌握朴素贝叶斯基本原理和方法&#xff0c;理解极大似然估计方法&#xff0c;理解先验概率分布和后验概率分布等概念&#xff0c;掌握朴素贝叶斯分类器训练方法。 实验要求 给定数据集&#xff0c;编程实现朴素贝叶斯分类算法&#xff0c;计算相应先验概率&a…

                java生成pdf文件

                1.依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itext-core</artifactId><version>8.0.4</version><type>pom</type></dependency> 2.代码 package org.example;import com.itextpdf.io.image…

                macOS挂载iOS应用沙盒文件夹

                背景 工具 libimobiledevice: linux&#xff0c;macOS等与ios设备通信是的工具 macFUSE 是 macOS 文件系统扩展的“引擎”&#xff0c;支持开发者创建各类虚拟文件系统。 iFUSE 是专为 iOS 设备设计的“连接器”&#xff0c;需依赖 macFUSE 实现功能。 若需访问 iPhone/iP…