この投稿では、Twitch データセットを使用したリンク予測の作業を続けます。グラフ ニューラル ネットワーク (GNN) に基づく ML モデルのトレーニングとハイパーパラメータの最適化に焦点を当てます。この時点で、グラフ データは処理済みで、モデル トレーニングの準備が整っています。これまでの手順については、パート 3 - データ処理、パート 2 - DB からのデータのエクスポート、およびパート 1 - DB へのデータのロードで説明されています。 パート 1 は 、パート 2 は 、 こちらでお読みください。 こちら こちら パート 3 は グラフニューラルネットワークの種類の選択: GCN と R-GCN で行ったのと同じように、グラフ畳み込みニューラルネットワークを使用します。Neptune ML は同じ フレームワークを使用しますが、基盤となるモデルは少し異なります。Neptune ML は、ナレッジグラフ (単一のノードタイプと単一のエッジタイプの同種グラフ) と、複数のノードタイプとエッジタイプを持つ異種グラフの両方をサポートしています。ここで使用しているデータセットには、単一のノードタイプ (ユーザー) と単一のエッジタイプ (友情) があります。この場合、グラフ畳み込みネットワーク (GCN) またはグラフサンプルと集約 (GraphSAGE) モデルも機能しますが、ここで説明されているように、ノード に異なる可能性があるノードプロパティを持つデータセットには、Neptune ML によってリレーショナルグラフ畳み込みネットワーク (R-GCN) モデルが自動的に選択されます。一般に、R-GCN では、複数のノードタイプとエッジタイプを処理するために必要なパラメーターの数が増えるため、トレーニングに多くのコンピューティングが必要になります。 ローカルリンク予測の投稿 DGL.ai ごと モデルトレーニングハイパーパラメータ データ処理段階(前回の投稿 TODO LINK で説明)で、Neptune ML は というファイルを作成しました。このファイルには、モデルタイプ(R-GCN)、タスクタイプ(リンク予測)、評価メトリックと頻度、および 4 つのパラメータリスト(トレーニング中に変更されない固定パラメータのリスト 1 つと、範囲とデフォルト値を含む最適化されるパラメータのリスト 3 つ)が含まれています。パラメータは重要度別にグループ化されています。各グループのパラメータが調整されるかどうかは、利用可能な調整ジョブの数に基づいて決定されます。つまり、第 1 層のパラメータは常に調整され、第 2 層のパラメータは利用可能なジョブの数が 10 を超える場合に調整され、第 3 層のパラメータは 50 を超える場合にのみ調整されます。model ファイルは次のようになります。 model-hpo-configuration.json model-hpo-configuration.json { "models": [ { "model": "rgcn", "task_type": "link_predict", "eval_metric": { "metric": "mrr", "global_ranking_metrics": true, "include_retrieval_metrics": false }, "eval_frequency": { "type": "evaluate_every_pct", "value": 0.05 }, "1-tier-param": [ { "param": "num-hidden", "range": [16, 128], "type": "int", "inc_strategy": "power2" }, { "param": "num-epochs", "range": [3, 100], "inc_strategy": "linear", "inc_val": 1, "type": "int", "edge_strategy": "perM" }, { "param": "lr", "range": [0.001, 0.01], "type": "float", "inc_strategy": "log" }, { "param": "num-negs", "range": [4, 32], "type": "int", "inc_strategy": "power2" } ], "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 }, { "param": "regularization-coef", "range": [0.0001, 0.01], "type": "float", "inc_strategy": "log", "default": 0.001 } ], "3-tier-param": [ { "param": "batch-size", "range": [128, 512], "inc_strategy": "power2", "type": "int", "default": 256 }, { "param": "sparse-lr", "range": [0.001, 0.01], "inc_strategy": "log", "type": "float", "default": 0.001 }, { "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": "neg-share", "type": "bool", "default": true }, { "param": "use-self-loop", "type": "bool", "default": true }, { "param": "low-mem", "type": "bool", "default": true }, { "param": "enable-early-stop", "type": "bool", "default": true }, { "param": "window-for-early-stop", "type": "bool", "default": 3 }, { "param": "concat-node-embed", "type": "bool", "default": true }, { "param": "per-feat-name-embed", "type": "bool", "default": true }, { "param": "use-edge-features", "type": "bool", "default": false }, { "param": "edge-num-hidden", "type": "int", "default": 16 }, { "param": "weighted-link-prediction", "type": "bool", "default": false }, { "param": "link-prediction-remove-targets", "type": "bool", "default": false }, { "param": "l2norm", "type": "float", "default": 0 } ] } ] } と パラメーターは、データのエクスポートと処理の段階で設定されるため、ここでは変更しないでください。 モデル タスク タイプの 自動的に選択されました。 、予測結果における正しいリンクの平均順位を測定します。MRR 。 評価指標も 平均逆順位 (MRR) は が高いほど、パフォーマンスが優れていることを示します トレーニングの進行の 5% に設定されています。たとえば、エポックが 100 の場合、評価は 5 エポックごとに実行されます。 評価頻度は 調整されるハイパーパラメータのいくつかを確認してみましょう。 : 学習率は、あらゆるモデルトレーニングにとって最も影響力のあるハイパーパラメータの 1 つです。学習率が低いと収束が遅くなりますが、パフォーマンスが向上する可能性があります。一方、学習率が高いとトレーニングが高速化されますが、最適なソリューションを見逃す可能性があります。 lr : num-hidden パラメータは、R-GCN ニューラル ネットワークの各層、具体的には隠し層にある隠しユニット (ニューロン) の数を示します。隠しユニットの数が多いほど、データから複雑なパターンや関係性を学習するモデルの能力が高まり、予測精度が向上しますが、モデルがデータセットに対して複雑になりすぎると、過剰適合につながる可能性もあります。 num-hidden : モデルのトレーニング期間を定義します。エポック数が多いほど、モデルはデータからより多くのことを学習できますが、過剰適合のリスクが高まる可能性があります。 num-epochs : バッチ サイズはメモリ使用量と収束の安定性に影響します。バッチ サイズが小さいほどモデルはデータに対してより敏感になる可能性があり、バッチ サイズが大きいほどトレーニング速度が向上する可能性があります。 batch-size : ネガティブ サンプリングは、モデルが真のリンクと偽のリンクを区別する方法に影響します。ネガティブ サンプルの数が多いと予測の品質が向上する可能性がありますが、計算コストが増加します。 num-negs : ドロップアウトは、トレーニング中に一部のニューロンをランダムにスキップすることで、オーバーフィッティングを防ぐのに役立ちます。ドロップアウト率を高くすると、オーバーフィッティングが軽減される可能性がありますが、モデルの学習が難しくなる可能性があります。 ドロップアウト : モデルの過剰適合を防ぐことを目的とした正規化。 normalization-coef これらの各パラメータのデフォルト値、範囲、ステップ サイズを変更できます。パラメータの完全なリストについては、 参照してください。 こちらを パラメータを変更したら、S3 内の元の ファイルを置き換えるだけです。 model-hpo-configuration.json モデルトレーニングと HPO のための IAM ロール このガイドのパート 3 で説明したデータ処理と同様に、モデルのトレーニングには 2 つの IAM ロールが必要です。SageMaker と S3 への Neptune アクセスを提供する Neptune ロールと、データ処理タスクの実行中に SageMaker によって使用され、S3 へのアクセスを許可する Sagemaker 実行ロールです。これらのロールには、Neptune および SageMaker サービスがそれらを引き受けることを許可する信頼ポリシーが必要です。 { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "sagemaker.amazonaws.com" }, "Action": "sts:AssumeRole" }, { "Sid": "", "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } ロールを作成し、信頼ポリシーを更新したら、それらを Neptune クラスターに追加します (Neptune -> データベース -> YOUR_NEPTUNE_CLUSTER_ID -> 接続とセキュリティ -> IAM ロール -> ロールの追加)。 NEPTUNE ML API を使用したモデルトレーニングと HPO の開始 これで、モデルのトレーニングを開始する準備ができました。そのためには、クラスターが配置されている VPC 内から Neptune クラスターの HTTP API にリクエストを送信する必要があります。EC2 インスタンスで curl を使用します。 curl -XPOST https://(YOUR_NEPTUNE_ENDPOINT):8182/ml/modeltraining \ -H 'Content-Type: application/json' \ -d '{ "dataProcessingJobId" : "ID_OF_YOUR_DATAPROCESSING_JOB", "trainModelS3Location" : "s3://OUTPUT_BUCKET/model-artifacts/...", "neptuneIamRoleArn": "arn:aws:iam::123456789012:role/NeptuneMLModelTrainingNeptuneRole", "sagemakerIamRoleArn": "arn:aws:iam::123456789012:role/NeptuneMLModelTrainingSagemakerRole" }' 必要なのはこれらのパラメータのみです。 - ジョブ ID は、S3 で処理されたデータの場所を取得するために使用されます。 dataProcessingJobId - アーティファクトの出力場所(モデルの重み) trainModelS3Location (これらのロールは Neptune DB クラスターに追加する必要があります) Neptune および SageMaker ロール また、異なるハイパーパラメータのセットで実行するトレーニングジョブの数を設定する パラメータもあります。デフォルトでは 2 ですが、 。 maxHPONumberOfTrainingJobs AWS では正確なモデルを取得するために少なくとも 10 個のジョブを実行することを推奨しています オプションのパラメータも多数あります。たとえば、 を使用してモデルのトレーニングに使用する EC2 インスタンスタイプを手動で選択し、 を使用してそのストレージボリュームサイズを設定できます。パラメータの完全なリストについては 参照してください。 trainingInstanceType trainingInstanceVolumeSizeInGB 、こちらを クラスターは、先ほど作成したデータ処理ジョブの ID を含む JSON で応答します。 {"id":"d584f5bc-d90e-4957-be01-523e07a7562e"} このコマンドを使用して、モデルトレーニングジョブのステータスを取得できます (前のリクエストと同じ を使用します)。 neptuneIamRoleArn curl https://YOUR_NEPTUNE_CLUSTER_ENDPOINT:8182/ml/modeltraining/YOUR_JOB_ID?neptuneIamRoleArn='arn:aws:iam::123456789012:role/NeptuneMLModelTrainingNeptuneRole' 次のような応答が返ってきたら、 { "processingJob": { "name": "PROCESSING_JOB_NAME", "arn": "arn:aws:sagemaker:us-east-1:123456789012:processing-job/YOUR_PROCESSING_JOB_NAME", "status": "Completed", "outputLocation": "s3://OUTPUT_BUCKET/model-artifacts/PROCESSING_JOB_NAME/autotrainer-output" }, "hpoJob": { "name": "HPO_JOB_NAME", "arn": "arn:aws:sagemaker:us-east-1:123456789012:hyper-parameter-tuning-job/HPO_JOB_NAME", "status": "Completed" }, "mlModels": [ { "name": "MODEL_NAME-cpu", "arn": "arn:aws:sagemaker:us-east-1:123456789012:model/MODEL_NAME-cpu" } ], "id": "d584f5bc-d90e-4957-be01-523e07a7562e", "status": "Completed" } トレーニング ログとアーティファクトを宛先 S3 バケットで確認できます。 モデルトレーニング結果の確認 モデルのトレーニングが完了したので、AWS コンソールで結果を確認しましょう: SageMaker -> トレーニング -> トレーニングジョブ。 簡単にするために、モデルのトレーニングを開始したときに HPO ジョブの数を変更せず、デフォルト値の 2 を使用しました。2 つのジョブは並行して実行されました。インスタンス タイプは自動的に選択されました: 。 ml.g4dn.2xlarge 最初のジョブ (名前に「001」が含まれるジョブ) は 15 分で完了し、2 番目のジョブ (「002」) は自動的に停止しました。これは、SageMaker がトレーニング メトリックがしばらく改善されない場合の早期停止をサポートしているためです。 これらのジョブで使用されたハイパーパラメータを比較してみましょう。 異なる値を持つパラメータは 3 つだけです。2 番目のモデル (ジョブ 2 でトレーニング) は、学習率は高いものの、複雑なパターンを捕捉する能力は低く (ニューロンが少ないため)、トレーニングされたネガティブ サンプルの数も少なかったため、 からわかるように、精度が大幅に低下しました。 num-hidden、num-negs、lr の 検証平均ランク (115 vs 23) と HITS@K 予測の中での正しいリンクの平均ランク位置です。MR 。 平均ランク (MR) は、 値が低いほど、正しいリンクが平均して上位にランク付けされていることを示し、優れています HITS@K メトリックは、上位 K 個の予測結果に正しいリンクが出現する回数の割合を測定します。 モデルアーティファクト トレーニング ジョブが完了すると、トレーニングの統計とメトリックを含むファイルとともに、モデル成果物が出力 S3 バケットに作成されます。 これらの JSON ファイル内のメトリックとパラメーターは、前に説明したものです。001 ディレクトリのみに、model.tar.gz ファイルを含む 'output' サブディレクトリが含まれています。これは、完了した唯一の HPO ジョブであるためです。リンク予測のアーティファクトには、 説明されているように、実際の予測を行うために必要な DGL グラフ データも含まれています。 ここで これについては、このシリーズの次の最後の投稿で説明します。 これらのファイルは推論エンドポイントを作成し、実際のリンク予測を生成するために使用されます。