File size: 3,740 Bytes
48ecd01
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#!/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 "=================================================================="