TensorFlow中的显式CPU放置

时间:2018-01-01 08:46:22

标签: 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内存泄漏的情况之外,是否还有其他需要明确指定CPU操作的情况?

1 个答案:

答案 0 :(得分:3)

将嵌入矩阵放在CPU上的原因是GPU上的tf.nn.embedding_lookup isn't supported

  

因此,假设基本的word2vec示例绑定到CPU(#514),我们可以   看到tf.nn.embedding_lookup无法在GPU上运行。因此,ops   在内部使用embedding_lookup也不支持GPU(for   例如,nce_loss)。

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