티스토리 뷰

import torch.nn as nn
from timm import create_model
from peft import LoraConfig, get_peft_model

# 1) 사전학습 ViT 로드
model = create_model('vit_intern300m_patch14_448.ogvl_2pt5', pretrained=False)

# 2) 어떤 Linear 층이 있는지 확인 (타깃 모듈 결정)
for n, m in model.named_modules():
    if isinstance(m, nn.Linear):
        print(n)                 # 예) blocks.0.attn.qkv, blocks.0.attn.proj ...

# 3) LoRA 설정
config = LoraConfig(
    r=8,  # LoRA rank
    lora_alpha=16, # LoRA alpha
    target_modules=r"blocks\.\d+\.attn\.(qkv|proj)", # 정규표현식으로 타겟 모듈 지정
    lora_dropout=0.0,
    bias="none"  # 일반적으로 bias는 파인튜닝하지 않음
)

# 4) 모델에 LoRA 적용
lora_model = get_peft_model(model, config)

# 5) 학습 가능한 파라미터 수 확인
trainable_params = sum(p.numel() for p in lora_model.parameters() if p.requires_grad)
total_params = sum(p.numel() for p in lora_model.parameters())
print(f"Trainable LORA parameters: {trainable_params}")
print(f"Total parameters: {total_params}")
print(f"Percentage of trainable parameters: {100 * trainable_params / total_params:.2f}%")

# 예시: LoRA가 적용된 모델의 특정 레이어 확인
print(lora_model.blocks[0].attn.qkv)

 

 

이렇게 쉽게 적용할 수 있게 구현해놓았다니... peft 라이브러리 놀랍다.

 

예시 코드는 lora 논문에서 권장한대로 q, k, v, o 에만 lora 적용되게 구현해놨다.

 

 

왜 mlp에 적용하는 거는 future work로 남기신거죠 ㅜㅜ 

 

실제 적용시에는 mlp layer까지 적용한 결과를 봐야할 거 같다.

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함