LLMLLM 파인튜닝강의 5개 중 5번째난이도 중급

파인튜닝 평가와 배포 — 성능 측정과 서비스화

발행 읽는 시간 약 1 분

  • LLM
  • 파인튜닝
  • 평가
  • 배포
  • vLLM
  • Ollama
  • 벤치마크

강의 소개

파인튜닝된 모델의 성능을 정량·정성적으로 평가하고, Ollama나 vLLM으로 서비스에 배포하는 방법을 배웁니다. LLM 평가 프레임워크도 이해합니다.

평가의 어려움#

LLM 평가는 분류 정확도 같은 단순한 지표로 측정하기 어렵습니다.

Diagram · Mermaid

자동 평가 지표#

Python
from rouge_score import rouge_scorer
from sacrebleu.metrics import BLEU

scorer = rouge_scorer.RougeScorer(["rouge1", "rouge2", "rougeL"], use_stemmer=False)

reference = "파이썬은 간결한 문법을 가진 프로그래밍 언어입니다."
hypothesis = "파이썬은 문법이 간결한 프로그래밍 언어입니다."

scores = scorer.score(reference, hypothesis)
print(f"ROUGE-1: {scores['rouge1'].fmeasure:.3f}")
print(f"ROUGE-L: {scores['rougeL'].fmeasure:.3f}")

LLM-as-Judge 평가 (권장)#

Python
from openai import OpenAI
from pydantic import BaseModel

client = OpenAI()

class EvaluationResult(BaseModel):
    score: int        # 1-5
    reasoning: str
    strengths: list[str]
    weaknesses: list[str]

def evaluate_response(
    question: str,
    response: str,
    reference: str | None = None
) -> EvaluationResult:
    prompt = f"""다음 응답을 1~5점으로 평가해주세요.

질문: {question}
응답: {response}
{"참고 답변: " + reference if reference else ""}

평가 기준:
- 정확성 (사실 오류 없음)
- 완성도 (질문에 충분히 답변)
- 명확성 (이해하기 쉬움)
- 유용성 (실제 도움이 됨)"""

    result = client.beta.chat.completions.parse(
        model="gpt-4o",
        messages=[{"role": "user", "content": prompt}],
        response_format=EvaluationResult,
    )
    return result.choices[0].message.parsed

# 테스트셋 자동 평가
def evaluate_model(test_cases: list[dict], model_fn) -> dict:
    scores = []
    for case in test_cases:
        response = model_fn(case["question"])
        result = evaluate_response(case["question"], response, case.get("reference"))
        scores.append(result.score)

    return {
        "mean": sum(scores) / len(scores),
        "min": min(scores),
        "max": max(scores),
    }

Ollama로 로컬 배포#

Bash
# Ollama 설치 (Mac)
curl -fsSL https://ollama.ai/install.sh | sh

# 병합된 모델 파일 생성
cat > Modelfile << EOF
FROM ./my-merged-model
SYSTEM "당신은 전문 법률 상담사입니다."
PARAMETER temperature 0.3
PARAMETER top_p 0.9
EOF

# 모델 등록
ollama create legal-advisor -f Modelfile

# 실행
ollama run legal-advisor

# REST API로 사용
curl http://localhost:11434/api/generate -d '{
  "model": "legal-advisor",
  "prompt": "임대차 계약 주의사항은?",
  "stream": false
}'

vLLM으로 고성능 서빙#

Bash
pip install vllm

# 서버 시작
python -m vllm.entrypoints.openai.api_server \
    --model ./my-merged-model \
    --tensor-parallel-size 1 \
    --gpu-memory-utilization 0.9
Python
# OpenAI 호환 API로 사용
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="dummy"  # vLLM은 키 불필요
)

response = client.chat.completions.create(
    model="./my-merged-model",
    messages=[{"role": "user", "content": "질문"}],
)

HuggingFace Hub에 공유#

Python
from huggingface_hub import HfApi

api = HfApi()

# 어댑터 업로드
api.upload_folder(
    folder_path="./my-lora-adapter",
    repo_id="username/my-legal-advisor-lora",
    repo_type="model",
)

# README 자동 생성 카드
model_card = """
---
base_model: mistralai/Mistral-7B-Instruct-v0.2
tags: [fine-tuned, LoRA, legal, Korean]
---
# 한국 법률 상담 모델 (LoRA)
Mistral-7B를 한국 법률 Q&A 1000건으로 파인튜닝한 모델입니다.
"""

LLM 파인튜닝 시리즈 정리#

편주제
1편파인튜닝 개념, LoRA 원리
2편데이터 수집, 정제, 포맷
3편OpenAI API 파인튜닝
4편LoRA/QLoRA 오픈소스 파인튜닝
5편평가와 배포

다음은 멀티모달 AI — 이미지, 오디오 등 텍스트 외 다양한 모달리티를 다루는 방법을 배웁니다.

Follow · Ask · Work

이 글이 도움이 됐다면

짧은 작업 기록과 데모는 인스타그램에 올립니다. 만들고 싶은 것이 있다면 프로젝트 의뢰나 협업 제안도 편하게 보내 주세요.

글쓴이

파란여우

직접 만든 AI 앱·제품의 개발·배포를 공개하는 실전형 테크 크리에이터

파란여우 소개 Instagram @bluefox._.hi

이어서 보기

만들고 싶은 것이 있다면 프로젝트 의뢰로 알려 주세요.