独自のトレーニング スクリプトを使用し、Amazon SageMaker PlatoBlockchain Data Intelligence のハイパーパラメータ最適化を使用して最適なモデルを自動的に選択します。垂直検索。あい。

独自のトレーニング スクリプトを使用し、Amazon SageMaker のハイパーパラメータ最適化を使用して最適なモデルを自動的に選択します

機械学習 (ML) パイプラインの成功は、使用するモデルの品質だけでなく、このモデルをトレーニングして反復する能力にも依存します。 ML モデルを改善するための重要な方法の XNUMX つは、より適切な調整可能なパラメーターを選択することです。 ハイパーパラメータ. これは、ハイパーパラメーター最適化 (HPO) として知られています。 ただし、この調整を手動で行うと、探索空間のサイズが大きくなり、場合によっては数千回のトレーニングの反復が必要になるため、面倒な場合があります。

この投稿はその方法を示しています アマゾンセージメーカー スクリプト モードを使用して独自のモデル アルゴリズムを導入できるだけでなく、組み込みの HPO アルゴリズムを使用することもできます。 選択した評価指標を簡単に出力する方法を学習します。 アマゾンクラウドウォッチからこのメトリックを抽出して、自動 HPO アルゴリズムを導くことができます。 その後、いくつかのトレーニング ジョブと関連するコンピューティング リソースを調整する HPO チューニング ジョブを作成できます。 完了すると、評価指標に従って最適なトレーニング ジョブを確認できます。

ソリューションの概要

次の手順を実行します。

  1. SageMaker スクリプトモードを使用して、AWS が管理するコンテナの上に独自のモデルを配置します。
  2. トレーニング スクリプトをリファクタリングして、評価メトリックを出力します。
  3. CloudWatch Logs でメトリクスを見つけます。
  4. CloudWatch からメトリクスを抽出します。
  5. HPO を使用して、この評価メトリックを調整して最適なモデルを選択します。
  6. HPO を監視して、最適なトレーニング ジョブを見つけます。

前提条件

このチュートリアルでは、次の前提条件を満たしている必要があります。

AWS が管理するコンテナでカスタム アルゴリズムを使用する

参照する Amazon SageMaker スクリプト モードで独自のモデルを使用する AWS 管理のコンテナを使用してカスタムモデルを SageMaker に取り込む方法の詳細については、 を参照してください。

私たちは、使用 MNISTデータセット この例では。 MNIST は、手書き数字の分類に広く使用されているデータセットであり、手書き数字のラベル付き 70,000×28 ピクセルのグレースケール画像 28 枚で構成されています。 データセットは、60,000 のトレーニング イメージと 10,000 のテスト イメージに分割され、10 クラス (各桁に XNUMX つ) が含まれます。

  1. ノートブック インスタンスを開き、次のコマンドを実行して、 mnist.py ファイル:
    !wget https://raw.githubusercontent.com/aws/amazon-sagemaker-examples/main/hyperparameter_tuning/pytorch_mnist/mnist.py

    データを取得して保存する前に、SageMaker セッションを作成しましょう。 トレーニングとモデル データに使用する S3 バケットとプレフィックスも指定する必要があります。 これは、ノートブック インスタンス、トレーニング、およびホスティングと同じリージョン内にある必要があります。 次のコードは、 デフォルトのバケット 既に存在する場合、または存在しない場合は新しいものを作成します。 また、データへのトレーニングおよびホスティング アクセスを提供するために、IAM ロール ARN を含める必要があります。 を使用しております get_execution_role() ノートブック インスタンス用に作成した IAM ロールを取得します。

  2. 次のコードでセッションを作成します。
    import sagemaker
    from sagemaker.tuner import (
    IntegerParameter,
    CategoricalParameter,
    ContinuousParameter,
    HyperparameterTuner,
    )
    session = sagemaker.Session()
    bucket = session.default_bucket()
    prefix = "sagemaker/DEMO-custom-hpo"
    role = sagemaker.get_execution_role()

  3. データを取得して、ローカル フォルダーに保存します。 /data、Amazon S3 にアップロードします。
    from torchvision.datasets import MNIST
    from torchvision import transforms
    MNIST.mirrors = ["https://sagemaker-sample-files.s3.amazonaws.com/datasets/image/MNIST/"]
    MNIST(
    "data",
    download=True,
    transform=transforms.Compose(
    [transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))]
    ),
    )
    inputs = session.upload_data(path="data", bucket=bucket, key_prefix=prefix)

    これで、PyTorch トレーニング ジョブを設定するための推定器を作成できます。 ここでは、実際のトレーニング コードには焦点を当てません (mnist.py) かなり詳しく。 このトレーニング スクリプトを簡単に呼び出してトレーニング ジョブを初期化する方法を見てみましょう。

  4. 次のコードには、カスタム トレーニング コードを含む mnist.py というエントリ ポイント スクリプトが含まれています。
    from sagemaker.pytorch import PyTorch
    estimator = PyTorch(
    entry_point="mnist.py",
    role=role,
    py_version="py3",
    framework_version="1.8.0",
    instance_count=1,
    instance_type="ml.c5.2xlarge",
    hyperparameters={"epochs": 5},
    )

  5. このトレーニング ジョブが正しく設定されていることを確認するには、トレーニング コードを使用して、Amazon S3 にアップロードしたデータに合わせてトレーニング ジョブを開始します。 SageMaker はローカル ファイル システムでデータを利用できるようにするため、トレーニング スクリプトはディスクからデータを読み取るだけです。
    estimator.fit({"training": inputs})

ただし、単一のトレーニング ジョブを作成しているわけではありません。 ハイパーパラメータ調整ジョブを使用して、SageMaker の自動モデル調整機能を使用します。 モデルのチューニングは、実際のモデル アルゴリズムに完全に依存しません。 調整できるすべてのハイパーパラメータの詳細については、次を参照してください。 SageMaker で自動モデル調整を実行する.

最適化したいハイパーパラメータごとに、以下を定義する必要があります。

  • 名前
  • タイプ (パラメーターは、整数、連続、またはカテゴリーのいずれかです)
  • 探索する値の範囲
  • スケーリング タイプ (線形、対数、逆対数、または自動)。 これにより、特定のパラメータ範囲を探索する方法を制御できます

最適化するメトリックも定義する必要があります。 トレーニング ログに表示され、正規表現を渡して抽出できる限り、任意の数値にすることができます。

mnist.py の 181 行目を見ると、ロガーに出力する方法がわかります。

logger.info(
"Test set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)n".format(
test_loss, correct, len(test_loader.dataset), 100.0 * correct / len(test_loader.dataset)
)

実際、この出力は、実行したばかりのトレーニング ジョブのログで確認できます。 ロググループを開く /aws/sagemaker/TrainingJobs CloudWatch コンソールで、ログ イベントが で始まる必要があります。 pytorch-training- タイムスタンプと生成された名前が続きます。

次のスクリーンショットは、探しているログを強調しています。

それでは、ハイパーパラメータ調整ジョブの構築を始めましょう。

  1. 前述のように、最初に次のように、オブジェクトの下でハイパーパラメーターに関するいくつかの情報を定義する必要があります。
    hyperparameter_ranges = {
    "lr": ContinuousParameter(0.001, 0.1),
    "batch-size": CategoricalParameter([32, 64, 128, 256, 512]),
    }

    ここで、0.001 つのハイパーパラメータを定義しました。 学習率 (lr) は、0.1 ~ XNUMX の範囲の連続パラメーター (したがって、連続値) です。 バッチ サイズ (バッチ サイズ) は、先行する離散値を持つカテゴリ パラメータです。

    次に、調整する目的のメトリックとその定義を指定します。 これには、以前に確認したトレーニング ジョブの CloudWatch ログからそのメトリクスを抽出するために必要な正規表現 (regex) が含まれます。 また、説明的な名前の平均テスト損失と目的のタイプを最小化として指定するため、ハイパーパラメーターの調整は、最適なハイパーパラメーター設定を検索するときに目的のメトリックを最小化しようとします。

  2. 次のコードでメトリックを指定します。
    metric_definitions = [{"Name": "average test loss", "Regex": "Test set: Average loss: ([0-9.]+)"}]
    objective_metric_name = "average test loss"
    objective_type = "Minimize"

    これで、作成する準備が整いました HyperparameterTuner 物体。 目標メトリックの名前、タイプ、および定義に加えて、 hyperparameter_ranges オブジェクトと以前に作成した推定器。 また、実行するジョブの合計数と、並行して実行する必要があるジョブの数も指定します。 ジョブの最大数を 9 に選択しましたが、最適なパフォーマンスを得るには、通常、より多くの数 (50 など) を選択します。

  3. 作ります HyperparameterTuner 次のコードを持つオブジェクト:
    tuner = HyperparameterTuner(
    estimator,
    objective_metric_name,
    hyperparameter_ranges,
    metric_definitions,
    max_jobs=9,
    max_parallel_jobs=3,
    objective_type=objective_type,
    )

チューニング ジョブを開始する前に、ハイパーパラメータの組み合わせがどのように決定されるかについて説明します。 良い結果を得るには、探索する適切な範囲を選択する必要があります。 デフォルトでは、ベイジアン検索戦略が使用されます。詳しくは、 ハイパーパラメータ調整の仕組み.

ベイジアン最適化では、ハイパーパラメータ調整は 回帰 問題。 この回帰の問題を解決するために、どのハイパーパラメーターの組み合わせが最良の結果をもたらすかを推測し、トレーニング ジョブを実行してこれらの値をテストします。 回帰を使用して、テストするハイパーパラメーター値の次のセットを選択します。 ここで検索戦略が行う明らかな悪用/探索のトレードオフがあります。 以前の最適なトレーニング ジョブをもたらした組み合わせに近いハイパーパラメータ値を選択して、パフォーマンスを段階的に向上させることができます。 または、まだ十分に理解されていない新しい範囲の値を探索しようとするために、さらに離れた値を選択する場合もあります。

ただし、他の検索戦略を指定することもできます。 SageMaker では、次の戦略がサポートされています。

  • グリッド検索 – 指定されたハイパーパラメーターの範囲内で可能なすべての組み合わせを試行します。
  • ランダム検索 – 指定された値の範囲内でランダムな組み合わせを試行します。 以前のトレーニング ジョブの結果に依存しないため、チューニングのパフォーマンスに影響を与えることなく、最大数の同時トレーニング ジョブを実行できます。
  • ハイパーバンド検索 – トレーニング ジョブの中間結果と最終結果の両方を使用して、エポックを十分に活用されたハイパーパラメータ構成に再割り当てし、パフォーマンスが低いものを自動的に停止します。

で説明されているように、独自のアルゴリズムを持ち込むこともできます。 AmazonSageMakerに独自のハイパーパラメータ最適化アルゴリズムを導入する.

  1. 次に、チューナー オブジェクト自体 (推定器ではない) でトレーニングを開始し、次を呼び出します。 .fit() S3 パスをトレーニングおよびテスト データセットに渡します。
    tuner.fit({"training": inputs})

次に、SageMaker コンソールでチューニングジョブの進行状況を追跡できます。 ハイパーパラメータ調整ジョブ ページ。 チューニング ジョブは、個々のトレーニングの実行とそれに関連するコンピューティングを調整することで、必要な基礎となるコンピューティング リソースをスピンアップします。

その後、完了した、または進行中のすべての個々のトレーニング ジョブを、関連する目標メトリック値とともに簡単に確認できます。 次のスクリーンショットでは、トレーニング ジョブの最初のバッチが完了したことを確認できます。これには、指定に従って合計 XNUMX つのジョブが含まれます。 max_parallel_jobs 値 3. 完了すると、最適なトレーニング ジョブ (平均的なテスト損失を最小限に抑えるジョブ) を見つけることができます。 最高のトレーニングジョブ タブには何も表示されないことに注意してください。

トレーニング ジョブのリストのスクリーンショット

クリーンアップ

今後料金が発生しないようにするには、初期化したリソースを削除してください。 これらは、S3 バケット、IAM ロール、および SageMaker ノートブック インスタンスです。

まとめ

この投稿では、独自のモデルを SageMaker に取り込み、自動化されたハイパーパラメータ最適化を使用して最適なトレーニング ジョブを選択する方法について説明しました。 人気のある MNIST データセットを使用して、HPO ジョブが最適化する必要があるカスタム目標メトリックを指定する方法を調べました。 この客観的メトリクスを CloudWatch から抽出し、さまざまなハイパーパラメータ値を指定することで、HPO ジョブを簡単に起動して監視できます。

詳細情報が必要な場合、またはお客様が HPO をどのように使用しているかを確認したい場合は、次を参照してください。 Amazon SageMaker 自動モデルチューニング. 今すぐ SageMaker で自動化されたハイパーパラメータ最適化のために独自のモデルを適応させてください。


著者,

独自のトレーニング スクリプトを使用し、Amazon SageMaker PlatoBlockchain Data Intelligence のハイパーパラメータ最適化を使用して最適なモデルを自動的に選択します。垂直検索。あい。サム・プライス アマゾン ウェブ サービスで AI/ML とデータ分析を専門とするプロフェッショナル サービス コンサルタントです。 彼は、困難な問題を解決するために、ヘルスケアおよびライフ サイエンスの公共部門の顧客と密接に協力しています。 これを行っていないとき、Sam はギターやテニスを楽しんだり、お気に入りのインディー バンドを見たりしています。

タイムスタンプ:

より多くの AWS機械学習