Deploy W&B Platform on GCP
5 minute read
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 메시지 시스템
사전 필수 권한
terraform을 실행할 계정은 사용된 GCP 프로젝트에서 roles/owner
역할을 가지고 있어야 합니다.
일반적인 단계
이 항목의 단계는 이 문서에서 다루는 모든 배포 옵션에 공통적입니다.
-
개발 환경을 준비합니다.
- Terraform을 설치합니다.
- 사용할 코드로 Git 저장소를 만드는 것이 좋지만, 파일을 로컬에 보관할 수도 있습니다.
- Google Cloud Console에서 프로젝트를 만듭니다.
- GCP로 인증합니다 (gcloud 설치되었는지 확인).
gcloud auth application-default login
-
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에서 생성된 모든 리소스의 접두사가 되는 문자열입니다.subdomain
과domain
의 조합은 Weights & Biases가 구성될 FQDN을 형성합니다. 위의 예에서 Weights & Biases FQDN은wandb-gcp.wandb.ml
입니다. -
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 = "리소스에 사용되는 네임스페이스 접두사" } 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분)
이는 모든 필수
구성 요소를 만들고 Kubernetes Cluster
에 최신 버전의 W&B
를 설치하는 가장 간단한 배포 옵션 구성입니다.
-
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 }
-
W&B를 배포합니다.
W&B를 배포하려면 다음 코맨드를 실행합니다.
terraform init terraform apply -var-file=terraform.tfvars
REDIS Cache를 사용한 배포
또 다른 배포 옵션은 Redis
를 사용하여 SQL 쿼리를 캐시하고 Experiments에 대한 메트릭 로드 시 애플리케이션 응답 속도를 높이는 것입니다.
캐시를 활성화하려면 권장되는 배포 옵션 섹션에 지정된 동일한 main.tf
파일에 옵션 create_redis = true
를 추가해야 합니다.
[...]
module "wandb" {
source = "wandb/wandb/google"
version = "~> 1.0"
namespace = var.namespace
license = var.license
domain_name = var.domain_name
subdomain = var.subdomain
allowed_inbound_cidrs = ["*"]
#Enable Redis
create_redis = true
}
[...]
외부 큐를 사용한 배포
배포 옵션 3은 외부 message broker
를 활성화하는 것으로 구성됩니다. W&B는 broker가 내장되어 있으므로 선택 사항입니다. 이 옵션은 성능 향상을 제공하지 않습니다.
메시지 broker를 제공하는 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
}
[...]
기타 배포 옵션
동일한 파일에 모든 구성을 추가하여 세 가지 배포 옵션을 모두 결합할 수 있습니다.
Terraform Module은 배포 - 권장
에서 찾은 표준 옵션 및 최소 구성과 함께 결합할 수 있는 여러 옵션을 제공합니다.
수동 구성
GCP Storage 버킷을 W&B의 파일 스토리지 백엔드로 사용하려면 다음을 만들어야 합니다.
PubSub Topic 및 Subscription 만들기
PubSub 토픽 및 구독을 만들려면 아래 절차를 따르십시오.
- GCP Console 내에서 Pub/Sub 서비스로 이동합니다.
- 토픽 만들기를 선택하고 토픽 이름을 입력합니다.
- 페이지 하단에서 구독 만들기를 선택합니다. 전달 유형이 Pull로 설정되어 있는지 확인합니다.
- 만들기를 클릭합니다.
인스턴스를 실행하는 서비스 계정 또는 계정이 이 구독에 대해 pubsub.admin
역할을 가지고 있는지 확인합니다. 자세한 내용은 https://cloud.google.com/pubsub/docs/access-control#console을 참조하십시오.
Storage Bucket 만들기
- Cloud Storage Buckets 페이지로 이동합니다.
- 버킷 만들기를 선택하고 버킷 이름을 입력합니다. Standard 스토리지 클래스를 선택해야 합니다.
인스턴스를 실행하는 서비스 계정 또는 계정이 다음을 모두 가지고 있는지 확인합니다.
- 이전 단계에서 만든 버킷에 대한 엑세스 권한
- 이 버킷에 대한
storage.objectAdmin
역할 자세한 내용은 https://cloud.google.com/storage/docs/access-control/using-iam-permissions#bucket-add를 참조하십시오.
iam.serviceAccounts.signBlob
권한도 필요합니다. 인스턴스가 실행되는 서비스 계정 또는 IAM 멤버에 Service Account Token Creator
역할을 추가하여 권한을 활성화합니다.- CORS 엑세스를 활성화합니다. 이는 커맨드라인을 사용해서만 수행할 수 있습니다. 먼저 다음 CORS 구성으로 JSON 파일을 만듭니다.
cors:
- maxAgeSeconds: 3600
method:
- GET
- PUT
origin:
- '<YOUR_W&B_SERVER_HOST>'
responseHeader:
- Content-Type
origin 값의 체계, 호스트 및 포트가 정확히 일치해야 합니다.
gcloud
가 설치되어 있고 올바른 GCP 프로젝트에 로그인되어 있는지 확인합니다.- 다음을 실행합니다.
gcloud storage buckets update gs://<BUCKET_NAME> --cors-file=<CORS_CONFIG_FILE>
PubSub Notification 만들기
커맨드라인에서 아래 절차에 따라 Storage Bucket에서 Pub/Sub 토픽으로의 알림 스트림을 만듭니다.
gcloud
가 설치되어 있는지 확인합니다.- GCP 프로젝트에 로그인합니다.
- 터미널에서 다음을 실행합니다.
gcloud pubsub topics list # 참조용 토픽 이름 나열
gcloud storage ls # 참조용 버킷 이름 나열
# 버킷 알림 만들기
gcloud storage buckets notifications create gs://<BUCKET_NAME> --topic=<TOPIC_NAME>
자세한 참조는 Cloud Storage 웹사이트에서 확인할 수 있습니다.
W&B 서버 구성
- 마지막으로
http(s)://YOUR-W&B-SERVER-HOST/console/settings/system
에서 W&BSystem Connections
페이지로 이동합니다. Google Cloud Storage (gcs)
제공자를 선택합니다.- GCS 버킷 이름을 제공합니다.

- 설정 업데이트를 눌러 새 설정을 적용합니다.
W&B Server 업그레이드
W&B를 업데이트하려면 여기에 설명된 단계를 따르십시오.
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"
wandb_version
을 terraform.tfvars
에 추가하고 동일한 이름으로 변수를 만들고 리터럴 값 대신 var.wandb_version
을 사용할 수 있습니다.- 구성을 업데이트한 후 배포 옵션 섹션에 설명된 단계를 완료합니다.
[i18n] feedback_title
[i18n] feedback_question
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.