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_embPyPI 包中维护。本文按 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 官方跳转链接汇总
- 仓库地址:https://github.com/michaelfeil/infinity
- Quickstart(v3):https://michaelfeil.eu/infinity/main/v3/quickstart/
- v3 总览与性能:libs/infinity-v3/README.md
- 支持模型目录:libs/infinity-v3/docs/supported-models.md
- CLI 与请求参数:libs/infinity-v3/docs/cli.md
- API 参考:https://michaelfeil.eu/infinity/main/v3/api/
- 嵌入张量格式:libs/infinity-v3/docs/embedding-tensors.md
- 容器镜像:ghcr.io/michaelfeil/infinity_v3
- Python v2 README:libs/infinity_emb/README.md
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_embPython 包与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;后续版本演进以官方仓库最新说明为准。