在现代 CPU 和 GPU 上,大的批处理量对于计算效率是必要的,这样能够分摊参数加载和更新的开销。如果门控网络为每个样本从 n 个专家中选择 k 个,则对于一批 b 个样本来说,每个专家接收的批次要远远小于 b 个样本。这导致随着专家数量的增加,朴素 MoE 的实现变得非常低效。这种收缩批处理问题的解决方案是使原始批处理量尽可能大。但是,批量大小多受存储前进和后退之间激活所需的存储器的限制。由此,我们提出了以下技术用于增加批量大小: 混合数据并行性和模型并行性(Mixing Data Parallelism and Model Parallelism):在传统的分布式训练设置中,不同设备上的模型的多个副本异步处理不同批次的数据,并且通过一组参数服务器来同步参数。在我们的技术中,这些不同的批次同步运行,以便它们可以组合为 MoE 层。 利用卷积性:在我们的语言模型中,开奖,我们对上一层的每个时间步长应用相同的 MoE。 如果我们等待上一层完成,我们可以将 MoE 作为一个大批次,应用于所有时间步骤。这样做会将输入MoE 层批次大小增加 n 倍,n = 展开时间步长的数量。 增加 Recurrent MoE 层的批量大小:我们认为更强大的模型可能需要循环地使用 MoE。例如,可以用 MoE 代替 LSTM 或其他 RNN 的权重矩阵。可惜,这样做会破坏上面提到的利用卷积性,因为在一个时间步长对 MoE 的输入取决于在先前时间步长的 MoE 的输出。Gruslys 等人(2016)描述了一种技术,通过重新计算正向激活(forward activations),大幅减少了展开的 RNN 中存储的激活的数量。使用这种技术就能使批处理量大大增加。 3.2 带宽 分布式计算中的另一个主要性能问题是网络带宽。 由于专家是固定的(见上文)并且门控参数的数量很小,所以大多数信息传输都需要在网络中发送专家的输入和输出。为了保持计算效率,专家计算与其输入和输出的大小的比率,必须超过计算设备的计算与网络容量的比率。对于 GPU 而言,这可能是数千比一。在实验中,我们使用专家与一个含有上万个 RELU 激活单位的隐含层,这样计算与输入和输出的比率就等于隐藏层的大小。因此,我们可以简单地通过使用更大的隐藏层或使用更多的隐藏层来提高计算效率。 4. 平衡专家的利用率(Balancing expert utilization) 略 5. 实验及结果 5.1 10 亿语言建模基准 下图(图2)展示了 MoE 在 10 亿词汇语言建模基准上与目前最先进技术之间结果的比较。左图是测试困惑度(test perplexity)曲线,作为具有类似计算预算(大约每时间步长800万次运算)的模型的模型容量函数。右图是作为计算预算函数的测试困惑度(test perplexity)。下面右边的图中,上边的线表示(Jozefowicz et al., 2016)的 LSTM 模型,下边的线表示具有不同计算预算的 40 亿个参数的 MoE 模型。 表1:高容量 MoE 增强模型在不同计算预算上的结果,与此前发表的最佳结果(Jozefowicz et al., 2016)的比较。 5.2 1000亿词汇谷歌新闻数据库 图3显示了在100亿词(上边的线)和1000亿词(下边的线)的数据上训练之后的作为容量函数的测试困惑度。当训练数据超过1000亿词汇时,测试困惑度显着提高到65536个专家(680亿个参数),比计算匹配的基线降低39%,但减少了131072个专家,这可能是由于稀疏性太高。两条线之间的差距扩大表明增加的模型能力对更大的训练集有利。即使在65536专家(99.994%层稀疏)上,该模型的计算效率可保持在 0.72 TFLOPS / GPU。 图3:在1000亿词的语料库上的语言建模。模型具有类似的计算预算(800万运算/时间步长)。 5.3 WMT'14 英法翻译、英德翻译和 Google Production 英法翻译结果 5.4 多机翻译结果 论文地址:https://arxiv.org/pdf/1701.06538v1.pdf 相关讨论 (责任编辑:本港台直播) |