TensorFlow中的显式CPU布局

TensorFlow中的显式CPU布局,tensorflow,nlp,gpu,cpu,word-embedding,Tensorflow,Nlp,Gpu,Cpu,Word Embedding,我发现官方模型示例中有一段代码让我感到困惑 with tf.device("/cpu:0"): embedding = tf.get_variable( "embedding", [vocab_size, size], dtype=data_type()) inputs = tf.nn.embedding_lookup(embedding, input_.input_data) 为什么在这里使用tf.device(“/cpu:0”)?除了GPU内存泄漏的情况外,还有其他情况

我发现官方模型示例中有一段代码让我感到困惑

with tf.device("/cpu:0"):
  embedding = tf.get_variable(
      "embedding", [vocab_size, size], dtype=data_type())
  inputs = tf.nn.embedding_lookup(embedding, input_.input_data)

为什么在这里使用
tf.device(“/cpu:0”)
?除了GPU内存泄漏的情况外,还有其他情况需要明确指定CPU操作吗?

将嵌入矩阵放置在CPU上的原因是
tf.nn。在GPU上嵌入\u查找

因此,考虑到基本word2vec示例绑定到CPU(#514),我们可以 请参阅
tf.nn.embedded\u lookup
在GPU上不起作用。因此,老年退休金计划 在内部使用
embedded\u lookup
也不支持GPU(例如 例如,
nce\u损失


这意味着将
嵌入
变量的GPU位置只会导致不必要的数据从主内存传输到GPU内存,反之亦然。因此,将变量显式地放置在CPU上会更有效。

是否还有其他情况需要tf.device(“/CPU:0”)?是的,例如,如果希望通过将计算拆分到多个GPU来进行图形复制:这就是为什么参数服务器(p)通常位于TensorFlow中的CPU上,使用CPU是因为内存通常比GPU内存大,对吗?听起来很合理,是的。单词嵌入矩阵通常很大,而查找操作非常便宜,所以CPU位置是一个不错的选择。看吧!谢谢,马克西姆。