기술과 산업/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