これは、このセクションの複数ページの印刷可能なビューです。 印刷するには、ここをクリックしてください.

このページの通常のビューに戻る.

W&B Platform

W&B Platform は、CoreModelsWeave などの W&B 製品をサポートする、基盤となるインフラストラクチャー、 ツール 、およびガバナンスの足場です。

W&B Platform は、次の3つの異なる デプロイメント オプションで利用できます。

次の責任分担表は、主な違いの概要を示しています。

Multi-tenant Cloud Dedicated Cloud Customer-managed
MySQL / DB 管理 W&B が完全にホストおよび管理 W&B が クラウド 上またはお客様が選択したリージョンで完全にホストおよび管理 お客様が完全にホストおよび管理
オブジェクトストレージ (S3/GCS/Blob storage) オプション1: W&B が完全にホスト
オプション2: お客様は、Secure Storage Connector を使用して、 チーム ごとに独自の バケット を構成できます
オプション1: W&B が完全にホスト
オプション2: お客様は、Secure Storage Connector を使用して、インスタンスまたは チーム ごとに独自の バケット を構成できます
お客様が完全にホストおよび管理
SSO サポート Auth0 経由で W&B が管理 オプション1: お客様が管理
オプション2: Auth0 経由で W&B が管理
お客様が完全に管理
W&B サービス (App) W&B が完全に管理 W&B が完全に管理 お客様が完全に管理
App セキュリティー W&B が完全に管理 W&B とお客様の共同責任 お客様が完全に管理
メンテナンス (アップグレード、 バックアップ など) W&B が管理 W&B が管理 お客様が管理
サポート サポート SLA サポート SLA サポート SLA
サポートされている クラウド インフラストラクチャー GCP AWS、GCP、Azure AWS、GCP、Azure、 オンプレミス ベアメタル

デプロイメント オプション

次のセクションでは、各 デプロイメント タイプの概要について説明します。

W&B Multi-tenant Cloud

W&B Multi-tenant Cloud は、W&B の クラウド インフラストラクチャー に デプロイ されたフルマネージド サービスです。ここでは、希望する規模で W&B 製品にシームレスに アクセス でき、費用対効果の高い価格オプション、最新の機能と機能の継続的なアップデートを利用できます。プライベート デプロイメント のセキュリティーが不要で、セルフサービスでのオンボーディングが重要であり、コスト効率が重要な場合は、製品 トライアル に Multi-tenant Cloud を使用するか、 プロダクション AI ワークフロー を管理することをお勧めします。

詳細については、W&B Multi-tenant Cloud を参照してください。

W&B Dedicated Cloud

W&B Dedicated Cloud は、W&B の クラウド インフラストラクチャー に デプロイ された シングルテナント のフルマネージド サービスです。 データ 常駐を含む厳格なガバナンス コントロールへの準拠が組織で必要であり、高度なセキュリティー機能を必要とし、セキュリティー、スケール、およびパフォーマンスの特性を備えた必要な インフラストラクチャー を構築および管理する必要がないことによって AI の運用コストを最適化しようとしている場合は、W&B をオンボーディングするのに最適な場所です。

詳細については、W&B Dedicated Cloud を参照してください。

W&B Customer-Managed

このオプションを使用すると、独自の管理対象 インフラストラクチャー に W&B Server を デプロイ して管理できます。W&B Server は、W&B Platform と、サポートされている W&B 製品を 実行 するための自己完結型のパッケージ化されたメカニズムです。既存の インフラストラクチャー がすべて オンプレミス にあり、W&B Dedicated Cloud では満たされない厳格な規制ニーズが組織にある場合は、このオプションをお勧めします。このオプションを使用すると、W&B Server をサポートするために必要な インフラストラクチャー のプロビジョニング、および継続的な メンテナンス とアップグレードを管理する責任を完全に負います。

詳細については、W&B Self Managed を参照してください。

次のステップ

W&B 製品のいずれかを試してみたい場合は、Multi-tenant Cloud を使用することをお勧めします。エンタープライズ向けのセットアップをお探しの場合は、 トライアル に適した デプロイメント タイプをこちらから選択してください。

1 - Deployment options

1.1 - Use W&B Multi-tenant SaaS

W&B Multi-tenant Cloud は、W&B の Google Cloud Platform (GCP) アカウント内の GPC の北米リージョン にデプロイされた、フルマネージドのプラットフォームです。 W&B Multi-tenant Cloud は、GCP の自動スケーリングを利用して、トラフィックの増減に基づいてプラットフォームが適切にスケーリングされるようにします。

データセキュリティ

エンタープライズプラン以外のユーザーの場合、すべての data は共有クラウドストレージにのみ保存され、共有クラウドコンピューティングサービスで処理されます。料金プランによっては、ストレージ制限が適用される場合があります。

エンタープライズプランのユーザーは、セキュアストレージコネクタを使用して、独自の bucket (BYOB) を持ち込む ことができます。team level で、model、datasets などのファイルを保存できます。複数の Teams に対して 1 つの bucket を設定することも、異なる W&B Teams に対して個別の buckets を使用することもできます。team に対してセキュアストレージコネクタを設定しない場合、その data は共有クラウドストレージに保存されます。

Identity and access management (IAM)

エンタープライズプランをご利用の場合、W&B Organization でセキュアな認証と効果的な承認のために、identity and access managements 機能を使用できます。 Multi-tenant Cloud の IAM では、次の機能が利用可能です。

  • OIDC または SAML による SSO 認証。 Organization の SSO を設定する場合は、W&B team またはサポートにお問い合わせください。
  • Organization のスコープ内および team 内で、適切な user ロールを設定 します。
  • W&B project のスコープを定義して、制限付き projects で、誰が W&B runs を表示、編集、送信できるかを制限します。

モニター

Organization 管理者は、アカウントビューの [Billing] タブから、アカウントの使用状況と請求を管理できます。 Multi-tenant Cloud 上の共有クラウドストレージを使用している場合、管理者は organization 内の異なる Teams 間でストレージ使用量を最適化できます。

メンテナンス

W&B Multi-tenant Cloud は、マルチテナントのフルマネージドプラットフォームです。 W&B Multi-tenant Cloud は W&B によって管理されているため、W&B プラットフォームのプロビジョニングとメンテナンスのオーバーヘッドとコストは発生しません。

コンプライアンス

Multi-tenant Cloud のセキュリティコントロールは、定期的 内部および外部で監査されます。 SOC2 レポートおよびその他のセキュリティとコンプライアンスに関するドキュメントをリクエストするには、W&B Security Portal を参照してください。

次のステップ

エンタープライズ機能以外をお探しの場合は、Multi-tenant Cloud に直接アクセス してください。エンタープライズプランを開始するには、このフォーム を送信してください。

1.2 - Dedicated Cloud

専用クラウド (シングルテナントSaaS)

W&B 専用クラウド は、W&B の AWS、GCP、または Azure クラウドアカウントにデプロイされた、シングルテナントで完全に管理されたプラットフォームです。各 専用クラウド インスタンスは、他の W&B 専用クラウド インスタンスから独立したネットワーク、コンピューティング、ストレージを持っています。お客様の W&B 固有の メタデータ と データ は、独立したクラウドストレージに保存され、独立したクラウドコンピューティングサービスを使用して処理されます。

W&B 専用クラウド は、各クラウドプロバイダーの複数のグローバルリージョンで利用可能です。

データセキュリティ

セキュアストレージコネクタを使用して、インスタンスおよび Team レベルで、お客様自身の バケット (BYOB) を持ち込み、モデル、データセット などのファイル を保存できます。

W&B マルチテナント Cloud と同様に、複数の Team に対して単一の バケット を構成するか、異なる Team に対して別々の バケット を使用できます。Team に対してセキュアストレージコネクタを構成しない場合、その データ はインスタンスレベルの バケット に保存されます。

セキュアストレージコネクタによる BYOB に加えて、IP 許可リストを利用して、信頼できるネットワークロケーションからのみ 専用クラウド インスタンスへの アクセス を制限できます。

また、クラウドプロバイダーのセキュアな接続ソリューションを使用して、専用クラウド インスタンスにプライベートに接続することもできます。

ID と アクセス 管理 (IAM)

W&B Organization でセキュアな認証と効果的な認可のために、ID と アクセス 管理機能を使用します。専用クラウド インスタンスの IAM では、次の機能が利用可能です。

モニター

監査 ログを使用して、Team 内の ユーザー アクティビティを追跡し、エンタープライズガバナンス要件に準拠します。また、W&B Organization Dashboardで 専用クラウド インスタンスの Organization の使用状況を表示できます。

メンテナンス

W&B マルチテナント Cloud と同様に、専用クラウド では W&B プラットフォーム のプロビジョニングとメンテナンスのオーバーヘッドとコストは発生しません。

W&B が 専用クラウド での更新をどのように管理するかを理解するには、サーバー リリース プロセスを参照してください。

コンプライアンス

W&B 専用クラウド のセキュリティコントロールは、定期的 に内部および外部で監査されます。製品評価の演習のためにセキュリティおよびコンプライアンスドキュメントをリクエストするには、W&B Security Portalを参照してください。

移行オプション

自己管理インスタンスまたはマルチテナント Cloudからの 専用クラウド への移行がサポートされています。

次のステップ

専用クラウド の使用にご興味がある場合は、このフォームを送信してください。

1.2.1 - Supported Dedicated Cloud regions

AWS、GCP、および Azure は、世界中の複数の場所でクラウドコンピューティングサービスをサポートしています。グローバルリージョンは、データ所在地とコンプライアンス、レイテンシー、コスト効率などに関連する要件を満たすのに役立ちます。W&B は、専用クラウドで利用可能な多くのグローバルリージョンをサポートしています。

サポートされている AWS リージョン

次の表は、W&B が現在専用クラウドインスタンスでサポートしている AWS リージョン を示しています。

リージョンの場所 リージョン名
米国東部 (オハイオ) us-east-2
米国東部 (バージニア北部) us-east-1
米国西部 (北カリフォルニア) us-west-1
米国西部 (オレゴン) us-west-2
カナダ (中部) ca-central-1
ヨーロッパ (フランクフルト) eu-central-1
ヨーロッパ (アイルランド) eu-west-1
ヨーロッパ (ロンドン) eu-west-2
ヨーロッパ (ミラノ) eu-south-1
ヨーロッパ (ストックホルム) eu-north-1
アジアパシフィック (ムンバイ) ap-south-1
アジアパシフィック (シンガポール) ap-southeast-1
アジアパシフィック (シドニー) ap-southeast-2
アジアパシフィック (東京) ap-northeast-1
アジアパシフィック (ソウル) ap-northeast-2

AWS リージョンの詳細については、AWS ドキュメントの リージョン、アベイラビリティーゾーン、およびローカルゾーン を参照してください。

AWS リージョンを選択する際に考慮すべき要素の概要については、ワークロードのリージョンを選択する際に考慮すべきこと を参照してください。

サポートされている GCP リージョン

次の表は、W&B が現在専用クラウドインスタンスでサポートしている GCP リージョン を示しています。

リージョンの場所 リージョン名
サウスカロライナ us-east1
バージニア北部 us-east4
アイオワ us-central1
オレゴン us-west1
ロサンゼルス us-west2
ラスベガス us-west4
トロント northamerica-northeast2
ベルギー europe-west1
ロンドン europe-west2
フランクフルト europe-west3
オランダ europe-west4
シドニー australia-southeast1
東京 asia-northeast1
ソウル asia-northeast3

GCP リージョンの詳細については、GCP ドキュメントの リージョンとゾーン を参照してください。

サポートされている Azure リージョン

次の表は、W&B が現在専用クラウドインスタンスでサポートしている Azure リージョン を示しています。

リージョンの場所 リージョン名
バージニア eastus
アイオワ centralus
ワシントン westus2
カリフォルニア westus
カナダ中部 canadacentral
フランス中部 francecentral
オランダ westeurope
東京、埼玉 japaneast
ソウル koreacentral

Azure リージョンの詳細については、Azure ドキュメントの Azure geography を参照してください。

1.2.2 - Export data from Dedicated cloud

専用クラウド からのデータのエクスポート

もし、 専用クラウド インスタンスで管理されている全てのデータをエクスポートしたい場合は、W&B SDK API を使用して、runs、metrics、Artifacts などを抽出できます。詳しくは、インポートとエクスポート API を参照してください。以下の表は、主要なエクスポートの ユースケース をまとめたものです。

目的 ドキュメント
プロジェクト の メタデータ をエクスポート Projects API
プロジェクト 内の runs をエクスポート Runs API
Reports をエクスポート Reports API
Artifacts をエクスポート アーティファクト グラフの探索, アーティファクト のダウンロードと利用

Secure Storage Connector で 専用クラウド に保存されている Artifacts を管理している場合、W&B SDK API を使用して Artifacts をエクスポートする必要はないかもしれません。

1.3 - Self-managed

W&B をプロダクション環境にデプロイする

セルフマネージドクラウドまたはオンプレミスインフラストラクチャーの使用

AWS、GCP、または Azure クラウドアカウント または オンプレミスインフラストラクチャー に W&B Server をデプロイします。

お客様の IT/DevOps/MLOps チームは、お客様のデプロイメントのプロビジョニング、アップグレードの管理、およびセルフマネージドな W&B Server インスタンスの継続的なメンテナンスを担当します。

セルフマネージドクラウドアカウント内への W&B Server のデプロイ

W&B は、W&B Server を AWS、GCP、または Azure クラウドアカウントにデプロイするために、公式の W&B Terraform スクリプトを使用することを推奨します。

AWS, GCP または Azure での W&B Server のセットアップ方法の詳細については、特定のクラウドプロバイダーのドキュメントを参照してください。

オンプレミスインフラストラクチャーへの W&B Server のデプロイ

オンプレミスインフラストラクチャーに W&B Server をセットアップするには、いくつかのインフラストラクチャーコンポーネントを設定する必要があります。これらのコンポーネントには、以下が含まれますが、これらに限定されません。

  • (強く推奨) Kubernetes cluster
  • MySQL 8 database cluster
  • Amazon S3 互換 object storage
  • Redis cache cluster

オンプレミスインフラストラクチャーへの W&B Server のインストール方法の詳細については、オンプレミスインフラストラクチャーへのインストール を参照してください。W&B は、さまざまなコンポーネントに関する推奨事項を提供し、インストールプロセスを通じてガイダンスを提供できます。

カスタムクラウドプラットフォームへの W&B Server のデプロイ

AWS、GCP、または Azure ではないクラウドプラットフォームに W&B Server をデプロイできます。そのための要件は、オンプレミスインフラストラクチャー にデプロイする場合と同様です。

W&B Server のライセンスの取得

W&B サーバーの設定を完了するには、W&B trial ライセンスが必要です。Deploy Manager を開いて、無料の trial ライセンスを生成してください。

URL をクリックすると、Get a License for W&B Local フォームにリダイレクトされます。次の情報を提供してください。

  1. Choose Platform ステップで、デプロイメントタイプを選択します。
  2. Basic Information ステップで、ライセンスの所有者を選択するか、新しい組織を追加します。
  3. Get a License ステップの Name of Instance フィールドにインスタンスの名前を入力し、必要に応じて Description フィールドに説明を入力します。
  4. Generate License Key ボタンを選択します。

ページに、デプロイメントの概要と、インスタンスに関連付けられたライセンスが表示されます。

1.3.1 - Reference Architecture

W&B リファレンス アーキテクチャー

このページでは、Weights & Biases のデプロイメントのリファレンスアーキテクチャについて説明し、プラットフォームのプロダクションデプロイメントをサポートするために推奨されるインフラストラクチャとリソースの概要を示します。

Weights & Biases (W&B) に選択したデプロイメント環境に応じて、さまざまなサービスがデプロイメントの回復性を高めるのに役立ちます。

たとえば、主要なクラウドプロバイダーは、データベースの構成、メンテナンス、高可用性、および回復性の複雑さを軽減するのに役立つ、堅牢なマネージドデータベースサービスを提供しています。

このリファレンスアーキテクチャは、一般的なデプロイメントシナリオに対応し、最適なパフォーマンスと信頼性を実現するために、W&B のデプロイメントをクラウドベンダーサービスと統合する方法を示しています。

開始する前に

プロダクション環境でアプリケーションを実行するには、独自の課題があり、W&B も例外ではありません。プロセスの合理化を目指していますが、固有のアーキテクチャと設計上の決定によっては、特定の複雑さが発生する可能性があります。通常、プロダクションデプロイメントの管理には、ハードウェア、オペレーティングシステム、ネットワーク、ストレージ、セキュリティ、W&B プラットフォーム自体、およびその他の依存関係を含む、さまざまなコンポーネントの監視が含まれます。この責任は、環境の初期設定とその継続的なメンテナンスの両方に及びます。

W&B を使用した自己管理アプローチが、チームと特定の要件に適しているかどうかを慎重に検討してください。

プロダクショングレードのアプリケーションを実行および保守する方法をしっかりと理解しておくことは、自己管理の W&B をデプロイする前に重要な前提条件となります。チームが支援を必要とする場合は、当社の Professional Services チームとパートナーが、実装と最適化のサポートを提供します。

W&B を自分で管理する代わりに、W&B を実行するためのマネージドソリューションの詳細については、W&B Multi-tenant Cloud および W&B Dedicated Cloud を参照してください。

インフラストラクチャ

W&B infrastructure diagram

アプリケーション層

アプリケーション層は、ノード障害に対する回復性を持つ、マルチノード Kubernetes クラスターで構成されています。Kubernetes クラスターは、W&B の pod を実行および保守します。

ストレージ層

ストレージ層は、MySQL データベースとオブジェクトストレージで構成されています。MySQL データベースはメタデータを格納し、オブジェクトストレージはモデルやデータセットなどの Artifacts を格納します。

インフラストラクチャ要件

Kubernetes

W&B Server アプリケーションは、複数の pod をデプロイする Kubernetes Operator としてデプロイされます。このため、W&B には次のものを持つ Kubernetes クラスターが必要です。

  • 完全に構成され、機能する Ingress コントローラー。
  • Persistent Volumes をプロビジョニングする機能。

MySQL

W&B は、メタデータを MySQL データベースに格納します。データベースのパフォーマンスとストレージ要件は、モデルパラメータと関連するメタデータの形状によって異なります。たとえば、トレーニング run を追跡するほどデータベースのサイズが大きくなり、run テーブル、ユーザー Workspace 、および Reports のクエリに基づいてデータベースの負荷が増加します。

自己管理の MySQL データベースをデプロイする場合は、以下を検討してください。

  • バックアップ。データベースを別の施設に定期的にバックアップする必要があります。W&B は、少なくとも 1 週間の保持期間で毎日バックアップすることをお勧めします。
  • パフォーマンス。サーバーが実行されているディスクは高速である必要があります。W&B は、SSD または高速化された NAS でデータベースを実行することをお勧めします。
  • 監視。データベースの負荷を監視する必要があります。CPU 使用率がシステムの 40% を超えて 5 分以上維持されている場合は、サーバーのリソースが不足している可能性が高いことを示しています。
  • 可用性。可用性と耐久性の要件に応じて、プライマリサーバーからリアルタイムですべての更新をストリーミングし、プライマリサーバーがクラッシュまたは破損した場合にフェイルオーバーに使用できる、別のマシン上のホットスタンバイを構成することができます。

オブジェクトストレージ

W&B には、次のいずれかにデプロイされた、事前署名付き URL と CORS をサポートするオブジェクトストレージが必要です。

  • Amazon S3
  • Azure Cloud Storage
  • Google Cloud Storage
  • Amazon S3 と互換性のあるストレージサービス

バージョン

ソフトウェア 最小バージョン
Kubernetes v1.29
MySQL v8.0.0, “General Availability” リリースのみ

ネットワーク

ネットワーク化されたデプロイメントでは、インストール時と実行時の_両方_で、これらのエンドポイントへの出力が必要です。

エアギャップデプロイメントの詳細については、エアギャップインスタンス用の Kubernetes operator を参照してください。 トレーニングインフラストラクチャと、 Experiments のニーズを追跡する各システムには、W&B とオブジェクトストレージへのアクセスが必要です。

DNS

W&B デプロイメントの完全修飾ドメイン名 (FQDN) は、A レコードを使用して、イングレス/ロードバランサーの IP アドレスに解決される必要があります。

SSL/TLS

W&B では、クライアントとサーバー間の安全な通信のために、有効な署名付き SSL/TLS 証明書が必要です。SSL/TLS 終端は、イングレス/ロードバランサーで発生する必要があります。W&B Server アプリケーションは、SSL または TLS 接続を終端しません。

注意: W&B は、自己署名証明書とカスタム CA の使用を推奨していません。

サポートされている CPU アーキテクチャ

W&B は、Intel (x86) CPU アーキテクチャで実行されます。ARM はサポートされていません。

インフラストラクチャのプロビジョニング

Terraform は、プロダクション用に W&B をデプロイする推奨される方法です。Terraform を使用して、必要なリソース、他のリソースへの参照、および依存関係を定義します。W&B は、主要なクラウドプロバイダー向けの Terraform モジュールを提供しています。詳細については、自己管理のクラウドアカウント内で W&B Server をデプロイする を参照してください。

サイジング

デプロイメントを計画する際の開始点として、次の一般的なガイドラインを使用してください。W&B は、新しいデプロイメントのすべてのコンポーネントを注意深く監視し、観察された使用パターンに基づいて調整することをお勧めします。時間の経過とともにプロダクションデプロイメントを監視し続け、最適なパフォーマンスを維持するために必要に応じて調整します。

Models のみ

Kubernetes

環境 CPU メモリ ディスク
テスト/開発 2 コア 16 GB 100 GB
プロダクション 8 コア 64 GB 100 GB

数値は Kubernetes ワーカーノードごとの値です。

MySQL

環境 CPU メモリ ディスク
テスト/開発 2 コア 16 GB 100 GB
プロダクション 8 コア 64 GB 500 GB

数値は MySQL ノードごとの値です。

Weave のみ

Kubernetes

環境 CPU メモリ ディスク
テスト/開発 4 コア 32 GB 100 GB
プロダクション 12 コア 96 GB 100 GB

数値は Kubernetes ワーカーノードごとの値です。

MySQL

環境 CPU メモリ ディスク
テスト/開発 2 コア 16 GB 100 GB
プロダクション 8 コア 64 GB 500 GB

数値は MySQL ノードごとの値です。

Models と Weave

Kubernetes

環境 CPU メモリ ディスク
テスト/開発 4 コア 32 GB 100 GB
プロダクション 16 コア 128 GB 100 GB

数値は Kubernetes ワーカーノードごとの値です。

MySQL

環境 CPU メモリ ディスク
テスト/開発 2 コア 16 GB 100 GB
プロダクション 8 コア 64 GB 500 GB

数値は MySQL ノードごとの値です。

クラウドプロバイダーのインスタンス推奨事項

サービス

クラウド Kubernetes MySQL オブジェクトストレージ
AWS EKS RDS Aurora S3
GCP GKE Google Cloud SQL - Mysql Google Cloud Storage (GCS)
Azure AKS Azure Database for Mysql Azure Blob Storage

マシンタイプ

これらの推奨事項は、クラウドインフラストラクチャでの W&B の自己管理デプロイメントの各ノードに適用されます。

AWS

環境 K8s (Models のみ) K8s (Weave のみ) K8s (Models&Weave) MySQL
テスト/開発 r6i.large r6i.xlarge r6i.xlarge db.r6g.large
プロダクション r6i.2xlarge r6i.4xlarge r6i.4xlarge db.r6g.2xlarge

GCP

環境 K8s (Models のみ) K8s (Weave のみ) K8s (Models&Weave) MySQL
テスト/開発 n2-highmem-2 n2-highmem-4 n2-highmem-4 db-n1-highmem-2
プロダクション n2-highmem-8 n2-highmem-16 n2-highmem-16 db-n1-highmem-8

Azure

環境 K8s (Models のみ) K8s (Weave のみ) K8s (Models&Weave) MySQL
テスト/開発 Standard_E2_v5 Standard_E4_v5 Standard_E4_v5 MO_Standard_E2ds_v4
プロダクション Standard_E8_v5 Standard_E16_v5 Standard_E16_v5 MO_Standard_E8ds_v4

1.3.2 - Run W&B Server on Kubernetes

Kubernetes Operator を使用して W&B Platform をデプロイする

W&B Kubernetes Operator

W&B Kubernetes Operatorを使用すると、Kubernetes上でのW&B Serverのデプロイ、管理、トラブルシューティング、およびスケーリングを簡素化できます。このOperatorは、W&Bインスタンスのスマートアシスタントとして考えることができます。

W&B Serverのアーキテクチャと設計は、AI開発者向け ツール の機能を拡張し、高パフォーマンス、優れたスケーラビリティ、および容易な管理のための適切なプリミティブを提供するために、継続的に進化しています。この進化は、コンピューティングサービス、関連するストレージ、およびそれらの間の接続に適用されます。デプロイメントタイプ全体での継続的な更新と改善を促進するために、W&B は Kubernetes operator を使用します。

Kubernetes operator の詳細については、KubernetesドキュメントのOperator patternを参照してください。

アーキテクチャ移行の理由

従来、W&B アプリケーションは、Kubernetes クラスター内の単一のデプロイメントおよび pod として、または単一の Docker コンテナとしてデプロイされていました。W&B は、データベースと Object Store を外部化することを推奨しており、今後も推奨していきます。データベースと Object Store を外部化すると、アプリケーションの状態が分離されます。

アプリケーションの成長に伴い、モノリシックなコンテナから分散システム(マイクロサービス)に進化する必要性が明らかになりました。この変更により、バックエンドロジックの処理が容易になり、Kubernetes インフラストラクチャの機能がシームレスに組み込まれます。分散システムは、W&B が依存する追加機能に不可欠な新しいサービスのデプロイもサポートします。

2024年以前は、Kubernetes関連の変更を行うには、terraform-kubernetes-wandb Terraformモジュールを手動で更新する必要がありました。Terraformモジュールを更新することで、クラウドプロバイダー間での互換性が確保され、必要なTerraform変数が構成され、バックエンドまたはKubernetesレベルの変更ごとにTerraformが適用されます。

このプロセスは、W&Bサポートが各顧客のTerraformモジュールのアップグレードを支援する必要があったため、スケーラブルではありませんでした。

解決策は、中央のdeploy.wandb.aiサーバーに接続して、特定のリリースチャネルの最新の仕様変更をリクエストし、適用する operator を実装することでした。ライセンスが有効である限り、更新が受信されます。Helmは、W&B operator のデプロイメントメカニズムと、W&B Kubernetesスタックのすべての構成テンプレートを operator が処理する手段の両方として使用されます(Helm-ception)。

仕組み

Operator は、helm またはソースからインストールできます。詳細な手順については、charts/operatorを参照してください。

インストールプロセスでは、controller-managerというデプロイメントが作成され、weightsandbiases.apps.wandb.comというカスタムリソース定義(shortName:wandb)が使用されます。これは単一のspecを取得し、それをクラスターに適用します。

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: weightsandbiases.apps.wandb.com

controller-managerは、カスタムリソースの仕様、リリースチャネル、およびユーザー定義の構成に基づいて、charts/operator-wandbをインストールします。構成仕様の階層により、ユーザー側で最大限の構成の柔軟性が実現し、W&B は新しいイメージ、構成、機能、および Helm の更新を自動的にリリースできます。

構成オプションについては、構成仕様の階層および構成リファレンスを参照してください。

構成仕様の階層

構成仕様は、高レベルの仕様が低レベルの仕様をオーバーライドする階層モデルに従います。その仕組みは次のとおりです。

  • リリースチャネルの値: この基本レベルの構成では、W&B によってデプロイメント用に設定されたリリースチャネルに基づいて、デフォルト値と構成が設定されます。
  • ユーザー入力値: ユーザーは、システムコンソールを介して、リリースチャネルの仕様によって提供されるデフォルト設定をオーバーライドできます。
  • カスタムリソースの値: ユーザーからの仕様の最上位レベル。ここで指定された値は、ユーザー入力とリリースチャネルの両方の仕様をオーバーライドします。構成オプションの詳細については、構成リファレンスを参照してください。

この階層モデルにより、構成は柔軟で、さまざまなニーズに合わせてカスタマイズでき、アップグレードと変更に対する管理可能で体系的なアプローチを維持できます。

W&B Kubernetes Operatorを使用するための要件

W&B Kubernetes operator で W&B をデプロイするには、次の要件を満たす必要があります。

リファレンスアーキテクチャを参照してください。さらに、有効な W&B Server ライセンスを取得してください。

自己管理型インストールを設定および構成する方法の詳細な説明については、こちらのガイドを参照してください。

インストール方法によっては、次の要件を満たす必要がある場合があります。

  • Kubectl がインストールされ、正しい Kubernetes クラスターコンテキストで構成されている。
  • Helm がインストールされている。

エアギャップ環境へのインストール

エアギャップ環境に W&B Kubernetes Operator をインストールする方法については、Kubernetes を使用したエアギャップ環境での W&B のデプロイのチュートリアルを参照してください。

W&B Server アプリケーションのデプロイ

このセクションでは、W&B Kubernetes operator をデプロイするさまざまな方法について説明します。

次のいずれかを選択してください。

  • 必要な外部サービスをすべてプロビジョニングし、Helm CLI を使用して W&B を Kubernetes にデプロイする場合は、こちらに進んでください。
  • インフラストラクチャと W&B Server を Terraform で管理する場合は、こちらに進んでください。
  • W&B Cloud Terraform Modules を利用する場合は、こちらに進んでください。

Helm CLI を使用した W&B のデプロイ

W&B は、W&B Kubernetes operator を Kubernetes クラスターにデプロイするための Helm Chart を提供します。このアプローチを使用すると、Helm CLI または ArgoCD などの継続的デリバリー ツールで W&B Server をデプロイできます。上記の要件が満たされていることを確認してください。

Helm CLI を使用して W&B Kubernetes Operator をインストールするには、次の手順に従います。

  1. W&B Helm リポジトリを追加します。W&B Helm チャートは、W&B Helm リポジトリで入手できます。次のコマンドを使用してリポジトリを追加します。
helm repo add wandb https://charts.wandb.ai
helm repo update
  1. Kubernetes クラスターに Operator をインストールします。以下をコピーして貼り付けます。
helm upgrade --install operator wandb/operator -n wandb-cr --create-namespace
  1. W&B Server のインストールをトリガーするように W&B operator カスタムリソースを構成します。この構成例を operator.yaml というファイルにコピーして、W&B デプロイメントをカスタマイズできるようにします。構成リファレンスを参照してください。

    apiVersion: apps.wandb.com/v1
    kind: WeightsAndBiases
    metadata:
      labels:
        app.kubernetes.io/instance: wandb
        app.kubernetes.io/name: weightsandbiases
      name: wandb
      namespace: default
    
    spec:
      chart:
        url: http://charts.yourdomain.com
        name: operator-wandb
        version: 0.18.0
    
      values:
        global:
          host: https://wandb.yourdomain.com
          license: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
          bucket:
            accessKey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
            secretKey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
            name: s3.yourdomain.com:port #Ex.: s3.yourdomain.com:9000
            path: bucket_name
            provider: s3
            region: us-east-1
          mysql:
            database: wandb
            host: mysql.home.lab
            password: password
            port: 3306
            user: wandb
          extraEnv:
            ENABLE_REGISTRY_UI: 'true'
    
        # Ensure it's set to use your own MySQL
        mysql:
          install: false
    
        app:
          image:
            repository: registry.yourdomain.com/local
            tag: 0.59.2
    
        console:
          image:
            repository: registry.yourdomain.com/console
            tag: 2.12.2
    
        ingress:
          annotations:
            nginx.ingress.kubernetes.io/proxy-body-size: 64m
          class: nginx
    

    W&B Server アプリケーションをインストールおよび構成できるように、カスタム構成で Operator を起動します。

    kubectl apply -f operator.yaml
    

    デプロイメントが完了するまで待ちます。これには数分かかります。

  2. Web UI を使用してインストールを検証するには、最初 の 管理 ユーザー アカウントを作成し、インストールの検証に概説されている検証手順に従います。

Helm Terraform モジュールを使用した W&B のデプロイ

この方法では、Terraform の Infrastructure-as-Code アプローチを活用して、一貫性と再現性を実現し、特定の要件に合わせてカスタマイズされたデプロイメントが可能です。公式の W&B Helm ベースの Terraform モジュールは、こちらにあります。

次のコードは、開始点として使用でき、本番環境グレードのデプロイメントに必要なすべての構成オプションが含まれています。

module "wandb" {
  source  = "wandb/wandb/helm"

  spec = {
    values = {
      global = {
        host    = "https://<HOST_URI>"
        license = "eyJhbGnUzaH...j9ZieKQ2x5GGfw"

        bucket = {
          <details depend on the provider>
        }

        mysql = {
          <redacted>
        }
      }

      ingress = {
        annotations = {
          "a" = "b"
          "x" = "y"
        }
      }
    }
  }
}

構成オプションは構成リファレンスで説明されているものと同じですが、構文は HashiCorp Configuration Language(HCL)に従う必要があることに注意してください。Terraform モジュールは、W&B カスタムリソース定義(CRD)を作成します。

W&B&Biases 自体が Helm Terraform モジュールを使用して顧客向けの「Dedicated cloud」インストールをデプロイする方法については、次のリンクを参照してください。

W&B Cloud Terraform モジュールを使用した W&B のデプロイ

W&B は、AWS、GCP、および Azure 用の一連の Terraform モジュールを提供します。これらのモジュールは、Kubernetes クラスター、ロードバランサー、MySQL データベースなど、インフラストラクチャ全体と W&B Server アプリケーションをデプロイします。W&B Kubernetes Operator は、次のバージョンの公式 W&B クラウド固有の Terraform モジュールですでに事前構築されています。

Terraform Registry Source Code Version
AWS https://github.com/wandb/terraform-aws-wandb v4.0.0+
Azure https://github.com/wandb/terraform-azurerm-wandb v2.0.0+
GCP https://github.com/wandb/terraform-google-wandb v2.0.0+

この統合により、最小限のセットアップでインスタンスに W&B Kubernetes Operator を使用する準備が整い、クラウド環境での W&B Server のデプロイと管理への合理化されたパスが提供されます。

これらのモジュールの使用方法の詳細については、ドキュメントの自己管理型インストールセクションのこのセクションを参照してください。

インストールの検証

インストールを検証するために、W&B はW&B CLIを使用することをお勧めします。verify コマンドは、すべてのコンポーネントと構成を検証するいくつかのテストを実行します。

インストールを検証するには、次の手順に従います。

  1. W&B CLI をインストールします。

    pip install wandb
    
  2. W&B にログインします。

    wandb login --host=https://YOUR_DNS_DOMAIN
    

    例:

    wandb login --host=https://wandb.company-name.com
    
  3. インストールを検証します。

    wandb verify
    

インストールが成功し、完全に動作する W&B デプロイメントでは、次の出力が表示されます。

Default host selected:  https://wandb.company-name.com
Find detailed logs for this test at: /var/folders/pn/b3g3gnc11_sbsykqkm3tx5rh0000gp/T/tmpdtdjbxua/wandb
Checking if logged in...................................................✅
Checking signed URL upload..............................................✅
Checking ability to send large payloads through proxy...................✅
Checking requests to base url...........................................✅
Checking requests made over signed URLs.................................✅
Checking CORs configuration of the bucket...............................✅
Checking wandb package version is up to date............................✅
Checking logged metrics, saving and downloading a file..................✅
Checking artifact save and download workflows...........................✅

W&B 管理コンソールへのアクセス

W&B Kubernetes operator には、管理コンソールが付属しています。これは${HOST_URI}/consoleにあります。たとえば、https://wandb.company-name.com/ console などです。

管理コンソールにログインするには、次の2つの方法があります。

  1. ブラウザで W&B アプリケーションを開き、ログインします。${HOST_URI}/で W&B アプリケーションにログインします。たとえば、https://wandb.company-name.com/

  2. コンソールにアクセスします。右上隅のアイコンをクリックし、次にシステムコンソールをクリックします。管理者権限を持つユーザーのみがシステムコンソールエントリを表示できます。

  1. ブラウザでコンソールアプリケーションを開きます。上記の URL を開き、ログイン画面にリダイレクトします。
  2. インストールによって生成される Kubernetes シークレットからパスワードを取得します。
    kubectl get secret wandb-password -o jsonpath='{.data.password}' | base64 -d
    
    パスワードをコピーします。
  3. コンソールにログインします。コピーしたパスワードを貼り付け、次にログインをクリックします。

W&B Kubernetes operator の更新

このセクションでは、W&B Kubernetes operator を更新する方法について説明します。

以下のコードスニペットをコピーしてターミナルに貼り付けます。

  1. まず、helm repo updateでリポジトリを更新します。

    helm repo update
    
  2. 次に、helm upgradeで Helm チャートを更新します。

    helm upgrade operator wandb/operator -n wandb-cr --reuse-values
    

W&B Server アプリケーションの更新

W&B Kubernetes operator を使用する場合は、W&B Server アプリケーションを更新する必要はなくなりました。

operator は、W&B のソフトウェアの新しいバージョンがリリースされると、W&B Server アプリケーションを自動的に更新します。

自己管理型インスタンスの W&B Operator への移行

次のセクションでは、独自の W&B Server インストールを自己管理することから、W&B Operator を使用してこれを行うように移行する方法について説明します。移行プロセスは、W&B Server のインストール方法によって異なります。

Operator ベースの AWS Terraform Modules への移行

移行プロセスの詳細については、こちらに進んでください。

Operator ベースの GCP Terraform Modules への移行

ご不明な点がある場合や、サポートが必要な場合は、カスタマーサポートまたは W&B チームにお問い合わせください。

Operator ベースの Azure Terraform Modules への移行

ご不明な点がある場合や、サポートが必要な場合は、カスタマーサポートまたは W&B チームにお問い合わせください。

Operator ベースの Helm チャートへの移行

Operator ベースの Helm チャートに移行するには、次の手順に従います。

  1. 現在の W&B 構成を取得します。W&B が非 operator ベースのバージョンの Helm チャートでデプロイされた場合は、次のように値をエクスポートします。

    helm get values wandb
    

    W&B が Kubernetes マニフェストでデプロイされた場合は、次のように値をエクスポートします。

    kubectl get deployment wandb -o yaml
    

    これで、次のステップに必要なすべての構成値が揃いました。

  2. operator.yaml というファイルを作成します。構成リファレンスで説明されている形式に従ってください。ステップ 1 の値を使用します。

  3. 現在のデプロイメントを 0 pod にスケールします。このステップでは、現在のデプロイメントを停止します。

    kubectl scale --replicas=0 deployment wandb
    
  4. Helm チャートリポジトリを更新します。

    helm repo update
    
  5. 新しい Helm チャートをインストールします。

    helm upgrade --install operator wandb/operator -n wandb-cr --create-namespace
    
  6. 新しい Helm チャートを構成し、W&B アプリケーションのデプロイメントをトリガーします。新しい構成を適用します。

    kubectl apply -f operator.yaml
    

    デプロイメントが完了するまでに数分かかります。

  7. インストールを検証します。インストールの検証の手順に従って、すべてが正常に動作することを確認します。

  8. 古いインストールを削除します。古い Helm チャートをアンインストールするか、マニフェストで作成されたリソースを削除します。

Operator ベースの Terraform Helm チャートへの移行

Operator ベースの Helm チャートに移行するには、次の手順に従います。

  1. Terraform 構成を準備します。Terraform 構成で古いデプロイメントの Terraform コードをこちらで説明されているコードに置き換えます。以前と同じ変数を設定します。tfvars ファイルがある場合は変更しないでください。
  2. Terraform run を実行します。terraform init、plan、および apply を実行します。
  3. インストールを検証します。インストールの検証の手順に従って、すべてが正常に動作することを確認します。
  4. 古いインストールを削除します。古い Helm チャートをアンインストールするか、マニフェストで作成されたリソースを削除します。

W&B Server の構成リファレンス

このセクションでは、W&B Server アプリケーションの構成オプションについて説明します。アプリケーションは、WeightsAndBiasesというカスタムリソース定義として構成を受け取ります。一部の構成オプションは以下の構成で公開され、一部は環境変数として設定する必要があります。

ドキュメントには、基本および詳細の2つの環境変数リストがあります。Helm Chart を使用して必要な構成オプションが公開されていない場合にのみ、環境変数を使用してください。

本番環境デプロイメント用の W&B Server アプリケーション構成ファイルには、次の内容が必要です。この YAML ファイルは、バージョン、環境変数、データベースなどの外部リソース、およびその他の必要な設定を含む、W&B デプロイメントの目的の状態を定義します。

apiVersion: apps.wandb.com/v1
kind: WeightsAndBiases
metadata:
  labels:
    app.kubernetes.io/name: weightsandbiases
    app.kubernetes.io/instance: wandb
  name: wandb
  namespace: default
spec:
  values:
    global:
      host: https://<HOST_URI>
      license: eyJhbGnUzaH...j9ZieKQ2x5GGfw
      bucket:
        <details depend on the provider>
      mysql:
        <redacted>
    ingress:
      annotations:
        <redacted>

W&B Helm リポジトリで値の完全なセットを見つけ、オーバーライドする必要がある値のみを変更します。

完全な例

これは、GCP Ingress と GCS(GCP Object storage)を備えた GCP Kubernetes を使用する構成例です。

apiVersion: apps.wandb.com/v1
kind: WeightsAndBiases
metadata:
  labels:
    app.kubernetes.io/name: weightsandbiases
    app.kubernetes.io/instance: wandb
  name: wandb
  namespace: default
spec:
  values:
    global:
      host: https://abc-wandb.sandbox-gcp.wandb.ml
      bucket:
        name: abc-wandb-moving-pipefish
        provider: gcs
      mysql:
        database: wandb_local
        host: 10.218.0.2
        name: wandb_local
        password: 8wtX6cJHizAZvYScjDzZcUarK4zZGjpV
        port: 3306
        user: wandb
      license: eyJhbGnUzaHgyQjQyQWhEU3...ZieKQ2x5GGfw
    ingress:
      annotations:
        ingress.gcp.kubernetes.io/pre-shared-cert: abc-wandb-cert-creative-puma
        kubernetes.io/ingress.class: gce
        kubernetes.io/ingress.global-static-ip-name: abc-wandb-operator-address

ホスト

 # プロトコルを含む FQDN を指定します
global:
  # ホスト名の例、独自のものに置き換えます
  host: https://wandb.example.com

オブジェクトストレージ (バケット)

AWS

global:
  bucket:
    provider: "s3"
    name: ""
    kmsKey: ""
    region: ""

GCP

global:
  bucket:
    provider: "gcs"
    name: ""

Azure

global:
  bucket:
    provider: "az"
    name: ""
    secretKey: ""

その他のプロバイダー (Minio、Ceph など)

その他の S3 互換プロバイダーの場合は、次のようにバケット構成を設定します。

global:
  bucket:
    # 値の例、独自のものに置き換えます
    provider: s3
    name: storage.example.com
    kmsKey: null
    path: wandb
    region: default
    accessKey: 5WOA500...P5DK7I
    secretKey: HDKYe4Q...JAp1YyjysnX

AWS の外部でホストされている S3 互換ストレージの場合、kmsKeynull である必要があります。

シークレットから accessKeysecretKey を参照するには:

global:
  bucket:
    # 値の例、独自のものに置き換えます
    provider: s3
    name: storage.example.com
    kmsKey: null
    path: wandb
    region: default
    secret:
      secretName: bucket-secret
      accessKeyName: ACCESS_KEY
      secretKeyName: SECRET_KEY

MySQL

global:
   mysql:
     # 値の例、独自のものに置き換えます
     host: db.example.com
     port: 3306
     database: wandb_local
     user: wandb
     password: 8wtX6cJH...ZcUarK4zZGjpV

シークレットから password を参照するには:

global:
   mysql:
     # 値の例、独自のものに置き換えます
     host: db.example.com
     port: 3306
     database: wandb_local
     user: wandb
     passwordSecret:
       name: database-secret
       passwordKey: MYSQL_WANDB_PASSWORD

ライセンス

global:
  # ライセンスの例、独自のものに置き換えます
  license: eyJhbGnUzaHgyQjQy...VFnPS_KETXg1hi

シークレットから license を参照するには:

global:
  licenseSecret:
    name: license-secret
    key: CUSTOMER_WANDB_LICENSE

Ingress

Ingress クラスを特定するには、この FAQエントリを参照してください。

TLS なし

global:
# 重要: Ingress は YAML で ‘global’ と同じレベルにあります (子ではありません)
ingress:
  class: ""

TLS あり

証明書を含むシークレットを作成します

kubectl create secret tls wandb-ingress-tls --key wandb-ingress-tls.key --cert wandb-ingress-tls.crt

Ingress 構成でシークレットを参照します

global:
# 重要: Ingress は YAML で ‘global’ と同じレベルにあります (子ではありません)
ingress:
  class: ""
  annotations:
    {}
    # kubernetes.io/ingress.class: nginx
    # kubernetes.io/tls-acme: "true"
  tls:
    - secretName: wandb-ingress-tls
      hosts:
        - <HOST_URI>

Nginx の場合は、次の注釈を追加する必要がある場合があります。

ingress:
  annotations:
    nginx.ingress.kubernetes.io/proxy-body-size: 64m

カスタム Kubernetes ServiceAccount

カスタム Kubernetes サービスアカウントを指定して、W&B pod を実行します。

次のスニペットは、指定された名前でデプロイメントの一部としてサービスアカウントを作成します。

app:
  serviceAccount:
    name: custom-service-account
    create: true

parquet:
  serviceAccount:
    name: custom-service-account
    create: true

global:
  ...

サブシステム “app” と “parquet” は、指定されたサービスアカウントで実行されます。他のサブシステムは、デフォルトのサービスアカウントで実行されます。

サービスアカウントがクラスターにすでに存在する場合は、create: false を設定します。

app:
  serviceAccount:
    name: custom-service-account
    create: false

parquet:
  serviceAccount:
    name: custom-service-account
    create: false
    
global:
  ...

app、parquet、console など、さまざまなサブシステムでサービスアカウントを指定できます。

app:
  serviceAccount:
    name: custom-service-account
    create: true

console:
  serviceAccount:
    name: custom-service-account
    create: true

global:
  ...

サービスアカウントは、サブシステム間で異なる場合があります。

app:
  serviceAccount:
    name: custom-service-account
    create: false

console:
  serviceAccount:
    name: another-custom-service-account
    create: true

global:
  ...

外部 Redis

redis:
  install: false

global:
  redis:
    host: ""
    port: 6379
    password: ""
    parameters: {}
    caCert: ""

シークレットから password を参照するには:

kubectl create secret generic redis-secret --from-literal=redis-password=supersecret

以下の構成で参照します。

redis:
  install: false

global:
  redis:
    host: redis.example
    port: 9001
    auth:
      enabled: true
      secret: redis-secret
      key: redis-password

LDAP

TLS なし

global:
  ldap:
    enabled: true
    # "ldap://" または "ldaps://" を含む LDAP サーバーアドレス
    host:
    # ユーザーの検索に使用する LDAP 検索ベース
    baseDN:
    # バインドする LDAP ユーザー (匿名バインドを使用しない場合)
    bindDN:
    # バインドする LDAP パスワードを含むシークレット名とキー (匿名バインドを使用しない場合)
    bindPW:
    # 電子メールとグループ ID 属性の LDAP 属性名をコンマ区切りの文字列値として指定します。
    attributes:
    # LDAP グループ許可リスト
    groupAllowList:
    # LDAP TLS を有効にする
    tls: false

TLS あり

LDAP TLS 証明書構成には、証明書コンテンツで事前に作成された構成マップが必要です。

構成マップを作成するには、次のコマンドを使用します。

kubectl create configmap ldap-tls-cert --from-file=certificate.crt

次の例のように、YAML で構成マップを使用します。

global:
  ldap:
    enabled: true
    # "ldap://" または "ldaps://" を含む LDAP サーバーアドレス
    host:
    # ユーザーの検索に使用する LDAP 検索ベース
    baseDN:
    # バインドする LDAP ユーザー (匿名バインドを使用しない場合)
    bindDN:
    # バインドする LDAP パスワードを含むシークレット名とキー (匿名バインドを使用しない場合)
    bindPW:
    # 電子メールとグループ ID 属性の LDAP 属性名をコンマ区切りの文字列値として指定します。
    attributes:
    # LDAP グループ許可リスト
    groupAllowList:
    # LDAP TLS を有効にする
    tls: true
    # LDAP サーバーの CA 証明書を含む ConfigMap 名とキー
    tlsCert:
      configMap:
        name: "ldap-tls-cert"
        key: "certificate.crt"

OIDC SSO

global: 
  auth:
    sessionLengthHours: 720
    oidc:
      clientId: ""
      secret: ""
      # IdP が必要な場合にのみ含めます。
      authMethod: ""
      issuer: ""

authMethod はオプションです。

SMTP

global:
  email:
    smtp:
      host: ""
      port: 587
      user: ""
      password: ""

環境変数

global:
  extraEnv:
    GLOBAL_ENV: "example"

カスタム認証局

customCACerts はリストであり、多くの証明書を使用できます。customCACerts で指定された認証局は、W&B Server アプリケーションにのみ適用されます。

global:
  customCACerts:
  - |
    -----BEGIN CERTIFICATE-----
    MIIBnDCCAUKgAwIBAg.....................fucMwCgYIKoZIzj0EAwIwLDEQ
    MA4GA1UEChMHSG9tZU.....................tZUxhYiBSb290IENBMB4XDTI0
    MDQwMTA4MjgzMFoXDT.....................oNWYggsMo8O+0mWLYMAoGCCqG
    SM49BAMCA0gAMEUCIQ.....................hwuJgyQRaqMI149div72V2QIg
    P5GD+5I+02yEp58Cwxd5Bj2CvyQwTjTO4hiVl1Xd0M0=
    -----END CERTIFICATE-----    
  - |
    -----BEGIN CERTIFICATE-----
    MIIBxTCCAWugAwIB.......................qaJcwCgYIKoZIzj0EAwIwLDEQ
    MA4GA1UEChMHSG9t.......................tZUxhYiBSb290IENBMB4XDTI0
    MDQwMTA4MjgzMVoX.......................UK+moK4nZYvpNpqfvz/7m5wKU
    SAAwRQIhAIzXZMW4.......................E8UFqsCcILdXjAiA7iTluM0IU
    aIgJYVqKxXt25blH/VyBRzvNhViesfkNUQ==
    -----END CERTIFICATE-----    

CA 証明書は、ConfigMap にも保存できます。

global:
  caCertsConfigMap: custom-ca-certs

ConfigMap は次のようになります。

apiVersion: v1
kind: ConfigMap
metadata:
  name: custom-ca-certs
data:
  ca-cert1.crt: |
    -----BEGIN CERTIFICATE-----
    ...
    -----END CERTIFICATE-----    
  ca-cert2.crt: |
    -----BEGIN CERTIFICATE-----
    ...
    -----END CERTIFICATE-----    

カスタムセキュリティコンテキスト

各 W&B コンポーネントは、次の形式のカスタムセキュリティコンテキスト構成をサポートしています。

pod:
  securityContext:
    runAsNonRoot: true
    runAsUser: 1001
    runAsGroup: 0
    fsGroup: 1001
    fsGroupChangePolicy: Always
    seccompProfile:
      type: RuntimeDefault
container:
  securityContext:
    capabilities:
      drop:
        - ALL
    readOnlyRootFilesystem: false
    allowPrivilegeEscalation: false

たとえば、アプリケーション pod を構成するには、構成にセクション app を追加します。

global:
  ...
app:
  pod:
    securityContext:
      runAsNonRoot: true
      runAsUser: 1001
      runAsGroup: 0
      fsGroup: 1001
      fsGroupChangePolicy: Always
      seccompProfile:
        type: RuntimeDefault
  container:
    securityContext:
      capabilities:
        drop:
          - ALL
      readOnlyRootFilesystem: false
      allowPrivilegeEscalation: false

同じ概念が、consoleweaveweave-trace、および parquet にも適用されます。

W&B Operator の構成リファレンス

このセクションでは、W&B Kubernetes operator(wandb-controller-manager)の構成オプションについて説明します。operator は、構成を YAML ファイルの形式で受け取ります。

デフォルトでは、W&B Kubernetes operator に構成ファイルは必要ありません。必要な場合は、構成ファイルを作成します。たとえば、カスタム認証局を指定したり、エアギャップ環境にデプロイしたりするために、構成ファイルが必要になる場合があります。

仕様のカスタマイズの完全なリストについては、Helm リポジトリを参照してください。

カスタム CA

カスタム認証局(customCACerts)はリストであり、多くの証明書を使用できます。これらの認証局を追加すると、W&B Kubernetes operator(wandb-controller-manager)にのみ適用されます。

customCACerts:
- |
  -----BEGIN CERTIFICATE-----
  MIIBnDCCAUKgAwIBAg.....................fucMwCgYIKoZIzj0EAwIwLDEQ
  MA4GA1UEChMHSG9tZU.....................tZUxhYiBSb290IENBMB4XDTI0
  MDQwMTA4MjgzMFoXDT.....................oNWYggsMo8O+0mWLYMAoGCCqG
  SM49BAMCA0gAMEUCIQ.....................hwuJgyQRaqMI149div72V2QIg
  P5GD+5I+02yEp58Cwxd5Bj2CvyQwTjTO4hiVl1Xd0M0=
  -----END CERTIFICATE-----  
- |
  -----BEGIN CERTIFICATE-----
  MIIBxTCCAWugAwIB.......................qaJcwCgYIKoZIzj0EAwIwLDEQ
  MA4GA1UEChMHSG9t.......................tZUxhYiBSb290IENBMB4XDTI0
  MDQwMTA4MjgzMVoX.......................UK+moK4nZYvpNpqfvz/7m5wKU
  SAAwRQIhAIzXZMW4.......................E8UFqsCcILdXjAiA7iTluM0IU
  aIgJYVqKxXt25blH/VyBRzvNhViesfkNUQ==
  -----END CERTIFICATE-----  

CA 証明書は、ConfigMap にも保存できます。

caCertsConfigMap: custom-ca-certs

ConfigMap は次のようになります。

apiVersion: v1
kind: ConfigMap
metadata:
  name: custom-ca-certs
data:
  ca-cert1.crt: |
    -----BEGIN CERTIFICATE-----
    ...
    -----END CERTIFICATE-----    
  ca-cert2.crt: |
    -----BEGIN CERTIFICATE-----
    ...
    -----END CERTIFICATE-----    

FAQ

個々の pod の目的/役割は何ですか?

  • wandb-app: W&B のコア。GraphQL API とフロントエンドアプリケーションが含まれています。プラットフォームの機能のほとんどを強化します。
  • wandb-console: 管理コンソール。/console 経由でアクセスします。
  • wandb-otel: OpenTelemetry エージェント。Kubernetes レイヤーのリソースからメトリクスとログを収集し、管理コンソールに表示します。
  • wandb-prometheus: Prometheus サーバー。さまざまなコンポーネントからメトリクスを取得し、管理コンソールに表示します。
  • wandb-parquet: wandb-app pod とは別のバックエンドマイクロサービス。データベースデータを Parquet 形式でオブジェクトストレージにエクスポートします。
  • wandb-weave: UI でクエリテーブルをロードし、さまざまなコアアプリ機能をサポートする別のバックエンドマイクロサービス。
  • wandb-weave-trace: LLM ベースのアプリケーションを追跡、実験、評価、デプロイ、および改善するためのフレームワーク。フレームワークは wandb-app pod 経由でアクセスします。

W&B Operator Console のパスワードを取得する方法

W&B Kubernetes Operator 管理コンソールへのアクセスを参照してください。

Ingress が機能しない場合に W&B Operator Console にアクセスする方法

Kubernetes クラスターに到達できるホストで、次のコマンドを実行します。

kubectl port-forward svc/wandb-console 8082

ブラウザで https://localhost:8082/ console を使用してコンソールにアクセスします。

パスワードの取得方法については、W&B Kubernetes Operator 管理コンソールへのアクセス(オプション 2)を参照してください。

W&B Server のログを表示する方法

アプリケーション pod の名前は wandb-app-xxx です。

kubectl get pods
kubectl logs wandb-XXXXX-XXXXX

Kubernetes Ingress クラスを識別する方法

次のコマンドを実行して、クラスターにインストールされている Ingress クラスを取得できます。

kubectl get ingressclass

1.3.2.1 - Kubernetes operator for air-gapped instances

Kubernetes Operator で W&B プラットフォーム をデプロイする (エアギャップ)

イントロダクション

このガイドでは、エアギャップされた顧客管理環境に W&B Platform をデプロイするためのステップごとの手順を説明します。

内部リポジトリまたはレジストリを使用して、Helm chartとコンテナイメージをホストします。 Kubernetes クラスターへの適切なアクセス権を持つシェルコンソールですべてのコマンドを実行します。

Kubernetes アプリケーションのデプロイに使用する継続的デリバリー ツールで、同様のコマンドを利用できます。

ステップ 1: 前提条件

開始する前に、ご使用の環境が次の要件を満たしていることを確認してください。

  • Kubernetes バージョン >= 1.28
  • Helm バージョン >= 3
  • 必要な W&B イメージを持つ内部コンテナレジストリへのアクセス
  • W&B Helm chart 用の内部 Helm リポジトリへのアクセス

ステップ 2: 内部コンテナレジストリの準備

デプロイメントに進む前に、次のコンテナイメージが内部コンテナレジストリで利用可能であることを確認する必要があります。

これらのイメージは、W&B コンポーネントを正常にデプロイするために重要です。 W&B は、WSM を使用してコンテナレジストリを準備することを推奨します。

組織がすでに内部コンテナレジストリを使用している場合は、イメージをそこに追加できます。 それ以外の場合は、次のセクションに従って、WSM と呼ばれるものを使用してコンテナリポジトリを準備します。

Operator の要件の追跡、およびイメージのアップグレードの確認とダウンロードは、WSM を使用するか、組織独自のプロセスを使用することによって、ユーザーが行う必要があります。

WSM のインストール

次のいずれかの方法を使用して WSM をインストールします。

Bash

GitHub から Bash スクリプトを直接実行します。

curl -sSL https://raw.githubusercontent.com/wandb/wsm/main/install.sh | bash

スクリプトは、スクリプトを実行したフォルダーにバイナリをダウンロードします。 別のフォルダーに移動するには、次を実行します。

sudo mv wsm /usr/local/bin

GitHub

W&B が管理する GitHub リポジトリ wandb/wsmhttps://github.com/wandb/wsm)から WSM をダウンロードまたはクローンします。 最新リリースについては、wandb/wsmリリースノートを参照してください。

イメージとそのバージョンのリスト

wsm list を使用して、イメージバージョンの最新リストを取得します。

wsm list

出力は次のようになります。

:package: Starting the process to list all images required for deployment...
Operator Images:
  wandb/controller:1.16.1
W&B Images:
  wandb/local:0.62.2
  docker.io/bitnami/redis:7.2.4-debian-12-r9
  quay.io/prometheus-operator/prometheus-config-reloader:v0.67.0
  quay.io/prometheus/prometheus:v2.47.0
  otel/opentelemetry-collector-contrib:0.97.0
  wandb/console:2.13.1
Here are the images required to deploy W&B. Ensure these images are available in your internal container registry and update the values.yaml accordingly.

イメージのダウンロード

wsm download を使用して、最新バージョンのすべてのイメージをダウンロードします。

wsm download

出力は次のようになります。

Downloading operator helm chart
Downloading wandb helm chart
✓ wandb/controller:1.16.1
✓ docker.io/bitnami/redis:7.2.4-debian-12-r9
✓ otel/opentelemetry-collector-contrib:0.97.0
✓ quay.io/prometheus-operator/prometheus-config-reloader:v0.67.0
✓ wandb/console:2.13.1
✓ quay.io/prometheus/prometheus:v2.47.0

  Done! Installed 7 packages.

WSM は、各イメージの .tgz アーカイブを bundle ディレクトリーにダウンロードします。

ステップ 3: 内部 Helm chart リポジトリの準備

コンテナイメージに加えて、次の Helm chartが内部 Helm Chart リポジトリで利用可能であることも確認する必要があります。 前のステップで紹介した WSM ツールは、Helm chartもダウンロードできます。 または、ここでダウンロードしてください。

operator chartは、Controller Manager とも呼ばれる W&B Operator をデプロイするために使用されます。 platform chartは、カスタムリソース定義 (CRD) で構成された値を使用して W&B Platform をデプロイするために使用されます。

ステップ 4: Helm リポジトリの設定

次に、内部リポジトリから W&B Helm chartをプルするように Helm リポジトリを設定します。 次のコマンドを実行して、Helm リポジトリを追加および更新します。

helm repo add local-repo https://charts.yourdomain.com
helm repo update

ステップ 5: Kubernetes operator のインストール

コントローラマネージャとも呼ばれる W&B Kubernetes operator は、W&B platform コンポーネントの管理を担当します。 エアギャップ環境にインストールするには、内部コンテナレジストリを使用するように構成する必要があります。

これを行うには、内部コンテナレジストリを使用するようにデフォルトのイメージ設定をオーバーライドし、キー airgapped: true を設定して、予想されるデプロイメントタイプを示す必要があります。 次に示すように、values.yaml ファイルを更新します。

image:
  repository: registry.yourdomain.com/library/controller
  tag: 1.13.3
airgapped: true

タグを、内部レジストリで使用可能なバージョンに置き換えます。

operator と CRD をインストールします。

helm upgrade --install operator wandb/operator -n wandb --create-namespace -f values.yaml

サポートされている値の詳細については、Kubernetes operator GitHub リポジトリを参照してください。

ステップ 6: W&B カスタムリソースの設定

W&B Kubernetes operator をインストールしたら、内部 Helm リポジトリとコンテナレジストリを指すようにカスタムリソース (CR) を構成する必要があります。

この設定により、Kubernetes operator は、W&B platform の必要なコンポーネントをデプロイするときに、内部レジストリとリポジトリを使用することが保証されます。

この CR の例を wandb.yaml という新しいファイルにコピーします。

apiVersion: apps.wandb.com/v1
kind: WeightsAndBiases
metadata:
  labels:
    app.kubernetes.io/instance: wandb
    app.kubernetes.io/name: weightsandbiases
  name: wandb
  namespace: default

spec:
  chart:
    url: http://charts.yourdomain.com
    name: operator-wandb
    version: 0.18.0

  values:
    global:
      host: https://wandb.yourdomain.com
      license: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      bucket:
        accessKey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        secretKey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        name: s3.yourdomain.com:port #Ex.: s3.yourdomain.com:9000
        path: bucket_name
        provider: s3
        region: us-east-1
      mysql:
        database: wandb
        host: mysql.home.lab
        password: password
        port: 3306
        user: wandb
      extraEnv:
        ENABLE_REGISTRY_UI: 'true'
    
    # If install: true, Helm installs a MySQL database for the deployment to use. Set to `false` to use your own external MySQL deployment.
    mysql:
      install: false

    app:
      image:
        repository: registry.yourdomain.com/local
        tag: 0.59.2

    console:
      image:
        repository: registry.yourdomain.com/console
        tag: 2.12.2

    ingress:
      annotations:
        nginx.ingress.kubernetes.io/proxy-body-size: 64m
      class: nginx

    

W&B platform をデプロイするために、Kubernetes Operator は CR の値を使用して、内部リポジトリから operator-wandb Helm chart を構成します。

すべてのタグ/バージョンを、内部レジストリで使用可能なバージョンに置き換えます。

上記の構成ファイルの作成の詳細については、こちらをご覧ください。

ステップ 7: W&B platform のデプロイ

Kubernetes operator と CR が構成されたので、wandb.yaml 構成を適用して W&B platform をデプロイします。

kubectl apply -f wandb.yaml

FAQ

デプロイメントプロセス中に、以下のよくある質問 (FAQ) とトラブルシューティングのヒントを参照してください。

別の ingress クラスがあります。 そのクラスを使用できますか?

はい、values.yaml で ingress 設定を変更することで、ingress クラスを構成できます。

証明書バンドルに複数の証明書があります。 それは機能しますか?

証明書を values.yamlcustomCACerts セクションの複数のエントリに分割する必要があります。

Kubernetes operator が無人アップデートを適用するのを防ぐにはどうすればよいですか。 それは可能ですか?

W&B console から自動アップデートをオフにすることができます。 サポートされているバージョンに関する質問については、W&B チームにお問い合わせください。 また、W&B は過去 6 か月以内にリリースされた platform バージョンをサポートしていることに注意してください。 W&B は定期的なアップグレードを実行することをお勧めします。

環境がパブリックリポジトリに接続されていない場合、デプロイメントは機能しますか?

構成で airgappedtrue に設定すると、Kubernetes operator は内部リソースのみを使用し、パブリックリポジトリへの接続を試みません。

1.3.3 - Install on public cloud

1.3.3.1 - Deploy W&B Platform on AWS

AWS 上で W&B サーバー をホストする。

W&B は、W&B Server AWS Terraform Module を使用して、AWS にプラットフォームをデプロイすることをお勧めします。

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

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

Terraform Module は、次の 必須 コンポーネントをデプロイします。

  • ロードバランサー
  • AWS Identity & Access Management (IAM)
  • AWS Key Management System (KMS)
  • Amazon Aurora MySQL
  • Amazon VPC
  • Amazon S3
  • Amazon Route53
  • Amazon Certificate Manager (ACM)
  • Amazon Elastic Load Balancing (ALB)
  • Amazon Secrets Manager

その他のデプロイメントオプションには、次のオプションコンポーネントを含めることもできます。

  • Redis 用 Elastic Cache
  • SQS

前提条件のアクセス許可

Terraform を実行するアカウントは、イントロダクションで説明されているすべてのコンポーネントを作成でき、IAM PoliciesIAM Roles を作成し、リソースにロールを割り当てるアクセス許可が必要です。

一般的な手順

このトピックの手順は、このドキュメントで説明されているすべてのデプロイメントオプションに共通です。

  1. 開発環境を準備します。

    • Terraform をインストールします。
    • W&B は、バージョン管理のために Git リポジトリーを作成することをお勧めします。
  2. terraform.tfvars ファイルを作成します。

    tvfars ファイルの内容は、インストールタイプに応じてカスタマイズできますが、最小限の推奨設定は以下の例のようになります。

    namespace                  = "wandb"
    license                    = "xxxxxxxxxxyyyyyyyyyyyzzzzzzz"
    subdomain                  = "wandb-aws"
    domain_name                = "wandb.ml"
    zone_id                    = "xxxxxxxxxxxxxxxx"
    allowed_inbound_cidr       = ["0.0.0.0/0"]
    allowed_inbound_ipv6_cidr  = ["::/0"]
    eks_cluster_version        = "1.29"
    

    namespace 変数は、Terraform によって作成されたすべてのリソースのプレフィックスとなる文字列であるため、デプロイする前に tvfars ファイルで変数を定義してください。

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

    allowed_inbound_cidrallowed_inbound_ipv6_cidr の両方も設定が必要です。モジュールでは、これは必須入力です。上記の例では、すべてのソースからの W&B インストールへのアクセスを許可しています。

  3. ファイル versions.tf を作成します。

    このファイルには、AWS に W&B をデプロイするために必要な Terraform および Terraform プロバイダーのバージョンが含まれます。

    provider "aws" {
      region = "eu-central-1"
    
      default_tags {
        tags = {
          GithubRepo = "terraform-aws-wandb"
          GithubOrg  = "wandb"
          Enviroment = "Example"
          Example    = "PublicDnsExternal"
        }
      }
    }
    

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

    オプションですが、強く推奨されるのは、このドキュメントの冒頭で説明した リモートバックエンド構成 を追加することです。

  4. ファイル variables.tf を作成します。

    terraform.tfvars で設定されたすべてのオプションについて、Terraform は対応する変数宣言を必要とします。

    variable "namespace" {
      type        = string
      description = "リソースに使用される名前のプレフィックス"
    }
    
    variable "domain_name" {
      type        = string
      description = "インスタンスへのアクセスに使用されるドメイン名。"
    }
    
    variable "subdomain" {
      type        = string
      default     = null
      description = "Weights & Biases UI にアクセスするためのサブドメイン。"
    }
    
    variable "license" {
      type = string
    }
    
    variable "zone_id" {
      type        = string
      description = "Weights & Biases サブドメインを作成するドメイン。"
    }
    
    variable "allowed_inbound_cidr" {
     description = "wandb-server へのアクセスが許可されている CIDR。"
     nullable    = false
     type        = list(string)
    }
    
    variable "allowed_inbound_ipv6_cidr" {
     description = "wandb-server へのアクセスが許可されている CIDR。"
     nullable    = false
     type        = list(string)
    }
    
    variable "eks_cluster_version" {
     description = "EKS クラスター kubernetes バージョン"
     nullable    = false
     type        = string
    }
    

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

これは、すべての 必須 コンポーネントを作成し、Kubernetes Cluster に最新バージョンの W&B をインストールする、最も簡単なデプロイメントオプション構成です。

  1. main.tf を作成します。

    「一般的な手順」でファイルを作成したのと同じディレクトリーに、次の内容で main.tf ファイルを作成します。

    module "wandb_infra" {
      source  = "wandb/wandb/aws"
      version = "~>7.0"
    
      namespace   = var.namespace
      domain_name = var.domain_name
      subdomain   = var.subdomain
      zone_id     = var.zone_id
    
      allowed_inbound_cidr           = var.allowed_inbound_cidr
      allowed_inbound_ipv6_cidr      = var.allowed_inbound_ipv6_cidr
    
      public_access                  = true
      external_dns                   = true
      kubernetes_public_access       = true
      kubernetes_public_access_cidrs = ["0.0.0.0/0"]
      eks_cluster_version            = var.eks_cluster_version
    }
    
     data "aws_eks_cluster" "eks_cluster_id" {
       name = module.wandb_infra.cluster_name
     }
    
     data "aws_eks_cluster_auth" "eks_cluster_auth" {
       name = module.wandb_infra.cluster_name
     }
    
     provider "kubernetes" {
       host                   = data.aws_eks_cluster.eks_cluster_id.endpoint
       cluster_ca_certificate = base64decode(data.aws_eks_cluster.eks_cluster_id.certificate_authority.0.data)
       token                  = data.aws_eks_cluster_auth.eks_cluster_auth.token
     }
    
    
     provider "helm" {
       kubernetes {
         host                   = data.aws_eks_cluster.eks_cluster_id.endpoint
         cluster_ca_certificate = base64decode(data.aws_eks_cluster.eks_cluster_id.certificate_authority.0.data)
         token                  = data.aws_eks_cluster_auth.eks_cluster_auth.token
       }
     }
    
     output "url" {
       value = module.wandb_infra.url
     }
    
     output "bucket" {
       value = module.wandb_infra.bucket_name
     }
    
  2. W&B をデプロイします。

    W&B をデプロイするには、次のコマンドを実行します。

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

REDIS を有効にする

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

キャッシュを有効にするには、推奨されるデプロイメント セクションで説明されているのと同じ main.tf ファイルにオプション create_elasticache_subnet = true を追加する必要があります。

module "wandb_infra" {
  source  = "wandb/wandb/aws"
  version = "~>7.0"

  namespace   = var.namespace
  domain_name = var.domain_name
  subdomain   = var.subdomain
  zone_id     = var.zone_id
	**create_elasticache_subnet = true**
}
[...]

メッセージブローカー(キュー)を有効にする

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

メッセージブローカーを提供する AWS リソースは SQS であり、これを有効にするには、推奨されるデプロイメント セクションで説明されているのと同じ main.tf にオプション use_internal_queue = false を追加する必要があります。

module "wandb_infra" {
  source  = "wandb/wandb/aws"
  version = "~>7.0"

  namespace   = var.namespace
  domain_name = var.domain_name
  subdomain   = var.subdomain
  zone_id     = var.zone_id
  **use_internal_queue = false**

[...]
}

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

3 つのデプロイメントオプションすべてを組み合わせて、すべての構成を同じファイルに追加できます。 Terraform Module は、標準オプションと Deployment - Recommended にある最小構成とともに組み合わせることができるいくつかのオプションを提供します。

手動構成

Amazon S3 バケットを W&B のファイルストレージバックエンドとして使用するには、次の操作を行う必要があります。

バケットと、そのバケットからオブジェクト作成通知を受信する SQS キューを構成する必要があります。インスタンスには、このキューから読み取るためのアクセス許可が必要です。

S3 バケットとバケット通知の作成

Amazon S3 バケットを作成し、バケット通知を有効にするには、以下の手順に従います。

  1. AWS コンソールで Amazon S3 に移動します。
  2. [バケットの作成] を選択します。
  3. [詳細設定] で、[イベント] セクションの [通知の追加] を選択します。
  4. 以前に構成した SQS キューに送信されるように、すべてのオブジェクト作成イベントを構成します。
エンタープライズファイルストレージ設定

CORS アクセスを有効にします。CORS 構成は次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>http://YOUR-W&B-SERVER-IP</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

SQS キューの作成

SQS キューを作成するには、以下の手順に従います。

  1. AWS コンソールで Amazon SQS に移動します。
  2. [キューの作成] を選択します。
  3. [詳細] セクションで、[標準] キュータイプを選択します。
  4. [アクセス ポリシー] セクションで、次のプリンシパルへのアクセス許可を追加します。
  • SendMessage
  • ReceiveMessage
  • ChangeMessageVisibility
  • DeleteMessage
  • GetQueueUrl

オプションで、[アクセス ポリシー] セクションに高度なアクセス ポリシーを追加します。たとえば、ステートメントを含む Amazon SQS にアクセスするためのポリシーは次のとおりです。

{
    "Version" : "2012-10-17",
    "Statement" : [
      {
        "Effect" : "Allow",
        "Principal" : "*",
        "Action" : ["sqs:SendMessage"],
        "Resource" : "<sqs-queue-arn>",
        "Condition" : {
          "ArnEquals" : { "aws:SourceArn" : "<s3-bucket-arn>" }
        }
      }
    ]
}

W&B を実行するノードへのアクセス許可の付与

W&B サーバーが実行されているノードは、Amazon S3 および Amazon SQS へのアクセスを許可するように構成する必要があります。選択したサーバーデプロイメントのタイプに応じて、次のポリシー ステートメントをノードロールに追加する必要がある場合があります。

{
   "Statement":[
      {
         "Sid":"",
         "Effect":"Allow",
         "Action":"s3:*",
         "Resource":"arn:aws:s3:::<WANDB_BUCKET>"
      },
      {
         "Sid":"",
         "Effect":"Allow",
         "Action":[
            "sqs:*"
         ],
         "Resource":"arn:aws:sqs:<REGION>:<ACCOUNT>:<WANDB_QUEUE>"
      }
   ]
}

W&B サーバーの設定

最後に、W&B サーバーを設定します。

  1. http(s)://YOUR-W&B-SERVER-HOST/system-admin で W&B 設定ページに移動します。
  2. [**外部ファイルストレージバックエンドを使用する] オプションを有効にします。
  3. 次の形式で、Amazon S3 バケット、リージョン、および Amazon SQS キューに関する情報を提供します。
  • ファイルストレージバケット: s3://<bucket-name>
  • ファイルストレージリージョン (AWS のみ): <region>
  • 通知サブスクリプション: sqs://<queue-name>
  1. [設定の更新] を選択して、新しい設定を適用します。

W&B バージョンをアップグレードする

W&B を更新するには、ここに概説されている手順に従います。

  1. wandb_app モジュールの構成に wandb_version を追加します。アップグレードする W&B のバージョンを指定します。たとえば、次の行は W&B バージョン 0.48.1 を指定します。
module "wandb_app" {
    source  = "wandb/wandb/kubernetes"
    version = "~>1.0"

    license       = var.license
    wandb_version = "0.48.1"
  1. 構成を更新した後、推奨されるデプロイメントセクション で説明されている手順を完了します。

オペレーターベースの AWS Terraform モジュールへの移行

このセクションでは、terraform-aws-wandb モジュールを使用して、プレオペレーター 環境から ポストオペレーター 環境にアップグレードするために必要な手順について詳しく説明します。

移行前後のアーキテクチャ

以前の W&B アーキテクチャでは、次のものが使用されていました。

module "wandb_infra" {
  source  = "wandb/wandb/aws"
  version = "1.16.10"
  ...
}

インフラストラクチャを制御します。

プレオペレーターインフラストラクチャ

また、このモジュールを使用して W&B サーバーをデプロイします。

module "wandb_app" {
  source  = "wandb/wandb/kubernetes"
  version = "1.12.0"
}
プレオペレーターk8s

移行後のアーキテクチャでは、次のものが使用されます。

module "wandb_infra" {
  source  = "wandb/wandb/aws"
  version = "4.7.2"
  ...
}

インフラストラクチャのインストールと Kubernetes クラスターへの W&B サーバーのデプロイの両方を管理するため、post-operator.tf では module "wandb_app" は不要になります。

ポストオペレーターk8s

このアーキテクチャの移行により、SRE/インフラストラクチャチームによる手動の Terraform 操作を必要とせずに、追加機能 (OpenTelemetry、Prometheus、HPA、Kafka、およびイメージ更新など) を有効にできます。

W&B Pre-Operator の基本インストールを開始するには、post-operator.tf.disabled ファイル拡張子があり、pre-operator.tf がアクティブであることを確認します (.disabled` 拡張子がない)。これらのファイルは、ここ にあります。

前提条件

移行プロセスを開始する前に、次の前提条件が満たされていることを確認してください。

  • エグレス: デプロイメントはエアギャップにできません。Release Channel の最新の仕様を取得するには、deploy.wandb.ai へのアクセスが必要です。
  • AWS 認証情報: AWS リソースと対話するように構成された適切な AWS 認証情報。
  • Terraform のインストール: 最新バージョンの Terraform がシステムにインストールされている必要があります。
  • Route53 ホストゾーン: アプリケーションが提供されるドメインに対応する既存の Route53 ホストゾーン。
  • Pre-Operator Terraform ファイル: pre-operator.tf および関連する変数ファイル (例: pre-operator.tfvars) が正しく設定されていることを確認します。

Pre-Operator の設定

次の Terraform コマンドを実行して、Pre-Operator セットアップの構成を初期化して適用します。

terraform init -upgrade
terraform apply -var-file=./pre-operator.tfvars

pre-operator.tf は次のようになります。

namespace     = "operator-upgrade"
domain_name   = "sandbox-aws.wandb.ml"
zone_id       = "Z032246913CW32RVRY0WU"
subdomain     = "operator-upgrade"
wandb_license = "ey..."
wandb_version = "0.51.2"

pre-operator.tf 構成は、次の 2 つのモジュールを呼び出します。

module "wandb_infra" {
  source  = "wandb/wandb/aws"
  version = "1.16.10"
  ...
}

このモジュールはインフラストラクチャを起動します。

module "wandb_app" {
  source  = "wandb/wandb/kubernetes"
  version = "1.12.0"
}

このモジュールはアプリケーションをデプロイします。

Post-Operator の設定

pre-operator.tf.disabled 拡張子があり、post-operator.tf がアクティブであることを確認します。

post-operator.tfvars には、追加の変数が含まれています。

...
# wandb_version = "0.51.2" は、リリースチャネルを介して管理されるか、ユーザースペックで設定されるようになりました。

# アップグレードに必要なオペレーター変数:
size                 = "small"
enable_dummy_dns     = true
enable_operator_alb  = true
custom_domain_filter = "sandbox-aws.wandb.ml"

次のコマンドを実行して、Post-Operator 構成を初期化して適用します。

terraform init -upgrade
terraform apply -var-file=./post-operator.tfvars

プランと適用手順では、次のリソースが更新されます。

actions:
  create:
    - aws_efs_backup_policy.storage_class
    - aws_efs_file_system.storage_class
    - aws_efs_mount_target.storage_class["0"]
    - aws_efs_mount_target.storage_class["1"]
    - aws_eks_addon.efs
    - aws_iam_openid_connect_provider.eks
    - aws_iam_policy.secrets_manager
    - aws_iam_role_policy_attachment.ebs_csi
    - aws_iam_role_policy_attachment.eks_efs
    - aws_iam_role_policy_attachment.node_secrets_manager
    - aws_security_group.storage_class_nfs
    - aws_security_group_rule.nfs_ingress
    - random_pet.efs
    - aws_s3_bucket_acl.file_storage
    - aws_s3_bucket_cors_configuration.file_storage
    - aws_s3_bucket_ownership_controls.file_storage
    - aws_s3_bucket_server_side_encryption_configuration.file_storage
    - helm_release.operator
    - helm_release.wandb
    - aws_cloudwatch_log_group.this[0]
    - aws_iam_policy.default
    - aws_iam_role.default
    - aws_iam_role_policy_attachment.default
    - helm_release.external_dns
    - aws_default_network_acl.this[0]
    - aws_default_route_table.default[0]
    - aws_iam_policy.default
    - aws_iam_role.default
    - aws_iam_role_policy_attachment.default
    - helm_release.aws_load_balancer_controller

  update_in_place:
    - aws_iam_policy.node_IMDSv2
    - aws_iam_policy.node_cloudwatch
    - aws_iam_policy.node_kms
    - aws_iam_policy.node_s3
    - aws_iam_policy.node_sqs
    - aws_eks_cluster.this[0]
    - aws_elasticache_replication_group.default
    - aws_rds_cluster.this[0]
    - aws_rds_cluster_instance.this["1"]
    - aws_default_security_group.this[0]
    - aws_subnet.private[0]
    - aws_subnet.private[1]
    - aws_subnet.public[0]
    - aws_subnet.public[1]
    - aws_launch_template.workers["primary"]

  destroy:
    - kubernetes_config_map.config_map
    - kubernetes_deployment.wandb
    - kubernetes_priority_class.priority
    - kubernetes_secret.secret
    - kubernetes_service.prometheus
    - kubernetes_service.service
    - random_id.snapshot_identifier[0]

  replace:
    - aws_autoscaling_attachment.autoscaling_attachment["primary"]
    - aws_route53_record.alb
    - aws_eks_node_group.workers["primary"]

次のようなものが表示されます。

ポストオペレーター適用

post-operator.tf には、次のように 1 つがあります。

module "wandb_infra" {
  source  = "wandb/wandb/aws"
  version = "4.7.2"
  ...
}

ポストオペレーター構成の変更点:

  1. 必要なプロバイダーの更新: プロバイダーの互換性を保つために、required_providers.aws.version3.6 から 4.0 に変更します。
  2. DNS とロード バランサーの構成: Ingress を介して DNS レコードと AWS ロード バランサーの設定を管理するために、enable_dummy_dnsenable_operator_alb を統合します。
  3. ライセンスとサイズの構成: 新しい運用要件に合わせて、license パラメーターと size パラメーターを wandb_infra モジュールに直接転送します。
  4. カスタムドメインの処理: 必要に応じて、kube-system 名前空間内の外部 DNS ポッドログを確認して DNS の問題をトラブルシューティングするために、custom_domain_filter を使用します。
  5. Helm プロバイダーの構成: Helm プロバイダーを有効にして構成し、Kubernetes リソースを効果的に管理します。
provider "helm" {
  kubernetes {
    host                   = data.aws_eks_cluster.app_cluster.endpoint
    cluster_ca_certificate = base64decode(data.aws_eks_cluster.app_cluster.certificate_authority[0].data)
    token                  = data.aws_eks_cluster_auth.app_cluster.token
    exec {
      api_version = "client.authentication.k8s.io/v1beta1"
      args        = ["eks", "get-token", "--cluster-name", data.aws_eks_cluster.app_cluster.name]
      command     = "aws"
    }
  }
}

この包括的な設定により、オペレーターモデルによって有効になる新しい効率と機能を活用して、Pre-Operator 構成から Post-Operator 構成へのスムーズな移行が保証されます。

1.3.3.2 - Deploy W&B Platform on GCP

GCP 上での W&B サーバー のホスティング。

W&B Server の自己管理を行う場合、GCP 上にプラットフォームをデプロイするために、W&B Server GCP Terraform Module を使用することを推奨します。

モジュールのドキュメントは広範囲にわたり、利用可能なすべてのオプションが記載されています。

開始する前に、Terraform の リモートバックエンド のいずれかを選択して、State File を保存することを推奨します。

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

Terraform Module は、以下の必須コンポーネントをデプロイします。

  • VPC
  • Cloud SQL for MySQL
  • Cloud Storage Bucket
  • Google Kubernetes Engine
  • KMS Crypto Key
  • Load Balancer

その他のデプロイメントオプションには、以下のオプションコンポーネントを含めることもできます。

  • Redis 用のメモリーストア
  • Pub/Sub メッセージシステム

事前requisite 権限

Terraform を実行するアカウントには、使用する GCP プロジェクトで roles/owner のロールが必要です。

一般的な手順

このトピックの手順は、このドキュメントで説明するすべてのデプロイメントオプションに共通です。

  1. 開発環境を準備します。

    • Terraform をインストールします。
    • 使用するコードで Git リポジトリを作成することをお勧めしますが、ファイルをローカルに保存することもできます。
    • Google Cloud Console でプロジェクトを作成します。
    • GCP で認証します (gcloud をインストールしてください)。 gcloud auth application-default login
  2. terraform.tfvars ファイルを作成します。

    tvfars ファイルの内容は、インストールタイプに応じてカスタマイズできますが、最小限の推奨設定は以下の例のようになります。

    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 の組み合わせで、Weights & Biases が設定される FQDN が形成されます。上記の例では、Weights & Biases の 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 = "Weights & Biases UI にアクセスするためのドメイン名"
    }
    
    variable "subdomain" {
      type        = string
      description = "Weights & Biases UI にアクセスするためのサブドメイン"
    }
    
    variable "license" {
      type        = string
      description = "W&B License"
    }
    

デプロイメント - 推奨 (~20 分)

これは最も簡単なデプロイメントオプションの設定で、すべての Mandatory コンポーネントを作成し、Kubernetes Cluster に最新バージョンの 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
    }
    
    # Spin up all required services
    module "wandb" {
      source  = "wandb/wandb/google"
      version = "~> 5.0"
    
      namespace   = var.namespace
      license     = var.license
      domain_name = var.domain_name
      subdomain   = var.subdomain
    }
    
    # You'll want to update your DNS with the provisioned IP address
    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 クエリをキャッシュし、実験のメトリクスをロードする際のアプリケーションの応答を高速化します。

キャッシュを有効にするには、推奨される デプロイメントオプションのセクション で指定されている同じ 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 = ["*"]
  #Enable Redis
  create_redis = true

}
[...]

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

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

メッセージブローカーを提供する GCP リソースは 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 = ["*"]
  #Create and use Pub/Sub
  use_internal_queue = false

}

[...]

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

3 つのデプロイメントオプションすべてを組み合わせて、すべての構成を同じファイルに追加できます。 Terraform Module は、標準オプションと Deployment - Recommended にある最小限の構成とともに組み合わせることができるいくつかのオプションを提供します。

手動構成

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

PubSub トピックとサブスクリプションを作成する

PubSub トピックとサブスクリプションを作成するには、以下の手順に従ってください。

  1. GCP Console 内の Pub/Sub サービスに移動します。
  2. [トピックを作成] を選択し、トピックの名前を指定します。
  3. ページの下部で、[サブスクリプションを作成] を選択します。[配信タイプ] が [プル] に設定されていることを確認します。
  4. [作成] をクリックします。

インスタンスを実行しているサービスアカウントまたはアカウントに、このサブスクリプションに対する pubsub.admin ロールがあることを確認してください。詳細については、https://cloud.google.com/pubsub/docs/access-control#console を参照してください。

ストレージバケットを作成する

  1. [Cloud Storage バケット] ページに移動します。
  2. [バケットを作成] を選択し、バケットの名前を指定します。[標準] ストレージクラス を選択してください。

インスタンスを実行しているサービスアカウントまたはアカウントに、以下の両方があることを確認してください。

  • 前の手順で作成したバケットへのアクセス
  • このバケットに対する storage.objectAdmin ロール。詳細については、https://cloud.google.com/storage/docs/access-control/using-iam-permissions#bucket-add を参照してください。
  1. CORS アクセスを有効にします。これはコマンドラインでのみ実行できます。まず、次の CORS 構成で JSON ファイルを作成します。
cors:
- maxAgeSeconds: 3600
  method:
   - GET
   - PUT
     origin:
   - '<YOUR_W&B_SERVER_HOST>'
     responseHeader:
   - Content-Type

オリジンのスキーム、ホスト、ポートの値が正確に一致する必要があることに注意してください。

  1. gcloud がインストールされ、正しい GCP プロジェクトにログインしていることを確認します。
  2. 次に、以下を実行します。
gcloud storage buckets update gs://<BUCKET_NAME> --cors-file=<CORS_CONFIG_FILE>

PubSub 通知を作成する

ストレージバケットから Pub/Sub トピックへの通知ストリームを作成するには、コマンドラインで以下の手順に従ってください。

  1. GCP プロジェクトにログインします。
  2. ターミナルで以下を実行します。
gcloud pubsub topics list  # list names of topics for reference
gcloud storage ls          # list names of buckets for reference

# create bucket notification
gcloud storage buckets notifications create gs://<BUCKET_NAME> --topic=<TOPIC_NAME>

詳細については、Cloud Storage の Web サイトをご覧ください。

W&B サーバーを設定する

  1. 最後に、http(s)://YOUR-W&B-SERVER-HOST/console/settings/system で W&B の [システム接続] ページに移動します。
  2. プロバイダー Google Cloud Storage (gcs) を選択します。
  3. GCS バケットの名前を指定します。
  1. [設定を更新] を押して、新しい設定を適用します。

W&B サーバーをアップグレードする

W&B を更新するには、ここで概説する手順に従ってください。

  1. wandb_app モジュールの構成に wandb_version を追加します。アップグレードする W&B のバージョンを指定します。たとえば、次の行は W&B バージョン 0.48.1 を指定します。
module "wandb_app" {
    source  = "wandb/wandb/kubernetes"
    version = "~>5.0"

    license       = var.license
    wandb_version = "0.58.1"
  1. 構成を更新したら、デプロイメントオプションのセクション で説明されている手順を完了します。

1.3.3.3 - Deploy W&B Platform on Azure

Azure 上での W&B サーバー のホスティング

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

このモジュールのドキュメントは広範囲にわたり、利用可能なすべてのオプションが記載されています。このドキュメントでは、いくつかのデプロイメントオプションについて説明します。

開始する前に、Terraform で利用可能な remote backends のいずれかを選択して、State File を保存することをお勧めします。

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

Terraform Module は、次の mandatory コンポーネントをデプロイします。

  • 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 を実行するアカウントは、イントロダクションで説明されているすべてのコンポーネントを作成できる必要があります。

一般的な手順

このトピックの手順は、このドキュメントで説明されているすべてのデプロイメントオプションに共通です。

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

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

    ここで定義されている変数は、デプロイメントの前に決定する必要があります。namespace 変数は、Terraform によって作成されたすべてのリソースにプレフィックスを付ける 文字列 になります。

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

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

terraform {
  required_version = "~> 1.3"

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

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

オプションで、強く推奨されますが、このドキュメントの冒頭で説明した remote backend configuration を追加できます。

  1. ファイル variables.tf を作成します。terraform.tfvars で設定されたすべてのオプションについて、Terraform は対応する変数宣言を必要とします。
  variable "namespace" {
    type        = string
    description = "String used for prefix resources."
  }

  variable "location" {
    type        = string
    description = "Azure Resource Group location"
  }

  variable "domain_name" {
    type        = string
    description = "Domain for accessing the Weights & Biases UI."
  }

  variable "subdomain" {
    type        = string
    default     = null
    description = "Subdomain for accessing the Weights & Biases UI. Default creates record at Route53 Route."
  }

  variable "license" {
    type        = string
    description = "Your wandb/local license"
  }

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

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

  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)
  }
}

# Spin up all required services
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
}
  1. W&B にデプロイします。 W&B をデプロイするには、次の コマンド を実行します。

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

REDIS Cache を使用したデプロイメント

別のデプロイメントオプションでは、SQL クエリをキャッシュし、Experiments の Metrics をロードする際のアプリケーション応答を高速化するために Redis を使用します。

キャッシュを有効にするには、推奨されるデプロイメント で使用したのと同じ main.tf ファイルにオプション create_redis = true を追加する必要があります。

# Spin up all required services
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 # Create Redis
  [...]

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

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

message broker を提供する Azure リソースは Azure Event Grid であり、これを有効にするには、推奨されるデプロイメント で使用したのと同じ main.tf にオプション use_internal_queue = false を追加する必要があります。

# Spin up all required services
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 # Enable Azure Event Grid
  [...]
}

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

3 つのデプロイメントオプションすべてを組み合わせて、すべての構成を同じファイルに追加できます。 Terraform Module には、標準オプションと 推奨されるデプロイメント にある最小限の構成とともに組み合わせることができる、いくつかのオプションが用意されています。

1.3.4 - Deploy W&B Platform On-premises

W&B サーバー をオンプレミス の インフラストラクチャー 上でホストする

関連する質問については、W&B のセールスチーム (contact@wandb.com) にお問い合わせください。

インフラストラクチャーのガイドライン

W&B のデプロイメントを開始する前に、リファレンスアーキテクチャー、特にインフラストラクチャーの要件を参照してください。

MySQL データベース

スケーラブルな MySQL データベースの運用を簡単にするエンタープライズサービスが多数あります。W&B では、以下のソリューションのいずれかを検討することをお勧めします。

https://www.percona.com/software/mysql-database/percona-server

https://github.com/mysql/mysql-operator

W&B Server MySQL 8.0 を実行する場合、または MySQL 5.7 から 8.0 にアップグレードする場合は、以下の条件を満たしてください。

binlog_format = 'ROW'
innodb_online_alter_log_max_size = 268435456
sync_binlog = 1
innodb_flush_log_at_trx_commit = 1
binlog_row_image = 'MINIMAL'

MySQL 8.0 での sort_buffer_size の処理方法の変更により、sort_buffer_size パラメータをデフォルト値の 262144 から更新する必要がある場合があります。W&B と MySQL が効率的に連携するように、値を 67108864 (64MiB) に設定することをお勧めします。MySQL は v8.0.28 以降でこの設定をサポートしています。

データベースに関する考慮事項

次の SQL クエリで、データベースと ユーザーを作成します。SOME_PASSWORD は任意のパスワードに置き換えてください。

CREATE USER 'wandb_local'@'%' IDENTIFIED BY 'SOME_PASSWORD';
CREATE DATABASE wandb_local CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL ON wandb_local.* TO 'wandb_local'@'%' WITH GRANT OPTION;

パラメータグループの設定

データベースのパフォーマンスを調整するために、次のパラメータグループが設定されていることを確認してください。

binlog_format = 'ROW'
innodb_online_alter_log_max_size = 268435456
sync_binlog = 1
innodb_flush_log_at_trx_commit = 1
binlog_row_image = 'MINIMAL'
sort_buffer_size = 67108864

オブジェクトストレージ

オブジェクトストレージは、Minio cluster で外部ホストすることも、署名付き URL をサポートする Amazon S3 互換のオブジェクトストレージでホストすることもできます。オブジェクトストレージが署名付き URL をサポートしているかどうかを確認するには、次のスクリプト を実行してください。

また、オブジェクトストレージには、次の CORS ポリシーを適用する必要があります。

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>http://YOUR-W&B-SERVER-IP</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedMethod>HEAD</AllowedMethod>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

Amazon S3 互換のオブジェクトストレージに接続するときに、接続文字列で認証情報を指定できます。たとえば、次のように指定できます。

s3://$ACCESS_KEY:$SECRET_KEY@$HOST/$BUCKET_NAME

オブジェクトストレージに信頼できる SSL 証明書を設定している場合は、W&B が TLS 経由でのみ接続するように指示することもできます。これを行うには、URL に tls クエリパラメータを追加します。たとえば、次の URL の例は、Amazon S3 URI に TLS クエリパラメータを追加する方法を示しています。

s3://$ACCESS_KEY:$SECRET_KEY@$HOST/$BUCKET_NAME?tls=true

サードパーティのオブジェクトストレージを使用する場合は、BUCKET_QUEUEinternal:// に設定します。これにより、W&B サーバーは、外部の SQS キューまたは同等のものに依存する代わりに、すべてのオブジェクト通知を内部で管理するように指示されます。

独自のオブジェクトストレージを実行する際に考慮すべき最も重要な点は次のとおりです。

  1. ストレージ容量とパフォーマンス。磁気ディスクを使用しても問題ありませんが、これらのディスクの容量を監視する必要があります。W&B の平均的な使用量では、10 ギガバイトから 100 ギガバイトになります。ヘビーな使用では、ペタバイト単位のストレージを消費する可能性があります。
  2. フォールトトレランス。少なくとも、オブジェクトを保存する物理ディスクは RAID アレイ上にある必要があります。minio を使用する場合は、分散モード で実行することを検討してください。
  3. 可用性。ストレージが利用可能であることを確認するために、監視を設定する必要があります。

独自のオブジェクトストレージサービスを実行する代わりに、次のようなエンタープライズの代替手段が多数あります。

  1. https://aws.amazon.com/s3/outposts/
  2. https://www.netapp.com/data-storage/storagegrid/

MinIO のセットアップ

minio を使用する場合は、次のコマンドを実行して バケット を作成できます。

mc config host add local http://$MINIO_HOST:$MINIO_PORT "$MINIO_ACCESS_KEY" "$MINIO_SECRET_KEY" --api s3v4
mc mb --region=us-east1 local/local-files

W&B Server アプリケーションを Kubernetes にデプロイする

推奨されるインストール方法は、公式の W&B Helm チャートを使用する方法です。W&B Server アプリケーションをデプロイするには、このセクション に従ってください。

OpenShift

W&B は、OpenShift Kubernetes cluster 内からの運用をサポートしています。

特権のない ユーザー として コンテナ を実行する

デフォルトでは、コンテナ は $UID 999 を使用します。オーケストレーターが非 root ユーザー で コンテナ を実行する必要がある場合は、$UID >= 100000 および $GID 0 を指定します。

Kubernetes のセキュリティコンテキストの例を次に示します。

spec:
  securityContext:
    runAsUser: 100000
    runAsGroup: 0

ネットワーク

ロードバランサー

適切なネットワーク境界でネットワークリクエストを停止する ロードバランサー を実行します。

一般的な ロードバランサー には次のものがあります。

  1. Nginx Ingress
  2. Istio
  3. Caddy
  4. Cloudflare
  5. Apache
  6. HAProxy

機械学習 ペイロード を実行するために使用されるすべてのマシンと、Web ブラウザー を介してサービスにアクセスするために使用されるデバイスが、この エンドポイント と通信できることを確認してください。

SSL / TLS

W&B Server は SSL を停止しません。セキュリティポリシーで信頼できるネットワーク内での SSL 通信が必要な場合は、Istio や side car containers などの ツール の使用を検討してください。ロードバランサー 自体が有効な証明書で SSL を終端する必要があります。自己署名証明書の使用はサポートされておらず、ユーザー に多くの問題を引き起こします。可能であれば、Let’s Encrypt のようなサービスを使用すると、ロードバランサー に信頼できる証明書を提供できます。Caddy や Cloudflare などのサービスは、SSL を管理します。

Nginx の設定例

以下は、Nginx をリバースプロキシとして使用した設定例です。

events {}
http {
    # If we receive X-Forwarded-Proto, pass it through; otherwise, pass along the
    # scheme used to connect to this server
    # X-Forwarded-Proto を受信した場合は、そのまま渡します。それ以外の場合は、このサーバーへの接続に使用されたスキームを渡します。
    map $http_x_forwarded_proto $proxy_x_forwarded_proto {
        default $http_x_forwarded_proto;
        ''      $scheme;
    }

    # Also, in the above case, force HTTPS
    # また、上記の場合、HTTPS を強制します
    map $http_x_forwarded_proto $sts {
        default '';
        "https" "max-age=31536000; includeSubDomains";
    }

    # If we receive X-Forwarded-Host, pass it though; otherwise, pass along $http_host
    # X-Forwarded-Host を受信した場合は、そのまま渡します。それ以外の場合は、$http_host を渡します。
    map $http_x_forwarded_host $proxy_x_forwarded_host {
        default $http_x_forwarded_host;
        ''      $http_host;
    }

    # If we receive X-Forwarded-Port, pass it through; otherwise, pass along the
    # server port the client connected to
    # X-Forwarded-Port を受信した場合は、そのまま渡します。それ以外の場合は、クライアントが接続したサーバーポートを渡します。
    map $http_x_forwarded_port $proxy_x_forwarded_port {
        default $http_x_forwarded_port;
        ''      $server_port;
    }

    # If we receive Upgrade, set Connection to "upgrade"; otherwise, delete any
    # Connection header that may have been passed to this server
    # Upgrade を受信した場合は、Connection を "upgrade" に設定します。それ以外の場合は、このサーバーに渡された可能性のある Connection ヘッダーを削除します。
    map $http_upgrade $proxy_connection {
        default upgrade;
        '' close;
    }

    server {
        listen 443 ssl;
        server_name         www.example.com;
        ssl_certificate     www.example.com.crt;
        ssl_certificate_key www.example.com.key;

        proxy_http_version 1.1;
        proxy_buffering off;
        proxy_set_header Host $http_host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $proxy_connection;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $proxy_x_forwarded_proto;
        proxy_set_header X-Forwarded-Host $proxy_x_forwarded_host;

        location / {
            proxy_pass  http://$YOUR_UPSTREAM_SERVER_IP:8080/;
        }

        keepalive_timeout 10;
    }
}

インストール の検証

W&B Server が正しく設定されていることを確認します。ターミナル で次の コマンド を実行します。

pip install wandb
wandb login --host=https://YOUR_DNS_DOMAIN
wandb verify

ログ ファイル を調べて、W&B Server の起動時に発生した エラー を確認します。次の コマンド を実行します。

docker logs wandb-local
kubectl get pods
kubectl logs wandb-XXXXX-XXXXX

エラー が発生した場合は、W&B Support にお問い合わせください。

1.3.5 - Update W&B license and version

さまざまなインストール メソッドにおける W&B (Weights & Biases) の バージョン およびライセンスを更新するための ガイド。

W&B サーバー のバージョンとライセンスの更新は、W&B サーバー のインストール時と同じ方法で行います。以下の表は、さまざまなデプロイメント方法に基づいてライセンスとバージョンを更新する方法をまとめたものです。

リリースタイプ 説明
Terraform W&B は、クラウド デプロイメント 用に3つのパブリック Terraform モジュールをサポートしています。 AWS, GCP, および Azure.
Helm Helm Chart を使用して、既存の Kubernetes クラスター に W&B をインストールできます。

Terraform で更新

Terraform でライセンスとバージョンを更新します。次の表に、W&B が管理する Terraform モジュールをクラウド プラットフォーム ごとに示します。

クラウド プロバイダー Terraform モジュール
AWS AWS Terraform module
GCP GCP Terraform module
Azure Azure Terraform module
  1. まず、適切なクラウド プロバイダー 用に W&B が管理している Terraform モジュールに移動します。クラウド プロバイダー に基づいて適切な Terraform モジュールを見つけるには、上記の表を参照してください。

  2. Terraform の 設定 内で、Terraform wandb_app モジュール 設定 の wandb_versionlicense を更新します。

    module "wandb_app" {
        source  = "wandb/wandb/<cloud-specific-module>"
        version = "new_version"
        license       = "new_license_key" # 新しいライセンスキー
        wandb_version = "new_wandb_version" # 希望する W&B の バージョン
        ...
    }
    
  3. terraform planterraform apply で Terraform 設定 を適用します。

    terraform init
    terraform apply
    
  4. (オプション) terraform.tfvars または他の .tfvars ファイルを使用する場合。

    新しい W&B の バージョン とライセンス キー で terraform.tfvars ファイルを更新または作成します。

    terraform plan -var-file="terraform.tfvars"
    

    設定 を適用します。Terraform ワークスペース ディレクトリー で以下を実行します。

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

Helm で更新

spec で W&B を更新

  1. Helm chart *.yaml 設定 ファイルで、image.taglicense の 値 を変更して、新しい バージョン を指定します。

    license: 'new_license'
    image:
      repository: wandb/local
      tag: 'new_version'
    
  2. 次の コマンド で Helm アップグレード を実行します。

    helm repo update
    helm upgrade --namespace=wandb --create-namespace \
      --install wandb wandb/wandb --version ${chart_version} \
      -f ${wandb_install_spec.yaml}
    

ライセンスとバージョンを直接更新

  1. 新しいライセンス キー とイメージ タグ を 環境 変数 として設定します。

    export LICENSE='new_license'
    export TAG='new_version'
    
  2. 以下の コマンド で Helm リリース をアップグレードし、新しい 値 を既存の 設定 とマージします。

    helm repo update
    helm upgrade --namespace=wandb --create-namespace \
      --install wandb wandb/wandb --version ${chart_version} \
      --reuse-values --set license=$LICENSE --set image.tag=$TAG
    

詳細については、パブリック リポジトリー の アップグレード ガイド を参照してください。

admin UI で更新

このメソッド は、通常セルフホスト Docker インストールで、W&B サーバー コンテナー の 環境 変数 で設定されていないライセンスを更新する場合にのみ機能します。

  1. W&B Deployment Page から新しいライセンスを取得し、アップグレードする デプロイメント の正しい organization と デプロイメント ID に一致することを確認します。
  2. <host-url>/system-settings で W&B Admin UI にアクセスします。
  3. ライセンス管理セクションに移動します。
  4. 新しいライセンス キー を入力して変更を保存します。

2 - Identity and access management (IAM)

W&B Platform には、W&B 内に3つの IAM スコープがあります。OrganizationsTeams、および Projectsです。

Organization

Organization は、W&B アカウントまたはインスタンスのルートスコープです。アカウントまたはインスタンス内のすべてのアクションは、そのルートスコープのコンテキスト内で実行されます。これには、ユーザーの管理、Teams の管理、Teams 内の Projects の管理、使用状況の追跡などが含まれます。

Multi-tenant Cloud を使用している場合、複数の Organization を持つことができ、それぞれが事業部門、個人のユーザー、他の企業との共同パートナーシップなどに対応する場合があります。

Dedicated Cloud または Self-managed instance を使用している場合は、1つの Organization に対応します。貴社は、事業部門や部署に対応するために、複数の Dedicated Cloud または Self-managed instance を持つことができますが、これは厳密には、貴社のビジネスまたは部署全体で AI 実務者を管理するためのオプションの方法です。

詳細については、Organization の管理を参照してください。

Team

Team は、Organization 内のサブスコープであり、事業部門/機能、部署、または社内の project team に対応する場合があります。デプロイメントの種類と料金プランに応じて、Organization 内に複数の Team を持つことができます。

AI projects は、Team のコンテキスト内で編成されます。Team 内のアクセス制御は、親 Organization レベルの管理者である場合とそうでない場合がある Team 管理者によって管理されます。

詳細については、Team の追加と管理を参照してください。

Project

Project は、Team 内のサブスコープであり、特定の意図された結果を持つ実際の AI project に対応します。Team 内に複数の project を持つことができます。各 project には、誰がアクセスできるかを決定する可視性モードがあります。

すべての project は、WorkspacesReports で構成され、関連する ArtifactsSweeps、および Automations にリンクされています。

2.1 - Authentication

2.1.1 - Configure SSO with LDAP

W&B サーバー LDAP サーバーで認証情報を認証します。次のガイドでは、W&B サーバーの 設定を構成する方法について説明します。必須およびオプションの設定、システム設定 UI から LDAP 接続を構成する手順について説明します。また、アドレス、ベース識別名、属性など、LDAP 設定のさまざまな入力に関する情報も提供します。これらの属性は、W&B App UI または 環境変数を使用して指定できます。匿名バインド、または管理者 DN とパスワードを使用したバインドのいずれかをセットアップできます。

LDAP 接続を構成する

  1. W&B App に移動します。
  2. 右上からプロフィール アイコンを選択します。ドロップダウンから、[システム 設定] を選択します。
  3. [LDAP クライアントを構成] を切り替えます。
  4. フォームに詳細を追加します。各入力の詳細については、[パラメータの構成] セクションを参照してください。
  5. [設定の更新] をクリックして、設定をテストします。これにより、W&B サーバーとのテスト クライアント/接続が確立されます。
  6. 接続が確認されたら、[LDAP 認証を有効にする] を切り替え、[設定の更新] ボタンを選択します。

次の 環境変数を使用して LDAP 接続を設定します。

環境変数 必須
LOCAL_LDAP_ADDRESS はい ldaps://ldap.example.com:636
LOCAL_LDAP_BASE_DN はい email=mail,group=gidNumber
LOCAL_LDAP_BIND_DN いいえ cn=admin, dc=example,dc=org
LOCAL_LDAP_BIND_PW いいえ
LOCAL_LDAP_ATTRIBUTES はい email=mail, group=gidNumber
LOCAL_LDAP_TLS_ENABLE いいえ
LOCAL_LDAP_GROUP_ALLOW_LIST いいえ
LOCAL_LDAP_LOGIN いいえ

各 環境変数の定義については、設定 パラメータ セクションを参照してください。わかりやすくするために、環境変数プレフィックス LOCAL_LDAP が定義名から省略されていることに注意してください。

設定 パラメータ

次の表に、必須およびオプションの LDAP 構成を示し、説明します。

環境変数 定義 必須
ADDRESS これは、W&B サーバーをホストする VPC 内の LDAP サーバーの アドレスです。 はい
BASE_DN ルート パスは検索の開始元であり、この ディレクトリーにクエリを実行するために必要です。 はい
BIND_DN LDAP サーバーに登録されている管理 ユーザーのパス。LDAP サーバーが認証されていないバインドをサポートしていない場合に必要です。指定した場合、W&B サーバーはこの ユーザーとして LDAP サーバーに接続します。それ以外の場合、W&B サーバーは匿名バインドを使用して接続します。 いいえ
BIND_PW 管理 ユーザーのパスワード。これはバインドの認証に使用されます。空白のままにすると、W&B サーバーは匿名バインドを使用して接続します。 いいえ
ATTRIBUTES メールとグループ ID の属性名をコンマ区切りの文字列値として指定します。 はい
TLS_ENABLE TLS を有効にします。 いいえ
GROUP_ALLOW_LIST グループ許可リスト。 いいえ
LOGIN これは、W&B サーバーに LDAP を使用して認証するように指示します。True または False に設定します。オプションで、LDAP 構成をテストするために false に設定します。LDAP 認証を開始するには、これを true に設定します。 いいえ

2.1.2 - Configure SSO with OIDC

W&B Server の OpenID Connect (OIDC) 互換アイデンティティプロバイダーのサポートにより、Okta、Keycloak、Auth0、Google、Entra などの外部アイデンティティプロバイダーを介したユーザーアイデンティティとグループメンバーシップの管理が可能になります。

OpenID Connect (OIDC)

W&B Server は、外部 Identity Provider (IdP) との統合のために、以下の OIDC 認証フローをサポートしています。

  1. フォームポストによる暗黙的フロー
  2. Proof Key for Code Exchange (PKCE) を使用した認証コードフロー

これらのフローはユーザーを認証し、アクセス制御を管理するために必要なアイデンティティ情報 (ID トークンの形式) を W&B Server に提供します。

ID トークンは、ユーザーの名前、ユーザー名、メール、グループメンバーシップなどのユーザーのアイデンティティ情報を含む JWT です。W&B Server はこのトークンを使用してユーザーを認証し、システム内の適切なロールまたはグループにマップします。

W&B Server のコンテキストでは、アクセス トークンはユーザーに代わって API へのリクエストを承認しますが、W&B Server の主な関心事はユーザー認証とアイデンティティであるため、ID トークンのみが必要です。

環境変数を使用して、IAM オプションを設定 して、専用クラウド または Self-managed インスタンスを構成できます。

専用クラウド または Self-managed W&B Server インストール用に Identity Provider を構成するには、次のガイドラインに従って、さまざまな IdP に従ってください。W&B の SaaS バージョンを使用している場合は、support@wandb.com に連絡して、組織の Auth0 テナントの構成を支援してください。

認証に AWS Cognito を設定するには、以下の手順に従ってください。

  1. まず、AWS アカウントにサインインし、AWS Cognito アプリケーションに移動します。

    認証ではなく認証に OIDC を使用する場合、パブリッククライアントはセットアップを簡素化します
  2. IdP でアプリケーションを構成するために、許可されたコールバック URL を指定します。

    • コールバック URL として http(s)://YOUR-W&B-HOST/oidc/callback を追加します。YOUR-W&B-HOST を W&B ホストパスに置き換えます。
  3. IdP がユニバーサルログアウトをサポートしている場合は、ログアウト URL を http(s)://YOUR-W&B-HOST に設定します。YOUR-W&B-HOST を W&B ホストパスに置き換えます。

    たとえば、アプリケーションが https://wandb.mycompany.com で実行されている場合、YOUR-W&B-HOSTwandb.mycompany.com に置き換えます。

    以下の図は、AWS Cognito で許可されたコールバックとサインアウト URL を指定する方法を示しています。

    インスタンスが複数のホストからアクセスできる場合は、必ずここにすべて含めてください。

    wandb/local は、デフォルトで form_post 応答タイプによる implicit 付与 を使用します。

    PKCE Code Exchange フローを使用する authorization_code 付与を実行するように wandb/local を構成することもできます。

  4. AWS Cognito がトークンをアプリに配信する方法を構成するために、1 つ以上の OAuth 付与タイプを選択します。

  5. W&B には特定の OpenID Connect (OIDC) スコープが必要です。AWS Cognito アプリから以下を選択します。

    • “openid”
    • “profile”
    • “email”

    たとえば、AWS Cognito アプリの UI は次の図のようになります。

    必須フィールド

    設定ページで Auth Method を選択するか、OIDC_AUTH_METHOD 環境変数を設定して、wandb/local にどの付与を行うかを指示します。

    Auth Method を pkce に設定する必要があります。

  6. クライアント ID と OIDC 発行者の URL が必要です。OpenID ディスカバリドキュメントは $OIDC_ISSUER/.well-known/openid-configuration で利用可能である必要があります。

    たとえば、ユーザープール セクション内の アプリの統合 タブから Cognito IdP URL にユーザープール ID を追加して、発行者 URL を生成できます。

    AWS Cognito の発行者 URL のスクリーンショット

    IDP URL に “Cognito ドメイン” を使用しないでください。Cognito は、https://cognito-idp.$REGION.amazonaws.com/$USER_POOL_ID でディスカバリドキュメントを提供します。

Okta を認証用に設定するには、以下の手順に従ってください。

  1. https://login.okta.com/ で Okta ポータルにログインします。

  2. 左側で、Applications を選択し、次に Applications をもう一度選択します。

  3. 「Create App integration」をクリックします。

  4. 「Create a new app integration」という画面で、OIDC - OpenID ConnectSingle-Page Application を選択します。次に、「Next」をクリックします。

  5. 「New Single-Page App Integration」という画面で、以下の値を入力して Save をクリックします。

    • アプリケーション統合名(例: “Weights & Biases”)
    • 付与タイプ: Authorization CodeImplicit (hybrid) の両方を選択します
    • Sign-in redirect URIs: https://YOUR_W_AND_B_URL/oidc/callback
    • Sign-out redirect URIs: https://YOUR_W_AND_B_URL/logout
    • Assignments: Skip group assignment for now を選択します
  6. 作成した Okta アプリケーションの概要画面で、General タブの Client Credentials の下の Client ID をメモします。

  7. Okta OIDC Issuer URL を識別するには、左側の Settings を選択し、次に Account を選択します。 Okta UI には、Organization Contact の下に会社名が表示されます。

OIDC 発行者 URL の形式は https://COMPANY.okta.com です。COMPANY を対応する値に置き換えます。メモしておいてください。

  1. Azure ポータル (https://portal.azure.com/) にログインします。

  2. 「Microsoft Entra ID」サービスを選択します。

  3. 左側で、「App registrations」を選択します。

  4. 上部で、「New registration」をクリックします。

    「Register an application」という画面で、以下の値を入力します。

    • 名前を指定します(例: “Weights and Biases application”)

    • デフォルトでは、選択されているアカウントの種類は「Accounts in this organizational directory only (Default Directory only - Single tenant)」です。必要に応じて変更します。

    • リダイレクト URI をタイプ Web で値 https://YOUR_W_AND_B_URL/oidc/callback で構成します

    • 「Register」をクリックします。

    • 「Application (client) ID」と「Directory (tenant) ID」をメモします。

  5. 左側で、Authentication をクリックします。

    • Front-channel logout URL の下で、https://YOUR_W_AND_B_URL/logout を指定します。

    • 「Save」をクリックします。

  6. 左側で、「Certificates & secrets」をクリックします。

    • 「Client secrets」をクリックし、次に「New client secret」をクリックします。

      「Add a client secret」という画面で、以下の値を入力します。

      • 説明を入力します(例: “wandb”)
      • 「Expires」はそのままにするか、必要に応じて変更します。
      • 「Add」をクリックします。
    • シークレットの「Value」をメモします。「Secret ID」は必要ありません。

これで、次の 3 つの値をメモしておく必要があります。

  • OIDC クライアント ID
  • OIDC クライアントシークレット
  • テナント ID は OIDC Issuer URL に必要です

OIDC 発行者 URL の形式は https://login.microsoftonline.com/${TenantID}/v2.0 です

W&B Server で SSO をセットアップする

SSO を設定するには、管理者権限と以下の情報が必要です。

  • OIDC クライアント ID
  • OIDC 認証方式 (implicit または pkce)
  • OIDC Issuer URL
  • OIDC クライアントシークレット (オプション、IdP の設定方法によって異なります)

W&B Server UI を使用するか、環境変数wandb/local pod に渡すことによって、SSO を設定できます。環境変数は UI より優先されます。

システムコンソールは、システム設定ページの後継です。W&B Kubernetes Operator ベースのデプロイで使用できます。

  1. W&B 管理コンソールへのアクセス を参照してください。

  2. Settings に移動し、次に Authentication に移動します。Type ドロップダウンで OIDC を選択します。

  3. 値を入力します。

  4. Save をクリックします。

  5. ログアウトし、再度ログインします。今回は IdP ログイン画面を使用します。

  1. Weights&Biases インスタンスにサインインします。

  2. W&B アプリケーションに移動します。

  3. ドロップダウンから、System Settings を選択します。

  4. 発行者、クライアント ID、および認証方式を入力します。

  5. Update settings を選択します。

Security Assertion Markup Language (SAML)

W&B Server は SAML をサポートしていません。

2.1.3 - Use federated identities with SDK

Identity federation を使用して、W&B SDK 経由で組織の認証情報を使用してサインインします。W&B organization の管理者が organization 向けに SSO を設定している場合、すでに組織の認証情報を使用して W&B アプリの UI にサインインしているはずです。その意味で、identity federation は W&B SDK の SSO のようなものですが、JSON Web Tokens (JWT) を直接使用します。identity federation は、APIキー の代替として使用できます。

RFC 7523 は、SDK との identity federation の基礎を形成します。

JWT issuer の設定

最初の手順として、organization の管理者は、W&B organization と公開されている JWT issuer の間の federation を設定する必要があります。

  • organization の ダッシュボード で Settings タブに移動します
  • Authentication オプションで、Set up JWT Issuer を押します
  • テキストボックスに JWT issuer の URL を追加し、Create を押します

W&B は、${ISSUER_URL}/.well-known/oidc-configuration のパスで OIDC discovery document を自動的に検索し、discovery document 内の関連する URL で JSON Web Key Set (JWKS) を見つけようとします。JWKS は、JWT が関連する identity provider によって発行されたことを確認するために、JWT のリアルタイム検証に使用されます。

JWT を使用して W&B にアクセスする

JWT issuer が W&B organization 用に設定されると、ユーザーはその identity provider によって発行された JWT を使用して、関連する W&B プロジェクト へのアクセスを開始できます。JWT を使用するメカニズムは次のとおりです。

  • organization で利用可能なメカニズムのいずれかを使用して、identity provider にサインインする必要があります。一部のプロバイダーには、API または SDK を使用して自動化された方法でアクセスできますが、関連する UI を使用してのみアクセスできるプロバイダーもあります。詳細については、W&B organization の管理者または JWT issuer の所有者にお問い合わせください。
  • identity provider へのサインイン後に JWT を取得したら、安全な場所にファイルに保存し、環境変数 WANDB_IDENTITY_TOKEN_FILE に絶対ファイルパスを設定します。
  • W&B SDK または CLI を使用して W&B project にアクセスします。SDK または CLI は、JWT を自動的に検出し、JWT が正常に検証された後、W&B access token と交換する必要があります。W&B access token は、AI ワークフローを有効にするための関連する API にアクセスするために使用されます。つまり、run、メトリクス、Artifacts などを ログ に記録します。access token は、デフォルトで ~/.config/wandb/credentials.json のパスに保存されます。環境変数 WANDB_CREDENTIALS_FILE を指定することで、そのパスを変更できます。

JWT の検証

JWT を W&B access token と交換し、project にアクセスする ワークフロー の一部として、JWT は次の検証を受けます。

  • JWT 署名は、W&B organization レベルで JWKS を使用して検証されます。これは最初の防御線であり、これが失敗した場合、JWKS または JWT の署名方法に問題があることを意味します。
  • JWT の iss クレームは、organization レベルで設定された issuer URL と同じである必要があります。
  • JWT の sub クレームは、W&B organization で設定されているユーザーのメールアドレスと同じである必要があります。
  • JWT の aud クレームは、AI ワークフローの一部としてアクセスしている project を収容する W&B organization の名前と同じである必要があります。Dedicated Cloud または Self-managed インスタンスの場合、インスタンスレベルの環境変数 SKIP_AUDIENCE_VALIDATIONtrue に設定して、オーディエンスクレームの検証をスキップするか、オーディエンスとして wandb を使用できます。
  • JWT の exp クレームは、トークンが有効かどうか、または期限切れで更新が必要かどうかを確認するためにチェックされます。

外部サービスアカウント

W&B は、有効期間の長い APIキー を持つ組み込みのサービスアカウントを長年サポートしてきました。SDK および CLI 向けの identity federation 機能を使用すると、organization レベルで設定されているのと同じ issuer によって発行されている限り、JWT を認証に使用できる外部サービスアカウントも導入できます。team 管理者は、組み込みのサービスアカウントと同様に、team のスコープ内で外部サービスアカウントを設定できます。

外部サービスアカウントを設定するには:

  • team の Service Accounts タブに移動します
  • New service account を押します
  • サービスアカウントの名前を入力し、Authentication Method として Federated Identity を選択し、Subject を入力して、Create を押します

外部サービスアカウントの JWT の sub クレームは、team 管理者が team レベルの Service Accounts タブでサブジェクトとして設定したものと同じである必要があります。そのクレームは、JWT の検証 の一部として検証されます。aud クレームの要件は、ヒューマンユーザー JWT の要件と同様です。

外部サービスアカウントの JWT を使用して W&B にアクセスする 場合、通常は、初期 JWT を生成し、継続的に更新する ワークフロー を自動化する方が簡単です。外部サービスアカウントを使用して ログ に記録された run をヒューマンユーザーに帰属させたい場合は、組み込みのサービスアカウントの場合と同様に、AI ワークフローの環境変数 WANDB_USERNAME または WANDB_USER_EMAIL を設定できます。

2.1.4 - Use service accounts to automate workflows

組織とチームのスコープを持つサービスアカウントを使用して、自動化された、または非インタラクティブな ワークフロー を管理します。

サービスアカウントは、チーム内またはチーム間で、プロジェクトを横断して共通タスクを自動的に実行できる、人間ではないまたは機械の ユーザー を表します。

  • 組織の 管理者 は、組織の スコープ で サービスアカウント を作成できます。
  • チーム の 管理者 は、その チーム の スコープ で サービスアカウント を作成できます。

サービスアカウント の APIキー を使用すると、呼び出し元は サービスアカウント の スコープ 内の プロジェクト から読み取りまたは書き込みができます。

サービスアカウント を使用すると、複数の ユーザー または チーム による ワークフロー の集中管理、W&B Models の 実験管理 の自動化、または W&B Weave の トレース の ログ記録 が可能になります。 環境変数 WANDB_USERNAME または WANDB_USER_EMAIL のいずれかを使用することにより、人間の ユーザー の ID を サービスアカウント によって管理される ワークフロー に関連付けるオプションがあります。

組織スコープ の サービスアカウント

組織に スコープ された サービスアカウント は、 制限付き プロジェクト を除き、 チーム に関係なく、組織内のすべての プロジェクト で読み取りおよび書き込みの権限を持ちます。組織スコープ の サービスアカウント が 制限付き プロジェクト に アクセス するには、その プロジェクト の 管理者 が サービスアカウント を プロジェクト に明示的に追加する必要があります。

組織の 管理者 は、組織またはアカウント ダッシュボード の [ Service Accounts ] タブから、組織スコープ の サービスアカウント の APIキー を取得できます。

新しい組織スコープ の サービスアカウント を作成するには:

  • 組織 ダッシュボード の [ Service Accounts ] タブにある [ New service account ] ボタンをクリックします。
  • [ Name ] を入力します。
  • サービスアカウント のデフォルト チーム を選択します。
  • [ Create ] をクリックします。
  • 新しく作成された サービスアカウント の横にある [ Copy API key ] をクリックします。
  • コピーした APIキー を、シークレットマネージャーまたはその他の安全で アクセス 可能な場所に保存します。

チームスコープ の サービスアカウント

チームスコープ の サービスアカウント は、その チーム 内のすべての プロジェクト で読み取りおよび書き込みができます。ただし、その チーム 内の 制限付き プロジェクト は除きます。チームスコープ の サービスアカウント が 制限付き プロジェクト に アクセス するには、その プロジェクト の 管理者 が サービスアカウント を プロジェクト に明示的に追加する必要があります。

チーム の 管理者 として、チームスコープ の サービスアカウント の APIキー を <WANDB_HOST_URL>/<your-team-name>/service-accounts で取得できます。または、チーム の [ Team settings ] に移動し、[ Service Accounts ] タブを参照することもできます。

チーム の新しい チーム スコープ の サービスアカウント を作成するには:

  • チーム の [ Service Accounts ] タブにある [ New service account ] ボタンをクリックします。
  • [ Name ] を入力します。
  • 認証 方法として [ Generate API key (Built-in) ] を選択します。
  • [ Create ] をクリックします。
  • 新しく作成された サービスアカウント の横にある [ Copy API key ] をクリックします。
  • コピーした APIキー を、シークレットマネージャーまたはその他の安全で アクセス 可能な場所に保存します。

チームスコープ の サービスアカウント を使用する モデルトレーニング または 生成AI アプリ 環境 で チーム を構成しない場合、モデル の run または Weave トレース は、 サービスアカウント の親 チーム 内の名前付き プロジェクト に ログ 記録 されます。このようなシナリオでは、WANDB_USERNAME または WANDB_USER_EMAIL 変数 を使用した ユーザー 属性は、参照される ユーザー が サービスアカウント の親 チーム の一部である場合を除き、機能しません

外部 サービスアカウント

Built-in サービスアカウント に加えて、W&B は、JSON Web Tokens (JWT) を発行できる ID プロバイダー (IdP) との Identity federation を使用して、W&B SDK および CLI を使用した チーム スコープ の External service accounts もサポートしています。

2.2 - Access management

組織内の ユーザー と Teams を管理する

一意の組織ドメインで W&B に最初にサインアップした ユーザー は、その組織の インスタンス管理者ロール として割り当てられます。組織管理者は、特定の ユーザー に チーム 管理者ロールを割り当てます。

チーム管理者 は、 チーム 内で管理権限を持つ組織内の ユーザー です。

組織管理者は、https://wandb.ai/account-settings/ で組織のアカウント 設定 にアクセスして使用し、 ユーザー の招待、 ユーザー のロールの割り当てまたは更新、 Teams の作成、組織からの ユーザー の削除、請求管理者の割り当てなどを行うことができます。詳細については、ユーザー の追加と管理を参照してください。

組織管理者が チーム を作成すると、インスタンス管理者または チーム 管理者は次のことができます。

  • デフォルトでは、管理者のみがその チーム に ユーザー を招待したり、 チーム から ユーザー を削除したりできます。この 振る舞い を変更するには、チーム の 設定 を参照してください。
  • チームメンバー のロールを割り当てるか、更新します。
  • 新しい ユーザー が組織に参加したときに、自動的に ユーザー を チーム に追加します。

組織管理者と チーム 管理者の両方が、https://wandb.ai/<your-team-name> の チーム ダッシュボード を使用して Teams を管理します。詳細、および チーム のデフォルトのプライバシー 設定 の構成については、Teams の追加と管理を参照してください。

特定の Projects への可視性を制限する

W&B の Project のスコープを定義して、誰が W&B の Runs を表示、編集、および送信できるかを制限します。 チーム が機密 データ を扱う場合、 Project を表示できる ユーザー を制限すると特に役立ちます。

組織管理者、 チーム 管理者、または Project のオーナーは、 Project の可視性を 設定 および編集できます。

詳細については、Project の可視性を参照してください。

2.2.1 - Manage your organization

組織の管理者として、組織内の 個々のユーザーを管理 したり、Teams を管理 したりできます。

Team の管理者として、Teams を管理 できます。

組織内のユーザー管理を簡素化したい場合は、ユーザーと Team の管理の自動化 を参照してください。

組織名の変更

  1. https://wandb.ai/home に移動します。
  2. ページの右上隅にある ユーザーメニュー ドロップダウンを選択します。ドロップダウンの アカウント セクションで、設定 を選択します。
  3. 設定 タブ内で、一般 を選択します。
  4. 名前の変更 ボタンを選択します。
  5. 表示されるモーダル内で、組織の新しい名前を入力し、名前を保存 ボタンを選択します。

ユーザーの追加と管理

管理者として、組織のダッシュボードを使用して以下を行います。

  • ユーザーの招待または削除。
  • ユーザーの組織ロールの割り当てまたは更新、およびカスタムロールの作成。
  • 課金管理者の割り当て。

組織管理者が組織にユーザーを追加する方法はいくつかあります。

  1. 招待によるメンバー追加
  2. SSO による自動プロビジョニング
  3. ドメインキャプチャ

シートと料金

以下の表は、Models と Weave のシートの仕組みをまとめたものです。

製品 シート 料金の基準
Models セットごとに支払い Models の有料シートの数と、発生した使用量によって、全体のサブスクリプション料金が決まります。各ユーザーには、フル、ビューアー、アクセスなしの 3 種類のシートタイプのうち 1 つを割り当てることができます
Weave 無料 使用量ベース

ユーザーの招待

管理者は、ユーザーを組織、および組織内の特定の Team に招待できます。

  1. https://wandb.ai/home に移動します。
  2. ページの右上隅にある ユーザーメニュー ドロップダウンを選択します。ドロップダウンの アカウント セクションで、ユーザー を選択します。
  3. 新しいユーザーを招待 を選択します。
  4. 表示されるモーダルで、メールアドレスまたはユーザー名 フィールドにユーザーのメールアドレスまたはユーザー名を入力します。
  5. (推奨) Team を選択 ドロップダウンメニューから、ユーザーを Team に追加します。
  6. ロールを選択 ドロップダウンから、ユーザーに割り当てるロールを選択します。ユーザーのロールは後で変更できます。可能なロールの詳細については、ロールの割り当て に記載されている表を参照してください。
  7. 招待を送信 ボタンを選択します。

W&B は、招待を送信 ボタンを選択した後、サードパーティのメールサーバーを使用して、ユーザーのメールアドレスに招待リンクを送信します。ユーザーは招待を承諾すると、組織にアクセスできます。

  1. https://<org-name>.io/console/settings/ に移動します。<org-name> を組織名に置き換えます。
  2. ユーザーを追加 ボタンを選択します。
  3. 表示されるモーダルで、メールアドレス フィールドに新しいユーザーのメールアドレスを入力します。
  4. ロール ドロップダウンから、ユーザーに割り当てるロールを選択します。ユーザーのロールは後で変更できます。可能なロールの詳細については、ロールの割り当て に記載されている表を参照してください。
  5. W&B がサードパーティのメールサーバーを使用して、ユーザーのメールアドレスに招待リンクを送信する場合は、ユーザーに招待メールを送信 ボックスをオンにします。
  6. 新しいユーザーを追加 ボタンを選択します。

ユーザーの自動プロビジョニング

SSO を構成し、SSO プロバイダーが許可している場合、一致するメールアドレスドメインを持つ W&B ユーザーは、シングルサインオン (SSO) で W&B Organization にサインインできます。SSO は、すべてのエンタープライズライセンスで利用できます。

W&B は、自動プロビジョニングユーザーにデフォルトで「メンバー」ロールを割り当てます。自動プロビジョニングされたユーザーのロールはいつでも変更できます。

SSO を使用したユーザーの自動プロビジョニングは、Dedicated cloud インスタンスと Self-managed デプロイメントではデフォルトでオンになっています。自動プロビジョニングはオフにすることができます。自動プロビジョニングをオフにすると、特定のユーザーを選択的に W&B 組織に追加できます。

以下のタブでは、デプロイメントタイプに基づいて SSO をオフにする方法について説明します。

Dedicated cloud インスタンスを使用している場合に、SSO での自動プロビジョニングをオフにする場合は、W&B Team にお問い合わせください。

W&B Console を使用して、SSO での自動プロビジョニングをオフにします。

  1. https://<org-name>.io/console/settings/ に移動します。<org-name> を組織名に置き換えます。
  2. セキュリティ を選択します
  3. SSO プロビジョニングを無効にする を選択して、SSO での自動プロビジョニングをオフにします。

カスタムロールの作成

組織管理者は、表示のみまたはメンバーロールに基づいて新しいロールを作成し、追加の権限を追加して、きめ細かいアクセス制御を実現できます。Team 管理者は、Team メンバーにカスタムロールを割り当てることができます。カスタムロールは組織レベルで作成されますが、Team レベルで割り当てられます。

カスタムロールを作成するには:

  1. https://wandb.ai/home に移動します。
  2. ページの右上隅にある ユーザーメニュー ドロップダウンを選択します。ドロップダウンの アカウント セクションで、設定 を選択します。
  3. ロール をクリックします。
  4. カスタムロール セクションで、ロールを作成 をクリックします。
  5. ロールの名前を入力します。オプションで説明を入力します。
  6. カスタムロールのベースにするロールを選択します (ビューアー または メンバー)。
  7. 権限を追加するには、権限を検索 フィールドをクリックし、追加する 1 つ以上の権限を選択します。
  8. カスタムロールの権限 セクションを確認します。ここには、ロールが持つ権限がまとめられています。
  9. ロールを作成 をクリックします。

W&B Console を使用して、SSO での自動プロビジョニングをオフにします。

  1. https://<org-name>.io/console/settings/ に移動します。<org-name> を組織名に置き換えます。
  2. カスタムロール セクションで、ロールを作成 をクリックします。
  3. ロールの名前を入力します。オプションで説明を入力します。
  4. カスタムロールのベースにするロールを選択します (ビューアー または メンバー)。
  5. 権限を追加するには、権限を検索 フィールドをクリックし、追加する 1 つ以上の権限を選択します。
  6. カスタムロールの権限 セクションを確認します。ここには、ロールが持つ権限がまとめられています。
  7. ロールを作成 をクリックします。

これで、Team 管理者は Team の設定 から Team のメンバーにカスタムロールを割り当てることができます。

ドメインキャプチャ

ドメインキャプチャは、従業員が会社組織に参加するのに役立ち、新しいユーザーが会社の管轄外で資産を作成しないようにします。

ドメインキャプチャを使用すると、@example.com などの会社のメールアドレスを持つユーザーを W&B SaaS cloud organization に自動的に追加できます。これにより、すべての従業員が適切な組織に参加し、新しいユーザーが会社の管轄外で資産を作成しないようにします。

以下の表は、ドメインキャプチャが有効な場合と無効な場合における、新規および既存のユーザーの振る舞いをまとめたものです。

ドメインキャプチャあり ドメインキャプチャなし
新規ユーザー 検証済みのドメインから W&B にサインアップしたユーザーは、自動的に組織のデフォルト Team のメンバーとして追加されます。Team への参加を有効にすると、サインアップ時に参加する追加の Team を選択できます。招待状があれば、他の組織や Team にも参加できます。 ユーザーは、利用可能な集中管理された組織があることを知らずに、W&B アカウントを作成できます。
招待されたユーザー 招待されたユーザーは、招待を承諾すると自動的に組織に参加します。招待されたユーザーは、自動的に組織のデフォルト Team のメンバーとして追加されるわけではありません。招待状があれば、他の組織や Team にも参加できます。 招待されたユーザーは、招待を承諾すると自動的に組織に参加します。招待状があれば、他の組織や Team にも参加できます。
既存のユーザー ドメインからの検証済みのメールアドレスを持つ既存のユーザーは、W&B App 内で組織の Team に参加できます。既存のユーザーが組織に参加する前に作成したすべてのデータは保持されます。W&B は既存のユーザーのデータを移行しません。 既存の W&B ユーザーは、複数の組織や Team に分散している可能性があります。

招待されていない新規ユーザーが組織に参加するときに、デフォルトの Team に自動的に割り当てるには:

  1. https://wandb.ai/home に移動します。
  2. ページの右上隅にある ユーザーメニュー ドロップダウンを選択します。ドロップダウンから、設定 を選択します。
  3. 設定 タブ内で、一般 を選択します。
  4. ドメインキャプチャ 内の ドメインの要求 ボタンを選択します。
  5. 新しいユーザーが自動的に参加する Team を デフォルト Team ドロップダウンから選択します。利用可能な Team がない場合は、Team の設定を更新する必要があります。Team の追加と管理 の手順を参照してください。
  6. メールアドレスドメインの要求 ボタンをクリックします。

招待されていない新しいユーザーを Team に自動的に割り当てるには、Team の設定内でドメイン一致を有効にする必要があります。

  1. https://wandb.ai/<team-name> で Team のダッシュボードに移動します。<team-name> は、ドメイン一致を有効にする Team の名前です。
  2. Team のダッシュボードの左側にあるグローバルナビゲーションで Team の設定 を選択します。
  3. プライバシー セクション内で、“サインアップ時に、一致するメールアドレスドメインを持つ新しいユーザーにこの Team への参加を推奨する” オプションを切り替えます。

ドメインキャプチャを構成するには、Dedicated または Self-managed デプロイメントタイプを使用している場合は、W&B アカウント Team にお問い合わせください。構成が完了すると、W&B SaaS インスタンスは、会社のメールアドレスで W&B アカウントを作成するユーザーに、Dedicated または Self-managed インスタンスへのアクセスを要求するために管理者に連絡するように自動的に促します。

ドメインキャプチャあり ドメインキャプチャなし
新規ユーザー 検証済みのドメインから SaaS cloud で W&B にサインアップしたユーザーは、カスタマイズしたメールアドレスで管理者に連絡するように自動的に促されます。SaaS cloud で組織を作成して、製品をトライアルできます。 ユーザーは、会社に集中管理された Dedicated インスタンスがあることを知らずに、W&B SaaS cloud アカウントを作成できます。
既存のユーザー 既存の W&B ユーザーは、複数の組織や Team に分散している可能性があります。 既存の W&B ユーザーは、複数の組織や Team に分散している可能性があります。

ユーザーのロールの割り当てまたは更新

Organization のすべてのメンバーは、W&B Models と Weave の両方に対して組織ロールとシートを持っています。シートのタイプによって、課金ステータスと各製品ラインで実行できるアクションが決まります。

最初にユーザーを組織に招待するときに、ユーザーに組織ロールを割り当てます。ユーザーのロールは後で変更できます。

組織内のユーザーは、次のいずれかのロールを持つことができます。

ロール 説明
admin 他のユーザーを組織に追加または削除したり、ユーザーロールを変更したり、カスタムロールを管理したり、Team を追加したりできるインスタンス管理者。W&B は、管理者が不在の場合に備えて、複数の管理者がいることを推奨します。
Member インスタンス管理者によって招待された、組織の通常のユーザー。組織メンバーは、他のユーザーを招待したり、組織内の既存のユーザーを管理したりすることはできません。
Viewer (エンタープライズ限定機能) インスタンス管理者によって招待された、組織の表示専用ユーザー。ビューアーは、組織とメンバーである基盤となる Team への読み取りアクセスのみを持っています。
カスタムロール (エンタープライズ限定機能) カスタムロールを使用すると、組織管理者は、上記の表示専用またはメンバーロールから継承し、追加の権限を追加して、きめ細かいアクセス制御を実現することで、新しいロールを作成できます。Team 管理者は、これらのカスタムロールをそれぞれの Team のユーザーに割り当てることができます。

ユーザーのロールを変更するには:

  1. https://wandb.ai/home に移動します。
  2. ページの右上隅にある ユーザーメニュー ドロップダウンを選択します。ドロップダウンから、ユーザー を選択します。
  3. 検索バーにユーザーの名前またはメールアドレスを入力します。
  4. ユーザーの名前の横にある TEAM ROLE ドロップダウンからロールを選択します。

ユーザーのアクセスの割り当てまたは更新

組織内のユーザーは、フル、ビューアー、またはアクセスなしのいずれかのモデルシートまたは Weave アクセスタイプを持っています。

シートタイプ 説明
Full このロールタイプのユーザーは、Models または Weave のデータを書き込み、読み取り、エクスポートするための完全な権限を持っています。
Viewer 組織の表示専用ユーザー。ビューアーは、組織と所属する基盤となる Team への読み取りアクセスのみを持ち、Models または Weave への表示のみのアクセスを持っています。
No access このロールのユーザーは、Models または Weave 製品にアクセスできません。

モデルシートタイプと Weave アクセスタイプは組織レベルで定義され、Team に継承されます。ユーザーのシートタイプを変更する場合は、組織の設定に移動し、次の手順に従ってください。

  1. SaaS ユーザーの場合は、https://wandb.ai/account-settings/<organization>/settings で組織の設定に移動します。山かっこ (<>) で囲まれた値を組織名に置き換えてください。他の Dedicated および Self-managed デプロイメントの場合は、https://<your-instance>.wandb.io/org/dashboard に移動します。
  2. ユーザー タブを選択します。
  3. ロール ドロップダウンから、ユーザーに割り当てるシートタイプを選択します。

ユーザーの削除

  1. https://wandb.ai/home に移動します。
  2. ページの右上隅にある ユーザーメニュー ドロップダウンを選択します。ドロップダウンから、ユーザー を選択します。
  3. 検索バーにユーザーの名前またはメールアドレスを入力します。
  4. 表示されたら、省略記号または 3 つのドットのアイコン () を選択します。
  5. ドロップダウンから、メンバーを削除 を選択します。

課金管理者の割り当て

  1. https://wandb.ai/home に移動します。
  2. ページの右上隅にある ユーザーメニュー ドロップダウンを選択します。ドロップダウンから、ユーザー を選択します。
  3. 検索バーにユーザーの名前またはメールアドレスを入力します。
  4. 課金管理者 列で、課金管理者として割り当てるユーザーを選択します。

Team の追加と管理

組織のダッシュボードを使用して、組織内に Team を作成および管理します。組織管理者または Team 管理者は次のことができます。

  • ユーザーを Team に招待したり、Team からユーザーを削除したりします。
  • Team メンバーのロールを管理します。
  • 組織に参加するときに、ユーザーを Team に自動的に追加します。
  • https://wandb.ai/<team-name> の Team のダッシュボードで Team のストレージを管理します。

Team の作成

組織のダッシュボードを使用して Team を作成します。

  1. https://wandb.ai/home に移動します。
  2. 左側のナビゲーションパネルの Team の下にある コラボレーションする Team を作成 を選択します。
  3. 表示されるモーダルの Team 名 フィールドに Team の名前を入力します。
  4. ストレージタイプを選択します。
  5. Team を作成 ボタンを選択します。

Team を作成 ボタンを選択すると、W&B は https://wandb.ai/<team-name> の新しい Team ページにリダイレクトします。<team-name> は、Team の作成時に入力した名前で構成されます。

Team を作成したら、その Team にユーザーを追加できます。

Team へのユーザーの招待

組織内の Team にユーザーを招待します。Team のダッシュボードを使用して、メールアドレスまたは W&B のユーザー名を使用してユーザーを招待します (すでに W&B アカウントを持っている場合)。

  1. https://wandb.ai/<team-name> に移動します。
  2. ダッシュボードの左側にあるグローバルナビゲーションで Team の設定 を選択します。
  3. ユーザー タブを選択します。
  4. 新しいユーザーを招待 を選択します。
  5. 表示されるモーダルで、メールアドレスまたはユーザー名 フィールドにユーザーのメールアドレスを入力し、Team ロールを選択 ドロップダウンからユーザーに割り当てるロールを選択します。ユーザーが Team で持つことができるロールの詳細については、Team ロール を参照してください。
  6. 招待を送信 ボタンを選択します。

デフォルトでは、Team またはインスタンス管理者のみが Team にメンバーを招待できます。この振る舞いを変更するには、Team の設定 を参照してください。

メールでの招待を使用して手動でユーザーを招待するだけでなく、新しいユーザーの メールが組織のドメインと一致する 場合、新しいユーザーを Team に自動的に追加できます。

サインアップ時にメンバーを Team 組織に一致させる

組織内の新しいユーザーがサインアップ時に組織内の Teams を見つけられるようにします。新しいユーザーは、組織の検証済みメールアドレスドメインと一致する検証済みのメールアドレスドメインを持っている必要があります。検証済みの新しいユーザーは、W&B アカウントにサインアップするときに、組織に属する検証済みの Team のリストを表示できます。

組織管理者は、ドメインの要求を有効にする必要があります。ドメインキャプチャを有効にするには、ドメインキャプチャ に記載されている手順を参照してください。

Team メンバーのロールの割り当てまたは更新

  1. Team メンバーの名前の横にあるアカウントタイプのアイコンを選択します。
  2. ドロップダウンから、Team メンバーに持たせるアカウントタイプを選択します。

次の表に、Team のメンバーに割り当てることができるロールを示します。

ロール 定義
admin Team 内で他のユーザーを追加および削除したり、ユーザーロールを変更したり、Team の設定を構成したりできるユーザー。
Member Team の通常のユーザー。Team 管理者によってメールまたは組織レベルのユーザー名で招待されます。メンバーユーザーは、他のユーザーを Team に招待することはできません。
View-Only (エンタープライズ限定機能) Team の表示専用ユーザー。Team 管理者によってメールまたは組織レベルのユーザー名で招待されます。表示専用ユーザーは、Team とそのコンテンツへの読み取りアクセスのみを持っています。
Service (エンタープライズ限定機能) サービスワーカーまたはサービスアカウントは、run 自動化ツールで W&B を利用するのに役立つ APIキーです。Team のサービスアカウントから APIキーを使用する場合は、環境変数 WANDB_USERNAME を設定して、run を適切なユーザーに正しく帰属させるようにしてください。
カスタムロール (エンタープライズ限定機能) カスタムロールを使用すると、組織管理者は、上記の表示専用またはメンバーロールから継承し、追加の権限を追加して、きめ細かいアクセス制御を実現することで、新しいロールを作成できます。Team 管理者は、これらのカスタムロールをそれぞれの Team のユーザーに割り当てることができます。詳細については、この記事 を参照してください。

Team からのユーザーの削除

Team のダッシュボードを使用して Team からユーザーを削除します。run を作成したメンバーがその Team にいなくなった場合でも、W&B は Team で作成された run を保持します。

  1. https://wandb.ai/<team-name> に移動します。
  2. 左側のナビゲーションバーで Team の設定 を選択します。
  3. ユーザー タブを選択します。
  4. 削除するユーザーの名前の横にマウスを移動します。表示されたら、省略記号または 3 つのドットのアイコン () を選択します。
  5. ドロップダウンから、ユーザーを削除 を選択します。

2.2.2 - Manage access control for projects

可視性スコープと プロジェクト レベルのロールを使用して、 プロジェクト の アクセス を管理します。

W&B のプロジェクトのスコープを定義して、誰が W&B の run を表示、編集、送信できるかを制限します。

いくつかのコントロールを組み合わせて、W&B の Teams 内のプロジェクトに対するアクセスレベルを設定できます。可視性スコープ は、より高レベルなメカニズムです。これを使用して、どのユーザーグループがプロジェクト内の run を表示または送信できるかを制御します。Team または Restricted の可視性スコープを持つプロジェクトの場合、プロジェクトレベルのロール を使用して、各 ユーザー がプロジェクト内で持つアクセスレベルを制御できます。

可視性スコープ

選択できるプロジェクトの可視性スコープは 4 つあります。最も公開されているものから最もプライベートなものの順に示します。

スコープ 説明
Open プロジェクトについて知っている人なら誰でも、それを表示し、 run または Report を送信できます。
Public プロジェクトについて知っている人なら誰でも、それを表示できます。あなたの Team のみが、 run または Report を送信できます。
Team 親 Team のメンバーのみが、プロジェクトを表示し、 run または Report を送信できます。 Team 外部の人は、プロジェクトにアクセスできません。
Restricted 親 Team から招待されたメンバーのみが、プロジェクトを表示し、 run または Report を送信できます。

新規または既存のプロジェクトに可視性スコープを設定する

プロジェクトの可視性スコープは、プロジェクトの作成時、または後で編集するときに設定します。

新しいプロジェクトを作成するときに可視性スコープを設定する

  1. SaaS Cloud、 専用クラウド 、またはセルフマネージドインスタンスで、W&B 組織に移動します。
  2. 左側のサイドバーの My projects セクションにある Create a new project ボタンをクリックします。または、 Team の Projects タブに移動し、右上隅にある Create new project ボタンをクリックします。
  3. 親 Team を選択し、プロジェクトの名前を入力したら、Project Visibility ドロップダウンから目的のスコープを選択します。

Restricted の可視性スコープを選択した場合は、次の手順を完了してください。

  1. Invite team members フィールドに、1 人または複数の W&B の チームメンバー の名前を入力します。プロジェクトで共同作業するために不可欠なメンバーのみを追加してください。

既存のプロジェクトの可視性スコープを編集する

  1. W&B の プロジェクト に移動します。
  2. 左側の列で Overview タブを選択します。
  3. 右上隅にある Edit Project Details ボタンをクリックします。
  4. Project Visibility ドロップダウンから、目的のスコープを選択します。

Restricted の可視性スコープを選択した場合は、次の手順を完了してください。

  1. プロジェクトの Users タブに移動し、Add user ボタンをクリックして、特定の ユーザー を制限付きプロジェクトに招待します。

制限付きスコープに関するその他の重要な注意事項

  • 制限付きプロジェクトで Team レベルの サービス アカウント を使用する場合は、その サービス アカウント をプロジェクトに明示的に招待または追加する必要があります。そうしないと、 Team レベルの サービス アカウント はデフォルトで制限付きプロジェクトにアクセスできません。
  • 制限付きプロジェクトから run を移動することはできませんが、制限されていないプロジェクトから制限付きプロジェクトに run を移動することはできます。
  • Team のプライバシー設定 将来のすべての Team プロジェクトを非公開にする (公開共有は許可されません) に関係なく、制限付きプロジェクトの可視性を Team スコープのみに変換できます。
  • 制限付きプロジェクトのオーナーが親 Team の一部でなくなった場合、 Team 管理者はプロジェクトのシームレスな運用を確保するためにオーナーを変更する必要があります。

プロジェクトレベルのロール

Team 内の Team または Restricted スコープのプロジェクトの場合、 ユーザー に特定のロールを割り当てることができます。これは、その ユーザー の Team レベルのロールとは異なる場合があります。たとえば、 ユーザー が Team レベルで Member ロールを持っている場合、その Team 内の Team または Restricted スコープのプロジェクト内で、その ユーザー に View-OnlyAdmin、または使用可能なカスタムロールを割り当てることができます。

ユーザー にプロジェクトレベルのロールを割り当てる

  1. W&B の プロジェクト に移動します。
  2. 左側の列で Overview タブを選択します。
  3. プロジェクトの Users タブに移動します。
  4. Project Role フィールドで、関係する ユーザー に現在割り当てられているロールをクリックします。これにより、他の使用可能なロールを一覧表示するドロップダウンが開きます。
  5. ドロップダウンから別のロールを選択します。すぐに保存されます。

プロジェクトレベルのロールに関するその他の重要な注意事項

  • デフォルトでは、Team または Restricted スコープのプロジェクト内のすべての ユーザー のプロジェクトレベルのロールは、それぞれの Team レベルのロールを 継承 します。
  • Team レベルで View-only ロールを持っている ユーザー のプロジェクトレベルのロールを 変更することはできません
  • 特定のプロジェクト内の ユーザー のプロジェクトレベルのロールが Team レベルのロール と同じである 場合、 Team 管理者が Team レベルのロールを変更すると、関連するプロジェクトロールは Team レベルのロールを追跡するように自動的に変更されます。
  • 特定のプロジェクト内の ユーザー のプロジェクトレベルのロールを、Team レベルのロール とは異なる ように変更した場合、 Team 管理者が Team レベルのロールを変更しても、関連するプロジェクトレベルのロールはそのままになります。
  • プロジェクトレベルのロールが Team レベルのロールと異なる場合に、 ユーザー を restricted プロジェクトから削除し、しばらくしてからその ユーザー をプロジェクトに再度追加すると、デフォルトの動作により Team レベルのロールを継承します。必要に応じて、プロジェクトレベルのロールを再度変更して、 Team レベルのロールと異なるようにする必要があります。

2.3 - Automate user and team management

SCIM API

SCIM API を使用して、ユーザーと、ユーザーが所属する Teams を効率的かつ反復可能な方法で管理します。SCIM API を使用して、カスタムロールを管理したり、W&B organization 内の Users にロールを割り当てることもできます。ロールエンドポイントは、公式の SCIM スキーマの一部ではありません。W&B は、カスタムロールの自動管理をサポートするために、ロールエンドポイントを追加します。

SCIM API は、特に次のような場合に役立ちます。

  • 大規模なユーザーのプロビジョニングとプロビジョニング解除を管理する
  • SCIM をサポートする Identity Provider で Users を管理する

SCIM API には、大きく分けて UserGroupRoles の 3 つのカテゴリがあります。

User SCIM API

User SCIM API を使用すると、User の作成、非アクティブ化、詳細の取得、または W&B organization 内のすべての Users の一覧表示が可能です。この API は、定義済みまたはカスタムロールを organization 内の Users に割り当てることもサポートしています。

Group SCIM API

Group SCIM API を使用すると、organization 内の Teams の作成や削除など、W&B Teams を管理できます。PATCH Group を使用して、既存の Team に Users を追加または削除します。

Custom role API

Custom role SCIM API を使用すると、organization 内のカスタムロールの作成、一覧表示、または更新など、カスタムロールを管理できます。

W&B Python SDK API

SCIM API で User と Team の管理を自動化できるのと同じように、W&B Python SDK API で利用できる メソッド の一部もその目的に使用できます。次の メソッド に注意してください。

Method name Purpose
create_user(email, admin=False) organization に User を追加し、オプションで organization 管理者にします。
user(userNameOrEmail) organization 内の既存の User を返します。
user.teams() User の Teams を返します。user(userNameOrEmail) メソッド を使用して User オブジェクトを取得できます。
create_team(teamName, adminUserName) 新しい Team を作成し、オプションで organization レベルの User を Team 管理者にします。
team(teamName) organization 内の既存の Team を返します。
Team.invite(userNameOrEmail, admin=False) Team に User を追加します。team(teamName) メソッド を使用して Team オブジェクトを取得できます。
Team.create_service_account(description) Team にサービスアカウントを追加します。team(teamName) メソッド を使用して Team オブジェクトを取得できます。
Member.delete() Team からメンバー User を削除します。team オブジェクトの members 属性を使用して、Team 内のメンバー オブジェクトのリストを取得できます。また、team(teamName) メソッド を使用して Team オブジェクトを取得できます。

2.4 - Manage users, groups, and roles with SCIM

System for Cross-domain Identity Management(SCIM)API を使用すると、インスタンスまたは organization の管理者は、W&B organization 内の user、グループ、およびカスタムロールを管理できます。SCIM グループは W&B の Teams にマッピングされます。

SCIM API は <host-url>/scim/ でアクセスでき、RC7643 プロトコルにあるフィールドのサブセットを使用して、/Users および /Groups エンドポイントをサポートします。さらに、公式の SCIM スキーマにはない /Roles エンドポイントが含まれています。W&B は、W&B organization でのカスタムロールの自動管理をサポートするために、/Roles エンドポイントを追加します。

認証

organization またはインスタンスの管理者は、 APIキー を使用して基本認証で SCIM API にアクセスできます。HTTP リクエストの Authorization ヘッダーを文字列 Basic に設定し、その後にスペース、次に username:API-KEY の形式で base-64 エンコードされた文字列を設定します。つまり、username と APIキー を : 文字で区切られた value に置き換え、その結果を base-64 エンコードします。たとえば、demo:p@55w0rd として認証するには、ヘッダーを Authorization: Basic ZGVtbzpwQDU1dzByZA== にする必要があります。

User リソース

SCIM の user リソースは W&B の Users にマッピングされます。

User を取得

  • エンドポイント: <host-url>/scim/Users/{id}
  • メソッド: GET
  • 説明: user の一意の ID を指定して、SaaS Cloud organization または Dedicated Cloud あるいは Self-managed インスタンス内の特定の user の情報を取得します。
  • リクエストの例:
GET /scim/Users/abc
  • レスポンスの例:
(Status 200)
{
    "active": true,
    "displayName": "Dev User 1",
    "emails": {
        "Value": "dev-user1@test.com",
        "Display": "",
        "Type": "",
        "Primary": true
    },
    "id": "abc",
    "meta": {
        "resourceType": "User",
        "created": "2023-10-01T00:00:00Z",
        "lastModified": "2023-10-01T00:00:00Z",
        "location": "Users/abc"
    },
    "schemas": [
        "urn:ietf:params:scim:schemas:core:2.0:User"
    ],
    "userName": "dev-user1"
}

Users をリスト表示

  • エンドポイント: <host-url>/scim/Users
  • メソッド: GET
  • 説明: SaaS Cloud organization または Dedicated Cloud あるいは Self-managed インスタンス内のすべての Users のリストを取得します。
  • リクエストの例:
GET /scim/Users
  • レスポンスの例:
(Status 200)
{
    "Resources": [
        {
            "active": true,
            "displayName": "Dev User 1",
            "emails": {
                "Value": "dev-user1@test.com",
                "Display": "",
                "Type": "",
                "Primary": true
            },
            "id": "abc",
            "meta": {
                "resourceType": "User",
                "created": "2023-10-01T00:00:00Z",
                "lastModified": "2023-10-01T00:00:00Z",
                "location": "Users/abc"
            },
            "schemas": [
                "urn:ietf:params:scim:schemas:core:2.0:User"
            ],
            "userName": "dev-user1"
        }
    ],
    "itemsPerPage": 9999,
    "schemas": [
        "urn:ietf:params:scim:api:messages:2.0:ListResponse"
    ],
    "startIndex": 1,
    "totalResults": 1
}

User を作成

  • エンドポイント: <host-url>/scim/Users
  • メソッド: POST
  • 説明: 新しい user リソースを作成します。
  • サポートされているフィールド:
フィールド タイプ 必須
emails 複数値の配列 はい(primary メールが設定されていることを確認してください)
userName 文字列 はい
  • リクエストの例:
POST /scim/Users
{
  "schemas": [
    "urn:ietf:params:scim:schemas:core:2.0:User"
  ],
  "emails": [
    {
      "primary": true,
      "value": "admin-user2@test.com"
    }
  ],
  "userName": "dev-user2"
}
  • レスポンスの例:
(Status 201)
{
    "active": true,
    "displayName": "Dev User 2",
    "emails": {
        "Value": "dev-user2@test.com",
        "Display": "",
        "Type": "",
        "Primary": true
    },
    "id": "def",
    "meta": {
        "resourceType": "User",
        "created": "2023-10-01T00:00:00Z",
        "location": "Users/def"
    },
    "schemas": [
        "urn:ietf:params:scim:schemas:core:2.0:User"
    ],
    "userName": "dev-user2"
}

User を削除

  • エンドポイント: <host-url>/scim/Users/{id}
  • メソッド: DELETE
  • 説明: user の一意の ID を指定して、SaaS Cloud organization または Dedicated Cloud あるいは Self-managed インスタンスから user を完全に削除します。必要に応じて、User を作成 API を使用して、user を organization またはインスタンスに再度追加します。
  • リクエストの例:
DELETE /scim/Users/abc
  • レスポンスの例:
(Status 204)

User を非アクティブ化

  • エンドポイント: <host-url>/scim/Users/{id}
  • メソッド: PATCH
  • 説明: user の一意の ID を指定して、Dedicated Cloud または Self-managed インスタンス内の user を一時的に非アクティブ化します。必要に応じて、User を再アクティブ化 API を使用して、user を再アクティブ化します。
  • サポートされているフィールド:
フィールド タイプ 必須
op 文字列 操作のタイプ。許可される value は replace のみです。
value オブジェクト User を非アクティブ化することを示すオブジェクト {"active": false}
  • リクエストの例:
PATCH /scim/Users/abc
{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [
        {
            "op": "replace",
            "value": {"active": false}
        }
    ]
}
  • レスポンスの例: これにより、User オブジェクトが返されます。
(Status 200)
{
    "active": true,
    "displayName": "Dev User 1",
    "emails": {
        "Value": "dev-user1@test.com",
        "Display": "",
        "Type": "",
        "Primary": true
    },
    "id": "abc",
    "meta": {
        "resourceType": "User",
        "created": "2023-10-01T00:00:00Z",
        "lastModified": "2023-10-01T00:00:00Z",
        "location": "Users/abc"
    },
    "schemas": [
        "urn:ietf:params:scim:schemas:core:2.0:User"
    ],
    "userName": "dev-user1"
}

User を再アクティブ化

  • エンドポイント: <host-url>/scim/Users/{id}
  • メソッド: PATCH
  • 説明: user の一意の ID を指定して、Dedicated Cloud または Self-managed インスタンス内の非アクティブ化された user を再アクティブ化します。
  • サポートされているフィールド:
フィールド タイプ 必須
op 文字列 操作のタイプ。許可される value は replace のみです。
value オブジェクト User を再アクティブ化することを示すオブジェクト {"active": true}
  • リクエストの例:
PATCH /scim/Users/abc
{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [
        {
            "op": "replace",
            "value": {"active": true}
        }
    ]
}
  • レスポンスの例: これにより、User オブジェクトが返されます。
(Status 200)
{
    "active": true,
    "displayName": "Dev User 1",
    "emails": {
        "Value": "dev-user1@test.com",
        "Display": "",
        "Type": "",
        "Primary": true
    },
    "id": "abc",
    "meta": {
        "resourceType": "User",
        "created": "2023-10-01T00:00:00Z",
        "lastModified": "2023-10-01T00:00:00Z",
        "location": "Users/abc"
    },
    "schemas": [
        "urn:ietf:params:scim:schemas:core:2.0:User"
    ],
    "userName": "dev-user1"
}

User に organization レベルのロールを割り当てる

  • エンドポイント: <host-url>/scim/Users/{id}
  • メソッド: PATCH
  • 説明: user に organization レベルのロールを割り当てます。ロールは、こちらで説明されているように、adminviewer、または member のいずれかになります。SaaS Cloud の場合は、user 設定で SCIM API 用に正しい organization を構成していることを確認してください。
  • サポートされているフィールド:
フィールド タイプ 必須
op 文字列 操作のタイプ。許可される value は replace のみです。
path 文字列 ロールの割り当て操作が有効になるスコープ。許可される value は organizationRole のみです。
value 文字列 user に割り当てる定義済みの organization レベルのロール。adminviewer、または member のいずれかになります。このフィールドでは、定義済みのロールの大文字と小文字は区別されません。
  • リクエストの例:
PATCH /scim/Users/abc
{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [
        {
            "op": "replace",
            "path": "organizationRole",
            "value": "admin" // user の organization スコープのロールを admin に設定します
        }
    ]
}
  • レスポンスの例: これにより、User オブジェクトが返されます。
(Status 200)
{
    "active": true,
    "displayName": "Dev User 1",
    "emails": {
        "Value": "dev-user1@test.com",
        "Display": "",
        "Type": "",
        "Primary": true
    },
    "id": "abc",
    "meta": {
        "resourceType": "User",
        "created": "2023-10-01T00:00:00Z",
        "lastModified": "2023-10-01T00:00:00Z",
        "location": "Users/abc"
    },
    "schemas": [
        "urn:ietf:params:scim:schemas:core:2.0:User"
    ],
    "userName": "dev-user1",
    "teamRoles": [  // user が所属するすべての Teams における user のロールを返します
        {
            "teamName": "team1",
            "roleName": "admin"
        }
    ],
    "organizationRole": "admin" // organization スコープにおける user のロールを返します
}

User に Team レベルのロールを割り当てる

  • エンドポイント: <host-url>/scim/Users/{id}
  • メソッド: PATCH
  • 説明: user に Team レベルのロールを割り当てます。ロールは、こちらで説明されているように、adminviewermember、またはカスタムロールのいずれかになります。SaaS Cloud の場合は、user 設定で SCIM API 用に正しい organization を構成していることを確認してください。
  • サポートされているフィールド:
フィールド タイプ 必須
op 文字列 操作のタイプ。許可される value は replace のみです。
path 文字列 ロールの割り当て操作が有効になるスコープ。許可される value は teamRoles のみです。
value オブジェクト配列 オブジェクトが teamName および roleName 属性で構成される 1 オブジェクト配列。teamName は user がロールを保持する Team の名前で、roleNameadminviewermember、またはカスタムロールのいずれかになります。このフィールドでは、定義済みのロールの大文字と小文字は区別されず、カスタムロールの大文字と小文字は区別されます。
  • リクエストの例:
PATCH /scim/Users/abc
{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [
        {
            "op": "replace",
            "path": "teamRoles",
            "value": [
                {
                    "roleName": "admin", // 定義済みのロールの場合、ロール名の大文字と小文字は区別されず、カスタムロールの場合は大文字と小文字が区別されます
                    "teamName": "team1" // Team team1 における user のロールを admin に設定します
                }
            ]
        }
    ]
}
  • レスポンスの例: これにより、User オブジェクトが返されます。
(Status 200)
{
    "active": true,
    "displayName": "Dev User 1",
    "emails": {
        "Value": "dev-user1@test.com",
        "Display": "",
        "Type": "",
        "Primary": true
    },
    "id": "abc",
    "meta": {
        "resourceType": "User",
        "created": "2023-10-01T00:00:00Z",
        "lastModified": "2023-10-01T00:00:00Z",
        "location": "Users/abc"
    },
    "schemas": [
        "urn:ietf:params:scim:schemas:core:2.0:User"
    ],
    "userName": "dev-user1",
    "teamRoles": [  // user が所属するすべての Teams における user のロールを返します
        {
            "teamName": "team1",
            "roleName": "admin"
        }
    ],
    "organizationRole": "admin" // organization スコープにおける user のロールを返します
}

Group リソース

SCIM のグループリソースは W&B の Teams にマッピングされます。つまり、W&B デプロイメントで SCIM グループを作成すると、W&B の Team が作成されます。他のグループエンドポイントにも同じことが当てはまります。

Team を取得

  • エンドポイント: <host-url>/scim/Groups/{id}
  • メソッド: GET
  • 説明: Team の一意の ID を指定して、Team 情報を取得します。
  • リクエストの例:
GET /scim/Groups/ghi
  • レスポンスの例:
(Status 200)
{
    "displayName": "wandb-devs",
    "id": "ghi",
    "members": [
        {
            "Value": "abc",
            "Ref": "",
            "Type": "",
            "Display": "dev-user1"
        }
    ],
    "meta": {
        "resourceType": "Group",
        "created": "2023-10-01T00:00:00Z",
        "lastModified": "2023-10-01T00:00:00Z",
        "location": "Groups/ghi"
    },
    "schemas": [
        "urn:ietf:params:scim:schemas:core:2.0:Group"
    ]
}

Teams をリスト表示

  • エンドポイント: <host-url>/scim/Groups
  • メソッド: GET
  • 説明: Teams のリストを取得します。
  • リクエストの例:
GET /scim/Groups
  • レスポンスの例:
(Status 200)
{
    "Resources": [
        {
            "displayName": "wandb-devs",
            "id": "ghi",
            "members": [
                {
                    "Value": "abc",
                    "Ref": "",
                    "Type": "",
                    "Display": "dev-user1"
                }
            ],
            "meta": {
                "resourceType": "Group",
                "created": "2023-10-01T00:00:00Z",
                "lastModified": "2023-10-01T00:00:00Z",
                "location": "Groups/ghi"
            },
            "schemas": [
                "urn:ietf:params:scim:schemas:core:2.0:Group"
            ]
        }
    ],
    "itemsPerPage": 9999,
    "schemas": [
        "urn:ietf:params:scim:api:messages:2.0:ListResponse"
    ],
    "startIndex": 1,
    "totalResults": 1
}

Team を作成

  • エンドポイント: <host-url>/scim/Groups
  • メソッド: POST
  • 説明: 新しい Team リソースを作成します。
  • サポートされているフィールド:
フィールド タイプ 必須
displayName 文字列 はい
members 複数値の配列 はい(value サブフィールドは必須で、user ID にマッピングされます)
  • リクエストの例:

dev-user2 をメンバーとして、wandb-support という Team を作成します。

POST /scim/Groups
{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
    "displayName": "wandb-support",
    "members": [
        {
            "value": "def"
        }
    ]
}
  • レスポンスの例:
(Status 201)
{
    "displayName": "wandb-support",
    "id": "jkl",
    "members": [
        {
            "Value": "def",
            "Ref": "",
            "Type": "",
            "Display": "dev-user2"
        }
    ],
    "meta": {
        "resourceType": "Group",
        "created": "2023-10-01T00:00:00Z",
        "lastModified": "2023-10-01T00:00:00Z",
        "location": "Groups/jkl"
    },
    "schemas": [
        "urn:ietf:params:scim:schemas:core:2.0:Group"
    ]
}

Team を更新

  • エンドポイント: <host-url>/scim/Groups/{id}
  • メソッド: PATCH
  • 説明: 既存の Team のメンバーシップリストを更新します。
  • サポートされている操作: メンバーの add、メンバーの remove
  • リクエストの例:

dev-user2wandb-devs に追加します

PATCH /scim/Groups/ghi
{
	"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
	"Operations": [
		{
			"op": "add",
			"path": "members",
			"value": [
	      {
					"value": "def",
				}
	    ]
		}
	]
}
  • レスポンスの例:
(Status 200)
{
    "displayName": "wandb-devs",
    "id": "ghi",
    "members": [
        {
            "Value": "abc",
            "Ref": "",
            "Type": "",
            "Display": "dev-user1"
        },
        {
            "Value": "def",
            "Ref": "",
            "Type": "",
            "Display": "dev-user2"
        }
    ],
    "meta": {
        "resourceType": "Group",
        "created": "2023-10-01T00:00:00Z",
        "lastModified": "2023-10-01T00:01:00Z",
        "location": "Groups/ghi"
    },
    "schemas": [
        "urn:ietf:params:scim:schemas:core:2.0:Group"
    ]
}

Team を削除

  • Team の削除は、Teams にリンクされている追加データがあるため、現在 SCIM API ではサポートされていません。すべてを削除することを確認するには、アプリから Teams を削除します。

Role リソース

SCIM のロールリソースは W&B のカスタムロールにマッピングされます。前述のように、/Roles エンドポイントは公式の SCIM スキーマの一部ではありません。W&B は、W&B organization でのカスタムロールの自動管理をサポートするために、/Roles エンドポイントを追加します。

カスタムロールを取得

  • エンドポイント: <host-url>/scim/Roles/{id}
  • メソッド: GET
  • 説明: ロールの一意の ID を指定して、カスタムロールの情報を取得します。
  • リクエストの例:
GET /scim/Roles/abc
  • レスポンスの例:
(Status 200)
{
    "description": "A sample custom role for example",
    "id": "Um9sZTo3",
    "inheritedFrom": "member", // indicates the predefined role
    "meta": {
        "resourceType": "Role",
        "created": "2023-11-20T23:10:14Z",
        "lastModified": "2023-11-20T23:31:23Z",
        "location": "Roles/Um9sZTo3"
    },
    "name": "Sample custom role",
    "organizationID": "T3JnYW5pemF0aW9uOjE0ODQ1OA==",
    "permissions": [
        {
            "name": "artifact:read",
            "isInherited": true // inherited from member predefined role
        },
        ...
        ...
        {
            "name": "project:update",
            "isInherited": false // custom permission added by admin
        }
    ],
    "schemas": [
        ""
    ]
}

カスタムロールをリスト表示

  • エンドポイント: <host-url>/scim/Roles
  • メソッド: GET
  • 説明: W&B organization 内のすべてのカスタムロールの情報を取得します
  • リクエストの例:
GET /scim/Roles
  • レスポンスの例:
(Status 200)
{
   "Resources": [
        {
            "description": "A sample custom role for example",
            "id": "Um9sZTo3",
            "inheritedFrom": "member", // indicates the predefined role that the custom role inherits from
            "meta": {
                "resourceType": "Role",
                "created": "2023-11-20T23:10:14Z",
                "lastModified": "2023-11-20T23:31:23Z",
                "location": "Roles/Um9sZTo3"
            },
            "name": "Sample custom role",
            "organizationID": "T3JnYW5pemF0aW9uOjE0ODQ1OA==",
            "permissions": [
                {
                    "name": "artifact:read",
                    "isInherited": true // inherited from member predefined role
                },
                ...
                ...
                {
                    "name": "project:update",
                    "isInherited": false // custom permission added by admin
                }
            ],
            "schemas": [
                ""
            ]
        },
        {
            "description": "Another sample custom role for example",
            "id": "Um9sZToxMg==",
            "inheritedFrom": "viewer", // indicates the predefined role that the custom role inherits from
            "meta": {
                "resourceType": "Role",
                "created": "2023-11-21T01:07:50Z",
                "location": "Roles/Um9sZToxMg=="
            },
            "name": "Sample custom role 2",
            "organizationID": "T3JnYW5pemF0aW9uOjE0ODQ1OA==",
            "permissions": [
                {
                    "name": "launchagent:read",
                    "isInherited": true // inherited from viewer predefined role
                },
                ...
                ...
                {
                    "name": "run:stop",
                    "isInherited": false // custom permission added by admin
                }
            ],
            "schemas": [
                ""
            ]
        }
    ],
    "itemsPerPage": 9999,
    "schemas": [
        "urn:ietf:params:scim:api:messages:2.0:ListResponse"
    ],
    "startIndex": 1,
    "totalResults": 2
}

カスタムロールを作成

  • エンドポイント: <host-url>/scim/Roles
  • メソッド: POST
  • 説明: W&B organization に新しいカスタムロールを作成します。
  • サポートされているフィールド:
フィールド タイプ 必須
name 文字列 カスタムロールの名前
description 文字列 カスタムロールの説明
permissions オブジェクト配列 各オブジェクトに w&bobject:operation の形式の value を持つ name 文字列フィールドが含まれる、権限オブジェクトの配列。たとえば、W&B の Runs に対する削除操作の権限オブジェクトには、name として run:delete が設定されます。
inheritedFrom 文字列 カスタムロールが継承する定義済みのロール。member または viewer のいずれかになります。
  • リクエストの例:
POST /scim/Roles
{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Role"],
    "name": "Sample custom role",
    "description": "A sample custom role for example",
    "permissions": [
        {
            "name": "project:update"
        }
    ],
    "inheritedFrom": "member"
}
  • レスポンスの例:
(Status 201)
{
    "description": "A sample custom role for example",
    "id": "Um9sZTo3",
    "inheritedFrom": "member", // indicates the predefined role
    "meta": {
        "resourceType": "Role",
        "created": "2023-11-20T23:10:14Z",
        "lastModified": "2023-11-20T23:31:23Z",
        "location": "Roles/Um9sZTo3"
    },
    "name": "Sample custom role",
    "organizationID": "T3JnYW5pemF0aW9uOjE0ODQ1OA==",
    "permissions": [
        {
            "name": "artifact:read",
            "isInherited": true // inherited from member predefined role
        },
        ...
        ...
        {
            "name": "project:update",
            "isInherited": false // custom permission added by admin
        }
    ],
    "schemas": [
        ""
    ]
}

カスタムロールを削除

  • エンドポイント: <host-url>/scim/Roles/{id}
  • メソッド: DELETE
  • 説明: W&B organization 内のカスタムロールを削除します。使用には注意してください。カスタムロールが継承した定義済みのロールが、操作前にカスタムロールを割り当てられていたすべての Users に割り当てられるようになりました。
  • リクエストの例:
DELETE /scim/Roles/abc
  • レスポンスの例:
(Status 204)

カスタムロールの権限を更新

  • エンドポイント: <host-url>/scim/Roles/{id}
  • メソッド: PATCH
  • 説明: W&B organization のカスタムロールで、カスタム権限を追加または削除します。
  • サポートされているフィールド:
フィールド タイプ 必須
operations オブジェクト配列 操作オブジェクトの配列
op 文字列 操作オブジェクト内の操作のタイプ。add または remove のいずれかになります。
path 文字列 操作オブジェクト内の静的フィールド。許可される value は permissions のみです。
value オブジェクト配列 各オブジェクトに w&bobject:operation の形式の value を持つ name 文字列フィールドが含まれる、権限オブジェクトの配列。たとえば、W&B の Runs に対する削除操作の権限オブジェクトには、name として run:delete が設定されます。
  • リクエストの例:
PATCH /scim/Roles/abc
{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [
        {
            "op": "add", // indicates the type of operation, other possible value being `remove`
            "path": "permissions",
            "value": [
                {
                    "name": "project:delete"
                }
            ]
        }
    ]
}
  • レスポンスの例:
(Status 200)
{
    "description": "A sample custom role for example",
    "id": "Um9sZTo3",
    "inheritedFrom": "member", // indicates the predefined role
    "meta": {
        "resourceType": "Role",
        "created": "2023-11-20T23:10:14Z",
        "lastModified": "2023-11-20T23:31:23Z",
        "location": "Roles/Um9sZTo3"
    },
    "name": "Sample custom role",
    "organizationID": "T3JnYW5pemF0aW9uOjE0ODQ1OA==",
    "permissions": [
        {
            "name": "artifact:read",
            "isInherited": true // inherited from member predefined role
        },
        ...
        ...
        {
            "name": "project:update",
            "isInherited": false // existing custom permission added by admin before the update
        },
        {
            "name": "project:delete",
            "isInherited": false // new custom permission added by admin as part of the update
        }
    ],
    "schemas": [
        ""
    ]
}

カスタムロールのメタデータを更新

  • エンドポイント: <host-url>/scim/Roles/{id}
  • メソッド: PUT
  • 説明: W&B organization のカスタムロールの名前、説明、または継承されたロールを更新します。この操作は、カスタムロールの既存の(つまり、継承されていない)カスタム権限には影響しません。
  • サポートされているフィールド:
フィールド タイプ 必須
name 文字列 カスタムロールの名前
description 文字列 カスタムロールの説明
inheritedFrom 文字列 カスタムロールが継承する定義済みのロール。member または viewer のいずれかになります。
  • リクエストの例:
PUT /scim/Roles/abc
{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Role"],
    "name": "Sample custom role",
    "description": "A sample custom role for example but now based on viewer",
    "inheritedFrom": "viewer"
}
  • レスポンスの例:
(Status 200)
{
    "description": "A sample custom role for example but now based on viewer", // changed the descripton per the request
    "id": "Um9sZTo3",
    "inheritedFrom": "viewer", // indicates the predefined role which is changed per the request
    "meta": {
        "resourceType": "Role",
        "created": "2023-11-20T23:10:14Z",
        "lastModified": "2023-11-20T23:31:23Z",
        "location": "Roles/Um9sZTo3"
    },
    "name": "Sample custom role",
    "organizationID": "T3JnYW5pemF0aW9uOjE0ODQ1OA==",
    "permissions": [
        {
            "name": "artifact:read",
            "isInherited": true // inherited from viewer predefined role
        },
        ... // Any permissions that are in member predefined role but not in viewer will not be inherited post the update
        {
            "name": "project:update",
            "isInherited": false // custom permission added by admin
        },
        {
            "name": "project:delete",
            "isInherited": false // custom permission added by admin
        }
    ],
    "schemas": [
        ""
    ]
}

2.5 - Advanced IAM configuration

基本的な環境変数に加えて、環境変数を使用して、専用クラウドまたはセルフマネージドインスタンスのIAMオプションを構成できます。

IAMのニーズに応じて、インスタンスに対して次のいずれかの環境変数を選択してください。

環境変数 説明
DISABLE_SSO_PROVISIONING これを true に設定すると、W&Bインスタンスでの ユーザー の自動プロビジョニングがオフになります。
SESSION_LENGTH デフォルトの ユーザー セッションの有効期限を変更する場合は、この変数を目的の時間数に設定します。たとえば、SESSION_LENGTHを 24 に設定すると、セッションの有効期限が24時間に構成されます。デフォルト値は720時間です。
GORILLA_ENABLE_SSO_GROUP_CLAIMS OIDCベースのSSOを使用している場合は、この変数を true に設定すると、OIDCグループに基づいてインスタンス内のW&B team メンバーシップが自動化されます。 ユーザー OIDCトークンに groups クレームを追加します。各エントリが ユーザー が所属するW&B teamの名前である文字列配列である必要があります。配列には、 ユーザー が所属するすべての team が含まれている必要があります。
GORILLA_LDAP_GROUP_SYNC LDAPベースのSSOを使用している場合は、true に設定すると、LDAPグループに基づいてインスタンス内のW&B team メンバーシップが自動化されます。
GORILLA_OIDC_CUSTOM_SCOPES OIDCベースのSSOを使用している場合は、W&BインスタンスがIDプロバイダーに要求する必要がある追加のスコープを指定できます。W&Bは、これらのカスタムスコープによってSSO機能を変更することはありません。
GORILLA_USE_IDENTIFIER_CLAIMS OIDCベースのSSOを使用している場合は、この変数を true に設定して、IDプロバイダーからの特定のOIDCクレームを使用して ユーザー の ユーザー 名とフルネームを強制します。設定する場合は、preferred_username および name OIDCクレームで、強制される ユーザー 名とフルネームを構成していることを確認してください。 ユーザー 名には、英数字と、特殊文字としてアンダースコアとハイフンのみを含めることができます。
GORILLA_DISABLE_PERSONAL_ENTITY これを true に設定すると、W&Bインスタンス内の個人の ユーザー project がオフになります。設定すると、 ユーザー は個人の entity に新しい個人 project を作成できなくなり、既存の個人 project への書き込みもオフになります。
GORILLA_DISABLE_ADMIN_TEAM_ACCESS これを true に設定すると、組織またはインスタンス管理者がW&B teamに自己参加または自己追加することを制限し、Data & AIペルソナのみが team 内の project にアクセスできるようにします。

3 - Data security

3.1 - Bring your own bucket (BYOB)

Bring your own bucket (BYOB) を使用すると、W&B の Artifacts やその他の関連する機密データを、お客様の クラウド または オンプレミス の インフラストラクチャー に保存できます。専用クラウド または SaaS Cloud の場合、お客様の バケット に保存する データ は、W&B が管理する インフラストラクチャー にコピーされません。

中央データベースに保存されるデータと バケット に保存されるデータ

BYOB 機能を使用する場合、特定の種類の データ は W&B 中央データベースに保存され、他の種類の データ はお客様の バケット に保存されます。

データベース

  • ユーザー 、 Teams、Artifacts、Experiments、および Projects の メタデータ
  • Reports
  • Experiment ログ
  • システム メトリクス

バケット

  • Experiment ファイルと メトリクス
  • Artifact ファイル
  • メディア ファイル
  • Run ファイル

設定オプション

ストレージ バケット を構成できる スコープ は、インスタンス レベル または Team レベル の 2 つです。

  • インスタンス レベル: 組織内で関連する 権限 を持つ ユーザー は、インスタンス レベルのストレージ バケット に保存されているファイルに アクセス できます。
  • Team レベル: W&B Team の メンバー は、Team レベルで構成された バケット に保存されているファイルに アクセス できます。Team レベルのストレージ バケット を使用すると、機密性の高い データ や厳格なコンプライアンス要件を持つ Teams に対して、より優れた データ アクセス制御と データ 分離が可能になります。

インスタンス レベルで バケット を構成することも、組織内の 1 つまたは複数の Teams に対して個別に構成することもできます。

たとえば、組織に Kappa という Team があるとします。組織 (および Team Kappa) は、デフォルトでインスタンス レベルのストレージ バケット を使用します。次に、Omega という Team を作成します。Team Omega を作成するときに、その Team の Team レベルのストレージ バケット を構成します。Team Omega によって生成されたファイルは、Team Kappa からは アクセス できません。ただし、Team Kappa によって作成されたファイルは、Team Omega から アクセス できます。Team Kappa の データを分離する場合は、Team レベルのストレージ バケット を構成する必要があります。

可用性マトリックス

次の表は、さまざまな W&B サーバー デプロイメント タイプ における BYOB の可用性を示しています。X は、その機能が特定の デプロイメント タイプ で利用できることを意味します。

W&B サーバー デプロイメント タイプ インスタンス レベル Team レベル 追加情報
専用クラウド X X インスタンス および Team レベルの BYOB は、Amazon Web Services、Google Cloud Platform、および Microsoft Azure で利用できます。Team レベルの BYOB の場合、同じ クラウド または別の クラウド 内の クラウド ネイティブ ストレージ バケット、または クラウド または オンプレミス の インフラストラクチャー でホストされている MinIO などの S3 互換のセキュア ストレージに接続できます。
SaaS Cloud 適用外 X Team レベルの BYOB は、Amazon Web Services と Google Cloud Platform でのみ利用できます。W&B は、Microsoft Azure のデフォルトのストレージ バケット と唯一のストレージ バケット を完全に管理します。
自己管理 X X インスタンス レベルの BYOB は、インスタンス がお客様によって完全に管理されているため、デフォルトです。自己管理 インスタンス が クラウド にある場合、Team レベルの BYOB 用に、同じ クラウド または別の クラウド 内の クラウド ネイティブ ストレージ バケット に接続できます。インスタンス または Team レベルの BYOB のいずれかに対して、MinIO などの S3 互換のセキュア ストレージを使用することもできます。

Team レベルの BYOB 向けのクロス クラウド または S3 互換ストレージ

専用クラウド または 自己管理 インスタンス の Team レベルの BYOB 用に、別の クラウド 内の クラウド ネイティブ ストレージ バケット 、または MinIO などの S3 互換ストレージ バケット に接続できます。

クロス クラウド または S3 互換ストレージの使用を有効にするには、W&B インスタンス の GORILLA_SUPPORTED_FILE_STORES 環境 変数を使用して、次のいずれかの形式で、関連する アクセス キー を含むストレージ バケット を指定します。

専用クラウド または 自己管理 インスタンス で Team レベルの BYOB 用に S3 互換ストレージを構成する

次の形式でパスを指定します。

s3://<accessKey>:<secretAccessKey>@<url_endpoint>/<bucketName>?region=<region>?tls=true

region パラメータ は必須です。ただし、W&B インスタンス が AWS にあり、W&B インスタンス ノード で構成された AWS_REGION が S3 互換ストレージ用に構成された リージョン と一致する場合は除きます。

専用クラウド または 自己管理 インスタンス で Team レベルの BYOB 用にクロス クラウド ネイティブ ストレージを構成する

W&B インスタンス とストレージ バケット の場所固有の形式でパスを指定します。

GCP または Azure の W&B インスタンス から AWS の バケット へ:

s3://<accessKey>:<secretAccessKey>@<s3_regional_url_endpoint>/<bucketName>

GCP または AWS の W&B インスタンス から Azure の バケット へ:

az://:<urlEncodedAccessKey>@<storageAccountName>/<containerName>

AWS または Azure の W&B インスタンス から GCP の バケット へ:

gs://<serviceAccountEmail>:<urlEncodedPrivateKey>@<bucketName>

詳細については、W&B サポート (support@wandb.com) までお問い合わせください。

W&B プラットフォーム と同じ クラウド 内の クラウド ストレージ

ユースケース に基づいて、Team または インスタンス レベルでストレージ バケット を構成します。ストレージ バケット のプロビジョニングまたは構成方法は、Azure の アクセス メカニズムを除き、構成されているレベルに関係なく同じです。

  1. KMS キー をプロビジョニングします。

    W&B では、S3 バケット 上の データを 暗号化および復号化するために、KMS キー をプロビジョニングする必要があります。キー の使用タイプは ENCRYPT_DECRYPT である必要があります。次の ポリシー を キー に割り当てます。

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid" : "Internal",
          "Effect" : "Allow",
          "Principal" : { "AWS" : "<Your_Account_Id>" },
          "Action" : "kms:*",
          "Resource" : "<aws_kms_key.key.arn>"
        },
        {
          "Sid" : "External",
          "Effect" : "Allow",
          "Principal" : { "AWS" : "<aws_principal_and_role_arn>" },
          "Action" : [
            "kms:Decrypt",
            "kms:Describe*",
            "kms:Encrypt",
            "kms:ReEncrypt*",
            "kms:GenerateDataKey*"
          ],
          "Resource" : "<aws_kms_key.key.arn>"
        }
      ]
    }
    

    <Your_Account_Id><aws_kms_key.key.arn> を適宜置き換えます。

    SaaS Cloud または 専用クラウド を使用している場合は、<aws_principal_and_role_arn> を対応する 値 に置き換えます。

    この ポリシー は、AWS アカウント に キー へのフル アクセス を許可し、W&B プラットフォーム をホストする AWS アカウント に必要な 権限 も割り当てます。KMS キー ARN の記録を保持します。

  2. S3 バケット をプロビジョニングします。

    次の手順に従って、AWS アカウント で S3 バケット をプロビジョニングします。

    1. 任意の名前で S3 バケット を作成します。オプションで、すべての W&B ファイルを保存するためのサブパスとして構成できるフォルダーを作成します。

    2. バケット の バージョン管理 を有効にします。

    3. 前のステップの KMS キー を使用して、サーバー 側の 暗号化 を有効にします。

    4. 次の ポリシー で CORS を構成します。

      [
          {
              "AllowedHeaders": [
                  "*"
              ],
              "AllowedMethods": [
                  "GET",
                  "HEAD",
                  "PUT"
              ],
              "AllowedOrigins": [
                  "*"
              ],
              "ExposeHeaders": [
                  "ETag"
              ],
              "MaxAgeSeconds": 3600
          }
      ]
      
    5. W&B プラットフォーム をホストする AWS アカウント に必要な S3 権限 を付与します。これには、お客様の クラウド インフラストラクチャー または ユーザー の ブラウザー 内の AI ワークロード が バケット への アクセス に使用する 事前署名付き URL を生成するための 権限 が必要です。

      {
        "Version": "2012-10-17",
        "Id": "WandBAccess",
        "Statement": [
          {
            "Sid": "WAndBAccountAccess",
            "Effect": "Allow",
            "Principal": { "AWS": "<aws_principal_and_role_arn>" },
              "Action" : [
                "s3:GetObject*",
                "s3:GetEncryptionConfiguration",
                "s3:ListBucket",
                "s3:ListBucketMultipartUploads",
                "s3:ListBucketVersions",
                "s3:AbortMultipartUpload",
                "s3:DeleteObject",
                "s3:PutObject",
                "s3:GetBucketCORS",
                "s3:GetBucketLocation",
                "s3:GetBucketVersioning"
              ],
            "Resource": [
              "arn:aws:s3:::<wandb_bucket>",
              "arn:aws:s3:::<wandb_bucket>/*"
            ]
          }
        ]
      }
      

      <wandb_bucket> を適宜置き換え、 バケット 名の記録を保持します。専用クラウド を使用している場合は、インスタンス レベルの BYOB の場合に備えて、 バケット 名を W&B Team と共有します。任意の デプロイメント タイプ の Team レベルの BYOB の場合は、Team の作成中に バケット を構成します

      SaaS Cloud または 専用クラウド を使用している場合は、<aws_principal_and_role_arn> を対応する 値 に置き換えます。

詳細については、AWS 自己管理 ホスティング ガイド を参照してください。

  1. GCS バケット をプロビジョニングします。

    次の手順に従って、GCP プロジェクト で GCS バケット をプロビジョニングします。

    1. 任意の名前で GCS バケット を作成します。オプションで、すべての W&B ファイルを保存するためのサブパスとして構成できるフォルダーを作成します。

    2. ソフト削除を有効にします。

    3. オブジェクト の バージョン管理 を有効にします。

    4. 暗号化 タイプ を Google-managed に設定します。

    5. gsutil で CORS ポリシー を設定します。これは UI では実行できません。

    6. cors-policy.json というファイルをローカルに作成します。

    7. 次の CORS ポリシー をファイルにコピーして保存します。

      [
      {
        "origin": ["*"],
        "responseHeader": ["Content-Type"],
        "exposeHeaders": ["ETag"],
        "method": ["GET", "HEAD", "PUT"],
        "maxAgeSeconds": 3600
      }
      ]
      
    8. <bucket_name> を正しい バケット 名に置き換え、gsutil を実行します。

      gsutil cors set cors-policy.json gs://<bucket_name>
      
    9. バケット の ポリシー を確認します。<bucket_name> を正しい バケット 名に置き換えます。

      gsutil cors get gs://<bucket_name>
      
  2. SaaS Cloud または 専用クラウド を使用している場合は、W&B プラットフォーム にリンクされている GCP サービス アカウント に Storage Admin ロール を付与します。

    • SaaS Cloud の場合、アカウント は wandb-integration@wandb-production.iam.gserviceaccount.com です。
    • 専用クラウド の場合、アカウント は deploy@wandb-production.iam.gserviceaccount.com です。

    バケット 名の記録を保持します。専用クラウド を使用している場合は、インスタンス レベルの BYOB の場合に備えて、 バケット 名を W&B Team と共有します。任意の デプロイメント タイプ の Team レベルの BYOB の場合は、Team の作成中に バケット を構成します

  1. Azure Blob Storage をプロビジョニングします。

    インスタンス レベルの BYOB の場合、この Terraform モジュール を使用していない場合は、次の手順に従って Azure サブスクリプション で Azure Blob Storage バケット をプロビジョニングします。

    • 任意の名前で バケット を作成します。オプションで、すべての W&B ファイルを保存するためのサブパスとして構成できるフォルダーを作成します。

    • BLOB とコンテナー のソフト削除を有効にします。

    • バージョン管理 を有効にします。

    • バケット で CORS ポリシー を構成します。

      UI から CORS ポリシー を設定するには、BLOB ストレージに移動し、[設定] -> [リソース共有 (CORS)] までスクロールして、次のように設定します。

      パラメータ
      許可される オリジン *
      許可される メソッド GETHEADPUT
      許可される ヘッダー *
      公開される ヘッダー *
      最大年齢 3600
  2. ストレージ アカウント の アクセス キー を生成し、ストレージ アカウント 名とともに記録を保持します。専用クラウド を使用している場合は、安全な共有メカニズムを使用して、ストレージ アカウント 名と アクセス キー を W&B Team と共有します。

    Team レベルの BYOB の場合、W&B では、必要な アクセス メカニズムと 権限 とともに Azure Blob Storage バケット をプロビジョニングするために、Terraform を使用することを推奨します。専用クラウド を使用する場合は、インスタンス の OIDC 発行者 URL を指定します。Team の作成中に バケット を構成する ために必要な詳細をメモしておきます。

    • ストレージ アカウント 名
    • ストレージ コンテナー 名
    • マネージド ID クライアント ID
    • Azure テナント ID

W&B で BYOB を構成する

W&B Team を作成するときに Team レベルでストレージ バケット を構成するには:

  1. [Team 名] フィールドに Team の名前を入力します。

  2. [ストレージ タイプ] オプションで [外部ストレージ] を選択します。

  3. ドロップダウンから [新しい バケット ] を選択するか、既存の バケット を選択します。

    複数の W&B Teams が同じ クラウド ストレージ バケット を使用できます。これを有効にするには、ドロップダウンから既存の クラウド ストレージ バケット を選択します。

  4. [クラウド プロバイダー] ドロップダウンから、 クラウド プロバイダーを選択します。

  5. [名前] フィールドにストレージ バケット の名前を入力します。専用クラウド または Azure 上の 自己管理 インスタンス がある場合は、[アカウント 名] フィールドと [コンテナー 名] フィールドに値を入力します。

  6. (オプション) オプションの [パス] フィールドに バケット サブパスを入力します。W&B が バケット のルートにあるフォルダーにファイルを保存しないようにする場合は、これを行います。

  7. (AWS バケット を使用している場合はオプション) [KMS キー ARN] フィールドに KMS 暗号化 キー の ARN を入力します。

  8. (Azure バケット を使用している場合はオプション) [テナント ID] フィールドと [マネージド ID クライアント ID] フィールドに値を入力します。

  9. (SaaS Cloud ではオプション) Team の作成時に Team メンバー を招待します。

  10. [Team を作成] ボタンを押します。

バケット への アクセス に問題がある場合、または バケット の 設定 が無効な場合、ページの下部に エラー または 警告 が表示されます。

専用クラウド または 自己管理 インスタンス の インスタンス レベルの BYOB を構成するには、W&B サポート (support@wandb.com) までお問い合わせください。

3.2 - Access BYOB using pre-signed URLs

W&B は、AI ワークロードまたは ユーザー のブラウザーからの blob ストレージへの アクセス を簡素化するために、事前署名付き URL を使用します。事前署名付き URL の基本情報については、AWS S3 の事前署名付き URLGoogle Cloud Storage の署名付き URLAzure Blob Storage の Shared Access Signature を参照してください。

必要な場合、ネットワーク内の AI ワークロードまたは ユーザー ブラウザー クライアントは、W&B Platform から事前署名付き URL を要求します。W&B Platform は、関連する blob ストレージに アクセス し、必要な権限を持つ事前署名付き URL を生成し、クライアントに返します。次に、クライアントは事前署名付き URL を使用して blob ストレージに アクセス し、 オブジェクト のアップロードまたは取得操作を行います。 オブジェクト のダウンロードの URL 有効期限は 1 時間、 オブジェクト のアップロードは 24 時間です。これは、一部の大きな オブジェクト をチャンク単位でアップロードするのに時間がかかる場合があるためです。

Team レベルの アクセス 制御

各事前署名付き URL は、W&B platform の team level access control に基づいて、特定の バケット に制限されています。 ユーザー が secure storage connector を使用して blob ストレージ バケット にマッピングされている team の一部であり、その ユーザー がその team の一部である場合、リクエスト に対して生成された事前署名付き URL には、他の team にマッピングされた blob ストレージ バケット に アクセス する権限はありません。

ネットワーク制限

W&B は、 バケット で IAM ポリシー ベースの制限を使用することにより、事前署名付き URL を使用して blob ストレージに アクセス できるネットワークを制限することをお勧めします。

AWS の場合、VPC または IP アドレス ベースのネットワーク制限 を使用できます。これにより、W&B 固有の バケット には、AI ワークロードが実行されているネットワークからのみ、または ユーザー が W&B UI を使用して アーティファクト に アクセス する場合、 ユーザー マシンにマッピングされるゲートウェイ IP アドレスからのみ アクセス されるようになります。

監査 ログ

W&B は、blob ストレージ 固有の 監査 ログ に加えて、W&B audit logs を使用することもお勧めします。後者については、AWS S3 access logsGoogle Cloud Storage audit logs および Monitor Azure blob storage を参照してください。管理者およびセキュリティ team は、 監査 ログ を使用して、W&B 製品でどの ユーザー が何をしているかを追跡し、特定の ユーザー に対して一部の操作を制限する必要があると判断した場合に必要なアクションを実行できます。

3.3 - Configure IP allowlisting for Dedicated Cloud

専用クラウド インスタンスへの アクセス を、許可された IP アドレス のリストのみに制限できます。これは、AI ワークロードから W&B API への アクセス と、 ユーザー のブラウザーから W&B アプリ UI への アクセス の両方に適用されます。 専用クラウド インスタンスに対して IP アドレス許可リストが設定されると、W&B は許可されていない場所からのリクエストをすべて拒否します。 専用クラウド インスタンスの IP アドレス許可リストを構成するには、W&B チームにお問い合わせください。

IP アドレス許可リストは、AWS、GCP、Azure の 専用クラウド インスタンスで利用できます。

IP アドレス許可リストは、セキュアプライベート接続 で使用できます。セキュアプライベート接続で IP アドレス許可リストを使用する場合、W&B は、AI ワークロードからのすべてのトラフィックと、可能な場合は ユーザー ブラウザーからのトラフィックの大部分にセキュアプライベート接続を使用し、特権のある場所からのインスタンス管理には IP アドレス許可リストを使用することをお勧めします。

3.4 - Configure private connectivity to Dedicated Cloud

専用クラウドインスタンスには、クラウドプロバイダーのセキュアなプライベートネットワーク経由で接続できます。これは、AI ワークロードから W&B API へのアクセス、およびオプションで ユーザー のブラウザーから W&B アプリ UI へのアクセスに適用されます。プライベート接続を使用する場合、関連するリクエストとレスポンスは、パブリックネットワークまたはインターネットを経由しません。

セキュアなプライベート接続は、AWS、GCP、Azure の Dedicated Cloud インスタンスで利用できます。

有効にすると、W&B はインスタンス用のプライベートエンドポイントサービスを作成し、接続するための関連する DNS URI を提供します。これにより、クラウドアカウントにプライベートエンドポイントを作成し、関連するトラフィックをプライベートエンドポイントサービスにルーティングできます。プライベートエンドポイントは、クラウド VPC または VNet 内で実行されている AI トレーニング ワークロードのセットアップが容易です。ユーザー のブラウザーから W&B アプリ UI へのトラフィックに同じメカニズムを使用するには、企業ネットワークからクラウドアカウントのプライベートエンドポイントへの適切な DNS ベースのルーティングを構成する必要があります。

セキュアなプライベート接続は、IP 許可リストで使用できます。IP 許可リストにセキュアなプライベート接続を使用する場合、W&B は、AI ワークロードからのすべてのトラフィック、および可能な場合は ユーザー のブラウザーからのトラフィックの大部分に対してセキュアなプライベート接続を保護し、特権のある場所からのインスタンス管理には IP 許可リストを使用することをお勧めします。

3.5 - Data encryption in Dedicated cloud

W&B は、各 専用クラウド で、W&B が管理するクラウドネイティブな キー を使用して、W&B が管理するデータベースと オブジェクト ストレージを暗号化します。これは、各 クラウド における顧客管理の暗号化キー (CMEK) 機能を使用することで実現しています。この場合、W&B は クラウド プロバイダーの「顧客」として機能し、W&B プラットフォーム をサービスとして提供します。W&B 管理の キー を使用するということは、W&B が各 クラウド で データを暗号化するために使用する キー を管理できることを意味し、すべてのお客様に高度に安全な プラットフォーム を提供するという約束を強化することになります。

W&B は、各顧客インスタンス内の データを暗号化するために「一意の キー 」を使用し、専用クラウド テナント間の分離をさらに強化します。この機能は、AWS、Azure、GCP で利用できます。

W&B は通常、お客様が独自のクラウドネイティブな キー を持ち込んで、専用クラウド インスタンス内の W&B が管理するデータベースと オブジェクト ストレージを暗号化することを許可していません。これは、組織内の複数の Teams と担当者が、さまざまな理由で クラウド インフラストラクチャー にアクセスできる可能性があるためです。これらの Teams または担当者の中には、組織のテクノロジー スタックにおける重要なコンポーネントとしての W&B に関する知識がない場合があり、クラウドネイティブな キー を完全に削除したり、W&B の アクセス を取り消したりする可能性があります。このような行為は、組織の W&B インスタンス内のすべての データを破損させ、回復不能な状態にする可能性があります。

組織が独自のクラウドネイティブな キー を使用して、W&B が管理するデータベースと オブジェクト ストレージを暗号化し、AI ワークフロー での 専用クラウド の使用を承認する必要がある場合、W&B は例外ベースでそれをレビューできます。承認された場合、暗号化にクラウドネイティブな キー を使用することは、W&B 専用クラウド の「責任共有モデル」に準拠します。組織内の ユーザー が、専用クラウド インスタンスが稼働しているときに、キー を削除したり、W&B の アクセス を取り消したりした場合、W&B は結果として生じる データ の損失または破損について責任を負わず、そのような データの回復についても責任を負いません。

4 - Configure privacy settings

組織と Team の管理者は、それぞれ組織と Team のスコープで一連のプライバシー設定を構成できます。組織スコープで構成した場合、組織管理者はその設定を組織内のすべての Team に対して適用します。

Team のプライバシー設定を構成する

Team 管理者は、Team の Settings タブの Privacy セクション内で、それぞれの Team のプライバシー設定を構成できます。各設定は、組織スコープで適用されていない限り構成可能です。

  • この Team をすべての非メンバーから隠す
  • 今後のすべての Team の Projects をプライベートにする (パブリック共有は許可されません)
  • すべての Team メンバーが他のメンバーを招待できるようにする (管理者だけでなく)
  • プライベート Project の Reports について、Team の外部へのパブリック共有をオフにします。これにより、既存の Magic Link がオフになります。
  • 組織の Email ドメインが一致する User がこの Team に参加できるようにする。
  • デフォルトで Code の保存を有効にする。

すべての Team にプライバシー設定を適用する

組織管理者は、アカウントまたは組織の ダッシュボード の Settings タブの Privacy セクション内で、組織内のすべての Team にプライバシー設定を適用できます。組織管理者が設定を適用すると、Team 管理者はそれぞれの Team 内でそれを構成できなくなります。

  • Team の可視性制限を適用する
    • このオプションを有効にすると、すべての Team が非メンバーから隠されます
  • 今後の Projects にプライバシーを適用する
    • このオプションを有効にすると、すべての Team の今後のすべての Projects がプライベートまたは 制限付き になるように適用されます
  • 招待コントロールを適用する
    • このオプションを有効にすると、管理者以外のメンバーが Team にメンバーを招待できなくなります
  • Report の共有コントロールを適用する
    • このオプションを有効にすると、プライベート Project 内の Reports のパブリック共有が無効になり、既存の Magic Link が無効になります
  • Team のセルフ参加制限を適用する
    • このオプションを有効にすると、組織の Email ドメインが一致する User が Team にセルフ参加できなくなります
    • この設定は SaaS Cloud にのみ適用されます。Dedicated Cloud または Self-managed インスタンスでは利用できません。
  • デフォルトの Code 保存制限を適用する
    • このオプションを有効にすると、すべての Team でデフォルトで Code の保存が無効になります

5 - Monitoring and usage

5.1 - Track user activity with audit logs

W&B の監査ログを使用すると、組織内のユーザーアクティビティを追跡し、企業のガバナンス要件に準拠できます。監査ログは JSON 形式で利用できます。監査ログスキーマを参照してください。

監査ログへのアクセス方法は、W&B プラットフォームのデプロイメントタイプによって異なります。

W&B Platform Deployment type 監査ログアクセス方法
Self-managed インスタンスレベルのバケットに10分ごとに同期されます。また、APIを使用しても利用できます。
Dedicated Cloud with secure storage connector (BYOB) インスタンスレベルのバケット (BYOB) に10分ごとに同期されます。また、APIを使用しても利用できます。
Dedicated Cloud with W&B managed storage (without BYOB) APIを使用するとのみ利用できます。
SaaS Cloud Enterprise プランでのみ利用できます。APIを使用するとのみ利用できます。

監査ログを取得した後、PandasAmazon RedshiftGoogle BigQuery、または Microsoft Fabric などのツールを使用して分析できます。一部の監査ログ分析ツールは JSON をサポートしていません。分析ツールに関するドキュメントを参照して、分析の前に JSON 形式の監査ログを変換するためのガイドラインと要件を確認してください。

監査ログスキーマ

この表は、監査ログエントリに表示される可能性のあるすべてのキーをアルファベット順に示しています。アクションと状況に応じて、特定ログエントリには、可能なフィールドのサブセットのみが含まれる場合があります。

キー 定義
action イベントの アクション
actor_email アクションを開始したユーザーのメールアドレス (該当する場合)。
actor_ip アクションを開始したユーザーの IP アドレス。
actor_user_id アクションを実行したログインユーザーの ID (該当する場合)。
artifact_asset アクションに関連付けられた Artifact ID (該当する場合)。
artifact_digest アクションに関連付けられた Artifact ダイジェスト (該当する場合)。
artifact_qualified_name アクションに関連付けられた Artifact の完全名 (該当する場合)。
artifact_sequence_asset アクションに関連付けられた Artifact シーケンス ID (該当する場合)。
cli_version アクションを開始した Python SDK のバージョン (該当する場合)。
entity_asset アクションに関連付けられた Entity または Team ID (該当する場合)。
entity_name Entity または Team 名 (該当する場合)。
project_asset アクションに関連付けられた Project (該当する場合)。
project_name アクションに関連付けられた Project の名前 (該当する場合)。
report_asset アクションに関連付けられた Report ID (該当する場合)。
report_name アクションに関連付けられた Report の名前 (該当する場合)。
response_code アクションの HTTP レスポンスコード (該当する場合)。
timestamp RFC3339 形式でのイベントの時刻。たとえば、2023-01-23T12:34:56Z は、2023 年 1 月 23 日の 12:34:56 UTC を表します。
user_asset アクションが影響を与える User アセット (アクションを実行するユーザーではなく) (該当する場合)。
user_email アクションが影響を与える User のメールアドレス (アクションを実行するユーザーのメールアドレスではなく) (該当する場合)。

個人情報 (PII)

メールアドレスや Projects、Teams、Reports の名前などの個人情報 (PII) は、API エンドポイントオプションでのみ利用できます。

  • Self-managed および Dedicated Cloud の場合、組織管理者は、監査ログの取得時に PII を除外 できます。
  • SaaS Cloud の場合、API エンドポイントは常に、PII を含む監査ログの関連フィールドを返します。これは構成できません。

監査ログの取得

組織またはインスタンス管理者は、エンドポイント audit_logs/ で Audit Logging API を使用して、W&B インスタンスの監査ログを取得できます。

  1. インスタンスの正しい API エンドポイントを決定します。

    以下の手順では、<API-endpoint> を API エンドポイントに置き換えます。

  2. ベースエンドポイントから完全な API エンドポイントを作成し、オプションで URL パラメータを含めます。

    • anonymize: true に設定すると、PII が削除されます。デフォルトは false です。監査ログの取得時に PII を除外 を参照してください。SaaS Cloud ではサポートされていません。

    • numDays: ログは today - numdays から最新のものまで取得されます。デフォルトは 0 で、today のログのみが返されます。SaaS Cloud の場合、過去最大 7 日間の監査ログを取得できます。

    • startDate: オプションの日付で、形式は YYYY-MM-DD です。SaaS Cloud でのみサポートされています。

      startDatenumDays は相互に作用します。

      • startDatenumDays の両方を設定した場合、ログは startDate から startDate + numDays まで返されます。
      • startDate を省略して numDays を含めた場合、ログは today から numDays まで返されます。
      • startDatenumDays も設定しない場合、ログは today に対してのみ返されます。
  3. Web ブラウザーまたは PostmanHTTPie、cURL などのツールを使用して、構築された完全修飾 API エンドポイントに対して HTTP GET リクエストを実行します。

API レスポンスには、改行で区切られた JSON オブジェクトが含まれています。オブジェクトには、監査ログがインスタンスレベルのバケットに同期される場合と同様に、スキーマ で説明されているフィールドが含まれます。これらの場合、監査ログはバケットの /wandb-audit-logs ディレクトリーにあります。

基本認証の使用

API キーで基本認証を使用して監査ログ API にアクセスするには、HTTP リクエストの Authorization ヘッダーを文字列 Basic の後にスペース、次に username:API-KEY 形式の base-64 エンコードされた文字列に設定します。つまり、ユーザー名と API キーを : 文字で区切られた値に置き換え、その結果を base-64 エンコードします。たとえば、demo:p@55w0rd として認証する場合、ヘッダーは Authorization: Basic ZGVtbzpwQDU1dzByZA== にする必要があります。

監査ログの取得時に PII を除外

Self-managed および Dedicated Cloud の場合、W&B 組織またはインスタンス管理者は、監査ログの取得時に PII を除外できます。SaaS Cloud の場合、API エンドポイントは常に、PII を含む監査ログの関連フィールドを返します。これは構成できません。

PII を除外するには、anonymize=true URL パラメータを渡します。たとえば、W&B インスタンスの URL が https://mycompany.wandb.io で、過去 1 週間のユーザーアクティビティの監査ログを取得し、PII を除外する場合は、次のような API エンドポイントを使用します。

https://mycompany.wandb.io/admin/audit_logs?numDays=7&anonymize=true.

アクション

次の表は、W&B によって記録できるアクションをアルファベット順に説明しています。

アクション 定義
artifact:create Artifact が作成されました。
artifact:delete Artifact が削除されました。
artifact:read Artifact が読み取られました。
project:delete Project が削除されました。
project:read Project が読み取られました。
report:read Report が読み取られました。1
run:delete_many Run のバッチが削除されました。
run:delete Run が削除されました。
run:stop Run が停止されました。
run:undelete_many Run のバッチがゴミ箱から復元されました。
run:update_many Run のバッチが更新されました。
run:update Run が更新されました。
sweep:create_agent sweep agent が作成されました。
team:create_service_account サービスアカウントが Team に対して作成されました。
team:create Team が作成されました。
team:delete Team が削除されました。
team:invite_user User が Team に招待されました。
team:uninvite User またはサービスアカウントが Team から招待解除されました。
user:create_api_key User の APIキー が作成されました。1
user:create User が作成されました。1
user:deactivate User が非アクティブ化されました。1
user:delete_api_key User の APIキー が削除されました。1
user:initiate_login User がログインを開始しました。1
user:login User がログインしました。1
user:logout User がログアウトしました。1
user:permanently_delete User が完全に削除されました。1
user:reactivate User が再アクティブ化されました。1
user:read User プロファイルが読み取られました。1
user:update User が更新されました。1

1: SaaS Cloud では、次の監査ログは収集されません。

  • オープンまたはパブリック Projects。
  • report:read アクション。
  • 特定の組織に関連付けられていない User アクション。

5.2 - Use Prometheus monitoring

W&B サーバー で Prometheus を使用します。Prometheus のインストールは、kubernetes ClusterIP サービス として公開されます。

Prometheus の メトリクス エンドポイント (/metrics) にアクセスするには、以下の手順に従ってください。

  1. Kubernetes CLI ツールキット kubectl で クラスター に接続します。詳細については、Kubernetes の クラスターへのアクセス のドキュメントを参照してください。

  2. 次の コマンド で、 クラスター の内部 アドレス を見つけます。

    kubectl describe svc prometheus
    
  3. Kubernetes クラスター で実行されているコンテナ内で、kubectl exec を使用してシェル セッションを開始します。<internal address>/metrics でエンドポイントにアクセスします。

    以下の コマンド をコピーして ターミナル で実行し、<internal address> を内部 アドレス に置き換えます。

    kubectl exec <internal address>/metrics
    

テスト pod が起動します。これは、ネットワーク内のものにアクセスするためだけに exec できます。

kubectl run -it testpod --image=alpine bin/ash --restart=Never --rm

そこから、ネットワークへの内部 アクセス を維持するか、kubernetes nodeport サービスを使用して自分で公開するかを選択できます。

5.3 - Configure Slack alerts

W&B Server を Slack と連携させます。

Slack アプリケーションの作成

以下の手順に従って Slack アプリケーションを作成します。

  1. https://api.slack.com/apps にアクセスし、Create an App を選択します。

  2. App Name フィールドにアプリの名前を入力します。

  3. アプリの開発に使用する Slack ワークスペースを選択します。使用する Slack ワークスペースが、アラートに使用するワークスペースと同じであることを確認してください。

Slack アプリケーションの設定

  1. 左側のサイドバーで、OAth & Permissions を選択します。

  2. Scopes セクションで、ボットに incoming_webhook スコープを付与します。スコープは、開発ワークスペースでアクションを実行するための権限をアプリに付与します。

    ボットの OAuth スコープの詳細については、Slack API ドキュメントのボットの OAuth スコープの理解に関するチュートリアルを参照してください。

  3. リダイレクト URL が W&B インストールを指すように設定します。ホスト URL がローカル システム 設定で設定されている URL と同じ URL を使用します。インスタンスへの DNS マッピングが異なる場合は、複数の URL を指定できます。

  4. Save URLs を選択します。

  5. オプションで、Restrict API Token Usage で IP 範囲を指定し、W&B インスタンスの IP または IP 範囲を許可リストに登録できます。許可される IP アドレスを制限すると、Slack アプリケーションのセキュリティをさらに強化できます。

W&B への Slack アプリケーションの登録

  1. デプロイメントに応じて、W&B インスタンスの System Settings または System Console ページに移動します。

  2. 表示されている System ページに応じて、以下のいずれかのオプションに従ってください。

    • System Console を使用している場合: Settings に移動し、次に Notifications に移動します。

    • System Settings を使用している場合: Enable a custom Slack application to dispatch alerts を切り替えて、カスタム Slack アプリケーションを有効にします。

  3. Slack client IDSlack secret を入力し、Save をクリックします。Settings の Basic Information に移動して、アプリケーションの client ID と secret を確認します。

  4. W&B アプリで Slack インテグレーションを設定して、すべてが機能していることを確認します。

5.4 - View organization dashboard

W&B の組織利用状況の表示

Organization dashboard を使用して、組織の W&B の利用状況を全体的に把握できます。ダッシュボードはタブで構成されています。

  • Users: 各 ユーザー の詳細(名前、メールアドレス、Teams、役割、最終アクティビティなど)をリスト表示します。
  • Service accounts: サービスアカウントの詳細をリスト表示し、サービスアカウントを作成できます。
  • Activity: 各 ユーザー のアクティビティの詳細をリスト表示します。
  • Teams: 各 Team の詳細(ユーザー数、追跡時間など)をリスト表示し、管理者が Team に参加できるようにします。
  • Billing: 組織の料金を要約し、請求 Reports の実行とエクスポートを可能にし、ライセンスの詳細(有効期限など)を表示します。
  • Settings: プライバシーと認証に関連するカスタムロールと設定を構成できます。

ユーザー のステータスの表示

Users タブには、すべての ユーザー と、各 ユーザー に関する データ がリスト表示されます。「最終アクティブ」列には、 ユーザー が招待を承諾したかどうかと、 ユーザー の現在のステータスが表示されます。

  • Invite pending: 管理者が招待を送信しましたが、 ユーザー が招待を承諾していません。
  • Active: ユーザー が招待を承諾し、アカウントを作成しました。
  • -: ユーザー は以前はアクティブでしたが、過去 6 か月間アクティブではありません。
  • Deactivated: 管理者が ユーザー のアクセスを取り消しました。

アクティビティで ユーザー のリストを並べ替えるには、[最終アクティブ] 列の見出しをクリックします。

組織が W&B をどのように使用しているかの表示と共有

Users タブから、組織が W&B をどのように使用しているかの詳細を CSV 形式で表示します。

  1. [新しい ユーザー を招待] ボタンの横にあるアクション ... メニューをクリックします。
  2. [CSV としてエクスポート] をクリックします。ダウンロードされる CSV ファイルには、組織の各 ユーザー の詳細( ユーザー 名、メール アドレス、最終アクティブ時間、役割など)がリスト表示されます。

ユーザー アクティビティの表示

Users タブの 最終アクティブ 列を使用して、個々の ユーザー の アクティビティの概要 を取得します。

  1. 最終アクティブ で ユーザー のリストを並べ替えるには、列名をクリックします。
  2. ユーザー の最終アクティビティの詳細を表示するには、 ユーザー の 最終アクティブ フィールドにマウスを合わせます。ユーザー が追加された時期と、 ユーザー がアクティブであった合計日数を示すツールチップが表示されます。

ユーザー は、次のいずれかに該当する場合に アクティブ になります。

  • W&B にログインする。
  • W&B App で任意のページを表示する。
  • Runs を ログ する。
  • SDK を使用して experiment を追跡する。
  • 何らかの方法で W&B Server とやり取りする。

経時的なアクティブ ユーザー の表示

Activity タブのプロットを使用して、経時的にアクティブな ユーザー 数を集計して表示します。

  1. Activity タブをクリックします。
  2. アクティブ ユーザー の合計 プロットは、一定期間にアクティブであった ユーザー 数を示します(デフォルトは 3 か月)。
  3. 経時的なアクティブ ユーザー プロットは、一定期間のアクティブ ユーザー の変動を示します(デフォルトは 6 か月)。ポイントにマウスを合わせると、その日付の ユーザー 数が表示されます。

プロットの期間を変更するには、ドロップダウンを使用します。選択できるオプションは次のとおりです。

  • 過去 30 日間
  • 過去 3 か月
  • 過去 6 か月
  • 過去 12 か月
  • 全期間

6 - Configure SMTP

W&B サーバー では、インスタンスまたは Team に ユーザー を追加すると、メールによる招待が送信されます。これらのメールによる招待を送信するために、W&B はサードパーティのメールサーバーを使用します。組織によっては、企業ネットワークから送信されるトラフィックに関する厳格なポリシーがあり、その結果、これらのメールによる招待がエンド ユーザー に送信されない場合があります。W&B サーバー には、社内の SMTP サーバー 経由でこれらの招待メールを送信するように構成するオプションがあります。

構成するには、以下の手順に従ってください。

  • dockerコンテナ または kubernetes の デプロイメント で GORILLA_EMAIL_SINK 環境 変数 を smtp://<user:password>@smtp.host.com:<port> に設定します。
  • usernamepassword はオプションです。
  • 認証を必要としないように設計された SMTP サーバー を使用している場合は、環境 変数 の 値 を GORILLA_EMAIL_SINK=smtp://smtp.host.com:<port> のように設定するだけです。
  • SMTP で一般的に使用される ポート 番号 は、 ポート 587、465、および 25 です。これは、使用しているメール サーバー の種類によって異なる場合があることに注意してください。
  • SMTP のデフォルトの送信者メール アドレス (最初は noreply@wandb.com に設定されています)を構成するには、サーバー 上の GORILLA_EMAIL_FROM_ADDRESS 環境 変数 を目的の送信者メール アドレス に更新します。

7 - Configure environment variables

W&B サーバー のインストールを設定する方法

System Settings 管理 UI を使用してインスタンスレベルの 設定 を行うことに加えて、W&B は 環境変数 を使用してコードでこれらの 値 を 設定 する 方法 も提供します。また、IAM の 高度な 設定 も参照してください。

環境変数 のリファレンス

環境変数 説明
LICENSE wandb/ローカルライセンス
MYSQL MySQL 接続文字列
BUCKET データ を 保存 する S3 / GCS バケット
BUCKET_QUEUE オブジェクト 作成 イベント 用の SQS / Google PubSub キュー
NOTIFICATIONS_QUEUE run イベント を パブリッシュする SQS キュー
AWS_REGION バケット が存在する AWS リージョン
HOST インスタンス の FQD。例えば、https://my.domain.net です。
OIDC_ISSUER Open ID Connect ID プロバイダーの URL。例えば、https://cognito-idp.us-east-1.amazonaws.com/us-east-1_uiIFNdacd です。
OIDC_CLIENT_ID ID プロバイダー内の アプリケーション の クライアント ID
OIDC_AUTH_METHOD implicit (デフォルト) または pkce。詳細については、以下を参照してください。
SLACK_CLIENT_ID アラートに使用する Slack アプリケーション の クライアント ID
SLACK_SECRET アラートに使用する Slack アプリケーション の シークレット
LOCAL_RESTORE インスタンス に アクセス できない場合は、一時的に true に 設定 できます。一時的な 認証情報 については、コンテナ からの ログ を確認してください。
REDIS W&B で 外部 REDIS インスタンス を セットアップするために使用できます。
LOGGING_ENABLED true に 設定 すると、 アクセス ログ が stdout に ストリーム されます。この 変数 を 設定 しなくても、サイドカー コンテナ をマウントして /var/log/gorilla.log を監視できます。
GORILLA_ALLOW_USER_TEAM_CREATION true に 設定 すると、管理者以外の ユーザー が 新しい Teams を 作成 できるようになります。デフォルトでは false です。
GORILLA_DATA_RETENTION_PERIOD 削除された run の データ を保持する期間 (時間単位)。削除された run データ は 復元できません。入力 値 に h を追加します。たとえば、"24h"
ENABLE_REGISTRY_UI true に 設定 すると、新しい W&B Registry UI が有効になります。

高度な 信頼性 設定

Redis

外部 Redis サーバー の 設定 はオプションですが、 production システム では推奨されます。Redis は、サービスの信頼性を向上させ、特に 大規模な Projects での ロード時間 を短縮するために キャッシュ を有効にするのに役立ちます。高可用性 (HA) を備えた ElastiCache などの マネージド Redis サービス と、次の 仕様 を使用してください。

  • 最小 4GB の メモリ、推奨 8GB
  • Redis バージョン 6.x
  • 転送中の 暗号化
  • 認証 が有効

W&B で Redis インスタンス を 設定 するには、http(s)://YOUR-W&B-SERVER-HOST/system-admin の W&B 設定 ページ に移動します。[外部 Redis インスタンス を 使用 する] オプション を有効にし、次の 形式 で Redis 接続文字列 を入力します。

W&B で REDIS を 設定 する

コンテナ または Kubernetes デプロイメント で 環境変数 REDIS を使用して Redis を 設定 することもできます。または、REDIS を Kubernetes シークレット として 設定 することもできます。

この ページ では、Redis インスタンス が デフォルト ポート 6379 で 実行されていることを前提としています。別の ポート を 設定 し、 認証 を 設定 し、redis インスタンス で TLS を有効にする 場合 、接続文字列 の 形式 は redis://$USER:$PASSWORD@$HOST:$PORT?tls=true のようになります。

8 - Release process for W&B Server

W&B サーバー のリリース プロセス

頻度とデプロイメントの種類

W&B Server のリリースは、Dedicated CloudSelf-managed のデプロイメントに適用されます。サーバーのリリースには、次の3種類があります。

リリースの種類 説明
月次 月次リリースには、新機能、機能拡張、および中程度と低程度の重大度のバグ修正が含まれます。
パッチ パッチリリースには、重大および高重大度のバグ修正が含まれます。パッチは、必要に応じてまれにリリースされます。
機能 機能リリースは、新製品の特定のリリース日を対象としています。これは、標準の月次リリースよりも前に発生することがあります。

すべてのリリースは、受け入れテスト段階が完了すると、すべての Dedicated Cloud インスタンスに直ちにデプロイされます。これにより、管理対象インスタンスは完全に更新され、関連する顧客は最新の機能と修正を利用できます。Self-managed インスタンスを使用している顧客は、自身のスケジュールで 更新プロセス を行う必要があります。その際、最新の Docker イメージ を使用できます。リリースサポートとサポート終了 を参照してください。

リリースノート

すべてのリリースのリリースノートは、GitHub の W&B Server Releases で入手できます。Slack を使用している顧客は、W&B Slack チャンネルで自動リリース通知を受信できます。これらの更新を有効にするには、W&B チームにお問い合わせください。

リリース更新とダウンタイム

サーバーのリリースでは、通常、Dedicated Cloud インスタンス、および適切なローリングアップデートプロセスを実装している Self-managed デプロイメントを使用している顧客に対して、インスタンスのダウンタイムは必要ありません。

ダウンタイムは、次のシナリオで発生する可能性があります。

  • 新しい機能または機能拡張には、コンピューティング、ストレージ、ネットワークなどの基盤となるインフラストラクチャーの変更が必要です。W&B は、関連する事前通知を Dedicated Cloud の顧客に送信するように努めています。
  • セキュリティパッチによるインフラストラクチャーの変更、または特定のバージョンの サポート終了 を回避するための変更。緊急の変更の場合、Dedicated Cloud の顧客は事前通知を受け取らない場合があります。ここでの優先事項は、フリートを安全に保ち、完全にサポートすることです。

どちらの場合も、アップデートは例外なくすべての Dedicated Cloud インスタンスにロールアウトされます。Self-managed インスタンスを使用している顧客は、自身のスケジュールでこのような更新を管理する必要があります。リリースサポートとサポート終了 を参照してください。

リリースサポートとサポート終了ポリシー

W&B は、リリース日から6か月間、すべてのサーバーリリースをサポートします。Dedicated Cloud インスタンスは自動的に更新されます。Self-managed インスタンスを使用している顧客は、サポートポリシーに準拠するために、デプロイメントをタイムリーに更新する必要があります。W&B からのサポートが大幅に制限されるため、6か月以上前のバージョンを使用することは避けてください。