|
翻訳者 |朱賢宗 校正者 | Chonglou 導入モデルマージとは、2つ以上のLLMを1つのモデルに統合する手法です。これは比較的新しい実験的なアプローチであり、少ない投資で(GPUを必要とせず)新しいモデルを作成できます。モデルマージは非常に優れた効果を発揮し、この手法に基づく最先端モデルが数多くOpen LLMリーダーボードに登場しています。 このチュートリアルでは、オープンソースのMergeKitライブラリを用いてモデルのマージを実装します。具体的には、4つのマージ手法を確認し、それぞれの設定例を示します。その後、MergeKitを用いて独自のモデル(Marcoro14-7B-slerp)を作成します。このモデルは、Open LLMリーダーボード(2023年2月1日時点)で最も優れたパフォーマンスを示したモデルの1つとなっています。 この記事で紹介したサンプルプロジェクトのソースコードは、GitHubとGoogle Colabで公開しています。また、 MergeKitをより簡単に実行するために、私が改良したLazyMergekit自動ノートブックプログラムを使用することをお勧めします。 マージアルゴリズムこのセクションでは、MergeKitに現在実装されている4つの手法に焦点を当てます。線形アルゴリズムやタスク演算アルゴリズムなど、他にもアルゴリズムが存在することに注意してください。モデルのマージに関する論文にご興味をお持ちの方は、Hugging Faceに掲載されているこのトピックに関する優れた論文集をぜひお読みください。 1. SLERPアルゴリズム球面線形補間(SLERP)は、2つのベクトル間を滑らかに補間する手法です。このアルゴリズムは、変化率を一定に保ち、ベクトルが存在する球面空間の幾何学的特性を維持します。 SLERPを従来の線形補間よりも優先する理由はいくつかあります。例えば、高次元空間では、線形補間によって補間ベクトルのサイズが縮小される(つまり、重みの割合が減少する)可能性があります。さらに、重みの方向の変化は、重みの大きさの変化よりも、より意味のある情報(特徴学習や表現など)を表すことが多いからです。 SLERP アルゴリズムの実装は、次の手順に基づいています。
以下は SLERP 構成の例です。 これは、両モデルの各層に適用された典型的なSLERP構成です。補間係数tの入力値の勾配に注目してください。自己焦点層とMLP層のパラメータには、それぞれOpenPipe/mistral-ft-optimized-1218とmlabonne/NeuralHermes-2.5-mistral-7Bの異なる組み合わせが使用されます。他の層では、2つのモデルを50/50の割合でブレンドして使用します。 この最終モデル mmabonne/NeuralPipe-7B-Serrp は、Hugging Face Hub で見つけることができます。 2. TIESアルゴリズムYadavらは論文において、複数のタスク固有のモデルを単一のマルチタスクモデルに効率的に統合することを目的としたTIES-Mergingアルゴリズムを紹介しました。このアプローチは、モデル統合における2つの主要な課題に対処します。
SLERP アルゴリズムとは異なり、TIES アルゴリズムでは複数のモデルを一度にマージできます。 TIES 構成の例を次に示します。 この設定では、Mistral-7Bモデルをベースモデルとして増分重みを計算します。同じ2つのモデル、mistral-ft-optimized-1218(50%)とNeuralHermes-2.5-mistral-7B(30%)をマージし、正規化します。ここで、密度パラメータは、各モデルのパラメータの50%のみを保持することを意味します(残りの半分はベースモデルから取得されます)。 上記の設定では、重みの合計が1と等しくありませんが、`normalize:true`パラメータによって内部的に自動的に正規化されます。この設定は、OpenHermes-2.5-neural-chat-7b-v-7bの作者によって提供されたパラメータに着想を得ています。 この最終モデル、 mmabonne/NeuralPipe-7B-ties は、 Hugging Face Hub で見つけることができます。 3. DAREアルゴリズム2023 年に Yu らによって導入されたDARE アルゴリズムは、 TIES に似た方法を使用しますが、主に 2 つの違いがあります。
MergeKit はこのメソッドを、シンボル選択ステップのある TIES (dare_ties) とシンボル選択ステップのない TIES (dare_linear) の 2 つのスタイルで実装します。 DARE 構成の例を次に示します。 この設定では、`dare_ties` を用いて3つの異なるMistral-7Bベースのモデルをマージしました。今回は、重みの合計が1になるように重みを選択しました(合計は0.9~1.1の範囲である必要があります)。密度パラメータ `density` は論文で提案されている値(<0.5)よりもわずかに高く設定していますが、一貫してより良い結果が得られているようです(https://github.com/cg123/mergekit/issues/26 のリンクの議論を参照)。 mlabonne/Daredevil-7BはHugging Face Hubでご覧いただけます。これは本論文における最良のマージモデルであり、Marcoro14-7Bのslerpを凌駕しています。 4. パススルーアルゴリズムパススルー法は従来のアプローチとは大きく異なります。異なるLLMのレイヤーを連結することで、非常に多くのパラメータを持つモデル(例えば、7Bパラメータのモデルを2つ組み合わせた9Bモデル)を作成できます。これらのモデルは、コミュニティでは「フランケンシュタイン・マージ」または「フランケンシュタイン・モデル」と呼ばれることがよくあります。 この技術は非常に実験的ですが、Llama 2 70Bモデル2台を用いたgoliath-120bモデルなど、印象的なモデルの作成に成功しています。最近発表されたSOLAR-10.7B-v1.0モデルでも同じアイデアが採用されており、論文ではこれを「深度拡大」と呼んでいます。 パススルー方式の構成例を以下に示します。 結果として得られるフランケンシュタインマージは、最初のモデルの32レイヤーすべてと、2番目のモデルの8レイヤーを追加します。これにより、合計40レイヤー、899億個のパラメータを持つフランケンシュタインマージが作成されます。この構成は、GML-Mistral-merged-v1にインスパイアされています。 Hugging Face Hub: mlabonne/NeuralPipe-9B-merged で見つけることができます。 独自のモデルをマージするこのセクションでは、MergeKit を使用してマージ構成を読み込み、実行し、生成されたモデルを Hugging Face Hub にアップロードします。 まず、以下に示すように、ソース コードから直接 MergeKit をインストールします。 以下のコードブロックでは、YAML形式のマージ設定を読み込みます。また、将来使用するためにマージモデルの名前も指定します。前のセクションから任意の設定をコピー&ペーストできます。 今回は、 Marcroni-7B-v3とMistral-7B-Merge-14-v0.1という2つの異なるモデルを使用し、SLRP方式でマージします。設定はYAMLファイルとして保存し、mergeコマンドの入力として使用します。 次のパラメータを使用してマージ コマンドを実行します。
このコマンドは、マージ構成にリストされているすべてのモデルの重みをダウンロードし、選択したマージ方法を実行します (約 10 分かかります)。 モデルはマージされ、「merge」ディレクトリに保存されました。アップロードする前に、再現性に必要なすべての情報を含んだreadmeファイルを作成できます。以下のコードブロックはJinjaテンプレートを定義し、マージ設定からのデータを自動的に入力します。 このモデルはHugging Face Hub(mlabonne/Marcoro14-7B-slerp)からダウンロードできます。別のラップトップでは、以下のコードを使って無料のT4 GPUでモデルをテストできます。 「大規模言語モデルとは何か?」という質問を投げかけたところ、次のような出力が得られました。 中国語での意味は次のようになります。「大規模言語モデルとは、大量のテキストデータで訓練された人工知能システムです。人間のような言語を理解・生成し、文や文書に出現する可能性のある次の単語や句を予測するように設計されています。これらのモデルは、高度なアルゴリズムとニューラルネットワークアーキテクチャを用いてデータから学習し、時間の経過とともにパフォーマンスを向上させます。よく知られている大規模言語モデルには、OpenAIのGPT-3やGoogleのBERTなどがあります。」
残念ながら、私たちのモデルをChatbot Arenaベンチマークプラットフォームに提出することはできませんでした。代わりに、Open LLMリーダーボードとNousSearchベンチマークを使用して評価することにしました。 私たちのモデルをOpen LLMリーダーボード(「ここから送信!」タブ)に提出しました。この記事の冒頭で述べたように、このモデルはリーダーボードで70億パラメータモデルの中で最高の評価を得ました。結果は以下の通りです。 画像は著者より提供されました。 オープンなLLMリーダーボードの問題は、これらのベンチマークが公開されていることです。つまり、より良い結果を得るために、誰でもテストデータでLLMを学習できるということです。最良のモデルをマージすることで、私たち自身の結果も「汚染」されてしまいます。Marcoro14-7B-slerpモデルも「汚染」され、マージに使用されたモデルの一部は既にテストセットで学習済みであったと想定しても間違いないでしょう。リーダーボードをハックするのではなく、最良のモデルを作成したい場合は、マージされていないモデルのみを使用して独自のマージを作成することをお勧めします。 そのため、OpenLLMのリーダーボードだけに頼るのではなく、 LLM AutoEvalツールを使ってNousSearchベンチマークスイートのスコアをシンプルなColabノートブックで自動計算することにしました。以下は、優れたOpenHermes-2.5-Mistral-7Bモデルと比較した結果です。 画像は著者より提供されました。 各ベンチマークにおいて、このモデルと比較して大幅な改善を達成しました。NousSearchベンチマークスイートは、Open LLMリーダーボードのARC Challenge、TruthfulQA、HellaSwag、Winograndeといったタスクを共有している点にご注意ください。私の知る限り、Bigbenchは唯一完全に異なるベンチマークです(そうでない場合はお気軽にご連絡ください)。ただし、今回の統合に使用したモデルの1つは、現在もBigbenchで学習可能です。 結論はこの記事では、4つの異なるアルゴリズムを用いたLLMのマージの概念を紹介します。SLERP、TIES、DARE、Passthroughの仕組みを詳しく説明し、それぞれの設定例を示します。最後に、MergeKitのSLERPアルゴリズムを適用してMarcoro14-7B-SLERPモデルを作成し、Hugging Face Hubにアップロードします。最終的に、Open LLM Leaderboard(7Bモデルの中で最高のパフォーマンス)とNousSearchという2つのベンチマークスイートで優れたパフォーマンスを達成しました。独自のマージを作成したい場合は、自動化ノートブックプログラムであるLazyMergekitの使用をお勧めします。 複数のモデルを組み合わせるもう一つのアプローチは、それらを単一のハイブリッドエキスパートシステム(MoE)アーキテクチャに統合することです。次の記事では、これをどのように実現し、 Mixtralのような独自のモデルを作成するかを詳しく説明します。最後に、この記事が気に入ったら、 MediumとTwitterで@mlabonneをフォローしてください。 翻訳者紹介Zhu Xianzong 氏は、51CTO コミュニティ エディター、51CTO 専門ブロガー兼講師、維坊の大学のコンピューター教師、そしてフリー プログラミング コミュニティのベテランです。 原題: mergekit による大規模言語モデルのマージ、著者: Maxime Labonne |
オープンソースのモデルマージツールである MergeKit を使用して、独自のカスタムモデルを開発します。
関連するおすすめ記事
-
100% オープンソース: Citus 11 はすべての Enterprise Edition 機能をオープンソース化
-
マイクロサービスは、Alibaba のオープンソース TTL を利用して、ID 情報のスレッド間再利用をエレガントに実現します。
-
Luna's Dark Side のオープンソース改良版である Muon オプティマイザーは、AdamW と比較して計算要件を 48% 削減し、DeepSeek にも適用できます。
-
手頃な価格で使いやすい!オープンソースの自動セキュリティテストツール11選をご紹介
-
初心者に優しいオープンソースコミュニティを運営するための3つのステップ
-
クローズドソースとオープンソースのハードウェアドライバ:なぜ重要なのか