생성형 AI 활용하기

TensorFlow를 사용하여 LLM Fine-tuning

Pro.Dev 2024. 12. 9. 22:48
반응형

Hugging Face와 TensorFlow를 사용하여 LLM Fine-tuning하는 방법

대규모 언어 모델(LLM)을 사용자 정의 데이터셋으로 Fine-tuning하면 특정 작업에 최적화된 AI 모델을 개발할 수 있습니다. 이 가이드는 Hugging Face와 TensorFlow를 사용하여 Llama 3.21B 모델을 Fine-tuning하는 과정을 단계별로 설명합니다.

1. Fine-tuning의 개요

Fine-tuning은 기존에 사전 학습된 모델을 새로운 데이터셋에 적응시키는 과정입니다. 이를 통해 특정 작업(예: 분류, 요약, 감정 분석 등)에 특화된 성능을 얻을 수 있습니다. 예제 작업은 아래와 같습니다:

  • 입력: 논문 제목과 요약
  • 출력: 논문의 카테고리(예: 컴퓨터 비전, 자연어 처리)

사전 준비물

  • Hugging Face Transformers 라이브러리
  • TensorFlow 프레임워크
  • 사용자 정의 데이터셋

2. Google Colab 환경 설정

Google Colab에서 작업을 진행하려면 몇 가지 초기 설정이 필요합니다.

2.1 라이브러리 설치

Google Colab 노트북에서 아래 명령어를 실행하여 필요한 라이브러리를 설치합니다:

!pip install transformers
!pip install tensorflow
!pip install datasets

2.2 GPU 활성화

Colab에서 GPU를 사용하려면 런타임 설정을 변경합니다:

  1. 상단 메뉴에서 런타임(Runtime) > 런타임 유형 변경(Change Runtime Type)을 클릭합니다.
  2. 하드웨어 가속기(Hardware Accelerator)GPU로 선택합니다.

3. 데이터 준비

3.1 데이터 수집

Archive API를 사용하여 최신 논문의 데이터를 수집합니다:

import requests

# Archive API를 사용하여 논문 데이터 수집
response = requests.get("https://arxiv.org/api/query?search_query=cs&start=0&max_results=2000")
data = response.json()
# 논문 제목, 요약, 카테고리를 추출
papers = [{
    "title": paper["title"],
    "summary": paper["summary"],
    "category": paper["category"]
} for paper in data["entries"]]

3.2 데이터셋 생성

수집한 데이터를 CSV 파일이나 Hugging Face Datasets 포맷으로 변환합니다:

import pandas as pd

# 데이터 저장
df = pd.DataFrame(papers)
df.to_csv("papers_dataset.csv", index=False)

4. 모델 설정

4.1 모델과 토크나이저 불러오기

Hugging Face Transformers를 사용하여 Llama 모델과 토크나이저를 로드합니다:

from transformers import TFAutoModelForCausalLM, AutoTokenizer

# 모델과 토크나이저 로드
model_name = "meta-llama/Llama-3.21B"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = TFAutoModelForCausalLM.from_pretrained(model_name)

4.2 데이터 전처리

텍스트 데이터를 토큰으로 변환합니다:

# 텍스트를 토큰으로 변환
inputs = tokenizer(["논문 제목과 요약 입력"], truncation=True, padding=True, return_tensors="tf")

5. Fine-tuning 과정

5.1 학습 루프 정의

TensorFlow를 사용하여 학습 루프를 작성합니다:

import tensorflow as tf
from transformers import create_optimizer

# 데이터 준비
batch_size = 8
dataset = tf.data.Dataset.from_tensor_slices((inputs["input_ids"], inputs["attention_mask"]))
dataset = dataset.shuffle(len(inputs["input_ids"])).batch(batch_size)

# 옵티마이저 설정
num_train_steps = len(dataset) * 3
optimizer, lr_schedule = create_optimizer(
    init_lr=5e-5,
    num_train_steps=num_train_steps,
    num_warmup_steps=0
)

# 모델 컴파일
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
model.compile(optimizer=optimizer, loss=loss_fn)

# 모델 학습
model.fit(dataset, epochs=3)

5.2 Low-Rank Adaptation(LORA) 사용하기

TensorFlow에서 LORA를 사용하는 방법은 Hugging Face의 peft 라이브러리를 활용합니다. 하지만 현재 TensorFlow와 통합된 LORA 지원은 제한적입니다. 대신 모델의 일부 레이어를 고정하고 특정 레이어만 학습하는 방법을 사용할 수 있습니다:

# 특정 레이어만 학습 가능하도록 설정
for layer in model.layers:
    layer.trainable = False

# 특정 레이어만 학습
for layer in model.layers[-2:]:
    layer.trainable = True

# 다시 컴파일 후 학습
model.compile(optimizer=optimizer, loss=loss_fn)
model.fit(dataset, epochs=3)

6. 모델 평가

6.1 예측 결과 확인

Fine-tuning된 모델을 사용하여 입력 텍스트에 대한 예측을 생성합니다:

# 예측 생성
input_text = "논문의 제목과 요약을 입력하세요."
inputs = tokenizer(input_text, return_tensors="tf")
outputs = model.generate(**inputs, max_new_tokens=50)
result = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(result)

6.2 정확도 평가

테스트 데이터셋에 대해 모델의 정확도를 평가합니다:

from sklearn.metrics import accuracy_score

# 실제 라벨과 예측 라벨 비교
true_labels = [...]
predicted_labels = [...]
accuracy = accuracy_score(true_labels, predicted_labels)
print(f"모델 정확도: {accuracy * 100:.2f}%")

7. 결론

이 가이드를 통해 Hugging Face와 TensorFlow를 활용하여 대규모 언어 모델을 Fine-tuning하는 방법을 배웠습니다. TensorFlow는 직관적인 API와 GPU 가속 기능을 제공하여 모델 학습을 간단하게 만들어줍니다. Fine-tuning은 특정 작업에 특화된 성능을 얻는 데 매우 효과적이며, 적절한 데이터와 설정을 통해 높은 성능을 달성할 수 있습니다.

반응형