README.md
16.5 KB
Xinference 电商搜索部署完整指南
使用 Qwen3-Embedding 和 Qwen3-Reranker 构建两阶段搜索系统(密集检索 + 精排)
📋 快速导航
快速开始
最快 5 分钟上手(CPU 模式)
cd /data/tw/SearchEngine/third-party/xinference
# 1. 启动 Xinference 服务(自动 CPU 模式)
bash start.sh
# 2. 创建 Python 环境
bash setup_env.sh
bash setup_alias.sh
source ~/.bashrc
# 3. 激活环境
xinference-env
# 4. 部署模型(CPU 模式,慢但可用)
python deploy_models.py
# 5. 运行演示
python ecommerce_demo.py
注意:CPU 模式仅用于测试,生产环境请使用 GPU 模式。
系统要求
硬件配置
| 组件 | 最低配置 | 推荐配置 |
|---|---|---|
| CPU | 8核 | 16核+ |
| 内存 | 16GB | 64GB+ |
| GPU | 无(CPU 模式) | NVIDIA Tesla T4 16GB+ |
| 存储 | 30GB | 100GB+ SSD |
GPU 显存需求:
- Qwen3-Embedding (4B): ~8GB
- Qwen3-Reranker (4B): ~8GB
- 两个模型同时运行: ~16GB+
软件要求
- 操作系统: Linux (Ubuntu 20.04+, CentOS 7+)
- Docker: 20.10+
- Docker Compose: v2.0+
- NVIDIA Driver: 525.0+ (GPU 模式)
- Conda: Miniconda3 或 Anaconda3
- Python: 3.10
完整安装步骤
步骤 1: 环境检查
# 检查系统信息
cat /etc/os-release
# 检查 GPU(如果有)
nvidia-smi
# 检查 Docker
docker --version
docker compose version
# 检查 Conda
conda --version
步骤 2: 启动 Xinference 服务
选项 A: CPU 模式(快速测试)
cd /data/tw/SearchEngine/third-party/xinference
bash start.sh
特点:
- ✅ 无需额外配置
- ✅ 快速启动
- ❌ 速度慢(10-50倍)
- ❌ 仅适合测试
选项 B: GPU 模式(生产环境)
自动安装 NVIDIA Container Toolkit:
cd /data/tw/SearchEngine/third-party/xinference
bash install_nvidia_container_toolkit.sh
脚本会自动:
- 检测系统类型
- 添加 NVIDIA 仓库
- 安装 nvidia-container-toolkit
- 配置 Docker 运行时
- 重启 Docker 服务
- 验证安装
手动安装(可选):
# Ubuntu/Debian
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
安装完成后,重新启动服务:
# 停止旧容器
sudo docker stop xinference
sudo docker rm xinference
# 重新启动(自动使用 GPU)
bash start.sh
验证 GPU 模式:
# 检查服务日志
sudo docker logs xinference | grep -i gpu
# 或者检查 GPU 使用
nvidia-smi
步骤 3: 配置 Python 环境
cd /data/tw/SearchEngine/third-party/xinference
# 自动创建环境
bash setup_env.sh
# 设置快捷别名
bash setup_alias.sh
# 使配置生效
source ~/.bashrc
环境信息:
- 环境名:
xinference - Python: 3.10.19
- 包: xinference-client 1.15.0, numpy 2.2.6
快捷命令:
xinference-env # 激活环境并切换目录
xinference-activate # 仅激活环境
xinference-cd # 切换到 xinference 目录
步骤 4: 验证安装
# 检查 Xinference 服务
curl http://localhost:9997/v1/models
# 预期输出
{"object":"list","data":[]}
# 检查 Python 环境
xinference-env
python -c "from xinference_client import RESTfulClient; print('✅ 环境配置成功!')"
# 查看 Dashboard
open http://localhost:9998
# 或在浏览器访问
GPU 配置
检查 GPU 状态
# 检查 NVIDIA 驱动
nvidia-smi
# 检查 Docker GPU 支持
sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
# 预期输出(成功)
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.85.12 Driver Version: 525.85.12 CUDA Version: 11.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla T4 On | 00000000:00:1E.0 Off | 0 |
| 34% 42C P8 16W / 70W | 0MiB / 16384MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
GPU 可用性测试
# 测试 1: 检查 Xinference 是否能看到 GPU
curl http://localhost:9997/v1/models
# 测试 2: 尝试部署一个小模型测试 GPU
xinference-env
python -c "
from xinference_client import RESTfulClient
client = RESTfulClient('http://localhost:9997')
# 列出支持的 GPU 模型
# 如果成功,说明 GPU 可用
"
多 GPU 配置
# 使用 GPU 0
python deploy_models.py --gpu 0
# 使用 GPU 1
python deploy_models.py --gpu 1
# 使用多个 GPU
python deploy_models.py --gpu 0,1
模型部署
部署 Qwen3 4B 模型
完整部署(Embedding + Reranker)
xinference-env
# 部署所有模型
python deploy_models.py
预期输出:
============================================================
Qwen3 模型自动部署
============================================================
🔗 连接到 Xinference 服务: http://localhost:9997
✅ 连接成功!
============================================================
部署 Qwen3-Embedding 模型 (4B)
============================================================
⏳ 正在部署,首次运行需要下载模型,请耐心等待...
模型大小: ~8GB
上下文长度: 8192 tokens
向量维度: 1024
✅ Qwen3-Embedding 部署成功!
模型 UID: qwen3-embedding-4b
============================================================
部署 Qwen3-Reranker 模型 (4B)
============================================================
✅ Qwen3-Reranker 部署成功!
模型 UID: qwen3-reranker-4b
============================================================
🎉 模型部署完成!
============================================================
预计时间(GPU 模式):
- 首次下载: 5-15 分钟(取决于网络)
- 模型加载: 2-5 分钟
单独部署
# 仅部署 Embedding
python deploy_models.py --embedding-only
# 仅部署 Reranker
python deploy_models.py --reranker-only
# 指定 GPU
python deploy_models.py --gpu 1
查看已部署模型
# 使用脚本
python deploy_models.py --list
# 使用 API
curl http://localhost:9997/v1/models | python -m json.tool
测试模型
测试 Embedding
xinference-env
python -c "
from xinference_client import RESTfulClient
client = RESTfulClient('http://localhost:9997')
model = client.get_model('qwen3-embedding-4b')
result = model.create_embedding('测试文本')
vector = result['data'][0]['embedding']
print(f'✅ 向量维度: {len(vector)}')
print(f'✅ 前5维: {vector[:5]}')
"
测试 Reranker
xinference-env
python -c "
from xinference_client import RESTfulClient
client = RESTfulClient('http://localhost:9997')
model = client.get_model('qwen3-reranker-4b')
query = '适合老人用的智能手机'
docs = ['华为畅享60 6000mAh', '小米手环8']
results = model.rerank([(query, doc) for doc in docs])
for doc, score in zip(docs, results):
print(f'[{score[\"relevance_score\"]:.4f}] {doc}')
"
使用示例
电商搜索两阶段架构
用户查询: "适合老人用的智能手机大屏幕长续航"
↓
┌──────────────────────────────────────┐
│ 阶段1: 密集检索 (Dense Retrieval) │
│ Qwen3-Embedding (4B) │
│ 召回 Top-200 │
└──────────────────────────────────────┘
↓
┌──────────────────────────────────────┐
│ 阶段2: 精排 (Reranking) │
│ Qwen3-Reranker (4B) │
│ Top-200 → Top-10 │
└──────────────────────────────────────┘
↓
最终结果
运行演示
xinference-env
# 完整演示
python ecommerce_demo.py
# 简单演示
python ecommerce_demo.py --simple
# 指定模型 UID
python ecommerce_demo.py --embedding qwen3-embedding-4b --reranker qwen3-reranker-4b
输出示例:
======================================================================
🛒 电商搜索实战演示 - Qwen3 双塔架构
======================================================================
🔗 连接到 Xinference 服务...
✅ 连接成功!
⏳ 加载模型...
✅ 模型加载完成
======================================================================
🔍 搜索查询: 适合老人用的智能手机大屏幕长续航
======================================================================
📊 阶段1: 密集检索(召回 Top-200)
----------------------------------------------------------------------
⏱️ 密集检索耗时: 0.23秒
✅ 召回 200 个候选商品
🎯 阶段2: 精排(Cross-Encoder 打分)
----------------------------------------------------------------------
⏱️ 精排耗时: 0.15秒
🎯 搜索结果 (Top 5):
----------------------------------------------------------------------
1. [0.9876] 华为畅享60 6000mAh超长续航 护眼大屏 鸿蒙系统
2. [0.9654] OPPO A1 5000mAh电池 简易模式适合长辈
3. [0.9432] vivo Y78 5000mAh大电池 120Hz高刷屏
4. [0.9210] 荣耀Play7T 6000mAh巨量电池 双卡双待
5. [0.8976] 诺基亚C31 5050mAh电池 耐用三防
代码示例
Python SDK
from xinference_client import RESTfulClient
# 连接服务
client = RESTfulClient("http://localhost:9997")
# 获取模型
embedding_model = client.get_model("qwen3-embedding-4b")
reranker_model = client.get_model("qwen3-reranker-4b")
# 1. 生成 Embedding
query = "高端智能手机"
query_vector = embedding_model.create_embedding(query)["data"][0]["embedding"]
# 2. 搜索商品(假设有预计算的向量)
# products_with_vectors = [...]
# 3. 精排
results = reranker_model.rerank([
(query, "华为 Mate 60 Pro 卫星通信"),
(query, "iPhone 15 Pro Max 钛金属"),
(query, "小米14 Pro 徕卡光学")
])
for result in results:
print(f"[{result['relevance_score']:.4f}] {result['index']}")
REST API
# Embedding API
curl -X POST http://localhost:9997/v1/embeddings \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-embedding-4b",
"input": ["测试文本"]
}'
# Reranker API
curl -X POST http://localhost:9997/v1/rerank \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-reranker-4b",
"query": "适合老人用的手机",
"documents": [
"华为畅享60 6000mAh",
"小米手环8"
],
"top_n": 5
}'
故障排除
问题 1: GPU 不可用
症状:
Worker can only see these GPUs: [].
解决方案:
# 1. 安装 NVIDIA Container Toolkit
bash install_nvidia_container_toolkit.sh
# 2. 重启服务
sudo docker stop xinference
sudo docker rm xinference
bash start.sh
# 3. 验证
nvidia-smi
问题 2: 模型下载失败
症状:
Failed to download model
解决方案:
# 使用国内镜像
export HF_ENDPOINT=https://hf-mirror.com
python deploy_models.py
问题 3: 显存不足
症状:
CUDA out of memory
解决方案:
# 只部署一个模型
python deploy_models.py --embedding-only
# 或使用不同的 GPU
python deploy_models.py --gpu 1
问题 4: 导入错误
症状:
ModuleNotFoundError: No module named 'xinference'
解决方案:
# 激活正确的环境
xinference-env
# 重新安装依赖
pip install xinference-client --force-reinstall
问题 5: 服务连接失败
解决方案:
# 检查服务状态
curl http://localhost:9997/v1/models
# 查看日志
sudo docker logs -f xinference
# 重启服务
sudo docker restart xinference
进阶配置
性能优化
- 离线向量预计算
- 向量数据库集成(Milvus/Pinecone)
- Redis 缓存
- 批量处理
生产部署
┌─────────────┐
│ 负载均衡 │
└──────┬──────┘
│
┌────────────┼────────────┐
│ │ │
┌────▼────┐ ┌───▼────┐ ┌───▼────┐
│Xinference│ │Xinference│ │Xinference│
│ Instance1│ │ Instance2│ │ Instance3│
└────┬────┘ └───┬────┘ └───┬────┘
│ │ │
└────────────┼────────────┘
│
┌──────▼──────┐
│ 向量数据库 │
│ (Milvus) │
└─────────────┘
监控指标
metrics = {
"latency_p50": "< 100ms",
"latency_p99": "< 300ms",
"qps": "100+",
"gpu_utilization": "< 80%",
"cache_hit_rate": "> 60%"
}
附录
常用命令
# 服务管理
bash start.sh # 启动服务
sudo docker logs -f xinference # 查看日志
sudo docker restart xinference # 重启服务
sudo docker stop xinference # 停止服务
# 环境管理
xinference-env # 激活环境
conda deactivate # 退出环境
# 模型管理
python deploy_models.py # 部署模型
python deploy_models.py --list # 列出模型
curl http://localhost:9997/v1/models # API 查询
# 演示示例
python ecommerce_demo.py # 运行演示
python ecommerce_demo.py --simple # 简单示例
目录结构
xinference/
├── README.md # 本文档
├── QUICKSTART.md # 快速开始
├── ENV_SETUP.md # 环境配置详解
├── start.sh # 服务启动脚本
├── install_nvidia_container_toolkit.sh # NVIDIA Toolkit 安装
├── setup_env.sh # Conda 环境创建
├── setup_alias.sh # Shell 别名配置
├── activate.sh # 环境激活脚本
├── deploy_models.py # 模型部署脚本
├── ecommerce_demo.py # 电商搜索示例
├── docker-compose.yml # Docker Compose 配置
└── models/ # 模型存储目录
参考资源
总结
本文档提供了 Xinference 电商搜索系统的完整部署指南:
✅ 环境准备: Docker + Conda + GPU 驱动 ✅ 服务安装: CPU/GPU 两种模式 ✅ 环境配置: 自动化脚本 + 快捷命令 ✅ 模型部署: Qwen3-Embedding 4B + Qwen3-Reranker 4B ✅ 使用示例: 两阶段搜索架构 ✅ 故障排除: 常见问题及解决方案
下一步:
- 根据需求选择 CPU 或 GPU 模式
- 部署模型并运行演示
- 根据实际数据集调整参数
- 集成向量数据库进行优化
文档版本: v1.0 最后更新: 2025-12-25 维护者: Search Engine Team