CNCLIP_SERVICE说明文档.md
3.62 KB
CN-CLIP 服务(clip-as-service)说明
本文是本仓库 CN-CLIP(图片向量)专项运行手册。目标是让新同事在新机器上独立完成环境准备、部署、验收与排障。
1. 作用与边界
cnclip是独立 gRPC 服务(默认grpc://127.0.0.1:51000)。embedding服务(6005)在USE_CLIP_AS_SERVICE=true时调用它完成/embed/image。cnclip不负责文本向量;文本向量由 TEI(8080)负责。
2. 代码与脚本入口
- 环境初始化:
scripts/setup_cnclip_venv.sh - 启动:
scripts/start_cnclip_service.sh - 停止:
scripts/stop_cnclip_service.sh - 统一编排:
scripts/service_ctl.sh
3. 前置条件
3.1 必需软件
- Python 3.12(由仓库脚本创建虚拟环境)
- 可访问模型下载源(Hugging Face / 镜像源)
3.2 GPU 模式额外要求
- NVIDIA 驱动可用(
nvidia-smi可执行) cnclip设备设为cuda
检查命令:
nvidia-smi
4. 环境安装(可复现)
在仓库根目录执行:
cd /data/saas-search
./scripts/setup_cnclip_venv.sh
脚本会创建 .venv-cnclip,并安装 clip-as-service 服务端所需依赖。
start_cnclip_service.sh 只使用这个专用环境,不会污染主 .venv。
5. 启动与停止
5.1 GPU 模式(推荐)
./scripts/start_cnclip_service.sh --device cuda
5.2 CPU 模式(显式)
./scripts/start_cnclip_service.sh --device cpu
5.3 停止服务
./scripts/stop_cnclip_service.sh
6. service_ctl 的行为与约定
6.1 通过统一编排启动
./scripts/service_ctl.sh start cnclip
# 或一次启动可选能力:./scripts/service_ctl.sh start embedding tei cnclip
6.2 设备选择优先级
- 显式传入
CNCLIP_DEVICE时,以该值为准:
CNCLIP_DEVICE=cuda ./scripts/service_ctl.sh start cnclip
CNCLIP_DEVICE=cpu ./scripts/service_ctl.sh start cnclip
- 不传
CNCLIP_DEVICE时,默认cuda。
6.3 运行中模式校验(重要)
service_ctl 会在“已运行”场景下检查当前 cnclip 的 device 与期望是否一致。
若不一致会直接报错,防止“服务已启动但模式错了”的静默问题。
例如:当前运行是 CPU,但你期望 CUDA,会提示先 stop 再按 CUDA 重启。
7. 验收步骤(必须做)
7.1 基础状态
./scripts/service_ctl.sh status cnclip
7.2 核对运行配置
cat third-party/clip-as-service/server/torch-flow-temp.yml
应看到:
- GPU 模式:
device: 'cuda' - CPU 模式:
device: 'cpu'
7.2.1 日志与 PID 文件
- 日志:
logs/cnclip.log - PID:
logs/cnclip.pid
7.3 发送一次编码请求(触发模型加载)
PYTHONPATH="third-party/clip-as-service/client:${PYTHONPATH}" \
NO_VERSION_CHECK=1 \
.venv-cnclip/bin/python - <<'PY'
from clip_client import Client
c = Client('grpc://127.0.0.1:51000')
r = c.encode(['测试'])
print('shape:', r.shape)
PY
预期 shape 为 (1, 1024)。
7.4 GPU 验证
nvidia-smi
GPU 模式下应出现 clip_server 相关 python 进程及显存占用。
7.5 与 embedding 服务联调
./scripts/start_embedding_service.sh
curl -sS -X POST "http://127.0.0.1:6005/embed/image" \
-H "Content-Type: application/json" \
-d '["https://oss.essa.cn/98532128-cf8e-456c-9e30-6f2a5ea0c19f.jpg"]'
返回应为向量数组(非空)。
8. 相关文档
- 开发总览:
docs/QUICKSTART.md - TEI 专项:
docs/TEI_SERVICE说明文档.md - 体系规范:
docs/DEVELOPER_GUIDE.md - embedding 模块:
embeddings/README.md