使用 Hugging Face Inference Endpoints 部署嵌入模型

Hugging Face 将 Text Embeddings Inference (TEI) 集成到其 Inference Endpoints 服务中,使开发者能够以高吞吐量和显著低于专有替代方案的成本部署开源嵌入模型。此集成专门设计用于优化检索增强生成(RAG)工作流,其中快速高效的数据向量表示对于高质量生成至关重要。

Text Embeddings Inference (TEI) 能力

Text Embeddings Inference (TEI) 是一个专门构建的解决方案,用于服务开源文本嵌入模型。它经过高性能提取优化,并支持 Massive Text Embedding Benchmark (MTEB) Leaderboard 上的前 10 名模型,包括 E5、GTE、Ember 和 FlagEmbedding。

为了实现行业领先的吞吐量和成本效率,TEI 实施了几项技术优化:

  • Inference Optimization: 利用 Flash Attention、cuBLASLt 和 Candle 框架来优化 transformers 代码。
  • Efficient Loading: 使用 Safetensors 进行权重加载,并消除模型图编译步骤。
  • Operational Efficiency: 具有小型 Docker 镜像,实现快速启动时间(支持无服务器模式)和基于 token 的动态批处理。
  • Production Readiness: 包含 Prometheus 指标,并通过 Open Telemetry 进行分布式追踪。

性能和成本基准

通过 TEI 部署开源模型相比闭源 API 可以实现显著的成本降低。在使用 BAAI/bge-base-en-v1.5 模型、在 Nvidia A10G Inference Endpoint 上、批量大小为 32、序列长度为 512 个 token 的基准测试中,Hugging Face 实现了:

  • Throughput: 450+ requests per second.
  • Cost: $0.00000156 per 1k tokens ($0.00156 per 1M tokens).

根据 Hugging Face 的说法,这相比 OpenAI Embeddings(每 1k token 定价为 $0.0001)实现了 64 倍的成本节约。

通过 Hugging Face Inference Endpoints 部署

Inference Endpoints 提供一个托管的 SaaS 环境,消除了对手动基础设施管理或 MLOps 的需求。主要功能包括:

  • Simplified Deployment: 模型可以通过几次点击部署为生产就绪的 API。
  • Scaling and Cost Control: 支持自动缩放到零,以在非活动期间降低成本。
  • Enterprise Security: 提供 SOC2 Type 2 认证、GDPR 数据处理协议、BAA,以及通过直接 VPC 连接的安全离线端点。
  • Broad Support: 开箱即用地兼容 Sentence-Transformers、Diffusers 和 🤗 Transformers。

部署工作流

要部署嵌入模型,用户选择一个模型仓库(例如 BAAI/bge-base-en-v1.5),选择云提供商和区域,并选择实例类型。虽然系统会根据模型大小推荐实例类型,但高性能基准是通过使用如 Nvidia A10G 的 GPU 实例来实现的。部署过程通常需要 1 到 3 分钟。

使用嵌入端点

端点上线后,可以通过 Inference Widget 进行手动测试,或使用 cURL、Python 或 JavaScript 通过 API 请求进行访问。

批处理和截断

TEI 支持批量请求,允许在单个请求中发送多个文档以提高端点利用率。用户应注意,TEI 不会自动截断输入;必须通过在请求负载中设置 truncate: true 来显式启用截断。

批量嵌入的 Python 请求示例:

import requests

API_URL = "https://your-endpoint-url.huggingface.cloud"
headers = {
    "Authorization": "Bearer YOUR TOKEN",
    "Content-Type": "application/json"
}

output = requests.post(API_URL, headers=headers, json={
    "inputs": ["sentence 1", "sentence 2", "sentence 3"],
    "truncate": True
}).json()

Sources