ファウンデーション・モデルのチューニング用パラメーター
チューニングパラメータは、 基盤モデルチューニングに使用するチューニング実験を設定します。
いくつかのチューニング・パラメーターは、すべてのチューニング方法に共通する。 その他のパラメーターは、使用するチューニング方法によって異なる。
watsonx.ai、 基盤モデルチューニングに使用できるパラメータについては、以下のセクションで説明します:
共通チューニング・パラメーター
次の表は、すべてのチューニング方式でカスタマイズできるチューニング・パラメーターについて説明したものです。
| パラメーター名 | 説明 | 値のオプション | 詳細情報 |
|---|---|---|---|
| バッチ・サイズ | 一度に処理するラベル付き例の数。 | 1-16 | トレーニング・データのセグメント化 |
| ステップの累積 | 調整を行う前に処理するバッチ数。 | 1-128 | トレーニング・データのセグメント化 |
| 学習レート | モデルの調整時に行う変更の範囲を決定する。 | 0.00001–0.5 | 学習率の管理 |
| エポック数(学習サイクル数) | トレーニングデータを循環させる回数。 | 1-50 | 完了するトレーニングサイクルの回数を決める |
微調整法のパラメータ
追加パラメータは、以下の微調整方法のための調整実験を制御するために使用される:
低ランク適応微調整パラメータ
一般的なチューニングパラメータに加えて、以下の表では、特に低ランクアダプテーション( LoRA )と量子化低ランクアダプテーション( QLoRA )の微調整に関連するチューニングパラメータについて説明します。
| パラメーター名 | ノート |
|---|---|
| アルファ | ベースモデルのウェイトに追加される前に、アダプターのウェイト変更に適用される乗数。 この設定は、アダプターのウェイトの影響度をコントロールする。 アルファ値をランク値で割って、適用するウエイト変更の割合を算出する。 |
| ドロップアウト | 学習データへのオーバーフィッティングを防ぐために、アダプターの重みをランダムにゼロにリセットする割合。 |
| ランク | 調整するモデルパラメータ重みのサブセットを選択する計算で使用する数値。 |
| ターゲット・モジュール | 適応の対象とするベース・ 基盤モデル モデルのレイヤーを指定する。 |
これらのパラメーターの詳細と使用方法については、 低ランク適応の設定 ( LoRA または QLoRA ファインチューニングのみ) を参照。
LoRA ファイン・チューニング用パラメータ値の設定
LoRA ファイン・チューニング実験に使用する最適なハイパーパラメータ値は、データ、使用する基盤モデル、モデルに実行させたいタスクのタイプによって異なります。
次の表は、有用な開始パラメータ値を示しています。 実験を通じて何が最も効果的かを学びながら、パラメータ値を調整することができます。
| パラメーター名 | granite-3-1-8b-base | llama-3-1-8b | llama-3-1-70b | llama-3-1-70b-gptq |
|---|---|---|---|---|
| アルファ | 32 | 64百万 | 32 | 32 |
| ステップの累積 | 1 | 1 | 1 | 1 |
| バッチ・サイズ | 5 | 8 | 5 | 5 |
| ドロップアウト | 0.05 | 0.05 | 0.05 | 0.05 |
| 学習レート | 0.00001 | 0.00001 | 0.00001 | 0.00001 |
| エポック数(学習サイクル数) | 10 | 5 | 10 | 10 |
| GPU数 | 4 | 4 | 4 | 4 |
| ランク | 8 | 32 | 8 | 8 |
| ターゲット・モジュール | ["all-linear"] |
[] すべての層を意味する |
[] すべての層を意味する |
[] すべての層を意味する |
これらのパラメーターの詳細については、 低ランク適応の設定 ( QLoRA または LoRA ファイン・チューニングのみ) を参照のこと。
パラメーターの説明
トレーニング・データのセグメント化
エクスペリメントが実行されると、まずトレーニング・データがより小さいバッチに分割され、一度に 1 つのバッチでトレーニングされます。 各バッチは、処理される GPU メモリーに収まる必要があります。 必要な GPU メモリーの量を削減するために、チューニング・エクスペリメントを構成して、複数のバッチが処理されるまで調整を延期することができます。 チューニングはバッチで実行され、そのパフォーマンスメトリクスが計算されるが、調整はすぐには行われない。 代わりに、累積パフォーマンス・メトリックが評価される前に、いくつかのバッチにわたってパフォーマンス情報が収集されます。
以下のパラメーターを使用して、トレーニング・データのセグメント化方法を制御します。
バッチ・サイズ 一度に処理するラベル付きの例 ( サンプルとも呼ばれる) の数。
例えば、1,000 個の例と 10 個のバッチ・サイズを持つデータ・セットの場合、データ・セットはそれぞれ 10 個の例からなる 100 個のバッチに分割されます。
トレーニング・データ・セットが小さい場合は、小さいバッチ・サイズを指定して、各バッチに十分な例が含まれるようにします。
累積ステップ: 調整を行う前に処理するバッチ数。
例えば、データセットが100バッチに分割され、累積ステップ値を10に設定した場合、調整は100回ではなく10回行われる。
完了するトレーニングサイクルの回数を決める
epochsパラメータは、トレーニングデータセット全体を何回繰り返すかを指定します。
例えば、バッチサイズが10で、データセットが1,000例の場合、1回のエポックで100バッチを処理し、100回の調整を行わなければならない。 エポックの数を 20 に設定すると、モデルはデータ・セットを 20 回通過します。つまり、チューニング・プロセス中に合計 2,000 個のバッチが処理されます。
エポックの数が多くなり、トレーニング・データが大きくなるほど、モデルのチューニングにかかる時間が長くなります。 エポック数を低く設定しすぎると、モデルが十分に学習できない可能性があります。 エポック数を多く設定しすぎると、データセットにモデルを過剰適合させてしまう可能性があります。 過剰適合とは、モデルが訓練データにあまりにも密接に調整されているため、新しいデータが導入された際に、学習した内容を一般化して適用することができない現象を指す用語です。
学習率の管理
学習率パラメータは、モデルが調整されるときに行う変更の範囲を決定します。 数字が大きいほど、変化も大きい。 学習率を低く設定しすぎると、提示された新しいデータからモデルが十分に学習できなくなる可能性があります。 学習率を高く設定しすぎると、モデルが新しい未確認データに学習した内容を適用できるようになるまで、徐々に学習することができなくなる可能性があります。
このパラメータは、控えめな値を設定し、カスタマイズするデータセットと基盤モデルに最適なハイパーパラメータを見つけるために実験しながら徐々に変更していくのが望ましいでしょう。
トークン制限の設定
チューニング実験中に、モデルの入力と出力で許可されるトークンの数を変更するには、max_seq_lengthパラメータを設定します。 最大シーケンス長は、最大入力トークン数と各プロンプトで許可される出力トークン数の合計です。
許容される入力および出力トークンの数が多ければ多いほど、モデルのチューニングに時間がかかります。 このパラメータは、使用可能な最小の数値に設定しますが、それでもなお、お客様の使用事例を適切に表現できる数値にしてください。
チューニングで使用する予定の制限値に適合する入力および出力の例をトレーニングデータに作成します。 指定された最大シーケンス長を超える例は、実験中に切り捨てられます。 例えば、このパラメータを200に設定し、トレーニングデータに1,000トークンを持つ入力例がある場合、入力例の最初の200トークンだけが使用されます。
シーケンスの長さには、各プロンプトに対する出力トークンも含まれます。つまり、この設定は、チューニング実験中にモデルが出力として生成できるトークンの数を制御します。
バーバライザーの編集
バーバライザーは、チューニング実験中にトレーニングサンプルが基盤モデルモデルに提出されるときに、どのようにフォーマットされるかを定義するテンプレートのようなものです。
バーバライザーのフォーマットは、ベースモデルによって変わる可能性がある。 より説明的な前置詞のテキストが、より良い答えを生成するために基盤モデル導くことができるのであれば、バーバライザーをカスタマイズした方がよいでしょう。 ただし、バーバライザーを編集する場合は、以下のガイドラインに従ってください:
カスタム形式が基盤モデル出力を向上させることを検証するために、プロンプト・エンジニアリング後にのみ、バーバライザーを変更してください。
{{input}}変数を編集しないでください。この変数は、トレーニングデータファイルの例の
inputセグメントからテキストを抽出するよう、チューニング実験に指示します。基盤モデルチューニングに使用する動詞化子を変更した場合、後でチューニングしたモデルを推論するときに同じ接頭辞を使用します。
ローランクアダプテーションの設定 ( LoRA または QLoRA ファインチューニングのみ)
LoRA と QLoRA のファイン・チューニング実験に限り、以下の調整実験パラメーターを調整できる:
alpha:アダプターのウェイトがベースモデルのウェイトに追加されるときに、その変更に適用される乗数を決定します。 アルファ値をランク値で割って、適用するウエイト変更の割合を算出する。 例えば、アルファが2でランクが8の場合、アダプターの重みはモデルの重みに加えられる前に1/4または25%減らされる。 その結果得られる値は、追加されるウェイトのインパクトの大きさをコントロールする。 この設定は学習率と似たような機能を持つので、実験中はどちらか一方の設定だけを調整するとよいだろう。dropout: LoRA アダプタのパラメータの重みをランダムにゼロにリセットする。 リセットするウェイトのパーセンテージを示す小数値を指定する。例えば10%なら 0.1。 ドロップアウトは、モデルが特定の訓練データセットに反応するように学習するが、新しい入力に期待通りに反応するように学習を汎化できない場合に発生するオーバーフィッティングを防ぐのに役立つ。rank:基本モデルの行列に対して行列分解計算を行う際に使用するランク。 数値が低いほど、アダプターで調整するトレーニング可能なパラメーターが少なくなるため、 ジョブ速くなる。 数値が低いと、元のモデルのパラメータ重みへの忠実度が低くなる可能性もある。 基盤モデル学習させたいタスクが、ベースとなる基盤モデルすでにこなせるタスクとは相反するものであったり、まったく新しいものであったりする場合は、より大きな数値を使用します。 最大許容値は256。target_modules:チューニング中にローランクアダプターを追加したいベース・ 基盤モデル モデルのレイヤー。 オプションには次のものが含まれます。["all-linear"]:出力層を除くすべての線形および1次元畳み込みニューラルネットワーク層を選択する。 このオプションは、すべてのデコーダのみのモデルで動作します。[](空の配列):モデルアーキテクチャに指定されたデフォルトにアダプタを追加します。["$layer-name", "$layer-name"]:レイヤーのサブセットを一覧表示します。 レイヤー名はモデル・アーキテクチャによって異なる。 基盤モデル アーキテクチャのモデル層 。
type:以下のいずれかのオプションを指定する:lora:低ランク適応のファイン・チューニング実験を行う。 このタイプは、量子化されていない基盤モデルモデルにのみ適用でき、インストラクション・チューニングされていない基盤モデルモデルに最適です。qlora:量子化低ランク適応のファイン・チューニング実験を行う。 このタイプは、量子化された基盤モデルモデルにのみ適用できる。none:完全なファイン・チューニング実験を行う。 NONE はデフォルト値です。
| 基盤モデル アーキテクチャ | 層 | デフォルトで対象となるレイヤー |
|---|---|---|
| リャマ | [down_proj, up_proj, gate_proj, q_proj, k_proj, v_proj, o_proj] |
["q_proj", "v_proj"] |
| Granite | [down_proj, up_proj, gate_proj, q_proj, k_proj, v_proj, o_proj] |
["all-linear"] |