올해는 머신러닝이다.
DeepSeek 로컬 파인튜닝 전체 프로세스 본문
DeepSeek(딥싱크)를 로컬에서 실행하고 파인튜닝하는 전체 프로세스
DeepSeek(딥싱크)과 같은 오픈소스 LLM을 로컬에서 돌리고 파인튜닝하는 과정은 크게 다섯 단계로 나눌 수 있습니다.
🔹 1. DeepSeek 모델 다운로드 및 로컬 실행
DeepSeek 모델을 로컬에서 실행하려면, 먼저 Hugging Face에서 모델을 다운로드한 후, GPU에서 실행할 수 있도록 환경을 설정해야 합니다.
✅ 필수 환경
- GPU 필수: 최소 24GB VRAM (DeepSeek-7B), 80GB 이상 추천 (DeepSeek-67B)
- CUDA 11.8+ 또는 ROCm (AMD GPU용)
- Python 3.8+
- PyTorch 2.0+
- Transformers 라이브러리
✅ DeepSeek 모델 다운로드
pip install torch transformers accelerate sentencepiece
pip install deepseek-ai
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
model_name = "deepseek-ai/deepseek-7b"
# 토크나이저 및 모델 불러오기
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype=torch.float16, # 메모리 절약
device_map="auto" # GPU 자동 할당
)
# 모델 테스트
input_text = "딥싱크 모델은 어떻게 동작하나요?"
input_ids = tokenizer(input_text, return_tensors="pt").input_ids.to("cuda")
# 추론 실행
output = model.generate(input_ids, max_length=100)
print(tokenizer.decode(output[0], skip_special_tokens=True))
🔹 이제 DeepSeek 모델이 로컬에서 실행됩니다!
🔹 단순 추론(inference)만 하려면 위 코드로 충분합니다.
🔹 2. 데이터 준비 (파인튜닝할 데이터셋 가공)
DeepSeek을 특정 도메인에 맞게 튜닝하려면, 자신만의 데이터셋을 준비해야 합니다.
✅ 필요한 데이터 형식
DeepSeek(또는 LLaMA, GPT 계열 모델)은 Instruction Tuning을 할 때 JSONL 형식의 데이터를 사용합니다.
📌 예제: JSONL 포맷 데이터
{"instruction": "머신러닝이란?", "input": "", "output": "머신러닝은 데이터에서 패턴을 학습하여 예측하는 기술입니다."}
{"instruction": "딥러닝과 머신러닝의 차이?", "input": "", "output": "딥러닝은 다층 신경망을 사용하여 복잡한 패턴을 학습하는 머신러닝의 한 종류입니다."}
이 데이터가 많을수록 모델의 성능이 향상됨!
✅ 데이터 변환 코드 (CSV → JSONL)
만약 데이터가 CSV나 다른 형식이면 JSONL로 변환해야 합니다.
import pandas as pd
import json
df = pd.read_csv("dataset.csv")
# CSV의 각 행을 JSONL로 변환
jsonl_data = []
for _, row in df.iterrows():
jsonl_data.append({
"instruction": row["question"],
"input": row["context"],
"output": row["answer"]
})
# JSONL 파일로 저장
with open("dataset.jsonl", "w", encoding="utf-8") as f:
for item in jsonl_data:
f.write(json.dumps(item, ensure_ascii=False) + "\n")
print("JSONL 변환 완료!")
🔹 데이터셋이 많을수록 정확도가 올라감!
🔹 하지만 과적합을 방지하려면 최소 2만 개 이상의 데이터셋이 필요함.
🔹 3. DeepSeek 모델 파인튜닝 (LoRA 사용)
DeepSeek-7B, DeepSeek-67B 같은 대형 모델을 직접 파인튜닝하면 수백 GB의 GPU VRAM이 필요하므로, LoRA (Low-Rank Adaptation) 같은 경량 튜닝 기법을 사용합니다.
✅ LoRA 기반 파인튜닝 환경 세팅
pip install transformers peft datasets bitsandbytes accelerate
✅ DeepSeek LoRA 파인튜닝 코드
from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments, Trainer
from peft import LoraConfig, get_peft_model
import torch
from datasets import load_dataset
# 모델 & 토크나이저 로드
model_name = "deepseek-ai/deepseek-7b"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name, torch_dtype=torch.float16, device_map="auto"
)
# LoRA 설정
lora_config = LoraConfig(
r=16, lora_alpha=32, lora_dropout=0.05,
bias="none", task_type="CAUSAL_LM"
)
# LoRA 적용
model = get_peft_model(model, lora_config)
# 데이터셋 로드
dataset = load_dataset("json", data_files="dataset.jsonl")
# 학습 설정
training_args = TrainingArguments(
output_dir="deepseek-lora-finetuned",
per_device_train_batch_size=2,
per_device_eval_batch_size=2,
num_train_epochs=3,
logging_steps=10,
save_steps=500,
save_total_limit=2,
evaluation_strategy="steps",
fp16=True,
optim="adamw_torch"
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=dataset["train"]
)
# 학습 시작
trainer.train()
🔹 LoRA를 적용하면 VRAM 24GB 이상이면 충분히 학습 가능!
🔹 Full Fine-tuning은 80GB 이상 필요 (A100, H100급 GPU 필수)
🔹 4. 파인튜닝된 모델 저장 & 배포
모델 학습이 끝나면, 학습된 체크포인트를 저장하고 Serving API로 배포합니다.
✅ 파인튜닝 모델 저장
model.save_pretrained("deepseek-finetuned-model")
tokenizer.save_pretrained("deepseek-finetuned-model")
저장된 모델을 Hugging Face에 업로드하거나 FastAPI, Flask 등을 이용해 API로 배포할 수 있습니다.
🔹 5. 파인튜닝된 DeepSeek 모델 로컬에서 실행
이제 파인튜닝된 모델을 로컬에서 실행할 수 있습니다.
✅ 모델 로드 및 실행
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
# 학습된 모델 로드
model_name = "deepseek-finetuned-model"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name, torch_dtype=torch.float16, device_map="auto"
)
# 테스트 입력
input_text = "AI 엔지니어가 되는 방법을 설명해줘."
input_ids = tokenizer(input_text, return_tensors="pt").input_ids.to("cuda")
# 추론 실행
output = model.generate(input_ids, max_length=100)
print(tokenizer.decode(output[0], skip_special_tokens=True))
🔹 이제 DeepSeek이 원하는 도메인에 맞춰진 모델로 응답!
🔹 FastAPI로 REST API를 만들고 웹/앱에서 활용 가능!
🔥 최종 정리: DeepSeek 로컬 실행 & 파인튜닝 순서
1️⃣ DeepSeek 모델 다운로드 및 실행
2️⃣ 데이터셋 준비 (CSV → JSONL 변환)
3️⃣ LoRA 기반 경량 파인튜닝 (VRAM 24GB 이상이면 가능!)
4️⃣ 파인튜닝된 모델 저장 & API 배포
5️⃣ 로컬에서 실행 및 테스트
💡 이제 DeepSeek을 로컬에서 실행하고, 직접 튜닝하여 자신만의 AI 모델을 만들 수 있습니다! 🚀
'AI' 카테고리의 다른 글
RAG을 위한 기초 수학 필요성 (0) | 2025.03.20 |
---|---|
일반 개발자가 AI 개발자로 전환하기 위한 맞춤형 로드맵 (2) | 2025.03.20 |
OpenAI의 새로운 Agents SDK 살펴보기 (1) | 2025.03.13 |
AI 기반 에이전트 프레임워크 (1) | 2025.03.12 |
왜 MCP가 AI 통합의 미래인가 (0) | 2025.03.12 |