原文链接:https://www.getzep.com/text-embedding-latency-a-semi-scientific-look/
未经许可,禁止转载!
在谈论机器学习模型性能时,常日指的是模型在特界说务上的表现。对付数据科学家和机器学习工程师来说,这包括准确率、丢失等度量。然而,随着谈天机器人和智能代理等基于文本天生的 AI 运用成为我们日常生活的一部分,模型延迟成为另一个显著影响用户体验的性能指标,即模型天生结果所需的韶光。如果天生过程较慢,将会影响谈天用户的体验。

OpenAI 的 GPT-3.5-Turbo 模型显著缩短了流式相应的首字节相应韶光。然而,构建发送给 GPT-3.5-Turbo 模型的提示常日是一个冗长且缓慢的过程,可能须要多次调用其他模型,以及第三方或内部做事,以天生被 GPT-3.5-Turbo 用来天生相应的情境学习内容。
虽然我们常日在创建提示之前就将文件嵌入,但搜索词的嵌入必须在实行搜索时实时完成。因此,嵌入的速率成为天生 GPT-3.5-Turbo 结果的关键。
为什么向量数据库和嵌入模型是 AI 技能的关键
最常见的提示天生任务之一是利用向量数据库从文档凑集中检索干系信息。向量数据库存储了一个被称为嵌入的文档的数学表示,并利用近似最近邻等技能比较文档之间,或者与搜索词的相似度。在机器学习中,这个任务被称为语义搜索。
嵌入是由专门设计用于实行此任务的措辞模型天生的。有许多不同的嵌入模型,每个模型都有独特的性能特色:准确性、速率、存储和内存利用等。它们也可能是多措辞的,或者针对特定的自然措辞进行演习。有些乃至针对特定的商业或科学领域进行演习。
虽然文件常日在创建提示之前就被嵌入,但是搜索词嵌入必须在实行搜索时即时创建。这使得嵌入的速率成为天生 LLM 结果的关键路径。
对嵌入模型延迟的半科学调查
正如我们上文所谈论的,缓慢的文本天生影响用户体验,而天生文本的关键任务之一便是利用语义搜索查找干系内容。虽然我们该当考虑嵌入模型的本钱、内存利用和履行的便利性,但这次调查仅关注嵌入的速率,以及在有的情形下,对语义相似性搜索任务的MTEB 基准性能。
我们测试了两个嵌入 API 做事和几个由 sentence-transformers 包支持的开源嵌入模型。我们选取的开源模型代表了在 MTEB 基准测试中得分高,且在 CPU 上表现良好的模型族。还有许多其他模型,你该当根据你的利用场景进行实验,以基准作为辅导,而非铁律。
API 测试在 GCP 和 AWS 上进行,这符合了当今许多运用的场景。本地模型在几个云实例和我的 MacBook Pro M1(配备16GB RAM)上进行了测试。详细信息请见下文。
结果
择要:Google 的新嵌入 API 比 OpenAI 的快得多,而本地 CPU 上的开源模型最快。Google 的模型尚无检索基准,但 OpenAI 的模型在 MTEB 上得分最高。如果延迟是你的关注点,你可以考虑 Google 或开源模型。
OpenAI 的 text-embedding-ada-002 模型是许多开拓者的首选。由于运用程序常常利用 OpenAI 的模型,因此开拓者利用同样的 API 来嵌入文档是合理的。OpenAI 最近也大幅降落了这个 API 的价格。
事实证明,无论是从 AWS 还是 GCP 丈量,OpenAI 嵌入 API 的延迟显著高于 Google 新的 textembedding-gecko@001 模型(仅从 GCP 丈量)。
OpenAI 的性能颠簸较大——许多人都经历过在一些时候 OpenAI 的 API 扩展性差的情形。利用 Azure OpenAI Service 运行在 Microsoft Azure 中的运用,模型的延迟可能会更低。
模型延迟(秒,log10)
绝不料外,运行在本地 CPU 上的开源嵌入模型在性能上超越了 Google 和 OpenAI 的 API 做事。网络传输是慢的。但令人惊异的是 Google 的模型与本地开源模型比较表现出色。我只从 GCP 丈量,因此 API 肯定有更低的网络延迟。
延迟常日在第 95 百分位处进行丈量,DevOps 和 SRE 称之为 p95。以下是 p95 模型结果(非对数刻度)。OpenAI API 的 p95 相应从 GCP 须要近一分钟,从 AWS 须要近 600 毫秒。
模型延迟 p95(秒)
在这次调查中,虽然开源模型 gtr-t5-xl 的 MTEB 得分与 OpenAI 的产品最靠近,但其表现却远不如所有其他模型。有可能在大批量嵌入的情形下,如果利用 GPU,性能会显著提高(详见下文)。
all-MiniLM 系列的开源模型速率非常快(且作为较小的模型,其内存效率非常高)。考虑到他们的速率和相对易于支配的特性(见此Langchain 示例),评估他们对付你特定利用场景的性能表现是值得的。
嵌入模型性能的效果可能因人而异
sentence-transformers 团队已经创建了大量不同的模型,并且有充分的情由。每个模型都具有不同组合的性能特性,并且用于不同的用场。口语,句子长度,向量宽度,词汇量和其他成分都会影响模型的性能。有些模型可能对某个领域的表现比其他模型更好。在选择模型时,利用 MTEB 和其他基准作为辅导是值得的,但一定要用自己的数据进行实验。
为什么要用 CPU 进行句子嵌入?
在测试开源模型时,我们专注于 CPU 的性能,而非 GPU。CPU 的支配本钱低,易于扩展。虽然嵌入模型,像许多深度学习模型一样,在处理大数据集时在 GPU 上表现最好,但我们这里的紧张关注点是模型对单个短句子的表现。在这种情形下,利用 GPU 常日比利用 CPU 更慢,由于将数据传输到 GPU 的代价比将同样的数据从内存移动到 CPU 的代价更高。
用 Langchain 利用 SentenceTransformer 模型
纵然你没有利用 GPU,利用 SentenceTransformer 嵌入模型在 Langchain 中也相对大略,易于实现。Langchain 自带 HuggingFace 集成,许可在 HuggingFace 托管的任何嵌入模型作为 Langchain 的 Embedding。
把稳:你须要确保已安装了 sentence_transformers。
from langchain.embeddings import HuggingFaceEmbeddings, SentenceTransformerEmbeddings
# 利用我们上面评估的最轻量级模型
embeddings = HuggingFaceEmbeddings(model_name=\公众all-MiniLM-L6-v2\公众)
text = \"大众Iceland is wonderful to visit\公众
embedded_docs = embeddings.embed_documents([text])
阅读 Langchain 的 [索引和 VectorStores 文档,理解如何在你的链或代理代码中利用上述内容。
测试方法
我们对每个模型的嵌入速率进行了50次迭代的抽样测试。嵌入的文本相对较短,旨在代表 LLM-based 运用在构建提示时对向量数据库进行搜索的类型。
texts = [\"大众Visa requirements depend on your nationality. Citizens of the Schengen Area, the US, Canada, and several other countries can visit Iceland for up to 90 days without a visa.\"大众]
测试句子
模型延迟数据表
测试在以下根本举动步伐上/从以下根本举动步伐运行:
GCP:位于 us-central1 的 n1-standard-4(4 vCPU,15 GB RAM)实例
AWS:位于 us-west-2 的 ml.t3.large(2vcpu + 8GiB)实例
我的 MacBook Pro 14\"大众 M1,拥有 16GB 的 RAM
在所有实验中,pytorch 只利用 CPU。
利用的软件包括:
JupyterLab
sentence-transformers 2.2.2
pytorch 2.0.1
Python 3.10 和 3.11
你认为 OpenAI 是目前最好的选择吗?为什么?欢迎揭橥你的意见和情由。
参考链接
首字节相应韶光:https://en.wikipedia.org/wiki/Time_to_first_byte?ref=getzep.com
索干系信息:https://blog.langchain.dev/retrieval/?ref=getzep.com
近似最近邻:https://en.wikipedia.org/wiki/Nearest_neighbor_search?ref=getzep.com
语义搜索:https://www.sbert.net/examples/applications/semantic-search/README.html?ref=getzep.com
许多不同的嵌入模型:https://huggingface.co/spaces/mteb/leaderboard?ref=getzep.com
MTEB 基准性能:https://huggingface.co/spaces/mteb/leaderboard?ref=getzep.com
sentence-transformers:https://www.sbert.net/?ref=getzep.com
以基准作为辅导,而非铁律:https://www.getzep.com/text-embedding-latency-a-semi-scientific-look/#your-mileage-may-vary-with-embedding-model-performance
大幅降落了:https://openai.com/blog/function-calling-and-other-api-updates?ref=getzep.com
Azure OpenAI Service:https://azure.microsoft.com/en-us/products/cognitive-services/openai-service?ref=getzep.com
Langchain 示例:https://www.getzep.com/text-embedding-latency-a-semi-scientific-look/#using-sentencetransformer-models-with-langchain
大量不同的模型:https://huggingface.co/sentence-transformers?ref=getzep.com
HuggingFace:https://huggingface.co/?ref=getzep.com
sentence_transformers:https://pypi.org/project/sentence-transformers/?ref=getzep.com