我们把训练模型建立以后,投入到生产环境的时候,问题来了,一张图片进行预测,tensorflow启动加载模型在进行需要跑好几秒钟,才能得出一个预测值。这在真实环境中是不允许的。因为太慢了,为了找出原因所在,开始了如下的探究和测试。

调试确定问题

以google-inception模型中的test.py为例,先在测试模型中记录两个时间,最后相互减就得出所用时间,确定在哪一个环节耗时严重。

# coding=utf-8
import tensorflow as tf
import sys
import datetime

# 命令行参数,传入要判断的图片路径
image_file = sys.argv[1]
# print(image_file)

# 读取图像
image = tf.gfile.FastGFile(image_file, 'rb').read()
print (datetime.datetime.now())
# 加载图像分类标签
labels = []
for label in tf.gfile.GFile("output_labels.txt"):
    labels.append(label.rstrip())

# 加载Graph
with tf.gfile.FastGFile("output_graph.pb", 'rb') as f:
    graph_def = tf.GraphDef()
    graph_def.ParseFromString(f.read())
    tf.import_graph_def(graph_def, name='')

print (datetime.datetime.now())
with tf.Session() as sess:
    softmax_tensor = sess.graph.get_tensor_by_name('final_result:0')
    print (datetime.datetime.now())
    predict = sess.run(softmax_tensor, {'DecodeJpeg/contents:0': image})
    print (datetime.datetime.now())

    # 根据分类概率进行排序
    top = predict[0].argsort()[-len(predict[0]):][::-1]
    for index in top:
        human_string = labels[index]
        score = predict[0][index]
        print(human_string, score)

通过这种方法得出以下的数据:

这里写图片描述
从图中可以看出,有两个耗时严重的地方,对应代码来看就是加载一张test.jpg图片和tensorflow真正处理图片的时候。其中处理图片耗时最严重,近2秒,基本可以确定问题出在这。围绕这个2秒开始了下面的一系列比较和性能测试。
为了确定是内因还是外因,找了另一台电脑进行测试:
由于下面的测试都是围绕这两台电脑之间 ,所以先列出两台机器相关指标。

机器及指标笔记本组装机
GPUGeForce GTX 860MGTX 1080Ti
内存ddr3-8Gddr3-8G
CPU8核 @ 2.90GHz4核 @ 3.6GHz
硬盘SSDSSD
主板联想y50

然后在组装机上跑的结果如下:
这里写图片描述
用时约2.5秒,用时比笔记本还多。按常理来说:gtx1080ti这么好的显卡没有道理啊,是不是电脑其他配置的问题,如内存,CPU ,主板那些。随后进行了两个机器的性能测试
如下:

测试工具:

phoronix-test-suite :ubuntu下比较好用的一款机器性能测试工具。

# 安装phoronix
$sudo apt-get -y install phoronix-test-suite 
# 列出提供的tests
$phoronix-test-suite list-tests
#安装test模块
$phoronix-test-suite install xxx
#模块测试
$phoronix-test-suite xxx

以上是常用的就是这几个命令。

测试项目

GPU 内存 CPU 硬盘 主板

测试项目选用模块笔记本得分组装机得分
GPUgputest(tessMark)483636306
内存ramspeed1200600
CPUstresscpu2
硬盘aio-stress955670

通过这个表,可以得出笔记本gpu被虐爆了,8倍的差距,gtx1080ti不是吃素的;内存笔记本是DDR3-1600,台式机是DDR2-800,所以笔记本是他的两倍也可以说通了;硬盘由于组装机是两块SSD,这个也没有太大差别。CPU还在测试中!

GitHub 加速计划 / te / tensorflow
184.55 K
74.12 K
下载
一个面向所有人的开源机器学习框架
最近提交(Master分支:2 个月前 )
a49e66f2 PiperOrigin-RevId: 663726708 2 个月前
91dac11a This test overrides disabled_backends, dropping the default value in the process. PiperOrigin-RevId: 663711155 2 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐