翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Neptune ML でのモデルのハイパーパラメータ設定のカスタマイズ
Neptune ML モデルトレーニングジョブを開始すると、Neptune ML は先行するデータ処理ジョブから推測された情報を自動的に使用します。この情報を使用して、ハイパーパラメータ設定範囲を生成し、これは SageMaker のハイパーパラメータ調整ジョブタスクのために複数のモデルをトレーニングするために使用されます。そうすれば、トレーニングの対象となるモデルのハイパーパラメータ値の長いリストを指定する必要はありません。代わりに、モデルのハイパーパラメータの範囲とデフォルトは、タスクタイプ、グラフタイプ、およびチューニングジョブ設定に基づいて選択されます。
ただし、データ処理ジョブが生成する JSON 設定ファイルを変更して、デフォルトのハイパーパラメータ設定を上書きし、カスタムハイパーパラメータを指定することもできます。
Neptune MLを使う modelTraining API では、maxHPONumberOfTrainingJobs
、maxHPOParallelTrainingJobs
および 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
ファイルで変えるのではなく、モデルトレーニング APIでmodelName
パラメータを使用します。モデルタイプを変更し、細粒度のハイパーパラメータを変更するには、使用するモデルのデフォルトのモデル設定テンプレートをコピーして、
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-param
、2-tier-param
、3-tier-param
および fixed-param
の各ハイパーパラメータを表す JSON オブジェクトには、次の要素が含まれます。
-
param
— (文字列) ハイパーパラメータの名前 (変わらない)。フレームワークの使用の詳細については、Neptune ML の有効なハイパーパラメータ名のリストを参照してください。
-
type
— (文字列) ハイパーパラメータタイプ (変わらない)。有効なタイプは、
bool
、int
およびfloat
です。 -
default
— (文字列) ハイパーパラメータのデフォルト値。新しいデフォルト値を設定できます。
調整可能なハイパーパラメータには、次の要素を含めることができます。
-
range
— (配列) 連続調整可能なハイパーパラメータの範囲。これは、2つの値、すなわち範囲の最小値と最大値を持つ配列でなければなりません (
[min, max]
)。 -
options
— (配列) カテゴリカル調整可能なハイパーパラメータのオプション。この配列には、考慮すべきすべてのオプションが含まれている必要があります。
"options" : [value1, value2, ... valuen]
-
inc_strategy
— (文字列) 連続調整可能なハイパーパラメータ範囲に対する増分変更のタイプ (変わらない)。有効な値は、
log
、linear
、power2
です。これは、範囲キーが設定されている場合にだけ適用されます。これを変更すると、チューニングにハイパーパラメータの全範囲を使用しないことがあります。
-
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-features
がTrue
に設定されている場合にのみ使用されます。タイプ: 浮動小数点。 -
enable-early-stop
— 早期停止機能を使用するかどうかを切り替えます。タイプ:bool
。デフォルト:true
。このブール値パラメータを使用して、早期停止機能をオフにします。
-
fanout
— ネイバーサンプリング中にターゲットノードについてサンプリングするネイバーの数。タイプ:int
。この値は、
num-layers
と緊密に結合されています。また、常に同じハイパーパラメータ層内に配置する必要があります。これは、潜在的な GNN レイヤーごとにファンアウトを指定できるためです。このハイパーパラメータによってモデルのパフォーマンスが大きく変わる可能性があるため、固定するか、Tier-2 または Tier-3 ハイパーパラメータとして設定する必要があります。これを大きな値に設定すると、GPU インスタンスのトレーニングでメモリの問題が発生する可能性があります。
-
gamma
— スコア関数のマージン値。タイプ:float
。これは、
KGE
リンク予測モデルのみに当てはまります。 -
l2norm
— オプティマイザで使用される荷重減衰値。荷重に L2 正規化ペナルティを課します。タイプ:bool
。 -
layer-norm
—rgcn
モデルにレイヤー正規化を使用するかどうかを示します。タイプ:bool
。 -
low-mem
— 速度を犠牲にしてリレーションメッセージパッシング関数のメモリ不足実装を使用するかどうかを示します。タイプ:bool
。 -
lr
— 学習レート。タイプ:float
。これは Tier-1 ハイパーパラメータとして設定する必要があります。
-
neg-share
— リンク予測では、正のサンプリングされたエッジが負のエッジサンプルを共有できるかどうかを示します。タイプ:bool
。 -
num-bases
—rgcn
モデルにおける基底分解のベース数。グラフ内のエッジタイプの数よりも小さい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-part
—KGE
リンク予測に対してリレーションパーティションを使用するかどうかを示します。タイプ:bool
。 -
sparse-lr
— 学習可能なノード埋め込みの学習率。タイプ:float
。学習可能な初期ノード埋め込みは、特徴がないノードや、
concat-node-embed
が設定されたときに使用されます。スパース学習可能ノード埋め込みレイヤーのパラメータは、個別の学習率を持つことができる別のオプティマイザを使用してトレーニングされます。 -
use-class-weight
— 不均衡な分類タスクにクラス荷重を適用するかどうかを示します。true
に設定すると、ラベル数を使用して、各クラスラベルの荷重が設定されます。タイプ:bool
。 -
use-edge-features
— メッセージの受け渡し時にエッジ機能を使用するかどうかを示します。true
に設定すると、特徴を持つエッジタイプのカスタムエッジ機能モジュールが RGCN レイヤーに追加されます。タイプ:bool
。 -
use-self-loop
—rgcn
モデルのトレーニングにセルフループを含めるかどうかを示します。タイプ:bool
。 -
window-for-early-stop
- 早期停止を決定するために平均する最新の検証スコアの数を制御します。デフォルトは 3. type=int です。「Neptune ML でのモデルトレーニングプロセスの早期停止」も参照してください。タイプ:int
。デフォルト:3
。「」を参照してください。
Neptune ML でのハイパーパラメータのカスタマイズ
model-HPO-configuration.json
ファイルを編集しているときでは、最も一般的な変更の種類を以下に示します。
range
ハイパーパラメータの最小値および/または最大値を編集します。ハイパーパラメータを固定値に設定するには、
fixed-param
セクションを開き、デフォルト値を設定したい固定値に設定します。ハイパーパラメータを特定の層に配置し、その範囲を編集し、そのデフォルト値が適切に設定されていることを確認して、ハイパーパラメータの優先順位を変更します。