「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!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

AIニュース

「モデルガバナンスを向上させるために、Amazon SageMaker Model Cardsの共有を利用してください」

MLガバナンスの一環として利用可能なツールの1つは、Amazon SageMaker Model Cardsですこのツールは、モデルのライフサイクル...

機械学習

「人工知能と気候変動」

「多くの場合、私たちは気候変動に関連付けられた雑誌やニュースの天候エピソードを見たり、聞いたり、読んだりしますが、す...

AIニュース

「効率的な変数選択のための新しいアルゴリズムが提案されました」

中国科学院合肥物质科学研究院の研究者たちは、化学計量学の応用のために変数選択アルゴリズムを開発しました

AI研究

東京理科大学の研究者は、材料科学におけるこれまで知られていなかった準結晶相を検出する深層学習モデルを開発しました

物質における新しい結晶構造を発見する探求は、電子から製薬まで幅広い産業において重要な意味を持ち、科学的な探求の中核と...

AI研究

このAI研究は、DISC-MedLLMという包括的な解決策を提案し、大規模言語モデル(LLM)を活用して正確な医療応答を提供します

テレメディシンの台頭により、医療の提供方法が変わり、プロフェッショナルネットワークを広げ、価格を下げ、遠隔医療相談を...

AI研究

大規模な言語モデルは本当に数学をできるのか?この人工知能AIの研究はMathGLMを紹介します:計算機なしで数学問題を解くための頑健なモデル

下流の自然言語処理(NLP)タスクにおいて、大規模言語モデル(LLMs)は非常に効果的であることが証明されています。GPT4やCh...