Blame view

docs/TEI_SERVICE说明文档.md 5.57 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
  # 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
28e57bb1   tangwang   日志体系优化
155
  TEI_DEVICE=cuda ./scripts/service_ctl.sh start tei cnclip embedding translator reranker
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`