Blame view

docs/CNCLIP_SERVICE说明文档.md 5.31 KB
cc11ae04   tangwang   cnclip
1
  # CN-CLIP 服务(clip-as-service)说明
768ad710   tangwang   MySQL到ES字段映射说明-业务...
2
  
bc089b43   tangwang   refactor(reranker...
3
  > 本文是本仓库 CN-CLIP(图片向量)专项运行手册。目标是让新同事在新机器上独立完成环境准备、部署、验收与排障。
42e3aea6   tangwang   tidy
4
  
bc089b43   tangwang   refactor(reranker...
5
  ## 1. 作用与边界
42e3aea6   tangwang   tidy
6
  
7a013ca7   tangwang   多模态文本向量服务ok
7
8
9
10
11
  - `cnclip` 是独立 gRPC 服务(默认 `grpc://127.0.0.1:51000`),底层为 **Chinese-CLIP****图像与文本在同一向量空间**(图文可互检)。
  - 图片 embedding 服务(默认 `6008`)在 `image_backend: clip_as_service` 时通过 gRPC 调用它完成:
    - `POST /embed/image`:图片 URL / 本地路径 → 图向量;
    - `POST /embed/clip_text`:**自然语言短语** → 文本塔向量(与上图向量同空间,用于 `image_embedding` 检索、以文搜图等)。
  - **语义检索用的文本向量**`title_embedding`、query 语义召回)仍由 **TEI(8080)+ `POST /embed/text`(6005)** 负责,与 CN-CLIP 不是同一模型、不是同一向量空间;请勿混淆。
768ad710   tangwang   MySQL到ES字段映射说明-业务...
12
  
bc089b43   tangwang   refactor(reranker...
13
  ## 2. 代码与脚本入口
768ad710   tangwang   MySQL到ES字段映射说明-业务...
14
  
bc089b43   tangwang   refactor(reranker...
15
16
17
18
  - 环境初始化:`scripts/setup_cnclip_venv.sh`
  - 启动:`scripts/start_cnclip_service.sh`
  - 停止:`scripts/stop_cnclip_service.sh`
  - 统一编排:`scripts/service_ctl.sh`
768ad710   tangwang   MySQL到ES字段映射说明-业务...
19
  
bc089b43   tangwang   refactor(reranker...
20
  ## 3. 前置条件
768ad710   tangwang   MySQL到ES字段映射说明-业务...
21
  
bc089b43   tangwang   refactor(reranker...
22
  ### 3.1 必需软件
768ad710   tangwang   MySQL到ES字段映射说明-业务...
23
  
bc089b43   tangwang   refactor(reranker...
24
25
26
27
28
29
30
31
32
  - Python 3.12(由仓库脚本创建虚拟环境)
  - 可访问模型下载源(Hugging Face / 镜像源)
  
  ### 3.2 GPU 模式额外要求
  
  - NVIDIA 驱动可用(`nvidia-smi` 可执行)
  - `cnclip` 设备设为 `cuda`
  
  检查命令:
40f1e391   tangwang   cnclip
33
  
cc11ae04   tangwang   cnclip
34
  ```bash
bc089b43   tangwang   refactor(reranker...
35
  nvidia-smi
cc11ae04   tangwang   cnclip
36
  ```
74cca190   tangwang   cnclip
37
  
bc089b43   tangwang   refactor(reranker...
38
  ## 4. 环境安装(可复现)
74cca190   tangwang   cnclip
39
  
bc089b43   tangwang   refactor(reranker...
40
41
42
43
44
45
  在仓库根目录执行:
  
  ```bash
  cd /data/saas-search
  ./scripts/setup_cnclip_venv.sh
  ```
74cca190   tangwang   cnclip
46
  
bc089b43   tangwang   refactor(reranker...
47
48
  脚本会创建 `.venv-cnclip`,并安装 `clip-as-service` 服务端所需依赖。  
  `start_cnclip_service.sh` 只使用这个专用环境,不会污染主 `.venv`
40f1e391   tangwang   cnclip
49
  
bc089b43   tangwang   refactor(reranker...
50
  ## 5. 启动与停止
40f1e391   tangwang   cnclip
51
  
bc089b43   tangwang   refactor(reranker...
52
  ### 5.1 GPU 模式(推荐)
74cca190   tangwang   cnclip
53
  
40f1e391   tangwang   cnclip
54
  ```bash
cc11ae04   tangwang   cnclip
55
  ./scripts/start_cnclip_service.sh --device cuda
bc089b43   tangwang   refactor(reranker...
56
57
58
59
60
61
62
63
  ```
  
  ### 5.2 CPU 模式(显式)
  
  ```bash
  ./scripts/start_cnclip_service.sh --device cpu
  ```
  
4747e2f4   tangwang   embedding perform...
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
  ### 5.3 模型配置与覆盖
  
  - 仓库默认模型取自 `embeddings/config.py` 的 `CLIP_AS_SERVICE_MODEL_NAME`
  - `scripts/start_cnclip_service.sh` 会自动读取这个配置,因此修改默认模型时不需要再去脚本里找硬编码。
  - 覆盖优先级:`--model-name` > `CNCLIP_MODEL_NAME` > `CLIP_AS_SERVICE_MODEL_NAME` / `embeddings/config.py`
  
  查看当前默认模型:
  
  ```bash
  python3 -c "from embeddings.config import CONFIG; print(CONFIG.CLIP_AS_SERVICE_MODEL_NAME)"
  ```
  
  临时覆盖模型:
  
  ```bash
6d71d8e0   tangwang   多模态模型配置
79
80
  ./scripts/start_cnclip_service.sh --model-name CN-CLIP/ViT-L-14   # 768 维,需与索引 dims 一致
  CNCLIP_MODEL_NAME=CN-CLIP/ViT-H-14 ./scripts/service_ctl.sh start cnclip   # 默认 1024 维(与 mappings 中 image_embedding 一致)
4747e2f4   tangwang   embedding perform...
81
82
83
  ```
  
  ### 5.4 停止服务
bc089b43   tangwang   refactor(reranker...
84
85
  
  ```bash
cc11ae04   tangwang   cnclip
86
  ./scripts/stop_cnclip_service.sh
40f1e391   tangwang   cnclip
87
88
  ```
  
bc089b43   tangwang   refactor(reranker...
89
90
91
  ## 6. service_ctl 的行为与约定
  
  ### 6.1 通过统一编排启动
40f1e391   tangwang   cnclip
92
93
  
  ```bash
af7ee060   tangwang   service_ctl 简化为“显...
94
  ./scripts/service_ctl.sh start cnclip
5bac9649   tangwang   文本 embedding 与图片 ...
95
  # 或一次启动可选能力:./scripts/service_ctl.sh start embedding embedding-image tei cnclip
40f1e391   tangwang   cnclip
96
97
  ```
  
bc089b43   tangwang   refactor(reranker...
98
99
100
  ### 6.2 设备选择优先级
  
  - 显式传入 `CNCLIP_DEVICE` 时,以该值为准:
40f1e391   tangwang   cnclip
101
102
  
  ```bash
bc089b43   tangwang   refactor(reranker...
103
104
  CNCLIP_DEVICE=cuda ./scripts/service_ctl.sh start cnclip
  CNCLIP_DEVICE=cpu  ./scripts/service_ctl.sh start cnclip
40f1e391   tangwang   cnclip
105
106
  ```
  
bc089b43   tangwang   refactor(reranker...
107
108
109
  - 不传 `CNCLIP_DEVICE` 时,默认 `cuda`
  
  ### 6.3 运行中模式校验(重要)
40f1e391   tangwang   cnclip
110
  
bc089b43   tangwang   refactor(reranker...
111
112
  `service_ctl` 会在“已运行”场景下检查当前 `cnclip` 的 device 与期望是否一致。  
  若不一致会直接报错,防止“服务已启动但模式错了”的静默问题。
40f1e391   tangwang   cnclip
113
  
bc089b43   tangwang   refactor(reranker...
114
  例如:当前运行是 CPU,但你期望 CUDA,会提示先 stop 再按 CUDA 重启。
40f1e391   tangwang   cnclip
115
  
bc089b43   tangwang   refactor(reranker...
116
  ## 7. 验收步骤(必须做)
40f1e391   tangwang   cnclip
117
  
bc089b43   tangwang   refactor(reranker...
118
  ### 7.1 基础状态
40f1e391   tangwang   cnclip
119
  
cc11ae04   tangwang   cnclip
120
  ```bash
bc089b43   tangwang   refactor(reranker...
121
  ./scripts/service_ctl.sh status cnclip
cc11ae04   tangwang   cnclip
122
  ```
40f1e391   tangwang   cnclip
123
  
bc089b43   tangwang   refactor(reranker...
124
125
126
127
128
129
130
131
132
133
  ### 7.2 核对运行配置
  
  ```bash
  cat third-party/clip-as-service/server/torch-flow-temp.yml
  ```
  
  应看到:
  
  - GPU 模式:`device: 'cuda'`
  - CPU 模式:`device: 'cpu'`
4747e2f4   tangwang   embedding perform...
134
  - 模型名:`name: '<当前实际模型名>'`
bc089b43   tangwang   refactor(reranker...
135
  
af7ee060   tangwang   service_ctl 简化为“显...
136
137
138
139
140
  ### 7.2.1 日志与 PID 文件
  
  - 日志:`logs/cnclip.log`
  - PID:`logs/cnclip.pid`
  
bc089b43   tangwang   refactor(reranker...
141
  ### 7.3 发送一次编码请求(触发模型加载)
40f1e391   tangwang   cnclip
142
  
7a013ca7   tangwang   多模态文本向量服务ok
143
144
  **gRPC 直连(文本或图片 URL 混传时由 client 自动区分):**
  
cc11ae04   tangwang   cnclip
145
  ```bash
bc089b43   tangwang   refactor(reranker...
146
147
148
  PYTHONPATH="third-party/clip-as-service/client:${PYTHONPATH}" \
  NO_VERSION_CHECK=1 \
  .venv-cnclip/bin/python - <<'PY'
74cca190   tangwang   cnclip
149
  from clip_client import Client
bc089b43   tangwang   refactor(reranker...
150
  c = Client('grpc://127.0.0.1:51000')
cc11ae04   tangwang   cnclip
151
152
  r = c.encode(['测试'])
  print('shape:', r.shape)
bc089b43   tangwang   refactor(reranker...
153
  PY
40f1e391   tangwang   cnclip
154
155
  ```
  
bc089b43   tangwang   refactor(reranker...
156
157
  预期 `shape` 为 `(1, 1024)`
  
7a013ca7   tangwang   多模态文本向量服务ok
158
159
160
161
162
163
164
165
  **HTTP(推荐业务侧):图片走 6008 `/embed/image`,纯文本走 `/embed/clip_text`(勿把 `http://` 图 URL 发到 `clip_text`):**
  
  ```bash
  curl -sS -X POST "http://127.0.0.1:6008/embed/clip_text?normalize=true&priority=1" \
    -H "Content-Type: application/json" \
    -d '["纯棉T恤", "芭比娃娃"]'
  ```
  
bc089b43   tangwang   refactor(reranker...
166
  ### 7.4 GPU 验证
40f1e391   tangwang   cnclip
167
  
cc11ae04   tangwang   cnclip
168
169
  ```bash
  nvidia-smi
74cca190   tangwang   cnclip
170
  ```
40f1e391   tangwang   cnclip
171
  
bc089b43   tangwang   refactor(reranker...
172
  GPU 模式下应出现 `clip_server` 相关 `python` 进程及显存占用。
40f1e391   tangwang   cnclip
173
  
bc089b43   tangwang   refactor(reranker...
174
  ### 7.5 与 embedding 服务联调
40f1e391   tangwang   cnclip
175
  
bc089b43   tangwang   refactor(reranker...
176
  ```bash
5bac9649   tangwang   文本 embedding 与图片 ...
177
  ./scripts/start_embedding_image_service.sh
40f1e391   tangwang   cnclip
178
  
5bac9649   tangwang   文本 embedding 与图片 ...
179
  curl -sS -X POST "http://127.0.0.1:6008/embed/image" \
bc089b43   tangwang   refactor(reranker...
180
181
182
    -H "Content-Type: application/json" \
    -d '["https://oss.essa.cn/98532128-cf8e-456c-9e30-6f2a5ea0c19f.jpg"]'
  ```
74cca190   tangwang   cnclip
183
  
bc089b43   tangwang   refactor(reranker...
184
  返回应为向量数组(非空)。
74cca190   tangwang   cnclip
185
  
9f5994b4   tangwang   reranker
186
  ## 8. 相关文档
40f1e391   tangwang   cnclip
187
  
cc11ae04   tangwang   cnclip
188
  - 开发总览:`docs/QUICKSTART.md`
bc089b43   tangwang   refactor(reranker...
189
190
191
  - TEI 专项:`docs/TEI_SERVICE说明文档.md`
  - 体系规范:`docs/DEVELOPER_GUIDE.md`
  - embedding 模块:`embeddings/README.md`