「Amazon SageMakerのトレーニングワークロードで、@remoteデコレータを使用してプライベートリポジトリにアクセスする」
「Amazon SageMakerのトレーニングワークロードで、@remoteデコレータを使用してプライベートリポジトリにアクセスする」
機械学習(ML)のワークロードを本番環境で実行しようとする顧客がますます増えるにつれて、MLコードの開発ライフサイクルを短縮するための組織内での取り組みが活発化しています。多くの組織では、プロダクションレディなスタイル(Pythonのメソッドやクラスを使用した形式)でMLコードを記述することを好みます。このスタイルは、エクスプローラトリなスタイル(メソッドやクラスを使用せずにコードを記述する)とは異なり、プロダクションレディなコードをより迅速に出荷できるからです。
Amazon SageMakerを使用すると、Pythonのコードに@remoteデコレータを使用してSageMakerトレーニングジョブを実行できます。@remoteデコレータを使用してPythonコードに注釈を付けるだけで、SageMaker Python SDKが既存のワークスペース環境と関連するデータ処理コードおよびデータセットをSageMakerトレーニングプラットフォームで実行するSageMakerトレーニングジョブに自動的に変換します。
ローカルでPython関数を実行する場合、通常はいくつかの依存関係が必要ですが、これらはローカルのPythonランタイム環境には含まれていない場合もあります。これらの依存関係は、pipやcondaなどのパッケージおよび依存関係管理ツールを使用してインストールできます。
ただし、銀行、保険、医療などの規制された業界で運営されている組織は、厳格なデータプライバシーやネットワーキングの制御が行われている環境で運営されています。これらの制御は、彼らの環境でインターネットアクセスを利用できないようにすることをしばしば義務付けています。この制限の理由は、出口および入口トラフィックを完全に制御し、不正な行為者がネットワークを介して検証されていない情報を送受信する可能性を減らすためです。これは監査と産業コンプライアンスのルールの一部として、ネットワークの隔離を行うこともしばしば義務付けられます。MLの場合、これによりデータサイエンティストはPyPI、Anaconda、またはConda-Forgeなどの公共のリポジトリからパッケージをダウンロードすることが制限されます。
データサイエンティストが環境の制約を尊重しながら選択したツールにアクセスできるようにするため、組織はしばしば自分たちの環境にホストされたプライベートパッケージリポジトリを設定します。AWSでプライベートパッケージリポジトリを設定する方法はいくつかあります:
- AWS CodeArtifactを使用する
- Amazon Simple Storage(Amazon S3)を使用する
- Amazon Elastic Compute Cloud(Amazon EC2)でリポジトリをホストする
この記事では、最初のオプションであるCodeArtifactの使用に焦点を当てます。
ソリューションの概要
次のアーキテクチャ図は、ソリューションのアーキテクチャを示しています。
ソリューションの実装手順は次のとおりです。
- AWS CloudFormationテンプレートを使用して、インターネットアクセスのない仮想プライベートクラウド(VPC)をセットアップします。
- 2番目のCloudFormationテンプレートを使用して、CodeArtifactをプライベートなPyPIリポジトリとしてセットアップし、VPCへの接続性を提供し、Amazon SageMaker Studio環境をプライベートなPyPIリポジトリを使用するように設定します。
- オープンソースのSageMaker Python SDKの@remoteデコレータを使用して、MNISTデータセットに基づく分類モデルをトレーニングします。すべての依存関係はプライベートなPyPIリポジトリからダウンロードされます。
この記事では、SageMaker Studioを使用することはオプションです。お好みの統合開発環境(IDE)で作業することもできます。ただし、AWS Command Line Interface(AWS CLI)の資格情報を正しく設定する必要があります。詳細については、「AWS CLIの設定」を参照してください。
前提条件
このソリューションの一環として作成されるリソースを管理する権限を持つAWS Identity and Access Management(IAM)ロールを持つAWSアカウントが必要です。詳細については、「AWSアカウントの作成」を参照してください。
インターネット接続のないVPCのセットアップ
vpc.yamlテンプレートを使用して新しいCloudFormationスタックを作成します。このテンプレートは次のリソースを作成します:
- インターネット接続のない2つの可用性ゾーンにまたがる2つのプライベートサブネットを持つVPC
- Amazon S3にアクセスするためのゲートウェイVPCエンドポイント
- SageMaker、CodeArtifact、およびその他のいくつかのサービスへの接続を可能にするインターフェースVPCエンドポイント。これにより、VPC内のリソースがAWS PrivateLinkを介してAWSサービスに接続できます
「No-Internet」などのスタック名を指定し、スタックの作成プロセスを完了します。
スタックの作成プロセスが完了するまでお待ちください。
VPCを使用してプライベートリポジトリとSageMaker Studioをセットアップする
次のステップは、sagemaker_studio_codeartifact.yamlテンプレートを使用して別のCloudFormationスタックを展開することです。このテンプレートは以下のリソースを作成します:
- 前のステップで作成されたVPCに接続されたSageMakerドメイン
- CodeArtifactドメイン
- 上流の公開PyPIリポジトリに接続されたCodeArtifactプライベートリポジトリ
スタック名を指定し、CodeArtifactドメイン名、プライベートリポジトリ名、SageMaker Studioのユーザープロファイル名、および上流の公開PyPIリポジトリの名前のデフォルト値を保持するか、パラメータを調整してください。また、前のステップで作成したVPCスタック名も指定する必要があります。
スタックの作成が完了すると、SageMakerコンソールでSageMakerドメインが表示されるはずです。
SageMaker Studioでインターネット接続が利用できないことを確認するために、SageMaker Studioを起動します。[ファイル]、[新規作成]、[ターミナル]を選択してターミナルを起動し、任意のインターネットリソースにcurlを試みます。次のスクリーンショットに示すように、接続に失敗するはずです。
プライベートPyPIリポジトリを使用して@remoteデコレーターを使った画像分類器のトレーニング
このセクションでは、@remoteデコレーターを使用して、MNIST画像分類モデルを生成するPyTorchトレーニングジョブを実行します。これを実現するために、設定ファイルをセットアップし、トレーニングスクリプトを開発し、トレーニングコードを実行します。
設定ファイルのセットアップ
config.yaml
ファイルをセットアップし、以下の設定を提供します:
- 以前に作成したインターネット非接続のVPCでSageMakerトレーニングジョブを実行する
- 以前に作成したプライベートPyPIリポジトリに接続して必要なパッケージをダウンロードする
ファイルは以下のコードのようになります:
SchemaVersion: '1.0'
SageMaker:
PythonSDK:
Modules:
RemoteFunction:
Dependencies: '../config/requirements.txt'
InstanceType: 'ml.m5.xlarge'
PreExecutionCommands:
- 'aws codeartifact login --tool pip --domain <ドメイン名> --domain-owner <AWSアカウント番号> --repository <プライベートリポジトリ名> --endpoint-url <https://で始まるVPCエンドポイントURL>
RoleArn: '<トレーニングジョブを実行するための実行ロールARN>'
S3RootUri: '<ジョブの出力を保存するためのS3バケット>'
VpcConfig:
SecurityGroupIds:
- '<SageMaker Studioで使用されるセキュリティグループID>'
Subnets:
- '<VPCサブネットID 1>'
- '<VPCサブネットID 2>'
Dependencies
フィールドにはrequirements.txt
へのパスが含まれており、すべての依存関係がプライベートリポジトリからダウンロードされることに注意してください。 requirements.txt
ファイルには以下のコードが含まれています:
torch
torchvision
sagemaker>=2.156.0,<3
PreExecutionCommands
セクションには、プライベートPyPIリポジトリに接続するためのコマンドが含まれています。CodeArtifact VPCエンドポイントURLを取得するには、次のコードを使用します:
response = ec2.describe_vpc_endpoints(
Filters=[
{
'Name': 'service-name',
'Values': [
f'com.amazonaws.{boto3_session.region_name}.codeartifact.api'
]
},
]
)
code_artifact_api_vpc_endpoint = response['VpcEndpoints'][0]['DnsEntries'][0]['DnsName']
endpoint_url = f'https://{code_artifact_api_vpc_endpoint}'
endpoint_url
通常、CodeArtifactには2つのVPCエンドポイントがありますが、接続コマンドではどちらかを使用できます。詳細については、「VPCからCodeArtifactを使用する」を参照してください。
さらに、実行ロール
、出力場所
、およびVPCの設定
などの構成は、設定ファイルで提供されます。これらの構成は、SageMakerトレーニングジョブの実行に必要です。サポートされているすべての構成については、構成ファイルを参照してください。
@remoteデコレータを使用するためには、必ずしもconfig.yaml
ファイルを使用する必要はありません。これは、すべての構成を@remoteデコレータに直接指定する方法ですが、長期的には可読性と変更の保守性が低下します。また、管理者が構成ファイルを作成し、環境内のすべてのユーザーと共有することもできます。
トレーニングスクリプトの作成
次に、シンプルなPythonファイルにトレーニングコードを準備します。コードは3つのファイルに分かれています:
- load_data.py – MNISTデータセットをダウンロードするコードが含まれています
- model.py – モデルのニューラルネットワークアーキテクチャのコードが含まれています
- train.py – load_data.pyとmodel.pyを使用してモデルをトレーニングするコードが含まれています
train.py
では、メインのトレーニング関数に以下のようにデコレーションを行う必要があります:
@remote(include_local_workdir=True)
def perform_train(train_data,
test_data,
*,
batch_size: int = 64,
test_batch_size: int = 1000,
epochs: int = 3,
lr: float = 1.0,
gamma: float = 0.7,
no_cuda: bool = True,
no_mps: bool = True,
dry_run: bool = False,
seed: int = 1,
log_interval: int = 10,
):
# pytorch native training code........
これでトレーニングコードを実行する準備が整いました。
トレーニングコードを@remoteデコレータで実行する
コードはターミナルまたは実行可能なプロンプトから実行できます。この投稿では、SageMaker Studioのノートブックセルを使用してデモンストレーションします:
!python ./train.py
上記のコマンドを実行すると、トレーニングジョブがトリガーされます。ログを見ると、プライベートなPyPIリポジトリからパッケージをダウンロードしていることがわかります。
これにより、インターネットにアクセスできない環境でプライベートリポジトリと@remoteデコレータを使用した実装が完了しました。
クリーンアップ
リソースをクリーンアップするには、CLEANUP.mdの手順に従ってください。
結論
この投稿では、@remoteデコレータの機能を制限された環境で効果的に使用する方法、およびSageMakerの設定ファイルサポートを使用してCodeArtifactプライベートリポジトリの機能を統合する方法について学びました。このソリューションにより、反復的な開発がより簡単かつ高速になります。追加の利点は、トレーニングコードをより自然なオブジェクト指向の方法で記述し続けながら、コードの変更を最小限に抑えてリモートクラスタでトレーニングジョブを実行できることです。この投稿の一部として表示されるすべてのコードは、GitHubリポジトリで入手できます。
次のステップとして、@remoteデコレータの機能とPython SDK APIをチェックして、選択した環境とIDEで使用してみてください。amazon-sagemaker-examplesリポジトリには、すぐに始めるための追加の例も用意されています。詳細については、「最小限のコード変更でローカルの機械学習コードをAmazon SageMakerトレーニングジョブとして実行する」の投稿も参照してください。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles