gpt4 book ai didi

tensorflow - TPU 比 GPU 慢?

转载 作者:行者123 更新时间:2023-11-30 08:33:07 27 4
gpt4 key购买 nike

我刚刚在 Google Colab 中尝试使用 TPU,我想看看 TPU 比 GPU 快多少。令人惊讶的是,我得到了相反的结果。

以下是NN。

  random_image = tf.random_normal((100, 100, 100, 3))
result = tf.layers.conv2d(random_image, 32, 7)
result = tf.reduce_sum(result)

性能结果:

CPU: 8s
GPU: 0.18s
TPU: 0.50s

我不知道为什么......TPU的完整代码如下:

def calc():
random_image = tf.random_normal((100, 100, 100, 3))
result = tf.layers.conv2d(random_image, 32, 7)
result = tf.reduce_sum(result)
return result

tpu_ops = tf.contrib.tpu.batch_parallel(calc, [], num_shards=8)

session = tf.Session(tpu_address)
try:
print('Initializing global variables...')
session.run(tf.global_variables_initializer())
print('Warming up...')
session.run(tf.contrib.tpu.initialize_system())
print('Profiling')
start = time.time()
session.run(tpu_ops)
end = time.time()
elapsed = end - start
print(elapsed)
finally:
session.run(tf.contrib.tpu.shutdown_system())
session.close()

最佳答案

正确地对设备进行基准测试非常困难,因此请对您从这些示例中学到的一切持保留态度。一般来说,最好比较您感兴趣的特定模型(例如运行 ImageNet 网络)以了解性能差异。也就是说,我知道这样做很有趣,所以...

较大的模型将更好地说明 TPU 和 GPU 性能。您的示例还将编译时间包含在 TPU 调用的成本中:给定程序和形状的第一次调用之后的每个调用都将被缓存,因此您需要在启动计时器之前进行一次 tpu_ops ,除非您想要捕获编译时间。

目前,每次调用 TPU 函数都会在开始运行之前将权重复制到 TPU,这对小操作的影响更为显着。以下示例在返回 CPU 之前在 TPU 上运行循环,并具有以下输出。

  • 1 0.010800600051879883
  • 10 0.09931182861328125
  • 100 0.5581905841827393
  • 500 2.7688047885894775

。因此,您实际上可以在 0.55 秒内运行该函数 100 次迭代。

import os
import time
import tensorflow as tf

def calc(n):
img = tf.random_normal((128, 100, 100, 3))
def body(_):
result = tf.layers.conv2d(img, 32, 7)
result = tf.reduce_sum(result)
return result

return tf.contrib.tpu.repeat(n[0], body, [0.0])


session = tf.Session('grpc://' + os.environ['COLAB_TPU_ADDR'])
try:
print('Initializing TPU...')
session.run(tf.contrib.tpu.initialize_system())

for i in [1, 10, 100, 500]:
tpu_ops = tf.contrib.tpu.batch_parallel(calc, [[i] * 8], num_shards=8)
print('Warming up...')
session.run(tf.global_variables_initializer())
session.run(tpu_ops)
print('Profiling')
start = time.time()
session.run(tpu_ops)
end = time.time()
elapsed = end - start
print(i, elapsed)
finally:
session.run(tf.contrib.tpu.shutdown_system())
session.close()

关于tensorflow - TPU 比 GPU 慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52580464/

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