Loading...

文章背景图

Infinity:Rust + LibTorch 编写的开源嵌入与重排序推理服务|部署与使用全指南

2026-11-01
0
- 字
- 分钟
|

Infinity:Rust + LibTorch 编写的开源嵌入与重排序推理服务|部署与使用全指南

项目仓库: https://github.com/michaelfeil/infinity

开源协议:v3 为 Infinity Restricted MIT License 1.0(source-available),Python 包保留 MIT · 交付形态:Rust 二进制 infinity_v3 + Docker 镜像 · 主要语言:Rust / C++(LibTorch)· 部署方式:Docker 一键启动 · 默认端口:8000 · 官方文档:michaelfeil.eu/infinity

版本说明(务必先读):仓库 main 分支自 2026/10 起切换为原生 Rust/LibTorch v3 服务;早期 Python v2 服务仍在 libs/infinity_emb/ 与 infinity_emb PyPI 包中维护。本文按 v3 官方 README 整理。


1 项目简介

Infinity v3 是 michaelfeil 用 Rust 编写、基于 LibTorch(PyTorch C++ 接口)的推理服务器,对外通过 REST API 提供文本嵌入、多模态嵌入、token 向量、重排序、序列分类、token 分类 / NER、SPLADE 稀疏向量与 typed decision 等能力。它默认把所有可见 CUDA GPU 各加载一份完整模型副本,池化方式从 checkpoint 元数据自动选择。

许可说明:v3 原生贡献采用 Infinity Restricted MIT License 1.0,是 source-available 自定义协议,并非标准 OSI 认可的 MIT;早期 Python 包仍为 MIT。商用前请阅读 v3 LICENSE 全文。

1.1 核心信息一览

项目项 内容
项目名称 Infinity v3(命令名 infinity_v3)
仓库地址 github.com/michaelfeil/infinity
项目定位 嵌入 / 重排序 / 分类 / NER / 稀疏向量推理服务
开源协议 v3:Infinity Restricted MIT License 1.0;Python 包:MIT
交付形态 Rust 二进制;GHCR Docker 镜像 ghcr.io/michaelfeil/infinity_v3
主要语言 Rust、C++(LibTorch)
部署方式 Docker 一键启动;源码构建见 libs/infinity-v3/CONTRIBUTING.md
默认端口 8000
接口端点 /v1/embeddings、/rerank、/v1/classify、/predict_tokens、/embed_sparse、/v1/systemone、/health、/docs
官方文档 michaelfeil.eu/infinity/main/v3/quickstart

1.2 适用场景

  • RAG 流水线里需要把文档与查询转成稠密向量,并希望后端用 Rust + LibTorch 降低开销。
  • 需要在同一服务里同时跑嵌入、重排序、分类、NER、SPLADE 稀疏向量。
  • 想在 Ampere(SM80)及以上 NVIDIA GPU 上用多 GPU 各加载一份副本做横向扩展。
  • 需要 OpenAI 风格的 /v1/embeddings 接口,便于直接用 OpenAI Client 接入。

1.3 能力边界(官方口径)

  • 官方 README 明确:v3 需要 NVIDIA GPU,计算能力 SM80(Ampere)或更新;每个 GPU 必须装下完整模型(包括 MoE checkpoint 的所有 experts)。
  • 池化方式从 checkpoint 元数据自动选择;具体支持哪些 checkpoint 以 supported model catalog 为准。
  • 镜像 tag 示例 nvidia-3.0.0,生产部署应 pin 具体版本或镜像 digest。
  • Python v2 服务仍在 libs/infinity_emb/ 维护,v3 与 v2 是两套独立实现。

2 功能特性

2.1 REST 接口

  • /v1/embeddings:稠密文本与多模态嵌入(OpenAI 兼容)。
  • /rerank:重排序打分。
  • /v1/classify:序列分类与 reward scoring。
  • /predict_tokens:token 分类与命名实体识别。
  • /embed_sparse:SPLADE 稀疏向量。
  • /v1/systemone:typed decision 接口。
  • /health:加载与 warmup 完成后报告就绪;/docs:交互式 API。

2.2 推理后端与硬件

  • 原生 Rust + LibTorch,避免 Python GIL 开销。
  • 默认使用所有可见 CUDA GPU,每卡一份完整模型副本。
  • 支持 --dtype bfloat16 等精度参数。
  • 模型权重通过 -v infinity-cache:/data 持久化缓存。

2.3 模型目录

  • 官方维护 supported model catalog,按任务分组,列出配置、输入要求、支持依据与模型许可备注。

3 官方界面预览

Infinity v3 是纯 API 服务,启动后访问 http://localhost:8000/docs 可看到运行时生成的交互式 API 文档。本文不另行配图。

4 官方跳转链接汇总

5 前置要求与服务器配置

5.1 软件前提

  • 操作系统:Linux。
  • Docker 与 NVIDIA Container Toolkit。
  • NVIDIA 驱动需兼容 CUDA 12.x;GPU 计算能力 SM80(Ampere)或更新(Ampere、Ada Lovelace、Hopper、Blackwell)。

5.2 硬件建议

  • 每个 GPU 必须装下完整模型(含 MoE 所有 experts)。
  • 缓存卷 infinity-cache 用于存放下载的模型权重,建议 SSD。
  • 官方示例模型 sentence-transformers/all-MiniLM-L6-v2 很小,可用来验证部署。

5.3 端口

端口 用途
8000 HTTP API

6 方式一:Docker 一键部署(推荐)

docker run --rm --gpus all -p 8000:8000 -v infinity-cache:/data \
  ghcr.io/michaelfeil/infinity_v3:nvidia-3.0.0 \
  --model-id sentence-transformers/all-MiniLM-L6-v2 \
  --torch-device cuda --dtype bfloat16 \
  --hostname 0.0.0.0 --port 8000

测试嵌入:

curl http://localhost:8000/v1/embeddings \
  -H 'Content-Type: application/json' \
  -d '{"model":"sentence-transformers/all-MiniLM-L6-v2","input":["A document about semantic search."]}'

健康检查与交互式文档:

curl http://localhost:8000/health
# 浏览器打开 http://localhost:8000/docs

生产部署建议 pin 具体版本或镜像 digest,避免 latest 漂移。

7 方式二:源码 / 本地运行

从源码构建见 libs/infinity-v3/CONTRIBUTING.md。早期 Python v2 服务使用 `infinity_emb` Python 包与 `infinity_emb v2` 命令,详见 libs/infinity_emb/README.md 与 v2 文档。

8 配置项说明

以下参数来自官方 Docker 示例与 CLI 文档:

参数 用途
--model-id <ID> Hugging Face Hub 模型 ID
--torch-device cuda 指定推理设备
--dtype bfloat16 权重精度
--hostname 0.0.0.0 监听地址
--port 8000 监听端口
缓存卷 /data 模型权重持久化目录

完整字段以官方 CLI 文档为准。

9 常用运维命令

# 查看容器
docker ps | grep infinity_v3

# 查看日志
docker logs -f <container_id>

# 健康检查
curl http://localhost:8000/health

# 查看 GPU 占用
nvidia-smi

# 拉取新版本
docker pull ghcr.io/michaelfeil/infinity_v3:nvidia-3.0.0

备份:模型权重在 infinity-cache 卷中,备份 Docker 命名卷即可。

10 常见故障排查

  • GPU 不支持 / 启动失败:官方仅支持 SM80(Ampere)及以上;Turing / Volta 及以下请改用其他嵌入服务。
  • /health 长时间不就绪:模型仍在加载或 warmup,观察日志;首次启动需下载模型权重。
  • OOM:每卡必须装下完整模型(含 MoE 所有 experts),换更大显存 GPU 或更小模型。
  • 想跑 v2:v3 与 v2 是两套实现,v2 走 infinity_emb Python 包与 libs/infinity_emb/。
  • 许可疑问:v3 是 Infinity Restricted MIT License 1.0(source-available),不是标准 MIT;商用前阅读 LICENSING.md。
  • 生产部署:pin 具体镜像 tag 或 digest,不要用 latest。

11 风险与合规说明

  • v3 采用 Infinity Restricted MIT License 1.0,是自定义 source-available 协议,与标准 MIT 不完全一致;商用前请阅读 LICENSE 全文。
  • 模型权重与依赖按各自许可证分发;supported model catalog 中列出了每个模型的许可备注。
  • 本文所有命令、镜像 tag、端口、参数均来自官方 README;后续版本演进以官方仓库最新说明为准。
评论交流

文章目录