«   2025/03   »
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
Archives
Today
Total
관리 메뉴

올해는 머신러닝이다.

DeepSeek 로컬 파인튜닝 전체 프로세스 본문

AI

DeepSeek 로컬 파인튜닝 전체 프로세스

행복한 수지아빠 2025. 3. 20. 16:59

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-tuning80GB 이상 필요 (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 모델을 만들 수 있습니다! 🚀