ローンンチエージェントを設定する

高度なエージェント設定

このガイドでは、W&B ローンチエージェントを設定して、さまざまな環境でコンテナイメージを作成する方法について情報を提供します。

ビルダー

ローンチエージェントは、Docker または Kaniko を使用してイメージをビルドできます。

  • Kaniko: Kubernetes で特権コンテナとしてビルドを実行せずにコンテナイメージをビルドします。
  • Docker: ローカルで docker build コマンドを実行してコンテナイメージをビルドします。

ビルダータイプは、ローンチエージェントの設定で builder.type キーを使用して、dockerkaniko、またはビルドをオフにするための noop に制御できます。デフォルトでは、エージェントの Helm チャートは builder.typenoop に設定します。builder セクションの追加キーは、ビルドプロセスを設定するために使用されます。

エージェントの設定でビルダーが指定されていない場合、有効な docker CLI が見つかると、エージェントは自動的に Docker を使用します。Docker が利用できない場合、エージェントは noop をデフォルトとします。

コンテナレジストリへのプッシュ

ローンチエージェントは、ビルドするすべてのイメージに一意のソースハッシュでタグを付けます。エージェントは、builder.destination キーで指定されたレジストリにイメージをプッシュします。

たとえば、builder.destination キーが my-registry.example.com/my-repository に設定されている場合、エージェントはイメージに my-registry.example.com/my-repository:<source-hash> というタグを付けてプッシュします。イメージがすでにレジストリに存在する場合、ビルドはスキップされます。

エージェント設定

Helm チャートを経由してエージェントをデプロイする場合、エージェント設定は values.yaml ファイルの agentConfig キーに提供する必要があります。

自分で wandb launch-agent を使用してエージェントを呼び出す場合、エージェント設定を --config フラグを使用して YAML ファイルのパスとして提供できます。デフォルトでは、設定は ~/.config/wandb/launch-config.yaml から読み込まれます。

ローンチエージェントの設定 (launch-config.yaml) 内で、ターゲットリソース環境とコンテナレジストリの名前をそれぞれ environmentregistry キーに提供します。

環境とレジストリに基づいてローンチエージェントを設定する方法を、以下のタブで示します。

AWS 環境設定には地域キーが必要です。リージョンはエージェントが実行される AWS 地域であるべきです。

environment:
  type: aws
  region: <aws-region>
builder:
  type: <kaniko|docker>
  # エージェントがイメージを保存する ECR レポジトリの URI。
  # リージョンが環境に設定した内容と一致することを確認してください。
  destination: <account-id>.ecr.<aws-region>.amazonaws.com/<repository-name>
  # Kaniko を使用する場合、エージェントがビルドコンテキストを保存する S3 バケットを指定します。
  build-context-store: s3://<bucket-name>/<path>

エージェントは boto3 を使用してデフォルトの AWS 資格情報を読み込みます。デフォルトの AWS 資格情報の設定方法については、boto3 ドキュメント を参照してください。

Google Cloud 環境には、region および project キーが必要です。region にはエージェントが実行されるリージョンを設定し、project にはエージェントが実行される Google Cloud プロジェクトを設定します。エージェントは Python の google.auth.default() を使用してデフォルトの資格情報を読み込みます。

environment:
  type: gcp
  region: <gcp-region>
  project: <gcp-project-id>
builder:
  type: <kaniko|docker>
  # エージェントがイメージを保存するアーティファクトリポジトリとイメージ名の URI。
  # リージョンとプロジェクトが環境に設定した内容と一致することを確認してください。
  uri: <region>-docker.pkg.dev/<project-id>/<repository-name>/<image-name>
  # Kaniko を使用する場合、エージェントがビルドコンテキストを保存する GCS バケットを指定します。
  build-context-store: gs://<bucket-name>/<path>

デフォルトの GCP 資格情報をエージェントが利用できるように設定する方法については、google-auth ドキュメント を参照してください。

Azure 環境には追加のキーは必要ありません。エージェントが起動するときに、azure.identity.DefaultAzureCredential() を使用してデフォルトの Azure 資格情報を読み込みます。

environment:
  type: azure
builder:
  type: <kaniko|docker>
  # エージェントがイメージを保存する Azure コンテナレジストリレポジトリの URI。
  destination: https://<registry-name>.azurecr.io/<repository-name>
  # Kaniko を使用する場合、エージェントがビルドコンテキストを保存する Azure Blob Storage コンテナを指定します。
  build-context-store: https://<storage-account-name>.blob.core.windows.net/<container-name>

デフォルトの Azure 資格情報の設定方法については、azure-identity ドキュメント を参照してください。

エージェント権限

エージェントの必要な権限はユースケースによって異なります。

クラウドレジストリ権限

ローンチエージェントがクラウドレジストリと対話するために通常必要な権限は以下の通りです。

{
  'Version': '2012-10-17',
  'Statement':
    [
      {
        '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': '*',
      },
    ],
}
artifactregistry.dockerimages.list;
artifactregistry.repositories.downloadArtifacts;
artifactregistry.repositories.list;
artifactregistry.repositories.uploadArtifacts;

Kaniko ビルダーを使用する場合は、AcrPush ロールを追加してください。

Kaniko のためのストレージ権限

ローンチエージェントは、Kaniko ビルダーを使用している場合、クラウドストレージにプッシュする権限が必要です。Kaniko はビルドジョブを実行するポッドの外にコンテキストストアを使用します。

AWS での Kaniko ビルダーの推奨コンテキストストアは Amazon S3 です。エージェントが S3 バケットにアクセスするためのポリシーは以下の通りです:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ListObjectsInBucket",
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::<BUCKET-NAME>"]
    },
    {
      "Sid": "AllObjectActions",
      "Effect": "Allow",
      "Action": "s3:*Object",
      "Resource": ["arn:aws:s3:::<BUCKET-NAME>/*"]
    }
  ]
}

GCP では、エージェントが GCS にビルドコンテキストをアップロードするために必要な IAM 権限は次の通りです:

storage.buckets.get;
storage.objects.create;
storage.objects.delete;
storage.objects.get;

Azure Blob Storage にビルドコンテキストをアップロードするためには、Storage Blob Data Contributor ロールが必要です。

Kaniko ビルドのカスタマイズ

Kaniko ジョブが使用する Kubernetes ジョブ仕様をエージェント設定の builder.kaniko-config キーに指定します。例えば:

builder:
  type: kaniko
  build-context-store: <my-build-context-store>
  destination: <my-image-destination>
  build-job-name: wandb-image-build
  kaniko-config:
    spec:
      template:
        spec:
          containers:
          - args:
            - "--cache=false" # 引数は "key=value" の形式でなければなりません
            env:
            - name: "MY_ENV_VAR"
              value: "my-env-var-value"

Launch エージェントを CoreWeave にデプロイ

オプションとして、W&B Launch エージェントを CoreWeave クラウドインフラストラクチャにデプロイできます。CoreWeave は GPU 加速ワークロード専用に構築されたクラウドインフラストラクチャです。

CoreWeave に Launch エージェントをデプロイする方法については、CoreWeave ドキュメント を参照してください。