카테고리 없음
시험대비2
math_tbro
2025. 5. 8. 23:19
Hugging Face Transformers 라이브러리를 사용하여 **Large Language Model (LLM)**을 학습하는 예시 코드를 제공하겠습니다. 이 코드는 문자열 데이터를 사용하여 GPT-2 모델을 파인튜닝하는 방법을 다룹니다.
아래 코드는 Trainer API를 사용하여 간단한 학습을 설정합니다. 이 예시에서는 단일 GPU에서 파인튜닝을 진행하며, 텍스트 데이터를 기반으로 GPT-2 모델을 훈련합니다. 사용하려는 LLM에 맞게 코드를 수정할 수 있습니다.
Hugging Face Transformers를 이용한 LLM 학습 코드 예시
1. 필요한 라이브러리 설치
먼저 필요한 라이브러리를 설치합니다.
bash
복사편집
pip install transformers datasets torch
2. 코드 예시
python
import torch
from datasets import load_dataset
from transformers import GPT2Tokenizer, GPT2LMHeadModel, Trainer, TrainingArguments
# 1. 데이터셋 로딩
dataset = load_dataset('wikitext', 'wikitext-103-raw-v1')
# 2. GPT-2 토크나이저와 모델 로딩
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
# 데이터셋 전처리 (토큰화)
def tokenize_function(examples):
return tokenizer(examples['text'], return_tensors='pt', truncation=True, padding='max_length', max_length=512)
train_dataset = dataset['train'].map(tokenize_function, batched=True)
test_dataset = dataset['test'].map(tokenize_function, batched=True)
# 3. GPT-2 모델 로딩
model = GPT2LMHeadModel.from_pretrained('gpt2')
# 4. TrainingArguments 설정
training_args = TrainingArguments(
output_dir='./results', # 출력 디렉토리
evaluation_strategy="epoch", # 평가 전략
learning_rate=5e-5, # 학습률
per_device_train_batch_size=4, # 학습 배치 크기
per_device_eval_batch_size=4, # 평가 배치 크기
weight_decay=0.01, # 가중치 감소
num_train_epochs=3, # 학습 에폭 수
logging_dir='./logs', # 로그 디렉토리
logging_steps=10,
)
# 5. Trainer 객체 생성
trainer = Trainer(
model=model, # 학습할 모델
args=training_args, # 학습 인자
train_dataset=train_dataset, # 학습 데이터셋
eval_dataset=test_dataset, # 평가 데이터셋
)
# 6. 학습 시작
trainer.train()
# 7. 학습된 모델 저장
trainer.save_model("./trained_gpt2")
from datasets import load_dataset
from transformers import GPT2Tokenizer, GPT2LMHeadModel, Trainer, TrainingArguments
# 1. 데이터셋 로딩
dataset = load_dataset('wikitext', 'wikitext-103-raw-v1')
# 2. GPT-2 토크나이저와 모델 로딩
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
# 데이터셋 전처리 (토큰화)
def tokenize_function(examples):
return tokenizer(examples['text'], return_tensors='pt', truncation=True, padding='max_length', max_length=512)
train_dataset = dataset['train'].map(tokenize_function, batched=True)
test_dataset = dataset['test'].map(tokenize_function, batched=True)
# 3. GPT-2 모델 로딩
model = GPT2LMHeadModel.from_pretrained('gpt2')
# 4. TrainingArguments 설정
training_args = TrainingArguments(
output_dir='./results', # 출력 디렉토리
evaluation_strategy="epoch", # 평가 전략
learning_rate=5e-5, # 학습률
per_device_train_batch_size=4, # 학습 배치 크기
per_device_eval_batch_size=4, # 평가 배치 크기
weight_decay=0.01, # 가중치 감소
num_train_epochs=3, # 학습 에폭 수
logging_dir='./logs', # 로그 디렉토리
logging_steps=10,
)
# 5. Trainer 객체 생성
trainer = Trainer(
model=model, # 학습할 모델
args=training_args, # 학습 인자
train_dataset=train_dataset, # 학습 데이터셋
eval_dataset=test_dataset, # 평가 데이터셋
)
# 6. 학습 시작
trainer.train()
# 7. 학습된 모델 저장
trainer.save_model("./trained_gpt2")
3. 주요 설명
- 데이터셋 로딩: datasets 라이브러리를 사용하여 wikitext 데이터셋을 로드합니다. 이 데이터셋은 다양한 텍스트 데이터를 포함하고 있습니다.
- 토크나이저 설정: GPT2Tokenizer를 사용하여 텍스트를 GPT-2 모델이 처리할 수 있는 토큰 형식으로 변환합니다.
- 모델 설정: GPT2LMHeadModel은 GPT-2 모델을 로드하는 클래스입니다. GPT-2는 언어 모델이므로, 다음 단어를 예측하는 작업에 사용됩니다.
- 훈련 인자: TrainingArguments는 훈련에 필요한 여러 인자들을 설정하는 객체로, output_dir, batch_size, learning_rate 등의 하이퍼파라미터를 설정합니다.
- Trainer 객체: Trainer는 Hugging Face에서 제공하는 높은 수준의 API로, 모델 훈련 및 평가를 관리합니다. train_dataset과 eval_dataset을 통해 훈련 및 평가 데이터셋을 전달합니다.
- 학습: trainer.train()을 호출하여 훈련을 시작합니다.
- 모델 저장: 학습이 완료되면, trainer.save_model()을 사용하여 모델을 저장합니다.
4. 추가 옵션
- GPU 사용: GPU를 사용할 수 있다면, TrainingArguments에 device='cuda'를 설정하여 GPU에서 훈련을 할 수 있습니다.
- 학습 데이터 변경: wikitext 대신 다른 텍스트 데이터셋을 사용할 수 있으며, load_dataset으로 다른 데이터셋을 로드하여 학습할 수 있습니다.
- 모델 종류 변경: GPT-2 대신 다른 언어 모델을 사용하려면, GPT2Tokenizer와 GPT2LMHeadModel을 원하는 모델로 변경할 수 있습니다. 예를 들어, BERT 계열 모델을 사용할 수 있습니다.
5. 결과 및 성능
- 훈련이 완료된 후, ./results 폴더에 훈련된 모델이 저장됩니다. 이 모델은 다양한 텍스트 생성 작업에 사용될 수 있습니다.
- 성능 평가: Trainer는 자동으로 평가를 진행하며, eval_dataset에 대해 정확도나 기타 메트릭을 계산합니다.
결론
이 코드는 Hugging Face의 transformers 라이브러리와 datasets 라이브러리를 활용하여, GPT-2 모델을 텍스트 데이터셋에 대해 파인튜닝하는 샘플 코드입니다. 이 방식은 매우 간단하게 LLM을 훈련시킬 수 있게 해줍니다. 이 코드를 기반으로 데이터를 변경하거나, 모델을 다른 LLM으로 바꾸어 실험할 수 있습니다.