当前位置: 首页 > news >正文

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

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

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

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

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

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

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

确保你的项目目录如下:

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

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

#!/bin/bash# 脚本路径:/home/ubuntu/xinference/scripts/start-xinference.sh
# 功能:启动容器并加载模型set -e  # 任意命令失败则退出export COMPOSE_DOCKER_CLI_BUILD=0
export DOCKER_BUILDKIT=0SCRIPT_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=5cd "$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); doresponse=$(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"'; thenecho "[$(date)] Xinference is ready. Current models: $body"breakelseif [ $i -eq $MAX_RETRIES ]; thenecho "❌ Error: Xinference failed to start within $(($MAX_RETRIES * $RETRY_INTERVAL)) seconds."exit 1fiecho "⏳ Waiting for Xinference... ($i/$MAX_RETRIES)"sleep $RETRY_INTERVALfi
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 ]; thenecho "[$(date)] Model '$MODEL_UID' loaded successfully."
elseecho "[$(date)] Failed to load model."exit 1
fi

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

chmod +x /home/ubuntu/xinference/scripts/start-xinference.sh

📦 第四步:创建 systemd 服务

创建服务文件:

sudo nano /etc/systemd/system/xinference.service

✅ 内容如下:

[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 服务

# 重载 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. 重启服务器
sudo reboot
  1. 登录后检查
# 查看服务状态
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 就绪

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

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

# 等待模型加载完成
echo "[$(date)] Waiting for model to be ready..."
for i in $(seq 1 120); doif curl -s "http://192.168.10.22:9997/v1/models/$MODEL_UID" | grep -q '"model_type":"LLM"'; thenecho "[$(date)] Model is ready."breakfisleep 5
done

🎉 完成!

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

http://www.dtcms.com/a/469555.html

相关文章:

  • 网站建设服务协议 百度什么网站免费制作
  • 有阿里云的主机了怎么做网站wordpress会务网站模版
  • 深度学习入门(二)——反向传播与向量化推导
  • C++设计模式之行为型模式:状态模式(State)
  • 免费自助建站网站一览网络营销推广方法有哪几种
  • 小伙做网站浦东做网站公司
  • Java对象与字符串相互转化的方式
  • 纪检网站建设计划wordpress 防止被黑
  • MXIC旺宏NOR Flash实现微秒级光形切换
  • 5、docker存储卷
  • docker搭建高性能运营级流媒体服务框架ZLMediaKit——筑梦之路
  • 完美迁移:将 nvm 和 npm 完全安装到 Windows D 盘
  • 从零到一:用 Vue 打造一个零依赖、插件化的 JS 库
  • 创建好git项目仓库后如何将本地项目传上去
  • wordpress图片主题模板下载南山网站优化
  • 做外贸大大小小的网站有哪些新手如何做外贸生意
  • langchain4j+SpringBoot+DashScope(灵积)整合
  • MATLAB实现直流电法和大地电磁法的一维正演计算
  • IBM 开源轻量级多模态文档理解模型 Granite-Docling:258M 参数,精准还原 PDF、截图中的公式、表格与代码
  • Python PDF文档加密与保护:确保你的文件安全
  • 【Conda】Conda虚拟环境配置系统环境变量,Jupter可使用
  • 网站网页和网址的关系湘潭seo
  • 对象集合里的id用逗号拼装几种方式
  • 框架--MybatisPlus
  • Coze源码分析-资源库-编辑数据库-前端源码-核心逻辑与接口
  • TikTok SDE OA 2025 真题解析与秋招趋势
  • idea 中 mapper.xml黄线警告怎么去掉
  • NXP - MDK460的调试设置
  • 15.UE-游戏逆向-DumpUE struct
  • 百度统计api兰州企业网站排名优化