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 |