Tensorflow word2vec教程示例是否暗示了潜在的次优实现?

Tensorflow word2vec教程示例是否暗示了潜在的次优实现?,tensorflow,Tensorflow,机器规格: 英特尔(R)Core(TM)i7-3770处理器@3.40GHz 16GB内存 英伟达泰坦 (顺便说一句 word2vec示例(word2vec.py和word2vec_optimized.py)中存在一个bug,如果没有给出设备指令,它将出错。我添加了一个with tf.device('/cpu:0')来解决这个问题 超参数设置: 默认模型超参数+8个并发线程 使用text8作为培训数据,使用questions-words.txt作为测试 分析结果: word2vec_o

机器规格:

  • 英特尔(R)Core(TM)i7-3770处理器@3.40GHz
  • 16GB内存
  • 英伟达泰坦
(顺便说一句 word2vec示例(word2vec.py和word2vec_optimized.py)中存在一个bug,如果没有给出设备指令,它将出错。我添加了一个with tf.device('/cpu:0')来解决这个问题

超参数设置:

  • 默认模型超参数+8个并发线程
  • 使用text8作为培训数据,使用questions-words.txt作为测试
分析结果:

  • word2vec_optimized.py:171891字/秒(8个线程)

  • word2vec_optimized.py:9258字/秒(8个线程)

(优化后的版本与Mikolov的原始实现相当,而标准版本则要慢得多)

培训期间的CPU利用率大致相同(优化版本稍微高一点)

我回顾了两个实现的代码,我无法理解为什么标准实现(Word2VEC.Py)比C++手工编码内核(Word2vECKE.KNE.CC)

慢20X。 word2vec_kernel.cc似乎没有做任何特殊的加速操作(它首先进行批量随机采样,然后在单个批次中对样本运行循环)

对我来说,word2vec.py版本似乎也不是次优的,它使用标准的tensorflow操作,批处理似乎是合适的


你们有没有做过任何内部分析来找出标准版本的性能瓶颈?性能缺陷会对其他神经网络的训练性能造成威胁吗?

你们有没有做过任何内部分析来找出标准版本的性能瓶颈? A:是的。是的。分析导致我们决定编写优化版本

一般来说,性能缺陷会对其他神经网络的训练性能造成威胁吗?
答:这是一个复杂的问题,答案取决于具体情况。我不会做出这样的概括。在许多其他模型中(至少对于我玩过的一些模型),计算通常由“繁重的操作”控制,如matmul、卷积等。在这些模型中,损失及其梯度的计算相对便宜。另一方面,word2vec非常特殊,因为训练步骤基本上是嵌入查找+丢失梯度+应用梯度,因为这些操作没有“融合”,执行这些操作会产生更高的内存带宽。TF计划开发编译器优化技术来自动融合这些操作,这将在一定程度上避免,手动融合操作以优化性能的需要。

投票结束,因为这个问题是离题的:你们有没有做过任何内部分析来找出标准版本的性能瓶颈?一般来说,性能缺陷会对其他神经网络的训练性能造成威胁吗?请参阅:,或尝试在