7.0. LoRA Improvements in fine-tuning
Last updated
Last updated
LoRAを使用することで、ファインチューニングに必要な計算量が大幅に削減されます。
LoRAは、モデルの小さな部分のみを変更することで、大規模モデルを効率的にファインチューニングすることを可能にします。これにより、トレーニングする必要のあるパラメータの数が減り、メモリと計算リソースが節約されます。これは以下の理由によります:
トレーニング可能なパラメータの数を削減: モデル内の全体の重み行列を更新する代わりに、LoRAは重み行列を2つの小さな行列(AとB)に分割します。これにより、トレーニングが速くなり、更新する必要のあるパラメータが少ないため、メモリも少なくて済みます。
これは、レイヤー(行列)の完全な重み更新を計算する代わりに、2つの小さな行列の積に近似するため、更新計算が削減されるからです:
2. **元のモデルの重みを変更しない**: LoRAを使用すると、元のモデルの重みをそのままにしておき、**新しい小さな行列**(AとB)だけを更新できます。これは、モデルの元の知識が保持され、必要な部分だけを調整することができるため、便利です。 3. **効率的なタスク特化型ファインチューニング**: モデルを**新しいタスク**に適応させたい場合、モデルの残りの部分をそのままにしておき、**小さなLoRA行列**(AとB)だけをトレーニングすればよいです。これは、モデル全体を再トレーニングするよりも**はるかに効率的**です。 4. **ストレージ効率**: ファインチューニング後、各タスクのために**新しいモデル全体**を保存する代わりに、**LoRA行列**だけを保存すればよく、これはモデル全体に比べて非常に小さいです。これにより、多くのタスクにモデルを適応させる際に、過剰なストレージを使用せずに済みます。
ファインチューニング中にLinearの代わりにLoraLayersを実装するために、ここに提案されたコードがあります https://github.com/rasbt/LLMs-from-scratch/blob/main/appendix-E/01_main-chapter-code/appendix-E.ipynb: