b401ef94
tangwang
third-party/xinfe...
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
|
# Xinference 电商搜索部署完整指南
使用 Qwen3-Embedding 和 Qwen3-Reranker 构建两阶段搜索系统(密集检索 + 精排)
## 📋 快速导航
- [快速开始](#快速开始)
- [系统要求](#系统要求)
- [完整安装步骤](#完整安装步骤)
- [GPU 配置](#gpu-配置)
- [模型部署](#模型部署)
- [使用示例](#使用示例)
- [故障排除](#故障排除)
---
## 快速开始
### 最快 5 分钟上手(CPU 模式)
```bash
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: 环境检查
```bash
# 检查系统信息
cat /etc/os-release
# 检查 GPU(如果有)
nvidia-smi
# 检查 Docker
docker --version
docker compose version
# 检查 Conda
conda --version
```
### 步骤 2: 启动 Xinference 服务
#### 选项 A: CPU 模式(快速测试)
```bash
cd /data/tw/SearchEngine/third-party/xinference
bash start.sh
```
**特点**:
- ✅ 无需额外配置
- ✅ 快速启动
- ❌ 速度慢(10-50倍)
- ❌ 仅适合测试
#### 选项 B: GPU 模式(生产环境)
**自动安装 NVIDIA Container Toolkit**:
```bash
cd /data/tw/SearchEngine/third-party/xinference
bash install_nvidia_container_toolkit.sh
```
脚本会自动:
1. 检测系统类型
2. 添加 NVIDIA 仓库
3. 安装 nvidia-container-toolkit
4. 配置 Docker 运行时
5. 重启 Docker 服务
6. 验证安装
**手动安装(可选)**:
```bash
# 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
```
**安装完成后,重新启动服务**:
```bash
# 停止旧容器
sudo docker stop xinference
sudo docker rm xinference
# 重新启动(自动使用 GPU)
bash start.sh
```
**验证 GPU 模式**:
```bash
# 检查服务日志
sudo docker logs xinference | grep -i gpu
# 或者检查 GPU 使用
nvidia-smi
```
### 步骤 3: 配置 Python 环境
```bash
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
**快捷命令**:
```bash
xinference-env # 激活环境并切换目录
xinference-activate # 仅激活环境
xinference-cd # 切换到 xinference 目录
```
### 步骤 4: 验证安装
```bash
# 检查 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 状态
```bash
# 检查 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 可用性测试
```bash
# 测试 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 配置
```bash
# 使用 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)
```bash
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 分钟
#### 单独部署
```bash
# 仅部署 Embedding
python deploy_models.py --embedding-only
# 仅部署 Reranker
python deploy_models.py --reranker-only
# 指定 GPU
python deploy_models.py --gpu 1
```
#### 查看已部署模型
```bash
# 使用脚本
python deploy_models.py --list
# 使用 API
curl http://localhost:9997/v1/models | python -m json.tool
```
### 测试模型
#### 测试 Embedding
```bash
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
```bash
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 │
└──────────────────────────────────────┘
↓
最终结果
```
### 运行演示
```bash
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
```python
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
```bash
# 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: [].
```
**解决方案**:
```bash
# 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
```
**解决方案**:
```bash
# 使用国内镜像
export HF_ENDPOINT=https://hf-mirror.com
python deploy_models.py
```
### 问题 3: 显存不足
**症状**:
```
CUDA out of memory
```
**解决方案**:
```bash
# 只部署一个模型
python deploy_models.py --embedding-only
# 或使用不同的 GPU
python deploy_models.py --gpu 1
```
### 问题 4: 导入错误
**症状**:
```
ModuleNotFoundError: No module named 'xinference'
```
**解决方案**:
```bash
# 激活正确的环境
xinference-env
# 重新安装依赖
pip install xinference-client --force-reinstall
```
### 问题 5: 服务连接失败
**解决方案**:
```bash
# 检查服务状态
curl http://localhost:9997/v1/models
# 查看日志
sudo docker logs -f xinference
# 重启服务
sudo docker restart xinference
```
---
## 进阶配置
### 性能优化
1. **离线向量预计算**
2. **向量数据库集成**(Milvus/Pinecone)
3. **Redis 缓存**
4. **批量处理**
### 生产部署
```
┌─────────────┐
│ 负载均衡 │
└──────┬──────┘
│
┌────────────┼────────────┐
│ │ │
┌────▼────┐ ┌───▼────┐ ┌───▼────┐
│Xinference│ │Xinference│ │Xinference│
│ Instance1│ │ Instance2│ │ Instance3│
└────┬────┘ └───┬────┘ └───┬────┘
│ │ │
└────────────┼────────────┘
│
┌──────▼──────┐
│ 向量数据库 │
│ (Milvus) │
└─────────────┘
```
### 监控指标
```python
metrics = {
"latency_p50": "< 100ms",
"latency_p99": "< 300ms",
"qps": "100+",
"gpu_utilization": "< 80%",
"cache_hit_rate": "> 60%"
}
```
---
## 附录
### 常用命令
```bash
# 服务管理
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 官方文档](https://inference.readthedocs.io/)
- [Qwen3 模型介绍](https://github.com/QwenLM/Qwen3)
- [Docker 部署指南](https://docs.docker.com/)
- [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/)
---
## 总结
本文档提供了 Xinference 电商搜索系统的完整部署指南:
✅ **环境准备**: Docker + Conda + GPU 驱动
✅ **服务安装**: CPU/GPU 两种模式
✅ **环境配置**: 自动化脚本 + 快捷命令
✅ **模型部署**: Qwen3-Embedding 4B + Qwen3-Reranker 4B
✅ **使用示例**: 两阶段搜索架构
✅ **故障排除**: 常见问题及解决方案
**下一步**:
1. 根据需求选择 CPU 或 GPU 模式
2. 部署模型并运行演示
3. 根据实际数据集调整参数
4. 集成向量数据库进行优化
---
**文档版本**: v1.0
**最后更新**: 2025-12-25
**维护者**: Search Engine Team
|