Advanced agent setup
このガイドでは、W&B Launch エージェントをセットアップして、異なる環境でコンテナイメージをビルドする方法について説明します。
ビルドは git と code artifact ジョブにのみ必要です。イメージジョブにはビルドは必要ありません。
ジョブタイプの詳細については Create a launch job を参照してください。
Builders
Launch エージェントは Docker または Kaniko を使用してイメージをビルドできます。
- Kaniko: 特権コンテナとしてビルドを実行することなく、Kubernetes でコンテナイメージをビルドします。
- Docker: ローカルで docker buildコマンドを実行してコンテナイメージをビルドします。
ビルダーのタイプは launch エージェント設定の builder.type キーで docker、kaniko、またはビルドを無効にする noop のいずれかに設定できます。デフォルトでは、エージェントの Helm チャートは builder.type を noop に設定します。builder セクションの追加キーはビルドプロセスの設定に使用されます。
エージェント設定にビルダーが指定されていないか、動作する docker CLI が見つかった場合、エージェントはデフォルトで Docker を使用します。Docker が利用できない場合、エージェントはデフォルトで noop を使用します。
Kubernetes クラスターでのイメージビルドには Kaniko を使用します。それ以外の場合には Docker を使用します。
コンテナレジストリにプッシュする
launch エージェントはビルドするすべてのイメージを一意のソースハッシュでタグ付けします。エージェントは 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 エージェント設定 (launch-config.yaml) 内で、ターゲットリソース環境の名前とコンテナレジストリを environment キーおよび registry キーにそれぞれ指定します。
以下のタブはあなたの環境とレジストリに基づいた launch エージェントの設定方法を示します。
- Amazon Web Services
- Google Cloud
- Azure
AWS環境の設定では region キーが必要です。region はエージェントが実行される 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 documentation を参照してください。
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 documentation を参照してください。
Azure 環境では追加のキーは必要ありません。エージェントが開始されると、azure.identity.DefaultAzureCredential() を使用してデフォルトの Azure 認証情報がロードされます。
environment:
  type: azure
builder:
  type: <kaniko|docker>
  # エージェントがイメージを保存する Azure Container Registry リポジトリの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 documentation を参照してください。
エージェントの権限
エージェントに必要な権限はユースケースによって異なります。
クラウドレジストリの権限
以下に、launch エージェントがクラウドレジストリと対話するために通常必要な権限を示します。
- Amazon Web Services
- Google Cloud
- Azure
{
  '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 role を追加してください。
Kanikoのストレージ権限
launch エージェントは、Kaniko ビルダーを使用している場合にクラウドストレージにプッシュする権限が必要です。Kaniko はビルドジョブを実行するポッドの外部にコンテキストストアを使用します。
- Amazon Web Services
- Google Cloud
- Azure
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 ビルドのカスタマイズ
エージェント設定の builder.kaniko-config キーに Kaniko ジョブが使用する Kubernetes Job スペックを指定します。例えば:
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" # Args must be in the format "key=value"
            env:
            - name: "MY_ENV_VAR"
              value: "my-env-var-value"
Launch エージェントを CoreWeave にデプロイする
任意で W&B Launch エージェントを CoreWeave クラウドインフラにデプロイします。CoreWeave は GPU 加速ワークロードのために設計されたクラウドインフラです。
Launch エージェントを CoreWeave にデプロイする方法については CoreWeave documentation を参照してください。
Launch エージェントを CoreWeave インフラにデプロイするためには CoreWeave account を作成する必要があります。