Эта кодовая база переосмысливает Lora: адаптация с низким уровнем ранга крупных языковых моделей (ICLR 2022) и реконструирована на основе Loralib.
Реализации loratorch и loralib очень разные. Мы принимаем nn.Linear в качестве примера следующим образом.
loralib , где
loratorch , loralib вычисляет loratorch объединяет предварительно обученный вес nn.Linear.forward() . Нет никакой разницы между loralib и loratorch в линейных слоях. Но в некоторых без линейных или сложных слоев мы не уверены, удовлетворяет ли этот слой loralib . Напротив, идея слияния веса сначала в loratorch является более общей и расширяемой. Вы просто называете merge_lora_param() в loratorch , чтобы объединить веса, а затем вызовать forward() в исходном слое, чтобы вычислять результаты. С помощью loratorch вы можете легко реализовать Lora к любому типу слоя torch.nn .
loralib | loratorch | ||
|---|---|---|---|
nn.Linear | ✓ | ✓ | linear.ipynb |
nn.Embedding | ✓ | ✓ | Encedding.ipynb |
nn.Conv1d | ✓ | ✓ | |
nn.Conv2d | ✓ | ✓ | |
nn.Conv3d | ✓ | ✓ | |
nn.MultiheadAttention | ✘ | ✓ | |
MergedLinear | ✓ (Ошибка) | ✓ | urgedLinear.ipynb |
| трудно расширить | Легко расширить |
Мы сравниваем результаты loralib и loratorch в примерах, чтобы продемонстрировать правильность реализации в loratorch .
Использование loratorch такое же, как и loralib .
Установите loratorch .
pip install git+https://github.com/Baijiong-Lin/LoRA-Torch
# Alternatively for developers
# git clone https://github.com/Baijiong-Lin/LoRA-Torch
# cd LoRA-Torch
# pip install -e . Замените слои, где вы хотели бы использовать Lora, используя loratorch .
# ===== Before =====
# layer = nn.Linear(in_features, out_features)
# ===== After ======
import loratorch as lora
# Add a pair of low-rank adaptation matrices with rank r=16 and alpha=32
layer = lora . Linear ( in_features , out_features , r = 16 , lora_alpha = 32 )Отметьте только параметры LORA как обучаемые перед тренировочной петлей.
model = Model ()
# (!!!) This sets requires_grad to False for all parameters without the string "lora_" in their names
lora . mark_only_lora_as_trainable ( model )
optimizer = torch . optim . SGD ( model . parameters (), lr = 0.1 )
# Training loop
for batch in dataloader :
model . train ()
# forward process
loss = forward_fun ( model , batch )
# backward process
optimizer . zero_grad ()
loss . backward ()
optimizer . step ()
# (!!!) reregister model param to ensure they are in model.state_dict() and model.parameters()
# (!!!) Without this line, the performance does not be affected but you will find that some weights are missing in model.state_dict() and model.parameters()
lora . register_model_param_after_backward ( model )Сохранить модель LORA (будут сохранены только матрицы LORA).
# ===== Before =====
# torch.save(model.state_dict(), checkpoint_path)
# ===== After =====
torch . save ( lora . lora_state_dict ( model ), checkpoint_path )Загрузите модель LORA (необходимо сначала загрузить предварительно обученную модель).
# Load the pre-trained checkpoint first
model . load_state_dict ( torch . load ( 'ckpt_pretrained.pt' ), strict = False )
# Then load the LoRA checkpoint
model . load_state_dict ( torch . load ( 'ckpt_lora.pt' ), strict = False ) loratorch разрабатывается и поддерживается Baijiong Lin.
Если у вас есть какие -либо вопросы или предложения, пожалуйста, не стесняйтесь обращаться к нам, подняв проблему или отправив электронное письмо на [email protected] .
loratorch в значительной степени основан на loralib . Мы благодарим его авторов за их замечательную кодовую базу с открытым исходным кодом.
Если вы считаете loratorch полезным для исследования или разработки, пожалуйста, укажите следующее:
@inproceedings { hu2022lora ,
title = { Lo{RA}: Low-Rank Adaptation of Large Language Models } ,
author = { Edward J Hu and Yelong Shen and Phillip Wallis and Zeyuan Allen-Zhu and Yuanzhi Li and Shean Wang and Lu Wang and Weizhu Chen } ,
booktitle = { International Conference on Learning Representations } ,
year = { 2022 } ,
}
@software { lin2023loratorch ,
author = { Baijiong Lin } ,
title = { {LoRA-Torch}: {PyTorch} Reimplementation of {LoRA} } ,
url = { https://github.com/Baijiong-Lin/LoRA-Torch } ,
year = { 2023 }
} loratorch выпускается по лицензии MIT.