Blame view

docs/CNCLIP_SERVICE.md 4.16 KB
74cca190   tangwang   cnclip
1
  # CN-CLIP 编码服务
40f1e391   tangwang   cnclip
2
  
74cca190   tangwang   cnclip
3
  ## 模块说明
40f1e391   tangwang   cnclip
4
  
74cca190   tangwang   cnclip
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  CN-CLIP 编码服务基于 [clip-as-service](https://github.com/jina-ai/clip-as-service) 提供中文 CLIP 模型的文本和图像编码功能。服务使用 gRPC 协议,支持批量编码,返回固定维度的向量表示。
  
  ### 功能特性
  
  - 文本编码:将中文文本编码为向量
  - 图像编码:将图像(本地文件或远程 URL)编码为向量
  - 混合编码:同时编码文本和图像
  - 批量处理:支持批量编码,提高效率
  
  ### 技术架构
  
  - **框架**: clip-as-service (基于 Jina)
  - **模型**: CN-CLIP/ViT-L-14-336(默认)
  - **协议**: gRPC(默认,官方推荐)
  - **运行时**: PyTorch
40f1e391   tangwang   cnclip
20
21
22
  
  ## 启动服务
  
74cca190   tangwang   cnclip
23
24
  ### 基本用法
  
40f1e391   tangwang   cnclip
25
26
27
28
29
30
  ```bash
  ./scripts/start_cnclip_service.sh
  ```
  
  ### 启动参数
  
74cca190   tangwang   cnclip
31
32
33
34
35
36
37
38
39
  | 参数 | 说明 | 默认值 |
  |------|------|--------|
  | `--port PORT` | 服务端口 | 51000 |
  | `--device DEVICE` | 设备类型:cuda 或 cpu | 自动检测 |
  | `--batch-size SIZE` | 批处理大小 | 32 |
  | `--num-workers NUM` | 预处理线程数 | 4 |
  | `--dtype TYPE` | 数据类型:float16 或 float32 | float16 |
  | `--model-name NAME` | 模型名称 | CN-CLIP/ViT-L-14-336 |
  | `--replicas NUM` | 副本数 | 1 |
40f1e391   tangwang   cnclip
40
41
42
43
44
45
46
47
48
49
  
  ### 示例
  
  ```bash
  # 使用默认配置启动
  ./scripts/start_cnclip_service.sh
  
  # 指定端口和设备
  ./scripts/start_cnclip_service.sh --port 52000 --device cpu
  
74cca190   tangwang   cnclip
50
51
  # 使用其他模型
  ./scripts/start_cnclip_service.sh --model-name CN-CLIP/ViT-H-14
40f1e391   tangwang   cnclip
52
53
  ```
  
74cca190   tangwang   cnclip
54
  ### 停止服务
40f1e391   tangwang   cnclip
55
56
57
58
59
  
  ```bash
  ./scripts/stop_cnclip_service.sh
  ```
  
74cca190   tangwang   cnclip
60
  ## API 接口说明
40f1e391   tangwang   cnclip
61
  
74cca190   tangwang   cnclip
62
  ### Python 客户端
40f1e391   tangwang   cnclip
63
  
74cca190   tangwang   cnclip
64
  服务使用 gRPC 协议,必须使用 Python 客户端:
40f1e391   tangwang   cnclip
65
  
74cca190   tangwang   cnclip
66
67
  ```python
  from clip_client import Client
40f1e391   tangwang   cnclip
68
  
74cca190   tangwang   cnclip
69
70
  # 创建客户端(使用 grpc:// 协议)
  c = Client('grpc://localhost:51000')
40f1e391   tangwang   cnclip
71
72
  ```
  
74cca190   tangwang   cnclip
73
  ### 编码接口
40f1e391   tangwang   cnclip
74
  
74cca190   tangwang   cnclip
75
  #### 1. 文本编码
40f1e391   tangwang   cnclip
76
  
74cca190   tangwang   cnclip
77
78
  ```python
  from clip_client import Client
40f1e391   tangwang   cnclip
79
  
74cca190   tangwang   cnclip
80
81
82
83
84
  c = Client('grpc://localhost:51000')
  
  # 编码单个文本
  result = c.encode(['这是测试文本'])
  print(result.shape)  # (1, 1024)
40f1e391   tangwang   cnclip
85
  
74cca190   tangwang   cnclip
86
87
88
  # 编码多个文本
  result = c.encode(['文本1', '文本2', '文本3'])
  print(result.shape)  # (3, 1024)
40f1e391   tangwang   cnclip
89
90
  ```
  
74cca190   tangwang   cnclip
91
  #### 2. 图像编码
40f1e391   tangwang   cnclip
92
  
74cca190   tangwang   cnclip
93
94
95
96
  ```python
  # 编码远程图像 URL
  result = c.encode(['https://oss.essa.cn/98532128-cf8e-456c-9e30-6f2a5ea0c19f.jpg'])
  print(result.shape)  # (1, 1024)
40f1e391   tangwang   cnclip
97
  
74cca190   tangwang   cnclip
98
99
100
  # 编码本地图像文件
  result = c.encode(['/path/to/image.jpg'])
  print(result.shape)  # (1, 1024)
40f1e391   tangwang   cnclip
101
102
  ```
  
74cca190   tangwang   cnclip
103
  #### 3. 混合编码
40f1e391   tangwang   cnclip
104
105
  
  ```python
74cca190   tangwang   cnclip
106
107
108
109
110
111
112
113
  # 同时编码文本和图像
  result = c.encode([
      '这是文本',
      'https://oss.essa.cn/98532128-cf8e-456c-9e30-6f2a5ea0c19f.jpg',
      '另一个文本'
  ])
  print(result.shape)  # (3, 1024)
  ```
40f1e391   tangwang   cnclip
114
  
74cca190   tangwang   cnclip
115
  ### 返回格式
40f1e391   tangwang   cnclip
116
  
74cca190   tangwang   cnclip
117
118
119
120
  - **类型**: `numpy.ndarray`
  - **形状**: `(N, 1024)`,其中 N 是输入数量
  - **数据类型**: `float32`
  - **维度**: 1024(CN-CLIP 模型的 embedding 维度)
40f1e391   tangwang   cnclip
121
  
74cca190   tangwang   cnclip
122
  ### 支持的模型
40f1e391   tangwang   cnclip
123
  
74cca190   tangwang   cnclip
124
125
126
127
128
129
130
131
132
133
134
135
136
137
  | 模型名称 | 说明 | 推荐场景 |
  |---------|------|---------|
  | `CN-CLIP/ViT-B-16` | 基础版本,速度快 | 对速度要求高的场景 |
  | `CN-CLIP/ViT-L-14` | 平衡版本 | 通用场景 |
  | `CN-CLIP/ViT-L-14-336` | 高分辨率版本(默认) | 需要处理高分辨率图像 |
  | `CN-CLIP/ViT-H-14` | 大型版本,精度高 | 对精度要求高的场景 |
  | `CN-CLIP/RN50` | ResNet-50 版本 | 兼容性场景 |
  
  ## 测试
  
  运行测试脚本:
  
  ```bash
  ./scripts/test_cnclip_service.sh
40f1e391   tangwang   cnclip
138
139
  ```
  
74cca190   tangwang   cnclip
140
141
142
143
  测试脚本会验证:
  - 文本编码功能
  - 图像编码功能(远程 URL)
  - 混合编码功能
40f1e391   tangwang   cnclip
144
  
74cca190   tangwang   cnclip
145
  每个测试会显示 embedding 的维度和前 20 个数字。
40f1e391   tangwang   cnclip
146
147
148
149
150
151
152
153
154
  
  ## 查看日志
  
  ```bash
  tail -f /data/tw/SearchEngine/logs/cnclip_service.log
  ```
  
  ## 常见问题
  
74cca190   tangwang   cnclip
155
  ### 1. 服务启动失败
40f1e391   tangwang   cnclip
156
  
74cca190   tangwang   cnclip
157
158
159
  - 检查端口是否被占用:`lsof -i :51000`
  - 检查 conda 环境是否正确激活
  - 查看日志文件获取详细错误信息
40f1e391   tangwang   cnclip
160
  
74cca190   tangwang   cnclip
161
  ### 2. 客户端连接失败
40f1e391   tangwang   cnclip
162
  
74cca190   tangwang   cnclip
163
  确保使用正确的协议:
40f1e391   tangwang   cnclip
164
165
  
  ```python
74cca190   tangwang   cnclip
166
  # 正确:使用 grpc://
40f1e391   tangwang   cnclip
167
  c = Client('grpc://localhost:51000')
74cca190   tangwang   cnclip
168
169
170
  
  # 错误:不要使用 http://
  # c = Client('http://localhost:51000')  # 会失败
40f1e391   tangwang   cnclip
171
172
  ```
  
74cca190   tangwang   cnclip
173
174
175
176
177
178
179
  ### 3. 编码失败
  
  - 检查服务是否正常运行
  - 检查输入格式是否正确
  - 查看服务日志排查错误
  
  ### 4. 依赖安装
40f1e391   tangwang   cnclip
180
  
74cca190   tangwang   cnclip
181
  确保已安装必要的依赖:
40f1e391   tangwang   cnclip
182
  
74cca190   tangwang   cnclip
183
184
185
  ```bash
  pip install clip-client
  ```
40f1e391   tangwang   cnclip
186
  
74cca190   tangwang   cnclip
187
  服务端依赖会在启动脚本中自动检查。