メインコンテンツへスキップ
W&Bでは、W&B Multi-tenant CloudW&B Dedicated Cloud デプロイメントタイプのような、フルマネージドなデプロイオプションを推奨しています。W&Bのフルマネージドサービスはシンプルかつ安全に利用でき、設定は最小限、あるいは全く必要ありません。
セルフマネージド(Self-Managed)の W&B Server を選択した場合は、W&B Server Google Cloud Terraform Module を使用して Google Cloud 上にプラットフォームをデプロイすることを推奨します。 このモジュールのドキュメントは広範囲にわたっており、利用可能なすべてのオプションが記載されています。 開始する前に、State File を保存するために、Terraform で利用可能な リモートバックエンド のいずれかを選択しておくことをお勧めします。 State File は、すべてのコンポーネントを再作成することなく、デプロイメントのアップグレードや変更を行うために必要なリソースです。 Terraform モジュールは、以下の「必須」コンポーネントをデプロイします。
  • VPC
  • Cloud SQL for MySQL
  • Cloud Storage バケット
  • Google Kubernetes Engine
  • KMS 暗号化キー
  • ロードバランサー
その他のデプロイオプションには、以下のオプションコンポーネントを含めることもできます。
  • Redis 用の Memory Store
  • Pub/Sub メッセージングシステム

必要な権限

Terraform を実行するアカウントは、使用する Google Cloud プロジェクトにおいて roles/owner ロールを持っている必要があります。

一般的な手順

このセクションの手順は、このドキュメントで扱うすべてのデプロイオプションに共通するものです。
  1. 開発環境を準備します。
    • Terraform をインストールします。
    • 使用するコードを管理する Git リポジトリを作成することを推奨しますが、ローカルにファイルを保持することも可能です。
    • Google Cloud Console でプロジェクトを作成します。
    • Google Cloud で認証を行います(事前に gcloud のインストール を済ませてください)。 gcloud auth application-default login
  2. terraform.tfvars ファイルを作成します。 tfvars ファイルの内容はインストールタイプに応じてカスタマイズ可能ですが、推奨される最小構成は以下の例のようになります。
    project_id  = "wandb-project"
    region      = "europe-west2"
    zone        = "europe-west2-a"
    namespace   = "wandb"
    license     = "xxxxxxxxxxyyyyyyyyyyyzzzzzzz"
    subdomain   = "wandb-gcp"
    domain_name = "wandb.ml"
    
    ここで定義する変数は、デプロイ前に決定しておく必要があります。namespace 変数は、Terraform によって作成されるすべてのリソースのプレフィックスとなる文字列になります。 subdomaindomain_name の組み合わせが、W&B が設定される FQDN になります。上記の例では、W&B の FQDN は wandb-gcp.wandb.ml となります。
  3. variables.tf ファイルを作成します。 terraform.tfvars で設定した各オプションに対して、Terraform では対応する変数宣言が必要です。
    variable "project_id" {
      type        = string
      description = "Project ID"
    }
    
    variable "region" {
      type        = string
      description = "Google region"
    }
    
    variable "zone" {
      type        = string
      description = "Google zone"
    }
    
    variable "namespace" {
      type        = string
      description = "Namespace prefix used for resources"
    }
    
    variable "domain_name" {
      type        = string
      description = "Domain name for accessing the Weights & Biases UI."
    }
    
    variable "subdomain" {
      type        = string
      description = "Subdomain for access the Weights & Biases UI."
    }
    
    variable "license" {
      type        = string
      description = "W&B License"
    }
    

デプロイ - 推奨構成(所要時間:約20分)

これは最もシンプルなデプロイオプションで、すべての「必須」コンポーネントを作成し、Kubernetes クラスター に最新バージョンの W&B をインストールします。
  1. main.tf を作成します。 一般的な手順 でファイルを作成したのと同じディレクトリーに、以下の内容で main.tf ファイルを作成します。
    provider "google" {
     project = var.project_id
     region  = var.region
     zone    = var.zone
    }
    
    provider "google-beta" {
     project = var.project_id
     region  = var.region
     zone    = var.zone
    }
    
    data "google_client_config" "current" {}
    
    provider "kubernetes" {
      host                   = "https://${module.wandb.cluster_endpoint}"
      cluster_ca_certificate = base64decode(module.wandb.cluster_ca_certificate)
      token                  = data.google_client_config.current.access_token
    }
    
    # すべての必須サービスを起動
    module "wandb" {
      source  = "wandb/wandb/google"
      version = "~> 5.0"
    
      namespace   = var.namespace
      license     = var.license
      domain_name = var.domain_name
      subdomain   = var.subdomain
    }
    
    # プロビジョニングされたIPアドレスでDNSを更新する必要があります
    output "url" {
      value = module.wandb.url
    }
    
    output "address" {
      value = module.wandb.address
    }
    
    output "bucket_name" {
      value = module.wandb.bucket_name
    }
    
  2. W&B をデプロイします。 W&B をデプロイするには、以下のコマンドを実行します。
    terraform init
    terraform apply -var-file=terraform.tfvars
    

Redis キャッシュを使用したデプロイ

別のデプロイオプションとして、Redis を使用して SQL クエリをキャッシュし、Experiments のメトリクスを読み込む際のアプリケーションの応答速度を向上させることができます。 キャッシュを有効にするには、推奨される デプロイセクション で指定したのと同じ main.tf ファイルに、オプション create_redis = true を追加します。
[...]

module "wandb" {
  source  = "wandb/wandb/google"
  version = "~> 1.0"

  namespace    = var.namespace
  license      = var.license
  domain_name  = var.domain_name
  subdomain    = var.subdomain
  allowed_inbound_cidrs = ["*"]
  # Redisを有効化
  create_redis = true

}
[...]

外部キューを使用したデプロイ

3つ目のデプロイオプションは、外部の message broker を有効にすることです。W&B にはブローカーが組み込まれているため、これはオプションです。このオプションによってパフォーマンスが向上するわけではありません。 メッセージブローカーを提供する Google Cloud リソースは Pub/Sub です。これを有効にするには、推奨される デプロイセクション で指定したのと同じ main.tf に、オプション use_internal_queue = false を追加します。
[...]

module "wandb" {
  source  = "wandb/wandb/google"
  version = "~> 1.0"

  namespace          = var.namespace
  license            = var.license
  domain_name        = var.domain_name
  subdomain          = var.subdomain
  allowed_inbound_cidrs = ["*"]
  # Pub/Subを作成して使用する
  use_internal_queue = false

}

[...]

その他のデプロイオプション

これら3つのデプロイオプションを組み合わせて、すべての設定を同じファイルに追加することも可能です。 Terraform Module は、標準オプションや デプロイ - 推奨構成 にある最小限の設定と組み合わせて使用できる複数のオプションを提供しています。

手動設定

Google Cloud Storage バケットを W&B のファイルストレージバックエンドとして使用するには、以下を作成する必要があります。

Pub/Sub トピックとサブスクリプションの作成

以下の手順に従って、Pub/Sub トピックとサブスクリプションを作成します。
  1. Google Cloud Console 内の Pub/Sub サービスに移動します。
  2. トピックを作成 を選択し、トピックの名前を入力します。
  3. ページの下部で サブスクリプションを作成 を選択します。配信タイププル に設定されていることを確認してください。
  4. 作成 をクリックします。
インスタンスを実行しているサービスアカウントまたはアカウントが、このサブスクリプションに対して pubsub.admin ロールを持っていることを確認してください。詳細は https://cloud.google.com/pubsub/docs/access-control#console を参照してください。

Storage バケットの作成

  1. Cloud Storage バケット ページに移動します。
  2. バケットを作成 を選択し、バケットの名前を入力します。ストレージクラスStandard を選択してください。
インスタンスを実行しているサービスアカウントまたはアカウントが、以下の両方を持っていることを確認してください。
インスタンスは、署名付きファイル URL を作成するために、Google Cloud の iam.serviceAccounts.signBlob 権限も必要です。権限を有効にするには、インスタンスが実行されているサービスアカウントまたは IAM メンバーに Service Account Token Creator ロールを追加してください。
  1. CORS アクセスを有効にします。これはコマンドラインからのみ行えます。まず、以下の CORS 設定を含む JSON ファイルを作成します。
cors:
- maxAgeSeconds: 3600
  method:
   - GET
   - PUT
     origin:
   - '<YOUR_W&B_SERVER_HOST>'
     responseHeader:
   - Content-Type
origin の値のスキーム、ホスト、ポートは正確に一致させる必要があることに注意してください。
  1. gcloud がインストールされており、正しい Google Cloud プロジェクトにログインしていることを確認します。
  2. 次に、以下を実行します。
gcloud storage buckets update gs://<BUCKET_NAME> --cors-file=<CORS_CONFIG_FILE>

Pub/Sub 通知の作成

以下の手順をコマンドラインで実行し、Storage バケットから Pub/Sub トピックへの通知ストリームを作成します。
通知ストリームの作成には CLI を使用する必要があります。gcloud がインストールされていることを確認してください。
  1. Google Cloud プロジェクトにログインします。
  2. ターミナルで以下を実行します。
gcloud pubsub topics list  # 参照用にトピック名のリストを表示
gcloud storage ls          # 参照用にバケット名のリストを表示

# バケット通知を作成
gcloud storage buckets notifications create gs://<BUCKET_NAME> --topic=<TOPIC_NAME>
詳細なリファレンスは Cloud Storage のウェブサイトで確認できます。

W&B Server の設定

  1. 最後に、W&B の System Connections ページ(http(s)://YOUR-W&B-SERVER-HOST/console/settings/system)に移動します。
  2. プロバイダーに Google Cloud Storage (gcs) を選択します。
  3. GCS バケットの名前を入力します。
Google Cloud ファイルストレージの設定
  1. Update settings を押して新しい設定を適用します。

W&B Server のアップグレード

W&B を更新するには、以下の手順に従ってください。
  1. wandb_app モジュールの設定に wandb_version を追加します。アップグレードしたい W&B のバージョンを指定してください。例えば、以下の行は W&B バージョン 0.58.1 を指定しています。
module "wandb_app" {
    source  = "wandb/wandb/kubernetes"
    version = "~>5.0"

    license       = var.license
    wandb_version = "0.58.1"
あるいは、terraform.tfvarswandb_version を追加し、同名の変数を作成して、リテラル値の代わりに var.wandb_version を使用することもできます。
  1. 設定を更新した後、デプロイセクション で説明した手順を完了させます。
terraform init
terraform apply -var-file=terraform.tfvars