파인튜닝 과정

minyou·2024년 9월 23일
0

공부

목록 보기
5/9

파인튜닝 왜 하는건가?

파인튜닝 과정

1. 파인튜닝 데이터 생성 및 변환

2. 파인튜닝 모델 생성

과정: 대규모 데이터셋으로 사전 학습된 모델을 불러옵니다

1) 사전 훈련된 모델 선택
Hugging Face Basic Model 한국어 기본모델
base_model = "beomi/llama-2-ko-7b"

Hugging Face의 transformers 라이브러리에서 사전 학습된 언어 모델을 쉽게 불러올 수 있습니다.

from transformers import AutoModelForSequenceClassification

model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased")

3. 데이터셋 불러오기

과정: 특정 작업에 맞는 데이터셋을 준비하고, 훈련 데이터와 검증 데이터를 나눕니다.
이때 훈련 데이터와 검증 데이터를 분리하여 파인튜닝 중 모델 성능을 평가합니다.

from datasets import load_dataset

dataset = load_dataset("imdb")  # 감정 분석 데이터셋

4. 모델 아키텍처 조정 or 동결

model.classifier = torch.nn.Linear(model.config.hidden_size, num_labels)

레이어 조정: PyTorch를 사용하여 모델의 출력 레이어를 조정합니다.

for param in model.base_model.parameters():
    param.requires_grad = False  # 기본 모델의 파라미터를 동결

동결 : PyTorch 또는 TensorFlow로 모델의 파라미터를 동결할 수 있습니다.사전 학습된 모델의 주요 파라미터를 고정하여, 이미 학습된 지식을 훼손하지 않고 새로운 작업에 맞춰 마지막 레이어만 학습시키는 방식입니다.

5. 최적화 및 손실 함수 설정

과정: 특정 작업에 적합한 손실 함수와 최적화 알고리즘을 설정합니다. 예를 들어, 텍스트 분류에는 교차 엔트로피 손실을 사용합니다.

6. 파인튜닝 실행

과정: 사전 학습된 모델을 특정 작업 데이터로 추가 훈련합니다. 이때, 낮은 학습률을 사용하여 기존의 지식을 훼손하지 않도록 합니다.

from transformers import Trainer, TrainingArguments

training_args = TrainingArguments(
    output_dir="./results",
    learning_rate=1e-5,
    per_device_train_batch_size=8,
    num_train_epochs=3,
    evaluation_strategy="epoch"
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=dataset["train"],
    eval_dataset=dataset["test"]
)

trainer.train()

7. 평가 및 반복

#평가
eval_results = trainer.evaluate()
print(f"Perplexity: {math.exp(eval_results['eval_loss']):.2f}")
print(f"Accuracy: {eval_results['eval_accuracy']:.2f}")

추가로 고려하여할 점

  • 데이터 전처리: 토큰화, 패딩, 인코딩 등의 과정이 필요할 수 있습니다.
  • 하이퍼파라미터 튜닝: 최적의 학습률, 배치 크기, 에폭 수 등을 찾는 과정이 포함될 수 있습니다.
  • 모델 저장 및 배포: 파인튜닝된 모델을 저장하고 실제 환경에 배포하는 단계도 고려해야 합니다.

추가적인 라이브러리

PEFT
peft: LoRA, Prefix Tuning, P-Tuing, Prompt Tuning 과 같은 기법들을 쉽게 사용하도록 나온 라이브러리. 모델의 일부 파라미터만을 조정하여 메모리 사용량과 계산 비용을 줄이면서도 높은 성능을 유지하는 것이 목표입니다.

TRL (Transformer Reinforcement Learning) 은 transfomer언어 모델의 훈련을 위한 풀스택 라이브러리. TRL은 변환기 기반 언어 모델을 강화학습을 통해 파인튜닝하는 기법입니다. 이는 모델이 특정 목표나 보상 함수에 따라 출력을 최적화할 수 있도록 합니다.

PEFT, LoRA, TRL 적용 단계 요약

파인튜닝 과정에서 PEFT, LoRA, 그리고 TRL은 각각 적절한 단계에서 부가적으로 실행될 수 있습니다. 각 기법이 적용될 수 있는 단계는 다음과 같습니다:

1. 파인튜닝 모델 생성 (사전 학습된 모델 불러오기)

PEFT 및 LoRA 적용 가능
모델을 불러올 때, LoRA나 PEFT 설정을 미리 준비하여 일부 파라미터만 효율적으로 학습할 수 있도록 설정합니다.
적용 단계: 모델 생성 시 (2번 과정).

2. 모델 아키텍처 조정 또는 동결

PEFT 및 LoRA 적용 가능
모델의 일부 파라미터를 조정하거나 동결하고, 필요한 부분만 학습하도록 최적화합니다.
예를 들어, 모델의 주요 파라미터는 동결하고, 마지막 레이어만 학습하는 방식으로 사용할 수 있습니다.
적용 단계: 모델 아키텍처 조정 및 동결 시 (4번 과정).

3. 파인튜닝 실행

LoRA 및 PEFT 적용 가능
파인튜닝 실행 시, LoRA나 PEFT 기법을 적용하여 일부 파라미터만 학습하는 효율적인 파인튜닝을 수행합니다.
TRL 적용 가능
파인튜닝 후에 추가로 강화학습을 적용하여, 모델이 생성하는 텍스트의 품질을 높일 수 있습니다. 특히 텍스트 생성 작업에서 유용합니다.
적용 단계:
파인튜닝 실행 시 (6번 과정) - LoRA 및 PEFT.
파인튜닝 후 - TRL.

0개의 댓글