在生产中部署GPT-NeoX 20B是一个挑战,我们在NLP Cloud学到了很多东西......在这篇文章中,我们将告诉你更多与使用GPT-NeoX 20B有关的几个技巧,特别是如何在生产中处理DeepSpeed问题。

GPT-NeoX 20B是截至本文写作时最大的开源自然语言处理模型。
它是由EleutherAI在2周前发布的。经过一年的艰苦工作,它被训练成200亿个参数,充满了挑战。他们的主要困难之一似乎是建立一个适当的并行架构的能力,以便该模型可以在多个GPU上有效地训练。
他们之前的模型,GPT-J,是在谷歌TPU上训练的,并被设计为在TPU上使用。GPT-NeoX 20B的内部架构完全不同,是为了在GPU上使用。我们的想法是,它应该是一系列更大的模型中的第一个(这里的目标是追赶GPT-3)。
GPT-NeoX 20是一个文本生成模型,这意味着它可以为你编写文本,实际上可以实现几乎所有的自然语言处理用例,并具有很高的准确性:博客文章生成、聊天机器人、文本分类、情感分析、关键词提取、代码生成、实体提取、意图分类、问题回答,以及更多。
毫无疑问,许多研究人员和公司将利用这种新模式,并获得巨大的成果。但有一个挑战:如何部署GPT-NeoX 20B?
当人们试图在生产中部署GPT-NeoX 20B时,面临的第一个挑战是它需要先进的硬件。
在消费者硬件上部署GPT-J仍然是可能的,即使它非常昂贵。例如,你可以把它部署在一个非常好的CPU上(即使结果慢得令人痛苦),或者部署在一个先进的游戏GPU上,如NVIDIA RTX 3090。但GPT-NeoX 20B太大了,已经不可能了。
基本上GPT-NeoX需要至少42GB的VRAM和40GB的磁盘空间(是的,我们在这里谈论的是纤细的FP16版本)。很少有GPU符合这些要求。主要的是NVIDIA A100、A40和RTX A6000。
这些GPU不仅非常昂贵,而且由于全球半导体短缺,如今也很难买到它们中的一个。
这里的最佳解决方案是采用多GPU架构。
如果你不能把你的模型装进一个单一的GPU,你可以尝试把它分成几个GPU。
这是一个有趣的选择,原因有二。首先,横向扩展基础设施通常比纵向扩展更便宜。对服务器来说是这样,对GPU来说也是这样。其次,与英伟达A40等大型GPU相比,你更容易获得几个小型GPU,如英伟达Tesla T4。
不幸的是,将一个机器学习模型分割成几个GPU是一个技术挑战。Hugging Face做了一篇关于模型并行化和你的选择的好文章。在这里阅读。但幸运的是,EleutherAI设计了GPT-NeoX 20B,所以它很容易在几个GPU上并行化,无论是训练还是推理。
GPT-NeoX架构是基于Deepspeed的。Deepspeed是微软的一个框架,最初是为了在几个GPU之间进行并行训练而设计的,它也越来越多地被用于推理。EleutherAI做了所有艰苦的工作,因此并行化GPT-NeoX就像改变配置文件中的一个数字一样简单。

Extract from the GPT-NeoX docs about parallelism
然而,在生产中部署Deepspeed,通过API进行在线推理是很难的......Deepspeed在设计上并不容易集成到网络服务器中。在NLP Cloud,我们学到了很多东西,但经过努力,我们终于想出了一个有效的方法,让Deepspeed和GPT-NeoX在我们的API后面工作。
因此,让我们假设你成功地配置了适当的硬件,并正确地部署了GPT-NeoX 20B与Deepspeed。现在有几个注意事项你应该注意。
首先,与GPT-J相比,参数(top k、top p和温度)对模型的影响不一样。因此,如果你设法为GPT-J找到一个好的配置,不要想当然:你必须用GPT-NeoX做新的测试。
最后,即使输入大小可以达到2048个代币,它也需要比上面提到的基本42GB更多的内存。
GPT模型是相当慢的,GPT-NeoX 20B也不例外。因此,为了提高你的应用程序的吞吐量,你可能想研究一个批量推理的解决方案。
就目前而言,我们在NLP Cloud还没有想出一个好的解决方案。
GPT-NeoX的代码是这样设计的:人们可以在一个单一的请求中同时执行几个推理。但在我们的测试中,响应时间随着推理数量的增加而线性增长,这有点违背了批量推理的目的......
GPT-NeoX 20B肯定很难在生产中部署。文本生成的质量是惊人的,但很少有人会有能力实际安装这种模式。
似乎比以往任何时候都更需要依靠像NLP Cloud这样的云服务来使用这种模式。
如果你对这篇文章有反馈意见,请不要犹豫,与我们联系,听到你的意见将是非常好的。
Julien Salinas
NLP Cloud的首席技术官