ubuntu服务器重启,xinference自动加载模型脚本

Ubuntu 服务器重启后,自动完成以下任务:

  1. ✅ 自动启动 xinference Docker 容器(通过 docker-compose
  2. ✅ 等待 Xinference 服务就绪
  3. ✅ 自动通过 API 加载 qwen3-32b-awq 模型

✅ 完整解决方案:使用 systemd 服务 + 启动脚本

我们将创建一个 systemd 服务,它会在系统启动时自动运行一个脚本,该脚本负责:

  • 启动容器
  • 等待 API 就绪
  • 调用 curl 加载模型

🛠️ 第一步:准备目录结构

确保你的项目目录如下:

bash 复制代码
/home/ubuntu/xinference/
├── docker-compose.yml
├── data/
│   └── .xinference/          # 模型缓存
└── scripts/
    └── start-xinference.sh   # 自动启动脚本

📜 第二步:创建启动脚本 start-xinference.sh

bash 复制代码
#!/bin/bash

# 脚本路径:/home/ubuntu/xinference/scripts/start-xinference.sh
# 功能:启动容器并加载模型

set -e  # 任意命令失败则退出

export COMPOSE_DOCKER_CLI_BUILD=0
export DOCKER_BUILDKIT=0

SCRIPT_DIR="/home/ubuntu/xinference"
COMPOSE_FILE="$SCRIPT_DIR/docker-compose.yml"
API_URL="http://192.168.1.111:9997/v1/models"
MAX_RETRIES=60
RETRY_INTERVAL=5

cd "$SCRIPT_DIR"

echo "[$(date)] Starting xinference container..."

# 1. 启动容器(如果已存在则重启)
#docker compose down > /dev/null 2>&1 || true
#docker compose up -d
docker compose restart
sleep 10 

echo "[$(date)] Waiting for Xinference API to be ready..."

# 2. 等待 API 健康检查就绪
for i in $(seq 1 $MAX_RETRIES); do
    response=$(curl -s -w " %{http_code}" "$API_URL" 2>&1)
    body=$(echo "$response" | sed 's/ $.*$$//')
    status_code=$(echo "$response" | awk '{print $NF}')

    if [ "$status_code" -eq 200 ] && echo "$body" | grep -q '"object":"list"'; then
        echo "[$(date)] Xinference is ready. Current models: $body"
        break
    else
        if [ $i -eq $MAX_RETRIES ]; then
          echo "❌ Error: Xinference failed to start within $(($MAX_RETRIES * $RETRY_INTERVAL)) seconds."
          exit 1
        fi
        echo "⏳ Waiting for Xinference... ($i/$MAX_RETRIES)"
        sleep $RETRY_INTERVAL
    fi
done

# 3. 加载 Qwen3 模型
echo "[$(date)] Loading Qwen3-32B-AWQ model via API..."

curl -X POST "http://192.168.1.111:9997/v1/models" \
  -H "Content-Type: application/json" \
  -d '{
    "model_name": "qwen3",
    "model_type": "LLM",
    "model_engine": "vLLM",
    "model_format": "awq",
    "size_in_billions": 32,
    "quantization": "Int4",
    "n_gpu": "auto",
    "replica": 1,
    "n_worker": 1,
    "gpu_idx": [0],
    "download_hub": "modelscope",
    "enable_thinking": true,
    "reasoning_content": false
  }'

if [ $? -eq 0 ]; then
    echo "[$(date)] Model '$MODEL_UID' loaded successfully."
else
    echo "[$(date)] Failed to load model."
    exit 1
fi

🔐 第三步:赋予脚本可执行权限

bash 复制代码
chmod +x /home/ubuntu/xinference/scripts/start-xinference.sh

📦 第四步:创建 systemd 服务

创建服务文件:

bash 复制代码
sudo nano /etc/systemd/system/xinference.service

✅ 内容如下:

ini 复制代码
[Unit]
Description=Xinference Auto Start and Load Model
After=multi-user.target docker.service
Requires=docker.service
Wants=network-online.target
After=network-online.target

[Service]
Type=oneshot
RemainAfterExit=yes
User=ubuntu
Group=ubuntu
WorkingDirectory=/home/ubuntu/xinference
ExecStart=/home/ubuntu/xinference/scripts/start-xinference.sh
TimeoutStartSec=600
StandardOutput=journal
StandardError=journal
Restart=on-failure
RestartSec=30

[Install]
WantedBy=multi-user.target

🔁 第五步:启用 systemd 服务

bash 复制代码
# 重载 systemd 配置
sudo systemctl daemon-reexec
sudo systemctl daemon-reload

# 启用开机自启
sudo systemctl enable xinference.service

# (可选)立即测试
sudo systemctl start xinference.service

# 查看日志
sudo journalctl -u xinference.service -f

✅ 验证是否成功

  1. 重启服务器
bash 复制代码
sudo reboot
  1. 登录后检查
bash 复制代码
# 查看服务状态
systemctl status xinference.service

# 查看日志
journalctl -u xinference.service --since "1 hour ago"

# 检查容器是否运行
docker ps

# 检查模型是否加载
curl http://192.168.1.119997/v1/models

你应该看到:

  • 容器 xinference 正在运行
  • 模型 qwen3-32b-awq 已加载
  • 日志显示 "Model loaded successfully"

📌 注意事项

项目 说明
IP 地址 确保 192.168.10.22 是你的服务器 IP,否则修改脚本中的 API_URL
用户权限 脚本以 ubuntu 用户运行,确保该用户在 docker 组中: sudo usermod -aG docker ubuntu
模型加载时间 Qwen3-32B-AWQ 首次加载可能需要 5--10 分钟(下载 + 加载)
日志查看 使用 journalctl 查看最准确的启动过程
重试机制 脚本最多等待 5 分钟(60×5s)API 就绪

✅ 可选优化:添加模型加载状态检查

你可以在脚本末尾添加轮询,确保模型真的加载完成:

bash 复制代码
# 等待模型加载完成
echo "[$(date)] Waiting for model to be ready..."
for i in $(seq 1 120); do
    if curl -s "http://192.168.10.22:9997/v1/models/$MODEL_UID" | grep -q '"model_type":"LLM"'; then
        echo "[$(date)] Model is ready."
        break
    fi
    sleep 5
done

🎉 完成!

现在,每次服务器重启后,Xinference 容器将自动启动,并自动加载 qwen3-32b-awq 模型,全程无需人工干预。

相关推荐
木白CPP18 分钟前
Linux 驱动UART子系统源码分析
linux·运维·服务器·驱动开发·嵌入式硬件·开源软件
Hello_Damon_Nikola23 分钟前
Ollama 终极使用指南
ai·ai编程
AI英德西牛仔2 小时前
豆包导出 pdf 颜色不一样怎么办,选用 AI 导出鸭优化文档导出,结合行业白皮书数据解析色彩失真成因
人工智能·ai·chatgpt·pdf·deepseek·ai导出鸭
Titan20243 小时前
Linux网络基础知识
linux·服务器·网络·c++·学习
皮皮蟹虾饺3 小时前
NCCL 源码解析:通信器从出生到消亡的完整一生
linux·人工智能·ubuntu·语言模型·kubernetes
xcLeigh3 小时前
AI内容检测:如何判断一篇文章是否为AI生成
人工智能·ai·提示词·灵感写作
全栈技术负责人4 小时前
解密 MCP(Model Context Protocol):大模型时代的“Type-C”总线与三驾马车架构深度解析
开发语言·ai·架构
yonlin4 小时前
【解决方案】Codex Cli 复制多行提示词到输入框,可能截断提示词,导致提示词不完整的解决方案
ai·codex
Titan20244 小时前
Linux网络学习:套接字、UDP的封装与应用
linux·服务器·开发语言·网络·c++
安逸sgr4 小时前
循环神经网络 RNN、LSTM、GRU 是什么?为什么能处理序列?
人工智能·ai·大模型·agent·智能体