← Flecto

LlamaFactory: 100種類以上の言語モデルに対する、統合された効率的なファインチューニング

最先端の効率的な学習方法を統合した、統一的なフレームワーク。これにより、コーディングなしで、100種類以上のLLM(大規模言語モデル)のファインチューニングを柔軟にカスタマイズできます。

Yaowei Zheng、Richong Zhang、Junhao Zhang、Yanhan Ye、Zheyan Luo、Zhangchi Feng、Yongqiang Ma — Beihang University & Peking University

25K+ GitHub Stars 100+ LLMs 3K+ Forks Apache 2.0

概要

大規模言語モデル(LLM)を、様々な下流タスクに適応させるためには、効率的なファインチューニングが不可欠です。しかし、これらの手法を異なるモデルに適用するには、かなりの労力が必要です。LlamaFactoryは、最先端の効率的なトレーニング手法を統合した、統一的なフレームワークです。このフレームワークは、組み込みのWeb UIであるLlamaBoardを通じて、コーディングなしで100種類以上のLLMのファインチューニングを柔軟にカスタマイズするためのソリューションを提供します。このフレームワークは、言語モデリングおよびテキスト生成タスクにおいて、実験的に検証されており、25,000以上のGitHubスター3,000以上のフォークを獲得しています。

はじめに

大規模言語モデル(LLMs)は、驚くべき推論能力を示し、質問応答、機械翻訳、情報抽出など、幅広いアプリケーションを支えています。Hugging FaceのオープンLLMランキングには5,000以上のモデルが登録されており、このエコシステムは急速に成長しています。しかし、これらのモデルを特定のタスクに適用することは、大きな課題を伴います。

LLM ファインチューニングにおける主要な課題

  • リソースの制約: 制限されたGPUメモリで数十億のパラメータをファインチューニングすることは、多くの研究者にとって主要なボトルネックとなっています。
  • 実装の複雑さ: 各効率的なファインチューニング手法は、異なるモデルアーキテクチャごとにカスタム実装が必要です。
  • 断片化されたエコシステム:既存のフレームワークは、利用可能なメソッドやモデルのほんの一部しかカバーしておらず、統一されたソリューションが不足しています。

これらの問題に対処するため、LlamaFactory は、特定のモデルやデータセットへの依存性を最小限に抑える、3つの主要モジュール(Model Loader、Data Worker、Trainer)を備えたモジュール式のフレームワークを提供します。これにより、事前学習、教師ありファインチューニング (SFT)、RLHF、および DPO を含む、数百のモデルやトレーニング手法への柔軟な拡張が可能になります。

ファインチューニングとは何か?そして、なぜそれが重要なのか?

ファインチューニングとは、あらかじめ学習済みの言語モデル(例えば、GPTやLlamaなど)を取り、特定のデータセットでさらに学習させることで、特定のタスクにおける性能を向上させるプロセスです。

これは、幅広い教育を受けた大学卒業生を採用し、その後、特定の職務に必要な実践的なトレーニングを行うことに似ています。“事前学習”は、一般的な知識を身につけさせ、“ファインチューニング”は、特定の分野の専門家へと成長させるものです。

  • SFT (Supervised Fine-Tuning): 提供する入力と出力のペアの例を使ってモデルを学習させます。
  • RLHF (Reinforcement Learning from Human Feedback): 人間のフィードバックを用いて、モデルがより良い応答をするように誘導します。
  • DPO (Direct Preference Optimization): RLHFのよりシンプルな代替手法であり、直接的に嗜好データから最適化を行います。

既存のフレームワークとの機能比較

LlamaFactoryは、最適化手法、計算効率化技術、および学習パラダイムにおいて、包括的なサポートを提供することで際立っており、その範囲は、他のどの競合フレームワークも匹敵しません。

Table 1: Feature comparison of LLM fine-tuning frameworks
表1: LlamaFactoryと、FastChat、LitGPT、LMFlow、およびOpen-Instructとの機能比較。最適化手法、計算技術、およびトレーニングパラダイムについて。

効率的なファインチューニング技術.

LlamaFactoryの効率的なファインチューニング技術は、大きく2つのカテゴリに分けられます。効率的な最適化(どのパラメータを更新する必要があるかを削減する)と、効率的な計算(各計算ステップのコストを削減する)です。これらを組み合わせることで、メモリ使用量をパラメータあたり18バイトからわずか0.6バイトまで削減できます。

効率的な最適化手法.

  • Freeze-tuning: ほとんどのパラメータを固定し、デコーダ層の小さなサブセットのみを微調整します。
  • LoRA: 低ランク適応 (Low-rank adaptation) — 学習可能な低ランク行列を、固定された重みに追加します。
  • LoRAとそのバリエーションの理解

    LoRA (Low-Rank Adaptation) は、最も人気のある効率的なファインチューニング手法の一つです。モデル内の数十億ものパラメータをすべて更新するのではなく、LoRAでは、元の重みを固定し、小さく、学習可能な「アダプター」行列を追加します。

    巨大な図書館(モデル)があると想像してください。すべての本を書き換える代わりに、特定のページがどのように読み込まれるかを変更する、小さな付箋(アダプター)を追加します。これははるかに安価で高速です。

    • QLoRA: LoRAと4ビット量子化を組み合わせることで、「図書館」を圧縮し、より少ないスペースで保存しながら、付箋を使用できるようにします。
    • DoRA: 重みを大きさ(magnitude)と方向(direction)に分解することで、より安定した学習を実現します。
    • LoRA+: 異なるアダプター行列に対して異なる学習速度を使用することで、より高速な収束を可能にします。
    • PiSSA: 数学(SVD)を使用して、アダプターの初期化における最適な開始点を特定します。

    これらのバリエーションはすべて、共通の考え方を持っています。パラメータのすべてではなく、少数のパラメータを学習させることで、GPUメモリの使用量を数十GBからわずか数GBに削減します。

  • QLoRA: 4ビット量子化モデルに対するLoRAの適用により、極めて少ないメモリで動作させることができます。
  • DoRA: 重み分解されたLoRAによる、トレーニングの安定性向上。
  • LoRA+: AとBの行列に対して異なる学習率を適用することで、より高速な収束を実現します。
  • PiSSA: 主成分を取り込み、より良い初期状態を得るためにアダプターを初期化します。
  • GaLore: 勾配ベースの低ランク射影法による、メモリ使用量を削減した全パラメータ学習。
  • GaLore は、Gradient Low-Rank Projection の略です。LoRA は小さなアダプターを追加しますが、GaLore は異なるアプローチを取ります。GaLore は、モデルがどのように更新されるかを指示する信号である勾配を、より低次元の空間に投影します。これにより、すべてのパラメータを学習しながら、はるかに少ないメモリを使用できます。つまり、すべてのパラメータを更新しますが、勾配の計算は圧縮されます。

  • BAdam: Adamを用いたブロック座標最適化法。トレーニングパラメータを順番に更新します。

効率的な計算方法

  • 混合精度: fp16/bf16で学習を行うことで、メモリ使用量を半分に抑えながら、わずかな品質低下で済ませることができます。
  • アクティベーション・チェックポイント: 逆伝播時にアクティベーションを再計算することで、計算リソースをメモリに置き換えます。
  • Flash Attention: I/Oを意識したアテンション計算であり、高速かつメモリ効率が良い。
  • Flash Attention の解説

    アテンション機構は、Transformer モデルの中核をなすものですが、非常に多くのメモリを消費します。メモリの使用量は、シーケンス長に対して二乗で増加します。Flash Attention は、計算の構成を「I/O 認識型」に再構成することで、GPU の計算コアと GPU メモリ間の高価な読み書きを最小限に抑えます。

    その結果、2〜4 倍高速で、大幅に少ないメモリを使用し、かつ数学的に同等の結果が得られます。これは、不要なファイルキャビネットへのアクセスを避けるために、ワークフローを再構成するようなものです。

  • S2 注意: 長いコンテキスト長を処理するためのシフト付きスパースアテンション。
  • Unsloth: 加速LoRAトレーニングのためのカスタムCUDAカーネル。
  • 量子化: bitsandbytes, GPTQ, AWQ、または AQLM を使用した 4 ビット/8 ビット量子化により、モデルを圧縮できます。
Table 2: Compatibility between fine-tuning techniques
表2: LlamaFactoryにおいて、どのファインチューニング手法を組み合わせて使用できるかを示す互換性マトリックス。

フレームワークのアーキテクチャ

LlamaFactoryは、主に以下の3つのモジュールで構成されています。Model Loader(LLMとVLMの両方のモデルアーキテクチャを処理します)、Data Worker(シングルターンおよびマルチターンの対話に対応した統合パイプラインを通じてデータを処理します)、そしてTrainer(事前学習、SFT、RLHF、およびDPOにわたって効率的なファインチューニング技術を適用します)。さらに、コードを書かずにファインチューニングを実行できるWeb UIであるLlamaBoardが上に配置されています。

Figure 1: Architecture of LlamaFactory
`図1: LlamaFactoryのアーキテクチャを示しており、主要な3つのモジュールとLlamaBoardインターフェースが描かれています。`

モデルローダー

様々なアーキテクチャに対応し、モデルの初期化、パッチ適用、量子化、アダプターの接続、および精度調整を処理します。

  • `モデルの初期化: TransformersのAutoクラスを使用して、事前学習済みのモデル(AutoModelForCausalLM、AutoModelForVision2Seq)をロードします。`
  • モデルのパッチ適用: S2 アテンションに対するモンキーパッチ; Transformers 4.34.0 以降、ネイティブの Flash Attention をサポート。
  • モデル量子化: bitsandbytes、GPTQ、AWQ、AQLMによる動的な4/8ビット量子化。
  • アダプターの接続: PEFTライブラリを通じて、LoRA、rsLoRA、DoRA、PiSSAのレイヤーを自動的に識別します。
  • 精密な適応: GPUの計算能力に基づいて、自動的にfp16/bf16を選択します。

データワーカー

異なる形式のデータセットを、柔軟な微調整を可能にする統一された構造に標準化します。

  • `データセットの読み込み: Hugging Face Hubまたはローカルファイルから、Datasetsライブラリを使用して読み込みます。Arrowによる効率的なメモリ使用が可能です。`
  • データセットのアライメント: データ記述仕様は、多様な形式(Alpaca, ShareGPT, プレーンテキスト、好みのデータなど)を、標準化された構造に変換します。
  • データ記述仕様」は、LlamaFactoryがLLM(大規模言語モデル)のエコシステムにおける「データ形式の混乱」に対処するための方法です。異なるデータセットが異なるJSON構造を使用します(Alpacaはinstruction/input/outputを使用し、ShareGPTはconversations配列を使用します)。各形式に特化したカスタムローダーを作成する代わりに、小さな設定ファイルを作成し、LlamaFactoryにデータセットのフィールドをどのように標準化された形式にマッピングするかを指示します。これにより、異なるソースからのデータセットを、単一のトレーニング実行で組み合わせて使用​​できます。

  • データセットのマージ: ストリーミングではないデータセットの場合は連結を使用し、ストリーミングモードの場合はインターリーブ読み込みを使用します。
  • 前処理: モデルの種類ごとに自動的にチャットテンプレートを選択します。オプションで、より高速なトレーニングのためにシーケンスを結合することも可能です。

トレーナー

最先端のトレーニング手法と、分散トレーニングのサポートを統合しています。

  • 効率的な学習: LoRA+, GaLore, BAdam を、デフォルトの最適化コンポーネントの代替として、そのまま利用できるように統合しました。
  • モデル共有によるRLHF: アダプター分離によって、アクターモデルとクリティックモデル間で重みを共有することで、単一のGPUで完全なRLHFトレーニングを可能にします。
  • モデル共有によるRLHF:賢いリソース活用術

    通常のRLHF(強化学習による人間からのフィードバック)の学習には、4つの異なるモデルが同時に動作する必要があります。具体的には、ポリシーモデル、参照モデル、報酬モデル、そしてバリューモデルです。これにより、RLHFは非常に多くのGPUリソースを消費し、通常は複数の高性能GPUが必要となります。

    LlamaFactoryのモデル共有RLHFは、この問題を、単一の基本モデルと複数の軽量アダプターを使用することで解決します。

    • まず、報酬スコアリングのために1つのアダプターとバリューヘッドを学習させます。
    • 次に、ポリシー(改善対象のモデル)のための2番目のアダプターを初期化します。
    • 両方のアダプターは、同じ凍結された基本モデルを共有します。

    これにより、RLHFは「クラスタが必要」から「単一の一般的なGPUで動作する」へと変化し、これはアライメント学習をより身近にするための大きな一歩となります。

  • 分散学習: DeepSpeed ZeROのStage 1~3を利用したデータ並列によるマルチGPUトレーニング; パーティショニングとオフロードによるメモリ削減。

サポートされているデータ形式:

LlamaFactoryは、Data Workerパイプラインを通じて、以下の5種類のデータセット構造をサポートしています。プレーンテキスト、Alpacaに似たデータ、ShareGPTに似たデータ、評価データ、そして、これら全てを統合する標準化されたフォーマットです。この柔軟性により、ユーザーはあらゆる一般的な形式で独自のデータを持ち込むことができます。

Table 3: Dataset structures in LlamaFactory
表3: LlamaFactoryがサポートするデータセット構造。各タイプについて、JSON形式のサンプルを示します。

LlamaBoard: コード不要のファインチューニングインターフェース

LlamaBoardは、GradioをベースにしたWebインターフェースであり、ユーザーはコードを一切書かずに、LLM(大規模言語モデル)のファインチューニングをカスタマイズできます。設定から評価まで、シームレスな体験を提供します。

簡単な設定

ウェブインターフェースを通じて、ほとんどのパラメータに対して適切なデフォルト値が設定された状態で、ファインチューニングの引数をカスタマイズできます。トレーニング前に、データセットをUI上で直接プレビューして検証することができます。

監視可能なトレーニング

トレーニングログと損失曲線は、リアルタイムで可視化および更新され、ユーザーはトレーニングの進捗状況を監視し、ファインチューニングのプロセスに関する洞察を得ることができます。

柔軟な評価

テキストの類似度スコア(BLEU-4、ROUGE)を自動的に計算することも、ファインチューニングされたモデルと直接チャットすることで、人間による評価を行うことも可能です。

多言語サポート

英語、ロシア語、中国語に対応したインターフェースのローカライゼーションにより、より幅広いユーザーがLlamaBoardを利用して、ファインチューニングのワークフローを行うことができるようになりました。

トレーニング効率の結果

トレーニング効率は、PubMedデータセット(3600万件以上の生物医学記録)を用いて、Gemma-2BLlama2-7B、およびLlama2-13Bモデルで評価しました。比較された手法には、フルファインチューニング、GaLore、LoRA、およびQLoRAが含まれており、ピークメモリ使用量、トレーニングのスループット(トークン/秒)、およびパープレキシティ(PPL)を測定しました。

5.21 GB QLoRAによるGemma-2Bのメモリ使用量(フルファインチューニングの場合17.06 GB)。
5,608 Gemma-2B の LoRA スループット(トークン/秒)。
12.61 GB QLoRAによるLlama2-13Bのメモリ使用量(フルファインチューニングは不可能)。
Table 4: Training efficiency comparison
表4: Gemma-2B、Llama2-7B、およびLlama2-13Bにおける学習効率の比較。学習可能なパラメータ数、メモリ使用量、スループット、およびパープレキシティを示します。

QLoRAは、事前学習済みの重みが低い精度で保存されるため、常に最も低いメモリ使用量を実現します。LoRAは、ほとんどの場合で最高の処理速度を提供します。注目すべき点として、Llama2-13Bのフルファインチューニングを行うと、単一のA100 40GB GPUでメモリ不足が発生しますが、QLoRAではわずか12.61GBで処理できます。

効率の結果の読み方

Perplexity (PPL) は、モデルが次の単語をどれだけ正確に予測できるかを測る指標であり、値が小さいほど良いことを示します。PPLが10の場合、モデルは各ステップで、10個の同程度の確率の単語の中から選択する必要があるのと同程度の混乱を抱えていることを意味します。

重要な点: QLoRAは、Gemma-2Bの場合、わずか5.21GBを使用します(フルファインチューニングの場合は17.06GB)。これは3.3倍のメモリ削減です。しかし、Perplexityの差はわずか(10.46 vs 10.34)であり、品質の低下はごくわずかです。Llama2-13Bの場合、単一のA100 GPUではフルファインチューニングは単純に不可能ですが、QLoRAはわずか12.61GBでそれを実現できます。

下流タスクのパフォーマンス

性能は、以下の3つのテキスト生成タスクで評価されました。CNN/DailyMail および XSum(英語の要約)、および AdGen(中国語の広告生成)。8つのInstruction-tunedモデルを、フルファインチューニング、GaLore、LoRA、およびQLoRAを用いてテストし、平均ROUGE-1、ROUGE-2、およびROUGE-Lスコアを測定しました。

Table 5: ROUGE scores on downstream tasks
表5: CNN/DailyMail、XSum、およびAdGenタスクにおける、異なるモデルとファインチューニング手法によるROUGEスコアの比較。

重要な発見として、LoRAとQLoRAは、ほとんどの場合において最高のパフォーマンスを発揮することが示されており、多くの場合、フルファインチューニングと同等またはそれ以上の性能を発揮します。これは、効率的な手法が品質を犠牲にしないことを示しており、むしろ正則化効果によって品質を向上させることができ、かつメモリ使用量をわずかなものに抑えることができることを意味します。

ROUGE スコア は、生成された要約と参照要約間のテキストの重複を測定します。ROUGE-1 は、一致する単語の数をカウントし、ROUGE-2 は、一致する単語ペアの数をカウントし、ROUGE-L は、最長の共通部分列を見つけます。重要な点は、LoRA と QLoRA は、多くの場合、完全なファインチューニングよりも優れた性能を発揮するということです。これは、パラメータの制約が、過学習を防ぐための正則化の一種として機能するためであると考えられます。

結論と今後の展望

LlamaFactoryは、統一されたモジュール式フレームワークが、LLM(大規模言語モデル)のファインチューニングをより身近なものにできることを示しています。モデル、データセット、およびトレーニング方法間の依存関係を最小限に抑えることで、多様な効率的な手法を用いた100種類以上のLLMのファインチューニングを可能にします。さらに、LlamaBoardは、コーディング不要のWebインターフェースを提供することで、設定、トレーニング、および評価のプロセスを簡素化します。

今後のロードマップ

  1. マルチモーダルファインチューニング: テキストと画像に加えて、音声と動画のモダリティへの対応を拡張します。
  2. 高度な並列化: シーケンス並列化とテンソル並列化を統合し、さらに大規模な学習を実現します。
  3. 対話型ファインチューニング: 自己対戦やその他の高度な手法を用いた、対話モデルの品質向上に関する研究。

より広範な影響と責任ある利用について

LlamaFactoryは、大規模言語モデル(LLM)の実践者からなる大きなコミュニティを引きつけ、オープンソースの発展に大きく貢献しています。Hugging Faceの「Awesome Transformers」リストに掲載されており、効率的なファインチューニングフレームワークの代表的なものとして知られています。著者は、このフレームワークを基に開発を行う際には、責任ある利用とモデルのライセンス遵守を重視しています。

サポートされているモデル:

サポートされている50種類以上のモデルファミリーを表示します。
Table 6: Full list of supported models
表6:サポートされているモデルの完全リスト(Llama、Gemma、Qwen、Mistral、Phi、DeepSeekなど多数)。

参考文献

参考文献(17件の主要な引用文献)を表示します。
  1. Abdin et al. (2024). Phi-3 Technical Report.
  2. Abid et al. (2019). Gradio: Hassle-Free Sharing and Testing of ML Models in the Wild.
  3. AI@Meta (2024). Llama 3.
  4. Bai et al. (2023). Qwen Technical Report.
  5. Canese & Weis (2013). PubMed: The Bibliographic Database.
  6. Chen et al. (2016). Training Deep Nets with Sublinear Memory Cost.
  7. Dao et al. (2022). FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness.
  8. Dettmers et al. (2022). LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale.
  9. Dettmers et al. (2023). QLoRA: Efficient Finetuning of Quantized Language Models.
  10. Hu et al. (2022). LoRA: Low-Rank Adaptation of Large Language Models.
  11. Luo et al. (2024). BAdam: A Memory Efficient Full Parameter Training Method for Large Language Models.
  12. Meng et al. (2024). PiSSA: Principal Singular Values and Singular Vectors Adaptation.
  13. Rasley et al. (2020). DeepSpeed: System Optimizations Enable Training Deep Learning Models.
  14. Touvron et al. (2023). LLaMA: Open and Efficient Foundation Language Models.
  15. Wolf et al. (2020). Transformers: State-of-the-Art Natural Language Processing.
  16. Zhao et al. (2024). GaLore: Memory-Efficient LLM Training by Gradient Low-Rank Projection.
  17. Zheng et al. (2023). Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena.

B2B Content

あらゆるコンテンツを、御社向けに美麗に制作します

PDF・動画・Webページ等のあらゆる素材から、プロダクション品質のコンテンツを制作します。リッチHTML・カスタムスライド・アニメーション動画。

サービス詳細を見る お問い合わせ