gpt4 book ai didi

python - 为什么我的 tensorflow 代码运行这么慢?批量大小为 1

转载 作者:太空宇宙 更新时间:2023-11-03 14:10:05 25 4
gpt4 key购买 nike

所以我有以下目标函数。它一次仅适用于一个训练示例(我有避免批量的原因)。正如你所看到的,它非常轻,所以我希望它运行得非常快。

def objective(data, lam, item_biases, latent_items, latent_users):  

user = data[0]
rated_item = data[1]
unrated_item = data[2]


rated_item_bias = item_biases[rated_item]
unrated_item_bias = item_biases[unrated_item]

rated_latent_item = latent_items[rated_item]
unrated_latent_item = latent_items[unrated_item]

latent_user = latent_users[user]

rated_pred = rated_item_bias + tf.reduce_sum(tf.multiply(rated_latent_item, latent_user))
unrated_pred = unrated_item_bias + tf.reduce_sum(tf.multiply(unrated_latent_item, latent_user))

difference = rated_pred - unrated_pred
obj = tf.sigmoid(difference)

obj += lam * tf.reduce_sum(rated_item_bias**2)
obj += lam * tf.reduce_sum(unrated_item_bias**2)
obj += lam * tf.reduce_sum(rated_latent_item**2)
obj += lam * tf.reduce_sum(unrated_latent_item**2)
obj += lam * tf.reduce_sum(latent_user**2)
return obj

但是,当我这样训练它时:

sess = tf.Session()
sess.run(tf.global_variables_initializer())
for iteration in range(5):
samples = sample_triple(data, valid, 100000)
for sample in tqdm(samples):
cvalues = sess.run([trainer, obj], feed_dict={input_data:sample})

它运行得非常慢。我有一个普通的 Python SGD 实现(例如手工导出的梯度),它以 80K 迭代/秒的速度运行。这个 tensorflow 实现的运行速度约为每秒 30 次迭代。这显然是不合理的。显然,批量大小为 1 会减慢速度。但是达到 30 次迭代/秒?

这是 sess.run() 调用的开销吗?有没有更好的方法来确保我一次只抽取一个样本(它必须必须是SGD,没有小批量)?

编辑:我应该补充一点,如果我不每批处理喂一个项目(目标函数必须改变),那么它的速度相当快,但正如我指出的那样,这不是最理想的......

最佳答案

无法在评论中回复。 session.run 确实有一些开销。当您在 GPU 上运行琐碎计算并输入较大值时,开销最为明显。 Feeding 总是从 CPU 内存中获取值并将它们复制到 GPU(如果您的计算在 GPU 上运行)。不过基础并没有那么高。例如,此代码在我的机器上需要一秒钟:

with tf.device('cpu'):
a = tf.placeholder(dtype=tf.float32, shape=())
b = a + 1

with tf.Session() as sess:
s = time.time()
c = 0
for x in xrange(8000):
c += sess.run(b, feed_dict={a: x})
print "Computed in ", c, "in", time.time() - s

为了进一步调试这个问题,我建议:

  • 确保所有时间实际上都花在 sess.run()
  • 确保您没有输入大量数据。看起来 item_biases、latent_items、latent_users 是数组,但您使用的是其中的单个元素。尝试准确喂养您需要的食物。
  • 尝试在 CPU 上运行
  • 尝试查看性能时间表:https://towardsdatascience.com/howto-profile-tensorflow-1a49fb18073d
  • 如果这些步骤没有揭示任何简单的修复方法,请使用 tf.while_loop 对图表中的小批量进行循环。

关于python - 为什么我的 tensorflow 代码运行这么慢?批量大小为 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48571475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com