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 : модель Pytorch с Loldu.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 для вывода : всегда используйте merge_loldu() прежде чем развернуть вашу модель для вывода, чтобы устранить любые вычислительные накладные расходы.
В сочетании с другими методами : Loldu можно объединить с другими методами оптимизации, такими как квантование для еще большей эффективности.
Для получения более подробной информации и расширенного использования, пожалуйста, обратитесь к оригинальной статье и репозитории исходного кода.
Примечание:
Пожалуйста, имейте в виду, что этот код может не полностью повторить результаты, представленные в статье из -за возможных человеческих ошибок, которые произошли во время подготовки и очистки кода до его выпуска. Если вы испытываете какие -либо проблемы в воспроизведении наших выводов, не стесняйтесь обращаться к нам. Кроме того, мы стремимся провести эксперименты по проверке здравомыслия в ближайшем будущем.
Подтверждение
Наша реализация Loldu была значительно улучшена кодовой базой Minlora.
Бибтекс
@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 } ,
}