[NLP] PEFT(Parameter Efficient Tuning) : LoRA 코드

2025. 1. 6. 21:56·NLP(자연어처리)

LoRA

LoRA는 큰 모델을 튜닝하기 위한 PEFT 방법 중 가장 널리 사용되는 방법이다. 다음은 Hugging Face에 있는 KoGPT 모델을 LoRA 기법으로 미세조정하기 위해 설정 및 초기화를 수행하는 코드이다.  오늘은 이 코드를 살펴보도록 한다. 

import transformers 
from peft import LoraConfig, PdftModel , get_peft_model, prepare_model_for_int8_training

target_modules = ["q_proj" , "k_proj" , "v_proj" , "out_proj" , "fc_in" , "fc_out" , "wte"] 
config = LoraConfig(
    r= 4 ,  #LoRA의 rank 설정 
    lora_alpha = 16 , #Scaling factor
    target_modules = target_modules , 
    lora_droupout = 0.1 , #과적합 방지 
    bias = "none" ,  #bias 파라미터 업데이트 X 
    task_type = "CAUSAL_LM") # 작업유형 : 언어 생성

 

  • LoraConfig : LoRA 설정을 정의하는 클래스 
  • PeftModel : PEFT 를 적용한 모델 클래스 
  • get_peft_mode : 기존 모델에 PEFT를 적용하여 새로운 모델을 생성하는 함수
  • prepare_model_for_int8_training : INT8 양자화를 적용한 모델을 미세조정하기 위해 준비하는 함수 
#모델정의 
model = transformers.GPTJForCausalLM.from_pretrained(
    "kakaobrain/kogpt",
    revision="KoGPT6B-ryan1.5b-float16",  # or float32 version: revision=KoGPT6B-ryan1.5b
    pad_token_id=tokenizer.eos_token_id, # 패딩 토큰 id 설정 (보통 EOS 토큰이 패딩으로 사용) 
    use_cache=False, #학습 시 보통 False 
    device_map={"": rank}, 
    torch_dtype=torch.float16, #모델 파라미터는 float16 데이터 타입으로 로드 
    load_in_8bit=True, #INT8 양자화를 활성화 
)
model = prepare_model_for_int8_training(model)
# 기존의 KoGPT 모델에 LoRA 구성을 적용하여 새로운 PEFT 기반 모델 생성 
lora_model = get_peft_model(model, config)

 

LoRA는 지정된 모듈(target_modules)에 대해서만 업데이트 수행하며, 나머지 파라미터는 freeze 상태로 유지된다. 

# LoRA 이외 다른 layer들이 freeze 되어 있는지 확인 
for name , param in lora_model.named_parameters() :
    if param.requires_grad : 
    	print(name)

 

 

📚 참고자료


https://huggingface.co/docs/peft/v0.8.2/en/package_reference/lora#peft.LoraConfig

 

LoRA

🤗 Accelerate integrations

huggingface.co

 

'NLP(자연어처리)' 카테고리의 다른 글

Quantization & Prompt Engineering  (1) 2025.01.29
[NLP] get_accuracy 함수 내부구현 이해  (1) 2025.01.06
[NLP] R.A.G 기법  (0) 2024.07.20
'NLP(자연어처리)' 카테고리의 다른 글
  • Quantization & Prompt Engineering
  • [NLP] get_accuracy 함수 내부구현 이해
  • [NLP] R.A.G 기법
zzoming_00
zzoming_00
꾸준함🍀
  • zzoming_00
    ZZOMING'S TECH BLOG
    zzoming_00
  • 전체
    오늘
    어제
    • ALL (56)
      • Docker (0)
      • 경진대회 (2)
      • 사이드 프로젝트 (5)
      • NLP(자연어처리) (4)
      • CV(컴퓨터비전) (2)
      • ML&DL (9)
      • Git (4)
      • Python (10)
      • Algorithm (19)
  • 블로그 메뉴

    • 홈
    • 글쓰기
    • 태그
    • 방명록
  • 링크

    • 글쓰기
  • 공지사항

  • 인기 글

  • 태그

    알고리즘
    object
    파이썬
    챗봇
    LLM
    고차함수
    참조방식
    클래스
    내장함수
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
zzoming_00
[NLP] PEFT(Parameter Efficient Tuning) : LoRA 코드
상단으로

티스토리툴바