Blame view

third-party/xinference/start.sh 5.14 KB
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
  #!/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