メインコンテンツへスキップ
W&Bでは、W&B Multi-tenant CloudW&B 専用クラウド などのフルマネージドデプロイメントオプションを推奨しています。W&Bのフルマネージドサービスは、設定をほとんど、あるいは全く必要とせず、シンプルかつ安全に利用できます。
セルフマネージドのW&B サーバーを選択した場合は、W&B Server Azure Terraform Module を使用して Azure 上にプラットフォームをデプロイすることを推奨します。 モジュールのドキュメントは非常に充実しており、利用可能なすべてのオプションが網羅されています。このドキュメントでは、いくつかのデプロイメントオプションについて説明します。 開始する前に、Terraform が State File を保存するために利用可能な リモートバックエンド のいずれかを選択することをお勧めします。 State File は、すべてのコンポーネントを再作成することなく、アップグレードを実行したりデプロイメントに変更を加えたりするために必要なリソースです。 Terraform モジュールは、以下の「必須」コンポーネントをデプロイします。
  • Azure Resource Group
  • Azure Virtual Network (VPC)
  • Azure MySQL Flexible Server
  • Azure Storage Account & Blob Storage
  • Azure Kubernetes Service
  • Azure Application Gateway
その他のデプロイメントオプションには、以下のオプションコンポーネントを含めることもできます。
  • Azure Cache for Redis
  • Azure Event Grid

事前定義された権限

AzureRM プロバイダーを構成する最も簡単な方法は Azure CLI を使用することですが、自動化を行う場合は Azure Service Principal を使用することも有用です。 使用する認証方法に関わらず、Terraform を実行するアカウントには、イントロダクションで説明したすべてのコンポーネントを作成できる権限が必要です。

一般的な手順

このセクションの手順は、このドキュメントで扱うすべてのデプロイメントオプションに共通です。
  1. 開発環境を準備します。
    • Terraform をインストールします。
    • 使用するコードを Git リポジトリで管理することを推奨しますが、ローカルにファイルを保持することも可能です。
  2. terraform.tfvars ファイルを作成するtvfars ファイルの内容はインストールタイプに応じてカスタマイズできますが、最小限の推奨構成は以下の例のようになります。
     namespace     = "wandb"
     wandb_license = "xxxxxxxxxxyyyyyyyyyyyzzzzzzz"
     subdomain     = "wandb-aws"
     domain_name   = "wandb.ml"
     location      = "westeurope"
    
    ここで定義する変数は、デプロイ前に決定しておく必要があります。namespace 変数は、Terraform によって作成されるすべてのリソースのプレフィックスとなる文字列です。 subdomaindomain の組み合わせによって、W&B が設定される FQDN が形成されます。上記の例では、W&B の FQDN は wandb-aws.wandb.ml になり、この FQDN レコードが作成される DNS の zone_id が使用されます。
  3. versions.tf ファイルを作成する このファイルには、W&B を AWS(Azure 用モジュールを使用する場合も同様の構造)にデプロイするために必要な Terraform および Terraform プロバイダーのバージョンを記述します。
      terraform {
     required_version = "~> 1.3"
    
     required_providers {
       azurerm = {
         source  = "hashicorp/azurerm"
         version = "~> 3.17"
       }
     }
      }
    
    AWS プロバイダーの設定については、Terraform 公式ドキュメント を参照してください。 オプションとして、強く推奨されますが、このドキュメントの冒頭で言及した リモートバックエンド設定 を追加できます。
  4. variables.tf ファイルを作成するterraform.tfvars で設定した各オプションに対して、Terraform では対応する変数宣言が必要です。
        variable "namespace" {
          type        = string
          description = "リソースのプレフィックスに使用される文字列"
        }
    
        variable "location" {
          type        = string
          description = "Azure Resource Group の場所"
        }
    
        variable "domain_name" {
          type        = string
          description = "Weights & Biases UI にアクセスするためのドメイン"
        }
    
        variable "subdomain" {
          type        = string
          default     = null
          description = "Weights & Biases UI にアクセスするためのサブドメイン。デフォルトでは Route53 Route にレコードを作成します"
        }
    
        variable "license" {
          type        = string
          description = "wandb/local のライセンスキー"
        }
    

推奨されるデプロイメント

これは最もシンプルなデプロイメントオプションの設定で、すべての「必須」コンポーネントを作成し、Kubernetes Cluster に最新バージョンの W&B をインストールします。
  1. main.tf を作成する 「一般的な手順」でファイルを作成したのと同じディレクトリーに、以下の内容で main.tf ファイルを作成します。
      provider "azurerm" {
     features {}
      }
    
      provider "kubernetes" {
     host                   = module.wandb.cluster_host
     cluster_ca_certificate = base64decode(module.wandb.cluster_ca_certificate)
     client_key             = base64decode(module.wandb.cluster_client_key)
     client_certificate     = base64decode(module.wandb.cluster_client_certificate)
      }
    
      provider "helm" {
     kubernetes {
       host                   = module.wandb.cluster_host
       cluster_ca_certificate = base64decode(module.wandb.cluster_ca_certificate)
       client_key             = base64decode(module.wandb.cluster_client_key)
       client_certificate     = base64decode(module.wandb.cluster_client_certificate)
     }
      }
    
      # 必要なすべてのサービスを起動
      module "wandb" {
     source  = "wandb/wandb/azurerm"
     version = "~> 1.2"
    
     namespace   = var.namespace
     location    = var.location
     license     = var.license
     domain_name = var.domain_name
     subdomain   = var.subdomain
    
     deletion_protection = false
    
     tags = {
       "Example" : "PublicDns"
     }
      }
    
      output "address" {
     value = module.wandb.address
      }
    
      output "url" {
     value = module.wandb.url
      }
    
  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/azurerm"
  version = "~> 1.2"


  namespace   = var.namespace
  location    = var.location
  license     = var.license
  domain_name = var.domain_name
  subdomain   = var.subdomain

  create_redis       = true # Redis を作成
  [...]

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

デプロイメントオプション 3 は、外部の message broker を有効にすることです。W&B にはブローカーが内蔵されているため、これはオプションです。このオプションによってパフォーマンスが向上することはありません。 メッセージブローカーを提供する Azure リソースは Azure Event Grid です。これを有効にするには、推奨されるデプロイメント で使用したのと同じ main.tfuse_internal_queue = false オプションを追加します。
# 必要なすべてのサービスを起動
module "wandb" {
  source  = "wandb/wandb/azurerm"
  version = "~> 1.2"


  namespace   = var.namespace
  location    = var.location
  license     = var.license
  domain_name = var.domain_name
  subdomain   = var.subdomain

  use_internal_queue       = false # Azure Event Grid を有効化
  [...]
}

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

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