会话 AI 服务已经存在多年,但不论是聊天机器人,还是智能个人助理或搜索引擎,其理解能力很难达到与人类相当的水平。主要瓶颈则在于超大型AI模型的实施部署无法实现。正因如此,不论是Google、Microsoft、Facebook,还是阿里巴巴、百度等,都在模型的部署方面孜孜以求。太平洋时间13日,NVIDIA宣布重大突破:BERT训练时间实现创纪录的53分钟,推理时间缩短至2毫秒,并构建了迄今为止同类型中最大的语言模型,使得实时会话 AI与用户进行互动时更为自然。
超大模型面前,GPU再证强大可扩展性 BERT(Bidirectional Encoder Representations from Transformers)是世界上最先进的AI语言模型之一,Google于去年发布不久就刷爆AI业界。作为一种新型的语言模型,它只需一个额外的输出层对预训练BERT进行微调就可以满足各种任务,而无需再对模型进行修改,实现了在11项NLP任务上取得突破进展。在对BERT模型进行训练时,NVIDIA使用搭载了92台 NVIDIA DGX-2H系统的 NVIDIA DGX SuperPOD运行该模型的大型版本,凭借1472个NVIDIA V100 GPU的强大性能,NVIDIA将BERT-Large的典型训练时间从几天缩短至仅仅 53 分钟。此外,NVIDIA还在单独一台NVIDIA DGX-2系统上执行了BERT-Large 模型的训练任务,用时也仅为 2.8天,充分体现了GPU在会话 AI 方面的可扩展性。
推理方面,借助于运行了NVIDIA TensorRT的NVIDIA T4 GPU,NVIDIA 执行 BERT-Base SQuAD数据集的推理任务,用时仅为2.2毫秒,远低于许多实时应用程序所需的10毫秒处理阈值;与使用高度优化的CPU代码时所测得的40多毫秒相比,有着显著改进。
对此,NVIDIA 深度学习应用研究副总裁 Bryan Catanzaro 表示,“对于适用于自然语言的AI而言,大型语言模型正在为其带来革新。NVIDIA 所取得的突破性工作成果加速了这些模型的创建,它们能够帮助解决那些最为棘手的语言问题,让我们距离实现真正的会话 AI 更进了一步。 NVIDIA BERT推理解决方案Faster Transformer宣布开源 开发者们对于更大模型的需求正在日益增长,NVIDIA 研究团队基于Transformer构建并训练了世界上最大的语言模型。Transformer是BERT的技术构件,正被越来越多的其他自然语言AI模型所使用。NVIDIA定制的模型包含83亿个参数,是BERT-Large的24 倍。 BERT是2018年10月由Google推出的一个大型计算密集型模型,其为自然语言理解奠定了基础。通过微调,它可以应用于广泛的语言任务,如阅读理解、情感分析或问答。 而Transformer是一种通用高效的特征抽取器,2017年12月在Google的论文“Attention is All You Need”中被首次提出,将其作为一种通用高效的特征抽取器。目前,Transformer已被多种NLP模型采用,比如BERT以及XLNet,这些模型在多项NLP任务中都有突出表现。在NLP之外, TTS,ASR等领域也在逐步采用Transformer。可以预见,Transformer这个简洁有效的网络结构会像CNN和RNN一样被广泛采用。 然而,虽然Transformer在多种场景下都有优秀的表现,但是在推理部署阶段,其计算性能却受到了巨大的挑战:以BERT为原型的多层Transformer模型,其性能常常难以满足在线业务对于低延迟(保证服务质量)和高吞吐(考虑成本)的要求。以BERT-BASE为例,超过90%的计算时间消耗在12层Transformer的前向计算上。因此,一个高效的Transformer 前向计算方案,既可以为在线业务带来降本增效的作用,也有利于以Transformer结构为核心的各类网络在更多实际工业场景中落地。 于是,NVIDIA 队针对Transformer推理提出了性能优化方案——Faster Transformer。Faster Transformer是一个开源的高效Transformer实现,相比TensorFlow XLA 可以带来1.5-2x的提速。 Faster Transformer 是NVIDIA 针对Transformer推理提出的性能优化方案,这是一个BERT Transformer 单层前向计算的高效实现,代码简洁明了,后续可以通过简单修改支持多种Transformer结构。目前,Faster Transformer已经开源。 Faster Transformer底层由CUDA和cuBLAS实现,支持FP16和FP32两种计算模式,其中FP16可以充分利用Volta和Turing架构GPU上的Tensor Core计算单元。 Faster Transformer共接收4个输入参数。首先是attention head的数量以及每个head的维度。这两个参数是决定Transformer网络结构的关键参数。这两个参数的动态传入,可以保证Faster Transformer既支持标准的BERT-BASE(12 head x 64维),也支持裁剪过的模型(例如,4 head x 32维),或者其他各式专门定制化的模型。其余两个参数是Batch Size 和句子最大长度。出于性能考虑,目前句子最大长度固定为最常用的32,64 和128三种,未来会支持任意长度。 Faster Transformer对外提供C++ API, TensorFlow OP,以及TensorRT Plugin三种接口。 至于Faster Transformer的使用方法共有两种 第一种在TensorFlow中使用Faster Transformer:在TensorFlow中使用Faster Transformer最为简单。只需要先import .so文件,然后在代码段中添加对Faster Transformer OP的调用即可。 第二种使用C++ API或者TensorRT 调用Faster Transformer:考虑到封装成TensorFlow OP会引入一些额外的开销,建议用户直接使用C++ API或者TensorRT Plugin的方式进行集成。目前这两种方式不支持直接解析训练好的模型。Transformer层所需要的weights参数,需要用户手动从训练好的模型中导出。调用方式相对简单,将导出的weights赋值给参数结构体,创建相应的对象,调用initialize或者build_engine函数初始化对象。运行时,每次调用forward或者do_inference即可。
领取专属 10元无门槛券
私享最新 技术干货