智能芯片创业公司 Graphcore 推出的 IPU(智能处理单元)究竟实力如何?近日,该公司的开发人员使用 Poplar 应用库中的各种机器学习应用对 IPU、GPU 和 CPU 进行了性能对比。结果表明这种芯片的确可以像宣传的那样「提升 AI 应用 10 倍到 100 倍处理速度」。
Graphcore 的智能处理单元(IPU)是一种全新的 AI 加速器,可为现在和未来的机器学习工作负载带来前所未有的性能提升。其独特的大规模并行多任务计算能力,可以让任务在单个或多个 IPU 中的同步执行,革新的数据交流结构和巨大的板载 SRAM 的组合赋予其闻所未闻的使用大范围机器学习算法进行训练和推理的能力。
在于 2016 年 10 月,Graphcore 公布 A 轮融资时,我们对 IPU 的性能做出了三项声明:
1. 相比其它 AI 加速器,它能提升 10 倍到 100 倍的性能。
2. 它不仅擅长训练,还擅长推理。
3. 它能使机器学习开发者革新那些甚至不能在最好的替代架构中运行的模型和算法。
在那之后,我们就被对声明提供更多技术细节的要求所淹没。今天,我们很高兴能分享三个预备性的基准测试以确证我们的早期目标。
我们从一开始就明白,一个完整的解决方案不仅仅是一种新型的芯片设计,软件基础建设需要具备综合性和易用性,使得机器学习开发者能尽快让硬件适应他们的需求。因此,我们很早就集中精力构建了一个完整的软件堆栈,以确保 IPU 一开始就可以获得实际应用。
我们的 Poplar 图形编程框架和应用库提供了这些能力。我们开发了 TensorFlow 的移植接口以使 Poplar 库能在其它使用中的机器学习框架中得到支持。有了这些软件工具,我们可以通过周期精确的芯片模拟和真实的硬件运行多种实际应用。
CNN 模型训练(甚至在 batch size 很小的情况下)
卷积神经网络(CNNs)在图像处理中获得了广泛应用。一个 CNN 模型通常包含了多个层以进行多种卷积计算,卷积计算的参数需要用训练算法学习得到,通常以随机梯度下降(在图像数据上重复运行模型,计算模型梯度然后更新模型参数)训练。
在训练机器学习模型的时候,batch size 是指你需要处理的数据的数目(和当前参数集平行)。由于必须在更新参数之前先处理一个完整的 batch,batch size 限制了更新参数的频率。用大型的 batch size 训练模型得到的结果可能并不理想。IPU 系统的一个特性是即使用很小的 batch size 的情况下也能得到很好的结果。
以下图表展示了在 ImageNet 数据集上训练 ResNet-50 神经网络学习图像识别的(每秒训练图像的数目)评估性能。
即使在 batch size 较小的时候也能获得巨大的性能增益,当扩展到 8-C2 IPU 加速器卡的时候我们只使用了大小为 64 的 batch size。
无论从哪个角度上看,使用 IPU 系统都能获得巨大的性能飞跃,获得超越所有现有技术的表现。例如,使用一个功耗 300W 的 GPU 加速器(和一个 C2 加速器的耗能预算相同)获得的最佳性能大约为每秒训练 580 张图像。
LSTM 推断
循环神经网络经常被用于处理序列数据,例如,在翻译或文本到语音应用中。LSTM(长短期记忆)网络是循环神经网络的一种形式,其中包含的一些元素可以在形成输出时选择是否记忆被处理序列中的历史数据。
所有循环神经网络都包含了对于数据的依赖性,这对目前的芯片架构提出了挑战。数据依赖性限制了并行处理的数量,同时,从内存中获取的每次操作数据体大小也受到了限制。IPU 与 Poplar 库可以通过大量板载内存和灵活的计算和数据传递机制很好地应对这些限制。
对于执行推理的服务器,还有一个问题在于等待推理结果的最短延迟时间。下表展示了单层 LSTM 网络在不同的延迟要求下,IPU 与 GPU 的表现对比:
该单层测试参数的数据来自百度。
百度发布的 DeepBench 测试套件包含了用于深度学习应用的典型循环网络层。
生成网络
我们需要研究的最后一类应用是生成神经网络。这是一种循环神经网络,每单位时间生成新的数据。例如,WaveNet 每次会生成一个音频波形,提供文本到语音转换能力。我们在这里研究的是百度 Deep Voice——WaveNet 的一个变种。
我们的应用试验了两类性能指标。首先,生成一个样例需要多少时间。在实践中,样本的生成速度需要足够快,这样才能生成实时数据流(例如 16Khz);如果可以生成实时数据流,我们还需考虑可以生成多少个声道(产生不同的说话者)。
下表展示了 Deep Voice 生成算法在 IPU 上与其他平台(CPU、GPU)性能对比的结果:
以上这些实验仅作为测试的范例。IPU 与 Poplar 软件堆栈提供了全面灵活的可编程平台,在未来的一年里还会有更多的应用加入其中。目前 Poplar 框架已与部分用户分享,在几个月之内,相关文档和代码将会公开。