기술과 산업/AI

LoRA 기반 LLaMA 파인튜닝 실습 가이드

B컷개발자 2025. 5. 22. 13:06
728x90

이 글은 LoRA를 활용해 LLaMA 기반 언어 모델을 효율적으로 파인튜닝하는 실습 가이드입니다. Hugging Face peft 라이브러리를 중심으로 코드를 제공하며, 실전에서 바로 활용 가능한 구조로 구성했습니다.

 

실습 목표

  • LLaMA 기반 모델에 LoRA를 적용
  • 텍스트 생성 태스크로 파인튜닝 진행
  • peft 라이브러리를 이용한 구조적 학습

 

1단계. 환경 준비

pip install transformers accelerate datasets peft bitsandbytes

⚠️ bitsandbytes는 GPU 환경에서만 작동합니다. CPU-only 환경에서는 학습이 불가합니다.

 

2단계. 모델 및 토크나이저 로드

from transformers import AutoTokenizer, AutoModelForCausalLM

base_model_id = "decapoda-research/llama-7b-hf"  # 또는 Hugging Face Hub에서 접근 가능한 모델
tokenizer = AutoTokenizer.from_pretrained(base_model_id)
model = AutoModelForCausalLM.from_pretrained(
    base_model_id,
    load_in_8bit=True,            # 메모리 최적화
    device_map="auto"
)

로컬에서 LLaMA를 사용하려면 권한이 필요하며, Hugging Face에 신청 후 transformers-cli login으로 토큰 인증을 받아야 합니다. 권한이 없는 경우 TinyLLaMA나 OpenLLaMA 대체 가능.

 

3단계. LoRA 구성 및 적용

from peft import LoraConfig, get_peft_model, TaskType

lora_config = LoraConfig(
    r=8,
    lora_alpha=16,
    target_modules=["q_proj", "v_proj"],  # LLaMA 구조에 맞는 계층
    lora_dropout=0.05,
    bias="none",
    task_type=TaskType.CAUSAL_LM
)

model = get_peft_model(model, lora_config)
model.print_trainable_parameters()

출력 예시:

trainable params: 2,359,296 || all params: 6,738,290,688 || trainable%: 0.03%

 

 

4단계. 학습 데이터셋 불러오기

from datasets import load_dataset

dataset = load_dataset("Abirate/english_quotes")  # 간단한 예제용 데이터셋

데이터 포맷 확인:

print(dataset["train"][0])

 

 

5단계. 데이터 전처리

def tokenize_function(example):
    return tokenizer(
        example["quote"],
        padding="max_length",
        truncation=True,
        max_length=128
    )

tokenized_dataset = dataset.map(tokenize_function, batched=True)

 

 

6단계. Trainer 구성 및 파인튜닝

from transformers import TrainingArguments, Trainer

training_args = TrainingArguments(
    output_dir="./lora-llama",
    per_device_train_batch_size=4,
    gradient_accumulation_steps=2,
    num_train_epochs=3,
    save_steps=100,
    logging_dir="./logs",
    fp16=True,
    save_total_limit=1
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_dataset["train"]
)

trainer.train()

 

 

7단계. 모델 저장 및 추론

# LoRA 가중치만 저장
model.save_pretrained("./lora-llama-adapter")
tokenizer.save_pretrained("./lora-llama-adapter")

추론 예시:

input_ids = tokenizer("The future of AI is", return_tensors="pt").input_ids.cuda()
outputs = model.generate(input_ids, max_new_tokens=50)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))

 

 

예상 학습 시간 및 리소스

  • GPU 필요: 최소 A100 또는 T4 이상 권장
  • 메모리 사용량: LoRA 덕분에 VRAM 16~24GB로 가능 (8bit + Adapter만 학습)
  • 학습 시간: 데이터셋 크기, 에폭 수에 따라 수십 분~수 시간
728x90