如何在 tensorflow 中使用非常大(>2M)的词嵌入?

how do I use a very large (>2M) word embedding in tensorflow?

我正在 运行 建立一个具有非常大的词嵌入(> 2M 词)的模型。当我使用 tf.embedding_lookup 时,它期望矩阵很大。当我 运行 时,我随后出现 GPU 内存不足错误。如果我减小嵌入的大小,一切正常。

有没有办法处理更大的嵌入?

推荐的方法是使用 partitioner 将这个大张量分成几个部分:

embedding = tf.get_variable("embedding", [1000000000, 20],
                            partitioner=tf.fixed_size_partitioner(3))

这会将张量沿 0 轴分成 3 个碎片,但程序的其余部分会将其视为普通张量。最大的好处是将分区程序与 参数服务器复制 一起使用,如下所示:

with tf.device(tf.train.replica_device_setter(ps_tasks=3)):
  embedding = tf.get_variable("embedding", [1000000000, 20],
                              partitioner=tf.fixed_size_partitioner(3))

这里的关键函数是tf.train.replica_device_setter。 它允许您 运行 3 个不同的进程,称为 parameter servers,存储所有模型变量。大 embedding 张量将像这张图片一样在这些服务器上拆分。