Neptune ML でのカスタムモデル開発 - Amazon Neptune

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

Neptune ML でのカスタムモデル開発

カスタムモデルの開発を開始する良い方法は、以下を実行することです。Neptune ML ツールキットの例に従ってトレーニングモジュールを構造化して記述します。Neptune ML ツールキットは、モジュール化されたグラフ ML モデルコンポーネントをスタックしてカスタムモデルを作成するために使用できるモデルズーに実装します。

さらに、ツールキットには、モデルトレーニングおよびモデル変換時に必要なアーティファクトを生成するのに役立つユーティリティ関数が用意されています。この Python パッケージは、カスタム実装にインポートできます。ツールキットで提供されている関数またはモジュールは、Neptune ML トレーニング環境でも使用できます。

Python モジュールに外部依存関係が追加されている場合は、モジュールのディレクトリにある requirements.txt ファイルを指定してこれらの追加依存関係を含めることができます。requirements.txt ファイルに一覧表示されているこのパッケージは、トレーニングスクリプトが実行される前にインストールされます。

少なくとも、カスタムモデルを実装する Python モジュールには、次のものが含まれている必要があります。

  • トレーニングスクリプトのエントリポイント

  • トランスフォームスクリプトのエントリポイント

  • model-hpo-configuration.json ファイル

Neptune ML でのカスタムモデルトレーニングスクリプト開発

カスタムモデルトレーニングスクリプトは、Neptune ML ツールキットtrain.pyの例のような実行可能な Python スクリプトである必要があります。ハイパーパラメータの名前と値をコマンドライン引数として受け入れる必要があります。モデルトレーニング中、ハイパーパラメータ名は model-hpo-configuration.json ファイルから取得します。ハイパーパラメータの値は、ハイパーパラメータが調整可能な場合は有効なハイパーパラメータの範囲内に入るか、調整可能でない場合はデフォルトのハイパーパラメータ値を使用します。

トレーニングスクリプトは、次のような構文を使用して SageMaker トレーニングインスタンスで実行されます。

python3 (script entry point) --(1st parameter) (1st value) --(2nd parameter) (2nd value) (...)

すべてのタスクについて、Neptune ML AutoTrainer は、指定したハイパーパラメータに加えて、いくつかの必須パラメータをトレーニングスクリプトに送信しますが、適切に動作させるには、スクリプトがこれらの追加パラメータを処理できる必要があります。

これらの追加必須パラメータは、タスクによって多少異なります。

ノード分類またはノード回帰の場合
  • task — Neptune ML によって内部的に使用されるタスクタイプ。ノード分類の場合、これは node_class であり、ノード回帰については node_regression です。

  • model — Neptune ML によって内部的に使用されるモデル名。この場合、custom です。

  • name — Neptune ML によって内部的に使用されるタスクの名前。この場合、ノード分類の場合 node_class-custom で、ノード回帰の場合 node_regression-custom です。

  • target_ntype — 分類または回帰のノードタイプの名前。

  • property — 分類または回帰のノードプロパティの名前。

リンク予測の場合
  • task — Neptune ML によって内部的に使用されるタスクタイプ。リンク予測の場合、これは link_predict です。

  • model — Neptune ML によって内部的に使用されるモデル名。この場合、custom です。

  • name — Neptune ML によって内部的に使用されるタスク名。この場合、link_predict-custom です。

エッジ分類またはエッジ回帰の場合
  • task — Neptune ML によって内部的に使用されるタスクタイプ。エッジ分類の場合、これは edge_class であり、エッジ回帰については edge_regression です。

  • model — Neptune ML によって内部的に使用されるモデル名。この場合、custom です。

  • name — Neptune ML によって内部的に使用されるタスクの名前。この場合、エッジ分類の場合 edge_class-custom で、エッジ回帰の場合 edge_regression-custom です。

  • target_etype — 分類または回帰のエッジタイプの名前。

  • property — 分類または回帰のエッジプロパティの名前。

スクリプトは、モデルのパラメータと、トレーニングの終了時に必要となるその他のアーティファクトを保存する必要があります。

Neptune ML Toolkit ユーティリティ関数を使用して、処理されたグラフデータの場所、モデルパラメータを保存する場所、およびトレーニングインスタンスで使用可能な GPU デバイスを決定できます。フレームワークの使用の詳細については、これらのユーティリティ関数の使用方法の例を示す train.py サンプルトレーニングスクリプトを参照してください。

Neptune ML でのカスタムモデル変換スクリプト開発

モデルの再トレーニングを行わずに進化するグラフのモデル推論のための Neptune ML 増分ワークフローを利用するには、トランスフォームスクリプトが必要です。モデルのデプロイに必要なすべてのアーティファクトがトレーニングスクリプトによって生成された場合でも、モデルを再トレーニングせずに更新されたモデルを生成する場合は、変換スクリプトを提供する必要があります。

注記

リアルタイムの帰納的推論は、現在、カスタムモデルではサポートされていません。

カスタムモデルトレーニングスクリプトは、Neptune ML ツールキット transform.py の例スクリプトのような実行可能な Python スクリプトである必要があります。このスクリプトは、コマンドライン引数なしでモデルトレーニング中に呼び出されるため、スクリプトが受け入れるコマンドライン引数はデフォルトである必要があります。

このスクリプトは、次のような構文で SageMaker トレーニングインスタンスで実行されます。

python3 (your transform script entry point)

トランスフォームスクリプトには、次のようなさまざまな情報が必要です。

  • 処理されたグラフデータの場所。

  • モデルパラメータが保存され、新しいモデルアーティファクトが保存される場所。

  • そのインスタンスで使用可能なデバイス。

  • 最適なモデルを生成したハイパーパラメータ。

これらの入力は、スクリプトが呼び出すことができる Neptune ML ユーティリティ関数を使用して取得されます。その方法の例としてツールキットのサンプル transform.py スクリプトを参照してください。

スクリプトは、ノード埋め込み、ノード ID マッピング、および各タスクのモデル展開に必要なその他のアーティファクトを保存する必要があります。さまざまな Neptune ML タスクに必要なモデルアーティファクトの詳細については、モデルアーティファクトのドキュメントを参照してください。

Neptune MLのカスタム model-hpo-configuration.json ファイル

model-hpo-configuration.json ファイルは、カスタムモデルのハイパーパラメータを定義します。それは Neptune ML 組み込みモデルで使用される model-hpo-configuration.json ファイルと同じフォーマットで、Neptune ML によって自動生成され、処理されたデータの場所にアップロードされるバージョンよりも優先されます。

新しいハイパーパラメータをモデルに追加するときは、ハイパーパラメータがトレーニングスクリプトに渡されるように、このファイルにハイパーパラメータのエントリを追加する必要があります。

ハイパーパラメータを調整できるようにするには、ハイパーパラメータの範囲を指定し、tier-1tier-2 または tier-3 param に設定します。ハイパーパラメータは、構成されたトレーニングジョブの総数で、階層内のハイパーパラメータの調整ができる場合に調整されます。調整不可能なパラメータの場合は、デフォルト値を指定し、ハイパーパラメータをファイルの fixed-param セクションに追加します。その方法の例についてはツールキットのサンプルサンプル model-hpo-configuration.json ファイルを参照してください。

また、SageMaker HyperParameter Optimization ジョブがトレーニングした候補モデルの評価に使用するメトリクス定義も指定する必要があります。これを行うには、次のように eval_metric JSON オブジェクトを model-hpo-configuration.json ファイルに追加します。

"eval_metric": { "tuning_objective": { "MetricName": "(metric_name)", "Type": "Maximize" }, "metric_definitions": [ { "Name": "(metric_name)", "Regex": "(metric regular expression)" } ] },

eval_metric オブジェクトの metric_definitions 配列は、SageMaker がトレーニングインスタンスから抽出する各指標のメトリクス定義オブジェクトを一覧表示します。各メトリクス定義オブジェクトには、メトリクスの名前 (「精度」、「f1」など) を指定できる Name キーがあります。Regex キー を使用すると、特定のメトリックがトレーニングログに出力される方法に一致する正規表現文字列を指定できます。メトリクスの定義方法の詳細については、SageMaker HyperParameter Tuning ページを参照してください。

eval_metrictuning_objective オブジェクトでは、metric_definitions のどのメトリクスをハイパーパラメータ最適化の目標指標として機能する評価メトリクスとして使用するかを指定できます。MetricName の値は、metric_definitions の定義の 1 つである Name の値と一致する必要があります。メトリクスが greater-is-better (「精度」など) または less-is-better (「平均二乗誤差」など) のどちらで解釈されるべきかに応じて、Type の値は「最大化」または「最小化」のいずれかになります。

model-hpo-configuration.json ファイルのこのセクションのエラーは、SageMaker HyperParameter Tuning ジョブが最適なモデルを選択できないため、Neptune ML モデルトレーニング API ジョブが失敗する可能性があります。

Neptune ML でのカスタムモデル実装のローカルテスト

Neptune ML ツールキット Conda 環境を使用して、モデルをテストおよび検証するために、コードをローカルで実行できます。Neptune ノートブックインスタンスで開発している場合、この Conda 環境は Neptune Notebook インスタンスにプレインストールされます。別のインスタンスで開発する場合は、Neptune ML ツールキットのローカルセットアップ手順に入っています。

Conda 環境は、モデルトレーニング API を呼び出す際にモデルが実行する環境を正確に再現します。トレーニングスクリプトと変換スクリプトの例はすべて、簡単にデバッグできるように、ローカル環境でスクリプトを実行するコマンドライン --local フラグを渡すことができます。これは、モデルの実装を対話的かつ反復的にテストできるので、独自のモデルを開発する際には良い方法です。Neptune ML プロダクショントレーニング環境でのモデルトレーニング中は、このパラメータは省略されます。