Blame view

docs/CNCLIP_SERVICE说明文档.md 4.85 KB
cc11ae04   tangwang   cnclip
1
  # CN-CLIP 服务(clip-as-service)说明
768ad710   tangwang   MySQL到ES字段映射说明-业务...
2
  
cc11ae04   tangwang   cnclip
3
  > 本文是本仓库的 CN-CLIP 运行手册与约束说明。主流程仍是 `embedding` 服务(`6005`);当 `embeddings/config.py` 中 `USE_CLIP_AS_SERVICE=true` 时,`embedding` 会调用本 gRPC 服务(默认 `grpc://127.0.0.1:51000`)生成图片向量。
42e3aea6   tangwang   tidy
4
  
cc11ae04   tangwang   cnclip
5
  ## 1. 设计目标与官方对齐
42e3aea6   tangwang   tidy
6
  
cc11ae04   tangwang   cnclip
7
8
9
  - 采用 `clip-as-service` 的标准拆分:`clip-server`(服务端)与 `clip-client`(客户端)可独立安装。
  - 服务协议使用 gRPC,符合官方推荐与本项目现有调用链。
  - 保持“主项目环境”和“CN-CLIP 专用环境”解耦,避免 `grpcio/jina/docarray` 与主项目依赖互相污染。
768ad710   tangwang   MySQL到ES字段映射说明-业务...
10
  
cc11ae04   tangwang   cnclip
11
12
  官方仓库(安装方式、server/client 分离、基本使用示例):
  [jina-ai/clip-as-service](https://github.com/jina-ai/clip-as-service)
768ad710   tangwang   MySQL到ES字段映射说明-业务...
13
  
cc11ae04   tangwang   cnclip
14
  ## 2. 当前架构(本仓库)
768ad710   tangwang   MySQL到ES字段映射说明-业务...
15
  
cc11ae04   tangwang   cnclip
16
17
18
19
20
21
22
  - **服务启动脚本**`scripts/start_cnclip_service.sh`
  - **服务停止脚本**`scripts/stop_cnclip_service.sh`
  - **环境初始化脚本**`scripts/setup_cnclip_venv.sh`
  - **统一编排入口**`scripts/service_ctl.sh`(`restart.sh` 调用它)
  - **默认端口**`51000`
  - **默认模型**`CN-CLIP/ViT-H-14`
  - **默认协议**:gRPC
768ad710   tangwang   MySQL到ES字段映射说明-业务...
23
  
cc11ae04   tangwang   cnclip
24
  ## 3. 环境准备策略(推荐做法)
768ad710   tangwang   MySQL到ES字段映射说明-业务...
25
  
cc11ae04   tangwang   cnclip
26
  ### 3.1 推荐:专用 venv(`.venv-cnclip`)
40f1e391   tangwang   cnclip
27
  
cc11ae04   tangwang   cnclip
28
29
30
  ```bash
  ./scripts/setup_cnclip_venv.sh
  ```
74cca190   tangwang   cnclip
31
  
cc11ae04   tangwang   cnclip
32
  脚本会创建 `.venv-cnclip`,并处理已知兼容性问题(`grpcio`、`jina`、`docarray`、`pkg_resources` 等),避免在主 `.venv` 中反复冲突。
74cca190   tangwang   cnclip
33
  
cc11ae04   tangwang   cnclip
34
  ### 3.2 启动时的环境选择
74cca190   tangwang   cnclip
35
  
cc11ae04   tangwang   cnclip
36
  `start_cnclip_service.sh` 的优先级:
74cca190   tangwang   cnclip
37
  
cc11ae04   tangwang   cnclip
38
39
40
  1. 若存在 `.venv-cnclip`,优先使用;
  2. 否则回退到项目统一环境(`source activate.sh`);
  3. 若两者都不可用,启动失败并提示修复动作。
40f1e391   tangwang   cnclip
41
  
cc11ae04   tangwang   cnclip
42
  ## 4. 服务管理方式(推荐)
40f1e391   tangwang   cnclip
43
  
cc11ae04   tangwang   cnclip
44
  ### 4.1 单独启动/停止
74cca190   tangwang   cnclip
45
  
40f1e391   tangwang   cnclip
46
  ```bash
cc11ae04   tangwang   cnclip
47
48
  ./scripts/start_cnclip_service.sh --device cuda
  ./scripts/stop_cnclip_service.sh
40f1e391   tangwang   cnclip
49
50
  ```
  
cc11ae04   tangwang   cnclip
51
  ### 4.2 统一编排(推荐日常用法)
40f1e391   tangwang   cnclip
52
53
  
  ```bash
cc11ae04   tangwang   cnclip
54
55
56
  ./scripts/service_ctl.sh restart
  # 或
  ./restart.sh
40f1e391   tangwang   cnclip
57
58
  ```
  
cc11ae04   tangwang   cnclip
59
60
  `service_ctl.sh` 在启动 `cnclip` 时默认注入 `CNCLIP_DEVICE=cuda`
  若机器无 GPU 或希望改用 CPU,可在 `.env` 设置:
40f1e391   tangwang   cnclip
61
62
  
  ```bash
cc11ae04   tangwang   cnclip
63
  CNCLIP_DEVICE=cpu
40f1e391   tangwang   cnclip
64
65
  ```
  
cc11ae04   tangwang   cnclip
66
  ## 5. GPU 使用与验证
40f1e391   tangwang   cnclip
67
  
cc11ae04   tangwang   cnclip
68
  ### 5.1 必须点
40f1e391   tangwang   cnclip
69
  
cc11ae04   tangwang   cnclip
70
71
  - 启动日志显示 `device: cuda` 仅代表配置传入成功;
  - 只有在**首次编码请求触发模型加载后**`nvidia-smi` 才一定能看到显存占用。
40f1e391   tangwang   cnclip
72
  
cc11ae04   tangwang   cnclip
73
  ### 5.2 推荐验证步骤
40f1e391   tangwang   cnclip
74
  
cc11ae04   tangwang   cnclip
75
  1) 启动服务:
40f1e391   tangwang   cnclip
76
  
cc11ae04   tangwang   cnclip
77
78
79
  ```bash
  ./scripts/start_cnclip_service.sh --port 51000 --device cuda
  ```
40f1e391   tangwang   cnclip
80
  
cc11ae04   tangwang   cnclip
81
  2) 发送一次请求(触发模型加载):
40f1e391   tangwang   cnclip
82
  
cc11ae04   tangwang   cnclip
83
84
  ```bash
  PYTHONPATH="third-party/clip-as-service/client:${PYTHONPATH}" NO_VERSION_CHECK=1 .venv-cnclip/bin/python -c "
74cca190   tangwang   cnclip
85
  from clip_client import Client
74cca190   tangwang   cnclip
86
  c = Client('grpc://localhost:51000')
cc11ae04   tangwang   cnclip
87
88
89
  r = c.encode(['测试'])
  print('shape:', r.shape)
  "
40f1e391   tangwang   cnclip
90
91
  ```
  
cc11ae04   tangwang   cnclip
92
  3) 观察 GPU:
40f1e391   tangwang   cnclip
93
  
cc11ae04   tangwang   cnclip
94
95
  ```bash
  nvidia-smi
74cca190   tangwang   cnclip
96
  ```
40f1e391   tangwang   cnclip
97
  
cc11ae04   tangwang   cnclip
98
99
100
  预期:
  - `shape` 为 `(1, 1024)`
  - `nvidia-smi` 出现对应 `python`/`clip_server` 进程并有显存占用。
40f1e391   tangwang   cnclip
101
  
cc11ae04   tangwang   cnclip
102
  ## 6. 使用方式(客户端)
40f1e391   tangwang   cnclip
103
  
cc11ae04   tangwang   cnclip
104
  ### 6.1 在本仓库中(推荐)
40f1e391   tangwang   cnclip
105
  
cc11ae04   tangwang   cnclip
106
107
  - 服务消费者一般是 `embedding` 服务,不建议业务侧直接连 `cnclip`
  - 若需手动调试,可在主 `.venv` 安装 client,或通过 `PYTHONPATH` 使用 vendored client。
74cca190   tangwang   cnclip
108
  
cc11ae04   tangwang   cnclip
109
  示例:
74cca190   tangwang   cnclip
110
  
cc11ae04   tangwang   cnclip
111
112
  ```python
  from clip_client import Client
74cca190   tangwang   cnclip
113
  
cc11ae04   tangwang   cnclip
114
115
116
  c = Client("grpc://127.0.0.1:51000")
  vec = c.encode(["https://example.com/a.jpg", "测试文本"])
  print(vec.shape)  # (2, 1024)
40f1e391   tangwang   cnclip
117
118
  ```
  
cc11ae04   tangwang   cnclip
119
  ### 6.2 常见误区
40f1e391   tangwang   cnclip
120
  
cc11ae04   tangwang   cnclip
121
122
123
  - ❌ 用 `http://localhost:51000` 当成 HTTP 服务访问;
  - ❌ 只看“启动成功”就判断已用 GPU,不发请求不看 `nvidia-smi`
  - ❌ 在主 `.venv` 直接安装 server 依赖导致依赖树污染。
40f1e391   tangwang   cnclip
124
  
cc11ae04   tangwang   cnclip
125
  ## 7. 已知兼容性说明(关键信息)
40f1e391   tangwang   cnclip
126
  
cc11ae04   tangwang   cnclip
127
128
129
  - `clip-as-service` 在本项目场景下依赖链较老,`grpcio`/`jina`/`docarray` 组合在 Python 3.12 上易触发源码构建问题。
  - `setuptools>=82` 移除了 `pkg_resources`;而部分依赖链仍会导入它,因此专用脚本固定了兼容范围。
  - `setup_cnclip_venv.sh` 中存在“为可运行性而做的约束收敛”,这是有意行为,不建议手动放开。
40f1e391   tangwang   cnclip
130
  
cc11ae04   tangwang   cnclip
131
  ## 8. 排障速查
40f1e391   tangwang   cnclip
132
  
cc11ae04   tangwang   cnclip
133
  ### 8.1 启动失败
40f1e391   tangwang   cnclip
134
  
cc11ae04   tangwang   cnclip
135
136
137
  - 查看日志:`tail -f logs/cnclip_service.log`
  - 检查端口占用:`lsof -i :51000`
  - 重新构建环境:`rm -rf .venv-cnclip && ./scripts/setup_cnclip_venv.sh`
74cca190   tangwang   cnclip
138
  
cc11ae04   tangwang   cnclip
139
  ### 8.2 连接失败
40f1e391   tangwang   cnclip
140
  
cc11ae04   tangwang   cnclip
141
142
  - 确认客户端使用 `grpc://` 协议;
  - 确认端口与服务端一致(默认 `51000`)。
74cca190   tangwang   cnclip
143
  
cc11ae04   tangwang   cnclip
144
  ### 8.3 看不到 GPU 进程
74cca190   tangwang   cnclip
145
  
cc11ae04   tangwang   cnclip
146
147
148
  - 先发一次编码请求,再看 `nvidia-smi`
  - 确认启动参数或环境变量为 `cuda`(`--device cuda` 或 `CNCLIP_DEVICE=cuda`);
  - 确认日志中无模型加载异常。
40f1e391   tangwang   cnclip
149
  
cc11ae04   tangwang   cnclip
150
  ## 9. 与其他文档的关系
40f1e391   tangwang   cnclip
151
  
cc11ae04   tangwang   cnclip
152
153
154
  - 开发总览:`docs/QUICKSTART.md`
  - 系统架构:`docs/DEVELOPER_GUIDE.md`
  - 向量服务说明:`embeddings/README.md`
40f1e391   tangwang   cnclip
155
  
cc11ae04   tangwang   cnclip
156
  本文件聚焦 CN-CLIP(clip-as-service)专项,不重复解释项目通用内容。