이 프로젝트는 Ubuntu 24.04와 NVIDIA RTX 3060 (12GB VRAM) 환경에서 Hugging Face의 TRL(Transformer Reinforcement Learning)을 사용하여 한국어 대규모 언어 모델을 효과적으로 파인튜닝하는 방법을 제공합니다. 메모리 최적화 기법(8비트 양자화, LoRA)을 통해 고사양 장비 없이도 LLM 파인튜닝이 가능합니다.
# 저장소 클론 후 디렉터리 이동
cd UseTRLFinetune
# 설정 스크립트 실행 권한 부여
chmod +x setup.sh
# 자동 환경 설정
./setup.sh
# 가상환경 활성화
source korean-llm-env/bin/activate
# 기본 TRL PPO 기반 파인튜닝
python train.py
# 또는 간단한 Trainer 기반 파인튜닝
python simple_train.py --data-path sample_korean_data.jsonl
# 기본 테스트
python test.py
# 빠른 효과 확인
python quick_test.py
# 대화형 테스트
python inference.py --interactive
UseTRLFinetune/
├── README.md # 이 문서
├── requirements.txt # Python 의존성
├── setup.sh # 환경 설정 스크립트
├── sample_korean_data.jsonl # 샘플 학습 데이터
├──
├── ===== 🎯 핵심 훈련 스크립트 =====
├── train.py # TRL PPO 기반 파인튜닝 (기본)
├── simple_train.py # Hugging Face Trainer 기반 (안정적)
├── optimized_train.py # RTX 3060 최적화 (권장)
├── custom_train.py # 커스텀 데이터셋 파인튜닝
├── continue_train.py # 기존 모델 추가 학습
├──
├── ===== 📊 평가 및 추론 =====
├── evaluate.py # 고급 평가 도구
├── evaluate_simple.py # 간단한 키워드 기반 평가
├── inference.py # 기본 추론 스크립트
├── inference_safe.py # 안정적인 추론
├── chat_test.py # 콘솔 채팅 테스트
├── test.py # 기본 테스트
├── quick_test.py # 빠른 효과 확인
├──
├── ===== 🗂️ 데이터 수집 및 처리 =====
├── main.py # 메인 조율 스크립트
├── data_processor.py # 데이터 가공 및 변환
├── demo.py # 데이터 수집 데모
├── data_collectors/
│ ├── web_scraper.py # 웹 스크래핑
│ ├── pdf_extractor.py # PDF 텍스트 추출
│ └── supabase_manager.py # Supabase 연동
├──
├── ===== 🔧 분석 및 유틸리티 =====
├── analyze_model.py # 모델 구조 분석
├── load.py # 기본 모델 로딩 예제
├── check_ppo_params.py # PPO 파라미터 확인
├── test_ppo_trainer.py # PPO Trainer 테스트
├──
├── ===== 📂 생성된 모델 및 데이터 =====
├── korean-llm-env/ # Python 가상환경
├── my_korean_finetuned_model/ # 기본 파인튜닝 모델
├── my_optimized_model/ # 최적화 파인튜닝 모델
├── my_continued_model/ # 추가 학습 모델
├── web_data.jsonl # 웹 스크래핑 데이터
└── evaluation_results.json # 평가 결과
train.py - TRL PPO 기반 파인튜닝 (기본)기능: TRL의 PPO(Proximal Policy Optimization)를 사용한 강화학습 기반 파인튜닝 데이터: NSMC(네이버 영화 리뷰) 데이터셋 목표: 긍정적인 한국어 텍스트 생성 학습
python train.py
특징:
simple_train.py - Hugging Face Trainer 기반 (안정적)기능: PPO 대신 Hugging Face Trainer를 사용한 안정적인 파인튜닝 권장: API 호환성 문제가 있을 때 사용
python simple_train.py --data-path your_data.jsonl \
--output-dir my_simple_model \
--epochs 3 \
--batch-size 4
특징:
optimized_train.py - RTX 3060 최적화 (⭐ 권장)기능: RTX 3060 12GB 환경에 최적화된 파인튜닝 권장: 가장 효율적이고 고성능
python optimized_train.py --data-path your_data.jsonl \
--output-dir my_optimized_model \
--batch-size 8 \
--max-length 2048 \
--lora-r 128 \
--use-4bit # 4비트 양자화 (선택)
특징:
custom_train.py - 커스텀 데이터셋 파인튜닝기능: 사용자 제공 JSONL 데이터로 파인튜닝
python custom_train.py --data-path custom_data.jsonl \
--output-dir my_custom_model \
--use-reward-model \
--epochs 5 \
--limit-samples 1000
특징:
continue_train.py - 기존 모델 추가 학습기능: 이미 파인튜닝된 모델에서 추가 학습
# 기존 어댑터에서 계속 학습
python continue_train.py --finetuned-model my_korean_finetuned_model \
--data-path new_data.jsonl \
--output-dir my_continued_model \
--mode continue
# 어댑터를 모델과 병합 후 새 어댑터 학습
python continue_train.py --finetuned-model my_korean_finetuned_model \
--data-path new_data.jsonl \
--output-dir my_continued_model \
--mode merge_and_new \
--merge-and-save
특징:
evaluate.py - 고급 평가 도구 (⭐ 권장)기능: 베이스 모델과 파인튜닝된 모델의 포괄적 비교
python evaluate.py
특징:
evaluate_simple.py - 간단한 키워드 기반 평가기능: 외부 모델 없이 키워드로 간단 평가
python evaluate_simple.py
특징:
inference.py - 기본 추론 스크립트기능: 파인튜닝된 모델로 텍스트 생성
# 대화형 모드
python inference.py --interactive
# 단일 프롬프트
python inference.py --prompt "이 영화는 정말" --max_tokens 100
# 기본 테스트
python inference.py
특징:
chat_test.py - 콘솔 채팅 테스트기능: 파인튜닝된 모델과 실시간 대화
python chat_test.py
특징:
quick_test.py - 빠른 효과 확인기능: 파인튜닝 효과를 빠르게 확인
python quick_test.py
특징:
main.py - 메인 조율 스크립트기능: 데이터 수집부터 모델 훈련까지 통합 관리
# 웹 스크래핑
python main.py --collect --web "https://example.com" "https://example2.com" \
--output web_data.jsonl
# 1DEPTH 웹 크롤링
python main.py --collect --web "https://example.com" --web-crawl \
--max-pages 50 --crawl-delay 2
# PDF 텍스트 추출
python main.py --collect --pdf "https://example.com/paper.pdf" \
--output pdf_data.jsonl
# 텍스트 파일 처리
python main.py --collect --text file1.txt file2.txt \
--output text_data.jsonl
# Supabase 연동
python main.py --collect --supabase \
--supabase-url "your-url" --supabase-key "your-key"
# 수집 + 훈련 통합
python main.py --collect --web "https://example.com" \
--train --output-dir my_trained_model
data_processor.py - 데이터 가공 및 변환기능: 다양한 형태의 데이터를 학습용으로 변환
from data_processor import (
create_dataset_from_texts,
create_dataset_from_jsonl,
save_texts_to_jsonl
)
# 텍스트 리스트를 데이터셋으로 변환
texts = ["텍스트1", "텍스트2", "텍스트3"]
dataset = create_dataset_from_texts(texts)
# JSONL 파일을 데이터셋으로 변환
dataset = create_dataset_from_jsonl("data.jsonl")
# 텍스트를 JSONL로 저장
save_texts_to_jsonl(texts, "output.jsonl", append_mode=True)
data_collectors/)web_scraper.py - 웹 스크래핑from data_collectors.web_scraper import extract_text_from_url, crawl_website_depth_1
# 단일 URL 처리
result = extract_text_from_url("https://example.com")
# 1DEPTH 크롤링
results = crawl_website_depth_1("https://example.com", max_pages=20)
pdf_extractor.py - PDF 텍스트 추출from data_collectors.pdf_extractor import extract_text_from_pdf_url
# PDF URL에서 텍스트 추출
result = extract_text_from_pdf_url("https://example.com/paper.pdf")
supabase_manager.py - Supabase 연동from data_collectors.supabase_manager import SupabaseManager
# Supabase 연동
manager = SupabaseManager(url="your-url", key="your-key")
manager.create_training_data_table()
manager.insert_web_data(web_result)
demo.py - 종합 데모기능: 전체 파이프라인 데모
# 웹 스크래핑 데모
python demo.py --demo-mode web
# PDF 추출 데모
python demo.py --demo-mode pdf
# 전체 데모 (수집 + 훈련)
python demo.py --demo-mode all
# 데이터 수집만 (훈련 제외)
python demo.py --demo-mode all --skip-training
analyze_model.py - 모델 구조 분석기능: polyglot-ko 모델의 구조를 분석하여 LoRA 타겟 모듈 찾기
python analyze_model.py
load.py - 기본 모델 로딩 예제기능: 8비트 양자화와 LoRA 설정 예제
check_ppo_params.py / test_ppo_trainer.py기능: TRL PPOTrainer의 API 확인 및 테스트
from transformers import BitsAndBytesConfig
quantization_config = BitsAndBytesConfig(load_in_8bit=True)
quantization_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_use_double_quant=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16
)
from peft import LoraConfig
# 기본 설정
lora_config = LoraConfig(
r=64,
lora_alpha=16,
lora_dropout=0.1,
bias="none",
task_type="CAUSAL_LM"
)
# 고성능 설정 (optimized_train.py)
lora_config = LoraConfig(
r=128,
lora_alpha=256,
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM"
)
| 설정 | 기본값 | RTX 3060 최적화 |
|---|---|---|
| batch_size | 4 | 8 |
| max_length | 512 | 2048 |
| lora_r | 64 | 128 |
| lora_alpha | 16 | 256 |
| gradient_accumulation_steps | 2 | 4 |
| 양자화 | 8bit | 4bit (선택) |
# 학습률
learning_rate = 1e-4 # 안정적
learning_rate = 2e-4 # 빠른 학습
# 배치 크기
batch_size = 4 # 기본
batch_size = 8 # RTX 3060 최적화
# 에포크 수
epochs = 3 # 빠른 테스트
epochs = 5 # 일반적
epochs = 10 # 고품질 (오버피팅 주의)
# 시퀀스 길이
max_length = 512 # 기본
max_length = 1024 # 긴 문맥
max_length = 2048 # 매우 긴 문맥 (메모리 주의)
# 메모리 사용량 줄이기
python optimized_train.py --data-path data.jsonl \
--batch-size 4 \
--max-length 1024 \
--use-4bit
해결 방법:
--batch-size 줄이기 (8 → 4 → 2)--max-length 줄이기 (2048 → 1024 → 512)--use-4bit 옵션 사용--gradient-accumulation-steps 늘리기# 안정적인 대안 사용
python simple_train.py --data-path data.jsonl
# 안전한 추론 스크립트 사용
python inference_safe.py --interactive
# Python 개발 헤더 설치
sudo apt install python3.12-dev
# bitsandbytes 재설치
pip uninstall bitsandbytes
pip install bitsandbytes
--use-flash-attentiondataloader_num_workers=4--use-4bit--batch-size 2--max-length 512--lora-r 128--epochs 10--limit-samples 제거python train.py # 기본 데이터로 빠른 학습
python quick_test.py # 효과 확인
python optimized_train.py --data-path large_data.jsonl \
--epochs 5 \
--batch-size 8 \
--max-length 2048
python evaluate.py # 상세 평가
# 1. 데이터 수집
python main.py --collect --web "https://your-site.com" \
--web-crawl --max-pages 100
# 2. 학습
python custom_train.py --data-path web_data.jsonl \
--epochs 3
# 3. 평가
python evaluate.py
# 기존 모델에서 새 데이터로 추가 학습
python continue_train.py --finetuned-model my_optimized_model \
--data-path new_data.jsonl \
--mode continue
이 프로젝트는 교육 및 연구 목적으로 제공됩니다. 각 스크립트의 세부 옵션은 python script_name.py --help로 확인할 수 있습니다.
4 commits
Python
97.4%
Shell
2.6%
이 프로젝트는 Ubuntu 24.04와 NVIDIA RTX 3060 (12GB VRAM) 환경에서 Hugging Face의 TRL(Transformer Reinforcement Learning)을 사용하여 한국어 대규모 언어 모델을 효과적으로 파인튜닝하는 방법을 제공합니다. 메모리 최적화 기법(8비트 양자화, LoRA)을 통해 고사양 장비 없이도 LLM 파인튜닝이 가능합니다.
# 저장소 클론 후 디렉터리 이동
cd UseTRLFinetune
# 설정 스크립트 실행 권한 부여
chmod +x setup.sh
# 자동 환경 설정
./setup.sh
# 가상환경 활성화
source korean-llm-env/bin/activate
# 기본 TRL PPO 기반 파인튜닝
python train.py
# 또는 간단한 Trainer 기반 파인튜닝
python simple_train.py --data-path sample_korean_data.jsonl
# 기본 테스트
python test.py
# 빠른 효과 확인
python quick_test.py
# 대화형 테스트
python inference.py --interactive
UseTRLFinetune/
├── README.md # 이 문서
├── requirements.txt # Python 의존성
├── setup.sh # 환경 설정 스크립트
├── sample_korean_data.jsonl # 샘플 학습 데이터
├──
├── ===== 🎯 핵심 훈련 스크립트 =====
├── train.py # TRL PPO 기반 파인튜닝 (기본)
├── simple_train.py # Hugging Face Trainer 기반 (안정적)
├── optimized_train.py # RTX 3060 최적화 (권장)
├── custom_train.py # 커스텀 데이터셋 파인튜닝
├── continue_train.py # 기존 모델 추가 학습
├──
├── ===== 📊 평가 및 추론 =====
├── evaluate.py # 고급 평가 도구
├── evaluate_simple.py # 간단한 키워드 기반 평가
├── inference.py # 기본 추론 스크립트
├── inference_safe.py # 안정적인 추론
├── chat_test.py # 콘솔 채팅 테스트
├── test.py # 기본 테스트
├── quick_test.py # 빠른 효과 확인
├──
├── ===== 🗂️ 데이터 수집 및 처리 =====
├── main.py # 메인 조율 스크립트
├── data_processor.py # 데이터 가공 및 변환
├── demo.py # 데이터 수집 데모
├── data_collectors/
│ ├── web_scraper.py # 웹 스크래핑
│ ├── pdf_extractor.py # PDF 텍스트 추출
│ └── supabase_manager.py # Supabase 연동
├──
├── ===== 🔧 분석 및 유틸리티 =====
├── analyze_model.py # 모델 구조 분석
├── load.py # 기본 모델 로딩 예제
├── check_ppo_params.py # PPO 파라미터 확인
├── test_ppo_trainer.py # PPO Trainer 테스트
├──
├── ===== 📂 생성된 모델 및 데이터 =====
├── korean-llm-env/ # Python 가상환경
├── my_korean_finetuned_model/ # 기본 파인튜닝 모델
├── my_optimized_model/ # 최적화 파인튜닝 모델
├── my_continued_model/ # 추가 학습 모델
├── web_data.jsonl # 웹 스크래핑 데이터
└── evaluation_results.json # 평가 결과
train.py - TRL PPO 기반 파인튜닝 (기본)기능: TRL의 PPO(Proximal Policy Optimization)를 사용한 강화학습 기반 파인튜닝 데이터: NSMC(네이버 영화 리뷰) 데이터셋 목표: 긍정적인 한국어 텍스트 생성 학습
python train.py
특징:
simple_train.py - Hugging Face Trainer 기반 (안정적)기능: PPO 대신 Hugging Face Trainer를 사용한 안정적인 파인튜닝 권장: API 호환성 문제가 있을 때 사용
python simple_train.py --data-path your_data.jsonl \
--output-dir my_simple_model \
--epochs 3 \
--batch-size 4
특징:
optimized_train.py - RTX 3060 최적화 (⭐ 권장)기능: RTX 3060 12GB 환경에 최적화된 파인튜닝 권장: 가장 효율적이고 고성능
python optimized_train.py --data-path your_data.jsonl \
--output-dir my_optimized_model \
--batch-size 8 \
--max-length 2048 \
--lora-r 128 \
--use-4bit # 4비트 양자화 (선택)
특징:
custom_train.py - 커스텀 데이터셋 파인튜닝기능: 사용자 제공 JSONL 데이터로 파인튜닝
python custom_train.py --data-path custom_data.jsonl \
--output-dir my_custom_model \
--use-reward-model \
--epochs 5 \
--limit-samples 1000
특징:
continue_train.py - 기존 모델 추가 학습기능: 이미 파인튜닝된 모델에서 추가 학습
# 기존 어댑터에서 계속 학습
python continue_train.py --finetuned-model my_korean_finetuned_model \
--data-path new_data.jsonl \
--output-dir my_continued_model \
--mode continue
# 어댑터를 모델과 병합 후 새 어댑터 학습
python continue_train.py --finetuned-model my_korean_finetuned_model \
--data-path new_data.jsonl \
--output-dir my_continued_model \
--mode merge_and_new \
--merge-and-save
특징:
evaluate.py - 고급 평가 도구 (⭐ 권장)기능: 베이스 모델과 파인튜닝된 모델의 포괄적 비교
python evaluate.py
특징:
evaluate_simple.py - 간단한 키워드 기반 평가기능: 외부 모델 없이 키워드로 간단 평가
python evaluate_simple.py
특징:
inference.py - 기본 추론 스크립트기능: 파인튜닝된 모델로 텍스트 생성
# 대화형 모드
python inference.py --interactive
# 단일 프롬프트
python inference.py --prompt "이 영화는 정말" --max_tokens 100
# 기본 테스트
python inference.py
특징:
chat_test.py - 콘솔 채팅 테스트기능: 파인튜닝된 모델과 실시간 대화
python chat_test.py
특징:
quick_test.py - 빠른 효과 확인기능: 파인튜닝 효과를 빠르게 확인
python quick_test.py
특징:
main.py - 메인 조율 스크립트기능: 데이터 수집부터 모델 훈련까지 통합 관리
# 웹 스크래핑
python main.py --collect --web "https://example.com" "https://example2.com" \
--output web_data.jsonl
# 1DEPTH 웹 크롤링
python main.py --collect --web "https://example.com" --web-crawl \
--max-pages 50 --crawl-delay 2
# PDF 텍스트 추출
python main.py --collect --pdf "https://example.com/paper.pdf" \
--output pdf_data.jsonl
# 텍스트 파일 처리
python main.py --collect --text file1.txt file2.txt \
--output text_data.jsonl
# Supabase 연동
python main.py --collect --supabase \
--supabase-url "your-url" --supabase-key "your-key"
# 수집 + 훈련 통합
python main.py --collect --web "https://example.com" \
--train --output-dir my_trained_model
data_processor.py - 데이터 가공 및 변환기능: 다양한 형태의 데이터를 학습용으로 변환
from data_processor import (
create_dataset_from_texts,
create_dataset_from_jsonl,
save_texts_to_jsonl
)
# 텍스트 리스트를 데이터셋으로 변환
texts = ["텍스트1", "텍스트2", "텍스트3"]
dataset = create_dataset_from_texts(texts)
# JSONL 파일을 데이터셋으로 변환
dataset = create_dataset_from_jsonl("data.jsonl")
# 텍스트를 JSONL로 저장
save_texts_to_jsonl(texts, "output.jsonl", append_mode=True)
data_collectors/)web_scraper.py - 웹 스크래핑from data_collectors.web_scraper import extract_text_from_url, crawl_website_depth_1
# 단일 URL 처리
result = extract_text_from_url("https://example.com")
# 1DEPTH 크롤링
results = crawl_website_depth_1("https://example.com", max_pages=20)
pdf_extractor.py - PDF 텍스트 추출from data_collectors.pdf_extractor import extract_text_from_pdf_url
# PDF URL에서 텍스트 추출
result = extract_text_from_pdf_url("https://example.com/paper.pdf")
supabase_manager.py - Supabase 연동from data_collectors.supabase_manager import SupabaseManager
# Supabase 연동
manager = SupabaseManager(url="your-url", key="your-key")
manager.create_training_data_table()
manager.insert_web_data(web_result)
demo.py - 종합 데모기능: 전체 파이프라인 데모
# 웹 스크래핑 데모
python demo.py --demo-mode web
# PDF 추출 데모
python demo.py --demo-mode pdf
# 전체 데모 (수집 + 훈련)
python demo.py --demo-mode all
# 데이터 수집만 (훈련 제외)
python demo.py --demo-mode all --skip-training
analyze_model.py - 모델 구조 분석기능: polyglot-ko 모델의 구조를 분석하여 LoRA 타겟 모듈 찾기
python analyze_model.py
load.py - 기본 모델 로딩 예제기능: 8비트 양자화와 LoRA 설정 예제
check_ppo_params.py / test_ppo_trainer.py기능: TRL PPOTrainer의 API 확인 및 테스트
from transformers import BitsAndBytesConfig
quantization_config = BitsAndBytesConfig(load_in_8bit=True)
quantization_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_use_double_quant=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16
)
from peft import LoraConfig
# 기본 설정
lora_config = LoraConfig(
r=64,
lora_alpha=16,
lora_dropout=0.1,
bias="none",
task_type="CAUSAL_LM"
)
# 고성능 설정 (optimized_train.py)
lora_config = LoraConfig(
r=128,
lora_alpha=256,
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM"
)
| 설정 | 기본값 | RTX 3060 최적화 |
|---|---|---|
| batch_size | 4 | 8 |
| max_length | 512 | 2048 |
| lora_r | 64 | 128 |
| lora_alpha | 16 | 256 |
| gradient_accumulation_steps | 2 | 4 |
| 양자화 | 8bit | 4bit (선택) |
# 학습률
learning_rate = 1e-4 # 안정적
learning_rate = 2e-4 # 빠른 학습
# 배치 크기
batch_size = 4 # 기본
batch_size = 8 # RTX 3060 최적화
# 에포크 수
epochs = 3 # 빠른 테스트
epochs = 5 # 일반적
epochs = 10 # 고품질 (오버피팅 주의)
# 시퀀스 길이
max_length = 512 # 기본
max_length = 1024 # 긴 문맥
max_length = 2048 # 매우 긴 문맥 (메모리 주의)
# 메모리 사용량 줄이기
python optimized_train.py --data-path data.jsonl \
--batch-size 4 \
--max-length 1024 \
--use-4bit
해결 방법:
--batch-size 줄이기 (8 → 4 → 2)--max-length 줄이기 (2048 → 1024 → 512)--use-4bit 옵션 사용--gradient-accumulation-steps 늘리기# 안정적인 대안 사용
python simple_train.py --data-path data.jsonl
# 안전한 추론 스크립트 사용
python inference_safe.py --interactive
# Python 개발 헤더 설치
sudo apt install python3.12-dev
# bitsandbytes 재설치
pip uninstall bitsandbytes
pip install bitsandbytes
--use-flash-attentiondataloader_num_workers=4--use-4bit--batch-size 2--max-length 512--lora-r 128--epochs 10--limit-samples 제거python train.py # 기본 데이터로 빠른 학습
python quick_test.py # 효과 확인
python optimized_train.py --data-path large_data.jsonl \
--epochs 5 \
--batch-size 8 \
--max-length 2048
python evaluate.py # 상세 평가
# 1. 데이터 수집
python main.py --collect --web "https://your-site.com" \
--web-crawl --max-pages 100
# 2. 학습
python custom_train.py --data-path web_data.jsonl \
--epochs 3
# 3. 평가
python evaluate.py
# 기존 모델에서 새 데이터로 추가 학습
python continue_train.py --finetuned-model my_optimized_model \
--data-path new_data.jsonl \
--mode continue
이 프로젝트는 교육 및 연구 목적으로 제공됩니다. 각 스크립트의 세부 옵션은 python script_name.py --help로 확인할 수 있습니다.
4 commits
Python
97.4%
Shell
2.6%