오늘은 크게 두 파트다.
핵심 실습은 "범용 지시어 챗봇 → 법률 전문가 챗봇" 으로 진화시키는 파인튜닝, 그리고 Naruto 스타일 캐릭터 생성 LoRA
KoAlpaca 데이터셋을 활용해 기초적인 한국어 지시 이행 능력(instruction following) 을 강화하는 실습. 전체 파이프라인은 4단계(Phase)로 구성된다.
| Phase | 단계 | 내용 |
|---|---|---|
| Phase 1 | 데이터 준비 | KoAlpaca 52k 데이터셋 (네이버 지식인 베스트 질문 기반) |
| Phase 2 | 모델 경량화 | 4-bit 양자화 (메모리 절약을 위한 필수 과정) |
| Phase 3 | 학습 진행 | SFTTrainer 지도 학습 (LoRA 기법으로 효율적인 미세조정) |
| Phase 4 | 성능 평가 | 추론 및 정량 평가 (실제 샘플로 성능 개선 확인) |
이 4단계 흐름 = 데이터 → 경량화 → 학습 → 평가 가 파인튜닝의 기본 골격이다.
파인튜닝 데이터의 기본 단위는 세 가지 필드로 이루어진다.
text-davinci-003이 생성한 이상적이고 정확한 답변 (정답 라벨)💡 Input은 항상 있는 게 아니라 전체 데이터의 약 40% 에만 존재한다는 점이 포인트.
영어 Alpaca를 한국어로 바꾸는 파이프라인:
스탠포드 Alpaca 52K 데이터
│ DeepL API (번역)
▼
한국어 Instruction & Input 확보 (오류 데이터 필터링)
│ ChatGPT (gpt-3.5-turbo)
▼
새로운 한국어 Output 생성
gpt-3.5-turbo로 한국어 답변을 새로 생성즉 질문은 번역하고, 답변은 새로 생성하는 방식.
"파라미터를 효율적으로 미세조정한다" 는 개념. 기존 방식(Full Fine-tuning)과 비교하면 차이가 명확하다.
| 구분 | 기존 방식의 문제점 | PEFT (파라미터 효율적 파인튜닝) |
|---|---|---|
| 자원 | 엄청난 컴퓨팅 자원 | 1% 미만의 파라미터만 학습 |
| 저장 | 막대한 저장 공간 | 비용 절감 및 접근성 향상 |
| 성능 | 치명적 망각(Catastrophic Forgetting) | 가볍고 빠른 공유 |
Catastrophic Forgetting(치명적 망각) : 전체를 다시 학습시키면 기존에 알던 지식을 잊어버리는 현상. PEFT는 원본을 건드리지 않아 이 문제에서 자유롭다.
파인튜닝은 아래 세 라이브러리가 한 팀으로 움직인다.
메모리를 아끼는 두 축:
DoRA, Adapter Layers, BitFit, IA3 등 최신 기술들도 모두 '효율적 파인튜닝' 철학을 공유한다.정밀도를 4-bit까지 깎아도 모델이 동작하는 3가지 근거:
Dropout, LayerNorm, Residual connection.반대로, 4-bit 양자화를 하면 안 되는 경우들.
1) 수치 정확도가 생명인 작업 (수학/코드 생성)
1.0000000001 (정밀도 유지) vs 4-bit: 1.0 (깎여나간 미세 수치)2) Embedding 공간의 붕괴
3 & 4) 새로운 기초공사 & 눈덩이 오차
5) 프로덕션 환경의 최종 상용 모델 배포
숫자를 컴퓨터가 저장하는 방식. 두 부분으로 나뉜다.
10³)$1.2345)💡 정규화(Normalization)의 비밀 : 소수점 앞을 무조건 '1'이 되도록 맞춰서 그 '1'은 아예 메모리에 저장하지 않는다. 덕분에 정밀도에 1칸을 더 쓸 수 있다.
| 포맷 | 부호 | 지수 | 가수 | 특징 |
|---|---|---|---|---|
| FP32 (Reference) | 1칸 | 8칸 | 23칸 | 표준 규격 (기준점) |
| FP16 (Precision Focus) | 1칸 | 5칸 | 10칸 | "좁은 범위라도 엄청 정밀하게" (지수부가 작아 범위가 좁음) |
| BF16 (Range Focus) | 1칸 | 8칸 | 7칸 | "정밀도는 양보해도 FP32처럼 큰 숫자까지 다 품어" |
BF16은 FP32에서 가수부 꼬리만 툭 잘라낸 형태라 변환 작업이 매우 빠르고 호환성이 뛰어나다.
65,504에 불과. 학습 중 수치가 갑자기 커지면(Exploding) 에러(NaN)가 발생해 학습이 망가진다.핵심 : AI는
1.234나1.235나 대충(1.2) 알아도 똑똑하다. 하지만 에러(NaN)가 나면 즉시 학습이 죽는다. → 그래서 정밀도(가수)보다 범위(지수)가 넓은 BF16이 유리.
| BF16 선택 | FP16 선택 |
|---|---|
| 모델 학습(Training) 중일 때 | 이미 학습된 모델을 서비스(Inference) 할 때 |
| NVIDIA Ampere 아키텍처 (A100, RTX 30/40 시리즈 이상) 또는 Google TPU | V100, RTX 20 시리즈 등 구형 GPU 환경 |
| → 주저 없이 BF16 (최신 LLM 트렌드) | → FP16으로 가볍고 빠르게 (구형에서 BF16은 느릴 수 있음) |
SFTTrainer → Reward Modeling → PPO & DPO
한국 민사법 도메인 데이터(legal-qa-1k)를 주입하여 전문가 수준의 응답 + 법률 개체 추출 능력을 확보하는 실습.
Llama 3.2 (Bllossom/llama-3.2-Korean...) + AI Hub 민사법 데이터🎯 도메인 파인튜닝의 핵심은 단순한 말하기가 아닌, 전문 용어의 정확성(Precision)을 증명하는 것.
파이썬 가상환경부터 이미지·비디오·음악·3D 객체 생성까지 한 번에 끝내는 실습 로드맵.
# 1. 패키지 설치 (가상환경 생성)
conda env create -f generative_ai.yaml -n generative_ai
# 2. 가상 환경 연동 (활성화 후 VSCode 커널 연결)
conda activate generative_ai
이미지 생성의 4단계 흐름:
1. 입력(Input) → 마구잡이 노이즈 (대리석 블록)
2. 텍스트 임베딩(CLIP) → 텍스트를 AI의 언어로 변환
3. 노이즈 제거(U-Net) → 스케줄러를 통해 노이즈를 깎아내며 밑그림 정제
4. 픽셀 변환(VAE Decoder) → 잠재 공간의 밑그림을 고해상도 픽셀 이미지로 복원
Stable Diffusion은 단일 모델이 아니라 3개의 모델이 한 팀으로 움직인다.
| 모델 | 파라미터 | 역할 |
|---|---|---|
| CLIP Text Encoder | 123M | 텍스트 이해 (눈/귀) |
| UNet | 860M | 메인 두뇌 (이미지 생성) |
| VAE | 83M | 이미지 압축 및 복원기 |
이 모든 가중치(Weights)를 합치면 시작점부터 이미 2GB를 훌쩍 넘기며 VRAM의 절반을 차지한다.
정적 이미지에 시간을 더하다.
텍스트가 멜로디가 되는 마법.
입력: "90s rock song"
→ T5 Encoder (텍스트 블록)
→ Transformer (오디오 토큰 예측)
→ EnCodec (음악 파형 변환)
→ 🎵
오디오 파형을 직접 그리는 대신, 소리를 '단어'처럼 쪼개서(토큰화) 문장을 쓰듯 작곡한다.
| 모델 명칭 | 파라미터 규모 | 권장 VRAM | 지원 기능 |
|---|---|---|---|
| musicgen-small | 300M | 8GB 이상 (실습 추천!) | 텍스트 기반 작곡 |
| musicgen-medium | 1.5B | 16GB 이상 | 텍스트 기반 작곡 |
| musicgen-melody | 1.5B | 16GB 이상 | 텍스트 + 멜로디 조건 |
| musicgen-large | 3.3B | 16GB 이상 (A100) | 텍스트 기반 작곡 |
예시 프롬프트: "ambient electronic music with a calm piano melody and soft synth pads" (잔잔한 피아노 선율과 부드러운 신스 패드가 깔린 앰비언트 음악)
평면을 넘어 입체 공간으로.
💡 텍스트를 직접 3D로 변환하는 대신, '이미지'를 중간 다리로 거쳐 더 빠르고 정확하게 3D 구조를 이해한다.
| 구분 | 2D Pixel | 3D Point Cloud |
|---|---|---|
| 데이터 구조 | 행렬 기반의 격자 (Grid) | XYZ 좌표 기반의 산점도 (Coordinates) |
| 표현 요소 | 면을 채우는 픽셀 (Pixel) | 공간을 정의하는 점 (Point) |
| 특징 | 연산이 빠르고 직관적 | 빈 공간을 효율적으로 표현 가능, AI 3D 생성의 뼈대 역할 |
num_points = [1024, 4096 - 1024]문제 상황: "기존 모델에 특정 애니메이션 스타일만 딱 추가하고 싶은데, 처음부터 다시 학습시키는 건 너무 무겁고 느리다..."
→ 정답은 파이프라인 최적화와 LoRA에 있다.
lambdalabs/naruto-blip-captions (10장으로 축소 실습)Milabench/naruto-blip-captions 로드 (총 1,221개 이미지)[-1, 1] 정규화(Normalize)naruto character, 를 강제 삽입a man with dark hair and brown eyesnaruto character, a man with dark hair and brown eyes| 지표 | 방향 | 의미 |
|---|---|---|
| FID Score | 낮을수록 좋음 ↓ | 원본 데이터 분포 vs 생성 이미지 분포 차이 측정 (얼마나 고품질이고 자연스러운가?) |
| CLIP Score | 높을수록 좋음 ↑ | 텍스트 프롬프트와 생성 이미지 간의 의미적 유사도 (프롬프트의 말귀를 얼마나 잘 알아들었는가?) |
결과: 단 1,221장의 데이터와 짧은 학습만으로 캐릭터 스타일을 완벽하게 이식했다.
(예: "naruto character, Bill Gates with a hoodie", "John Oliver with Naruto style", "Hello Kitty with Naruto style")
학습이 끝난 모델을 사후에 압축하는 방식.
Float16 (16-bit) 원석 → PTQ 가공 → Int4 (4-bit) 압축.
DeepSeek-Q4_K_M.gguf| 토큰 | 의미 |
|---|---|
| Q (Quantized) | 양자화된 모델임을 의미 |
| 4 (4-bit) | 4비트 정밀도로 압축됨 (메모리 최적화) |
| K | Variant — 품질과 성능의 균형을 맞춘 특정 압축 알고리즘 (K-Quants) |
| M | Medium 사이즈 (S / M / L) |
| .gguf | 포맷 — Llama.cpp 전용 단일 패키지 파일 |
| 세대 | 이름 | 특징 |
|---|---|---|
| 1세대 | Legacy Quants | 기본 선형 양자화(Linear Quantization), Q4_0, Q4_1 등 숫자(0,1)로 끝나는 명칭 |
| 2세대 | K-Quants | 이중 양자화 및 메모리 접근 최적화, Q4_K 등 명칭에 'K' 포함 |
| 3세대 | I-Quants | 벡터 양자화(Vector Quantization), IQ4_NL, IQ3_S 등 명칭에 'IQ' 포함 |
같은 4-bit라도 어떤 레이어를 더 정밀하게 남기느냐에 따라 파일 크기가 달라진다.
| Variant | 구성 | 파일 크기 |
|---|---|---|
| Q4_S | Int4 위주 + 일부 Q5 | 가장 작음 |
| Q4_M | Int4 + Q6 혼합 | 중간 (균형) |
| Q4_L | Int4 + Q6 + Q8 혼합 | 가장 큼 (고품질) |
unsloth: 양자화 작업을 거친 모델을 (편하게) 제공하는 도구.
모델 가중치(Weights) + 메타데이터(Metadata) = 단일 GGUF 파일
양자화된 모델을 하나의 파일로 깔끔하게 패키징한 포맷.
| 포맷 | 캐릭터 | 핵심 |
|---|---|---|
| GGUF | CPU 중심의 온디바이스 생존자 | 어디서든 돌아감 |
| GPTQ | GPU 가속을 위한 1세대 표준 | GPU 추론 최고 속도 |
| AWQ | 중요 가중치만 보호하는 차세대 최적화 | 중요 1% 보존 |
GGUF (파일 포맷)
│
Llama.cpp (추론 엔진)
│
GGML (기반 라이브러리)
| 용도 | 대표 엔진 | 특징 |
|---|---|---|
| 고성능 GPU 서버 (기업용) | vLLM, TensorRT-LLM | 동시 요청 시 GPU 효율과 처리량 극대화 |
| 파이썬 연구용 | ExLlamaV2, TGI | 허깅페이스 생태계와 완벽한 호환성, 빠른 테스트 |
| 일반/초보자용 GUI | Ollama, LM Studio | 코드 없이 클릭 한 번으로 로컬 구동 (llama.cpp 백엔드) |
| RAM | 환경 | 추천 모델 |
|---|---|---|
| 8GB | 노트북/모바일 기본 | Phi-4-mini (3.8B), Gemma 3 (4B), Qwen 3 (4B), Llama 3.2 (3B) |
| 16GB ~ 32GB | 고급 랩탑/워크스테이션 | Qwen 3 (14B), Gemma 4 (26B MoE) |
| 64GB+ | 로컬 서버급 | Qwen2.5-Coder (32B), DeepSeek R1 distill (70B) |
💬 오늘의 한 줄 : "거대 모델을 통째로 다시 쓰지 말고, 요약 노트(LoRA)만 끼워 넣고 압축팩(양자화)에 넣어 도시락(GGUF)으로 싸 들고 다니자."