百分点认知智能实验室出品:TPU与BERT的邂逅
1 实验室为什么要采用TPU
一方面,如果采用串行的方法进行调参,则NLP算法工程师需要花费大量的时间进行等待,从而严重降低了其单位时间的产出。另一方面,如果采用并行的方式进行调参,则消耗的算力会显著的增加。因此,在预训练语言模型已经改变NLP领域的时代,如何探索出一种高效省钱的NLP算法工作流程,将是NLP算法研究员和工程师面临的普遍问题。 值得注意的是,这个问题并非是单纯的增加GPU数量就可以解决的,其原因在于在一些训练任务中,并非增加batchsize也可以达到同样的效果。因此在理想状况下,NLPer需要的是在短期内可以显著减少预训练语言模型计算时间的高效芯片,而不仅仅是大量的简单的堆叠现有的芯片。 为了尝试解决这个问题,百分点认知智能实验室在国内首先与谷歌合作,对其提供的TPU进行比较全面的测评,并取得了积极的效果。由于TPU的中文文档和用例相对匮乏,我们首先对TPU进行简单的介绍。 2 关于TPU的简单介绍 硬件配置 训练步数 运算时间(天) 总花费 TPU-V2(8核心) 500k 约1.2天 $38.9 Tesla V100*8 500k 约7天 $97 硬件配置 运算时间(秒) 总花费 TPU-V2(8核心) 约610秒 $0.23 Tesla V100*8 约4080秒 $6.6 图二:创建VM实例的界面 在该页面的选项中,有几个是比较重要的。 1. Machinetype。该选项决定了VM实例的线程数和内存数量的配置。一般来说,在配置系统阶段,只选用最小的线程数和内存数量即可。而如果开始租用TPU,由于读写TensorFlowcheckpoint由CPU完成,且网络带宽与线程数成正比,在TPU开始训练后,不宜选用过小的线程数。 接下来创建TPU界面: 图三:创建TPU界面 在创建TPU的页面,有几个选项值得说明: 1. TPUtype一项中,会出现v2-8,v3-8,v3-32等选项的说明(注意不同的区域提供不同型号的TPU)。其中v2或v3为tpu的型号,-8或-32则为核心数量。最小的核心数量为8核心。在该模式下,我们可以选用抢占式的模式。而对于大于8核心的选项,则意味着TPUpod。该模式尚不支持抢占式(但是抢占式正在谷歌内部进行内测)。 2. IPaddress range一项中,如不涉及到部署,则可以填写10.1.x.0,其中x为大于101的数字(如102,103等)。值得注意的是,如果之前已有TPU填写了某范畴,而新创建的TPU的IP地址范畴和之也有重叠,则新创建的TPU会覆盖掉原先的实例。 3. Preemptibility一项为是否采用抢占式实例的选项。如前文所述,只有V2-8和V3-8两种型号支持创建抢占式实例。 如果以上选项均已设定完毕,则可以点击CREATE按钮创建TPU实例,然后就可以顺利运行TPU程序了。 5 实验室使用TPU的心得 1. TPU的使用门槛很高,TPU自开发以来,拥有较少的代码示例和文档,官方提供的实例也不够完善,对于初学者不够友好。尤其由于TensorFlow静态图的本质,这使得基于TPU的Debug比较困难; 2. 究其根本TPU是围绕TensorFlow框架设计的硬件,实际使用过程中TPU硬件和TensorFlow版本具有较大的相互依赖性,大大减少了其可兼容性,使得使用其他人工智能框架的项目很难高效低成本地运用TPU进行运算; 3. 由于TensorFlow本身是基于静态图的,而TPU从本质上也只能支持静态图,这使得需要依赖于动态图的应用难以在TPU上运行。这类应用包括semantic parsing和图网络等。 当然在TPU新技术的引进下,实验室会迎来新的转机和工作模式。随着计算效率的提高,实验室的算法研究员可以将冗长的计算等待时间极大缩短,并且提升整体实验室的研究效率,增强实验项目的可控性。之前,研究员因为考虑到时间成本问题,会采用多个假设并行验证的工作方式。因为每个实验都有风险出现问题,并行实验会使得研究员无法估测每个验证的具体成功率,很有可能耗费大量算力后空手而归。如今,研究员可以将所有假设串联并一一快速验证,显著提高实验的效率,大大降低了项目的成本风险,增加可预测性。

