汇总成本、延迟、token 限制等 LLM 应用开发的核心数字,高讨论度反映这是开发者实战中迫切需要的参考资料。
在 Google,传奇工程师 Jeff Dean 曾整理过一份名为《每位工程师都应该知道的数字》的文档。对于 LLM 开发者来说,如果也有一组类似的数字,用于快速进行粗略估算,会非常实用。本文将分享 Anyscale 团队经常使用的一些关键数字,解释它们为什么重要,以及如何利用它们获得优势。
最后更新:2023-05-17
如果你认为文中数字的准确性存在问题,请提交 issue。如果你觉得本文还应该加入其他数字,也请告诉我们或提交 PR。
我们正在考虑下一步补充一些不同模型每秒处理 token 数量的统计数据。
务必记住,模型响应是按 token 收费的。这意味着,要求 LLM 简明扼要,可以为你节省大量费用。
这种思路并不只限于在 prompt 后面加一句“be concise”:如果你正在使用 GPT-4 生成 10 个备选方案,也许可以只让它生成 5 个,把另一半的钱省下来。
LLM 以 token 为基本单位运行。token 可以是一个完整单词,也可以是单词的一部分。例如,“eating”可能会被拆成“eat”和“ing”两个 token。一篇包含 750 个英文单词的文档,大约相当于 1000 个 token。对于英语之外的语言,每个单词对应的 token 数量会有所增加,具体取决于该语言在 LLM embedding 语料库中的常见程度。
了解这一比例非常重要,因为大多数服务都按 token 计费,而 LLM 的上下文窗口大小同样以 token 定义。
价格当然可能发生变化,但考虑到 LLM 的运行成本非常高,本节中的数字至关重要。这里我们使用 OpenAI 的数据,不过其他值得关注的供应商——如 Anthropic、Cohere——价格也大致处于同一区间。
这意味着,对于许多实际应用,更适合使用 GPT-4 的场景包括:生成高质量的 fine-tuning 数据,或者自动评估其他模型。这些任务通常只需要执行一次,而不是让 GPT-4 始终处于推理链路的核心位置。
使用 GPT-3.5-Turbo 的成本大约只有 GPT-4 的五十分之一。之所以说“大约”,是因为 GPT-4 对 prompt 输入和生成输出采用不同的计费标准。因此,你确实需要验证一下,GPT-3.5-Turbo 究竟能在多大程度上满足需求。例如,对于摘要生成之类的任务,GPT-3.5-Turbo 已经绰绰有余。
这意味着,从 vector store 中检索内容,要比让 LLM 生成内容便宜得多。例如,对于“What is the capital of Delaware?”这个问题,通过神经信息检索系统查找答案,其成本大约只有询问 GPT-3.5-Turbo 的五分之一⁴。若与 GPT-4 相比,成本差距更是高达惊人的 250 倍!
注意:这个数字对系统负载和 embedding batch size 非常敏感,因此请将其视为近似值。
我们曾在一篇博客文章中提到,使用 g4dn.4xlarge 实例(按需价格:$1.20/hr),配合 Hugging Face 的 SentenceTransformers,能够达到每秒约 9000 个 token 的 embedding 处理速度,而 SentenceTransformers 的效果几乎和 OpenAI 的 embeddings 一样好。
根据这一处理速度和节点类型做一些基本计算,可以发现自托管 embeddings 的成本要低得多,大约便宜 10 倍。这甚至还没有考虑 ingress 和 egress 费用等因素。
在 OpenAI 上提供 fine-tuned 模型服务,成本是基础模型的 6 倍。这个价格相当高昂,但考虑到基础模型可能支持多租户,这或许也有一定道理。
这也意味着,与 fine-tune 一个定制模型相比,调整基础模型的 prompt 在成本上划算得多。
如果你自行托管模型,那么提供 fine-tuned 模型服务的成本与提供基础模型服务的成本基本相同,因为它们的参数数量相同。
LLaMa 论文中提到,他们使用 2048 块 80GB A100 GPU,花费了 21 天时间训练 LLaMa。
我们曾考虑使用 Red Pajama 训练集训练自己的模型,后来计算了一下成本。上面的数字还建立在一切顺利、没有任何程序崩溃、计算第一次就成功等前提之上。此外,它还涉及对 2048 块 GPU 的协调管理。这不是大多数公司能够做到的事情。
无耻地插播一句:当然,我们 Anyscale 可以做到——这正是我们的核心业务!如果你想进一步了解,欢迎联系我们。
重点在于,训练自己的 LLM 是可行的,但并不便宜。而且每一次训练都真的需要数天才能完成。使用预训练模型要便宜得多。
这个数字多少有些概括,但 fine-tuning 的成本确实可以忽略不计。例如,我们曾展示过,只需大约 7 美元,就可以 fine-tune 一个拥有 60 亿参数的模型。
即使按照 OpenAI 最昂贵且支持 fine-tuning 的模型 Davinci 的费率计算,每 1000 个 token 也只需 3 美分。这意味着,如果要使用莎士比亚全集——大约 100 万个单词——进行 fine-tuning,成本约为 405 美元。
不过,fine-tuning 是一回事,从头训练则完全是另一回事……
如果你自行托管模型,那么理解 GPU 内存非常重要,因为 LLM 会把 GPU 内存推到极限。下面的统计数据专门针对推理。训练或 fine-tuning 所需的内存要多得多。
这听起来可能有些奇怪,但了解不同类型 GPU 的内存容量非常重要,因为它会限制 LLM 可以拥有的参数数量。
一般来说,我们喜欢使用 A10G,因为按照 AWS 的按需价格,每块 A10G 每小时约为 1.50 至 2 美元,并配备 24GB GPU 内存;相比之下,按照 AWS 的按需价格,每块 A100 每小时大约需要 5 美元。
例如,如果你有一个 70 亿参数的模型,它大约需要 14GB GPU 内存。这是因为在大多数情况下,每个参数都需要一个 16-bit float,也就是 2 bytes。
通常没有必要使用超过 16-bit 的精度;而当精度降低到 8-bit 时,大多数情况下会开始损失分辨率,不过在某些场景中这可能可以接受。
当然,也有一些降低内存占用的尝试,其中最值得注意的是 llama.cpp。它通过激进地量化到 4 bits,可以在一块 6GB GPU 上运行一个 130 亿参数模型;量化到 8 bits 时,影响也不会太大。但这并不是典型情况。
每当你执行句子 embedding 时——这在聚类、语义搜索和分类任务中非常常见——都需要使用 sentence transformers 之类的 embedding 模型。OpenAI 也提供商业化的自有 embeddings 服务。
通常不需要担心 embeddings 会占用多少 GPU 内存,因为它们相当小。我们甚至曾在同一块 GPU 上同时运行 embedding 模型和 LLM。
在 GPU 上执行一次 LLM 查询的延迟非常高。例如,一次查询可能需要 5 秒,吞吐量为每秒 0.2 个查询。
但有意思的是,如果同时运行两个任务,可能只需要 5.2 秒。这意味着,如果能把 25 个查询打包在一起执行,总共可能只需约 10 秒,吞吐量就能提升到每秒 2.5 个查询。
不过,请继续看下一点。
你需要的内存量,与希望生成的最大 token 数量成正比。
例如,如果你希望生成最多 512 个 token 的输出——约 380 个单词——就需要 512MB 内存。你可能会说,这没什么大不了的:我有 24GB 可用内存,512MB 算什么?
但如果你希望运行更大的 batch,内存占用就会逐渐累积。因此,如果想以 16 为 batch size 运行,就需要 8GB 内存空间。
目前已经有人在开发能够解决这个问题的技术,但它仍然是一个现实存在的问题。
请参阅我们此前关于解决 Generative AI 基础设施问题,以及结合 Ray 使用 LangChain 的系列博客。如果你想进一步了解 Ray,请参阅 Ray.io 和 Docs.Ray.io。若想与 Ray 社区交流,可以加入 Ray Slack 中的 #LLM 频道或我们的 Discuss 论坛。如果你对我们用于 ML Training 和 Serving 的 Ray 托管服务感兴趣,请访问 Anyscale.com/Platform,并点击“Try it now”按钮。
Ray Summit 2023:如果你希望深入了解如何使用 Ray 构建高性能、可扩展的 LLM 应用,以及如何在 Ray 上 fine-tune、训练和部署 LLM,欢迎参加 9 月 18 日至 20 日举行的 Ray Summit!
届时将有一系列优秀的主题演讲嘉宾,包括来自 OpenAI 的 John Schulman 和来自 Cohere 的 Aidan Gomez;还会有关于 Ray 的社区分享与技术演讲,以及以 LLM 为重点的实战培训。
基于 2023-05-08 使用一组 prompt 对 GPT-3.5-Turbo 进行的实验。↩
基于 2023-05-08 使用一组 prompt 对 GPT-3.5-Turbo 进行的实验。↩
数据于 2023-05-08 取自 http://openai.com/pricing。↩
数据于 2023-05-08 取自 http://openai.com/pricing。↩
GPT-4:prompt 每 1000 个 token 收费 6 美分,生成内容每 1000 个 token 收费 12 美分(32,000 上下文窗口版本;8,000 上下文窗口版本的价格为其一半)。GPT-3.5 Turbo:每 1000 个 token 收费 0.2 美分。↩
GPT-4:prompt 每 1000 个 token 收费 6 美分,生成内容每 1000 个 token 收费 12 美分(32,000 上下文窗口版本;8,000 上下文窗口版本的价格为其一半)。GPT-3.5 Turbo:每 1000 个 token 收费 0.2 美分。↩
这里假设 vector lookup 是“免费的”。它实际上并非免费,但使用的是 CPU——便宜得多——而且速度相当快。↩
这里假设 vector lookup 是“免费的”。它实际上并非免费,但使用的是 CPU——便宜得多——而且速度相当快。↩
1 million words / 0.75 tokens/word / 1000*0.03 = $40。↩
1 million words / 0.75 tokens/word / 1000*0.03 = $40。↩