一个用于文本嵌入模型的极速推理解决方案。
在 NVIDIA A10 上使用序列长度为 512 个 token 的 BAAI/bge-base-en-v1.5 基准测试:
Text Embeddings Inference (TEI) 是一个用于部署和服务开源文本嵌入及序列分类模型的工具包。TEI 支持对最流行的模型进行高性能提取,包括 FlagEmbedding、Ember、GTE 和 E5。TEI 实现了许多功能,例如:
Text Embeddings Inference 当前支持具有绝对位置编码的 Nomic、BERT、CamemBERT、XLM-RoBERTa 模型,具有 Alibi 位置编码的 JinaBERT 模型,以及具有 Rope 位置编码的 Mistral、Alibaba GTE、Qwen2 模型,还有 MPNet、ModernBERT、Qwen3 和 Gemma3。
以下是当前支持的部分模型示例:
| MTEB 排名 | 模型大小 | 模型类型 | 模型 ID |
|---|---|---|---|
| 2 | 7.57B(非常昂贵) | Qwen3 | Qwen/Qwen3-Embedding-8B |
| 3 | 4.02B(非常昂贵) | Qwen3 | Qwen/Qwen3-Embedding-4B |
| 4 | 509M | Qwen3 | Qwen/Qwen3-Embedding-0.6B |
| 6 | 7.61B(非常昂贵) | Qwen2 | Alibaba-NLP/gte-Qwen2-7B-instruct |
| 7 | 560M | XLM-RoBERTa | intfloat/multilingual-e5-large-instruct |
| 8 | 308M | Gemma3 | google/embeddinggemma-300m(gated) |
| 15 | 1.78B(昂贵) | Qwen2 | Alibaba-NLP/gte-Qwen2-1.5B-instruct |
| 18 | 7.11B(非常昂贵) | Mistral | Salesforce/SFR-Embedding-2_R |
| 35 | 568M | XLM-RoBERTa | /-arctic-embed-l-v2.0 |
| 41 | 305M | Alibaba GTE | /-arctic-embed-m-v2.0 |
| 52 | 335M | BERT | WhereIsAI/UAE-Large-V1 |
| 58 | 137M | NomicBERT | nomic-ai/nomic-embed-text-v1 |
| 79 | 137M | NomicBERT | nomic-ai/nomic-embed-text-v1.5 |
| 103 | 109M | MPNet | sentence-transformers/all-mpnet-base-v2 |
| N/A | 475M-A305M | NomicBERT | nomic-ai/nomic-embed-text-v2-moe |
| N/A | 434M | Alibaba GTE | Alibaba-NLP/gte-large-en-v1.5 |
| N/A | 396M | ModernBERT | answerdotai/ModernBERT-large |
| N/A | 340M | Qwen3 | voyageai/voyage-4-nano |
| N/A | 137M | JinaBERT | jinaai/jina-embeddings-v2-base-en |
| N/A | 137M | JinaBERT | jinaai/jina-embeddings-v2-base-code |
要查看性能最佳的文本嵌入模型列表,请访问 Massive Text Embedding Benchmark (MTEB) 排行榜。
Text Embeddings Inference 当前支持具有绝对位置编码的 CamemBERT 和 XLM-RoBERTa 序列分类模型。
以下是当前支持的部分模型示例:
| 任务 | 模型类型 | 模型 ID |
|---|---|---|
| 重排序 | XLM-RoBERTa | BAAI/bge-reranker-large |
| 重排序 | XLM-RoBERTa | BAAI/bge-reranker-base |
| 重排序 | GTE | Alibaba-NLP/gte-multilingual-reranker-base |
| 重排序 | ModernBert | Alibaba-NLP/gte-reranker-modernbert-base |
| 情感分析 | RoBERTa | SamLowe/roberta-base-go_emotions |
model=Qwen/Qwen3-Embedding-0.6B
volume=$PWD/data # 与 Docker 容器共享卷以避免每次运行都下载权重
docker run --gpus all -p 8080:80 -v $volume:/data --pull always ghcr.io/huggingface/text-embeddings-inference:cuda-1.9 --model-id $model
然后您可以像这样发送请求:
curl 127.0.0.1:8080/embed \
-X POST \
-d '{"inputs":"What is Deep Learning?"}' \
-H 'Content-Type: application/json'
[!NOTE] 要使用 GPU,您需要安装 NVIDIA Container Toolkit。您机器上的 NVIDIA 驱动程序需要与 CUDA 12.2 或更高版本兼容。
要查看服务模型的所有选项:
$ text-embeddings-router --help
Text Embedding Webserver
Usage: text-embeddings-router [OPTIONS] --model-id
--model-id
Hugging Face 模型 ID,可以是任何带有 text-embeddings-inference 标签的模型(表示其与 Text Embeddings Inference 兼容)。
也可以指定为本地目录路径,该目录包含通过 Transformers 或 Sentence Transformers 的 save_pretrained(...) 方法保存的必要模型文件。
[env: MODEL_ID=]
--revision
如果引用的是 Hub 上的模型,则指模型的实际修订版本。可以使用特定提交 ID 或分支,如 refs/pr/2
[env: REVISION=]
--tokenization-workers
可选,控制用于 payload 分词、验证和截断的分词器工作进程数。默认为机器上的 CPU 核心数
[env: TOKENIZATION_WORKERS=]
--dtype
强制模型使用的数据类型
[env: DTYPE=]
[possible values: float16, float32]
--served-model-name
正在提供服务的模型名称。如果未指定,默认为 --model-id。仅用于通过 HTTP 的 OpenAI 兼容端点
[env: SERVED_MODEL_NAME=]
--pooling
可选,控制嵌入模型的池化方法。
如果未设置 pooling,将从模型的 1_Pooling/config.json 配置中解析池化配置。
如果设置了 pooling,将覆盖模型的池化配置
[env: POOLING=]
可能的取值:
ForMaskedLM Transformer 模型时可用--max-concurrent-requests
特定部署的最大并发请求数。设置较低的限制会拒绝客户端请求,而不是让它们等待过长时间,通常有助于正确处理背压
[env: MAX_CONCURRENT_REQUESTS=]
[default: 512]
--max-batch-tokens
[!IMPORTANT] 这是允许最大程度利用可用硬件的关键控制项。
表示一个批次内的潜在令牌总数。
例如,max_batch_tokens=1000 时,可以容纳 10 个总令牌数为 100 的查询,或 1 个令牌数为 1000 的查询。
总体而言,此数值应尽可能大,直到模型受计算限制。由于实际内存开销取决于模型实现,text-embeddings-inference 无法自动推断此数值。
[env: MAX_BATCH_TOKENS=]
[default: ***]
--max-batch-requests
可选,控制一个批次中的最大独立请求数
[env: MAX_BATCH_REQUESTS=]
--max-client-batch-size
控制客户端在单个请求中可发送的最大输入数
[env: MAX_CLIENT_BATCH_SIZE=]
[default: 32]
--auto-truncate
控制对超过模型最大支持大小的输入进行自动截断。默认为 true(启用截断)。设置为 false 可禁用截断;禁用时,如果模型的最大输入长度超过 --max-batch-tokens,服务器将启动失败并报错,而非静默截断序列。
gRPC 服务器不使用此选项
[env: AUTO_TRUNCATE=]
--default-prompt-name
默认用于编码的提示名称。如果未设置,则不应用任何提示。
必须是 sentence-transformers 配置中 prompts 字典的键。
例如,如果 default_prompt_name 为 "query",且 prompts 为 {"query": "query: ", ...},则句子 "What is the capital of France?" 将被编码为 "query: What is the capital of France?",因为提示文本会 prepend 到任何待编码文本之前。
参数“--default-prompt-name”不能与“--default-prompt”一起使用
[env: DEFAULT_PROMPT_NAME=]
--default-prompt
默认用于编码的提示文本。如果未设置,则不应用任何提示。
例如,如果 default_prompt 为 "query: ",则句子 "What is the capital of France?" 将被编码为 "query: What is the capital of France?",因为提示文本会 prepend 到任何待编码文本之前。
参数“--default-prompt”不能与“--default-prompt-name”一起使用
[env: DEFAULT_PROMPT=]
--dense-path
可选,定义某些嵌入模型所需的 Dense 模块路径。
部分嵌入模型需要额外的 Dense 模块,该模块包含单个线性层和激活函数。默认情况下,这些 Dense 模块存储在 2_Dense 目录下,但在某些情况下可能提供不同的 Dense 模块(例如用于将池化嵌入转换为不同维度),命名格式为 2_Dense_<dimension>,例如 [***]
注意,此参数为可选,仅在以下情况需要设置:没有 modules.json 文件时,或当使用 candle 后端运行且需要覆盖单个 Dense 模块路径时。
[env: DENSE_PATH=]
--hf-token
Hugging Face Hub 令牌。如果未设置 --hf-token 或 HF_TOKEN,将从 $HF_HOME/token 路径读取令牌(如果存在)。这确保能够访问私有或 gated 模型,并允许更宽松的速率限制
[env: HF_TOKEN=]
--hostname
监听的 IP 地址
[env: HOSTNAME=]
[default: 0.0.0.0]
-p, --port
监听的端口
[env: PORT=]
[default: 3000]
--uds-path
某些 text-embeddings-inference 后端通过 gRPC 进行内部通信时使用的 Unix 套接字名称
[env: UDS_PATH=]
[default: /tmp/text-embeddings-inference-server]
--huggingface-hub-cache
Hugging Face Hub 缓存的位置。用于覆盖默认位置(例如提供挂载磁盘时)
[env: HUGGINGFACE_HUB_CACHE=]
--payload-limit
Payload 大小限制(字节)
默认值为 2MB
[env: PAYLOAD_LIMIT=]
[default: 2000000]
--api-key
设置用于请求授权的 API 密钥。
默认情况下,服务器响应所有请求。设置 API 密钥后,请求必须设置 Authorization 头,并将 API 密钥作为 Bearer 令牌。
[env: API_KEY=]
--json-output
以 JSON 格式输出日志(对遥测有用)
[env: JSON_OUTPUT=]
--disable-spans
是否通过 spans 包含日志跟踪
[env: DISABLE_SPANS=]
--otlp-endpoint
OpenTelemetry 的 gRPC 端点。遥测数据通过 gRPC 以 OTLP 格式发送到此端点。例如 http://localhost:4317
[env: OTLP_ENDPOINT=]
--otlp-service-name
OpenTelemetry 的服务名称。例如 text-embeddings-inference.server
[env: OTLP_SERVICE_NAME=]
[default: text-embeddings-inference.server]
--prometheus-port
Prometheus 监听端口
[env: PROMETHEUS_PORT=]
[default: 9000]
--cors-allow-origin
gRPC 服务器不使用此选项
[env: CORS_ALLOW_ORIGIN=]
-h, --help
打印帮助信息(使用 '-h' 查看摘要)
-V, --version
打印版本号
您可以选择使用 HF_TOKEN 环境变量来配置 text-embeddings-inference 所使用的令牌。这使您能够访问受保护的资源。
例如:
HF_TOKEN= 或使用 Docker:
model=
volume=$PWD/data # 与 Docker 容器共享卷以避免每次运行都下载权重
token=
docker run --gpus all -e HF_TOKEN=$token -p 8080:80 -v $volume:/data --pull always ghcr.io/huggingface/text-embeddings-inference:cuda-1.9 --model-id $model
要在隔离环境(air-gapped)中部署 Text Embeddings Inference,需先下载权重,然后通过卷将其挂载到容器内。
例如:
#(可选)创建 `models` 目录
mkdir models
cd models
# 确保已安装 git-lfs(https://git-lfs.com)
git lfs install
git clone https://huggingface.co/Qwen/Qwen3-Embedding-0.6B
# 将 models 目录设置为卷路径
volume=$PWD
# 通过卷将 models 目录挂载到容器内,并设置模型 ID
docker run --gpus all -p 8080:80 -v $volume:/data --pull always ghcr.io/huggingface/text-embeddings-inference:cuda-1.9 --model-id /data/Qwen3-Embedding-0.6B
然后运行:
# 在 x86 架构上使用 ONNX 后端(推荐)
cargo install --path router -F ort
# 在 x86 架构上使用 Intel 后端
cargo install --path router -F mkl
# 在 M1 或 M2 芯片上
cargo install --path router -F metal
现在可以通过以下命令在 CPU 上启动 Text Embeddings Inference:
model=Qwen/Qwen3-Embedding-0.6B
text-embeddings-router --model-id $model --port 8080
[!NOTE] 在部分机器上,您可能还需要安装 OpenSSL 库和 gcc。在 Linux 机器上,运行:
> sudo apt-get install libssl-dev gcc -y
>
不支持 CUDA 计算能力 < 7.5 的 GPU(V100、Titan V、GTX 1000 系列等)。
确保已安装 CUDA 和 NVIDIA 驱动程序。设备上的 NVIDIA 驱动程序需要与 CUDA 12.2 或更高版本兼容。您还需要将 NVIDIA 二进制文件添加到路径中:
export PATH=$PATH:/usr/local/cuda/bin
然后运行以下命令(可能需要一段时间,因为需要编译 CUDA 内核):
# 在 Turing GPU 上(T4、RTX 2000 系列等)
cargo install --path router -F candle-cuda-turing
# 在 Ampere、Ada Lovelace、Hopper 和 Blackwell GPU 上
cargo install --path router -F candle-cuda
现在可以通过以下命令在 GPU 上启动 Text Embeddings Inference:
model=Qwen/Qwen3-Embedding-0.6B
text-embeddings-router --model-id $model --port 8080
您可以通过以下命令使用 Docker 构建 CPU 容器:
docker build -f Dockerfile .
要构建 CUDA 容器,您需要知道运行时将使用的 GPU 的计算能力,以便相应地构建镜像:
# 获取子模块依赖
git submodule update --init
# Turing 示例(T4、RTX 2000 系列等)
runtime_compute_cap=75
# Ampere 示例(A100 等)
runtime_compute_cap=80
# Ampere 示例(A10 等)
runtime_compute_cap=86
# Ada Lovelace 示例(RTX 4000 系列等)
runtime_compute_cap=89
# Hopper 示例(H100 等)
runtime_compute_cap=90
# Blackwell 示例(B200、GB200 等)
runtime_compute_cap=100
# Blackwell 示例(GeForce RTX 50X0、RTX PRO 6000 等)
runtime_compute_cap=120
# Blackwell GB10 示例(DGX Spark)
runtime_compute_cap=121
docker build . -f Dockerfile-cuda --build-arg CUDA_COMPUTE_CAP=$runtime_compute_cap
对于没有 NVIDIA GPU 的 ARM64 主机,请使用 CPU Dockerfile。推理仅在 CPU 核心上运行(不通过 Docker 支持 Metal/MPS)。
docker build . -f Dockerfile-arm64 --platform=linux/arm64
对于配备 NVIDIA GPU 的 ARM64 主机,请使用适当的计算能力和 --platform linux/arm64 构建 Dockerfile-cuda:
# DGX Spark(GB10,sm_121)
docker build . -f Dockerfile-cuda \
--build-arg CUDA_COMPUTE_CAP=121 \
--platform linux/arm64
# 未来的 ARM64 + Blackwell 设备(sm_120)
docker build . -f Dockerfile-cuda \
--build-arg CUDA_COMPUTE_CAP=120 \
--platform linux/arm64
TEI 通过 ROCm 对 AMD Instinct GPU(MI200、MI300 系列)提供实验性支持。您可以使用 rocm/pytorch:latest Docker 镜像或裸机 ROCm 安装。TEI 会在启动时自动检测 GPU。
有关完整的设置说明,请参阅 **https://huggingface.github.io/text-embeddings-inference/amd_gpu**%E3%80%82
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
不支持 push
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务