发现个更好的方法,只需要配置下session的config即可:
config=tf.ConfigProto(allow_soft_placement=True,log_device_placement=True)
config.gpu_options.allow_growth=True
sess=tf.Session( config=config)
然后在控制台的输出中即可看到变量的位置信息,allow_soft_placement为True还允许将原本要分配到GPU上的变量分配到CPU端
以下为原文:
通过tensorflow自动分配变量时,并不清楚变量具体的分配位置时CPU还是GPU
一般情况下,这并不是问题,然而我尝试分配大变量时,内存溢出了!!!!
才发现embedding variable居然被分配在了GPU上。。。。
搜索发现,tensorflow自带性能分析工具,参见:
http://stackoverflow.com/questions/37751739/tensorflow-code-optimization-strategy
文末程序的日志如下:
不多说了,上代码:
# coding=utf-8
'''
测试Tensorflow的性能分析工具;
该工具也可以检测变量的位置,,
参考网址:http://stackoverflow.com/questions/37751739/tensorflow-code-optimization-strategy
Created on Mar 30, 2017
@author: colinliang
'''
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import tensorflow as tf
from tensorflow.python.client import timeline
if __name__ == '__main__':
run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE)
run_metadata = tf.RunMetadata()
sess = tf.Session()
print(u'CUPTI的so文件位置变了, 直接运行本程序会产生exception!!! http://blog.csdn.net/rtygbwwwerr/article/details/51605835')
print(u'解决方法:我是拷贝了一下/usr/local/cuda/extras/CUPTI/lib64对应3个的文件到 /usr/local/cuda/lib64 中')
from tensorflow.python.ops import partitioned_variables
partitioner = partitioned_variables.variable_axis_size_partitioner(max_shard_bytes=512) # 注意这里是分割的字节数,而不是float的数量
dim = 2
# with tf.device('/cpu:0'):
# embedding_var=tf.get_variable('embedding_var', shape=[600,dim],partitioner=partitioner, dtype=tf.float32)
embedding_var = tf.get_variable('embedding_var', shape=[200, dim], partitioner=partitioner, dtype=tf.float32)
w = tf.get_variable('w', shape=[dim, 10], dtype=tf.float32)
# tf.PartitionedVariable # 如果进行了partition,变量类型不是tf.Variable,而是,由一组tf.Variable组成的tf.PartitionedVariable
sess.run(tf.global_variables_initializer())
print('embedding_var: %s' % embedding_var)
# print('device of embedding_var: %s'% embedding_var.device) #对于单个变量,可以这么打印device,但只针对显式指定device的变量有效。。。
r = tf.nn.embedding_lookup(embedding_var, [0])
r = tf.matmul(r, w)
print(r)
sess.run(r, options=run_options, run_metadata=run_metadata)
# print(run_metadata)
tl = timeline.Timeline(run_metadata.step_stats)
ctf = tl.generate_chrome_trace_format()
tracing_log='/tmp/timeline.json'
with open(tracing_log, 'w') as f:
f.write(ctf)
print('DONE')
print('在chrome中打开: chrome://tracing , 再load %s 即可查看运行日志'%tracing_log)
exit(0)
#############################################
'''
print(run_metadata) 输出的部分内容如下
可以看到 embedding_var 被分片了,每片大小为400字节,而不是我们指定的512字节。。。
allocator_name: "gpu_bfc" 为 gpu_bfc , 说明该变量被分配在GPU上!!!
'''
# node_stats {
# node_name: "embedding_var/part_0"
# all_start_micros: 1490861057718593
# op_end_rel_micros: 2
# all_end_rel_micros: 6
# memory {
# allocator_name: "gpu_bfc"
# }
# output {
# tensor_description {
# dtype: DT_FLOAT
# shape {
# dim {
# size: 50
# }
# dim {
# size: 2
# }
# }
# allocation_description {
# requested_bytes: 400
# allocated_bytes: 512
# allocator_name: "gpu_bfc"
# allocation_id: 24
# has_single_reference: true
# ptr: 1117060600064
# }
# }
# }
- 大小: 93.9 KB
分享到:
相关推荐
在当今大数据和人工智能的时代背景下,机器学习模型已成为分析和解决问题的重要工具。其中,线性回归作为一种基础且广泛使用的模型,被广泛应用于预测和分类问题中。TensorFlow是谷歌开源的机器学习框架,它在构建和...
在安装过程中,我们需要确保系统已安装NVIDIA驱动、CUDA工具包和cuDNN库,并正确配置环境变量,以便TensorFlow能够识别和使用GPU资源。 **RTX 2060 Super** 是NVIDIA推出的一款高性能显卡,其Tensor Cores专为深度...
这个"TensorFlow机器学习实用工具.zip"压缩包可能包含了帮助用户更好地理解和使用TensorFlow的各种资源,如教程、代码示例、实用工具和可能的预训练模型。 首先,让我们深入了解TensorFlow的基本概念。TensorFlow这...
用户可以通过交互式使用TensorFlow构建计算图,并对张量和变量进行操作。张量是多维数组,是数据的基本单位,而变量则用于存储可变的参数值。TensorFlow提供了多种工具来取回(fetches)执行结果和供给(feeds)输入...
通过深入学习这本书,读者不仅可以掌握TensorFlow的基本操作,还能了解如何利用这个强大的工具进行复杂的数据分析和预测建模,从而提升在数据科学领域的专业技能。记住,实践是掌握任何技术的关键,因此动手尝试书中...
- **Profiler**:TensorFlow 提供了性能分析工具,帮助识别和优化瓶颈。 - **Graph Transform Tool**:对构建好的图进行转换和优化,如删除未使用的节点、常量折叠等。 ### 7. 扩展与定制 - **自定义运算符**:...
8. **实践应用**:通过实际案例展示TensorFlow在图像分类、文本分析等任务中的应用。 9. **分布式训练**:如果书中有涉及,会介绍如何利用TensorFlow进行分布式训练,提升大规模模型的训练效率。 10. **...
10. **TensorBoard**:TensorFlow自带的可视化工具TensorBoard,用于监控训练过程、查看模型结构、分析损失曲线等,是理解和调试模型的重要辅助工具。 通过阅读《TensorFlow实战Google深度学习框架》这本书,读者...
TensorBoard是TensorFlow的可视化工具,它可以显示计算图、训练过程中的损失曲线、激活函数的直方图等,有助于理解和优化模型。 **应用领域** TensorFlow广泛应用于计算机视觉、自然语言处理、推荐系统、语音识别...
通过对NumPy和TensorFlow的性能进行比较,文章不仅仅提供了一个关于性能分析的案例研究,更重要的是,为那些希望在实际工作中应用这些工具的数据科学家和工程师们提供了一个参考。这种类型的定量分析对于选择合适的...
15. **模型评估与调优**:TensorFlow提供评估指标和可视化工具,如TensorBoard,帮助我们监控模型性能并进行调优。 通过《TensorFlow实战》和《TensorFlow 实战Google深度学习框架》这两本书,读者可以深入理解这些...
TensorFlow 提供了数据读取和预处理的工具,如 `tfrecords` 文件格式和 `tf.data.Dataset API`。这些工具能高效地处理大量数据,支持批处理和并行化,是构建大规模机器学习系统的关键。 **7. 扩展与高级功能** 除了...
本项目实践旨在通过代码阅读与分析,帮助读者深入理解这两个库的使用及其背后的算法原理。 Scikit-Learn,全称为"scikit-learn",是Python中最受欢迎的机器学习库之一。它提供了丰富的监督和无监督学习算法,如分类...
通过分析和运行这些示例,你可以学习到如何构建模型、定义损失函数、选择优化器、训练模型以及评估模型性能。此外,还会了解到TensorFlow的高级特性,如占位符、数据输入管道、保存与恢复模型等。 总之,TensorFlow...
- **安装**:TensorFlow可以通过Python的包管理器pip进行安装,对于GPU支持的版本,需要确保NVIDIA驱动和CUDA/CUDNN库已安装。 - **导入与基本操作**:在Python环境中,使用`import tensorflow as tf`导入库,然后...
7. 增加日志输出:合理增加日志的输出,有助于理解在哪个阶段出现错误,同时也可以帮助进行性能分析。 8. 检查图的优化:TensorFlow提供了多种图优化选项,了解并合理利用这些优化可以帮助提升模型的性能。 9. ...
在服务器上,你需要先安装Python,并通过pip工具来安装TensorFlow。描述中提到的"whl"文件是Python的预编译二进制包,它们可以更方便地处理依赖问题,避免了手动安装每个依赖库的繁琐过程。在Windows Server 2012上...