データサイエンティストは、さまざまなモデルアーキテクチャやハイパーパラメータと組み合わせて、さまざまなデータ前処理や特徴工学戦略の効果を理解するために取り組むことがよくあります。 そのためには、大きなパラメータースペースを繰り返しカバーする必要があり、実験の再現性を維持しながら、以前に実行した構成と結果を追跡するのは大変な作業になる可能性があります。
この投稿では、を使用してコード、データ、アーティファクト、および指標全体で実験を追跡する方法の例を紹介します。 AmazonSageMakerの実験 と一緒に データバージョン管理(DVC)。 DVCをと並べて使用する方法を示します アマゾンセージメーカー 処理およびトレーニングジョブ。 カリフォルニアの住宅データセットでさまざまなCatBoostモデルをトレーニングします。 StatLibリポジトリ、およびDVCでデータバージョンを追跡しながらホールドアウト戦略を変更します。 個々の実験では、SageMaker実験を使用して、入力と出力のアーティファクト、コード、およびメトリックを追跡します。
SageMakerの実験
SageMaker Experimentsは、機械学習(ML)実験を追跡するためのAWSサービスです。 The SageMaker実験PythonSDK は、Pythonを使用して実験情報を追跡するのに役立つ、このサービスへの高レベルのインターフェースです。
SageMaker Experimentsの目標は、実験の作成、試行の入力、追跡および系統情報の追加、試行と実験全体での分析の実行を可能な限り簡単にすることです。
SageMaker実験について説明するときは、次の概念を参照します。
- 実験 –関連する試験のコレクション。 一緒に比較したい実験に試行を追加します。
- トライアル –マルチステップMLワークフローの説明。 ワークフローの各ステップは、トライアルコンポーネントによって記述されます。
- トライアルコンポーネント –データクリーニング、特徴抽出、モデルトレーニング、モデル評価など、MLワークフローの単一ステップの説明。
- 追跡者 –単一のトライアルコンポーネントに関する情報(パラメーター、メトリック、アーティファクトなど)をログに記録するためのPythonコンテキストマネージャー。
データバージョン管理
データバージョン管理(DVC)は、新しいタイプのデータバージョン管理、ワークフロー、および実験管理ソフトウェアであり、その上に構築されています。 Gitの (スタンドアロンでも動作しますが)。 DVCは、確立されたエンジニアリングツールセットとデータサイエンスのニーズの間のギャップを減らし、新しいものを活用できるようにします 機能を使用 既存のスキルと直感を再利用しながら。
データサイエンス実験の共有とコラボレーションは、ソフトウェアエンジニアの場合と同じように、通常のGitフロー(コミット、ブランチ、タグ付け、プルリクエスト)を介して実行できます。 GitとDVCを使用すると、データサイエンスチームとMLチームは、実験のバージョン管理、大規模なデータセットの管理、プロジェクトの再現性を高めることができます。
DVCには次の機能があります。
- DVCは 無料です。、 オープンソース コマンドライン ツール。
- DVCはGitリポジトリ上で動作し、Gitと同様のコマンドラインインターフェイスとフローを備えています。 DVCはスタンドアロンでも動作しますが、 バージョニング 機能を提供します。
- データのバージョン管理は、大きなファイル、データセットディレクトリ、MLモデルなどを小さなファイルに置き換えることで可能になります メタファイル (Gitで扱いやすい)。 これらのプレースホルダーは、ソースコード管理から切り離された元のデータを指します。
- オンプレミスまたはクラウドストレージを使用して、プロジェクトのデータをコードベースとは別に保存できます。 これは、データサイエンティストが大規模なデータセットを転送したり、GPUでトレーニングされたモデルを他の人と共有したりする方法です。
- DVCは、軽量を作成することにより、データサイエンスプロジェクトを再現可能にします パイプライン 暗黙の依存関係グラフを使用し、関連するデータとアーティファクトを体系化する。
- DVCはプラットフォームに依存しません。 すべての主要なオペレーティングシステム(Linux、macOS、およびWindows)で実行され、プログラミング言語(Python、R、Julia、シェルスクリプトなど)またはMLライブラリ(Keras、TensorFlow、PyTorch、Scipy、およびmore)プロジェクトで使用されます。
- DVCはすぐに install 特別なインフラストラクチャを必要とせず、APIや外部サービスに依存しません。 これはスタンドアロンのCLIツールです。
SageMakerの実験とDVCサンプル
以下 GitHubサンプル は、SageMaker環境内でDVCを使用する方法を示しています。 特に、デフォルトでインストールされたDVCライブラリを使用してカスタムイメージを構築し、データサイエンティストに一貫した開発環境を提供する方法について説明します。 Amazon SageMakerスタジオ、および処理とトレーニングのためにSageMakerマネージドインフラストラクチャと一緒にDVCを実行する方法。 さらに、SageMakerのトラッキング情報をDVCからのデータバージョン管理情報で強化し、Studioコンソール内で視覚化する方法を示します。
次の図は、ソリューションのアーキテクチャとワークフローを示しています。
DVCがすでにインストールされているカスタムStudioイメージを構築する
この中の GitHubリポジトリ、DVCがすでにインストールされているStudioのカスタムイメージを作成する方法について説明します。 イメージを作成してすべてのStudioユーザーが利用できるようにすることの利点は、Studioユーザーに一貫した環境を作成し、ローカルで実行できることです。 サンプルはに基づいていますが AWS クラウド9、Dockerがインストールされて実行されている限り、ローカルマシンでコンテナをビルドすることもできます。 このサンプルは、以下に基づいています ドッカーファイル & 環境.yml。 結果のDockerイメージはに保存されます Amazon エラスティック コンテナ レジストリ (Amazon EMR)AWSアカウントで。 次のコードを参照してください。
これでできます 新しいStudioドメインを作成する or 既存のStudioドメインを更新する 新しく作成されたDockerイメージにアクセスできます。
を使用しております AWSクラウド開発キット (AWS CDK)を介して次のリソースを作成します AWS CloudFormation:
- 新規または既存のStudioドメインへの適切な権限を持つSageMaker実行ロール
- DockerイメージからのSageMakerイメージとSageMakerイメージのバージョン
conda-env-dvc-kernel
以前に作成したもの - An
AppImageConfig
カーネルゲートウェイの構成方法を指定します - スタジオユーザー(
data-scientist-dvc
)正しいSageMaker実行ロールとそれに利用可能なカスタムStudioイメージを使用
詳細な手順については、を参照してください。 カスタムイメージをSageMakerStudioに関連付けます.
ラボを実行する
ラボを実行するには、次の手順を実行します。
- Studioドメインで、Studioを起動します。
data-scientist-dvc
ユーザー。 - Gitアイコンを選択してから、 リポジトリのクローンを作成する.
- リポジトリのURLを入力します(
https://github.com/aws-samples/amazon-sagemaker-experiments-dvc-demo
)と選択 クローン. - ファイルブラウザで、
amazon-sagemaker-experiments-dvc-demo
リポジトリ。 - Video Cloud Studioで
dvc_sagemaker_script_mode.ipynb
ノート。 - カスタムイメージ、イメージconda-env-dvc-kernelを選択します。
- 選択する 選択.
データバージョン管理用にDVCを構成する
データを準備するサブディレクトリsagemaker-dvc-sampleを作成します。 このサブディレクトリ内で、新しいGitリポジトリを初期化し、リモートを作成したリポジトリに設定します AWS コードコミット。 目標は、データ追跡用のDVC構成とファイルをこのリポジトリでバージョン管理することです。 ただし、Gitは、たとえばgitサブモジュールやgitサブツリーを介してサブプロジェクトを管理するネイティブ機能を提供します。このサンプルを拡張して、ワークフローに最適な前述のツールを使用できます。
この場合、SageMakerでCodeCommitを使用する主な利点は、 AWS IDおよびアクセス管理 (IAM)認証と承認用。つまり、IAMロールを使用して、クレデンシャル(またはSSHキー)をフェッチすることなくデータをプッシュおよびプルできます。 SageMaker実行ロールに適切な権限を設定すると、StudioノートブックとSageMakerトレーニングおよび処理ジョブがCodeCommitと安全に対話できるようになります。
CodeCommitをGitHub、Gitlab、Bitbucketなどの他のソース管理サービスに置き換えることはできますが、システムのクレデンシャルを処理する方法を検討する必要があります。 XNUMXつの可能性は、これらの資格情報をに保存することです AWSシークレットマネージャー 実行時にStudioノートブックおよびSageMakerの処理およびトレーニングジョブからそれらをフェッチします。
DVCとSageMakerを使用した処理とトレーニング
このセクションでは、問題に取り組むためのXNUMXつの異なるアプローチと、前に示した高レベルの概念アーキテクチャに従ってSageMakerExperimentsを使用してXNUMXつのテストを追跡する方法について説明します。
SageMaker実験をセットアップする
SageMakerでこのテストを追跡するには、実験を作成する必要があります。 また、実験内で試行を定義する必要があります。 簡単にするために、実験ではXNUMXつの試行のみを検討しますが、たとえば、さまざまなアルゴリズムをテストする場合は、実験内で任意の数の試行を行うことができます。
名前の付いた実験を作成します DEMO-sagemaker-experiments-dvc
XNUMX回の試行で、 dvc-trial-single-file
& dvc-trial-multi-files
、それぞれがデータセットの異なるバージョンを表します。
を作成しましょう DEMO-sagemaker-experiments-dvc
実験:
テスト1:トレーニングと検証のために単一のファイルを生成する
このセクションでは、生データをから直接フェッチする処理スクリプトを作成します Amazon シンプル ストレージ サービス (Amazon S3)入力として; それを処理して、トレイン、検証、およびテストのデータセットを作成します。 DVCを使用して結果をAmazonS3に保存します。 さらに、処理ジョブとトレーニングジョブを実行するとき、およびSageMaker実験を介して、SageMakerを使用してDVCによって生成された出力アーティファクトを追跡する方法を示します。
まず、作成します dvc-trial-single-file
試用して、に追加します DEMO-sagemaker-experiments-dvc
実験。 そうすることで、このテストに関連するすべてのトライアルコンポーネントを意味のある方法で整理します。
SageMaker処理ジョブでDVCを使用して、単一ファイルバージョンを作成します
このセクションでは、SageMakerのマネージドデータロード機能を使用して、AmazonS3から直接生データを入力として取得する処理スクリプトを作成します。 それを処理して、トレイン、検証、およびテストのデータセットを作成します。 DVCを使用して結果をAmazonS3に保存します。 DVCを使用してAmazonS3にデータを保存する(またはAmazon S3からデータをプルする)と、SageMakerが管理するデータ読み込み機能が失われ、処理およびトレーニングジョブのパフォーマンスとコストに影響を与える可能性があることを理解することが非常に重要です。 、特に非常に大きなデータセットを操作する場合。 さまざまなSageMakerネイティブ入力モード機能の詳細については、を参照してください。 トレーニングデータへのアクセス.
最後に、SageMaker Experimentsを介して処理ジョブを実行するときに、DVC追跡機能をSageMaker追跡機能と統合します。
処理スクリプトは、環境変数を介して渡されたDVCメタデータを格納するために作成するGitリポジトリとブランチのアドレスを想定しています。 データセット自体は、DVCによってAmazonS3に保存されます。 環境変数はSageMakerExperimentsで自動的に追跡され、トライアルコンポーネントのパラメーターに表示されますが、トライアルコンポーネントをさらに情報で強化し、トラッカーオブジェクトを使用してStudioUIで視覚化できるようにすることもできます。 この場合、トライアルコンポーネントのパラメータには次のものが含まれます。
DVC_REPO_URL
DVC_BRANCH
USER
data_commit_hash
train_test_split_ratio
前処理スクリプトはGitリポジトリのクローンを作成します。 トレイン、検証、およびテストのデータセットを生成します。 DVCを使用して同期します。 前述のように、DVCを使用する場合、ネイティブのSageMakerデータ読み込み機能を利用することはできません。 大規模なデータセットで発生する可能性のあるパフォーマンスの低下は別として、出力アーティファクトの自動追跡機能も失われます。 ただし、トラッカーとDVC Python APIのおかげで、これらの欠点を補い、実行時にそのような情報を取得して、わずかな労力でトライアルコンポーネントに保存できます。 そうすることによる付加価値は、この特定の処理ジョブに属する入力および出力アーティファクトの単一のビューを持つことです。
完全な前処理Pythonスクリプトは、 GitHubレポ.
SageMakerを使用すると、AWSインフラストラクチャで実行するように最適化されたAWSが管理するコンテナイメージで処理スクリプトを実行できます。 スクリプトに追加の依存関係が必要な場合は、 requirements.txt
ファイル。 処理ジョブを開始すると、SageMakerは pip-install
必要なすべてのライブラリ(たとえば、DVC関連のライブラリ)をインストールします。 コンテナにインストールされているすべてのライブラリをより厳密に制御する必要がある場合は、SageMakerに独自のコンテナを持ち込むことができます。 処理 とトレーニング。
これで、SageMaker処理ジョブを実行するためのすべての要素が揃いました。
- 複数の引数を処理できる処理スクリプト(
--train-test-split-ratio
)とXNUMXつの環境変数(DVC_REPO_URL
&DVC_BRANCH
) - A
requiremets.txt
file - Gitリポジトリ(CodeCommit内)
- SageMakerの実験と試行
次に、次のコマンドで処理ジョブを実行します。 preprocessing-experiment.py
スクリプト、 experiment_config
, dvc_repo_url
, dvc_branch
前に定義しました。
処理ジョブは、完了するまでに約5分かかります。 これで、単一ファイルデータセットのトライアルの詳細を表示できます。
次のスクリーンショットは、Studio内に保存されている情報を見つけることができる場所を示しています。 の値に注意してください dvc-trial-single-file
in DVC_BRANCH
, DVC_REPO_URL
, data_commit_hash
計測パラメータ タブには何も表示されないことに注意してください。
また、入力と出力の詳細にも注意してください。 アーティファクト タブには何も表示されないことに注意してください。
推定量を作成し、モデルを単一ファイルのデータバージョンに適合させます
SageMakerトレーニングジョブ内でDVC統合を使用するには、 dvc_repo_url
& dvc_branch
Estimatorオブジェクトを作成するときの環境変数として。
私たちはで訓練します dvc-trial-single-file
最初に分岐します。
DVCでデータをプルする場合、次のデータセット構造を使用します。
次に、を使用してScikit-learnEstimatorを作成します。 SageMaker Python SDK。 これにより、以下を指定できます。
- トレーニングへのエントリポイントとして実行する必要があるPythonソースファイルへのパス。
- Amazon S3およびCodeCommitデータにアクセスし、SageMaker関数を実行するためのアクセス許可を制御するIAMロール。
- トレーニングジョブの評価に使用されるメトリックを定義する辞書のリスト。
- トレーニングインスタンスの数とタイプ。 5つのml.mXNUMX.largeインスタンスを使用します。
- トレーニングに使用されるハイパーパラメータ。
- トレーニングジョブ中に使用する環境変数。 を使用しております
DVC_REPO_URL
,DVC_BRANCH
,USER
.
トレーニングを開始するために、前に定義したexperiment_configを使用してEstimatorのfitメソッドを呼び出します。
トレーニングジョブは、完了するまでに約5分かかります。 ログにはこれらの行が表示され、DVCによってプルされたファイルが示されます。
テスト2:トレーニングと検証のために複数のファイルを生成する
私たちは新しいを作成します dvc-trial-multi-files
試用して現在に追加する DEMO-sagemaker-experiments-dvc
実験。
最初の処理スクリプトとは異なり、トレーニングと検証のために元のデータセットから複数のファイルを作成し、DVCメタデータを別のブランチに保存します。
XNUMX番目の前処理Pythonスクリプトをで調べることができます GitHubの.
処理ジョブは、完了するまでに約5分かかります。 これで、マルチファイルデータセットのトライアルの詳細を表示できます。
次のスクリーンショットは、SageMakerExperiments内の保存された情報を見つけることができる場所を示しています。 トライアルコンポーネント StudioUI内のセクション。 の値に注意してください dvc-trial-multi-files
in DVC_BRANCH
, DVC_REPO_URL
, data_commit_hash
計測パラメータ タブには何も表示されないことに注意してください。
で入力と出力の詳細を確認することもできます アーティファクト タブには何も表示されないことに注意してください。
私たちは今、 dvc-trial-multi-files
ブランチ。 DVCでデータをプルする場合、次のデータセット構造を使用します。
以前と同様に、トライアル名で新しいScikit-learnEstimatorを作成します dvc-trial-multi-files
トレーニングジョブを開始します。
トレーニングジョブは、完了するまでに約5分かかります。 ノートブックに出力されるトレーニングジョブログには、DVCによってプルされたファイルを示すこれらの行が表示されます。
SageMakerでモデルをホストする
MLモデルをトレーニングした後、SageMakerを使用してデプロイできます。 一度にXNUMXつの予測を行う永続的なリアルタイムのエンドポイントをデプロイするために、 SageMakerリアルタイムホスティングサービス.
まず、Studioの開発ノートブックでローカルに最新のテストデータセットを取得します。 この目的のために、私たちは使用することができます dvc.api.read()
SageMaker処理ジョブによってAmazonS3に保存された生データをロードします。
次に、Pandasを使用してデータを準備し、テストCSVファイルを読み込んで、 predictor.predict
以前に作成したSageMakerエンドポイントをデータを使用して呼び出し、予測を取得します。
エンドポイントを削除します
エンドポイントはデプロイされた時間ごとに請求されるため、使用されなくなったら削除する必要があります(詳細については、を参照してください)。 Amazon SageMakerの価格)。 予期しないコストを回避するために、必ずエンドポイントを削除してください。
クリーンアップ
作成したすべてのリソースを削除する前に、すべてのアプリがから削除されていることを確認してください data-scientist-dvc
すべてのKernelGatewayアプリ、およびデフォルトのJupiterServerアプリを含むユーザー。
次に、次のコマンドを実行してAWSCDKスタックを破棄できます。
既存のドメインを使用した場合は、次のコマンドも実行します。
まとめ
この投稿では、SageMakerExperimentsとSageMakerの処理およびトレーニングジョブをDVCと組み合わせて使用することにより、コード、データ、アーティファクト、およびメトリック全体で実験を追跡する方法の例を説明しました。 開発ノートブックとしてStudioに必要なDVCを含むDockerイメージを作成し、DVCで処理およびトレーニングジョブを使用する方法を示しました。 XNUMXつのバージョンのデータを準備し、DVCを使用してGitでデータを管理しました。 次に、SageMaker Experimentsを使用して、XNUMXつのバージョンのデータで処理とトレーニングを追跡し、パラメーター、アーティファクト、およびメトリックの統一されたビューをXNUMX枚のガラス板に表示しました。 最後に、モデルをSageMakerエンドポイントにデプロイし、XNUMX番目のデータセットバージョンのテストデータセットを使用してSageMakerエンドポイントを呼び出し、予測を取得しました。
次のステップとして、既存のノートブックを拡張し、独自の特徴エンジニアリング戦略を導入し、DVCとSageMakerを使用して実験を実行できます。 ビルドに行きましょう!
詳細については、次のリソースを参照してください。
著者について
パオロディフランチェスコ AWSのソリューションアーキテクトです。 彼は電気通信とソフトウェアエンジニアリングの経験があります。 彼は機械学習に情熱を注いでおり、現在、特にMLOpsに関する議論において、顧客がAWSで目標を達成できるように彼の経験を活用することに注力しています。 仕事以外では、彼はサッカーをしたり読書を楽しんだりしています。
エイタンセラ アマゾンウェブサービスの機械学習スペシャリストソリューションアーキテクトです。 彼はAWSのお客様と協力してガイダンスと技術支援を提供し、AWSでの機械学習ソリューションの構築と運用を支援しています。 余暇には、ジョギングや最新の機械学習記事を読むことを楽しんでいます。