Loldu는 완전 미세 조정과 비슷한 성능 수준을 달성하는 동시에 훈련 가능한 매개 변수의 수를 크게 줄이기 위해 설계된 최첨단 매개 변수 효율적인 미세 조정 (PEFT) 기술입니다. 이 문서는 Loldu를 프로젝트에 효과적으로 통합하는 데 필요한 단계를 간략하게 설명합니다.
자세한 내용은 논문을 참조하십시오 : https://arxiv.org/pdf/2410.13618
Loldu를 설치하려면 Pip을 사용하기 만하면됩니다.
git clone https://github.com/SKDDJ/LoLDU
cd LoLDU
pip install -e . Loldu 사용 방법에 대한 간단한 예는 다음과 같습니다.
import torch
import torch . nn as nn
from functools import partial
from minloldu import LoLDUParametrization , add_loldu , get_loldu_params
# Define your model
model = YourModel ()
# Define LoLDU configuration
loldu_config = {
nn . Linear : {
"weight" : partial ( LoLDUParametrization . from_linear , rank = 15 ),
},
}
# Add LoLDU to the model
add_loldu ( model , loldu_config = loldu_config )
# Freeze all parameters
for param in model . parameters ():
param . requires_grad = False
# Enable gradients for LoLDU parameters
for param in get_loldu_params ( model ):
param . requires_grad = True
# Now your model is ready for fine-tuning with LoLDU add_loldu(model, loldu_config)
model : 수정할 Pytorch 모델.loldu_config : loldu의 구성 사전. get_loldu_params(model, print_shapes=False)
model : Loldu의 Pytorch 모델.print_shapes : 사실이라면 Loldu 매개 변수의 모양을 인쇄합니다. disable_loldu(model)
enable_loldu(model)
remove_loldu(model)
merge_loldu(model)
get_loldu_state_dict(model)
LoLDUParametrization.from_linear(layer, rank)layer : 매개 변수화 선형 층.rank : 낮은 순위 근사치의 순위. from minloldu import LoLDUParametrization , add_loldu
from functools import partial
class MyModel ( nn . Module ):
def __init__ ( self ):
super (). __init__ ()
self . model = nn . Sequential (
nn . Linear ( in_features = 15 , out_features = 15 ),
)
def forward ( self , x ):
return self . model ( x )
model = MyModel ()
loldu_config = {
nn . Linear : {
"weight" : partial ( LoLDUParametrization . from_linear , rank = 15 ),
},
}
add_loldu ( model , loldu_config = loldu_config ) from minloldu import get_loldu_params
# Freeze all parameters
for param in model . parameters ():
param . requires_grad = False
# Enable gradients for LoLDU parameters
for param in get_loldu_params ( model ):
param . requires_grad = True
# Your training loop here from minloldu import get_loldu_state_dict
# Save LoLDU state
state_dict_to_save = get_loldu_state_dict ( model )
torch . save ( state_dict_to_save , "loldu_state.pth" )
# Load LoLDU state
loaded_state = torch . load ( "loldu_state.pth" )
model . load_state_dict ( loaded_state , strict = False ) from minloldu import merge_loldu
# After training, merge LoLDU for efficient inference
merge_loldu ( model )적절한 순위 선택 : lolduparametrization의 순위 매개 변수는 매개 변수 효율성과 모델 성능 사이의 절충에 영향을 미칩니다. 작업에 대한 최적의 균형을 찾기 위해 다른 순위를 실험하십시오.
미세 조정 하이퍼 파라미터 : Loldu는 완전 미세 조정에 비해 다른 학습 률이 필요할 수 있습니다. 그에 따라 학습 속도 및 기타 하이퍼 파라미터를 조정하십시오.
모니터 교육 : Loldu가 모델을 효과적으로 조정하고 있는지 훈련 과정을 계속 주시하십시오. 유효성 검사 세트를 사용하여 오버 피트팅을 방지하십시오.
추론 병합 : 계산 오버 헤드를 제거하기 위해 추론을 위해 모델을 배포하기 전에 항상 merge_loldu() 사용하십시오.
다른 기술과 결합 : Loldu는 더 큰 효율성을 위해 양자화와 같은 다른 최적화 기술과 결합 될 수 있습니다.
자세한 정보 및 고급 사용법은 원본 용지 및 소스 코드 저장소를 참조하십시오.
메모:
이 코드는 출시 전 코드의 준비 및 청소 중에 발생한 인간 오류로 인해이 코드가 논문에 제시된 결과를 완전히 복제하지 않을 수 있습니다. 우리의 발견을 재현하는 데 어려움을 겪고 있다면 주저하지 마십시오. 또한 가까운 시일 내에 정신 체크 실험을 수행하기 위해 노력하고 있습니다.
승인
우리의 Loldu 구현은 Minlora Codebase에 의해 크게 향상되었습니다.
Bibtex
@misc { shi2024loldulowrankadaptationlowerdiagupper ,
title = { LoLDU: Low-Rank Adaptation via Lower-Diag-Upper Decomposition for Parameter-Efficient Fine-Tuning } ,
author = { Yiming Shi and Jiwei Wei and Yujia Wu and Ran Ran and Chengwei Sun and Shiyuan He and Yang Yang } ,
year = { 2024 } ,
eprint = { 2410.13618 } ,
archivePrefix = { arXiv } ,
primaryClass = { cs.CV } ,
url = { https://arxiv.org/abs/2410.13618 } ,
}