使用 Hugging Face 推理终端部署 Embedding 模型
像 ChatGPT 这样的生成式 AI 和大语言模型(LLM)的兴起,增加了人们对 Embedding 模型的兴趣和其在各种任务中的重要性,尤其是在检索增强生成 (RAG) 方面的应用,例如搜索或与你的数据聊天。Embedding 非常有用,因为它们将句子、图像、单词等表示为数值向量,这使我们能够映射语义相关的项目并检索有用的信息。这有助于我们为 Prompt 提供相关上下文,从而提高生成内容的质量和特异性。
与 LLM 相比,Embedding 模型的尺寸更小,推理速度更快。这一点非常重要,因为在你更改模型或通过微调改进模型后,需要重新创建 Embedding。此外,为了提供良好的用户体验,整个检索增强过程应尽可能快。
在这篇博文中,我们将向你展示如何使用 文本 Embedding 推理 将开源 Embedding 模型部署到 Hugging Face 推理终端。我们的托管 SaaS 解决方案使模型部署变得简单。此外,我们还将教你如何运行大规模的批量请求。
在开始之前,让我们先回顾一下关于推理终端的知识。
1. 什么是 Hugging Face 推理终端?
Hugging Face 推理终端 提供了一种简单、安全的方式来部署用于生产环境的机器学习模型。推理终端让开发人员和数据科学家能够创建生成式 AI 应用而无需管理基础设施:只需点击几下即可简化部署过程,包括通过自动伸缩处理大量请求,通过缩容至零降低基础设施成本,并提供高级别的安全性。
以下是一些最重要的功能:
- 轻松部署:只需点击几下,即可将模型部署为生产就绪的 API,无需处理基础设施或 MLOps。
- 成本效益:受益于自动缩容至零的功能,在终端不使用时缩减基础设施以降低成本,同时根据终端的运行时间付费,确保成本效益。
- 企业级安全:将模型部署在安全的离线终端中,只能通过直接的 VPC 连接访问,拥有 SOC2 Type 2 认证支持,并提供 BAA 和 GDPR 数据处理协议,以增强数据安全性和合规性。
- LLM 优化:针对 LLM 进行优化,通过分页注意力(Paged Attention)实现高吞吐量,并借助文本生成推理(Text Generation Inference)支持的自定义 transformers 代码和 Flash Attention 实现低延迟。
- 全面的任务支持:开箱即支持 🤗 Transformers、Sentence-Transformers 和 Diffusers 的任务和模型,并易于定制以支持高级任务,如说话人分离或任何机器学习任务和库。
你可以通过以下链接开始使用推理终端:https://ui.endpoints.huggingface.co/
2. 什么是文本 Embedding 推理?
文本 Embedding 推理(TEI) 是一个专门为部署和服务开源文本 Embedding 模型而构建的解决方案。TEI 旨在实现高性能的特征提取,支持最流行的模型。TEI 支持 海量文本 Embedding 基准 (MTEB) 排行榜 前 10 名的所有模型,包括 FlagEmbedding、Ember、GTE 和 E5。TEI 目前实现了以下性能优化特性:
- 无模型图编译步骤
- 小巧的 Docker 镜像和快速的启动时间。为真正的无服务器做好准备!
- 基于 token 的动态批处理
- 使用 Flash Attention、Candle 和 cuBLASLt 优化 transformers 推理代码。
- 使用 Safetensors 加载权重。
- 生产就绪(通过 Open Telemetry 进行分布式追踪,Prometheus 指标)
这些特性使其在吞吐量和成本方面达到了行业领先的性能。在一项针对 BAAI/bge-base-en-v1.5 的基准测试中,我们在一个 Nvidia A10G 推理终端上,以 512 个 token 的序列长度和 32 的批处理大小,实现了超过 450 次请求/秒的吞吐量,成本为 0.00156 美元/百万 token 或 0.00000156 美元/千 token。这比 OpenAI Embeddings (0.0001 美元/千 token) 便宜 64 倍。
3. 将 Embedding 模型部署为推理终端
要开始使用,你需要使用一个已绑定支付方式的用户或组织帐户登录(你可以在这里添加),然后访问推理终端:https://ui.endpoints.huggingface.co
然后,点击“新建终端”。选择模型仓库、云服务商和区域,调整实例和安全设置,然后部署。在我们的例子中,模型是 BAAI/bge-base-en-v1.5
。
推理终端会根据模型大小建议一个实例类型,该类型应足以运行模型。这里建议的是 Intel Ice Lake 2 vCPU
。为了获得我们基准测试中的性能,请将实例更改为 1x Nvidia A10G
。
注意:如果无法选择实例类型,你需要联系我们并申请实例配额。
然后,你可以点击“创建终端”来部署你的模型。1-3 分钟后,终端应该会在线并可以处理请求。
4. 向终端发送请求并创建 Embedding
终端概览页面提供了推理小部件的访问权限,可用于手动发送请求。这使你可以用不同的输入快速测试你的终端,并与团队成员分享。
注意:TEI 目前不会自动截断输入。你可以在请求中设置 truncate: true
来启用此功能。
除了小部件,概览页面还提供了 cURL、Python 和 Javascript 的代码片段,你可以用它们向模型发送请求。代码片段展示了如何发送单个请求,但 TEI 也支持批量请求,这使你可以同时发送多个文档以提高终端的利用率。下面是一个示例,展示了如何发送一个将截断设置为 true 的批量请求。
import requests
API_URL = "https://l2skjfwp9punv393.us-east-1.aws.endpoints.huggingface.cloud"
headers = {
"Authorization": "Bearer YOUR TOKEN",
"Content-Type": "application/json"
}
def query(payload):
response = requests.post(API_URL, headers=headers, json=payload)
return response.json()
output = query({
"inputs": ["sentence 1", "sentence 2", "sentence 3"],
"truncate": True
})
# output [[0.334, ...], [-0.234, ...]]
结论
Hugging Face 推理终端上的 TEI 能够以极快的速度和极低的成本高效部署最先进的 Embedding 模型。凭借行业领先的每秒 450 多个请求的吞吐量和低至 0.00000156 美元/千 token 的成本,推理终端相比 OpenAI Embeddings 节省了 64 倍的成本。
对于利用文本 Embedding 实现语义搜索、聊天机器人、推荐等功能的开发人员和公司来说,Hugging Face 推理终端消除了基础设施开销,以最低的成本提供高吞吐量,从而简化了从研究到生产的整个流程。