Azure
W&Bは、W&B Multi-tenant Cloud や W&B Dedicated Cloud のデプロイメントタイプなど、完全管理のデプロイメントオプションを推奨しています。W&Bの完全管理サービスはシンプルで安全に使用でき、設定が最小または不要です。
自己管理のW&B Serverを選んだ場合は、Azure上でプラットフォームをデプロイするために W&B Server Azure Terraform Module を使用することをお勧めします。
モジュールのドキュメントは豊富で、利用可能なすべてのオプションが含まれています。このドキュメントでは、一部のデプロイメントオプションをカバーします。
始める前に、TerraformのState Fileを格納するために使用可能なリモートバックエンドのいずれかを選択することをお勧めします。
State Fileはアップグレードを実施したり、すべてのコンポーネントを再作成することなくデプロイメントに変更を加えるために必要なリソースです。
Terraform Moduleは以下の 必須 コンポーネントをデプロイします:
- Azure Resource Group
- Azure Virtual Network (VPC)
- Azure MySQL Fliexible 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を実行するアカウントは、イントロダクションで説明されているすべてのコンポーネントを作成できる必要があります。
一般的な手順
このトピックのステップは、このドキュメントでカバーされている任意のデプロイメントオプションに共通です。
- 開発環境を準備する。
- Terraform をインストールする
- 使用するコードを含むGitリポジトリを作成することをお勧めしますが、ファイルをローカルに保持することもできます。
- terraform.tfvarsファイルを作成する- tfvarsファイルの内容はインストールタイプに応じてカスタマイズできますが、最低限の推奨事項は以下の例のようになります。- namespace = "wandb"
 wandb_license = "xxxxxxxxxxyyyyyyyyyyyzzzzzzz"
 subdomain = "wandb-aws"
 domain_name = "wandb.ml"
 location = "westeurope"- ここで定義された変数はデプロイメント前に決定する必要があります。 - namespace変数は、Terraformによって作成されるすべてのリソースにプレフィックスとして使用される文字列です。- subdomainと- domainの組み合わせは、W&Bが設定されるFQDNを形成します。上記の例では、W&B FQDNは- wandb-aws.wandb.mlとなり、FQDNレコードが作成されるDNS- zone_idです。
- versions.tfファイルを作成する このファイルには、W&BをAWSにデプロイするために必要なTerraformおよびTerraformプロバイダーのバージョンが含まれます。- terraform {
 required_version = "~> 1.3"
 required_providers {
 azurerm = {
 source = "hashicorp/azurerm"
 version = "~> 3.17"
 }
 }
 }- AWSプロバイダーを設定するための詳細は、Terraform Official Documentation を参照してください。 - 任意ですが強くお勧めするのは、このドキュメントの冒頭で述べたリモートバックエンド設定を追加することです。 
- variables.tfファイルを作成する- terraform.tfvarsに構成された各オプションには対応する変数宣言が必要です。- 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ライセンス"
 }
デプロイメント - 推奨 (~20分)
これは、すべての必須コンポーネントを作成し、最新バージョンのW&BをKubernetes クラスターにインストールする最も簡単なデプロイメントオプション設定です。
- 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
 }
- W&Bにデプロイする W&Bにデプロイするには、以下のコマンドを実行します: - terraform init
 terraform apply -var-file=terraform.tfvars
REDISキャッシュを使用したデプロイメント
別のデプロイメントオプションとして、Redisを使用してSQLクエリをキャッシュし、実験のメトリクスを読み込む際のアプリケーション応答速度を向上させる方法があります。
キャッシュを有効にするには、Deployment Recommendedで説明した同じ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は、外部のメッセージブローカーを有効にするもので、これは任意です。なぜなら、W&Bには埋め込みブローカーが含まれているためです。このオプションはパフォーマンスの改善をもたらしません。
メッセージブローカーを提供するAzureリソースはAzure Event Gridであり、これを有効にするには、Deployment Recommendedで説明した同じmain.tfファイルにuse_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 には、標準オプションやDeployment Recommendedで見つかる最小構成とともに組み合わせることができる複数のオプションが用意されています。