AmazonSageMakerExperimentsとAmazonSageMakerPipelines PlatoBlockchain Data Intelligenceを使用して、機械学習の旅を整理します。 垂直検索。 愛。

AmazonSageMakerExperimentsとAmazonSageMakerPipelinesで機械学習の旅を整理しましょう

機械学習(ML)モデルを構築するプロセスは、パフォーマンスが高く、展開の準備ができている候補モデルが見つかるまで繰り返されます。 データサイエンティストはそのプロセスを繰り返すため、実験を簡単に追跡して、各モデルバージョンがどのように構築され、どのように実行されたかを理解するための信頼できる方法が必要です。

アマゾンセージメーカー チームが幅広い機能を利用して、MLモデルを迅速に準備、構築、トレーニング、デプロイ、監視できるようにします。 AmazonSageMakerパイプライン モデル構築アクティビティを反復するための反復可能なプロセスを提供し、 AmazonSageMakerの実験。 デフォルトでは、すべてのSageMakerパイプラインが実験に関連付けられており、そのパイプラインのすべての実行は、その実験の試行として追跡されます。 その後、追加の手順なしで反復が自動的に追跡されます。

この投稿では、実験を追跡する自動化されたプロセスと、パイプラインに組み込まれているネイティブ機能の背後にある動機について詳しく見ていきます。

実験を整理しておくことが重要なのはなぜですか?

少し前に戻って、機械学習のために実験を整理することが重要である理由を理解してみましょう。 データサイエンティストが新しいMLの問題に取り組むとき、データの可用性からモデルのパフォーマンスの測定方法まで、さまざまな質問に答える必要があります。

最初は、プロセスは不確実性に満ちており、非常に反復的です。 その結果、この実験フェーズでは、それぞれが独自の入力(データセット、トレーニングスクリプト、ハイパーパラメーター)から作成され、独自の出力(モデルアーティファクトと評価メトリック)を生成する複数のモデルを生成できます。 その場合の課題は、各反復のこれらすべての入力と出力を追跡することです。

データサイエンティストは通常​​、データ変換、アルゴリズム、ハイパーパラメータの組み合わせがモデルの最高のパフォーマンスバージョンになるまで、さまざまなモデルバージョンをトレーニングします。 これらのユニークな組み合わせのそれぞれは、単一の実験です。 その試験で使用された入力、アルゴリズム、ハイパーパラメータの追跡可能な記録により、データサイエンスチームは自分たちのステップを簡単に再現できることがわかります。

実験を追跡するための自動化されたプロセスを導入することで、パフォーマンスの高い特定のモデルバージョンを再現および展開する機能が向上します。 パイプラインのExperimentsとのネイティブ統合により、パイプラインの実行全体で実験を自動的に追跡および管理することが容易になります。

SageMaker実験の利点

SageMaker Experimentsを使用すると、データサイエンティストはトレーニングの反復を整理、追跡、比較、評価できます。

まず、Experimentsでできることの概要から始めましょう。

  • 実験を整理する– 実験は、と呼ばれるトップレベルのエンティティを使用した実験を構成します 実験 のセットが含まれています 試験。 各トライアルには、 トライアルコンポーネント。 各トライアルコンポーネントは、データセット、アルゴリズム、およびパラメーターの組み合わせです。 実験を仮説を整理するための最上位フォルダーとして、試行を各グループテスト実行のサブフォルダーとして、試行コンポーネントをテスト実行の各インスタンスのファイルとして描くことができます。
  • 実験の追跡– 実験により、データサイエンティストは実験を追跡できます。 シンプルな設定とトラッキングSDKを介して、SageMakerジョブをトライアルに自動的に割り当てる可能性を提供します。
  • 実験の比較と評価– 実験との統合 Amazon SageMakerスタジオ データの視覚化を簡単に作成し、さまざまな試行を比較できます。 Python SDKを介してトライアルデータにアクセスし、好みのプロットライブラリを使用して独自の視覚化を生成することもできます。

Experiments APIとSDKの詳細については、次のドキュメントをお勧めします。 実験の作成 および AmazonSageMakerはPythonSDKを実験します。

さらに深く掘り下げたい場合は、 amazon-sagemaker-examples /sagemaker-experimentsGitHubリポジトリ さらなる例については。

パイプラインと実験の統合

パイプラインの一部であるモデル構築パイプラインはML専用に構築されており、他のSageMaker機能とのネイティブ統合を含むパイプラインツールを使用してモデル構築タスクを調整できるほか、SageMakerの外部で実行されるステップでパイプラインを拡張する柔軟性があります。 。 各ステップは、パイプラインが実行するアクションを定義します。 ステップ間の依存関係は、Pipelines Python SDKを使用して作成された直接非巡回グラフ(DAG)によって定義されます。 同じSDKを介してプログラムでSageMakerパイプラインを構築できます。 パイプラインが展開された後、オプションでStudio内でそのワークフローを視覚化できます。

パイプラインは、実行ごとに実験と試行を自動的に作成することにより、実験と自動的に統合されます。 パイプラインは、これらの入力の一方または両方が指定されていない限り、ステップを実行する前に、パイプラインの実行ごとに実験と試行を自動的に作成します。 パイプラインのSageMakerジョブを実行している間、パイプラインはトライアルを実験に関連付け、ジョブによって作成されたすべてのトライアルコンポーネントをトライアルに関連付けます。 独自の実験または試行をプログラムで指定すると、実験の編成方法を微調整できます。

この例で示すワークフローは、一連のステップで構成されています。入力データセットをトレーニング、テスト、および検証データセットに分割する前処理ステップ。 ハイパーパラメータを調整し、トレーニングジョブを開始して、を使用してモデルをトレーニングするための調整ステップ XGBoost組み込みアルゴリズム; 最後に、最適なトレーニング済みモデルアーティファクトからSageMakerモデルを作成するためのモデルステップ。 Pipelinesは、ネイティブでサポートされているいくつかの製品も提供しています ステップタイプ この投稿で説明されていること以外。 また、パイプラインワークフローを追跡し、メトリックと比較チャートを生成する方法についても説明します。 さらに、生成された新しいトライアルを、パイプラインが定義される前に作成された可能性のある既存の実験に関連付ける方法を示します。

SageMakerパイプラインコード

ノートブックは、 GitHubリポジトリ この投稿に関連付けられています。 パイプライン固有のコードを見て、理解を深めます。

パイプラインを使用すると、実行時にパラメーターを渡すことができます。 ここでは、事前設定されたデフォルトを使用して、実行時に処理およびトレーニングのインスタンスタイプとカウントを定義します。

base_job_prefix = "pipeline-experiment-sample"
model_package_group_name = "pipeline-experiment-model-package"

processing_instance_count = ParameterInteger(
  name="ProcessingInstanceCount", default_value=1
)

training_instance_count = ParameterInteger(
  name="TrainingInstanceCount", default_value=1
)

processing_instance_type = ParameterString(
  name="ProcessingInstanceType", default_value="ml.m5.xlarge"
)
training_instance_type = ParameterString(
  name="TrainingInstanceType", default_value="ml.m5.xlarge"
)

次に、入力データセットをダウンロードして、トレーニング、テスト、検証の各部分に分割する処理スクリプトを設定します。 を使用しております SKLearnProcessor この前処理ステップを実行するため。 そのために、処理ジョブの実行に必要なインスタンスタイプとカウントを使用してプロセッサオブジェクトを定義します。

パイプラインを使用すると、次のような実行固有の変数を使用して、プログラム的な方法でデータのバージョン管理を行うことができます。 ExecutionVariables.PIPELINE_EXECUTION_ID、パイプライン実行の一意のIDです。 たとえば、出力データセットをに格納するための一意のキーを作成できます。 Amazon シンプル ストレージ サービス (Amazon S3)特定のパイプライン実行にそれらを結び付けます。 変数の完全なリストについては、を参照してください。 実行変数.

framework_version = "0.23-1"

sklearn_processor = SKLearnProcessor(
    framework_version=framework_version,
    instance_type=processing_instance_type,
    instance_count=processing_instance_count,
    base_job_name="sklearn-ca-housing",
    role=role,
)

process_step = ProcessingStep(
    name="ca-housing-preprocessing",
    processor=sklearn_processor,
    outputs=[
        ProcessingOutput(
            output_name="train",
            source="/opt/ml/processing/train",
            destination=Join(
                on="/",
                values=[
                    "s3://{}".format(bucket),
                    prefix,
                    ExecutionVariables.PIPELINE_EXECUTION_ID,
                    "train",
                ],
            ),
        ),
        ProcessingOutput(
            output_name="validation",
            source="/opt/ml/processing/validation",
            destination=Join(
                on="/",
                values=[
                    "s3://{}".format(bucket),
                    prefix,
                    ExecutionVariables.PIPELINE_EXECUTION_ID,
                    "validation",
                ],
            )
        ),
        ProcessingOutput(
            output_name="test",
            source="/opt/ml/processing/test",
            destination=Join(
                on="/",
                values=[
                    "s3://{}".format(bucket),
                    prefix,
                    ExecutionVariables.PIPELINE_EXECUTION_ID,
                    "test",
                ],
            )
        ),
    ],
    code="california-housing-preprocessing.py",
)

次に、XGBoostモデルをトレーニングするための推定オブジェクトの作成に進みます。 XGBoostで一般的に使用されるいくつかの静的ハイパーパラメーターを設定します。

model_path = f"s3://{default_bucket}/{base_job_prefix}/ca-housing-experiment-pipeline"

image_uri = sagemaker.image_uris.retrieve(
    framework="xgboost",
    region=region,
    version="1.2-2",
    py_version="py3",
    instance_type=training_instance_type,
)

xgb_train = Estimator(
    image_uri=image_uri,
    instance_type=training_instance_type,
    instance_count=training_instance_count,
    output_path=model_path,
    base_job_name=f"{base_job_prefix}/ca-housing-train",
    sagemaker_session=sagemaker_session,
    role=role,
)

xgb_train.set_hyperparameters(
    eval_metric="rmse",
    objective="reg:squarederror",  # Define the object metric for the training job
    num_round=50,
    max_depth=5,
    eta=0.2,
    gamma=4,
    min_child_weight=6,
    subsample=0.7
)

を使用して作成したモデルのハイパーパラメータ調整を行います ContinuousParameter の範囲 lambda。 XNUMXつのメトリックを目的のメトリックとして選択すると、チューナー(ハイパーパラメーター調整ジョブを実行するインスタンス)に、この特定のメトリックに基づいてトレーニングジョブを評価することが通知されます。 チューナーは、この客観的メトリックの最適な値に基づいて最適な組み合わせを返します。これは、最適な二乗平均平方根誤差(RMSE)を最小化する最適な組み合わせを意味します。

objective_metric_name = "validation:rmse"

hyperparameter_ranges = {
    "lambda": ContinuousParameter(0.01, 10, scaling_type="Logarithmic")
}

tuner = HyperparameterTuner(estimator,
                            objective_metric_name,
                            hyperparameter_ranges,
                            objective_type=objective_type,
                            strategy="Bayesian",
                            max_jobs=10,
                            max_parallel_jobs=3)

tune_step = TuningStep(
    name="HPTuning",
    tuner=tuner_log,
    inputs={
        "train": TrainingInput(
            s3_data=process_step.properties.ProcessingOutputConfig.Outputs[
                "train"
            ].S3Output.S3Uri,
            content_type="text/csv",
        ),
        "validation": TrainingInput(
            s3_data=process_step.properties.ProcessingOutputConfig.Outputs[
                "validation"
            ].S3Output.S3Uri,
            content_type="text/csv",
        ),
    } 
)

調整ステップでは、テストされたパラメーター範囲の中から最適なモデルを決定することを目的として、複数の試行を実行します。 方法で get_top_model_s3_uri、モデルアーティファクトS50 URIの上位3のパフォーマンスバージョンをランク付けし、最もパフォーマンスの高いバージョンのみを抽出します(指定します) k=0 最善を尽くして)SageMakerモデルを作成します。

model_bucket_key = f"{default_bucket}/{base_job_prefix}/ca-housing-experiment-pipeline"
model_candidate = Model(
    image_uri=image_uri,
    model_data=tune_step.get_top_model_s3_uri(top_k=0, s3_bucket=model_bucket_key),
    sagemaker_session=sagemaker_session,
    role=role,
    predictor_cls=XGBoostPredictor,
)

create_model_step = CreateModelStep(
    name="CreateTopModel",
    model=model_candidate,
    inputs=sagemaker.inputs.CreateModelInput(instance_type="ml.m4.large"),
)

パイプラインが実行されると、パイプラインステップによって作成された各ハイパーパラメータチューニングジョブと各SageMakerジョブのトライアルコンポーネントが作成されます。

パイプラインとExperimentsの統合をさらに構成するには、 PipelineExperimentConfig オブジェクトを作成し、パイプラインオブジェクトに渡します。 XNUMXつのパラメーターは、作成される実験の名前と、パイプラインの実行全体を参照する試行を定義します。

パイプラインの実行を既存の実験に関連付ける場合は、その名前を渡すことができ、パイプラインは新しい試行をそれに関連付けます。 設定することで、パイプライン実行の実験と試行の作成を防ぐことができます pipeline_experiment_config 〜へ None.

#Pipeline experiment config
ca_housing_experiment_config = PipelineExperimentConfig(
    experiment_name,
    Join(
        on="-",
        values=[
            "pipeline-execution",
            ExecutionVariables.PIPELINE_EXECUTION_ID
        ],
    )
)

インスタンスタイプとカウントをパラメータとして渡し、次のように前の手順を順番にチェーンします。 パイプラインワークフローは、別のステップの入力であるステップの出力によって暗黙的に定義されます。

pipeline_name = f"CAHousingExperimentsPipeline"

pipeline = Pipeline(
    name=pipeline_name,
    pipeline_experiment_config=ca_housing_experiment_config,
    parameters=[
        processing_instance_count,
        processing_instance_type,
        training_instance_count,
        training_instance_type
    ],
    steps=[process_step,tune_step,create_model_step],
)

これで本格的なパイプラインが作成され、準備が整いました。 パイプラインに実行ロールを追加して開始します。 ここから、SageMaker Studio Pipelinesコンソールに移動して、すべてのステップを視覚的に追跡できます。 コンソールからリンクされたログにアクセスして、パイプラインをデバッグすることもできます。

pipeline.upsert(role_arn=sagemaker.get_execution_role())
execution = pipeline.start()

前のスクリーンショットは、正常に実行されたパイプラインを緑色で示しています。 次のコードを使用して、パイプラインの実行からXNUMXつの試行のメトリックを取得します。

# SM Pipeline injects the Execution ID into trial component names
execution_id = execution.describe()['PipelineExecutionArn'].split('/')[-1]
source_arn_filter = Filter(
    name="TrialComponentName", operator=Operator.CONTAINS, value=execution_id
)

source_type_filter = Filter(
    name="Source.SourceType", operator=Operator.EQUALS, value="SageMakerTrainingJob"
)

search_expression = SearchExpression(
    filters=[source_arn_filter, source_type_filter]
)

trial_component_analytics = ExperimentAnalytics(
    sagemaker_session=sagemaker_session,
    experiment_name=experiment_name,
    search_expression=search_expression.to_boto()
)

analytic_table = trial_component_analytics.dataframe()
analytic_table.head()

各トライアルコンポーネントのメトリックを比較します

Studioまたは他のPythonプロットライブラリを使用して、ハイパーパラメータ調整の結果をプロットできます。 これを行う両方の方法を示します。

Studioでトレーニングと評価の指標を調べる

Studioは、インタラクティブなプロットを生成できるインタラクティブなユーザーインターフェイスを提供します。 手順は次のとおりです。

  1. 選択する 実験と試行 SageMakerリソース 左側のサイドバーのアイコン。
  2. 実験を選択して開きます。
  3. 関心のあるトライアルを選択(右クリック)します。
  4. 選択する トライアルコンポーネントリストで開く.
  5. イベント シフト トレーニングジョブを表すトライアルコンポーネントを選択します。
  6. 選択する チャートを追加.
  7. 選択する 新しいチャート 分析する収集されたメトリックをプロットするようにカスタマイズします。 私たちのユースケースでは、以下を選択します。
    1. データ・タイプ選択する 要約統計量.
    2. グラフの種類選択する 散布図.
    3. X軸、選択する lambda.
    4. Y軸、選択する validation:rmse_last.

ウィンドウの下部に「8」というラベルの付いた新しいグラフが表示されます。

を押すと、トレーニングジョブを増減できます シフト よりインタラクティブな体験のために目のアイコンを選択します。

AmazonSageMakerExperimentsとAmazonSageMakerPipelines PlatoBlockchain Data Intelligenceを使用して、機械学習の旅を整理します。 垂直検索。 愛。

SageMaker実験による分析

パイプラインの実行が完了すると、トレーニング中に収集されたメトリックに関して、モデルのさまざまなバリエーションがどのように比較されるかをすばやく視覚化できます。 以前は、すべてのトライアル指標をにエクスポートしました パンダ DataFrame ExperimentAnalytics。 Matplotlibライブラリを使用して、Studioで取得したプロットを再現できます。

analytic_table.plot.scatter("lambda", "validation:rmse - Last", grid=True)

まとめ

SageMakerPipelinesとSageMakerExperimentsのネイティブ統合により、データサイエンティストは、モデル開発アクティビティ中に実験を自動的に整理、追跡、視覚化できます。 次のようなすべてのモデル開発作業を整理するための実験を作成できます。

  • 顧客離れを予測するための実験の作成など、対処しているビジネスユースケース
  • たとえば、マーケティング分析に関してデータサイエンスチームが所有する実験
  • 特定のデータサイエンスとMLプロジェクト

この投稿では、パイプラインについて詳しく説明し、パイプラインを実験と組み合わせて使用​​して、完全に自動化されたエンドツーエンドのワークフローを整理する方法を示します。

次のステップとして、これらのXNUMXつのSageMaker機能(Studio、Experiments、Pipelines)を次のMLプロジェクトに使用できます。

推奨読書


著者について

パオロディフランチェスコパオロディフランチェスコ AWSのソリューションアーキテクトです。 彼は電気通信とソフトウェアエンジニアリングの経験があります。 彼は機械学習に情熱を注いでおり、現在、特にMLOpsに関する議論において、顧客がAWSで目標を達成できるように彼の経験を活用することに注力しています。 仕事以外では、彼はサッカーをしたり読書を楽しんだりしています。

AmazonSageMakerExperimentsとAmazonSageMakerPipelines PlatoBlockchain Data Intelligenceを使用して、機械学習の旅を整理します。 垂直検索。 愛。マリオ・ブルゴイン AWSのシニアパートナーソリューションアーキテクトであり、AI / MLスペシャリストであり、MLOpsのグローバルテクノロジーリーダーです。 彼は、クラウドにAIソリューションを展開している企業の顧客やパートナーと協力しています。 彼は、ビッグデータ向けの最初の商用機械学習システムの30つを作成することから始めて、スタートアップや企業で機械学習とAIを行ったXNUMX年以上の経験があります。 マリオは自由な時間をXNUMX人のベルジアン・テルビュレンと遊んだり、家族のために夕食を作ったり、数学や宇宙論について学んだりしています。

AmazonSageMakerExperimentsとAmazonSageMakerPipelines PlatoBlockchain Data Intelligenceを使用して、機械学習の旅を整理します。 垂直検索。 愛。ガナパティクリシュナムルティ AWSのシニアMLソリューションアーキテクトです。 Ganapathiは、スタートアップ企業や企業の顧客に規範的なガイダンスを提供し、クラウドアプリケーションを大規模に設計および展開するのを支援します。 彼は機械学習を専門としており、顧客がビジネスの成果のためにAI/MLを活用できるよう支援することに重点を置いています。 仕事をしていないときは、屋外を探索したり、音楽を聴いたりするのが好きです。

AmazonSageMakerExperimentsとAmazonSageMakerPipelines PlatoBlockchain Data Intelligenceを使用して、機械学習の旅を整理します。 垂直検索。 愛。ヴァレリー・スンタキス はAWSのソリューションアーキテクトであり、ゲーム業界で働いており、パートナーとAIソリューションを展開しています。 彼女はコンピュータビジョンを中心にキャリアを築くことを目指しています。 余暇には、旅行、新しいフードスポットの発見、家のインテリアの変更に費やしています。

タイムスタンプ:

より多くの AWS機械学習