ローカルコードを SageMaker トレーニングジョブとして実行する - Amazon SageMaker

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

ローカルコードを SageMaker トレーニングジョブとして実行する

ローカル機械学習 (ML) Python コードは、大規模な単一ノードの Amazon SageMaker トレーニングジョブまたは複数の並列ジョブとして実行できます。これは、次のコードサンプルに示すように、コードに @remote デコレータで注釈を付けることで実現できます。リモート関数では複数のインスタンスにわたる分散トレーニングがサポートされていません。

@remote(**settings) def divide(x, y): return x / y

SageMaker Python SDK は、既存のワークスペース環境と関連するデータ処理コードとデータセットを SageMaker 、トレーニングプラットフォームで実行される SageMaker トレーニングジョブに自動的に変換します。また、永続キャッシュ機能を有効化して、以前にダウンロードした依存関係パッケージをキャッシュすることで、ジョブのスタートアップレイテンシーをさらに短縮することもできます。このジョブレイテンシーの短縮は、 SageMaker マネージドウォームプールのみを使用した場合のレイテンシーの削減よりも大きくなります。詳細については、「永続キャッシュを使用する」を参照してください。

注記

分散トレーニングジョブは、リモート関数ではサポートされていません。

以下のセクションでは、ローカル機械学習コードに @remote デコレータで注釈を付け、ユースケースに合わせてエクスペリエンスを調整する方法を示します。これには、環境のカスタマイズと SageMaker Experiments との統合が含まれます。

環境をセットアップする

次の 3 つのオプションから 1 つ選択して、環境をセットアップします。

ノートブックを作成し、 SageMaker Studio Classic イメージで使用可能なイメージをアタッチすることで、 SageMaker Studio Classic SageMaker からローカル ML コードに注釈を付けて実行できます。次の手順は、 SageMaker ノートブックの作成、 SageMaker Python SDK のインストール、コードの注釈を デコレータで作成するのに役立ちます。

  1. ノートブックを作成し、次のように SageMaker Studio Classic SageMaker にイメージをアタッチします。

    1. 「Amazon SageMaker デベロッパーガイド」の「Amazon Studio Classic を起動する」の手順に従います。 SageMaker

    2. 左のナビゲーションペインで [Studio] を選択します。新しいウィンドウが開きます。

    3. [使用を開始] ダイアログボックスで、下向き矢印からユーザープロファイルを選択します。新しいウィンドウが開きます。

    4. Open Studio Classic を選択します

    5. メインワークエリアから [ランチャーを開きます] を選択します。新しいページが開きます。

    6. メインワークエリアから [ノートブックの作成] を選択します。

    7. [環境の変更] ダイアログボックスの [イメージ] の横にある下向き矢印から [Base Python 3.0] を選択します。

      @remote デコレータは、 SageMaker Studio Classic ノートブックにアタッチされたイメージを自動的に検出し、それを使用してトレーニングジョブを実行します SageMaker。image_uri がデコレータまたは設定ファイルの引数として指定されている場合、検出されたイメージの代わりに image_uri で指定された値が使用されます。

      Studio Classic で SageMakerノートブックを作成する方法の詳細については、「Amazon Studio Classic ノートブックを作成または開く」の「ファイルメニューからノートブックを作成する」セクションを参照してください。 SageMaker

      使用可能なイメージのリストについては、「Supported Docker images」を参照してください。

  2. SageMaker Python SDK をインストールします。

    Studio Classic Notebook 内の @remote 関数でコードに SageMaker注釈を付けるには、 SageMaker Python SDK がインストールされている必要があります。次のコード例に示すように、 SageMaker Python SDK をインストールします。

    !pip install sagemaker
  3. @remote デコレータを使用して、 SageMaker トレーニングジョブで関数を実行します。

    ローカル ML コードを実行するには、まず依存関係ファイルを作成して、ローカルコード SageMaker の場所を指示します。そのためには、以下の手順を実行します。

    1. SageMaker Studio Classic Launcher のメインワークエリアのユーティリティとファイル で、テキストファイル を選択します。これにより、untitled.txt. と呼ばれるテキストファイルを含む新しいタブが開きます。

      SageMaker Studio Classic ユーザーインターフェイス (UI) の詳細については、「Amazon SageMaker Studio Classic UI の概要」を参照してください。

    2. untitled.txt requirements.txt に名前変更します。

    3. コードに必要なすべての依存関係を SageMaker ライブラリとともに に追加しますrequirements.txt

      divide 関数例の requirements.txt の最小限のコードサンプルを以下のセクションに示します。

      sagemaker
    4. 以下のように依存関係ファイルを渡して、リモートデコレータを使用してコードを実行します。

      from sagemaker.remote_function import remote @remote(instance_type="ml.m5.xlarge", dependencies='./requirements.txt') def divide(x, y): return x / y divide(2, 3.0)

      その他のコードサンプルについては、サンプルノートブック quick_start.ipynb を参照してください。

      SageMaker Studio Classic ノートブックをすでに実行していて、「2」の説明に従って Python SDK をインストールしている場合。 SageMaker Python SDK をインストールします。カーネルを再起動する必要があります。詳細については、「Amazon SageMaker デベロッパーガイド」の SageMaker「Studio Classic ノートブックツールバーを使用する」を参照してください。

SageMaker ノートブックインスタンスからローカル ML コードに注釈を付けることができます。次の手順は、カスタムカーネルを使用してノートブックインスタンスを作成し、 SageMaker Python SDK をインストールし、コードに デコレータで注釈を付ける方法を示しています。

  1. カスタム conda カーネルを使用してノートブックインスタンスを作成します。

    ローカル ML コードに @remote デコレータをアノテーションして、 SageMaker トレーニングジョブ内で使用できます。まず、Python バージョン 3.7 以降、最大 3.10.x のカーネルを使用するようにノートブック SageMaker インスタンスを作成してカスタマイズする必要があります。そのためには、以下の手順を実行します。

    1. https://console.aws.amazon.com/sagemaker/ で SageMaker コンソールを開きます。

    2. 左側のナビゲーションパネルで、[ノートブック] を選択してオプションを展開します。

    3. 展開されたオプションから [ノートブックインスタンス] を選択します。

    4. [ノートブックインスタンスの作成] ボタンを選択します。新しいページが開きます。

    5. ノートブックインスタンス名には、スペースなしで 63 文字以内の名前を入力します。有効な文字は、A~Za~z0~9、および .:+=@ _%- (ハイフン) です。

    6. [ノートブックインスタンス設定] ダイアログボックスで、[追加設定] の横にある右矢印を展開します。

    7. [ライフサイクル設定 - オプション] で、下向き矢印を展開して [新しいライフサイクル設定を作成する] を選択します。新しいダイアログボックスが開きます。

    8. [名前] で、構成設定の名前を入力します。

    9. [スクリプト] ダイアログボックスの [ノートブックの開始] タブで、テキストボックスの既存の内容を次のスクリプトに置き換えます。

      #!/bin/bash set -e sudo -u ec2-user -i <<'EOF' unset SUDO_UID WORKING_DIR=/home/ec2-user/SageMaker/custom-miniconda/ source "$WORKING_DIR/miniconda/bin/activate" for env in $WORKING_DIR/miniconda/envs/*; do BASENAME=$(basename "$env") source activate "$BASENAME" python -m ipykernel install --user --name "$BASENAME" --display-name "Custom ($BASENAME)" done EOF echo "Restarting the Jupyter server.." # restart command is dependent on current running Amazon Linux and JupyterLab CURR_VERSION_AL=$(cat /etc/system-release) CURR_VERSION_JS=$(jupyter --version) if [[ $CURR_VERSION_JS == *$"jupyter_core : 4.9.1"* ]] && [[ $CURR_VERSION_AL == *$" release 2018"* ]]; then sudo initctl restart jupyter-server --no-wait else sudo systemctl --no-block restart jupyter-server.service fi
    10. [スクリプト] ダイアログボックスの [ノートブックを作成] タブで、テキストボックスの既存の内容を次のスクリプトに置き換えます。

      #!/bin/bash set -e sudo -u ec2-user -i <<'EOF' unset SUDO_UID # Install a separate conda installation via Miniconda WORKING_DIR=/home/ec2-user/SageMaker/custom-miniconda mkdir -p "$WORKING_DIR" wget https://repo.anaconda.com/miniconda/Miniconda3-4.6.14-Linux-x86_64.sh -O "$WORKING_DIR/miniconda.sh" bash "$WORKING_DIR/miniconda.sh" -b -u -p "$WORKING_DIR/miniconda" rm -rf "$WORKING_DIR/miniconda.sh" # Create a custom conda environment source "$WORKING_DIR/miniconda/bin/activate" KERNEL_NAME="custom_python310" PYTHON="3.10" conda create --yes --name "$KERNEL_NAME" python="$PYTHON" pip conda activate "$KERNEL_NAME" pip install --quiet ipykernel # Customize these lines as necessary to install the required packages EOF
    11. ウィンドウの右下にある [構成を作成] ボタンを選択します。

    12. ウィンドウの右下にある [ノートブックインスタンスの作成] ボタンを選択します。

    13. ノートブックインスタンスのステータス保留中から に変わるまで待ちますInService

  2. ノートブックインスタンスで Jupyter Notebook を作成します。

    次の手順は、新しく作成した SageMaker インスタンスで Python 3.10 を使用して Jupyter Notebook を作成する方法を示しています。

    1. 前のステップのノートブックインスタンスのステータスが になったらInService、次の操作を行います。

      1. 新しく作成したノートブックインスタンスの [名前] を含んでいる行の [アクション][Jupyter を開く] を選択します。新しい Jupyter サーバーが開きます。

    2. Jupyter サーバーで、右上のメニューから [新規] を選択します。

    3. 下向き矢印から [conda_custom_python310] を選択します。Python 3.10 カーネルを使用する新しい Jupyter Notebook が作成されます。この新しい Jupyter Notebook は、ローカルの Jupyter Notebook と同様に使用できるようになりました。

  3. SageMaker Python SDK をインストールします。

    仮想環境が実行されたら、次のコード例を使用して SageMaker Python SDK をインストールします。

    !pip install sagemaker
  4. @remote デコレータを使用して、 SageMaker トレーニングジョブで関数を実行します。

    SageMaker ノートブック内の @remote デコレータを使用してローカル ML コードに注釈を付けると、 SageMaker トレーニングによってコードの関数が自動的に解釈され、 SageMaker トレーニングジョブとして実行されます。次の手順を実行して、ノートブックを設定します。

    1. ステップ 1、カスタムカーネル を使用してノートブックインスタンスを作成するで作成したノートブックインスタンスから SageMaker、ノートブックメニューのカーネル名を選択します。 SageMaker

      詳細については、「イメージまたはカーネルの変更」を参照してください。

    2. 下向き矢印から、3.7 以降のバージョンの Python を使用するカスタム conda カーネルを選択します。

      例として、conda_custom_python310 を選択すると Python 3.10 用のカーネルが選択されます。

    3. [選択] を選びます。

    4. カーネルのステータスがアイドル (カーネルが起動したことを示す) になるのを待ちます。

    5. Jupyter サーバーホームで、右上のメニューから [新規] を選択します。

    6. 下矢印の横で [テキストファイル] を選択します。untitled.txt. という名前の新しいテキストファイルが作成されます。

    7. untitled.txt から requirements.txt に名前を変更し、コードに必要な依存関係を sagemaker と一緒に追加します。

    8. 次に示すように、依存関係ファイルを渡して、リモートデコレータを使用してコードを実行します。

      from sagemaker.remote_function import remote @remote(instance_type="ml.m5.xlarge", dependencies='./requirements.txt') def divide(x, y): return x / y divide(2, 3.0)

      その他のコードサンプルについては、サンプルノートブック quick_start.ipnyb を参照してください。

任意のローカル IDE 内でローカル機械学習コードに @remote デコレータで注釈を付けることができます。以下の手順は、必要な前提条件、Python SDK のインストール方法、およびコードに @remote デコレータで注釈を付ける方法を示しています。

  1. AWS Command Line Interface (AWS CLI) を設定し、次のようにロールを作成して、前提条件をインストールします。

  2. PyCharm または のいずれかを使用しconda、Python バージョン 3.7 以降、最大 3.10.x を使用して仮想環境を作成します。

    • PyCharm 次のように を使用して仮想環境を設定します。

      1. メインメニューから [ファイル] を選択します。

      2. [New Project] (新しいプロジェクト) を選択します。

      3. [使用する新しい環境] の下向き矢印から [Conda] を選択します。

      4. [Python のバージョン] フィールドで、下向き矢印を使用して 3.7 以降の Python のバージョンを選択します。リストから 3.10.x まで選択できます。

        Python の新しい環境が Conda と選択され、Python バージョンが 3.10 と選択されました。
    • Anaconda がインストールされている場合、以下のように conda を使用して仮想環境をセットアップできます。

      • Anaconda Prompt のターミナルインターフェースを開きます。

      • Python バージョン 3.7 以降 (3.10x まで) を使用して、新しい conda 環境を作成し、アクティブ化します。次のコードサンプルは、Python バージョン 3.10 を使用して conda 環境を作成する方法を示しています。

        conda create -n sagemaker_jobs_quick_start python=3.10 pip conda activate sagemaker_jobs_quick_start
  3. SageMaker Python SDK をインストールします。

    任意の IDE からコードをパッケージ化するには、Python 3.7 以降 (最大 3.10x) を使用して仮想環境を設定する必要があります。また、互換性があるコンテナイメージも必要です。次のコード例を使用して SageMaker Python SDK をインストールします。

    pip install sagemaker
  4. @remote デコレータ内部でコードをラップします。 SageMaker Python SDK はコードの関数を自動的に解釈し、トレーニングジョブとして SageMaker実行します。次のコード例は、必要なライブラリをインポートし、 SageMaker セッションを設定し、@remote デコレータを使用して関数に注釈を付ける方法を示しています。

    必要な依存関係を直接指定するか、アクティブな conda 環境からの依存関係を使用してコードを実行できます。

    • 依存関係を直接指定するには、次の操作を行います。

      • コードがある作業ディレクトリに requirements.txt ファイルを作成します。

      • SageMaker ライブラリとともに、コードに必要な依存関係をすべて追加します。次のセクションでは、divide 関数例の requirements.txt の最小限のコードサンプルを示します。

        sagemaker
      • 依存関係ファイルを渡し、@remote デコレータを使用してコードを実行します。次のコード例では、 をジョブの実行 SageMaker に使用する AWS Identity and Access Management (IAM) ロール ARN The IAM role nameに置き換えます。

        import boto3 import sagemaker from sagemaker.remote_function import remote sm_session = sagemaker.Session(boto_session=boto3.session.Session(region_name="us-west-2")) settings = dict( sagemaker_session=sm_session, role=<The IAM role name>, instance_type="ml.m5.xlarge", dependencies='./requirements.txt' ) @remote(**settings) def divide(x, y): return x / y if __name__ == "__main__": print(divide(2, 3.0))
    • アクティブな conda 環境からの依存関係を使用するには、以下に示すように dependencies パラメータの値 auto_capture を使用します。

      import boto3 import sagemaker from sagemaker.remote_function import remote sm_session = sagemaker.Session(boto_session=boto3.session.Session(region_name="us-west-2")) settings = dict( sagemaker_session=sm_session, role=<The IAM role name>, instance_type="ml.m5.xlarge", dependencies="auto_capture" ) @remote(**settings) def divide(x, y): return x / y if __name__ == "__main__": print(divide(2, 3.0))
      注記

      Jupyter Notebook 内に以前のコードを実装することもできます。 PyCharm Professional Edition は Jupyter をネイティブにサポートしています。詳細については、 のドキュメントの「Jupyter Notebook のサポート PyCharm」を参照してください。