关于PyTorch和TensorFlow谁更好的争论从未停止过。开源社区的支持和上手的容易程度是重要的参考。还有人说:学术界用PyTorch,工业界用TensorFlow。不过,还有一个因素也不容忽视,那就是两人的实际表现。没关系,怎么不给分呢?!近日,“Huggingface”的一位工程师使用NLP中的Transformer模型在两大平台上测试了一组推理速度。Huggingface虽然只是一家初创公司,但在NLP领域却有着不俗的口碑。他们在GitHub上的开源项目,仅用一个API就可以调用27个NLP模型,广受好评,目前已经获得了15000个star。PyTorch和TensorFlow哪个更快?下面用详细的评测数据来告诉大家。运行环境笔者分别在PyTorch1.3.0和TenserFlow2.0上测试了CPU和GPU的推理性能。两种不同环境下的具体硬件配置如下:CPU推断:在谷歌云平台上使用n1-standard-32硬件,即32个vCPU,120GB内存,2.3GHzIntelXeon处理器。GPU推理:在谷歌云平台上使用自定义硬件,包括12个vCPU、40GB内存和单个V100GPU(16GB显存)。推理时间是在测试期间使用本机Python模块timeit测量的。每个实验重复30次,然后将这30个值取平均,得到平均推理时间。NLP模型的BatchSize分别设置为1、2、4、8,序列长度为8、64、128、256、512、1024。测试结果不多说,先上benchmark结果:在大多数情况下,两个平台可以达到相似的结果。与PyTorch相比,TensorFlow在CPU上普遍较慢,但在GPU上更快:在CPU上,PyTorch的平均推理时间为0.748s,而TensorFlow的平均推理时间为0.823s。在GPU上,PyTorch的平均推理时间为0.046s,而TensorFlow的平均推理时间为0.043s。以上数据是所有模型的总平均结果。结果表明,输入大小(BatchSize×sequencelength)越大,对最终结果的影响越大。当输入太大时,PyTorch会耗尽内存。作者从结果中删除了这些部分,因此这会使结果偏向PyTorch。一般来说,PyTorch模型比TensorFlow模型更容易耗尽内存。除了Distilled模型外,当输入大小达到8的批量大小和1024的序列长度时,PyTorch会耗尽内存。有关更完整和详细的列表,请参阅本文末尾的Google文档链接。除了对两个平台的加速工具进行初步测试外,笔者还使用了两个平台特有的加速工具,看看它们对模型推理速度的提升有多大。TorchScript是PyTorch创建可序列化模型的方法,这些模型可以在不依赖Python的不同环境(例如C++环境)中运行。TorchScript似乎非常依赖于模型和输入大小:使用TorchScript可以在XLNet上产生永久的性能提升,而在XLM上使用它可能不可靠;大输入的性能。平均而言,使用TorchScript跟踪的模型推理速度比使用相同PyTorch的非跟踪模型快20%。XLA是一种线性代数编译器,可加速TensorFlow模型。作者仅在基于TensorFlow的自动聚类功能的GPU上使用它,该功能编译某些模型的子图。结果显示:启用XLA提高了速度和内存使用率,并提高了所有模型的性能。大多数基准测试的运行速度提高了1.15倍。在一些极端情况下,推理时间减少了70%,尤其是对于小输入。最后,作者还在谷歌文档列表中添加了一个“Training”标签,或许很快你就能看到两个平台上训练和测试的对比。摆在这场考验面前的唯一障碍可能就是资金。传送门原文链接:https://medium.com/huggingface/benchmarking-transformers-pytorch-and-tensorflow-e291??7fb891c2完整跑分榜:https://docs.google.com/spreadsheets/d/1sryqufw2D0XlUH4sq3e9Wnxu5EAQkaohzrJbd5HdQ_w/edit#gid=0
