87 lines
2.5 KiB
Bash
87 lines
2.5 KiB
Bash
#!/usr/bin/env bash
|
|
# =============================================================================
|
|
# Qwen3-Omni vLLM-Omni 服务启动脚本
|
|
#
|
|
# 使用方法 (在远程服务器上):
|
|
# 1. 安装 vllm-omni:
|
|
# pip install vllm-omni
|
|
#
|
|
# 2. 下载模型:
|
|
# modelscope download --model Qwen/Qwen3-Omni-30B-A3B-Instruct \
|
|
# --local_dir ./models/Qwen/Qwen3-Omni-30B-A3B-Instruct
|
|
#
|
|
# 3. 启动服务:
|
|
# bash start_qwen3_omni.sh
|
|
#
|
|
# 端口: 8904
|
|
# API:
|
|
# - WebSocket 实时: ws://127.0.0.1:8904/v1/realtime
|
|
# - Chat Completions: http://127.0.0.1:8904/v1/chat/completions
|
|
# - Health: http://127.0.0.1:8904/health
|
|
# =============================================================================
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd -- "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
MODEL_PATH="${SCRIPT_DIR}/models/Qwen/Qwen3-Omni-30B-A3B-Instruct"
|
|
PORT="${PORT:-8904}"
|
|
|
|
echo "============================================"
|
|
echo " Qwen3-Omni vLLM-Omni 服务启动"
|
|
echo "============================================"
|
|
echo " 模型路径: ${MODEL_PATH}"
|
|
echo " 端口: ${PORT}"
|
|
echo "============================================"
|
|
|
|
# 检查模型是否存在
|
|
if [ ! -d "${MODEL_PATH}" ]; then
|
|
echo ""
|
|
echo "❌ 模型未找到: ${MODEL_PATH}"
|
|
echo ""
|
|
echo "请先下载模型:"
|
|
echo " pip install modelscope -U"
|
|
echo " modelscope download --model Qwen/Qwen3-Omni-30B-A3B-Instruct \\"
|
|
echo " --local_dir ${MODEL_PATH}"
|
|
exit 1
|
|
fi
|
|
|
|
# 检查 vllm-omni 是否安装
|
|
if ! python3 -c "import vllm_omni" 2>/dev/null; then
|
|
echo ""
|
|
echo "❌ vllm-omni 未安装"
|
|
echo ""
|
|
echo "请安装:"
|
|
echo " pip install vllm-omni"
|
|
echo ""
|
|
echo "或从源码安装:"
|
|
echo " git clone https://github.com/vllm-project/vllm-omni.git"
|
|
echo " cd vllm-omni"
|
|
echo " pip install -e ."
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo "🚀 启动 vLLM-Omni 服务..."
|
|
|
|
# 停止旧进程 (如果存在)
|
|
OLD_PID=$(lsof -t -i:${PORT} 2>/dev/null || true)
|
|
if [ -n "${OLD_PID}" ]; then
|
|
echo " 停止旧进程 (PID: ${OLD_PID})..."
|
|
kill ${OLD_PID} 2>/dev/null || true
|
|
sleep 2
|
|
fi
|
|
|
|
# 启动服务
|
|
# --omni: 启用多阶段编排 (Thinker → Talker → Code2Wav)
|
|
# 默认配置: vllm_omni/deploy/qwen3_omni_moe.yaml
|
|
# 异步 chunk 流式传输默认开启
|
|
vllm serve "${MODEL_PATH}" \
|
|
--omni \
|
|
--port "${PORT}" \
|
|
--host 0.0.0.0 \
|
|
--gpu-memory-utilization 0.85 \
|
|
--max-model-len 32768 \
|
|
2>&1 | tee "${SCRIPT_DIR}/qwen3_omni_server.log"
|
|
|
|
echo ""
|
|
echo "服务已停止."
|