LoRAって本体にマージしなくても使えるの?
使える!
マージせずにLoRAを差しこんで使ってる例
from peft import PeftModel
from transformers import AutoModelForCausalLM
base_model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3-8B")
lora_model = PeftModel.from_pretrained(base_model, "./my_lora_adapter")
# 推論モード切り替え
lora_model.eval()
マージする場合
merged_model = lora_model.merge_and_unload()
merged_model.save_pretrained("./merged_model")
lora_model.eval()
マージする場合としない場合の違い
どちらも元のモデルにLoRA部分の重みを線形加算してるという点は同じ
マージする場合はマージするときだけ線形加算が走り、マージしていない場合は推論するたびに線形加算が走る
マージするとお得なこと
- LoRA層を外部で読み込むのが面倒な環境でも使える(例:非PEFT対応)
- 再配布しやすい
- 学習済みLoRAを複数まとめられる(例:キャラLoRA+文体LoRA)