메인 콘텐츠로 건너뛰기

소개

이 가이드는 에어갭이 적용된, 고객이 직접 관리하는 환경에서 W&B Platform을 배포하는 방법을 단계별로 설명합니다. Helm 차트와 컨테이너 이미지를 호스팅할 내부 리포지터리 또는 레지스트리를 사용하세요. Kubernetes 클러스터에 대한 적절한 액세스 권한이 있는 셸 콘솔에서 모든 명령을 실행하세요. Kubernetes 애플리케이션을 배포할 때 사용하는 어떤 지속적 딜리버리 도구에서도 이와 유사한 명령을 활용할 수 있습니다.

1단계: 사전 요구 사항

시작하기 전에 현재 환경이 다음 요구 사항을 충족하는지 확인하세요:

버전 요구사항

소프트웨어최소 버전
Kubernetesv1.32 이상 (지원되는 Kubernetes 버전)
Helmv3.x
MySQLv8.0.x가 필요하며, 최소 v8.0.32 이상이어야 합니다. v8.0.44 이상을 권장합니다.
Aurora MySQL 3.x 릴리스는 v3.05.2 이상이어야 합니다.
Redisv7.x

SSL/TLS 요구 사항

W&B는 클라이언트와 서버 간의 보안 통신을 위해 유효한 서명 SSL/TLS 인증서를 요구합니다. SSL/TLS 종료(termination)는 반드시 인그레스/로드 밸런서에서 이루어져야 합니다. W&B Server 애플리케이션은 SSL 또는 TLS 연결을 종료하지 않습니다. 중요: W&B는 자체 서명 인증서 및 커스텀 CA(인증 기관)를 지원하지 않습니다. 자체 서명 인증서를 사용하면 사용자에게 문제가 발생하므로 지원되지 않습니다. 가능하다면 Let’s Encrypt와 같은 서비스를 사용하여 로드 밸런서에 신뢰할 수 있는 인증서를 제공하는 것이 좋습니다. Caddy 및 Cloudflare와 같은 서비스는 SSL을 대신 관리해 줍니다. 보안 정책상 신뢰할 수 있는 내부 네트워크 내에서도 SSL 통신이 필요한 경우, Istio 및 sidecar 컨테이너와 같은 도구의 사용을 고려하십시오.

하드웨어 요구 사항

CPU 아키텍처: W&B는 Intel(x86) CPU 아키텍처에서만 실행됩니다. ARM은 지원되지 않습니다. 사이징: Kubernetes 노드와 MySQL에 대한 CPU, 메모리, 디스크 사이징 권장 사항은 레퍼런스 아키텍처의 사이징 섹션을 참고하십시오. 요구 사항은 Models와 Weave를 각각 또는 함께 실행하는지에 따라 달라집니다.

MySQL 데이터베이스

W&B는 외부 MySQL 데이터베이스가 필요합니다. 운영(프로덕션) 환경에서는 관리형 데이터베이스 서비스를 사용할 것을 W&B에서 강력히 권장합니다: 관리형 데이터베이스 서비스는 자동 백업, 모니터링, 고가용성, 패치 적용 등을 제공하며 운영 부담을 줄여줍니다. 사이징 권장 사항 및 구성 파라미터를 포함한 전체 MySQL 요구 사항은 참조 아키텍처를 참조하세요. 데이터베이스 생성용 SQL은 베어 메탈 가이드를 확인하세요. 배포 환경의 데이터베이스 구성에 대한 질문이 있는 경우 support 또는 담당 AISE에 문의하세요.

Redis

W&B는 작업 큐 처리와 데이터 캐싱을 위해 W&B 구성 요소에서 사용하는 단일 노드 Redis 7.x 배포에 의존합니다. 개념 검증(PoC)의 테스트 및 개발 편의를 위해 W&B Self-Managed에는 프로덕션 배포 환경에는 적합하지 않은 로컬 Redis 배포가 포함되어 있습니다. 프로덕션 배포 환경의 경우, W&B는 다음 환경의 Redis 인스턴스에 연결할 수 있습니다:

객체 스토리지

W&B는 pre-signed URL 및 CORS를 지원하는 오브젝트 스토리지가 필요합니다. 프로덕션 배포 시 W&B는 다음과 같은 매니지드 오브젝트 스토리지 서비스 사용을 권장합니다:
  • Amazon S3: 업계 최고 수준의 확장성, 데이터 가용성, 보안 및 성능을 제공하는 오브젝트 스토리지 서비스.
  • Google Cloud Storage: 비정형 데이터를 대규모로 저장하기 위한 매니지드 서비스.
  • Azure Blob Storage: 대량의 비정형 데이터를 저장하기 위한 클라우드 기반 오브젝트 스토리지 솔루션.
  • CoreWeave AI Object Storage: AI 워크로드에 최적화된 고성능 S3 호환 오브젝트 스토리지 서비스.
자가 호스팅 오브젝트 스토리지 옵션에 대해서는 CORS 구성과 엔터프라이즈 대안을 포함한 자세한 설정 방법을 보려면 베어메탈 가이드 오브젝트 스토리지 섹션을 참고하십시오.
MinIO Open Source는 활성 개발 및 사전 컴파일된 바이너리 없이 유지 관리 모드에 있습니다. 프로덕션 배포의 경우, W&B는 매니지드 오브젝트 스토리지 서비스 또는 엔터프라이즈급 S3 호환 솔루션 사용을 권장합니다.
전체 요구 사항은 레퍼런스 아키텍처 오브젝트 스토리지 섹션을 참고하십시오.

추가 요구 사항

  • 필요한 W&B 이미지가 있는 내부 컨테이너 레지스트리에 대한 액세스 권한
  • W&B Helm 차트를 위한 내부 Helm 리포지토리에 대한 액세스 권한
네트워킹 및 로드 밸런서 구성을 포함한 전체 인프라 요구 사항은 참조 아키텍처를 참조하십시오.
W&B는 에어갭 환경의 OpenShift Kubernetes 클러스터에 배포할 수 있습니다. 자세한 내용은 참조 아키텍처를 참조하고, 에어갭 OpenShift 배포에 맞게 조정할 수 있는 구체적인 구성 지침은 Operator 가이드의 OpenShift 섹션을 검토하십시오.

2단계: 내부 컨테이너 레지스트리 준비

에어갭 배포를 성공적으로 수행하려면 에어갭 컨테이너 레지스트리에 다음 컨테이너 이미지가 준비되어 있어야 합니다. W&B Operator의 요구 사항을 추적하고, 컨테이너 레지스트리를 최신 이미지로 정기적으로 업데이트하고 관리할 책임은 사용자에게 있습니다. 최신 필수 컨테이너 이미지 및 버전 목록은 Helm 차트를 참조하거나 support 또는 담당 AISE에게 문의하십시오.

핵심 W&B 구성 요소 컨테이너

종속성

필요한 이미지 가져오기

Helm 차트 values에서 필요한 이미지와 버전의 전체 목록을 추출하려면 다음을 수행합니다.
  1. W&B Helm charts 저장소에서 W&B Operator 및 Platform Helm 차트를 다운로드합니다.
  2. values.yaml 파일을 확인하여 모든 컨테이너 이미지와 해당 버전을 식별합니다.
    # Helm 차트에서 이미지 참조 추출
    helm show values wandb/operator \
      | awk -F': *' '/^[[:space:]]*repository:/{print $2}' \
      | grep -E '^wandb/' \
      | sort -u
    
    추출된 목록은 다음과 유사할 수 있습니다. 이미지 버전은 달라질 수 있습니다.
    wandb/anaconda2
    wandb/console
    wandb/frontend-nginx
    wandb/local
    wandb/megabinary
    wandb/weave-python
    wandb/weave-trace
    

3단계: 내부 Helm 차트 리포지터리 준비

컨테이너 이미지와 함께, 다음 Helm 차트가 내부 Helm 차트 리포지터리에 준비되어 있는지 반드시 확인해야 합니다. 아래 위치에서 다운로드하세요: operator 차트는 Controller Manager라고도 불리는 W&B Operator를 배포하는 데 사용됩니다. platform 차트는 커스텀 리소스 정의(CRD)에 설정된 값(values)을 사용하여 W&B Platform을 배포하는 데 사용됩니다.

4단계: Helm 리포지토리 설정

이제 Helm 리포지토리를 설정하여 내부 리포지토리에서 W&B Helm 차트를 가져오도록 설정합니다. Helm 리포지토리를 추가하고 업데이트하려면 다음 명령을 실행하세요:
helm repo add local-repo https://charts.yourdomain.com
helm repo update

단계 5: Kubernetes operator 설치

W&B Kubernetes operator(컨트롤러 매니저라고도 함)는 W&B 플랫폼 구성 요소를 관리합니다. 에어갭 환경에 설치하려면 내부 컨테이너 레지스트리를 사용하도록 구성해야 합니다. 이를 위해 기본 이미지 설정을 재정의하여 내부 컨테이너 레지스트리를 사용하도록 하고, 예상되는 배포 유형을 나타내기 위해 airgapped: true 키를 설정해야 합니다. 아래와 같이 values.yaml 파일을 업데이트합니다:
image:
  repository: registry.yourdomain.com/library/controller
  tag: 1.13.3
airgapped: true
태그를 내부 레지스트리에 등록된 사용 가능한 버전으로 교체하세요. operator와 CRD를 설치하세요:
helm upgrade --install operator local-repo/operator -n wandb --create-namespace -f values.yaml
지원되는 값에 대한 자세한 내용은 Kubernetes Operator GitHub 리포지터리를 참고하세요.

6단계: MySQL 데이터베이스 설정

W&B Custom Resource를 구성하기 전에 외부 MySQL 데이터베이스를 먼저 설정해야 합니다. 프로덕션 배포의 경우 W&B는 관리형 데이터베이스 서비스를 사용할 것을 강력히 권장합니다. 그러나 직접 MySQL 인스턴스를 운영하는 경우에는 다음과 같이 데이터베이스와 사용자를 생성하십시오: 다음 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;
MySQL 구성 파라미터는 참조 아키텍처의 MySQL 구성 섹션을 참고하십시오.

7단계: W&B Custom Resource 구성

W&B Kubernetes Operator를 설치한 후, Custom Resource(CR)를 구성하여 내부 Helm 저장소와 컨테이너 레지스트리를 참조하도록 해야 합니다. 이 구성을 통해 Kubernetes Operator가 W&B 플랫폼의 필요한 구성 요소를 배포할 때 내부 레지스트리와 저장소를 사용하도록 보장합니다. 다음 예시 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
      redis:
        host: redis.yourdomain.com
        port: 6379
        password: password
      api:
        enabled: true
      glue:
        enabled: true
      executor:
        enabled: true
      extraEnv:
        ENABLE_REGISTRY_UI: 'true'

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

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

    api:
      image:
        repository: registry.yourdomain.com/megabinary
        tag: 0.59.2

    executor:
      image:
        repository: registry.yourdomain.com/megabinary
        tag: 0.59.2

    glue:
      image:
        repository: registry.yourdomain.com/megabinary
        tag: 0.59.2

    parquet:
      image:
        repository: registry.yourdomain.com/megabinary
        tag: 0.59.2

    weave:
      image:
        repository: registry.yourdomain.com/weave-python
        tag: 0.59.2

    otel:
      image:
        repository: registry.yourdomain.com/otel/opentelemetry-collector-contrib
        tag: 0.97.0

    prometheus:
      server:
        image:
          repository: registry.yourdomain.com/prometheus/prometheus
          tag: v2.47.0
      configmapReload:
        prometheus:
          image:
            repository: registry.yourdomain.com/prometheus-operator/prometheus-config-reloader
            tag: v0.67.0

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

    
W&B 플랫폼을 배포하기 위해 Kubernetes Operator는 CR에 정의된 값을 사용하여 내부 저장소에 있는 operator-wandb Helm 차트를 구성합니다. 모든 태그와 버전을 내부 레지스트리에 등록된 버전으로 교체하십시오. 위 예시는 가장 일반적으로 사용되는 컴포넌트를 보여줍니다. 배포 요구 사항에 따라 settingsMigrationJob, weave-trace, filestream 등의 추가 컴포넌트에 대한 이미지 저장소도 구성해야 할 수 있습니다. 구성 가능한 컴포넌트의 전체 목록은 W&B Helm 저장소 values 파일을 참고하십시오.

8단계: W&B 플랫폼 배포

이제 Kubernetes operator와 CR 설정이 완료되었으므로 wandb.yaml 구성을 적용하여 W&B 플랫폼을 배포합니다:
kubectl apply -f wandb.yaml

9단계: 설치 확인

설치를 검증하려면 W&B는 W&B CLI 사용을 권장합니다. verify 명령은 모든 구성 요소와 구성을 검증하는 여러 테스트를 실행합니다.
이 단계는 브라우저를 사용해 첫 번째 관리자 사용자 계정을 생성했다고 가정합니다.
다음 단계를 따라 설치를 검증하세요:
  1. W&B CLI를 설치합니다:
pip install wandb
  1. W&B에 로그인하기:
wandb login --host=https://YOUR_DNS_DOMAIN
예를 들어:
wandb login --host=https://wandb.company-name.com
  1. 설치를 확인하세요:
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 지원 팀에 문의하세요.

FAQ

배포 과정에서는 아래의 자주 묻는 질문(FAQ)과 문제 해결 팁을 참고하세요.

다른 ingress 클래스가 있습니다. 해당 클래스를 사용해도 되나요?

네, values.yaml에서 ingress 설정을 수정하여 해당 ingress 클래스를 사용하도록 구성할 수 있습니다.

인증서 번들에 인증서가 여러 개 있습니다. 그런 경우에도 사용할 수 있나요?

values.yamlcustomCACerts 섹션에서 인증서를 여러 개의 엔트리로 분리해야 합니다.

Kubernetes operator가 사용자 개입 없이 업데이트를 적용하지 않도록 하려면 어떻게 해야 하나요? 그렇게 하는 것이 가능한가요?

W&B console에서 자동 업데이트를 끌 수 있습니다. 지원되는 버전에 대한 질문이 있으면 W&B 팀에 문의하세요. W&B는 주요 W&B Server 릴리스를 최초 출시일로부터 12개월 동안 지원합니다. Self-Managed 인스턴스를 사용하는 고객은 지원을 유지하기 위해 제때 업그레이드할 책임이 있습니다. 지원이 종료된 버전을 계속 사용하지 마세요. Release policies and processes를 참고하세요.
W&B는 Self-Managed 인스턴스를 사용하는 고객에게, 지원을 유지하고 최신 기능, 성능 향상 및 수정 사항을 받기 위해 최소한 분기마다 한 번 이상 배포를 최신 릴리스로 업데이트할 것을 강력히 권장합니다.

환경이 공개 리포지토리에 연결되어 있지 않아도 배포가 동작하나요?

구성에서 airgappedtrue로 설정하면 Kubernetes 오퍼레이터는 내부 리소스만 사용하며, 공개 리포지토리에 연결을 시도하지 않습니다.