下面的脚本执行得非常慢。我只想计算twitter follower图(约26gb的文本文件)中的总行数。
我需要执行一个机器学习任务。这只是一个通过tensorflow从hdfs访问数据的测试。
import tensorflow as tf
import time
filename_queue = tf.train.string_input_producer(["hdfs://default/twitter/twitter_rv.net"], num_epochs=1, shuffle=False)
def read_filename_queue(filename_queue):
reader = tf.TextLineReader()
_, line = reader.read(filename_queue)
return line
line = read_filename_queue(filename_queue)
session_conf = tf.ConfigProto(intra_op_parallelism_threads=1500,inter_op_parallelism_threads=1500)
with tf.Session(config=session_conf) as sess:
sess.run(tf.initialize_local_variables())
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(coord=coord)
start = time.time()
i = 0
while True:
i = i + 1
if i%100000 == 0:
print(i)
print(time.time() - start)
try:
sess.run([line])
except tf.errors.OutOfRangeError:
print('end of file')
break
print('total number of lines = ' + str(i))
print(time.time() - start)
这一过程需要大约40秒的前100000行。我试着 intra_op_parallelism_threads
以及 inter_op_parallelism_threads
到0、4、8、40、400和1500。但对执行时间影响不大。。。
你能帮助我吗?
系统规格:
16 gb内存
4个cpu核
5条答案
按热度按时间pgpifvop1#
你可以把大文件分成小文件,这可能会有帮助。将线程内并行度和线程间并行度设置为0;
对于许多系统来说,用多个进程读取单个原始文本文件并不容易,tensorflow只能用一个线程读取一个文件,因此调整tensorflow线程没有帮助。spark可以用多个线程来处理文件,因为它将文件划分为块,每个线程读取它的块中的行内容,而忽略第一个线程之前的字符
\n
因为它们属于最后一个街区的最后一行。对于批量数据处理,spark是较好的选择,而tensorflow是较好的机器学习/深度学习任务;b1zrtrql2#
试试这个,它会改善你的时间安排:
当您不知道什么是最佳值时,将配置掌握在自己手中是不好的。
monwx1rj3#
https://github.com/linkedin/tony
使用tony,您可以提交一个tensorflow作业,并指定worker的数量以及它们是需要cpu还是gpu。
使用tony在多台服务器上运行时,我们能够获得几乎线性的加速(inception v3模型):
下面是如何使用自述文件中的示例:
在
tony
目录还有一个tony.xml
它包含了所有的作业配置。例如:有关配置的完整列表,请参阅wiki。
型号代码
然后你就可以开始你的工作了:
命令行参数如下:*
executes
描述培训代码入口点的位置。*task_params
描述将传递给入口点的命令行参数。*python_venv
描述本地调用python脚本的zip的名称。*python_binary_path
描述python虚拟环境中包含python二进制文件的相对路径,或使用已安装在所有工作节点上的python二进制文件的绝对路径。*src_dir
指定本地根目录的名称,其中包含所有python模型源代码。此目录将复制到所有工作节点。*shell_env
为将在python worker/ps进程中设置的环境变量指定键值对。suzh9iv84#
我也是tensorflow的初学者,但由于您要求从可靠和/或官方来源获得答案,以下是我的发现,可能会有所帮助:
从源代码生成和安装
利用队列读取数据
cpu上的预处理
使用nchw图像数据格式
在gpu上放置共享参数
使用熔合批次标准
注:以上列出的要点在tensorflow性能指南中有更详细的解释
另一件你可能想研究的是量化:
它可以解释如何在存储和运行时使用量化来减小模型大小。量化可以提高性能,特别是在移动硬件上。
siv3szwd5#
我绕过了这个性能问题,改用spark。