tensorflow分类预测引发的性能测试

来源:互联网 发布:甘肃广播电视网络官网 编辑:程序博客网 时间:2024/06/05 12:40

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

调试确定问题

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

# coding=utf-8import tensorflow as tfimport sysimport 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())# 加载Graphwith 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秒开始了下面的一系列比较和性能测试。
为了确定是内因还是外因,找了另一台电脑进行测试:
由于下面的测试都是围绕这两台电脑之间 ,所以先列出两台机器相关指标。

机器及指标 笔记本 组装机 GPU GeForce GTX 860M GTX 1080Ti 内存 ddr3-8G ddr3-8G CPU 8核 @ 2.90GHz 4核 @ 3.6GHz 硬盘 SSD SSD 主板 联想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 硬盘 主板

测试项目 选用模块 笔记本得分 组装机得分 GPU gputest(tessMark) 4836 36306 内存 ramspeed 1200 600 CPU stresscpu2 硬盘 aio-stress 955 670

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

0 0
原创粉丝点击