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를 사용하려면 런타임 설정을 변경합니다:
- 상단 메뉴에서 런타임(Runtime) > 런타임 유형 변경(Change Runtime Type)을 클릭합니다.
- 하드웨어 가속기(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은 특정 작업에 특화된 성능을 얻는 데 매우 효과적이며, 적절한 데이터와 설정을 통해 높은 성능을 달성할 수 있습니다.
'생성형 AI 활용하기' 카테고리의 다른 글
대규모 언어 모델 LLM 이란 (2) | 2024.12.11 |
---|---|
AI를 활용한 빠른 논문 작성법 (0) | 2024.12.10 |
Hugging Face란 무엇인가? (1) | 2024.12.09 |
Google Colab에서 Hugging Face 모델 사용하기 (0) | 2024.12.09 |
LLaMA LLM을 이용해서 챗봇 만들기 (0) | 2024.12.09 |