Files
frankenstallm/source/scripts/deploy_ollama.sh
ModelHub XC d4abdb70fa 初始化项目,由ModelHub XC社区提供模型
Model: pathcosmos/frankenstallm
Source: Original Platform
2026-07-14 04:21:16 +08:00

119 lines
3.7 KiB
Bash

#!/usr/bin/env bash
# =============================================================================
# deploy_ollama.sh — FRANKENSTALLM 3B GGUF → Ollama 원클릭 배포
#
# Usage:
# bash scripts/deploy_ollama.sh # 기본 (Q4_K_M)
# bash scripts/deploy_ollama.sh --quant Q8_0 # Q8_0 양자화
# bash scripts/deploy_ollama.sh --skip_convert # GGUF 이미 존재 시
#
# Pipeline:
# 1. [선택] GGUF 변환 + 양자화 (convert_3b_gguf.sh)
# 2. Ollama 설치 확인 / 서버 시작
# 3. Modelfile.3b로 모델 등록
# 4. 자동 테스트 (5개 프롬프트)
# 5. 반복률 검증 (15개 프롬프트)
# =============================================================================
set -euo pipefail
QUANT="${QUANT:-Q4_K_M}"
MODEL_NAME="frankenstallm-3b"
SKIP_CONVERT=false
while [[ $# -gt 0 ]]; do
case "$1" in
--quant) QUANT="$2"; shift 2 ;;
--skip_convert) SKIP_CONVERT=true; shift ;;
-h|--help)
grep '^#' "$0" | head -20 | sed 's/^# \{0,1\}//'
exit 0 ;;
*) echo "ERROR: 알 수 없는 옵션: $1"; exit 1 ;;
esac
done
PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$PROJECT_DIR"
GGUF_PATH="outputs/gguf/frankenstallm-3b-${QUANT}.gguf"
MODELFILE="Modelfile.3b"
echo "=================================================================="
echo " FRANKENSTALLM 3B Ollama 배포"
echo " 양자화 : $QUANT"
echo " GGUF : $GGUF_PATH"
echo " Modelfile: $MODELFILE"
echo "=================================================================="
# ---- Step 1: GGUF 변환 (필요 시) ----
if [[ "$SKIP_CONVERT" == "false" ]]; then
if [[ ! -f "$GGUF_PATH" ]]; then
echo ""
echo "[Step 1] GGUF 변환 실행 중 ..."
bash scripts/convert_3b_gguf.sh \
--input_dir checkpoints/korean_3b_orpo_v1/checkpoint-9840
else
echo "[Step 1] GGUF 파일 이미 존재 — 변환 건너뜀"
fi
else
echo "[Step 1] 변환 건너뜀 (--skip_convert)"
fi
if [[ ! -f "$GGUF_PATH" ]]; then
echo "ERROR: GGUF 파일 없음: $GGUF_PATH"
exit 1
fi
echo " GGUF 크기: $(du -sh "$GGUF_PATH" | cut -f1)"
# ---- Step 2: Ollama 설치 확인 ----
if ! command -v ollama &>/dev/null; then
echo ""
echo "[Step 2] Ollama 미설치 — 설치 중 ..."
curl -fsSL https://ollama.com/install.sh | sh
fi
# Ollama 서버 시작
if ! ollama list &>/dev/null 2>&1; then
echo "[Step 2] Ollama 서버 시작 중 ..."
ollama serve &>/tmp/ollama_serve.log &
for i in $(seq 1 15); do
if ollama list &>/dev/null 2>&1; then
echo " [OK] Ollama 서버 준비 (${i}초)"
break
fi
sleep 1
done
fi
# ---- Step 3: 모델 등록 ----
echo ""
echo "[Step 3] Ollama 모델 등록: $MODEL_NAME"
ollama create "$MODEL_NAME" -f "$MODELFILE"
echo " [OK] 등록 완료"
# ---- Step 4: 자동 테스트 ----
echo ""
echo "[Step 4] 자동 테스트 ..."
declare -a QUICK_TESTS=(
"대한민국의 수도는?"
"인공지능이란 무엇인가요?"
"한국의 전통 음식 중에서 김치에 대해 설명해주세요."
)
for prompt in "${QUICK_TESTS[@]}"; do
echo " Q: $prompt"
RESP=$(timeout 60 ollama run "$MODEL_NAME" "$prompt" 2>&1 || echo "[TIMEOUT/ERROR]")
echo " A: ${RESP:0:200}"
echo ""
done
# ---- Step 5: 반복률 검증 ----
echo "[Step 5] 반복률 검증 (15개 프롬프트) ..."
python3 scripts/test_ollama_repetition.py --model "$MODEL_NAME"
echo ""
echo "=================================================================="
echo " 배포 완료!"
echo " 사용법: ollama run $MODEL_NAME"
echo "=================================================================="