bc089b43
tangwang
refactor(reranker...
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
# TEI 服务(Qwen3-Embedding-0.6B)说明
> 本文是本仓库 TEI(Text Embeddings Inference)专项运行手册。目标是让新同事在一台新机器上可以独立完成环境准备、部署、验收与排障。
## 1. 作用与边界
- TEI 提供文本向量 HTTP 服务(默认 `http://127.0.0.1:8080`)。
- 本项目中 `embedding` 服务(6005)默认把文本向量请求转发到 TEI。
- TEI 仅负责文本向量,不负责图片向量(图片向量由 `cnclip` 提供)。
## 2. 代码与脚本入口
- 启动脚本:`scripts/start_tei_service.sh`
- 停止脚本:`scripts/stop_tei_service.sh`
- 统一编排:`scripts/service_ctl.sh`
- embedding 服务启动脚本(会校验 TEI 健康):`scripts/start_embedding_service.sh`
## 3. 前置条件
### 3.1 必需软件
- Docker(必须)
- curl(用于健康检查与接口验收)
### 3.2 GPU 模式额外要求(推荐生产)
- NVIDIA 驱动可用(`nvidia-smi` 可执行)
- Docker 已配置 `nvidia` runtime(`docker info` 能看到 `nvidia`)
检查命令:
```bash
docker --version
docker info --format '{{json .Runtimes}}'
nvidia-smi
```
## 4. 安装与准备(可复现)
### 4.1 拉取代码并进入项目
```bash
cd /data/saas-search
```
### 4.2 (仅 GPU 模式)配置 Docker GPU runtime
如果 `docker info` 中没有 `nvidia` runtime,先按机器环境安装 `nvidia-container-toolkit` 并执行:
```bash
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
```
再次确认:
```bash
docker info --format '{{json .Runtimes}}'
```
## 5. 启动方式
### 5.1 GPU 模式启动(默认)
```bash
|
af7ee060
tangwang
service_ctl 简化为“显...
|
66
|
TEI_DEVICE=cuda ./scripts/start_tei_service.sh
|
bc089b43
tangwang
refactor(reranker...
|
67
68
69
70
|
```
预期输出包含:
|
efd435cf
tangwang
tei性能调优:
|
71
|
- `Image: ghcr.io/huggingface/text-embeddings-inference:turing-...` 或 `cuda-...`(脚本按 GPU 架构自动选择)
|
af7ee060
tangwang
service_ctl 简化为“显...
|
72
|
- `Mode: cuda`
|
efd435cf
tangwang
tei性能调优:
|
73
74
75
76
77
|
- `TEI is ready and output probe passed: http://127.0.0.1:8080`
说明:
- T4(compute capability 7.5)会自动使用 `turing-*` 镜像。
- Ampere 及更新架构(compute capability >= 8)会自动使用 `cuda-*` 镜像。
|
bc089b43
tangwang
refactor(reranker...
|
78
79
80
81
|
### 5.2 CPU 模式启动(显式)
```bash
|
af7ee060
tangwang
service_ctl 简化为“显...
|
82
|
TEI_DEVICE=cpu ./scripts/start_tei_service.sh
|
bc089b43
tangwang
refactor(reranker...
|
83
84
85
86
87
88
|
```
预期输出包含:
- `Image: ghcr.io/huggingface/text-embeddings-inference:1.9`(非 `cuda-`)
- `Mode: cpu`
|
efd435cf
tangwang
tei性能调优:
|
89
|
- `TEI is ready and output probe passed: http://127.0.0.1:8080`
|
bc089b43
tangwang
refactor(reranker...
|
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
### 5.3 停止服务
```bash
./scripts/stop_tei_service.sh
```
## 6. 验收步骤(必须做)
### 6.1 健康检查
```bash
curl -sS http://127.0.0.1:8080/health
```
### 6.2 向量接口检查
```bash
curl -sS http://127.0.0.1:8080/embed \
-H "Content-Type: application/json" \
-d '{"inputs":["Instruct: Given a web search query, retrieve relevant passages that answer the query\nQuery: What is the capital of China?"]}'
```
返回应为二维数组(每条输入对应一个向量)。
|
efd435cf
tangwang
tei性能调优:
|
115
116
|
建议再连续请求一次,确认不是“首个请求正常,后续返回 null/NaN”。
|
bc089b43
tangwang
refactor(reranker...
|
117
118
119
120
121
122
123
124
125
126
127
128
|
### 6.3 与 embedding 服务联调
```bash
./scripts/start_embedding_service.sh
curl -sS -X POST "http://127.0.0.1:6005/embed/text" \
-H "Content-Type: application/json" \
-d '["芭比娃娃 儿童玩具"]'
```
返回应为 1024 维向量数组。
|
efd435cf
tangwang
tei性能调优:
|
129
130
131
132
133
|
### 6.4 运行建议(单服务兼顾在线与索引)
- 在线 query(低延迟优先):客户端建议 `batch=1~4`
- 索引构建(吞吐优先):客户端建议 `batch=15~20`
|
bc089b43
tangwang
refactor(reranker...
|
134
135
136
137
|
## 7. 配置项(环境变量)
`scripts/start_tei_service.sh` 支持下列变量:
|
af7ee060
tangwang
service_ctl 简化为“显...
|
138
|
- `TEI_DEVICE`:`cuda/cpu`,默认 `cuda`
|
bc089b43
tangwang
refactor(reranker...
|
139
140
141
142
143
|
- `TEI_CONTAINER_NAME`:容器名,默认 `saas-search-tei`
- `TEI_PORT`:宿主机端口,默认 `8080`
- `TEI_MODEL_ID`:默认 `Qwen/Qwen3-Embedding-0.6B`
- `TEI_VERSION`:镜像版本,默认 `1.9`
- `TEI_DTYPE`:默认 `float16`
|
efd435cf
tangwang
tei性能调优:
|
144
145
|
- `TEI_MAX_BATCH_TOKENS`:默认 `4096`
- `TEI_MAX_CLIENT_BATCH_SIZE`:默认 `24`
|
bc089b43
tangwang
refactor(reranker...
|
146
147
|
- `HF_CACHE_DIR`:HF 缓存目录,默认 `$HOME/.cache/huggingface`
- `HF_TOKEN`:可选,避免匿名限速
|
efd435cf
tangwang
tei性能调优:
|
148
|
- `TEI_IMAGE`:可选,手动指定镜像(通常不需要,建议使用脚本自动选择)
|
bc089b43
tangwang
refactor(reranker...
|
149
150
151
152
153
154
|
## 8. service_ctl 使用方式
启动全套(含 TEI):
```bash
|
af7ee060
tangwang
service_ctl 简化为“显...
|
155
|
TEI_DEVICE=cuda ./scripts/service_ctl.sh start embedding translator reranker tei cnclip
|
bc089b43
tangwang
refactor(reranker...
|
156
157
158
159
160
161
162
163
164
165
166
167
168
169
|
```
仅启动 TEI:
```bash
./scripts/service_ctl.sh start tei
```
查看状态:
```bash
./scripts/service_ctl.sh status tei
```
|
af7ee060
tangwang
service_ctl 简化为“显...
|
170
171
|
日志文件:`logs/tei.log`
|
bc089b43
tangwang
refactor(reranker...
|
172
173
|
## 9. 常见问题与排障
|
af7ee060
tangwang
service_ctl 简化为“显...
|
174
|
### 9.1 `ERROR: TEI_DEVICE=cuda but Docker nvidia runtime is not configured`
|
bc089b43
tangwang
refactor(reranker...
|
175
176
177
178
179
180
181
182
183
184
185
|
- 原因:Docker 未配置 NVIDIA runtime。
- 处理:按本文 4.2 配置后重启 Docker。
### 9.2 `mode mismatch (need GPU/CPU)`
- 原因:已有同名容器在另一种模式运行(比如当前是 GPU 容器,但你这次要求 CPU)。
- 处理:
```bash
./scripts/stop_tei_service.sh
|
af7ee060
tangwang
service_ctl 简化为“显...
|
186
|
TEI_DEVICE=cpu ./scripts/start_tei_service.sh # 或改为 cuda
|
bc089b43
tangwang
refactor(reranker...
|
187
188
189
190
191
192
193
194
195
196
197
198
199
200
|
```
### 9.3 embedding 服务报 TEI 不可达
- 先检查 TEI:
```bash
curl -sS http://127.0.0.1:8080/health
```
- 再检查 embedding 侧地址:
- `TEI_BASE_URL`
- `services.embedding.backends.tei.base_url`(`config/config.yaml`)
|
efd435cf
tangwang
tei性能调优:
|
201
202
203
204
205
206
207
208
209
210
211
|
### 9.4 `/embed/text` 第二次请求开始出现 NaN/null
- 常见原因:在 T4 这类 pre-Ampere GPU 上误用了 `cuda-*` TEI 镜像。
- 处理:
```bash
./scripts/start_tei_service.sh
```
该脚本会自动按 GPU 架构选择镜像,并在启动后做两次输出探测;若发现 `null/NaN/Inf` 会直接失败并清理错误容器。
|
bc089b43
tangwang
refactor(reranker...
|
212
213
214
215
216
217
|
## 10. 相关文档
- 开发总览:`docs/QUICKSTART.md`
- 体系规范:`docs/DEVELOPER_GUIDE.md`
- embedding 模块:`embeddings/README.md`
- CN-CLIP 专项:`docs/CNCLIP_SERVICE说明文档.md`
|