Hugging Face: 优化 10亿次分类的成本和延迟
每天处理超过十亿次分类或嵌入主要是一个财务挑战。Hugging Face 已开发出一种方法来计算和优化大规模推理的成本和延迟,表明硬件、批次大小和并行性的正确组合可以显著降低云支出。
10亿次输入的成本基准
使用 NVIDIA L4 GPU(每小时 0.8 美元),处理 10亿 次输入的成本根据模型架构和任务而有很大差异:
| 使用案例 | 模型 | 硬件 | 1B 输入的成本 |
|---|---|---|---|
| 分类 | lxyuan/distilbert-base-multilingual-cased-sentiments-student |
nvidia-L4 | $253.82 |
| 嵌入 | Alibaba-NLP/gte-modernbert-base |
nvidia-L4 | $409.44 |
| 视觉嵌入 | vidore/colqwen2-v1.0-merged |
nvidia-L4 | $44,496.51 |
技术优化框架
为了实现这些成本,Hugging Face 为部署和负载测试使用了特定的技术栈:
- 推理服务器: Infinity,因其能够服务多模态嵌入并支持各种硬件(AMD、Nvidia、CPU、Inferentia)而被选中。
- 部署: Hugging Face Inference Endpoints 用于灵活的硬件选择和 Hugging Face Hub Library 用于程序化部署。
- 负载测试: k6 来自 Grafana,使用
shared-iterations执行器来模拟并发客户端请求并测量吞吐量和 P95 延迟。
关键优化参数
效率由三个主要变量驱动:
INFINITY_BATCH_SIZE: 确定有多少文档经过前向传播。太低会导致 GPU 未被充分利用;太高会超过 GPU 容量。- 虚拟用户 (VUs): 模拟并发客户端请求以确保批次大小被充分利用。
- 硬件选择: 发现 NVIDIA L4 在现代工作负载中提供了最佳的性价比,优于 NVIDIA T4 和 CPU。
用例分析
文本分类
对于轻量级分类任务,评估了 DistilBERT。处理 10亿 次输入的最具成本效益的配置(253.82 美元)使用了 NVIDIA L4 GPU,批次大小为 64,以及 448 个 VUs,使用默认的 Infinity 镜像。
文本嵌入
ModernBERT 因其支持 Flash-Attention-2 和 8k 上下文窗口而被用于嵌入任务。处理 10亿 次输入的最优配置(409.44 美元)使用了 NVIDIA L4 GPU,批次大小为 32,以及 256 个 VUs。
视觉嵌入
使用 ColQwen2 的视觉嵌入任务由于模型的 2.21B 参数规模和 ColBERT 风格的多向量表示而显著更昂贵,后者为每个 token 返回一个向量,而不是每个输入一个向量。处理 10亿 次输入的最便宜配置为 44,496.51 美元,使用了 NVIDIA L4,批次大小为 4,以及 4 个 VUs。
核心发现和权衡
- 硬件效率: NVIDIA L4 是现代编码器工作负载的首选,优于 T4。
- 延迟-成本权衡: 提高允许的延迟通常可以实现更高的吞吐量,从而降低总体成本。此关系可以通过帕雷托曲线进行可视化。
- 视觉成本惩罚: 基于图像的检索相比基于文本的任务大约贵两个数量级,这是因为模型规模更大、架构更复杂(包括解码器)以及图像数据的更高 API/egress 成本。
- 扩展策略: 为了水平扩展,一旦建立了单 GPU 基准,就可以通过添加副本 GPU 来提高吞吐量。
Sources
- Original1 Billion Classifications