From b9e448af0ddb9aff87e5930566b7308f2e06afdd Mon Sep 17 00:00:00 2001 From: MyeonghoeLee Date: Wed, 25 Mar 2026 22:05:30 +0900 Subject: [PATCH] =?UTF-8?q?vllm-mlx=20=EC=84=9C=EB=B2=84=20=EB=B0=B1?= =?UTF-8?q?=EA=B7=B8=EB=9D=BC=EC=9A=B4=EB=93=9C=20=EC=8B=A4=ED=96=89=20?= =?UTF-8?q?=EB=B0=8F=20=EB=A9=80=ED=8B=B0=EB=AA=A8=EB=8B=AC=20=EA=B3=A0?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 서버를 백그라운드로 실행 (로그는 vllm-mlx.log에 저장) - 모드 선택 제거, 멀티모달(--mllm) 고정 - 서버 준비 대기 로직 추가 - stop-mlx.sh에서 로그 파일 정리 추가 Co-Authored-By: Claude Opus 4.6 (1M context) --- setup-mlx.sh | 82 +++++++++++++++++++++++++++++++++++++++++----------- stop-mlx.sh | 10 +++++-- 2 files changed, 72 insertions(+), 20 deletions(-) diff --git a/setup-mlx.sh b/setup-mlx.sh index 2278950..101acf2 100755 --- a/setup-mlx.sh +++ b/setup-mlx.sh @@ -11,6 +11,9 @@ PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)" MODEL="mlx-community/Qwen3.5-35B-A3B-4bit" PORT=8090 WEBUI_PORT=3000 +MAX_TOKENS=8192 +TEMPERATURE=0.7 +TOP_P=0.9 echo "============================================" echo " Qwen3.5 + Open WebUI (vllm-mlx) 셋업" @@ -191,29 +194,74 @@ echo " ✓ Open WebUI 실행 중 (http://localhost:${WEBUI_PORT})" echo "" +MLLM_FLAG="--mllm" + #-------------------------------------------------------------------- -# 6. 완료 +# 6. vllm-mlx 서버 시작 #-------------------------------------------------------------------- -echo "[6/6] 셋업 완료!" +LOG_FILE="$PROJECT_DIR/vllm-mlx.log" + +echo "[6/6] vllm-mlx 서버 시작 (백그라운드)..." +echo "" +echo " 모델: $MODEL" +echo " 포트: $PORT" +echo " max_tokens: $MAX_TOKENS" +echo " temperature: $TEMPERATURE" +echo " top_p: $TOP_P" +echo " 모드: 멀티모달 (이미지 + 텍스트)" +echo "" + +# 백그라운드 실행, 로그는 파일로 +nohup vllm-mlx serve "$MODEL" \ + --port "$PORT" \ + --max-tokens "$MAX_TOKENS" \ + --default-temperature "$TEMPERATURE" \ + --default-top-p "$TOP_P" \ + --timeout 600 \ + $MLLM_FLAG > "$LOG_FILE" 2>&1 & + +SERVER_PID=$! +echo " 서버 PID: $SERVER_PID" +echo " 로그 파일: $LOG_FILE" +echo "" + +# 서버가 뜰 때까지 대기 (최대 120초, 첫 실행 시 모델 다운로드 포함) +echo " 서버 준비 대기 중... (첫 실행 시 모델 다운로드 ~20GB)" +for i in $(seq 1 120); do + if curl -s http://localhost:$PORT/v1/models > /dev/null 2>&1; then + echo "" + echo " ✓ 서버 준비 완료!" + break + fi + # 프로세스가 죽었는지 확인 + if ! kill -0 $SERVER_PID 2>/dev/null; then + echo "" + echo " ❌ 서버 시작 실패. 로그를 확인하세요:" + echo " tail -50 $LOG_FILE" + exit 1 + fi + printf "." + sleep 1 +done + +# 120초 후에도 안 되면 안내 +if ! curl -s http://localhost:$PORT/v1/models > /dev/null 2>&1; then + echo "" + echo " ⚠️ 서버가 아직 준비 중입니다. (모델 다운로드 중일 수 있음)" + echo " 로그 확인: tail -f $LOG_FILE" + echo " 준비되면 http://localhost:${WEBUI_PORT} 접속" +else + echo "" +fi + echo "" echo "============================================" -echo " 다음 단계: 서버를 시작하세요" +echo " 셋업 완료!" echo "============================================" echo "" -echo " # 텍스트 전용:" -echo " source $VENV_DIR/bin/activate" -echo " vllm-mlx serve $MODEL \\" -echo " --port $PORT --max-tokens 8192 \\" -echo " --default-temperature 0.7 --default-top-p 0.9" -echo "" -echo " # 텍스트 + 이미지 (멀티모달):" -echo " source $VENV_DIR/bin/activate" -echo " vllm-mlx serve $MODEL \\" -echo " --port $PORT --max-tokens 8192 \\" -echo " --default-temperature 0.7 --default-top-p 0.9 --mllm" -echo "" -echo " 서버 시작 후 브라우저에서 http://localhost:${WEBUI_PORT} 접속" +echo " 브라우저: http://localhost:${WEBUI_PORT}" echo " (첫 접속 시 회원가입 → 첫 계정이 admin)" echo "" -echo " 종료하려면: ./stop-mlx.sh" +echo " 로그 확인: tail -f $LOG_FILE" +echo " 종료: ./stop-mlx.sh" echo "============================================" diff --git a/stop-mlx.sh b/stop-mlx.sh index 3dac1c6..e263a8f 100755 --- a/stop-mlx.sh +++ b/stop-mlx.sh @@ -30,8 +30,12 @@ else echo " - vllm-mlx 서버 없음 (이미 종료됨)" fi +# 로그 파일 정리 +if [ -f "$PROJECT_DIR/vllm-mlx.log" ]; then + rm "$PROJECT_DIR/vllm-mlx.log" + echo " ✓ 로그 파일 정리" +fi + echo "" -echo " 완료. 재시작하려면:" -echo " 1. ./setup-mlx.sh" -echo " 2. 서버 시작 (setup 완료 시 안내되는 명령어 참고)" +echo " 완료. 재시작하려면: ./setup-mlx.sh" echo ""