Codebase นี้จะทำการปรับปรุง 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 | EMBEDDING.IPYNB | ||
nn.Conv1d | |||
nn.Conv2d | |||
nn.Conv3d | |||
nn.MultiheadAttention | |||
MergedLinear | ✓ (ข้อผิดพลาด) | MergedLinear.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 อย่างมาก เราขอขอบคุณผู้เขียนสำหรับ codebase ที่ยอดเยี่ยมและโอเพ่นซอร์ส
หากคุณพบว่า 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