チュートリアル: SageMaker で W&B Launch を設定する
4 minute read
W&B Launch を使用して、提供されたアルゴリズムやカスタムアルゴリズムを使用して SageMaker プラットフォーム上で機械学習モデルをトレーニングするための ラーンンチ ジョブを Amazon SageMaker に送信できます。SageMaker はコンピュート リソースの立ち上げとリリースを担当するため、EKS クラスターを持たないチームには良い選択肢となります。
Amazon SageMaker に接続された W&B Launch キューに送信された ラーンンチ ジョブは、CreateTrainingJob API を使用して SageMaker トレーニング ジョブとして実行されます。 CreateTrainingJob API
に送信される引数を制御するには、 ラーンンチ キュー設定 を使用します。
Amazon SageMaker は トレーニング ジョブを実行するために Docker イメージを使用しています。SageMaker によってプルされるイメージは、Amazon Elastic Container Registry (ECR) に保存する必要があります。 つまり、トレーニングに使用するイメージは ECR に保存する必要があります。
前提条件
始める前に、以下の前提条件を確認してください:
- Docker イメージを作成するかどうかを決定します。
- AWS リソースを設定し、S3、ECR、および Sagemaker IAM ロールに関する情報を収集します。
- Launch エージェントのための IAM ロールを作成します。
Docker イメージを作成するかどうかを決定する
W&B Launch エージェントに Docker イメージを作成させるかどうかを決定します。選択肢は 2 つあります。
- ローンンチ エージェントに Docker イメージの構築を許可し、Amazon ECR にイメージをプッシュし、SageMaker Training ジョブの送信を許可します。このオプションは、トレーニング コードを迅速に反復する ML エンジニアにいくらかの簡素化を提供できます。
- ローンンチ エージェントが、トレーニングまたは推論スクリプトを含む既存の Docker イメージを使用します。このオプションは既存の CI システムに適しています。このオプションを選択する場合は、Amazon ECR のコンテナ レジストリに Docker イメージを手動でアップロードする必要があります。
AWS リソースを設定する
お好みの AWS リージョンで次の AWS リソースが設定されていることを確認してください :
- コンテナ イメージを保存するための ECR リポジトリ。
- SageMaker トレーニング ジョブの入力と出力を保存するための 1 つまたは複数の S3 バケット。
- Amazon SageMaker がトレーニング ジョブを実行し、Amazon ECR と Amazon S3 と対話することを許可する IAM ロール。
これらのリソースの ARN をメモしておいてください。SageMaker 用に Launch キュー設定 を定義するときに ARN が必要になります。
Launch エージェント用の IAM ポリシーを作成する
- AWS の IAM 画面から、新しいポリシーを作成します。
- JSON ポリシーエディターに切り替え、以下のポリシーをケースに基づいて貼り付けます。
<>
で囲まれた値を実際の値に置き換えてください:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:DescribeLogStreams",
"SageMaker:AddTags",
"SageMaker:CreateTrainingJob",
"SageMaker:DescribeTrainingJob"
],
"Resource": "arn:aws:sagemaker:<region>:<account-id>:*"
},
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::<account-id>:role/<RoleArn-from-queue-config>"
},
{
"Effect": "Allow",
"Action": "kms:CreateGrant",
"Resource": "<ARN-OF-KMS-KEY>",
"Condition": {
"StringEquals": {
"kms:ViaService": "SageMaker.<region>.amazonaws.com",
"kms:GrantIsForAWSResource": "true"
}
}
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:DescribeLogStreams",
"SageMaker:AddTags",
"SageMaker:CreateTrainingJob",
"SageMaker:DescribeTrainingJob"
],
"Resource": "arn:aws:sagemaker:<region>:<account-id>:*"
},
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::<account-id>:role/<RoleArn-from-queue-config>"
},
{
"Effect": "Allow",
"Action": [
"ecr:CreateRepository",
"ecr:UploadLayerPart",
"ecr:PutImage",
"ecr:CompleteLayerUpload",
"ecr:InitiateLayerUpload",
"ecr:DescribeRepositories",
"ecr:DescribeImages",
"ecr:BatchCheckLayerAvailability",
"ecr:BatchDeleteImage"
],
"Resource": "arn:aws:ecr:<region>:<account-id>:repository/<repository>"
},
{
"Effect": "Allow",
"Action": "ecr:GetAuthorizationToken",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "kms:CreateGrant",
"Resource": "<ARN-OF-KMS-KEY>",
"Condition": {
"StringEquals": {
"kms:ViaService": "SageMaker.<region>.amazonaws.com",
"kms:GrantIsForAWSResource": "true"
}
}
}
]
}
- 次へ をクリックします。
- ポリシーに名前と説明を付けます。
- ポリシー作成 をクリックします。
Launch エージェント用の IAM ロールを作成する
Launch エージェントには、Amazon SageMaker トレーニング ジョブを作成する権限が必要です。以下の手順に従って IAM ロールを作成します:
- AWS の IAM 画面から、新しいロールを作成します。
- 信頼されたエンティティ として AWS アカウント (または組織のポリシーに適したオプション) を選択します。
- 権限画面をスクロールし、上で作成したポリシー名を選択します。
- ロールに名前と説明を付けます。
- ロールの作成 を選択します。
- ロールの ARN を記録します。これを設定するときに Launch エージェント用に ARN を指定します。
IAM ロールの作成方法について詳しくは、AWS Identity and Access Management ドキュメント を参照してください。
- エージェントがイメージを構築できるようにするには、高度なエージェントの設定で追加の権限が必要です。
- SageMaker キューの
kms:CreateGrant
権限は、関連する ResourceConfig に指定された VolumeKmsKeyId がある場合にのみ必要であり、関連するロールにこの操作を許可するポリシーがない場合に限ります。
SageMaker 用に Launch キューを設定する
次に、W&B アプリで SageMaker をコンピュート リソースとして使用するキューを作成します:
- Launch アプリ に移動します。
- キューを作成 ボタンをクリックします。
- キューを作成する エンティティ を選択します。
- 名前 フィールドにキューの名前を入力します。
- リソース として SageMaker を選択します。
- 設定 フィールド内で、SageMaker ジョブに関する情報を提供します。デフォルトでは、W&B は YAML および JSON の
CreateTrainingJob
リクエストボディを自動生成します:
{
"RoleArn": "<REQUIRED>",
"ResourceConfig": {
"InstanceType": "ml.m4.xlarge",
"InstanceCount": 1,
"VolumeSizeInGB": 2
},
"OutputDataConfig": {
"S3OutputPath": "<REQUIRED>"
},
"StoppingCondition": {
"MaxRuntimeInSeconds": 3600
}
}
少なくとも以下を指定する必要があります :
RoleArn
: SageMaker 実行 IAM ロールの ARN (前提条件 を参照してください)。Launch agent IAM ロールとは混同しないでください。OutputDataConfig.S3OutputPath
: SageMaker の出力が保存される Amazon S3 URI を指定します。ResourceConfig
: リソース設定の必須仕様です。リソース設定のオプションはこちらに記載されています。StoppingCondition
: トレーニング ジョブの停止条件の必須仕様です。オプションはこちらに記載されています。
- キューを作成 ボタンをクリックします。
Launch エージェントをセットアップする
次のセクションでは、エージェントをデプロイする場所と、デプロイ場所に基づいてエージェントをどのように設定するかを説明します。
Amazon SageMaker キューに Launch エージェントをデプロイする方法にはいくつかのオプションがあります: ローカルマシン、EC2 インスタンス、または EKSクラスターで。エージェントをデプロイする場所に基づいてアプリケーション エージェントを適切に構成します。
ローンンチ エージェントを実行する場所を決定する
プロダクション ワークロードおよび既に EKS クラスターを持つ顧客には、この Helm チャートを使用して EKS クラスターに ラーンンチ エージェント をデプロイすることをお勧めします。
現在の EKS クラスターがないプロダクション ワークロードには、EC2 インスタンスが適したオプションです。Launch エージェント インスタンスは常に稼働していますが、t2.micro
サイズの EC2 インスタンスという比較的手頃なインスタンスで十分です。
実験的または個人のユースケースには、ローカルマシンに Launch エージェントを実行するのがすばやく始める方法です。
選択したユースケースに基づいて、以下のタブに記載されている指示に従って Launch エージェントを適切に設定してください:
W&B は、エージェントを EKS クラスターでインストールするために、W&B 管理 helm チャート の使用を強く推奨しています。
Amazon EC2 ダッシュボードに移動し、次のステップを完了します:
- インスタンスを起動 をクリックします。
- 名前 フィールドに名前を入力します。タグをオプションで追加します。
- インスタンスタイプ から、あなたの EC2 コンテナ用のインスタンスタイプを選択します。1vCPU と 1GiB のメモリ以上は必要ありません (例えば t2.micro)。
- キーペア(ログイン) フィールドで、組織内の新しいキーペアを作成します。後のステップで選択した SSH クライアントで EC2 インスタンスに 接続する ために、このキーペアを使用します。
- ネットワーク設定 で、組織に適したセキュリティグループを選択します。
- 詳細設定 を展開します。IAM インスタンスプロファイル として、上記で作成した ローンンチ エージェント IAM ロールを選択します。
- サマリー フィールドを確認します。正しければ、インスタンスを起動 を選択します。
AWS 上の EC2 ダッシュボードの左側パネル内の インスタンス に移動します。作成した EC2 インスタンスが稼働している ( インスタンス状態 列を参照) ことを確認します。EC2 インスタンスが稼働していることを確認したら、ローカルマシンのターミナルに移動し、次の手順を完了します:
- 接続 を選択します。
- SSH クライアント タブを選択し、EC2 インスタンスに接続するための指示に従います。
- EC2インスタンス内で、次のパッケージをインストールします:
sudo yum install python311 -y && python3 -m ensurepip --upgrade && pip3 install wandb && pip3 install wandb[launch]
- 次に、EC2 インスタンス内に Docker をインストールして起動します:
sudo yum update -y && sudo yum install -y docker python3 && sudo systemctl start docker && sudo systemctl enable docker && sudo usermod -a -G docker ec2-user
newgrp docker
これで、Launchエージェントの構成を設定する準備が整いました。
ローカルマシンでポーリングを実行するエージェントとロールを関連付けるには、~/.aws/config
と ~/.aws/credentials
にある AWS 設定ファイルを使用します。前のステップで作成した Launch エージェントの IAM ロール ARN を指定します。
[profile SageMaker-agent]
role_arn = arn:aws:iam::<account-id>:role/<agent-role-name>
source_profile = default
[default]
aws_access_key_id=<access-key-id>
aws_secret_access_key=<secret-access-key>
aws_session_token=<session-token>
セッショントークンは、その主データと関連付けられた AWS リソースによって最大長が 1 時間または 3 日であることに注意してください。
Launch エージェントを設定する
launch-config.yaml
という名前の YAML 設定ファイルで Launch エージェントを設定します。
デフォルトでは、W&B は ~/.config/wandb/launch-config.yaml
にある設定ファイルを確認します。エージェントをアクティブにする際に -c
フラグで別のディレクトリを指定することも可能です。
以下の YAML スニペットは、コア設定エージェントオプションを指定する方法を示しています:
max_jobs: -1
queues:
- <queue-name>
environment:
type: aws
region: <your-region>
registry:
type: ecr
uri: <ecr-repo-arn>
builder:
type: docker
エージェントは wandb launch-agent
で開始します。
(オプション) Docker イメージを Amazon ECR にプッシュする
Launch ジョブを含む Docker イメージを Amazon ECR レポジトリにアップロードします。画像ベースのジョブを使用している場合、Docker イメージは新しい Launch ジョブを送信する前に ECR レジストリに存在している必要があります。
フィードバック
このページは役に立ちましたか?
Glad to hear it! If you have further feedback, please let us know.
Sorry to hear that. Please tell us how we can improve.