使用GPU进行计算可以加速许多TensorFlow操作,如果没有任何注释,TensorFlow会自动决定是使用GPU还是CPU进行操作,操作产生的张量通常由执行操作的设备的存储器支持。
GPU的地位和CPU等同,都是处理数据单元。不同的是,CPU可以处理复杂逻辑,比如判断、循环、断点、保护现场等,处理速度快;而GPU只会简单的数值计算,很少的逻辑处理单元,计算速度也不如CPU,但是,GPU计算带宽高,一次能处理的数据量大。可以把CPU比作法拉利,GPU比作大卡车,法拉利虽然跑的快,但最多4座的,大卡车跑的慢,可胜在拉货论吨。
GPU和CPU都有自己的专属的存储器,内存8G属于CPU,显存2G属于GPU。集成显卡就是在内存中划分出一块作为显存,独立显卡则是单独的一块存储区域。DDR4内存的速度是25.6GB/s,而GDDR6显存的速度最高可达72GB/s。
tensor.device属性提供托管张量内容的设备的完全限定字符串名称。此名称编码许多详细信息,例如正在执行此程序的主机的网络地址的标识符以及该主机中的设备。这是分布式执行TensorFlow程序所必需的。如果张量位于主机上的第N个GPU上,则字符串以GPU:N结尾。
x = tf.random.uniform([3, 3])
print(x.device) # /job:localhost/replica:0/task:0/device:GPU:0
print(tf.test.is_gpu_available()) # True
print(x.device.endswith('GPU:0')) # True
x = tf.random.uniform([3, 3])
print(x.device) # /job:localhost/replica:0/task:0/device:GPU:0
with tf.device('/cpu:0'):
x = tf.random.uniform([3, 3])
print(x.device) # /job:localhost/replica:0/task:0/device:CPU:0
如果发现,tensor不在GPU上运行,此时发生问题的地方有很多,例如TensorFlow-gpu和TensorFlow版本不匹配、GPU设置问题等。总之,挺烦的。