Azureで W&B プラットフォーム を展開する

Azure で W&B サーバー をホスティングする。

自己管理の W&B サーバーを選択した場合、W&B は W&B Server Azure Terraform Module を使用して Azure 上でプラットフォームをデプロイすることをお勧めします。

このモジュールのドキュメントは詳細で、使用可能なオプションがすべて含まれています。本書では、一部のデプロイメント オプションについて説明します。

開始する前に、Terraform の State File を保存するために利用可能な リモート バックエンド のいずれかを選択することをお勧めします。

State File は、アップグレードを展開したり、すべてのコンポーネントを再作成することなくデプロイメントの変更を行ったりするために必要なリソースです。

Terraform モジュールは、次の「必須」コンポーネントをデプロイします。

  • Azure リソース グループ
  • Azure 仮想ネットワーク (VPC)
  • Azure MySQL Flexible サーバー
  • Azure ストレージ アカウント & Blob ストレージ
  • Azure Kubernetes サービス
  • Azure アプリケーション ゲートウェイ

その他のデプロイメント オプションには、次のオプション コンポーネントが含まれる場合があります。

  • Azure Cache for Redis
  • Azure Event Grid

前提条件の権限

AzureRM プロバイダーを設定する最も簡単な方法は Azure CLI 経由ですが、Azure サービス プリンシパル を使用した自動化の場合も便利です。 使用される認証メソッドに関わらず、Terraform を実行するアカウントはイントロダクションで説明されているすべてのコンポーネントを作成できる必要があります。

一般的な手順

このトピックの手順は、このドキュメントでカバーされているいずれのデプロイメント オプションにも共通しています。

  1. 開発環境を準備します。
  • Terraform をインストールします。
  • 使用するコードで Git リポジトリを作成することをお勧めしますが、ファイルをローカルに保持することもできます。
  1. terraform.tfvars ファイルを作成します tvfars ファイルの内容はインストール タイプに応じてカスタマイズできますが、最低限の推奨事項は以下の例のようになります。

     namespace     = "wandb"
     wandb_license = "xxxxxxxxxxyyyyyyyyyyyzzzzzzz"
     subdomain     = "wandb-aws"
     domain_name   = "wandb.ml"
     location      = "westeurope"
    
    Bash

    ここで定義されている変数は、デプロイメントの前に決定する必要があります。namespace 変数は、Terraform によって作成されるすべてのリソースの接頭辞となる文字列です。

    subdomaindomain の組み合わせは、W&B が設定される FQDN を形成します。上記の例では、W&B の FQDN は wandb-aws.wandb.ml となり、FQDN レコードが作成される DNS zone_id が指定されます。

  2. versions.tf ファイルを作成します このファイルには、AWS に W&B をデプロイするのに必要な Terraform および Terraform プロバイダーのバージョンが含まれています。

terraform {
  required_version = "~> 1.3"

  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~> 3.17"
    }
  }
}
Bash

AWS プロバイダーを設定するには、Terraform Official Documentation を参照してください。

また、強く推奨される のは、ドキュメントの冒頭で言及された リモート バックエンド設定 を追加することです。

  1. ファイル variables.tf を作成します。terraform.tfvars で構成されたすべてのオプションについて、Terraform は対応する変数宣言を必要とします。
  variable "namespace" {
    type        = string
    description = "リソースの接頭辞に使用される文字列。"
  }

  variable "location" {
    type        = string
    description = "Azure リソース グループの場所"
  }

  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 ライセンス"
  }
Bash

推奨デプロイメント

これは、すべての「必須」コンポーネントを作成し、最新バージョンの W&BKubernetes クラスター にインストールする最も簡単なデプロイメント オプション設定です。

  1. main.tf を作成します General Steps で作成したファイルと同じディレクトリに、次の内容で 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
}
Bash
  1. W&B にデプロイ W&B にデプロイするには、次のコマンドを実行します:

    terraform init
    terraform apply -var-file=terraform.tfvars
    

REDIS キャッシュを使用したデプロイメント

別のデプロイメント オプションとして、Redis を使用して SQL クエリをキャッシュし、実験のメトリクスを読み込む際のアプリケーション応答を高速化します。

キャッシュを有効にするには、recommended deployment(#recommended-deployment) で使用したのと同じ 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 を作成
  [...]
Bash

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

デプロイメント オプション 3 は、外部の message broker を有効にすることです。 これはオプションであり、W&B にはブローカーが組み込まれているため、パフォーマンスの向上はもたらされません。

message broker を提供する Azure リソースは Azure Event Grid であり、有効にするには、recommended deployment(#recommended-deployment) で使用したのと同じ 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 を有効にする
  [...]
}
Bash

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

3 つのデプロイメント オプションすべてを組み合わせて、すべての構成を同じファイルに追加できます。 Teraform モジュール は、標準オプションや recommended deployment に見られる最小構成と組み合わせることができるいくつかのオプションを提供します。