Blame view

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