Files
local-embedding/docker-compose.yml
2026-10-23 18:08:46 +08:00

63 lines
2.1 KiB
YAML

# 本地嵌入(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