diff --git a/config/config.yaml b/config/config.yaml index 6d0cbd6..10d9265 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -364,16 +364,18 @@ services: device: "cuda" batch_size: 32 normalize_embeddings: true - # 服务内图片后端(embedding 进程启动时读取) + # 服务内图片后端(embedding 进程启动时读取;cnclip gRPC 与 6008 须同一 model_name) + # Chinese-CLIP:ViT-H-14 → 1024 维,ViT-L-14 → 768 维。须与 mappings/search_products.json 中 + # image_embedding.vector.dims 一致(当前索引为 1024 → 默认 ViT-H-14)。 image_backend: "clip_as_service" # clip_as_service | local_cnclip image_backends: clip_as_service: server: "grpc://127.0.0.1:51000" - model_name: "CN-CLIP/ViT-L-14" + model_name: "CN-CLIP/ViT-H-14" batch_size: 8 normalize_embeddings: true local_cnclip: - model_name: "ViT-L-14" + model_name: "ViT-H-14" device: null batch_size: 8 normalize_embeddings: true diff --git a/config/loader.py b/config/loader.py index c0cd5c2..79bf3e2 100644 --- a/config/loader.py +++ b/config/loader.py @@ -532,12 +532,12 @@ class AppConfigLoader: image_backends = { "clip_as_service": { "server": "grpc://127.0.0.1:51000", - "model_name": "CN-CLIP/ViT-L-14", + "model_name": "CN-CLIP/ViT-H-14", "batch_size": 8, "normalize_embeddings": True, }, "local_cnclip": { - "model_name": "ViT-L-14", + "model_name": "ViT-H-14", "device": None, "batch_size": 8, "normalize_embeddings": True, diff --git a/docs/CNCLIP_SERVICE说明文档.md b/docs/CNCLIP_SERVICE说明文档.md index 826318b..52deb13 100644 --- a/docs/CNCLIP_SERVICE说明文档.md +++ b/docs/CNCLIP_SERVICE说明文档.md @@ -76,8 +76,8 @@ python3 -c "from embeddings.config import CONFIG; print(CONFIG.CLIP_AS_SERVICE_M 临时覆盖模型: ```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 +./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 一致) ``` ### 5.4 停止服务 diff --git a/docs/搜索API对接指南-07-微服务接口(Embedding-Reranker-Translation).md b/docs/搜索API对接指南-07-微服务接口(Embedding-Reranker-Translation).md index fdf774a..7b92bff 100644 --- a/docs/搜索API对接指南-07-微服务接口(Embedding-Reranker-Translation).md +++ b/docs/搜索API对接指南-07-微服务接口(Embedding-Reranker-Translation).md @@ -102,7 +102,7 @@ curl -X POST "http://localhost:6008/embed/image?normalize=true&priority=1" \ #### 7.1.3 `POST /embed/clip_text` — CN-CLIP 文本多模态向量(与图片同空间) -将**自然语言短语**编码为向量,与 `POST /embed/image` 输出的图向量**处于同一向量空间**(Chinese-CLIP 文本塔 / 图塔),用于 **以文搜图**、与 ES `image_embedding` 对齐的 KNN 等。 +将**自然语言短语**编码为向量,与 `POST /embed/image` 输出的图向量**处于同一向量空间**(Chinese-CLIP 文本塔 / 图塔),用于 **以文搜图**、与 ES `image_embedding` 对齐的 KNN 等。默认配置为 **ViT-H-14**,向量长度 **1024**(与 `mappings/search_products.json` 中 `image_embedding.vector.dims` 一致);若改为 ViT-L-14 则为 768 维,须同步索引映射与全量重索引。 与 **7.1.1** 的 `POST /embed/text`(TEI/BGE,语义检索)**不是同一模型、不是同一空间**,请勿混用。 diff --git a/embeddings/README.md b/embeddings/README.md index e0df5d5..937038a 100644 --- a/embeddings/README.md +++ b/embeddings/README.md @@ -92,7 +92,7 @@ 3. **配置**(`embeddings/config.py` 或环境变量): - `USE_CLIP_AS_SERVICE=true`(默认) - `CLIP_AS_SERVICE_SERVER=grpc://127.0.0.1:51000` - - `CLIP_AS_SERVICE_MODEL_NAME=CN-CLIP/ViT-L-14` + - `CLIP_AS_SERVICE_MODEL_NAME=CN-CLIP/ViT-H-14`(与 `config/config.yaml` 中 `services.embedding.image_backends` 一致;换 ViT-L 时为 768 维,须同步改 ES 映射) - `scripts/start_cnclip_service.sh` 默认会读取同一个 `CLIP_AS_SERVICE_MODEL_NAME`,也可用 `CNCLIP_MODEL_NAME` 或 `--model-name` 临时覆盖 ### 性能与压测(沿用仓库脚本) diff --git a/embeddings/clip_as_service_encoder.py b/embeddings/clip_as_service_encoder.py index 3f786f0..8d9f419 100644 --- a/embeddings/clip_as_service_encoder.py +++ b/embeddings/clip_as_service_encoder.py @@ -38,7 +38,8 @@ def _normalize_image_url(url: str) -> str: class ClipAsServiceImageEncoder: """ Image embedding encoder using clip-as-service Client. - Encodes image URLs in batch; returns 1024-dim vectors (server model must match). + Vector length follows the loaded Chinese-CLIP model (e.g. 1024 for ViT-H-14, 768 for ViT-L-14); + must match ``services.embedding.image_backends.*.model_name`` and ES ``image_embedding.vector.dims``. """ def __init__( @@ -122,7 +123,7 @@ class ClipAsServiceImageEncoder: return out def encode_image_from_url(self, url: str, normalize_embeddings: bool = True) -> np.ndarray: - """Encode a single image URL and return one 1024-dim vector.""" + """Encode a single image URL and return one float32 vector (length = model embedding dim).""" results = self.encode_image_urls([url], batch_size=1, normalize_embeddings=normalize_embeddings) if not results: raise RuntimeError("clip-as-service returned empty result for single image URL") diff --git a/embeddings/clip_model.py b/embeddings/clip_model.py index b35766f..fdf99aa 100644 --- a/embeddings/clip_model.py +++ b/embeddings/clip_model.py @@ -16,7 +16,7 @@ from cn_clip.clip import load_from_name import cn_clip.clip as clip -DEFAULT_MODEL_NAME = "ViT-L-14" # "ViT-H-14", "ViT-L-14-336" +DEFAULT_MODEL_NAME = "ViT-H-14" # ViT-H-14: 1024-dim; ViT-L-14: 768-dim — 须与 config 与 ES image_embedding.dims 一致 MODEL_DOWNLOAD_DIR = "/data/" diff --git a/embeddings/config.py b/embeddings/config.py index 6fc6294..a986bd3 100644 --- a/embeddings/config.py +++ b/embeddings/config.py @@ -34,9 +34,9 @@ class EmbeddingConfig(object): self.USE_CLIP_AS_SERVICE = services.image_backend == "clip_as_service" self.CLIP_AS_SERVICE_SERVER = str(image_backend.get("server") or "grpc://127.0.0.1:51000") - self.CLIP_AS_SERVICE_MODEL_NAME = str(image_backend.get("model_name") or "CN-CLIP/ViT-L-14") + self.CLIP_AS_SERVICE_MODEL_NAME = str(image_backend.get("model_name") or "CN-CLIP/ViT-H-14") - self.IMAGE_MODEL_NAME = str(image_backend.get("model_name") or "ViT-L-14") + self.IMAGE_MODEL_NAME = str(image_backend.get("model_name") or "ViT-H-14") self.IMAGE_DEVICE = image_backend.get("device") # type: Optional[str] self.IMAGE_BATCH_SIZE = int(image_backend.get("batch_size", 8)) self.IMAGE_NORMALIZE_EMBEDDINGS = bool(image_backend.get("normalize_embeddings", True)) diff --git a/scripts/start_cnclip_service.sh b/scripts/start_cnclip_service.sh index 0c22084..a4ac64f 100755 --- a/scripts/start_cnclip_service.sh +++ b/scripts/start_cnclip_service.sh @@ -47,7 +47,7 @@ resolve_default_model_name() { fi fi done - echo "CN-CLIP/ViT-L-14" + echo "CN-CLIP/ViT-H-14" } # 默认配置 @@ -80,7 +80,7 @@ show_help() { echo " $0 # 使用默认配置启动" echo " $0 --port 52000 --device cuda # 指定 CUDA 模式,端口 52000" echo " $0 --port 52000 --device cpu # 显式使用 CPU 模式" - echo " $0 --model-name CN-CLIP/ViT-L-14 # 临时覆盖模型" + echo " $0 --model-name CN-CLIP/ViT-H-14 # 临时覆盖模型" echo " $0 --replicas 2 # 启动2个副本(需8-10GB显存)" echo "" echo "说明:" -- libgit2 0.21.2