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

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

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

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

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

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

注記

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

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

環境をセットアップする

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

SageMaker ノートブックを作成し、SageMaker Studio Classic イメージで利用可能なイメージを添付することで、SageMaker Studio Classic からローカル機械学習コードに注釈を付けて実行できます。以下の手順は、SageMaker ノートブックの作成、SageMaker Python SDK のインストール、およびコードへのデコレータでの注釈付けに役立ちます。

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

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

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

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

    4. [Studio Classic を開く] を選択します。

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

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

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

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

      SageMaker Studio Classic でノートブックを作成する方法の詳細については、「Create or Open an Amazon SageMaker Studio Classic Notebook」の「Create a Notebook from the File Menu」セクションを参照してください。

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

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

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

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

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

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

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

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

    3. SageMaker AI ライブラリとともに、コードに必要なすべての依存関係を に追加します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. Install the SageMaker Python SDK」の指示に従って Python SDK をインストールする場合は、カーネルを再起動する必要があります。詳細については、「Amazon SageMaker AI デベロッパーガイド」の「SageMaker Studio Classic ノートブックツールバーを使用する」を参照してください。 Amazon SageMaker

SageMaker ノートブックインスタンスからローカル機械学習コードに注釈を付けることができます。以下の手順は、カスタムカーネルを使用したノートブックインスタンスの作成、SageMaker Python SDK のインストール、およびコードへのデコレータでの注釈付けに役立ちます。

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

    ローカル機械学習コードに @remote デコレータで注釈を付け、SageMaker のトレーニングジョブ内で使用できます。まず、SageMaker ノートブックインスタンスを作成してカスタマイズし、Python バージョン 3.7 以降 (3.10.x まで) のカーネルを使用する必要があります。そのためには、以下の手順を実行します。

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

    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 デコレータでローカル機械学習コードに注釈を付けると、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. [新しいプロジェクト] を選択します。

      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 版は Jupyter をネイティブにサポートしています。詳細については、PyCharm のドキュメントの「Jupyter notebook support」を参照してください。