start.sh
5.14 KB
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
#!/bin/bash
# Xinference Docker 部署脚本
# 用于启动 Xinference 服务
set -e
# 检查是否需要 sudo
if sudo -n docker info &> /dev/null 2>&1; then
DOCKER="sudo docker"
# 检测 Docker Compose 的形式(V2: docker compose 或 V1: docker-compose)
if sudo docker compose version &> /dev/null 2>&1; then
DOCKER_COMPOSE="sudo docker compose"
echo "✅ 检测到 Docker Compose V2"
elif command -v docker-compose &> /dev/null; then
DOCKER_COMPOSE="sudo docker-compose"
echo "✅ 检测到 Docker Compose V1"
else
echo "❌ 错误: 未找到 Docker Compose"
exit 1
fi
else
DOCKER="docker"
# 检测 Docker Compose 的形式
if docker compose version &> /dev/null 2>&1; then
DOCKER_COMPOSE="docker compose"
echo "✅ 检测到 Docker Compose V2"
elif command -v docker-compose &> /dev/null; then
DOCKER_COMPOSE="docker-compose"
echo "✅ 检测到 Docker Compose V1"
else
echo "❌ 错误: 未找到 Docker Compose"
exit 1
fi
fi
echo "========================================="
echo " Xinference Docker 部署脚本"
echo "========================================="
echo ""
# 检查 GPU
echo "🔍 检查 GPU 可用性..."
if command -v nvidia-smi &> /dev/null; then
echo "✅ 检测到 NVIDIA GPU:"
nvidia-smi --query-gpu=name,memory.total --format=csv,noheader | head -n 1
# 检查 NVIDIA Container Toolkit
if $DOCKER run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi &> /dev/null; then
GPU_AVAILABLE=true
echo "✅ NVIDIA Container Toolkit 已安装,GPU 可用"
else
GPU_AVAILABLE=false
echo "⚠️ 检测到 GPU 但 NVIDIA Container Toolkit 未安装"
echo "⚠️ 将使用 CPU 模式启动"
echo "💡 如需 GPU 加速,请安装 NVIDIA Container Toolkit(见下方说明)"
fi
else
echo "⚠️ 未检测到 NVIDIA GPU,将使用 CPU 模式"
GPU_AVAILABLE=false
fi
# 创建模型目录
echo ""
echo "📁 创建模型存储目录..."
mkdir -p models
# 拉取镜像
echo ""
echo "🐳 拉取 Xinference Docker 镜像..."
if [ "$GPU_AVAILABLE" = true ]; then
$DOCKER pull xprobe/xinference:latest
else
echo "⚠️ CPU 模式:如需 GPU 支持,请配置好 NVIDIA Docker 运行时"
$DOCKER pull xprobe/xinference:latest
fi
# 停止并删除旧容器
echo ""
echo "🛑 停止并删除旧容器..."
$DOCKER stop xinference 2>/dev/null || true
$DOCKER rm xinference 2>/dev/null || true
$DOCKER_COMPOSE down 2>/dev/null || true
# 启动服务
echo ""
echo "🚀 启动 Xinference 服务..."
if [ "$GPU_AVAILABLE" = true ]; then
echo "🔥 使用 GPU 模式启动..."
$DOCKER_COMPOSE up -d
else
# CPU 模式:直接使用 docker run
echo "💻 使用 CPU 模式启动..."
$DOCKER run -d \
--name xinference \
-p 9997:9997 -p 9998:9998 \
-v "$(pwd)/models:/data" \
-e XINFERENCE_HOME=/data \
--restart unless-stopped \
xprobe/xinference:latest \
xinference-local -H 0.0.0.0
fi
# 等待服务启动
echo ""
echo "⏳ 等待服务启动..."
for i in {1..30}; do
if curl -s http://localhost:9997/v1/models > /dev/null 2>&1; then
echo "✅ Xinference 服务启动成功!"
break
fi
echo " 等待中... ($i/30)"
sleep 2
done
# 检查服务状态
echo ""
echo "📊 服务状态检查..."
if curl -s http://localhost:9997/v1/models > /dev/null 2>&1; then
echo "✅ 服务健康检查通过"
echo ""
echo "========================================="
echo " 🎉 部署成功!"
echo "========================================="
echo ""
echo "📍 服务地址:"
echo " - API: http://localhost:9997"
echo " - Dashboard: http://localhost:9998"
echo ""
echo "📝 下一步操作:"
echo " 1. 查看日志: $DOCKER logs -f xinference"
echo " 2. 部署模型: python deploy_models.py"
echo " 3. 测试搜索: python ecommerce_demo.py"
echo ""
if [ "$GPU_AVAILABLE" = false ]; then
echo "💡 启用 GPU 加速(可选):"
echo " 如果你想使用 GPU 加速,请安装 NVIDIA Container Toolkit:"
echo ""
echo " # 1. 添加 NVIDIA 仓库"
echo " curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -"
echo " distribution=\$(. /etc/os-release;echo \$ID\$VERSION_ID)"
echo " curl -s -L https://nvidia.github.io/nvidia-docker/\$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list"
echo ""
echo " # 2. 安装 NVIDIA Container Toolkit"
echo " sudo apt-get update"
echo " sudo apt-get install -y nvidia-container-toolkit"
echo ""
echo " # 3. 重启 Docker"
echo " sudo systemctl restart docker"
echo ""
echo " # 4. 重新运行此脚本"
echo " bash start.sh"
echo ""
fi
echo "📚 查看所有已部署模型:"
echo " curl http://localhost:9997/v1/models"
echo ""
else
echo "❌ 服务启动失败,请查看日志:"
echo " $DOCKER logs xinference"
exit 1
fi