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 กับ Lolduprint_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 ปรับตัวแบบจำลองได้อย่างมีประสิทธิภาพ ใช้ชุดการตรวจสอบความถูกต้องเพื่อป้องกันไม่ให้ overfitting
ผสานสำหรับการอนุมาน : ใช้ 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 } ,
}