翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ローカルコードを 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 のインストール、およびコードへのデコレータでの注釈付けに役立ちます。
-
次のように、SageMaker ノートブックを作成し、SageMaker Studio Classic にイメージをアタッチします。
-
Amazon SageMakerデベロッパーガイド」の「Amazon SageMaker Studio Classic を起動する」の手順に従います。 Amazon SageMaker
-
左のナビゲーションペインで [Studio] を選択します。新しいウィンドウが開きます。
-
[使用を開始] ダイアログボックスで、下向き矢印からユーザープロファイルを選択します。新しいウィンドウが開きます。
-
[Studio Classic を開く] を選択します。
-
メインワークエリアから [ランチャーを開きます] を選択します。新しいページが開きます。
-
メインワークエリアから [ノートブックの作成] を選択します。
-
[環境の変更] ダイアログボックスの [イメージ] の横にある下向き矢印から [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」を参照してください。
-
-
SageMaker Python SDK をインストールします。
SageMaker Studio Classic ノートブック内のコードに @remote 関数で注釈を付けるには、SageMaker Python SDK がインストールされている必要があります。次のコードサンプルに示すように、SageMaker Python SDK をインストールします。
!pip install sagemaker
-
@remote デコレータを使用して、SageMaker トレーニングジョブで関数を実行します。
ローカル ML コードを実行するには、まず依存関係ファイルを作成して、ローカルコードの場所を SageMaker AI に指示します。そのためには、以下の手順を実行します。
-
SageMaker Studio Classic Launcher のメインワークエリアの [ユーティリティとファイル] で、[テキストファイル] を選択します。これにより、
untitled.txt.
と呼ばれるテキストファイルを含む新しいタブが開きます。SageMaker Studio ユーザーインターフェイス (UI) の詳細については、「Amazon SageMaker Studio Classic UI Overview」を参照してください。
-
untitled.txt
をrequirements.txt
に名前変更します。 -
SageMaker AI ライブラリとともに、コードに必要なすべての依存関係を に追加します
requirements.txt
。divide
関数例のrequirements.txt
の最小限のコードサンプルを以下のセクションに示します。sagemaker
-
以下のように依存関係ファイルを渡して、リモートデコレータを使用してコードを実行します。
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 のインストール、およびコードへのデコレータでの注釈付けに役立ちます。
-
カスタム
conda
カーネルを使用してノートブックインスタンスを作成します。ローカル機械学習コードに @remote デコレータで注釈を付け、SageMaker のトレーニングジョブ内で使用できます。まず、SageMaker ノートブックインスタンスを作成してカスタマイズし、Python バージョン 3.7 以降 (3.10.x まで) のカーネルを使用する必要があります。そのためには、以下の手順を実行します。
-
https://console.aws.amazon.com/sagemaker/
で SageMaker AI コンソールを開きます。 -
左側のナビゲーションパネルで、[ノートブック] を選択してオプションを展開します。
-
展開されたオプションから [ノートブックインスタンス] を選択します。
-
[ノートブックインスタンスの作成] ボタンを選択します。新しいページが開きます。
-
ノートブックインスタンス名には、スペースなしで 63 文字以内の名前を入力します。有効な文字は、A~Z、a~z、0~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
-
[スクリプト] ダイアログボックスの [ノートブックを作成] タブで、テキストボックスの既存の内容を次のスクリプトに置き換えます。
#!/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
-
ウィンドウの右下にある [構成を作成] ボタンを選択します。
-
ウィンドウの右下にある [ノートブックインスタンスの作成] ボタンを選択します。
-
ノートブックインスタンスの [ステータス] が [保留中] から [InService] に変わるまで待ちます。
-
-
ノートブックインスタンスで Jupyter Notebook を作成します。
以下の手順は、新しく作成した SageMaker インスタンスで Python 3.10 を使用して Jupyter Notebook を作成する方法を示しています。
-
前のステップのノートブックインスタンスの [ステータス] が [InService] になったら、次の操作を行います。
-
新しく作成したノートブックインスタンスの [名前] を含んでいる行の [アクション] で [Jupyter を開く] を選択します。新しい Jupyter サーバーが開きます。
-
-
Jupyter サーバーで、右上のメニューから [新規] を選択します。
-
下向き矢印から [conda_custom_python310] を選択します。Python 3.10 カーネルを使用する新しい Jupyter Notebook が作成されます。この新しい Jupyter Notebook は、ローカルの Jupyter Notebook と同様に使用できるようになりました。
-
-
SageMaker Python SDK をインストールします。
仮想環境が実行されたら、次のコードサンプルを使用して SageMaker Python SDK をインストールします。
!pip install sagemaker
-
@remote デコレータを使用して、SageMaker トレーニングジョブで関数を実行します。
SageMaker ノートブック内の @remote デコレータでローカル機械学習コードに注釈を付けると、SageMaker トレーニングでコードの機能が自動的に解釈され、SageMaker トレーニングジョブとして実行されます。次の手順を実行して、ノートブックを設定します。
-
ステップ 1「カスタムカーネルを使用して SageMaker ノートブックインスタンスを作成します」で作成した SageMaker ノートブックインスタンスのノートブックメニューでカーネル名を選択します。
詳細については、「イメージまたはカーネルの変更」を参照してください。
-
下向き矢印から、3.7 以降のバージョンの Python を使用するカスタム
conda
カーネルを選択します。例として、
conda_custom_python310
を選択すると Python 3.10 用のカーネルが選択されます。 -
[選択] を選びます。
-
カーネルのステータスがアイドル (カーネルが起動したことを示す) になるのを待ちます。
-
Jupyter サーバーホームで、右上のメニューから [新規] を選択します。
-
下矢印の横で [テキストファイル] を選択します。
untitled.txt.
という名前の新しいテキストファイルが作成されます。 -
untitled.txt
からrequirements.txt
に名前を変更し、コードに必要な依存関係をsagemaker
と一緒に追加します。 -
次に示すように、依存関係ファイルを渡して、リモートデコレータを使用してコードを実行します。
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 デコレータで注釈を付ける方法を示しています。
-
次のように AWS Command Line Interface (AWS CLI) を設定し、ロールを作成して、前提条件をインストールします。
-
Amazon SageMaker AI AWS CLI の前提条件の設定のAmazon SageMaker AI ドメインにオンボードします。
-
SageMaker AI ロールの実行ロールの作成セクションに従って IAM ロールを作成します。 SageMaker
-
-
PyCharm または
conda
を使用するとともに、Python バージョン 3.7 以降 (3.10.x まで) を使用して、仮想環境を作成します。-
以下のように PyCharm を使用して仮想環境を設定します。
-
メインメニューから [ファイル] を選択します。
-
[新しいプロジェクト] を選択します。
-
[使用する新しい環境] の下向き矢印から [Conda] を選択します。
-
[Python のバージョン] フィールドで、下向き矢印を使用して 3.7 以降の Python のバージョンを選択します。リストから 3.10.x まで選択できます。
-
-
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 activatesagemaker_jobs_quick_start
-
-
-
SageMaker Python SDK をインストールします。
任意の IDE からコードをパッケージ化するには、Python 3.7 以降 (最大 3.10x) を使用して仮想環境を設定する必要があります。また、互換性があるコンテナイメージも必要です。次のコードサンプルを使用して、SageMaker Python SDK をインストールします。
pip install sagemaker
-
@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
」を参照してください。
-