YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
Model Selection SID Server
基于 RQ-KMeans 模型的图像 SID 推理服务。
项目简介
本服务使用训练好的 rqkmeans_constrained 模型对图像 embedding 进行推理,生成对应的 SID(Semantic ID)。
功能特性
- 支持批量推理(batch processing)
- 基于 Sanic 框架的高性能异步服务
- 支持 Docker 容器化部署
- 健康检查端点
- 灵活的配置管理
项目结构
model-selection-sid-server/
├── app.py # 服务主文件
├── config.yaml # 配置文件
├── requirements.txt # Python 依赖
├── start.sh # 启动脚本(自动激活虚拟环境)
├── test_api.py # API 测试脚本
├── DEBUG.md # 调试指南
├── Dockerfile # Docker 镜像构建文件
├── docker-compose.yml # Docker Compose 配置
├── README.md # 项目说明文档
├── codebook/ # 码本文件目录
│ └── rqkmeans_4_256_5w.codebooks_constrained.npz
└── utils/ # 工具模块
├── __init__.py
├── model_utils.py # 模型推理工具函数
└── config_utils.py # 配置管理工具函数
快速开始
1. 创建虚拟环境(推荐)
# 创建虚拟环境
python3 -m venv venv
# 激活虚拟环境
# macOS/Linux:
source venv/bin/activate
# Windows:
# venv\Scripts\activate
2. 安装依赖
pip install -r requirements.txt
3. 配置模型路径
码本文件已包含在项目的 codebook/ 目录中,配置文件已设置为正确的路径。如需修改,编辑 config.yaml 文件:
model:
codebook_path: "./codebook/rqkmeans_4_256_5w.codebooks_constrained.npz"
use_prefix: true
4. 启动服务
方式一:使用启动脚本(推荐)
# 直接运行启动脚本(会自动激活虚拟环境)
./start.sh
方式二:手动启动
# 1. 激活虚拟环境
source venv/bin/activate
# 2. 启动服务
python app.py
方式三:一行命令启动
source venv/bin/activate && python app.py
服务将在 http://0.0.0.0:80 启动。
提示:
- 启动脚本
start.sh会自动检查虚拟环境和依赖,是最简单的方式 - 如果看到
(venv)前缀,说明虚拟环境已激活 - 按
Ctrl+C可以停止服务
API 文档
健康检查
GET /health
检查服务健康状态。
响应示例:
{
"status": "healthy",
"service": "Model_Selection_SID_Server",
"model_loaded": true
}
批量预测 SID
POST /predict
批量预测图像 embedding 的 SID。
请求体:
{
"items": [
{
"image_id": "img_001",
"image_embedding": [0.1, 0.2, 0.3, ...]
},
{
"image_id": "img_002",
"image_embedding": [0.4, 0.5, 0.6, ...]
}
]
}
响应示例:
{
"status": "success",
"results": [
{
"image_id": "img_001",
"sid": ["a_1", "b_12", "c_23", "d_34"]
},
{
"image_id": "img_002",
"sid": ["a_2", "b_15", "c_28", "d_41"]
}
]
}
错误响应:
{
"status": "error",
"message": "错误描述信息"
}
调试和测试
快速测试
使用提供的测试脚本快速测试服务:
# 激活虚拟环境
source venv/bin/activate
# 运行测试脚本
python test_api.py
测试脚本会自动测试:
- 健康检查接口
- 单个图像预测
- 批量预测
- 错误处理
查看日志
服务日志会输出到:
- 控制台:实时查看
- 日志文件:
app.log
# 查看实时日志
tail -f app.log
# 查看最近的日志
tail -n 100 app.log
更多调试技巧请参考 DEBUG.md
使用示例
Python 示例
import requests
import json
url = "http://localhost:80/predict"
# 准备请求数据
data = {
"items": [
{
"image_id": "img_001",
"image_embedding": [0.1] * 768 # 假设 embedding 维度为 768
},
{
"image_id": "img_002",
"image_embedding": [0.2] * 768
}
]
}
# 发送请求
response = requests.post(url, json=data)
result = response.json()
print(json.dumps(result, indent=2, ensure_ascii=False))
cURL 示例
curl -X POST http://localhost:80/predict \
-H "Content-Type: application/json" \
-d '{
"items": [
{
"image_id": "img_001",
"image_embedding": [0.1, 0.2, 0.3]
}
]
}'
Docker 部署
使用 Docker Compose(推荐)
注意: 使用 Docker 部署时,码本文件会自动挂载到容器中。如果需要自定义配置,可以使用 config.docker.yaml.example。
启动服务:
docker-compose up -d或者使用自定义配置:
# 复制 Docker 配置示例 cp config.docker.yaml.example config.yaml docker-compose up -d
使用 Docker 命令
# 构建镜像
docker build -t model-selection-sid-server .
# 运行容器
docker run -d \
-p 80:80 \
-v $(pwd)/config.yaml:/app/config.yaml:ro \
-v $(pwd)/codebook:/app/codebook:ro \
--name model-selection-sid-server \
model-selection-sid-server
配置说明
config.yaml 配置文件包含以下选项:
model.codebook_path: 码本文件路径(.npz 格式),默认指向项目内的./codebook/目录model.use_prefix: 是否使用前缀格式的 SID(如a_1, b_12)server.host: 服务监听地址server.port: 服务监听端口server.max_batch_size: 最大批次大小
码本文件已包含在项目的 codebook/ 目录中,无需额外配置即可使用。
注意事项
- 确保模型文件路径正确,服务启动时会自动加载码本
image_embedding必须是数值数组,维度需要与训练时一致- 批次大小受
max_batch_size配置限制,默认最大 1000 - 服务会自动处理 NaN 和 Inf 值,将其替换为 0
故障排查
模型未加载
检查:
- 码本文件路径是否正确
- 文件是否存在且有读取权限
- 查看日志文件
app.log获取详细错误信息
请求失败
检查:
- 请求体格式是否正确
image_embedding是否为有效的数值数组- 批次大小是否超过限制
许可证
本项目遵循项目主仓库的许可证。
- Downloads last month
- -
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support