新增vl模式

This commit is contained in:
lulijing
2026-01-29 17:58:28 +08:00
parent e164148c5c
commit 3c03749edf
4 changed files with 91 additions and 20 deletions

View File

@@ -19,8 +19,11 @@ NC='\033[0m' # No Color
# 默认配置(可通过环境变量覆盖)
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
LLAMA_SERVER_DIR="${LLAMA_SERVER_DIR:-~/llama.cpp/build/bin}"
INFERENCE_MODEL="${INFERENCE_MODEL:-~/models/gguf/Qwen3/Qwen3-4B/Qwen3-4B-Q5_K_M.gguf}"
INFERENCE_MODEL_DEFAULT="${INFERENCE_MODEL_DEFAULT:-~/models/gguf/Qwen3/Qwen3-4B/Qwen3-4B-Q5_K_M.gguf}"
EMBEDDING_MODEL="${EMBEDDING_MODEL:-~/models/gguf/Qwen3/Qwen3-Embedding-4B/Qwen3-Embedding-4B-Q5_K_M.gguf}"
VL_INFERENCE_MODEL_DEFAULT="${VL_INFERENCE_MODEL_DEFAULT:-~/models/gguf/Qwen3/qwen3_vl_4b_instruct/Qwen3VL-4B-Instruct-Q4_K_M.gguf}"
VL_VISION_ENCODER_MODEL_DEFAULT="${VL_VISION_ENCODER_MODEL_DEFAULT:-~/models/gguf/Qwen3/qwen3_vl_4b_instruct/mmproj-Qwen3VL-4B-Instruct-Q8_0.gguf}"
ENABLE_VL="${ENABLE_VL:-0}"
VENV_PATH="${VENV_PATH:-${PROJECT_ROOT}/backend_service/venv}"
LOG_DIR="${PROJECT_ROOT}/logs"
PID_FILE="${LOG_DIR}/services.pid"
@@ -136,6 +139,10 @@ trap cleanup EXIT
# ==============================================================================
start_services() {
local enable_vl="${ENABLE_VL}"
if [ "${1:-}" = "vl" ]; then
enable_vl=1
fi
print_info "=========================================="
print_info " 无人机自然语言控制项目 - 服务启动"
print_info "=========================================="
@@ -176,15 +183,38 @@ start_services() {
echo ""
# 检查模型文件
local inference_model_expanded=$(eval echo "${INFERENCE_MODEL}")
local inference_model=""
local vision_encoder_model_expanded=""
if [ "${enable_vl}" = "1" ]; then
inference_model="${VL_INFERENCE_MODEL:-${VL_INFERENCE_MODEL_DEFAULT}}"
local vision_encoder_model="${VISION_ENCODER_MODEL:-${VL_VISION_ENCODER_MODEL_DEFAULT}}"
vision_encoder_model_expanded=$(eval echo "${vision_encoder_model}")
print_info "VL模式已启用将使用VL模型与视觉编码器"
else
inference_model="${INFERENCE_MODEL:-${INFERENCE_MODEL_DEFAULT}}"
fi
local inference_model_expanded=$(eval echo "${inference_model}")
local embedding_model_expanded=$(eval echo "${EMBEDDING_MODEL}")
if [ ! -f "${inference_model_expanded}" ]; then
print_error "推理模型文件未找到: ${inference_model_expanded}"
print_info "请设置 INFERENCE_MODEL 环境变量指向正确的模型路径"
if [ "${enable_vl}" = "1" ]; then
print_info "请设置 VL_INFERENCE_MODEL 环境变量指向正确的模型路径"
else
print_info "请设置 INFERENCE_MODEL 环境变量指向正确的模型路径"
fi
exit 1
fi
print_success "找到推理模型: ${inference_model_expanded}"
if [ "${enable_vl}" = "1" ]; then
if [ ! -f "${vision_encoder_model_expanded}" ]; then
print_error "视觉编码器模型文件未找到: ${vision_encoder_model_expanded}"
print_info "请设置 VISION_ENCODER_MODEL 环境变量指向正确的模型路径"
exit 1
fi
print_success "找到视觉编码器模型: ${vision_encoder_model_expanded}"
fi
if [ ! -f "${embedding_model_expanded}" ]; then
print_error "Embedding模型文件未找到: ${embedding_model_expanded}"
@@ -229,18 +259,34 @@ start_services() {
# ==========================================================================
print_info "启动推理模型服务 (端口 ${INFERENCE_PORT})..."
cd "${llama_server_dir_expanded}"
nohup ./llama-server \
-m "${inference_model_expanded}" \
--port ${INFERENCE_PORT} \
--gpu-layers 36 \
--host 0.0.0.0 \
-c 16384 \
--jinja \
--temp 0 \
--top-k 1 \
--top-p 1.0 \
--min-p 0 \
> "${LOG_DIR}/inference_model.log" 2>&1 &
if [ "${enable_vl}" = "1" ]; then
nohup ./llama-server \
-m "${inference_model_expanded}" \
--mmproj "${vision_encoder_model_expanded}" \
--port ${INFERENCE_PORT} \
--gpu-layers 36 \
--host 0.0.0.0 \
-c 16384 \
--jinja \
--temp 0 \
--top-k 1 \
--top-p 1.0 \
--min-p 0 \
> "${LOG_DIR}/inference_model.log" 2>&1 &
else
nohup ./llama-server \
-m "${inference_model_expanded}" \
--port ${INFERENCE_PORT} \
--gpu-layers 36 \
--host 0.0.0.0 \
-c 16384 \
--jinja \
--temp 0 \
--top-k 1 \
--top-p 1.0 \
--min-p 0 \
> "${LOG_DIR}/inference_model.log" 2>&1 &
fi
local inference_pid=$!
echo $inference_pid >> "${PID_FILE}"
print_success "推理模型服务已启动 (PID: $inference_pid)"
@@ -378,6 +424,9 @@ case "${1:-start}" in
start)
start_services
;;
vl)
ENABLE_VL=1 start_services vl
;;
stop)
stop_services
;;
@@ -386,6 +435,11 @@ case "${1:-start}" in
sleep 2
start_services
;;
restart-vl)
stop_services
sleep 2
ENABLE_VL=1 start_services vl
;;
status)
print_info "检查服务状态..."
if [ -f "${PID_FILE}" ]; then
@@ -412,17 +466,24 @@ case "${1:-start}" in
done
;;
*)
echo "用法: $0 {start|stop|restart|status}"
echo "用法: $0 {start|vl|stop|restart|restart-vl|status}"
echo ""
echo "命令说明:"
echo " start - 启动所有服务(默认)"
echo " vl - 启动所有服务VL模式"
echo " stop - 停止所有服务"
echo " restart - 重启所有服务"
echo " restart-vl - 重启所有服务VL模式"
echo " status - 查看服务状态"
echo ""
echo "环境变量配置:"
echo " LLAMA_SERVER_DIR - llama-server所在目录 (默认: ~/llama.cpp/build/bin)"
echo " INFERENCE_MODEL - 推理模型路径 (默认: ~/models/gguf/Qwen/Qwen3-4B/Qwen3-4B-Q5_K_M.gguf)"
echo " INFERENCE_MODEL - 推理模型路径 (默认: \${INFERENCE_MODEL_DEFAULT})"
echo " INFERENCE_MODEL_DEFAULT - 默认推理模型路径"
echo " VL_INFERENCE_MODEL - VL推理模型路径 (默认: \${VL_INFERENCE_MODEL_DEFAULT})"
echo " VL_INFERENCE_MODEL_DEFAULT - VL推理模型路径"
echo " VISION_ENCODER_MODEL - 视觉编码器模型路径 (默认: \${VL_VISION_ENCODER_MODEL_DEFAULT})"
echo " VL_VISION_ENCODER_MODEL_DEFAULT - VL视觉编码器默认路径"
echo " EMBEDDING_MODEL - Embedding模型路径 (默认: ~/models/gguf/Qwen/Qwen3-Embedding-4B/Qwen3-Embedding-4B-Q4_K_M.gguf)"
echo " VENV_PATH - venv虚拟环境路径 (默认: \${PROJECT_ROOT}/backend_service/venv)"
exit 1