TensorFlow入门(五、指定GPU运算)

news2025/2/24 14:18:42

一般情况下,下载的TensorFlow版本如果是GPU版本,在运行过程中TensorFlow能自动检测。如果检测到GPU,TensorFlow会默认利用找到的第一个GPU来执行操作。如果机器上有超过一个可用的GPU,除第一个之外的其他GPU默认是不参与计算的。如果想让TensorFlow使用这些GPU执行操作,需要将运算OP明确指派给它们执行。

指派特定的CPU或GPU执行操作的方法有两种:

①使用with……device语句来指派,示例代码如下:

#使用with语法建立session
with tf.Session() as sess:
    #指定CPU
    with tf.device('/cpu:0'):
        #计算具体数值  使用feed机制
        print("相加: %i" % sess.run(add,feed_dict = {a:3,b:4}))
        print("相乘: %i" % sess.run(mul,feed_dict = {a:3,b:4}))
        
        #使用fetch机制
        print(sess.run([mul,add],feed_dict = {a:3,b:4}))

从代码中可以看到,设备用字符串进行标识,目前支持的设备包括以下几种:

                        ①cpu:0        机器的cpu

                        ②gpu:0        机器的第一个gpu,如果有的话

                        ③gpu:1        机器的第二个gpu,以此类推

②通过tf.ConfigProto来构建一个config,在config中指定相关的GPU,并且在session中传入参数config="自己创建的config"来指定GPU操作

        tf.ConfigProto函数的参数具体如下:

#log_device_placement = True    是否打印设备分配日志
#allow_soft_placement = True    如果指定的设备不存在,允许TF自动分配设备


myconfig = tf.ConfigProto(log_device_placemnet = True,allow_soft_placement = True)
session = tf.Session(config = myconfig)

        通过tf.ConfigProto函数生成config后,还可以设置其属性来分配GPU的运算资源,如下代码的用图就是按需分配:

myconfig = tf.ConfigProto(log_device_placement = True, allow_soft_placement = true)
config.gpu_options.allow_growth = True
session = tf.Session(config = myconfig)

        使用allow_growth刚开始会分配少量的GPU容量,然后按需慢慢地增加,

由于不会释放内存,会导致碎片。

        也可以放在config创建的时候指定,如:

gpu_options = tf.GPUOptions(allow_growth = True)
myconfig = tf.ConfigProto(gpu_options = gpu_options)

        还可以给GPU分配固定大小的计算资源,如:

gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction = 0.5)

        含义为分配给TensorFlow的GPU显存大小为GPU实际显存*0.5

完整示例代码如下:

import tensorflow.compat.v1 as tf

tf.compat.v1.disable_eager_execution()

#通过占位符定义变量
a = tf.compat.v1.placeholder(tf.int16)
b = tf.compat.v1.placeholder(tf.int16)

#a与b相加
add = tf.add(a,b)
#a与b相乘
mul = tf.multiply(a,b)

gpu_options = tf.GPUOptions(allow_growth = True,per_process_gpu_memory_fraction = 0.5)
myconfig = tf.ConfigProto(gpu_options = gpu_options)

#使用with语法建立session
with tf.Session(config = myconfig) as sess:
    #计算具体数值  使用feed机制
    print("相加: %i" % sess.run(add,feed_dict = {a:3,b:4}))
    print("相乘: %i" % sess.run(mul,feed_dict = {a:3,b:4}))
    
    #使用fetch机制
    print(sess.run([mul,add],feed_dict = {a:3,b:4}))

运行结果如下:

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

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

相关文章

Java多线程编程-栅栏CyclicBarrier实例

前言 本文是基于《Java多线程编程实战指南-核心篇》第五章个人理解,源码是摘抄作者的源码,源码会加上自己的理解。读书笔记目前笔者正在更新如下, 《Java多线程编程实战指南-核心篇》,《How Tomcat Works》,再到《spr…

QT中计算日期差,并进行加减

1、界面上拖动两个QDateTimeEdit控件,同时设置为开始时间与结束时间,然后再来拖动个pushButton,命名为查询功能,然后槽函数中,实现如下: void Database::on_pushButton_4_clicked() {QDateTime time1 u…

ARM/X86工控机在轨道交通车站管理系统的应用(1)

车站管理系统 车站管理系统是一种集成平台,包括综合监控系统(ISCS)、火灾报警系统(FAS)、以及楼宇自动化系统(BAS)等。由于其复杂性,车站管理系统要求硬件必须稳定且可扩展,以确保24/7全天侯正常运作。信迈工业服务器级系统素以坚固耐用和广…

x86汇编基础

目录 CPU架构与指令集 x86 / x64 CPU操作模式 寄存器 数据类型 数据传送与访问 算数逻辑与运算逻辑 跳转指令和循环指令 栈与函数调用 这一部分更详细的内容可以参考我的专栏:C与汇编 CPU架构与指令集 CPU即中央处理单元(Central Processing Unit )&#…

虚拟机联网

桥接 桥接模式就是虚拟机与你的电脑平起平做,都有同样的IP,且与你的电脑在同一网段下,就能够上网。 电脑的IP的地址 虚拟机的ip地址 设置vm1的ip地址与网关与电脑相同 如果出现ssh连接虚拟机不成功的问题,无其他问题时&#xff0…

2023-09-27 LeetCode每日一题(餐厅过滤器)

2023-09-27每日一题 一、题目编号 1333. 餐厅过滤器二、题目链接 点击跳转到题目位置 三、题目描述 给你一个餐馆信息数组 restaurants,其中 restaurants[i] [idi, ratingi, veganFriendlyi, pricei, distancei]。你必须使用以下三个过滤器来过滤这些餐馆信息…

Python经典练习题(四)

文章目录 🍀第一题🍀第二题🍀第三题 🍀第一题 题目:打印出如下图案(菱形): 我们首先分析一下,本题实现的步骤主要有两个,分别是前四行和后三行 前四行:第一…

数据结构--二叉树(2)

文章目录 二叉树的存储结构二叉树的链式结构二叉树的遍历结点个数寻找二叉树的某个结点二叉树的层遍历判断是否为完全二叉树 上一节 二叉树的堆链接入口 二叉树的存储结构 对于二叉树的存储,有两种存储方式:一种是顺序存储,另一种是链式存储…

linux 清除卸载jenkins

1、停服务进程 查看jenkins服务是否在运行,如果在运行,停掉 查看服务 ps -ef|grep jenkins 停掉进程 kill -9 XXX2、查找安装目录 find / -name "jenkins*"3、删掉相关目录 删掉相关安装目录 rm -rf /root/.jenkins/# 删掉war包 rm -rf /…

服务断路器_Resilience4j异常比例熔断降级

给coud-consumer-feign-order80添加resilience4j依赖 修改yml文件 resilience4j.circuitbreaker:configs:default:# 熔断器打开的失败阈值failureRateThreshold: 30# 默认滑动窗口大小,circuitbreaker使用基于计数和时间范围欢动窗口聚合统计失败率slidingWindowS…

如何写公众号推文?公众号文章写作步骤分享

一篇优质的公众号文章,不仅能提升品牌知名度,增强用户粘性,还能引导潜在客户,实现商业价值。那么,如何才能写出一篇引人入胜的公众号文章呢?本文伯乐网络传媒将为您详细解析写公众号文章的步骤,…

模块接口测试

单元测试是代码正确性验证的最重要的工具,也是系统测试当中最重要的环节。也是唯一需要编写代码才能进行测试的一种测试方法。在标准的开发过程中,单元测试的代码与实际程序的代码具有同等的重要性。每一个单元测试,都是用来定向测试其所对应…

【笔记】Splay

【笔记】Splay 目录 简介右旋左旋 核心思想操作a. Splayb. 插入c. 删除 信息的维护例题AcWing 2437. SplayP3369 【模板】普通平衡树 简介 Splay 是一种平衡树,并且是一棵二叉搜索树(BST)。 它满足对于任意节点,都有左子树上任意…

fdbus之CBaseMessage

总体介绍 这个类是一个很重要的的类,fdbus中传递对象就是这个类的实例,该类中包含了很多重要的信息。可以这样理解,再fdbus的通信中,这个类的地位至关重要。他们的通信的内容就是该类定义的一些信息。 虽然CFdbBaseObject定义了…

如何进一步全面提高项目估算精准度?

项目估算非常重要,这直接关系着项目的成本和收入,如果估算不准确,将为项目带来较大风险。一般软件规模可以用多种方式进行估算,但是用功能点估算方式更准确,而自动估算让估算更快速,我们以CoCode开发的估算…

初识网络编程

一、概述 地球村:亦称世界村,是通过电子媒介将世界紧密联系起来的形象表达,是信息网络时代的集中体现 TCP和UDP: TCP:打电话 -->连接 -->接了 -->通话 UDP:发送完即可 -->接收 计算机网络&a…

QQ表情包存储位置解析

一些常见的设备和系统的QQ表情包存储位置: Windows系统: 路径:C:\Users[用户名]\Documents\Tencent Files[QQ号码]\Image\Image\CustomFace 在这个文件夹中,您可以找到所有自定义的QQ表情包。 Android系统: 路径&am…

程序开发常用在线工具汇总

菜鸟工具# https://c.runoob.com/ 编码# ASCII码# https://www.habaijian.com/ 在线转换# https://www.107000.com/T-Ascii/http://www.ab126.com/goju/1711.html Base64# 在线转换# https://www.qqxiuzi.cn/bianma/base64.htmhttp://www.mxcz.net/tools/Unicode.aspx …

软件架构的演化和维护

软件架构的演化和维护 定义 定义 顶不住了,刷题去了,不搞这个了,想吐。。。

STM32Cube 开发之读写内部Flash--电源项目ADC采样校准系数存储-实现掉电读取数据--STM32或者GD32F处理器

STM32Cube 开发之读写内部Flash–电源项目ADC采样校准系数存储-实现掉电读取数据 一、需求介绍 1.1 在进行电源项目开发中,输入与输出的电压电流经过硬件电路分压或者差分变换后,将低压的电压信号给到单片机如STM32F1系列单片机的ADC采样端口&#xff…