# 本地嵌入(embedding)服务 —— 完整替代 Ollama。 # # 参数全部直接写在本文件里,不再走 .env —— 需要调整时改这里,然后 # docker compose up -d 重建即可。 # # 首次启动会下载约 570MB 模型权重到 ./models; # 之后重启/重建都会先校验 sha256,通过就跳过下载,零网络流量。 services: local-embedding: build: . image: local-embedding:latest container_name: local-embedding restart: unless-stopped # 宿主机 63002 -> 容器 8000 ports: - "63000:8000" environment: # ---- 模型存放位置(容器内)---- MODEL_DIR: /models # ---- 模型来源与选择 ---- MODEL_REPO: Xenova/bge-m3 MODEL_REV: master MODEL_BASE: https://modelscope.cn/models/Xenova/bge-m3/resolve/master MODEL_NAME: bge-m3 # 同仓库可选量化档位: # model_int8.onnx 542MB 默认,带 AVX512-VNNI 的 CPU 上最快 # model_fp16.onnx 1081MB # model_q4f16.onnx 668MB # model_q4.onnx 1190MB # 更大的模型可改用 BAAI/bge-m3(原始 fp32,2.2GB,且需额外的 model.onnx_data) ONNX_FILE: model_int8.onnx # ---- 推理参数 ---- MAX_LEN: "512" # bge-m3 原生支持 8192,但 CPU 上长序列很慢 BATCH_SIZE: "16" # 每次推理的条数 PAD_ID: "1" # bge-m3 是 XLM-R 架构,padding 用 [PAD] # ---- 服务 ---- WORKERS: "1" # 调大前先看内存:每个 worker 会各加载一份模型 PORT: "8000" LOG_LEVEL: info TZ: Asia/Shanghai # 宿主机 ./models -> 容器 /models。指向大盘路径可避免占满系统盘, # 例如改成 /data/models/embedding:/models volumes: - ./models:/models healthcheck: test: - CMD - python - -c - "import urllib.request,sys; sys.exit(0 if urllib.request.urlopen('http://127.0.0.1:8000/health',timeout=4).status==200 else 1)" interval: 30s timeout: 5s # 首次启动要下模型,给足预热时间 start_period: 900s retries: 3