Blame view

docs/TEI_SERVICE说明文档.md 5.58 KB
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
66
67
68
69
70
  # 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
  TEI_USE_GPU=1 ./scripts/start_tei_service.sh
  ```
  
  预期输出包含:
  
efd435cf   tangwang   tei性能调优:
71
  - `Image: ghcr.io/huggingface/text-embeddings-inference:turing-...` 或 `cuda-...`(脚本按 GPU 架构自动选择)
bc089b43   tangwang   refactor(reranker...
72
  - `Mode: gpu`
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
82
83
84
85
86
87
88
  
  ### 5.2 CPU 模式启动(显式)
  
  ```bash
  TEI_USE_GPU=0 ./scripts/start_tei_service.sh
  ```
  
  预期输出包含:
  
  - `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
138
139
140
141
142
143
  ## 7. 配置项(环境变量)
  
  `scripts/start_tei_service.sh` 支持下列变量:
  
  - `TEI_USE_GPU`:`1/0`(或 `true/false`),默认 `1`
  - `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
7fbca0d7   tangwang   启动脚本优化
155
  START_EMBEDDING=1 START_TRANSLATOR=1 START_RERANKER=1 START_TEI=1 START_CNCLIP=1 TEI_USE_GPU=1 ./scripts/service_ctl.sh start
bc089b43   tangwang   refactor(reranker...
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
  ```
  
  仅启动 TEI:
  
  ```bash
  ./scripts/service_ctl.sh start tei
  ```
  
  查看状态:
  
  ```bash
  ./scripts/service_ctl.sh status tei
  ```
  
  ## 9. 常见问题与排障
  
  ### 9.1 `ERROR: TEI_USE_GPU=1 but Docker nvidia runtime is not configured`
  
  - 原因:Docker 未配置 NVIDIA runtime。
  - 处理:按本文 4.2 配置后重启 Docker。
  
  ### 9.2 `mode mismatch (need GPU/CPU)`
  
  - 原因:已有同名容器在另一种模式运行(比如当前是 GPU 容器,但你这次要求 CPU)。
  - 处理:
  
  ```bash
  ./scripts/stop_tei_service.sh
  TEI_USE_GPU=0 ./scripts/start_tei_service.sh   # 或改为 1
  ```
  
  ### 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性能调优:
199
200
201
202
203
204
205
206
207
208
209
  ### 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...
210
211
212
213
214
215
  ## 10. 相关文档
  
  - 开发总览:`docs/QUICKSTART.md`
  - 体系规范:`docs/DEVELOPER_GUIDE.md`
  - embedding 模块:`embeddings/README.md`
  - CN-CLIP 专项:`docs/CNCLIP_SERVICE说明文档.md`