ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • LoRA 기반 LLaMA 파인튜닝 실습 가이드
    기술과 산업/AI 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
Designed by Tistory.