Neptune ML でのモデルのハイパーパラメータ設定のカスタマイズ - Amazon Neptune

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Neptune ML でのモデルのハイパーパラメータ設定のカスタマイズ

Neptune ML モデルトレーニングジョブを開始すると、Neptune ML は先行するデータ処理ジョブから推測された情報を自動的に使用します。この情報を使用して、ハイパーパラメータ設定範囲を生成し、これは SageMaker のハイパーパラメータ調整ジョブタスクのために複数のモデルをトレーニングするために使用されます。そうすれば、トレーニングの対象となるモデルのハイパーパラメータ値の長いリストを指定する必要はありません。代わりに、モデルのハイパーパラメータの範囲とデフォルトは、タスクタイプ、グラフタイプ、およびチューニングジョブ設定に基づいて選択されます。

ただし、データ処理ジョブが生成する JSON 設定ファイルを変更して、デフォルトのハイパーパラメータ設定を上書きし、カスタムハイパーパラメータを指定することもできます。

Neptune MLを使う modelTraining API では、maxHPONumberOfTrainingJobsmaxHPOParallelTrainingJobs および trainingInstanceType のようなハイレベルハイパーパラメータチューニングジョブ設定をいくつか制御できます。モデルのハイパーパラメータをよりきめ細かく制御するには、データ処理ジョブが生成する model-HPO-configuration.json ファイルをカスタマイズします。ファイルは、処理ジョブの出力用に指定した Amazon S3 の場所に保存されます。

ファイルをダウンロードし、デフォルトのハイパーパラメータ設定を上書きするように編集し、同じ Amazon S3 の場所にアップロードし直すことができます。ファイルの名前を変更しないでください。編集の際は、次の手順に従うよう注意してください。

Amazon S3 からファイルをダウンロードするには:

aws s3 cp \ s3://(bucket name)/(path to output folder)/model-HPO-configuration.json \ ./

編集が終わったら、ファイルを元の場所にアップロードし直します。

aws s3 cp \ model-HPO-configuration.json \ s3://(bucket name)/(path to output folder)/model-HPO-configuration.json

model-HPO-configuration.json ファイルの構造

model-HPO-configuration.json ファイルは、学習するモデル、機械学習 task_type およびモデルトレーニングのさまざまな実行に対して変更または固定する必要のあるハイパーパラメータを指定します。

ハイパーパラメータは、ハイパーパラメータチューニングジョブが呼び出されたときにハイパーパラメータに与えられる優先順位を示すさまざまな階層に属するものとして分類されます。

  • Tier-1 ハイパーパラメータの優先順位は最優先されます。maxHPONumberOfTrainingJobs を10 未満の値に設定すると、Tier-1 ハイパーパラメータのみが調整され、残りはデフォルト値になります。

  • Tier-2 ハイパーパラメータの優先順位は低いため、チューニングジョブの合計トレーニングジョブが 10 以上あっても 50 未満の場合は、Tier-1 と Tier-2 の両方のハイパーパラメータが調整されます。

  • Tier 3 のハイパーパラメータは、合計 50 を超えるトレーニングジョブがある場合にのみ、Tier-1 および Tier-2 とともに調整されます。

  • ハイパーパラメータを特定の層に配置し、その範囲を編集し、そのデフォルト値が適切に設定されていることを確認して、ハイパーパラメータの優先順位を変更します。

model-HPO-configuration.json ファイルの例

次に、model-HPO-configuration.json ファイルの例を示します。

{ "models": [ { "model": "rgcn", "task_type": "node_class", "eval_metric": { "metric": "acc" }, "eval_frequency": { "type": "evaluate_every_epoch", "value": 1 }, "1-tier-param": [ { "param": "num-hidden", "range": [16, 128], "type": "int", "inc_strategy": "power2" }, { "param": "num-epochs", "range": [3,30], "inc_strategy": "linear", "inc_val": 1, "type": "int", "node_strategy": "perM" }, { "param": "lr", "range": [0.001,0.01], "type": "float", "inc_strategy": "log" } ], "2-tier-param": [ { "param": "dropout", "range": [0.0,0.5], "inc_strategy": "linear", "type": "float", "default": 0.3 }, { "param": "layer-norm", "type": "bool", "default": true } ], "3-tier-param": [ { "param": "batch-size", "range": [128, 4096], "inc_strategy": "power2", "type": "int", "default": 1024 }, { "param": "fanout", "type": "int", "options": [[10, 30],[15, 30], [15, 30]], "default": [10, 15, 15] }, { "param": "num-layer", "range": [1, 3], "inc_strategy": "linear", "inc_val": 1, "type": "int", "default": 2 }, { "param": "num-bases", "range": [0, 8], "inc_strategy": "linear", "inc_val": 2, "type": "int", "default": 0 } ], "fixed-param": [ { "param": "concat-node-embed", "type": "bool", "default": true }, { "param": "use-self-loop", "type": "bool", "default": true }, { "param": "low-mem", "type": "bool", "default": true }, { "param": "l2norm", "type": "float", "default": 0 } ] } ] }

model-HPO-configuration.json 要素のリスト。

このファイルには、モデル設定オブジェクトが 1 つ含まれる models という名前のトップレベル配列が 1 つある JSON オブジェクトが含まれています。ファイルをカスタマイズするときは、models 配列にはモデル設定オブジェクトが 1 つしかないことを確認してください。ファイルに複数のモデル設定オブジェクトが含まれている場合、チューニングジョブは警告とともに失敗します。

モデル設定オブジェクトには、次の最上位要素が含まれます。

  • model — (文字列) トレーニングするモデルタイプ (変更しない)。有効な 値は次のとおりです。

    • "rgcn" — これは、ノード分類および回帰タスク、および異種リンク予測タスクのデフォルトです。

    • "transe" — これは、KGE リンク予測タスクのデフォルトです。

    • "distmult" — これは KGE リンク予測タスクの代替モデルタイプです。

    • "rotate" — これは KGE リンク予測タスクの代替モデルタイプです。

    原則として、model 値は直接変更しないでください。モデルタイプによって適用可能なハイパーパラメータが実質的に異なることが多く、トレーニングジョブの開始後に解析エラーが発生する可能性があるためです。

    モデルタイプを変更するには、model-HPO-configuration.json ファイルで変えるのではなく、モデルトレーニング APImodelName パラメータを使用します。

    モデルタイプを変更し、細粒度のハイパーパラメータを変更するには、使用するモデルのデフォルトのモデル設定テンプレートをコピーして、model-HPO-configuration.json ファイルにペーストします。推論タスクタイプが複数のモデルをサポートしている場合は、model-HPO-configuration.json ファイルと同じ Amazon S3 の場所に hpo-configuration-templates という名前のフォルダがあります。このフォルダには、タスクに適用可能な他のモデルのデフォルトのハイパーパラメータ設定がすべて含まれています。

    たとえば、KGE リンク予測タスクのためにモデルとハイパーパラメータ設定をデフォルトの transe モデルから distmult モデルに変更する場合、hpo-configuration-templates/distmult.json ファイルの内容を model-HPO-configuration.json ファイルに貼り付けるだけで、それから必要に応じてハイパーパラメータを編集します。

    注記

    modelTraining APIで modelName のパラメータを設定し、また model とハイパーパラメータの仕様を model-HPO-configuration.json ファイルで変更すると、これらは異なり、model-HPO-configuration.json ファイル内の model 値が優先され、modelName 値は無視されます。

  • task_type — (文字列) データ処理ジョブによって推測される、またはデータ処理ジョブに直接渡される機械学習タスクタイプ (変更しない)。有効な 値は次のとおりです。

    • "node_class"

    • "node_regression"

    • "link_prediction"

    データ処理ジョブは、エクスポートされたデータセットと生成されたトレーニングジョブ設定ファイルでデータセットのプロパティを調べて、タスクタイプを推論します。

    この値は変更しないでください。別のタスクをトレーニングしたいなら、新しいデータ処理ジョブを実行する必要があります。task_type 値が予測と異なる場合は、データ処理ジョブへの入力が正しいか確認する必要があります。これには、modelTraining API に対するパラメータ、およびデータエクスポートプロセスによって生成されたトレーニングジョブ設定ファイル内があります。

  • eval_metric — (文字列) 評価指標は、モデルのパフォーマンスを評価し、HPO 実行全体で最もパフォーマンスの高いモデルを選択するために使用する必要があります。有効な 値は次のとおりです。

    • "acc" — 標準の分類精度。これは、データ処理中に不均衡なラベルが検出されない限り、単一ラベル分類タスクのデフォルトです。この場合、デフォルトは "F1" です。

    • "acc_topk"k 予測の中で正しいラベルが一番上にある回数。追加のキーとして topk で受け渡すことで k 値も設定できます。

    • "F1"F1 スコア

    • "mse"平均二乗誤差メトリクス。回帰タスクの場合。

    • "mrr"平均逆数ランクメトリクス

    • "precision" — 予測された陽性に対する真陽性の比率として計算されたモデルの精度。= true-positives / (true-positives + false-positives)

    • "recall" — 実際の陽性に対する真陽性の比率として計算されたモデルのリコール。= true-positives / (true-positives + false-negatives)

    • "roc_auc"ROC カーブ下のエリア。これは、マルチラベル分類のデフォルトです。

    たとえば、メトリクスを F1 に変更するには、eval_metric 値を次のように変更します。

    " eval_metric": { "metric": "F1", },

    または、メトリクスを topk 精度スコアに変更するには、eval_metric 値を次のように変更します。

    "eval_metric": { "metric": "acc_topk", "topk": 2 },
  • eval_frequency — (オブジェクト) トレーニング中に検証セット上のモデルのパフォーマンスをチェックする頻度を指定します。検証のパフォーマンスに基づいて、早期停止を開始し、最適なモデルを保存できます。

    eval_frequency オブジェクトには いわゆる "type" および "value" の、2 つの要素が含まれています。例:

    "eval_frequency": { "type": "evaluate_every_pct", "value": 0.1 },

    有効な type 値は次のとおりです。

    • evaluate_every_pct — 各評価で完了するトレーニングの割合を指定します。

      evaluate_every_pct の場合、"value" フィールドには、そのパーセンテージを表すゼロから 1 までの浮動小数点数が含まれます。

    • evaluate_every_batch — 各評価で完了するトレーニングバッチの数を指定します。

      evaluate_every_batch の場合、"value" フィールドには、そのバッチ数を表す整数が含まれます。

    • evaluate_every_epoch — 評価ごとのエポック数を指定します。新しいエポックは午前 0 時に開始されます。

      evaluate_every_epoch の場合、"value" フィールドには、そのエポック数を表す整数が含まれます。

    eval_frequency のデフォルトの設定は次のとおりです。

    "eval_frequency": { "type": "evaluate_every_epoch", "value": 1 },
  • 1-tier-param — (必須) Tier-1 ハイパーパラメータの配列。

    ハイパーパラメータを調整しない場合は、これを空の配列に設定できます。これは SageMaker ハイパーパラメータのチューニングジョブによって起動されるトレーニングジョブの総数には影響しません。これは、すべてのトレーニングジョブが 1 より多いが 10 未満の場合、同じハイパーパラメータのセットで実行されることを意味します。

    一方、すべての調整可能なハイパーパラメータを同じ有意で扱う場合は、すべてのハイパーパラメータをこの配列に入れることができます。

  • 2-tier-param — (必須) Tier-2 ハイパーパラメータの配列。

    これらのパラメータは、maxHPONumberOfTrainingJobs が 10 より大きい値を持つ場合にのみ調整されます。そうしない場合は、デフォルト値が固定されます。

    最大で 10 のトレーニングジョブ用のトレーニング予算がある場合、または他の理由で Tier-2 ハイパーパラメータを必要とせず、すべての調整可能なハイパーパラメータを調整する場合は、これを空の配列に設定できます。

  • 3-tier-param — (必須) Tier-3 ハイパーパラメータの配列。

    これらのパラメータは、maxHPONumberOfTrainingJobs が 50 より大きい値を持つ場合にのみ調整されます。そうしない場合は、デフォルト値が固定されます。

    Tier-3 ハイパーパラメータを調整しない場合は、これを空の配列に設定できます。

  • fixed-param — (必須) 既定値のみを取り、さまざまなトレーニングジョブによって変化しない固定ハイパーパラメータの配列。

    すべてのハイパーパラメータを変更する場合は、これを空の配列に設定し、すべての階層を変えるか、すべてのハイパーパラメータを Tier-1 にするのに十分な大きさ maxHPONumberOfTrainingJobs の値に設定します。

1-tier-param2-tier-param3-tier-param および fixed-param の各ハイパーパラメータを表す JSON オブジェクトには、次の要素が含まれます。

  • param — (文字列) ハイパーパラメータの名前 (変わらない)。

    フレームワークの使用の詳細については、Neptune ML の有効なハイパーパラメータ名のリストを参照してください。

  • type — (文字列) ハイパーパラメータタイプ (変わらない)。

    有効なタイプは、boolint および float です。

  • default — (文字列) ハイパーパラメータのデフォルト値。

    新しいデフォルト値を設定できます。

調整可能なハイパーパラメータには、次の要素を含めることができます。

  • range — (配列) 連続調整可能なハイパーパラメータの範囲。

    これは、2つの値、すなわち範囲の最小値と最大値を持つ配列でなければなりません ([min, max])。

  • options — (配列) カテゴリカル調整可能なハイパーパラメータのオプション。

    この配列には、考慮すべきすべてのオプションが含まれている必要があります。

    "options" : [value1, value2, ... valuen]
  • inc_strategy — (文字列) 連続調整可能なハイパーパラメータ範囲に対する増分変更のタイプ (変わらない)。

    有効な値は、loglinearpower2 です。これは、範囲キーが設定されている場合にだけ適用されます。

    これを変更すると、チューニングにハイパーパラメータの全範囲を使用しないことがあります。

  • inc_val — (浮動小数点) 連続調整可能ハイパーパラメータで連続する増分が異なる量 (変わらない)。

    これは、範囲キーが設定されている場合にだけ適用されます。

    これを変更すると、チューニングにハイパーパラメータの全範囲を使用しないことがあります。

  • node_strategy — (文字列) このハイパーパラメータの有効範囲は、グラフ内のノード数に基づいて変化することを示します (変わらない)。

    有効な値は、"perM" (100 万当たり)、"per10M" (1000 万当たり)、"per100M" (1 億当たり) です。

    この値を変更するのではなく、代わりに range を変更します。

  • edge_strategy — (文字列) このハイパーパラメータの有効範囲は、グラフ内のエッジ数に基づいて変化することを示します (変わらない)。

    有効な値は、"perM" (100 万当たり)、"per10M" (1000 万当たり)、"per100M" (1 億当たり) です。

    この値を変更するのではなく、代わりに range を変更します。

Neptune ML のすべてのハイパーパラメータのリスト

次のリストには、Neptune ML の任意のモデルタイプおよびタスクに対して設定できるすべてのハイパーパラメータが含まれています。これらはすべて全部のモデルタイプに適用できるわけではないので、ハイパーパラメータは使用しているモデルのテンプレートに表示される model-HPO-configuration.json ファイルでのみ設定します。

  • batch-size — 1 つのフォワードパスで使用するターゲットノードのバッチのサイズ。タイプ: int

    これをはるかに大きな値に設定すると、GPU インスタンスのトレーニングでメモリの問題が発生する可能性があります。

  • concat-node-embed — モデルの表現度を高めるために、処理された特徴を学習可能な最初のノード埋め込みと連結して、ノードの初期表現を取得するかどうかを示します。タイプ: bool

  • dropout — ドロップアウトレイヤーに適用されるドロップアウトの確率。タイプ: float

  • edge-num-hidden — エッジフィーチャモジュールの非表示のレイヤーサイズまたはユニット数。use-edge-featuresTrue に設定されている場合にのみ使用されます。タイプ: 浮動小数点。

  • enable-early-stop — 早期停止機能を使用するかどうかを切り替えます。タイプ: boolデフォルト: true

    このブール値パラメータを使用して、早期停止機能をオフにします。

  • fanout — ネイバーサンプリング中にターゲットノードについてサンプリングするネイバーの数。タイプ: int

    この値は、num-layers と緊密に結合されています。また、常に同じハイパーパラメータ層内に配置する必要があります。これは、潜在的な GNN レイヤーごとにファンアウトを指定できるためです。

    このハイパーパラメータによってモデルのパフォーマンスが大きく変わる可能性があるため、固定するか、Tier-2 または Tier-3 ハイパーパラメータとして設定する必要があります。これを大きな値に設定すると、GPU インスタンスのトレーニングでメモリの問題が発生する可能性があります。

  • gamma — スコア関数のマージン値。タイプ: float

    これは、KGE リンク予測モデルのみに当てはまります。

  • l2norm — オプティマイザで使用される荷重減衰値。荷重に L2 正規化ペナルティを課します。タイプ: bool

  • layer-normrgcn モデルにレイヤー正規化を使用するかどうかを示します。タイプ: bool

  • low-mem — 速度を犠牲にしてリレーションメッセージパッシング関数のメモリ不足実装を使用するかどうかを示します。タイプ: bool

  • lr — 学習レート。タイプ: float

    これは Tier-1 ハイパーパラメータとして設定する必要があります。

  • neg-share — リンク予測では、正のサンプリングされたエッジが負のエッジサンプルを共有できるかどうかを示します。タイプ: bool

  • num-basesrgcn モデルにおける基底分解のベース数。グラフ内のエッジタイプの数よりも小さい num-bases の値を使用すると、グラフは rgcn モデルの正則化手段として機能します。タイプ: int

  • num-epochs - 実行するトレーニングエポックの数。タイプ: int

    エポックは、グラフを通る完全なトレーニングパスです。

  • num-hidden — 非表示のレイヤーのサイズまたは単位数。タイプ: int

    これにより、特徴がないノードの初期埋め込みサイズも設定されます。

    これを batch-size を減らすことなくはるかに大きな値に設定すると、GPU インスタンスのトレーニングでメモリの問題が発生する可能性があります。

  • num-layer — モデル内の GNN レイヤーの数。タイプ: int

    この値は、ファンアウトパラメータと緊密に結合されています。また、常に同じハイパーパラメータ層内にファンアウトを設定した後にこれが来る必要があります。

    これによってモデルのパフォーマンスが大きく変わる可能性があるため、固定するか、Tier-2 または Tier-3 ハイパーパラメータとして設定する必要があります。

  • num-negs — リンク予測では、正のサンプルあたりの負のサンプルの数。タイプ: int

  • per-feat-name-embed — 特徴を組み合わせる前に個別に変換することにより、各特徴を埋め込むかどうかを示します。タイプ: bool

    true に設定すると、ノードごとの各フィーチャが独立して固定次元サイズに変換され、その後、ノードのすべての変換されたフィーチャが連結され、さらに num_hidden 次元に変換されます。

    false に設定すると、フィーチャ固有の変換を行わずにフィーチャが連結されます。

  • regularization-coef — リンク予測では、正則化損失の係数。タイプ: float

  • rel-partKGE リンク予測に対してリレーションパーティションを使用するかどうかを示します。タイプ: bool

  • sparse-lr — 学習可能なノード埋め込みの学習率。タイプ: float

    学習可能な初期ノード埋め込みは、特徴がないノードや、concat-node-embed が設定されたときに使用されます。スパース学習可能ノード埋め込みレイヤーのパラメータは、個別の学習率を持つことができる別のオプティマイザを使用してトレーニングされます。

  • use-class-weight — 不均衡な分類タスクにクラス荷重を適用するかどうかを示します。true に設定すると、ラベル数を使用して、各クラスラベルの荷重が設定されます。タイプ: bool

  • use-edge-features — メッセージの受け渡し時にエッジ機能を使用するかどうかを示します。true に設定すると、特徴を持つエッジタイプのカスタムエッジ機能モジュールが RGCN レイヤーに追加されます。タイプ: bool

  • use-self-looprgcn モデルのトレーニングにセルフループを含めるかどうかを示します。タイプ: bool

  • window-for-early-stop - 早期停止を決定するために平均する最新の検証スコアの数を制御します。デフォルトは 3. type=int です。「Neptune ML でのモデルトレーニングプロセスの早期停止」も参照してください。タイプ: intデフォルト: 3

    「」を参照してください。

Neptune ML でのハイパーパラメータのカスタマイズ

model-HPO-configuration.json ファイルを編集しているときでは、最も一般的な変更の種類を以下に示します。

  • range ハイパーパラメータの最小値および/または最大値を編集します。

  • ハイパーパラメータを固定値に設定するには、fixed-param セクションを開き、デフォルト値を設定したい固定値に設定します。

  • ハイパーパラメータを特定の層に配置し、その範囲を編集し、そのデフォルト値が適切に設定されていることを確認して、ハイパーパラメータの優先順位を変更します。