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

如何使用tensorflow中嵌入的非常大(>;2M)的单词?,tensorflow,nlp,deep-learning,embedding,embedding-lookup,Tensorflow,Nlp,Deep Learning,Embedding,Embedding Lookup,我正在运行一个包含大量单词的模型(>2M单词)。当我使用tf.embedding_查找时,它需要一个很大的矩阵。当我运行时,我随后得到了GPU内存错误。如果我减小嵌入的大小,一切正常 有没有办法处理较大的嵌入?推荐的方法是使用a将这个大张量分成几个部分: embedding=tf.get_变量(“嵌入”,[100000000,20], 分区器=tf.固定大小分区器(3)) 这将沿0轴将张量拆分为3个碎片,但程序的其余部分将其视为普通张量。最大的好处是将分区器与参数服务器复制一起使用,如下所示:

我正在运行一个包含大量单词的模型(>2M单词)。当我使用tf.embedding_查找时,它需要一个很大的矩阵。当我运行时,我随后得到了GPU内存错误。如果我减小嵌入的大小,一切正常


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

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

embedding=tf.get_变量(“嵌入”,[100000000,20],
分区器=tf.固定大小分区器(3))
这将沿0轴将张量拆分为3个碎片,但程序的其余部分将其视为普通张量。最大的好处是将分区器与参数服务器复制一起使用,如下所示:

带tf.设备(tf.列车.副本设备设置器(ps\U任务=3)):
嵌入=tf.get_变量(“嵌入”[100000000,20],
分区器=tf.固定大小分区器(3))
这里的关键功能是。 它允许您运行3个不同的进程,称为,存储所有模型变量。大的
嵌入
张量将在这些服务器上拆分,如图所示


您能将嵌入部分放在CPU上,将其他部分放在GPU上吗?在这里查看tf.device()在设备放置中的用法,我不知道问题的上下文,但是单词嵌入通常意味着稀疏性,稀疏矩阵操作对您来说是一种选择吗?如果不是,姚张的想法是正确的,如果它不适合你的GPU,那就买一个内存更多的GPU,或者只使用内存充足的CPU。请注意,tensorflow调试器非常适合查看模型中各种张量的大小。@YaoZhang,我试过了。它似乎并没有降低GPU内存的利用率。有些事情在幕后发生,我不知道。