每个大语言模型开发者都应该知道的数字
在谷歌,传奇工程师Jeff Dean整理了一份文档,名为每个工程师都应该知道的数字。对大语言模型开发者来说,拥有一套类似的数字也非常有用,可以用于快速估算。这里我们分享Anyscale使用的一些特定数字,解释它们的重要性以及如何利用它们。
GitHub版本说明
最后更新:2023-05-17
如果您认为数字存在准确性问题,请提交issue。认为还有其他应该添加到本文档的数字?请告诉我们或提交PR。
我们正在考虑下一步应该在这里添加不同模型的每秒token数等统计数据。
提示词
40-90%1:在提示词末尾添加"请简明扼要"可节省的成本
请记住,回复是按token收费的。这意味着要求大语言模型简明扼要可以为您节省大量资金。这可以扩展到不仅仅是在提示词末尾添加"请简明扼要":如果您使用GPT-4生成10个备选方案,也许可以只要求5个,节省一半的费用。
1.3:1 - 平均每个单词的token数
大语言模型是基于token运作的。Token是单词或单词的子部分,因此"eating"可能被分解为"eat"和"ing"两个token。一份750个英语单词的文档大约有1000个token。对于英语以外的语言,每个单词的token数会根据它们在大语言模型嵌入语料库中的常见程度而增加。
了解这个比率很重要,因为大多数计费是按token进行的,大语言模型的上下文窗口大小也是以token定义的。
价格2
价格当然会发生变化,但考虑到运营大语言模型的昂贵成本,本节中的数字至关重要。我们在这里使用OpenAI的数字,但您应该查看其他提供商(Anthropic, Cohere)的价格,它们在同一水平。
~50:1 - GPT-4与GPT-3.5 Turbo的成本比3
这意味着对于许多实际应用,最好使用GPT-4来生成高质量的微调数据,或用于其他模型的自动评估 - 这些可能只需要执行一次,而不是在推理周期中反复使用。使用GPT-3.5-Turbo的成本大约是GPT-4的50分之一("大约"是因为GPT-4对提示和生成的输出收费不同) - 所以您真的需要检查GPT-3.5-Turbo能做到什么程度。例如,对于摘要等任务,GPT-3.5-Turbo已经足够了。
5:1 - 使用GPT-3.5-Turbo生成文本与OpenAI嵌入的成本比
这意味着在向量存储中查找内容比要求大语言模型生成它要便宜得多。例如,在神经信息检索系统中查找"特拉华州的首府是什么?"的成本比询问GPT-3.5-Turbo要低约5倍4。与GPT-4相比,成本差异高达250倍!
10:1 - OpenAI嵌入与自托管嵌入的成本比
注意:这个数字对负载和嵌入批量大小敏感,因此请将其视为近似值。
在我们的博客文章中,我们注意到使用g4dn.4xlarge(按需价格:$1.20/小时),我们能够使用Hugging Face的SentenceTransformers(它们与OpenAI的嵌入几乎一样好)每秒嵌入约9000个token。对该速率和该节点类型进行一些基本计算表明,自托管嵌入要便宜得多(便宜10倍左右)(这还是在考虑入站和出站费用之前)。
6:1 - OpenAI微调模型与基础模型查询的成本比
在OpenAI上,为微调模型提供服务的成本是基础模型的6倍。这相当昂贵,但可能是因为基础模型可能的多租户性。这也意味着调整基础模型的提示词比微调定制模型更具成本效益。
1:1 - 自托管基础模型与微调模型查询的成本比
如果您自己托管模型,那么为微调模型和基础模型提供服务的成本基本相同:模型的参数数量是一样的。
训练和微调
~100万美元:训练一个130亿参数的模型,使用1.4万亿个token的成本
LLaMa论文提到他们使用2048个A100 80GB GPU花了21天来训练LLaMa。我们考虑过在Red Pajama训练集上训练自己的模型,然后我们计算了一下。上述数字假设一切顺利,没有崩溃,第一次就成功完成计算等。而且它涉及2048个GPU的协调。这不是大多数公司能做到的(无耻推广时间:当然,我们Anyscale可以 - 这是我们的拿手好戏!如果您想了解更多,请联系我们)。关键是训练自己的大语言模型是可能的,但并不便宜。而且每次运行都将花费数天时间。使用预训练模型要便宜得多。
< 0.001:微调与从头开始训练的成本比
这有点概括,但微调的成本可以忽略不计。例如,我们展示了您可以用大约7美元微调一个60亿参数的模型。即使按OpenAI最昂贵的可微调模型Davinci的费率,每1000个token也只需3美分。这意味着在莎士比亚全集(约100万个单词)上进行微调,大约需要40美元5。然而,微调是一回事,从头开始训练又是另一回事...
GPU内存
如果您自己托管模型,了解GPU内存非常重要,因为大语言模型会将您的GPU内存推到极限。以下统计数据专门针对推理。训练或微调需要更多内存。
V100: 16GB, A10G: 24GB, A100: 40/80GB:GPU内存容量
这可能看起来很奇怪,但了解不同类型GPU的内存容量很重要。这将限制您的大语言模型可以拥有的参数数量。通常,我们喜欢使用A10G,因为它们在AWS按需价格上每小时每个1.50到2美元,并有24G的GPU内存,而A100在AWS按需价格上每个大约5美元。
2倍参数数量:大语言模型服务的典型GPU内存需求
例如,如果您有一个70亿参数的模型,它需要约14GB的GPU空间。这是因为大多数情况下,每个参数需要一个16位浮点数(或2字节)。通常不需要超过16位精度,大多数情况下当您降到8位精度时,会开始失去分辨率(尽管在某些情况下这可能是可以接受的)。当然,也有一些努力来减少这一点,特别是llama.cpp,它通过积极量化到4位(8位影响不大)在6GB GPU上运行130亿参数模型,但这并不典型。
~1GB:嵌入模型的典型GPU内存需求
当您进行句子嵌入(这是进行聚类、语义搜索和分类任务时非常典型的操作)时,您需要一个嵌入模型,如sentence transformers。OpenAI也有自己的商业嵌入服务。
通常您不必担心嵌入在GPU上占用多少内存,它们相当小。我们甚至在同一个GPU上同时运行过嵌入模型和LLM。
>10倍:批处理LLM请求的吞吐量提升
通过GPU运行LLM查询的延迟很高:可能需要5秒,吞吐量为每秒0.2次查询。有趣的是,如果运行两个任务,可能只需要5.2秒。这意味着如果您能将25个查询打包在一起,大约需要10秒,我们的吞吐量就提高到了每秒2.5次查询。然而,请参见下一点。
~1 MB:13B参数模型输出1个token所需的GPU内存
您需要的内存量与您想要生成的最大token数直接成正比。例如,如果您想生成最多512个token(约380个词)的输出,您需要512MB。您可能会说这没什么大不了的——我有24GB可用,512MB算什么?但是,如果您想运行更大的批次,它就开始累积了。所以如果您想做16个批次,就需要8GB的空间。目前正在开发一些克服这个问题的技术,但这仍然是一个真实的问题。
速查表
下一步
请查看我们之前关于解决生成式AI基础设施问题和使用LangChain与Ray的博客系列。
如果您想了解更多关于Ray的信息,请访问Ray.io和Docs.Ray.io。
要与Ray社区联系,请加入Ray Slack上的#LLM频道或我们的讨论论坛。
如果您对我们的Ray托管服务(用于ML训练和服务)感兴趣,请查看Anyscale.com/Platform并点击"立即试用"按钮。
**Ray Summit 2023:**如果您有兴趣了解更多关于如何使用Ray构建高性能和可扩展的LLM应用程序,以及在Ray上微调/训练/服务LLM,请参加9月18-20日的Ray Summit!我们有一系列出色的主题演讲嘉宾,包括来自OpenAI的John Schulman和来自Cohere的Aidan Gomez,还有关于Ray的社区和技术讲座,以及专注于LLM的实践培训。