이 섹션의 다중 페이지 출력 화면임. 여기를 클릭하여 프린트.

이 페이지의 일반 화면으로 돌아가기.

Guides

W&B에 대한 개요와 처음 사용하는 사용자를 위한 시작 방법에 대한 링크입니다.

W&B 란 무엇인가요?

Weights & Biases (W&B) 는 AI 개발자 플랫폼으로, 모델 트레이닝, 모델 미세 조정 및 파운데이션 모델 활용을 위한 툴을 제공합니다.

W&B 는 다음 세 가지 주요 구성 요소로 이루어져 있습니다: Models, Weave, 그리고 Core:

W&B Models 는 머신러닝 개발자가 모델을 트레이닝하고 미세 조정하는 데 사용하는 가볍고 상호 운용 가능한 툴 모음입니다.

  • Experiments: 머신러닝 실험 추적
  • Sweeps: 하이퍼파라미터 튜닝 및 모델 최적화
  • Registry: ML 모델 및 데이터셋 게시 및 공유

W&B Weave 는 LLM 애플리케이션을 추적하고 평가하기 위한 가벼운 툴킷입니다.

W&B Core 는 데이터 및 모델을 추적하고 시각화하며 결과를 전달하기 위한 강력한 빌딩 블록 세트입니다.

  • Artifacts: 에셋 버전 관리 및 계보 추적
  • Tables: 테이블 형식 데이터 시각화 및 쿼리
  • Reports: 발견한 내용 문서화 및 협업

W&B 는 어떻게 작동하나요?

W&B 를 처음 사용하는 사용자이고 머신러닝 모델 및 실험을 트레이닝, 추적 및 시각화하는 데 관심이 있다면 다음 섹션을 순서대로 읽어보세요.

  1. W&B 의 기본 연산 단위인 runs에 대해 알아보세요.
  2. Experiments로 머신러닝 실험을 생성하고 추적하세요.
  3. Artifacts로 데이터셋 및 모델 버전 관리를 위한 W&B 의 유연하고 가벼운 빌딩 블록을 찾아보세요.
  4. Sweeps로 하이퍼파라미터 검색을 자동화하고 가능한 모델 공간을 탐색하세요.
  5. Registry로 트레이닝에서 프로덕션까지 모델 수명 주기를 관리하세요.
  6. Data Visualization 가이드로 모델 버전 간 예측값을 시각화하세요.
  7. Reports로 runs를 구성하고, 시각화를 포함 및 자동화하고, 발견한 내용을 설명하고, 협업자와 업데이트를 공유하세요.

W&B 를 처음 사용하시나요?

quickstart를 통해 W&B 를 설치하고 W&B 를 코드에 추가하는 방법을 알아보세요.

1 - W&B Quickstart

W&B 퀵스타트

W&B를 설치하여 모든 규모의 기계 학습 Experiments를 추적, 시각화 및 관리하세요.

가입하고 API 키 생성하기

W&B로 사용자의 머신을 인증하려면 사용자 프로필 또는 wandb.ai/authorize에서 API 키를 생성하세요. API 키를 복사하여 안전하게 보관하세요.

wandb 라이브러리 설치 및 로그인

  1. WANDB_API_KEY 환경 변수를 설정합니다.

    export WANDB_API_KEY=<your_api_key>
    
  2. wandb 라이브러리를 설치하고 로그인합니다.

    pip install wandb
    wandb login
    
pip install wandb
import wandb
wandb.login()
!pip install wandb
import wandb
wandb.login()

run 시작 및 하이퍼파라미터 추적

Python 스크립트 또는 노트북에서 wandb.init()으로 W&B run 오브젝트를 초기화합니다. config 파라미터에 사전을 사용하여 하이퍼파라미터 이름과 값을 지정합니다.

run = wandb.init(
    project="my-awesome-project",  # 프로젝트 지정
    config={                        # 하이퍼파라미터 및 메타데이터 추적
        "learning_rate": 0.01,
        "epochs": 10,
    },
)

Run은 W&B의 핵심 요소로, 메트릭 추적, 로그 생성 등에 사용됩니다.

컴포넌트 조립

이 모의 트레이닝 스크립트는 시뮬레이션된 정확도 및 손실 메트릭을 W&B에 기록합니다.

# train.py
import wandb
import random

wandb.login()

epochs = 10
lr = 0.01

run = wandb.init(
    project="my-awesome-project",    # 프로젝트 지정
    config={                         # 하이퍼파라미터 및 메타데이터 추적
        "learning_rate": lr,
        "epochs": epochs,
    },
)

offset = random.random() / 5
print(f"lr: {lr}")

# 트레이닝 run 시뮬레이션
for epoch in range(2, epochs):
    acc = 1 - 2**-epoch - random.random() / epoch - offset
    loss = 2**-epoch + random.random() / epoch + offset
    print(f"epoch={epoch}, accuracy={acc}, loss={loss}")
    wandb.log({"accuracy": acc, "loss": loss})

# run.log_code()

wandb.ai/home을 방문하여 정확도 및 손실과 같이 기록된 메트릭과 각 트레이닝 단계에서 어떻게 변경되었는지 확인하세요. 다음 이미지는 각 run에서 추적된 손실 및 정확도를 보여줍니다. 각 run 오브젝트는 생성된 이름과 함께 Runs 열에 나타납니다.

Shows loss and accuracy tracked from each run.

다음 단계

W&B ecosystem의 더 많은 기능을 탐색해 보세요.

  1. PyTorch와 같은 프레임워크, Hugging Face와 같은 라이브러리, SageMaker와 같은 서비스와 W&B를 결합하는 W&B Integration 튜토리얼을 읽어보세요.
  2. W&B Reports를 사용하여 runs을 구성하고, 시각화를 자동화하고, 발견한 내용을 요약하고, 협업자와 업데이트를 공유합니다.
  3. W&B Artifacts를 생성하여 기계 학습 파이프라인 전체에서 데이터셋, Models, 종속성 및 결과를 추적합니다.
  4. W&B Sweeps로 하이퍼파라미터 검색을 자동화하고 Models을 최적화합니다.
  5. 중앙 대시보드에서 runs을 분석하고, 모델 예측값을 시각화하고, 인사이트를 공유합니다.
  6. 핸즈온 코스를 통해 LLM, MLOps 및 W&B Models에 대해 배우려면 W&B AI Academy를 방문하세요.

2 - W&B Models

W&B Models는 모델을 정리하고 생산성 및 협업을 향상시키며 프로덕션 규모로 ML을 제공하려는 ML 개발자를 위한 기록 시스템입니다.

W&B Models를 사용하면 다음을 수행할 수 있습니다.

기계 학습 개발자는 W&B Models를 사용하여 ML 기록 시스템으로 Experiments를 추적 및 시각화하고, 모델 버전 및 계보를 관리하고, 하이퍼파라미터를 최적화합니다.

2.1 - Experiments

W&B로 기계 학습 실험을 추적하세요.

몇 줄의 코드로 기계 학습 Experiments 를 추적하세요. 그런 다음 대화형 대시보드에서 결과를 검토하거나, Public API를 사용하여 프로그래밍 방식으로 엑세스할 수 있도록 데이터를 Python으로 내보낼 수 있습니다.

PyTorch, Keras, 또는 Scikit과 같은 널리 사용되는 프레임워크를 사용하는 경우 W&B Integrations 를 활용하세요. W&B 를 코드에 추가하는 방법에 대한 정보 및 전체 인테그레이션 목록은 Integration 가이드를 참조하세요.

위의 이미지는 여러 runs에서 메트릭을 보고 비교할 수 있는 대시보드 의 예시를 보여줍니다.

작동 방식

몇 줄의 코드로 기계 학습 experiment 를 추적합니다.

  1. W&B run을 만듭니다.
  2. 학습률 또는 모델 유형과 같은 하이퍼파라미터 사전을 구성 (run.config)에 저장합니다.
  3. 정확도 및 손실과 같은 트레이닝 루프에서 시간 경과에 따른 메트릭 (run.log())을 기록합니다.
  4. 모델 weights 또는 예측 테이블과 같은 run 의 출력을 저장합니다.

다음 코드는 일반적인 W&B experiment 추적 워크플로우를 보여줍니다.

# Start a run.
#
# When this block exits, it waits for logged data to finish uploading.
# If an exception is raised, the run is marked failed.
with wandb.init(entity="", project="my-project-name") as run:
  # Save mode inputs and hyperparameters.
  run.config.learning_rate = 0.01

  # Run your experiment code.
  for epoch in range(num_epochs):
    # Do some training...

    # Log metrics over time to visualize model performance.
    run.log({"loss": loss})

  # Upload model outputs as artifacts.
  run.log_artifact(model)

시작하기

유스 케이스에 따라 다음 리소스를 탐색하여 W&B Experiments 를 시작하세요.

  • 데이터셋 artifact 를 생성, 추적 및 사용하는 데 사용할 수 있는 W&B Python SDK 코맨드에 대한 단계별 개요는 W&B 퀵스타트를 참조하세요.
  • 다음 방법을 배우려면 이 챕터를 살펴보세요.
    • experiment 생성
    • Experiments 구성
    • Experiments 에서 데이터 기록
    • Experiments 결과 보기
  • W&B API Reference Guide 내에서 W&B Python Library를 탐색합니다.

모범 사례 및 팁

Experiments 및 로깅에 대한 모범 사례 및 팁은 Best Practices: Experiments and Logging 를 참조하세요.

2.1.1 - Create an experiment

W&B 실험 만들기.

W&B Python SDK를 사용하여 기계 학습 Experiments를 추적합니다. 그런 다음 인터랙티브 대시보드에서 결과를 검토하거나 W&B Public API를 사용하여 프로그래밍 방식으로 Python으로 데이터를 내보낼 수 있습니다.

이 가이드에서는 W&B 빌딩 블록을 사용하여 W&B Experiment를 만드는 방법을 설명합니다.

W&B Experiment를 만드는 방법

W&B Experiment를 만드는 4단계:

  1. W&B Run 초기화
  2. 하이퍼파라미터 dictionary 캡처
  3. 트레이닝 루프 내에서 메트릭 기록
  4. W&B에 아티팩트 기록

W&B run 초기화

wandb.init()를 사용하여 W&B Run을 만듭니다.

다음 코드 조각은 이 run을 식별하는 데 도움이 되도록 설명이 “My first experiment”“cat-classification”이라는 W&B project에서 run을 만듭니다. 태그 “baseline”“paper1”은 이 run이 향후 논문 출판을 위한 베이스라인 experiment임을 알려줍니다.

import wandb

with wandb.init(
    project="cat-classification",
    notes="My first experiment",
    tags=["baseline", "paper1"],
) as run:
    ...

wandb.init()Run 오브젝트를 반환합니다.

하이퍼파라미터 dictionary 캡처

학습률 또는 모델 유형과 같은 하이퍼파라미터 dictionary를 저장합니다. config에서 캡처하는 모델 설정은 나중에 결과를 구성하고 쿼리하는 데 유용합니다.

with wandb.init(
    ...,
    config={"epochs": 100, "learning_rate": 0.001, "batch_size": 128},
) as run:
    ...

experiment를 구성하는 방법에 대한 자세한 내용은 Experiments 구성을 참조하십시오.

트레이닝 루프 내에서 메트릭 기록

run.log()를 호출하여 정확도 및 손실과 같은 각 트레이닝 단계에 대한 메트릭을 기록합니다.

model, dataloader = get_model(), get_data()

for epoch in range(run.config.epochs):
    for batch in dataloader:
        loss, accuracy = model.training_step()
        run.log({"accuracy": accuracy, "loss": loss})

W&B로 기록할 수 있는 다양한 데이터 유형에 대한 자세한 내용은 Experiments 중 데이터 기록을 참조하십시오.

W&B에 아티팩트 기록

선택적으로 W&B Artifact를 기록합니다. Artifact를 사용하면 데이터셋과 Models를 쉽게 버전 관리할 수 있습니다.

# 모든 파일 또는 디렉토리를 저장할 수 있습니다. 이 예에서는 모델에 ONNX 파일을 출력하는
# save() 메소드가 있다고 가정합니다.
model.save("path_to_model.onnx")
run.log_artifact("path_to_model.onnx", name="trained-model", type="model")

Artifacts 또는 Registry에서 Models 버전 관리에 대해 자세히 알아보십시오.

모두 함께 놓기

이전 코드 조각이 포함된 전체 스크립트는 아래에서 찾을 수 있습니다.

import wandb

with wandb.init(
    project="cat-classification",
    notes="",
    tags=["baseline", "paper1"],
    # run의 하이퍼파라미터를 기록합니다.
    config={"epochs": 100, "learning_rate": 0.001, "batch_size": 128},
) as run:
    # 모델 및 데이터를 설정합니다.
    model, dataloader = get_model(), get_data()

    # 모델 성능을 시각화하기 위해 메트릭을 기록하면서 트레이닝을 실행합니다.
    for epoch in range(run.config["epochs"]):
        for batch in dataloader:
            loss, accuracy = model.training_step()
            run.log({"accuracy": accuracy, "loss": loss})

    # 트레이닝된 모델을 아티팩트로 업로드합니다.
    model.save("path_to_model.onnx")
    run.log_artifact("path_to_model.onnx", name="trained-model", type="model")

다음 단계: experiment 시각화

W&B Dashboard를 기계 학습 모델의 결과를 구성하고 시각화하는 중앙 장소로 사용하십시오. 몇 번의 클릭만으로 평행 좌표 플롯, 파라미터 중요도 분석기타와 같은 풍부한 인터랙티브 차트를 구성합니다.

Quickstart Sweeps Dashboard example

Experiments 및 특정 runs를 보는 방법에 대한 자세한 내용은 Experiments 결과 시각화를 참조하십시오.

모범 사례

다음은 Experiments를 만들 때 고려해야 할 몇 가지 제안된 지침입니다.

  1. Runs 완료: 코드가 완료되거나 예외가 발생하면 자동으로 run을 완료된 것으로 표시하려면 with 문에서 wandb.init()를 사용합니다.
    • Jupyter 노트북에서는 Run 오브젝트를 직접 관리하는 것이 더 편리할 수 있습니다. 이 경우 Run 오브젝트에서 finish()를 명시적으로 호출하여 완료된 것으로 표시할 수 있습니다.

      # 노트북 셀에서:
      run = wandb.init()
      
      # 다른 셀에서:
      run.finish()
      
  2. Config: 하이퍼파라미터, 아키텍처, 데이터셋 및 모델을 재현하는 데 사용하려는 모든 항목을 추적합니다. 이러한 항목은 열에 표시됩니다. config 열을 사용하여 앱에서 runs를 동적으로 그룹화, 정렬 및 필터링합니다.
  3. Project: project는 함께 비교할 수 있는 experiment 집합입니다. 각 project에는 전용 대시보드 페이지가 제공되며, 다양한 모델 버전을 비교하기 위해 다양한 run 그룹을 쉽게 켜거나 끌 수 있습니다.
  4. Notes: 스크립트에서 직접 빠른 커밋 메시지를 설정합니다. W&B App에서 run의 개요 섹션에서 노트를 편집하고 엑세스합니다.
  5. Tags: 베이스라인 runs 및 즐겨찾는 runs를 식별합니다. 태그를 사용하여 runs를 필터링할 수 있습니다. W&B App의 project 대시보드의 개요 섹션에서 나중에 태그를 편집할 수 있습니다.
  6. Experiments를 비교하기 위해 여러 run 집합 만들기: Experiments를 비교할 때 메트릭을 쉽게 비교할 수 있도록 여러 run 집합을 만듭니다. 동일한 차트 또는 차트 그룹에서 run 집합을 켜거나 끌 수 있습니다.

다음 코드 조각은 위에 나열된 모범 사례를 사용하여 W&B Experiment를 정의하는 방법을 보여줍니다.

import wandb

config = {
    "learning_rate": 0.01,
    "momentum": 0.2,
    "architecture": "CNN",
    "dataset_id": "cats-0192",
}

with wandb.init(
    project="detect-cats",
    notes="tweak baseline",
    tags=["baseline", "paper1"],
    config=config,
) as run:
    ...

W&B Experiment를 정의할 때 사용할 수 있는 파라미터에 대한 자세한 내용은 API Reference Guidewandb.init API 문서를 참조하십시오.

2.1.2 - Configure experiments

사전 과 유사한 오브젝트를 사용하여 실험 설정을 저장합니다.

트레이닝 설정을 저장하려면 run의 config 속성을 사용하세요.

  • 하이퍼파라미터
  • 데이터셋 이름 또는 모델 유형과 같은 입력 설정
  • 모든 다른 독립 변수들

run.config 속성을 사용하면 실험을 쉽게 분석하고 향후 작업을 재현할 수 있습니다. W&B 앱에서 설정 값으로 그룹화하고, 서로 다른 W&B run의 설정을 비교하고, 각 트레이닝 설정이 결과에 미치는 영향을 평가할 수 있습니다. config 속성은 여러 사전과 유사한 오브젝트로 구성될 수 있는 사전과 유사한 오브젝트입니다.

실험 설정 구성하기

일반적으로 설정은 트레이닝 스크립트의 시작 부분에 정의됩니다. 그러나 기계 학습 워크플로우는 다를 수 있으므로 트레이닝 스크립트의 시작 부분에 설정을 정의할 필요는 없습니다.

config 변수 이름에는 마침표 (.) 대신 대시 (-) 또는 밑줄 (_)을 사용하세요.

스크립트가 루트 아래의 run.config 키에 엑세스하는 경우 속성 엑세스 구문 config.key.value 대신 사전 엑세스 구문 ["key"]["value"]를 사용하세요.

다음 섹션에서는 실험 설정을 정의하는 다양한 일반적인 시나리오에 대해 설명합니다.

초기화 시 설정 구성하기

W&B Run으로 데이터를 동기화하고 기록하는 백그라운드 프로세스를 생성하기 위해 wandb.init() API를 호출할 때 스크립트 시작 부분에 사전을 전달합니다.

다음 코드 조각은 설정 값으로 Python 사전을 정의하는 방법과 W&B Run을 초기화할 때 해당 사전을 인수로 전달하는 방법을 보여줍니다.

import wandb

# config 사전 오브젝트 정의
config = {
    "hidden_layer_sizes": [32, 64],
    "kernel_sizes": [3],
    "activation": "ReLU",
    "pool_sizes": [2],
    "dropout": 0.5,
    "num_classes": 10,
}

# W&B를 초기화할 때 config 사전 전달
with wandb.init(project="config_example", config=config) as run:
    ...

중첩된 사전을 config로 전달하면 W&B는 점을 사용하여 이름을 평면화합니다.

Python에서 다른 사전에 엑세스하는 방법과 유사하게 사전에서 값에 엑세스합니다.

# 키를 인덱스 값으로 사용하여 값에 엑세스
hidden_layer_sizes = run.config["hidden_layer_sizes"]
kernel_sizes = run.config["kernel_sizes"]
activation = run.config["activation"]

# Python 사전 get() 메소드
hidden_layer_sizes = run.config.get("hidden_layer_sizes")
kernel_sizes = run.config.get("kernel_sizes")
activation = run.config.get("activation")

argparse로 설정 구성하기

argparse 오브젝트로 설정을 구성할 수 있습니다. argument parser의 약자인 argparse는 커맨드라인 인수의 모든 유연성과 성능을 활용하는 스크립트를 쉽게 작성할 수 있도록 하는 Python 3.2 이상의 표준 라이브러리 모듈입니다.

이는 커맨드라인에서 실행되는 스크립트의 결과를 추적하는 데 유용합니다.

다음 Python 스크립트는 파서 오브젝트를 정의하여 실험 설정을 정의하고 구성하는 방법을 보여줍니다. 함수 train_one_epochevaluate_one_epoch는 이 데모의 목적으로 트레이닝 루프를 시뮬레이션하기 위해 제공됩니다.

# config_experiment.py
import argparse
import random

import numpy as np
import wandb


# 트레이닝 및 평가 데모 코드
def train_one_epoch(epoch, lr, bs):
    acc = 0.25 + ((epoch / 30) + (random.random() / 10))
    loss = 0.2 + (1 - ((epoch - 1) / 10 + random.random() / 5))
    return acc, loss


def evaluate_one_epoch(epoch):
    acc = 0.1 + ((epoch / 20) + (random.random() / 10))
    loss = 0.25 + (1 - ((epoch - 1) / 10 + random.random() / 6))
    return acc, loss


def main(args):
    # W&B Run 시작
    with wandb.init(project="config_example", config=args) as run:
        # config 사전에서 값에 엑세스하고 가독성을 위해 변수에 저장합니다.
        lr = run.config["learning_rate"]
        bs = run.config["batch_size"]
        epochs = run.config["epochs"]

        # W&B에 값을 시뮬레이션하여 트레이닝하고 기록합니다.
        for epoch in np.arange(1, epochs):
            train_acc, train_loss = train_one_epoch(epoch, lr, bs)
            val_acc, val_loss = evaluate_one_epoch(epoch)

            run.log(
                {
                    "epoch": epoch,
                    "train_acc": train_acc,
                    "train_loss": train_loss,
                    "val_acc": val_acc,
                    "val_loss": val_loss,
                }
            )


if __name__ == "__main__":
    parser = argparse.ArgumentParser(
        formatter_class=argparse.ArgumentDefaultsHelpFormatter
    )

    parser.add_argument("-b", "--batch_size", type=int, default=32, help="배치 크기")
    parser.add_argument(
        "-e", "--epochs", type=int, default=50, help="트레이닝 에포크 수"
    )
    parser.add_argument(
        "-lr", "--learning_rate", type=int, default=0.001, help="학습률"
    )

    args = parser.parse_args()
    main(args)

스크립트 전체에서 설정 구성하기

스크립트 전체에서 config 오브젝트에 더 많은 파라미터를 추가할 수 있습니다. 다음 코드 조각은 config 오브젝트에 새 키-값 쌍을 추가하는 방법을 보여줍니다.

import wandb

# config 사전 오브젝트 정의
config = {
    "hidden_layer_sizes": [32, 64],
    "kernel_sizes": [3],
    "activation": "ReLU",
    "pool_sizes": [2],
    "dropout": 0.5,
    "num_classes": 10,
}

# W&B를 초기화할 때 config 사전 전달
with wandb.init(project="config_example", config=config) as run:
    # W&B를 초기화한 후 config 업데이트
    run.config["dropout"] = 0.2
    run.config.epochs = 4
    run.config["batch_size"] = 32

여러 값을 한 번에 업데이트할 수 있습니다.

run.config.update({"lr": 0.1, "channels": 16})

Run이 완료된 후 설정 구성하기

W&B Public API를 사용하여 완료된 run의 구성을 업데이트합니다.

API에 엔티티, 프로젝트 이름 및 run의 ID를 제공해야 합니다. Run 오브젝트 또는 W&B 앱 UI에서 이러한 세부 정보를 찾을 수 있습니다.

with wandb.init() as run:
    ...

# 현재 스크립트 또는 노트북에서 시작된 경우 Run 오브젝트에서 다음 값을 찾거나 W&B 앱 UI에서 복사할 수 있습니다.
username = run.entity
project = run.project
run_id = run.id

# api.run()은 wandb.init()과 다른 유형의 오브젝트를 반환합니다.
api = wandb.Api()
api_run = api.run(f"{username}/{project}/{run_id}")
api_run.config["bar"] = 32
api_run.update()

absl.FLAGS

absl flags를 전달할 수도 있습니다.

flags.DEFINE_string("model", None, "실행할 모델")  # name, default, help

run.config.update(flags.FLAGS)  # absl flags를 config에 추가

파일 기반 Configs

config-defaults.yaml이라는 파일을 run 스크립트와 동일한 디렉토리에 배치하면 run이 파일에 정의된 키-값 쌍을 자동으로 선택하여 run.config에 전달합니다.

다음 코드 조각은 샘플 config-defaults.yaml YAML 파일을 보여줍니다.

batch_size:
  desc: 각 미니배치의 크기
  value: 32

wandb.initconfig 인수에 업데이트된 값을 설정하여 config-defaults.yaml에서 자동으로 로드된 기본값을 재정의할 수 있습니다. 예:

import wandb

# 사용자 지정 값을 전달하여 config-defaults.yaml 재정의
with wandb.init(config={"epochs": 200, "batch_size": 64}) as run:
    ...

config-defaults.yaml 이외의 구성 파일을 로드하려면 --configs 커맨드라인 인수를 사용하고 파일 경로를 지정합니다.

python train.py --configs other-config.yaml

파일 기반 configs의 유스 케이스 예제

Run에 대한 일부 메타데이터가 있는 YAML 파일과 Python 스크립트에 하이퍼파라미터 사전이 있다고 가정합니다. 중첩된 config 오브젝트에 둘 다 저장할 수 있습니다.

hyperparameter_defaults = dict(
    dropout=0.5,
    batch_size=100,
    learning_rate=0.001,
)

config_dictionary = dict(
    yaml=my_yaml_file,
    params=hyperparameter_defaults,
)

with wandb.init(config=config_dictionary) as run:
    ...

TensorFlow v1 flags

TensorFlow flags를 wandb.config 오브젝트에 직접 전달할 수 있습니다.

with wandb.init() as run:
    run.config.epochs = 4

    flags = tf.app.flags
    flags.DEFINE_string("data_dir", "/tmp/data")
    flags.DEFINE_integer("batch_size", 128, "배치 크기.")
    run.config.update(flags.FLAGS)  # tensorflow flags를 config로 추가

2.1.3 - Projects

모델의 버전을 비교하고, 임시 워크스페이스에서 결과를 탐색하고, 발견한 내용을 리포트로 내보내 노
트와 시각화를 저장하세요.

프로젝트는 결과를 시각화하고, 실험을 비교하고, 아티팩트를 보고 다운로드하고, 자동화를 생성하는 등 다양한 작업을 수행할 수 있는 중앙 위치입니다.

각 프로젝트에는 사이드바에서 엑세스할 수 있는 다음이 포함되어 있습니다.

  • Overview: 프로젝트의 스냅샷
  • Workspace: 개인 시각화 샌드박스
  • Runs: 프로젝트의 모든 run을 나열하는 테이블
  • Automations: 프로젝트에서 구성된 자동화
  • Sweeps: 자동화된 탐색 및 최적화
  • Reports: 노트, run 및 그래프의 저장된 스냅샷
  • Artifacts: 모든 run과 해당 run과 연결된 아티팩트 포함

Overview 탭

  • Project name: 프로젝트 이름입니다. W&B는 프로젝트 필드에 제공한 이름으로 run을 초기화할 때 프로젝트를 생성합니다. 오른쪽 상단 모서리에 있는 편집 버튼을 선택하여 언제든지 프로젝트 이름을 변경할 수 있습니다.
  • Description: 프로젝트에 대한 설명입니다.
  • Project visibility: 프로젝트의 공개 설정입니다. 누가 엑세스할 수 있는지 결정하는 공개 설정입니다. 자세한 내용은 프로젝트 공개 설정을 참조하세요.
  • Last active: 이 프로젝트에 마지막으로 데이터가 기록된 타임스탬프
  • Owner: 이 프로젝트를 소유한 엔티티
  • Contributors: 이 프로젝트에 기여하는 Users 수
  • Total runs: 이 프로젝트의 총 Runs 수
  • Total compute: 프로젝트의 모든 run 시간을 합산하여 이 총계를 얻습니다.
  • Undelete runs: 드롭다운 메뉴를 클릭하고 “Undelete all runs"를 클릭하여 프로젝트에서 삭제된 Runs을 복구합니다.
  • Delete project: 오른쪽 상단 모서리에 있는 점 메뉴를 클릭하여 프로젝트를 삭제합니다.

라이브 예제 보기

Workspace 탭

프로젝트의 workspace는 실험을 비교할 수 있는 개인 샌드박스를 제공합니다. 프로젝트를 사용하여 다양한 아키텍처, 하이퍼파라미터, 데이터셋, 전처리 등으로 동일한 문제에 대해 작업하면서 비교할 수 있는 Models를 구성합니다.

Runs Sidebar: 프로젝트의 모든 Runs 목록입니다.

  • Dot menu: 사이드바에서 행 위로 마우스를 가져가면 왼쪽에 메뉴가 나타납니다. 이 메뉴를 사용하여 run 이름을 바꾸거나, run을 삭제하거나, 활성 run을 중지합니다.
  • Visibility icon: 눈을 클릭하여 그래프에서 Runs을 켜고 끕니다.
  • Color: run 색상을 다른 사전 설정 색상 또는 사용자 지정 색상으로 변경합니다.
  • Search: 이름으로 Runs을 검색합니다. 이렇게 하면 플롯에서 보이는 Runs도 필터링됩니다.
  • Filter: 사이드바 필터를 사용하여 보이는 Runs 집합을 좁힙니다.
  • Group: 아키텍처별로 Runs을 동적으로 그룹화할 구성 열을 선택합니다. 그룹화하면 플롯에 평균 값을 따라 선이 표시되고 그래프에서 점의 분산에 대한 음영 영역이 표시됩니다.
  • Sort: 가장 낮은 손실 또는 가장 높은 정확도를 가진 Runs과 같이 Runs을 정렬할 값을 선택합니다. 정렬은 그래프에 표시되는 Runs에 영향을 미칩니다.
  • Expand button: 사이드바를 전체 테이블로 확장합니다.
  • Run count: 상단의 괄호 안의 숫자는 프로젝트의 총 Runs 수입니다. (N visualized) 숫자는 눈이 켜져 있고 각 플롯에서 시각화할 수 있는 Runs 수입니다. 아래 예에서 그래프는 183개의 Runs 중 처음 10개만 보여줍니다. 보이는 Runs의 최대 수를 늘리려면 그래프를 편집합니다.

Runs 탭에서 열을 고정, 숨기거나 순서를 변경하면 Runs 사이드바에 이러한 사용자 지정이 반영됩니다.

Panels layout: 이 스크래치 공간을 사용하여 결과를 탐색하고, 차트를 추가 및 제거하고, 다양한 메트릭을 기반으로 Models 버전을 비교합니다.

라이브 예제 보기

패널 섹션 추가

섹션 드롭다운 메뉴를 클릭하고 “섹션 추가"를 클릭하여 패널에 대한 새 섹션을 만듭니다. 섹션 이름을 바꾸고, 드래그하여 재구성하고, 섹션을 확장 및 축소할 수 있습니다.

각 섹션에는 오른쪽 상단 모서리에 다음과 같은 옵션이 있습니다.

  • Switch to custom layout: 사용자 지정 레이아웃을 사용하면 패널 크기를 개별적으로 조정할 수 있습니다.
  • Switch to standard layout: 표준 레이아웃을 사용하면 섹션의 모든 패널 크기를 한 번에 조정할 수 있으며 페이지 매김을 제공합니다.
  • Add section: 드롭다운 메뉴에서 위 또는 아래에 섹션을 추가하거나 페이지 하단의 버튼을 클릭하여 새 섹션을 추가합니다.
  • Rename section: 섹션 제목을 변경합니다.
  • Export section to report: 이 패널 섹션을 새 Report에 저장합니다.
  • Delete section: 전체 섹션과 모든 차트를 제거합니다. 페이지 하단의 워크스페이스 바에서 실행 취소 버튼으로 실행 취소할 수 있습니다.
  • Add panel: 더하기 버튼을 클릭하여 섹션에 패널을 추가합니다.

섹션 간에 패널 이동

패널을 드래그 앤 드롭하여 섹션으로 재정렬하고 구성합니다. 패널 오른쪽 상단 모서리에 있는 “이동” 버튼을 클릭하여 패널을 이동할 섹션을 선택할 수도 있습니다.

패널 크기 조정

  • Standard layout: 모든 패널은 동일한 크기를 유지하고 패널 페이지가 있습니다. 오른쪽 하단 모서리를 클릭하고 드래그하여 패널 크기를 조정할 수 있습니다. 섹션의 오른쪽 하단 모서리를 클릭하고 드래그하여 섹션 크기를 조정합니다.
  • Custom layout: 모든 패널의 크기는 개별적으로 조정되며 페이지가 없습니다.

메트릭 검색

워크스페이스의 검색 상자를 사용하여 패널을 필터링합니다. 이 검색은 기본적으로 시각화된 메트릭의 이름인 패널 제목과 일치합니다.

Runs 탭

Runs 탭을 사용하여 Runs을 필터링, 그룹화 및 정렬합니다.

다음 탭은 Runs 탭에서 수행할 수 있는 몇 가지 일반적인 작업을 보여줍니다.

Runs 탭은 프로젝트의 Runs에 대한 세부 정보를 보여줍니다. 기본적으로 많은 수의 열을 보여줍니다.

  • 보이는 모든 열을 보려면 페이지를 가로로 스크롤합니다.
  • 열 순서를 변경하려면 열을 왼쪽 또는 오른쪽으로 드래그합니다.
  • 열을 고정하려면 열 이름 위로 마우스를 가져간 다음 나타나는 작업 메뉴 ...을 클릭한 다음 열 고정을 클릭합니다. 고정된 열은 이름 열 뒤에 페이지 왼쪽에 가깝게 나타납니다. 고정된 열을 고정 해제하려면 열 고정 해제를 선택합니다.
  • 열을 숨기려면 열 이름 위로 마우스를 가져간 다음 나타나는 작업 메뉴 ...을 클릭한 다음 열 숨기기를 클릭합니다. 현재 숨겨진 모든 열을 보려면 을 클릭합니다.
    • 숨겨진 열의 이름을 클릭하여 숨김 해제합니다.
    • 보이는 열의 이름을 클릭하여 숨깁니다.
    • 보이는 열 옆에 있는 핀 아이콘을 클릭하여 고정합니다.

Runs 탭을 사용자 지정하면 사용자 지정은 Workspace 탭Runs 선택기에도 반영됩니다.

지정된 열의 값을 기준으로 테이블의 모든 행을 정렬합니다.

  1. 열 제목 위로 마우스를 가져갑니다. 케밥 메뉴(세 개의 세로 문서)가 나타납니다.
  2. 케밥 메뉴(세 개의 세로 점)에서 선택합니다.
  3. 행을 오름차순 또는 내림차순으로 정렬하려면 각각 오름차순 정렬 또는 내림차순 정렬을 선택합니다.
모델이 가장 자신 있게 '0'으로 추정한 숫자를 참조하세요.

위의 이미지는 val_acc라는 테이블 열에 대한 정렬 옵션을 보는 방법을 보여줍니다.

대시보드 왼쪽 상단에 있는 필터 버튼을 사용하여 표현식으로 모든 행을 필터링합니다.

모델이 잘못 인식하는 예만 참조하세요.

필터 추가를 선택하여 행에 하나 이상의 필터를 추가합니다. 세 개의 드롭다운 메뉴가 나타납니다. 왼쪽에서 오른쪽으로 필터 유형은 열 이름, 연산자 및 값을 기반으로 합니다.

열 이름 이항 관계
허용된 값 문자열 =, ≠, ≤, ≥, IN, NOT IN, 정수, 부동 소수점, 문자열, 타임스탬프, null

표현식 편집기는 열 이름과 논리적 술어 구조에 대한 자동 완성을 사용하여 각 용어에 대한 옵션 목록을 보여줍니다. “and” 또는 “or”(때로는 괄호)를 사용하여 여러 논리적 술어를 하나의 표현식으로 연결할 수 있습니다.

위의 이미지는 `val_loss` 열을 기반으로 하는 필터를 보여줍니다. 필터는 유효성 검사 손실이 1 이하인 Runs을 보여줍니다.

열 머리글에서 그룹화 기준 버튼을 사용하여 특정 열의 값을 기준으로 모든 행을 그룹화합니다.

진실 분포는 작은 오류를 보여줍니다. 8과 2는 7과 9로, 9는 2로 착각합니다.

기본적으로 이렇게 하면 다른 숫자 열이 해당 그룹 전체의 해당 열에 대한 값 분포를 보여주는 히스토그램으로 바뀝니다. 그룹화는 데이터에서 상위 수준 패턴을 이해하는 데 유용합니다.

Reports 탭

결과의 모든 스냅샷을 한 곳에서 보고 팀과 발견한 내용을 공유하세요.

Sweeps 탭

프로젝트에서 새 sweep을 시작합니다.

Artifacts 탭

트레이닝 데이터셋 및 파인튜닝된 Models에서 메트릭 및 미디어 테이블에 이르기까지 프로젝트와 연결된 모든 Artifacts를 봅니다.

Overview 패널

Overview 패널에서는 아티팩트 이름과 버전, 변경 사항을 감지하고 중복을 방지하는 데 사용되는 해시 다이제스트, 생성 날짜, 에일리어스를 포함하여 아티팩트에 대한 다양한 고급 정보를 찾을 수 있습니다. 여기서 에일리어스를 추가하거나 제거하고 버전과 아티팩트 전체에 대한 메모를 작성할 수 있습니다.

Metadata 패널

Metadata 패널은 아티팩트가 구성될 때 제공되는 아티팩트의 메타데이터에 대한 엑세스를 제공합니다. 이 메타데이터에는 아티팩트를 재구성하는 데 필요한 구성 인수, 더 많은 정보를 찾을 수 있는 URL 또는 아티팩트를 기록한 run 중에 생성된 메트릭이 포함될 수 있습니다. 또한 아티팩트를 생성한 run에 대한 구성과 아티팩트를 로깅할 당시의 기록 메트릭을 볼 수 있습니다.

Usage 패널

Usage 패널은 예를 들어 로컬 머신에서 웹 앱 외부에서 사용할 수 있도록 아티팩트를 다운로드하기 위한 코드 조각을 제공합니다. 이 섹션은 또한 아티팩트를 출력하는 run과 아티팩트를 입력으로 사용하는 모든 Runs을 나타내고 링크합니다.

Files 패널

Files 패널은 아티팩트와 연결된 파일 및 폴더를 나열합니다. W&B는 run에 대한 특정 파일을 자동으로 업로드합니다. 예를 들어 requirements.txt는 run에서 사용된 각 라이브러리의 버전을 보여주고 wandb-metadata.jsonwandb-summary.json에는 run에 대한 정보가 포함되어 있습니다. 다른 파일은 run의 구성에 따라 아티팩트 또는 미디어와 같이 업로드될 수 있습니다. 이 파일 트리를 탐색하고 W&B 웹 앱에서 직접 내용을 볼 수 있습니다.

아티팩트와 연결된 테이블은 특히 풍부하고 대화형입니다. Artifacts와 함께 테이블을 사용하는 방법에 대해 자세히 알아보려면 여기를 참조하세요.

Lineage 패널

Lineage 패널은 프로젝트와 연결된 모든 아티팩트와 서로 연결하는 Runs에 대한 뷰를 제공합니다. run 유형을 블록으로, 아티팩트를 원으로 표시하고 화살표를 사용하여 지정된 유형의 run이 지정된 유형의 아티팩트를 소비하거나 생성하는 시기를 나타냅니다. 왼쪽 열에서 선택한 특정 아티팩트의 유형이 강조 표시됩니다.

개별 아티팩트 버전과 연결하는 특정 Runs을 모두 보려면 Explode 토글을 클릭합니다.

Action History Audit 탭

작업 기록 감사 탭은 리소스의 전체 진화를 감사할 수 있도록 컬렉션에 대한 모든 에일리어스 작업과 멤버십 변경 사항을 보여줍니다.

Versions 탭

Versions 탭은 아티팩트의 모든 버전과 버전을 로깅할 당시의 Run History의 각 숫자 값에 대한 열을 보여줍니다. 이를 통해 성능을 비교하고 관심 있는 버전을 빠르게 식별할 수 있습니다.

프로젝트에 별표 표시

프로젝트에 별표를 추가하여 해당 프로젝트를 중요하다고 표시합니다. 사용자와 팀이 별표로 중요하다고 표시한 프로젝트는 조직의 홈페이지 상단에 나타납니다.

예를 들어, 다음 이미지는 중요하다고 표시된 두 개의 프로젝트인 zoo_experimentregistry_demo를 보여줍니다. 두 프로젝트 모두 Starred projects 섹션 내에서 조직의 홈페이지 상단에 나타납니다.

프로젝트를 중요하다고 표시하는 방법에는 프로젝트의 Overview 탭 내에서 또는 팀의 프로필 페이지 내에서 두 가지가 있습니다.

  1. W&B 앱의 https://wandb.ai/<team>/<project-name>에서 W&B 프로젝트로 이동합니다.
  2. 프로젝트 사이드바에서 Overview 탭을 선택합니다.
  3. 오른쪽 상단 모서리에 있는 편집 버튼 옆에 있는 별표 아이콘을 선택합니다.
  1. https://wandb.ai/<team>/projects에서 팀의 프로필 페이지로 이동합니다.
  2. Projects 탭을 선택합니다.
  3. 별표를 표시할 프로젝트 옆으로 마우스를 가져갑니다. 나타나는 별표 아이콘을 클릭합니다.

예를 들어, 다음 이미지는 “Compare_Zoo_Models” 프로젝트 옆에 있는 별표 아이콘을 보여줍니다.

앱의 왼쪽 상단 모서리에 있는 조직 이름을 클릭하여 프로젝트가 조직의 랜딩 페이지에 나타나는지 확인합니다.

프로젝트 삭제

Overview 탭의 오른쪽에 있는 세 개의 점을 클릭하여 프로젝트를 삭제할 수 있습니다.

프로젝트가 비어 있으면 오른쪽 상단의 드롭다운 메뉴를 클릭하고 프로젝트 삭제를 선택하여 삭제할 수 있습니다.

프로젝트에 노트 추가

설명 개요 또는 Workspace 내의 마크다운 패널로 프로젝트에 노트를 추가합니다.

프로젝트에 설명 개요 추가

페이지에 추가하는 설명은 프로필의 Overview 탭에 나타납니다.

  1. W&B 프로젝트로 이동합니다.
  2. 프로젝트 사이드바에서 Overview 탭을 선택합니다.
  3. 오른쪽 상단 모서리에서 편집을 선택합니다.
  4. Description 필드에 노트를 추가합니다.
  5. Save 버튼을 선택합니다.

Run Workspace에 노트 추가

  1. W&B 프로젝트로 이동합니다.
  2. 프로젝트 사이드바에서 Workspace 탭을 선택합니다.
  3. 오른쪽 상단 모서리에서 패널 추가 버튼을 선택합니다.
  4. 나타나는 모달에서 TEXT AND CODE 드롭다운을 선택합니다.
  5. Markdown을 선택합니다.
  6. Workspace에 나타나는 마크다운 패널에 노트를 추가합니다.

2.1.4 - View experiments results

대화형 시각화로 run 데이터를 탐색할 수 있는 플레이그라운드

W&B 워크스페이스는 차트를 사용자 정의하고 모델 결과를 탐색할 수 있는 개인 샌드박스입니다. W&B 워크스페이스는 테이블패널 섹션 으로 구성됩니다.

  • 테이블: 프로젝트에 기록된 모든 run이 프로젝트 테이블에 나열됩니다. Run을 켜고 끄고, 색상을 변경하고, 테이블을 확장하여 각 run에 대한 메모, 구성 및 요약 메트릭을 확인합니다.
  • 패널 섹션: 하나 이상의 패널을 포함하는 섹션입니다. 새 패널을 만들고, 구성하고, 리포트로 내보내 워크스페이스의 스냅샷을 저장합니다.

워크스페이스 유형

주요 워크스페이스 범주에는 개인 워크스페이스저장된 뷰 의 두 가지가 있습니다.

  • 개인 워크스페이스: 모델 및 데이터 시각화에 대한 심층 분석을 위한 사용자 정의 가능한 워크스페이스입니다. 워크스페이스 소유자만 변경 사항을 편집하고 저장할 수 있습니다. 팀원은 개인 워크스페이스를 볼 수 있지만 다른 사람의 개인 워크스페이스는 변경할 수 없습니다.
  • 저장된 뷰: 저장된 뷰는 워크스페이스의 협업 스냅샷입니다. 팀의 모든 구성원이 저장된 워크스페이스 뷰를 보고, 편집하고, 변경 사항을 저장할 수 있습니다. 저장된 워크스페이스 뷰를 사용하여 Experiments, Runs 등을 검토하고 논의합니다.

다음 이미지는 Cécile-parker의 팀원이 만든 여러 개인 워크스페이스를 보여줍니다. 이 프로젝트에는 저장된 뷰가 없습니다.

저장된 워크스페이스 뷰

맞춤형 워크스페이스 뷰로 팀 협업을 개선하십시오. 저장된 뷰를 만들어 차트 및 데이터의 기본 설정을 구성합니다.

새 저장된 워크스페이스 뷰 만들기

  1. 개인 워크스페이스 또는 저장된 뷰로 이동합니다.
  2. 워크스페이스를 편집합니다.
  3. 워크스페이스 오른쪽 상단에 있는 미트볼 메뉴 (가로 점 3개) 를 클릭합니다. 새 뷰로 저장 을 클릭합니다.

새로운 저장된 뷰가 워크스페이스 탐색 메뉴에 나타납니다.

저장된 워크스페이스 뷰 업데이트

저장된 변경 사항은 저장된 뷰의 이전 상태를 덮어씁니다. 저장되지 않은 변경 사항은 유지되지 않습니다. W&B에서 저장된 워크스페이스 뷰를 업데이트하려면:

  1. 저장된 뷰로 이동합니다.
  2. 워크스페이스 내에서 차트 및 데이터에 원하는 변경 사항을 적용합니다.
  3. 저장 버튼을 클릭하여 변경 사항을 확인합니다.

저장된 워크스페이스 뷰 삭제

더 이상 필요하지 않은 저장된 뷰를 제거합니다.

  1. 제거할 저장된 뷰로 이동합니다.
  2. 뷰 오른쪽 상단의 가로선 3개 () 를 선택합니다.
  3. 뷰 삭제 를 선택합니다.
  4. 삭제를 확인하여 워크스페이스 메뉴에서 뷰를 제거합니다.

워크스페이스 뷰 공유

워크스페이스 URL을 직접 공유하여 사용자 정의된 워크스페이스를 팀과 공유합니다. 워크스페이스 프로젝트에 엑세스할 수 있는 모든 사용자는 해당 워크스페이스의 저장된 뷰를 볼 수 있습니다.

프로그래밍 방식으로 워크스페이스 만들기

wandb-workspacesW&B 워크스페이스 및 리포트를 프로그래밍 방식으로 작업하기 위한 Python 라이브러리입니다.

wandb-workspaces 로 프로그래밍 방식으로 워크스페이스를 정의합니다. wandb-workspacesW&B 워크스페이스 및 리포트를 프로그래밍 방식으로 작업하기 위한 Python 라이브러리입니다.

다음과 같은 워크스페이스 속성을 정의할 수 있습니다.

  • 패널 레이아웃, 색상 및 섹션 순서를 설정합니다.
  • 기본 x축, 섹션 순서 및 축소 상태와 같은 워크스페이스 설정을 구성합니다.
  • 섹션 내에 패널을 추가하고 사용자 정의하여 워크스페이스 뷰를 구성합니다.
  • URL을 사용하여 기존 워크스페이스를 로드하고 수정합니다.
  • 기존 워크스페이스에 대한 변경 사항을 저장하거나 새 뷰로 저장합니다.
  • 간단한 표현식을 사용하여 Runs을 프로그래밍 방식으로 필터링, 그룹화 및 정렬합니다.
  • 색상 및 가시성과 같은 설정으로 Run 모양을 사용자 정의합니다.
  • 통합 및 재사용을 위해 한 워크스페이스에서 다른 워크스페이스로 뷰를 복사합니다.

워크스페이스 API 설치

wandb 외에도 wandb-workspaces 를 설치해야 합니다.

pip install wandb wandb-workspaces

프로그래밍 방식으로 워크스페이스 뷰를 정의하고 저장합니다.

import wandb_workspaces.reports.v2 as wr

workspace = ws.Workspace(entity="your-entity", project="your-project", views=[...])
workspace.save()

기존 뷰 편집

existing_workspace = ws.Workspace.from_url("workspace-url")
existing_workspace.views[0] = ws.View(name="my-new-view", sections=[...])
existing_workspace.save()

워크스페이스 saved view 를 다른 워크스페이스로 복사합니다.

old_workspace = ws.Workspace.from_url("old-workspace-url")
old_workspace_view = old_workspace.views[0]
new_workspace = ws.Workspace(entity="new-entity", project="new-project", views=[old_workspace_view])

new_workspace.save()

종합적인 워크스페이스 API 예제는 wandb-workspace examples 를 참조하십시오. 엔드 투 엔드 튜토리얼은 Programmatic Workspaces 튜토리얼을 참조하십시오.

2.1.5 - What are runs?

W&B의 기본 구성 요소인 Runs에 대해 알아보세요.

W&B에서 run은 로그된 단일 연산 단위입니다. W&B run을 전체 프로젝트의 원자적 요소로 생각할 수 있습니다. 다시 말해, 각 run은 모델 트레이닝 및 결과 로깅, 하이퍼파라미터 스윕 등과 같은 특정 연산의 기록입니다.

run을 시작하는 일반적인 패턴은 다음을 포함하지만 이에 국한되지는 않습니다.

  • 모델 트레이닝
  • 하이퍼파라미터를 변경하고 새로운 실험 수행
  • 다른 모델로 새로운 기계학습 실험 수행
  • W&B Artifacts로 데이터 또는 모델 로깅
  • W&B Artifacts 다운로드

W&B는 생성한 run을 프로젝트에 저장합니다. W&B 앱 UI에서 run과 해당 속성을 run의 프로젝트 워크스페이스 내에서 볼 수 있습니다. wandb.Api.Run 오브젝트를 사용하여 run 속성에 프로그래밍 방식으로 엑세스할 수도 있습니다.

run.log로 로그하는 모든 내용은 해당 run에 기록됩니다. 다음 코드 조각을 살펴보십시오.

import wandb

run = wandb.init(entity="nico", project="awesome-project")
run.log({"accuracy": 0.9, "loss": 0.1})

첫 번째 줄은 W&B Python SDK를 임포트합니다. 두 번째 줄은 엔터티 nico 아래의 프로젝트 awesome-project에서 run을 초기화합니다. 세 번째 줄은 모델의 정확도와 손실을 해당 run에 기록합니다.

터미널 내에서 W&B는 다음을 반환합니다.

wandb: Syncing run earnest-sunset-1
wandb: ⭐️ View project at https://wandb.ai/nico/awesome-project
wandb: 🚀 View run at https://wandb.ai/nico/awesome-project/runs/1jx1ud12
wandb:                                                                                
wandb: 
wandb: Run history:
wandb: accuracy  
wandb:     loss  
wandb: 
wandb: Run summary:
wandb: accuracy 0.9
wandb:     loss 0.5
wandb: 
wandb: 🚀 View run earnest-sunset-1 at: https://wandb.ai/nico/awesome-project/runs/1jx1ud12
wandb: ⭐️ View project at: https://wandb.ai/nico/awesome-project
wandb: Synced 6 W&B file(s), 0 media file(s), 0 artifact file(s) and 0 other file(s)
wandb: Find logs at: ./wandb/run-20241105_111006-1jx1ud12/logs

터미널에서 W&B가 반환하는 URL은 W&B 앱 UI에서 run의 워크스페이스로 리디렉션합니다. 워크스페이스에서 생성된 패널은 단일 지점에 해당합니다.

단일 시점에 메트릭을 로깅하는 것은 그다지 유용하지 않을 수 있습니다. 판별 모델 트레이닝의 경우 더 현실적인 예는 메트릭을 정기적인 간격으로 로깅하는 것입니다. 예를 들어, 다음 코드 조각을 살펴보십시오.

epochs = 10
lr = 0.01

run = wandb.init(
    entity="nico",
    project="awesome-project",
    config={
        "learning_rate": lr,
        "epochs": epochs,
    },
)

offset = random.random() / 5

# simulating a training run
for epoch in range(epochs):
    acc = 1 - 2**-epoch - random.random() / (epoch + 1) - offset
    loss = 2**-epoch + random.random() / (epoch + 1) + offset
    print(f"epoch={epoch}, accuracy={acc}, loss={loss}")
    run.log({"accuracy": acc, "loss": loss})

다음 출력을 반환합니다.

wandb: Syncing run jolly-haze-4
wandb: ⭐️ View project at https://wandb.ai/nico/awesome-project
wandb: 🚀 View run at https://wandb.ai/nico/awesome-project/runs/pdo5110r
lr: 0.01
epoch=0, accuracy=-0.10070974957523078, loss=1.985328507123956
epoch=1, accuracy=0.2884687745057535, loss=0.7374362314407752
epoch=2, accuracy=0.7347387967382066, loss=0.4402409835486663
epoch=3, accuracy=0.7667969248039795, loss=0.26176963846423457
epoch=4, accuracy=0.7446848791003173, loss=0.24808611724405083
epoch=5, accuracy=0.8035095836268268, loss=0.16169791827329466
epoch=6, accuracy=0.861349032371624, loss=0.03432578493587426
epoch=7, accuracy=0.8794926436276016, loss=0.10331872172219471
epoch=8, accuracy=0.9424839917077272, loss=0.07767793473500445
epoch=9, accuracy=0.9584880427028566, loss=0.10531971149250456
wandb: 🚀 View run jolly-haze-4 at: https://wandb.ai/nico/awesome-project/runs/pdo5110r
wandb: Find logs at: wandb/run-20241105_111816-pdo5110r/logs

트레이닝 스크립트는 run.log를 10번 호출합니다. 스크립트가 run.log를 호출할 때마다 W&B는 해당 에포크의 정확도와 손실을 기록합니다. W&B가 이전 출력에서 출력하는 URL을 선택하면 W&B 앱 UI에서 run의 워크스페이스로 이동합니다.

스크립트가 wandb.init 메서드를 한 번만 호출하기 때문에 W&B는 시뮬레이션된 트레이닝 루프를 jolly-haze-4라는 단일 run 내에서 캡처합니다.

또 다른 예로, 스윕 중에 W&B는 사용자가 지정한 하이퍼파라미터 검색 공간을 탐색합니다. W&B는 스윕이 생성하는 각 새로운 하이퍼파라미터 조합을 고유한 run으로 구현합니다.

Run 초기화

wandb.init()로 W&B run을 초기화합니다. 다음 코드 조각은 W&B Python SDK를 임포트하고 run을 초기화하는 방법을 보여줍니다.

각도 괄호(<>)로 묶인 값을 사용자 고유의 값으로 바꾸십시오.

import wandb

run = wandb.init(entity="<entity>", project="<project>")

run을 초기화할 때 W&B는 프로젝트 필드에 지정한 프로젝트(wandb.init(project="<project>"))에 run을 기록합니다. W&B는 프로젝트가 아직 존재하지 않으면 새 프로젝트를 만듭니다. 프로젝트가 이미 존재하는 경우 W&B는 해당 프로젝트에 run을 저장합니다.

W&B의 각 run에는 run ID라고 하는 고유 식별자가 있습니다. 고유 ID를 지정하거나 W&B가 임의로 ID를 생성하도록 할 수 있습니다.

각 run에는 사람이 읽을 수 있는 run 이름이라고 하는 고유하지 않은 식별자도 있습니다. run 이름을 지정하거나 W&B가 임의로 이름을 생성하도록 할 수 있습니다.

예를 들어, 다음 코드 조각을 살펴보십시오.

import wandb

run = wandb.init(entity="wandbee", project="awesome-project")

코드 조각은 다음 출력을 생성합니다.

🚀 View run exalted-darkness-6 at: 
https://wandb.ai/nico/awesome-project/runs/pgbn9y21
Find logs at: wandb/run-20241106_090747-pgbn9y21/logs

이전 코드는 id 파라미터에 대한 인수를 지정하지 않았으므로 W&B는 고유한 run ID를 만듭니다. 여기서 nico는 run을 기록한 엔터티이고, awesome-project는 run이 기록된 프로젝트의 이름이고, exalted-darkness-6은 run의 이름이고, pgbn9y21은 run ID입니다.

각 run에는 run의 현재 상태를 설명하는 상태가 있습니다. 가능한 run 상태의 전체 목록은 Run 상태를 참조하십시오.

Run 상태

다음 표는 run이 가질 수 있는 가능한 상태를 설명합니다.

상태 설명
Finished run이 종료되고 데이터가 완전히 동기화되었거나 wandb.finish()가 호출되었습니다.
Failed run이 0이 아닌 종료 상태로 종료되었습니다.
Crashed run이 내부 프로세스에서 하트비트 전송을 중단했습니다. 이는 머신이 충돌할 경우 발생할 수 있습니다.
Running run이 여전히 실행 중이며 최근에 하트비트를 전송했습니다.

고유한 run 식별자

Run ID는 run에 대한 고유 식별자입니다. 기본적으로 W&B는 새 run을 초기화할 때 임의의 고유한 run ID를 생성합니다. run을 초기화할 때 고유한 run ID를 지정할 수도 있습니다.

자동 생성된 run ID

run을 초기화할 때 run ID를 지정하지 않으면 W&B는 임의의 run ID를 생성합니다. W&B 앱 UI에서 run의 고유 ID를 찾을 수 있습니다.

  1. https://wandb.ai/home에서 W&B 앱 UI로 이동합니다.
  2. run을 초기화할 때 지정한 W&B 프로젝트로 이동합니다.
  3. 프로젝트의 워크스페이스 내에서 Runs 탭을 선택합니다.
  4. Overview 탭을 선택합니다.

W&B는 Run path 필드에 고유한 run ID를 표시합니다. run 경로는 팀 이름, 프로젝트 이름 및 run ID로 구성됩니다. 고유 ID는 run 경로의 마지막 부분입니다.

예를 들어, 다음 이미지에서 고유한 run ID는 9mxi1arc입니다.

사용자 지정 run ID

id 파라미터를 wandb.init 메서드에 전달하여 사용자 고유의 run ID를 지정할 수 있습니다.

import wandb

run = wandb.init(entity="<project>", project="<project>", id="<run-id>")

run의 고유 ID를 사용하여 W&B 앱 UI에서 run의 Overview 페이지로 직접 이동할 수 있습니다. 다음 셀은 특정 run에 대한 URL 경로를 보여줍니다.

https://wandb.ai/<entity>/<project>/<run-id>

각도 괄호(<>)로 묶인 값은 엔터티, 프로젝트 및 run ID의 실제 값에 대한 자리 표시자입니다.

Run 이름 지정

run 이름은 사람이 읽을 수 있는 고유하지 않은 식별자입니다.

기본적으로 W&B는 새 run을 초기화할 때 임의의 run 이름을 생성합니다. run 이름은 프로젝트의 워크스페이스 내와 run의 Overview 페이지 상단에 나타납니다.

name 파라미터를 wandb.init 메서드에 전달하여 run 이름을 지정할 수 있습니다.

import wandb

run = wandb.init(entity="<project>", project="<project>", name="<run-name>")

Run에 노트 추가

특정 run에 추가하는 노트는 Overview 탭의 run 페이지와 프로젝트 페이지의 run 테이블에 나타납니다.

  1. W&B 프로젝트로 이동합니다.
  2. 프로젝트 사이드바에서 Workspace 탭을 선택합니다.
  3. 노트를 추가할 run을 run 선택기에서 선택합니다.
  4. Overview 탭을 선택합니다.
  5. Description 필드 옆에 있는 연필 아이콘을 선택하고 노트를 추가합니다.

Run 중지

W&B 앱 또는 프로그래밍 방식으로 run을 중지합니다.

  1. run을 초기화한 터미널 또는 코드 편집기로 이동합니다.
  2. Ctrl+D를 눌러 run을 중지합니다.

예를 들어, 이전 지침을 따르면 터미널이 다음과 유사하게 보일 수 있습니다.

KeyboardInterrupt
wandb: 🚀 View run legendary-meadow-2 at: https://wandb.ai/nico/history-blaster-4/runs/o8sdbztv
wandb: Synced 5 W&B file(s), 0 media file(s), 0 artifact file(s) and 1 other file(s)
wandb: Find logs at: ./wandb/run-20241106_095857-o8sdbztv/logs

W&B 앱 UI로 이동하여 run이 더 이상 활성 상태가 아닌지 확인합니다.

  1. run이 기록되고 있는 프로젝트로 이동합니다.
  2. run 이름을 선택합니다.
3. 프로젝트 사이드바에서 **Overview** 탭을 선택합니다.

State 필드 옆에 있는 run의 상태가 running에서 Killed로 변경됩니다.

  1. run이 기록되고 있는 프로젝트로 이동합니다.
  2. run 선택기 내에서 중지할 run을 선택합니다.
  3. 프로젝트 사이드바에서 Overview 탭을 선택합니다.
  4. State 필드 옆에 있는 맨 위 버튼을 선택합니다.

State 필드 옆에 있는 run의 상태가 running에서 Killed로 변경됩니다.

가능한 run 상태의 전체 목록은 상태 필드를 참조하십시오.

기록된 Run 보기

Run 상태, run에 기록된 Artifacts, run 중에 기록된 로그 파일 등과 같은 특정 run에 대한 정보를 봅니다.

특정 run을 보려면 다음을 수행하십시오.

  1. https://wandb.ai/home에서 W&B 앱 UI로 이동합니다.

  2. run을 초기화할 때 지정한 W&B 프로젝트로 이동합니다.

  3. 프로젝트 사이드바 내에서 Workspace 탭을 선택합니다.

  4. run 선택기 내에서 보려는 run을 클릭하거나 일치하는 run을 필터링하기 위해 run 이름의 일부를 입력합니다.

    기본적으로 긴 run 이름은 가독성을 위해 중간에서 잘립니다. 대신 run 이름을 시작 또는 끝에서 자르려면 run 목록 상단에 있는 작업 ... 메뉴를 클릭한 다음 Run name cropping을 설정하여 끝, 중간 또는 시작을 자릅니다.

특정 run의 URL 경로는 다음 형식을 갖습니다.

https://wandb.ai/<team-name>/<project-name>/runs/<run-id>

각도 괄호(<>)로 묶인 값은 팀 이름, 프로젝트 이름 및 run ID의 실제 값에 대한 자리 표시자입니다.

Overview 탭

Overview 탭을 사용하여 프로젝트에서 다음과 같은 특정 run 정보를 알아봅니다.

  • Author: run을 만드는 W&B 엔터티입니다.
  • Command: run을 초기화하는 코맨드입니다.
  • Description: 사용자가 제공한 run에 대한 설명입니다. run을 만들 때 설명을 지정하지 않으면 이 필드는 비어 있습니다. W&B 앱 UI를 사용하거나 Python SDK를 사용하여 프로그래밍 방식으로 run에 설명을 추가할 수 있습니다.
  • Duration: run이 일시 중지 또는 대기 시간을 제외하고 활발하게 연산하거나 데이터를 로깅하는 데 걸리는 시간입니다.
  • Git repository: run과 연결된 Git 리포지토리입니다. 이 필드를 보려면 Git을 활성화해야 합니다.
  • Host name: W&B가 run을 연산하는 위치입니다. 머신에서 로컬로 run을 초기화하는 경우 W&B는 머신 이름을 표시합니다.
  • Name: run 이름입니다.
  • OS: run을 초기화하는 운영 체제입니다.
  • Python executable: run을 시작하는 코맨드입니다.
  • Python version: run을 만드는 Python 버전을 지정합니다.
  • Run path: entity/project/run-ID 형식으로 고유한 run 식별자를 식별합니다.
  • Runtime: run 시작부터 종료까지의 총 시간을 측정합니다. run에 대한 실제 시간입니다. Runtime에는 run이 일시 중지되거나 리소스를 기다리는 시간이 포함되지만 Duration에는 포함되지 않습니다.
  • Start time: run을 초기화한 타임스탬프입니다.
  • State: run 상태입니다.
  • System hardware: W&B가 run을 연산하는 데 사용하는 하드웨어입니다.
  • Tags: 문자열 목록입니다. 태그는 관련 run을 함께 구성하거나 베이스라인 또는 프로덕션과 같은 임시 레이블을 적용하는 데 유용합니다.
  • W&B CLI version: run 코맨드를 호스팅한 머신에 설치된 W&B CLI 버전입니다.

W&B는 Overview 섹션 아래에 다음 정보를 저장합니다.

  • Artifact Outputs: run에서 생성된 Artifacts 출력입니다.
  • Config: wandb.config로 저장된 구성 파라미터 목록입니다.
  • Summary: wandb.log()로 저장된 요약 파라미터 목록입니다. 기본적으로 W&B는 이 값을 마지막으로 기록된 값으로 설정합니다.
W&B 대시보드 run Overview 탭

여기에서 프로젝트 Overview의 예를 봅니다.

Workspace 탭

Workspace 탭을 사용하여 자동 생성된 플롯 및 사용자 지정 플롯, 시스템 메트릭 등과 같은 시각화를 보고, 검색하고, 그룹화하고, 정렬합니다.

여기에서 프로젝트 워크스페이스의 예를 봅니다.

Runs 탭

Runs 탭을 사용하여 run을 필터링, 그룹화 및 정렬합니다.

다음 탭은 Runs 탭에서 수행할 수 있는 몇 가지 일반적인 작업을 보여줍니다.

Runs 탭에는 프로젝트의 run에 대한 세부 정보가 표시됩니다. 기본적으로 많은 열이 표시됩니다.

  • 표시되는 모든 열을 보려면 페이지를 가로로 스크롤합니다.
  • 열 순서를 변경하려면 열을 왼쪽이나 오른쪽으로 드래그합니다.
  • 열을 고정하려면 열 이름 위로 마우스를 가져간 다음 나타나는 작업 메뉴 ...를 클릭하고 Pin column을 클릭합니다. 고정된 열은 Name 열 뒤에 페이지 왼쪽에 가깝게 나타납니다. 고정된 열을 고정 해제하려면 Unpin column을 선택합니다.
  • 열을 숨기려면 열 이름 위로 마우스를 가져간 다음 나타나는 작업 메뉴 ...를 클릭하고 Hide column을 클릭합니다. 현재 숨겨진 모든 열을 보려면 Columns를 클릭합니다.
    • 숨겨진 열 이름을 클릭하여 숨김을 해제합니다.
    • 보이는 열 이름을 클릭하여 숨깁니다.
    • 보이는 열 옆에 있는 핀 아이콘을 클릭하여 고정합니다.

Runs 탭을 사용자 지정하면 사용자 지정이 Workspace 탭Runs 선택기에 반영됩니다.

지정된 열의 값을 기준으로 테이블의 모든 행을 정렬합니다.

  1. 마우스를 열 제목 위로 가져갑니다. 케밥 메뉴(세 개의 세로 문서)가 나타납니다.
  2. 케밥 메뉴(세 개의 세로 점)를 선택합니다.
  3. Sort Asc 또는 Sort Desc를 선택하여 행을 각각 오름차순 또는 내림차순으로 정렬합니다.
모델이 '0'이라고 가장 확신을 가지고 추측한 숫자를 확인하십시오.

위의 이미지는 val_acc라는 테이블 열에 대한 정렬 옵션을 보는 방법을 보여줍니다.

대시보드 위의 Filter 버튼으로 표현식을 사용하여 모든 행을 필터링합니다.

모델이 잘못 이해하는 예만 참조하십시오.

Add filter를 선택하여 행에 하나 이상의 필터를 추가합니다. 세 개의 드롭다운 메뉴가 나타납니다. 왼쪽에서 오른쪽으로 필터 유형은 열 이름, 연산자 및 값을 기준으로 합니다.

열 이름 이항 관계
허용된 값 String =, ≠, ≤, ≥, IN, NOT IN, Integer, float, string, 타임스탬프, null

표현식 편집기는 열 이름과 논리적 술어 구조에 대한 자동 완성 기능을 사용하여 각 용어에 대한 옵션 목록을 보여줍니다. “and” 또는 “or”(때로는 괄호)를 사용하여 여러 논리적 술어를 하나의 표현식으로 연결할 수 있습니다.

위의 이미지는 `val_loss` 열을 기준으로 하는 필터를 보여줍니다. 필터는 유효성 검사 손실이 1 이하인 run을 보여줍니다.

대시보드 위의 Group by 버튼을 사용하여 특정 열의 값을 기준으로 모든 행을 그룹화합니다.

진실 분포는 작은 오류를 보여줍니다. 8과 2는 7과 9로, 2는 2로 혼동됩니다.

기본적으로 이렇게 하면 다른 숫자 열이 해당 그룹 전체의 해당 열에 대한 값 분포를 보여주는 히스토그램으로 바뀝니다. 그룹화는 데이터에서 상위 수준 패턴을 이해하는 데 유용합니다.

System 탭

System 탭은 CPU 사용률, 시스템 메모리, 디스크 I/O, 네트워크 트래픽, GPU 사용률 등과 같은 특정 run에 대해 추적된 시스템 메트릭을 보여줍니다.

W&B가 추적하는 시스템 메트릭의 전체 목록은 시스템 메트릭을 참조하십시오.

여기에서 시스템 탭의 예를 봅니다.

Logs 탭

Log 탭은 표준 출력(stdout) 및 표준 오류(stderr)와 같은 코맨드라인에 출력된 내용을 보여줍니다.

로그 파일을 다운로드하려면 오른쪽 상단 모서리에 있는 Download 버튼을 선택합니다.

여기에서 로그 탭의 예를 봅니다.

Files 탭

Files 탭을 사용하여 모델 체크포인트, 검증 세트 예제 등과 같은 특정 run과 연결된 파일을 봅니다.

여기에서 파일 탭의 예를 봅니다.

Artifacts 탭

Artifacts 탭에는 지정된 run에 대한 입력 및 출력 artifacts가 나열됩니다.

여기에서 artifacts 탭의 예를 봅니다.

Run 삭제

W&B 앱으로 프로젝트에서 하나 이상의 run을 삭제합니다.

  1. 삭제할 run이 포함된 프로젝트로 이동합니다.
  2. 프로젝트 사이드바에서 Runs 탭을 선택합니다.
  3. 삭제할 run 옆에 있는 확인란을 선택합니다.
  4. 테이블 위에 있는 Delete 버튼(휴지통 아이콘)을 선택합니다.
  5. 나타나는 모달에서 Delete를 선택합니다.

Run 구성

이 섹션에서는 그룹 및 job 유형을 사용하여 run을 구성하는 방법에 대한 지침을 제공합니다. run을 그룹(예: 실험 이름)에 할당하고 job 유형(예: 전처리, 트레이닝, 평가, 디버깅)을 지정하면 워크플로우를 간소화하고 모델 비교를 개선할 수 있습니다.

Run에 그룹 또는 Job 유형 할당

W&B의 각 run은 그룹Job 유형으로 분류할 수 있습니다.

  • Group: 실험에 대한 광범위한 범주로, run을 구성하고 필터링하는 데 사용됩니다.
  • Job 유형: 전처리, 트레이닝 또는 평가와 같은 run의 기능입니다.

다음 예제 워크스페이스는 Fashion-MNIST 데이터셋에서 점점 더 많은 양의 데이터를 사용하여 베이스라인 모델을 트레이닝합니다. 워크스페이스는 색상을 사용하여 사용된 데이터 양을 나타냅니다.

  • 노란색에서 진한 녹색은 베이스라인 모델에 대해 점점 더 많은 양의 데이터를 나타냅니다.
  • 밝은 파란색에서 보라색에서 마젠타색은 추가 파라미터가 있는 더 복잡한 “이중” 모델에 대한 데이터 양을 나타냅니다.

W&B의 필터링 옵션과 검색 창을 사용하여 다음과 같은 특정 조건을 기준으로 run을 비교합니다.

  • 동일한 데이터셋에서 트레이닝합니다.
  • 동일한 테스트 세트에서 평가합니다.

필터를 적용하면 Table 보기가 자동으로 업데이트됩니다. 이렇게 하면 모델 간의 성능 차이를 식별할 수 있습니다(예: 특정 클래스가 다른 모델에 비해 훨씬 더 어려운지 확인).

2.1.5.1 - Add labels to runs with tags

로그된 메트릭 또는 아티팩트 데이터에서 명확하지 않을 수 있는 특정 기능으로 Runs에 레이블을 지정하려면 태그를 추가하세요.

예를 들어, Run의 모델이 in_production임을 나타내거나, 해당 Run이 preemptible인지, 이 Run이 baseline을 나타내는지 등을 나타내는 태그를 Run에 추가할 수 있습니다.

하나 이상의 Runs에 태그 추가

프로그래밍 방식으로 또는 대화형으로 Runs에 태그를 추가합니다.

사용 사례에 따라 필요에 가장 적합한 아래 탭을 선택하세요.

Run이 생성될 때 태그를 추가할 수 있습니다.

import wandb

run = wandb.init(
  entity="entity",
  project="<project-name>",
  tags=["tag1", "tag2"]
)

Run을 초기화한 후 태그를 업데이트할 수도 있습니다. 예를 들어, 다음 코드 조각은 특정 메트릭이 미리 정의된 임계값을 넘는 경우 태그를 업데이트하는 방법을 보여줍니다.

import wandb

run = wandb.init(
  entity="entity", 
  project="capsules", 
  tags=["debug"]
  )

# 모델을 훈련하는 파이썬 로직

if current_loss < threshold:
    run.tags = run.tags + ("release_candidate",)

Run을 생성한 후에는 Public API를 사용하여 태그를 업데이트할 수 있습니다. 예를 들면 다음과 같습니다.

run = wandb.Api().run("{entity}/{project}/{run-id}")
run.tags.append("tag1")  # 여기에서 Run 데이터를 기반으로 태그를 선택할 수 있습니다.
run.update()

이 방법은 동일한 태그를 사용하여 많은 수의 Runs에 태그를 지정하는 데 가장 적합합니다.

  1. 프로젝트 워크스페이스로 이동합니다.
  2. 프로젝트 사이드바에서 Runs를 선택합니다.
  3. 테이블에서 하나 이상의 Runs를 선택합니다.
  4. 하나 이상의 Runs를 선택했으면 테이블 위의 Tag 버튼을 선택합니다.
  5. 추가할 태그를 입력하고 Create new tag 확인란을 선택하여 태그를 추가합니다.

이 방법은 단일 Run에 수동으로 태그를 적용하는 데 가장 적합합니다.

  1. 프로젝트 워크스페이스로 이동합니다.
  2. 프로젝트 워크스페이스 내 Runs 목록에서 Run을 선택합니다.
  3. 프로젝트 사이드바에서 Overview를 선택합니다.
  4. Tags 옆에 있는 회색 더하기 아이콘(+) 버튼을 선택합니다.
  5. 추가할 태그를 입력하고 텍스트 상자 아래의 Add를 선택하여 새 태그를 추가합니다.

하나 이상의 Runs에서 태그 제거

태그는 W&B App UI를 사용하여 Runs에서 제거할 수도 있습니다.

이 방법은 많은 수의 Runs에서 태그를 제거하는 데 가장 적합합니다.

  1. 프로젝트의 Run 사이드바에서 오른쪽 상단의 테이블 아이콘을 선택합니다. 이렇게 하면 사이드바가 전체 Runs 테이블로 확장됩니다.
  2. 테이블에서 Run 위로 마우스를 가져가면 왼쪽에 확인란이 표시되거나 헤더 행에서 모든 Runs를 선택하는 확인란을 찾습니다.
  3. 확인란을 선택하여 대량 작업을 활성화합니다.
  4. 태그를 제거할 Runs를 선택합니다.
  5. Runs 행 위의 Tag 버튼을 선택합니다.
  6. 태그 옆에 있는 확인란을 선택하여 Run에서 제거합니다.
  1. Run 페이지의 왼쪽 사이드바에서 맨 위 Overview 탭을 선택합니다. Run의 태그가 여기에 표시됩니다.
  2. 태그 위로 마우스를 가져간 다음 “x"를 선택하여 Run에서 제거합니다.

2.1.5.2 - Filter and search runs

프로젝트 페이지에서 사이드바 및 테이블을 사용하는 방법

W&B에 기록된 run으로부터 얻은 통찰력을 프로젝트 페이지에서 활용하세요. Workspace 페이지와 Runs 페이지 모두에서 run을 필터링하고 검색할 수 있습니다.

Run 필터링

필터 버튼을 사용하여 상태, 태그 또는 기타 속성을 기준으로 run을 필터링합니다.

태그로 Run 필터링

필터 버튼을 사용하여 태그를 기준으로 run을 필터링합니다.

정규식으로 Run 필터링

정규식으로 원하는 결과를 얻을 수 없는 경우, 태그를 사용하여 Runs Table에서 run을 필터링할 수 있습니다. 태그는 run 생성 시 또는 완료 후에 추가할 수 있습니다. 태그가 run에 추가되면 아래 GIF와 같이 태그 필터를 추가할 수 있습니다.

If regex doesn't provide you the desired results, you can make use of tags to filter out the runs in Runs Table

Run 검색

regex를 사용하여 지정한 정규식으로 run을 찾습니다. 검색 상자에 쿼리를 입력하면 Workspace의 그래프에서 보이는 run과 테이블의 행이 필터링됩니다.

Run 그룹화

숨겨진 열을 포함하여 하나 이상의 열을 기준으로 run을 그룹화하려면 다음을 수행합니다.

  1. 검색 상자 아래에 있는 줄이 그어진 종이 모양의 Group 버튼을 클릭합니다.
  2. 결과를 그룹화할 열을 하나 이상 선택합니다.
  3. 그룹화된 run 세트는 기본적으로 축소됩니다. 확장하려면 그룹 이름 옆에 있는 화살표를 클릭합니다.

최소값 및 최대값으로 Run 정렬

기록된 메트릭의 최소값 또는 최대값으로 run 테이블을 정렬합니다. 이는 가장 좋거나 가장 나쁜 기록 값을 보려는 경우에 특히 유용합니다.

다음 단계에서는 기록된 최소값 또는 최대값을 기준으로 특정 메트릭으로 run 테이블을 정렬하는 방법을 설명합니다.

  1. 정렬하려는 메트릭이 있는 열 위에 마우스 커서를 올립니다.
  2. 케밥 메뉴(세 개의 세로선)를 선택합니다.
  3. 드롭다운에서 Show min 또는 Show max를 선택합니다.
  4. 동일한 드롭다운에서 Sort by asc 또는 Sort by desc를 선택하여 각각 오름차순 또는 내림차순으로 정렬합니다.

Run에 대한 종료 시간 검색

클라이언트 프로세스에서 마지막 heartbeat를 기록하는 End Time이라는 열을 제공합니다. 이 필드는 기본적으로 숨겨져 있습니다.

Run 테이블을 CSV로 내보내기

다운로드 버튼을 사용하여 모든 run, 하이퍼파라미터 및 요약 메트릭 테이블을 CSV로 내보냅니다.

2.1.5.3 - Fork a run

W&B run 포크하기

기존 W&B run에서 “포크"하려면 wandb.init()으로 run을 초기화할 때 fork_from을 사용하십시오. run에서 포크하면 W&B는 소스 run의 run IDstep을 사용하여 새 run을 생성합니다.

run을 포크하면 원래 run에 영향을 주지 않고 실험의 특정 시점에서 다른 파라미터 또는 Models를 탐색할 수 있습니다.

포크된 run 시작

run을 포크하려면 wandb.init()에서 fork_from 인수를 사용하고 포크할 소스 run ID와 소스 run의 step을 지정하십시오.

import wandb

# 나중에 포크할 run을 초기화합니다
original_run = wandb.init(project="your_project_name", entity="your_entity_name")
# ... 트레이닝 또는 로깅 수행 ...
original_run.finish()

# 특정 step에서 run을 포크합니다
forked_run = wandb.init(
    project="your_project_name",
    entity="your_entity_name",
    fork_from=f"{original_run.id}?_step=200",
)

변경 불가능한 run ID 사용

특정 run에 대한 일관되고 변경되지 않는 참조를 보장하려면 변경 불가능한 run ID를 사용하십시오. 사용자 인터페이스에서 변경 불가능한 run ID를 얻으려면 다음 단계를 따르십시오.

  1. Overview 탭에 엑세스: 소스 run 페이지의 Overview 탭으로 이동합니다.

  2. 변경 불가능한 Run ID 복사: Overview 탭의 오른쪽 상단에 있는 ... 메뉴(세 개의 점)를 클릭합니다. 드롭다운 메뉴에서 Copy Immutable Run ID 옵션을 선택합니다.

이러한 단계를 따르면 run에 대한 안정적이고 변경되지 않는 참조를 갖게 되어 run을 포크하는 데 사용할 수 있습니다.

포크된 run에서 계속하기

포크된 run을 초기화한 후 새 run에 계속 로그할 수 있습니다. 연속성을 위해 동일한 메트릭을 로그하고 새 메트릭을 도입할 수 있습니다.

예를 들어 다음 코드 예제에서는 먼저 run을 포크한 다음 트레이닝 step 200부터 포크된 run에 메트릭을 로그하는 방법을 보여줍니다.

import wandb
import math

# 첫 번째 run을 초기화하고 일부 메트릭을 로그합니다
run1 = wandb.init("your_project_name", entity="your_entity_name")
for i in range(300):
    run1.log({"metric": i})
run1.finish()

# 특정 step에서 첫 번째 run에서 포크하고 step 200부터 메트릭을 로그합니다
run2 = wandb.init(
    "your_project_name", entity="your_entity_name", fork_from=f"{run1.id}?_step=200"
)

# 새 run에서 계속 로깅합니다
# 처음 몇 steps 동안은 run1에서 메트릭을 그대로 로깅합니다
# Step 250 이후에는 스파이크 패턴 로깅을 시작합니다
for i in range(200, 300):
    if i < 250:
        run2.log({"metric": i})  # 스파이크 없이 run1에서 계속 로깅합니다
    else:
        # Step 250부터 스파이크 행동을 도입합니다
        subtle_spike = i + (2 * math.sin(i / 3.0))  # 미묘한 스파이크 패턴을 적용합니다
        run2.log({"metric": subtle_spike})
    # 모든 steps에서 새 메트릭을 추가로 로깅합니다
    run2.log({"additional_metric": i * 1.1})
run2.finish()

2.1.5.4 - Group runs into experiments

트레이닝 및 평가 run을 그룹화하여 더 큰 Experiments로 구성

개별 작업을 wandb.init() 에 고유한 group 이름을 전달하여 Experiments 로 그룹화합니다.

유스 케이스

  1. 분산 트레이닝: Experiments 가 별도의 트레이닝 및 평가 스크립트로 분할되어 더 큰 전체의 일부로 보아야 하는 경우 그룹화를 사용합니다.
  2. 다중 프로세스: 여러 개의 작은 프로세스를 하나의 experiment 로 그룹화합니다.
  3. K-겹 교차 검증: 더 큰 experiment 를 보기 위해 다른 임의 시드를 가진 Runs 를 함께 그룹화합니다. 다음은 스윕 및 그룹화를 사용한 k-겹 교차 검증의 예제입니다.

그룹화를 설정하는 세 가지 방법이 있습니다.

1. 스크립트에서 그룹 설정

선택적 group 및 job_type 을 wandb.init() 에 전달합니다. 이렇게 하면 각 experiment 에 대한 전용 그룹 페이지가 제공되며, 여기에는 개별 Runs 가 포함됩니다. 예를 들면 다음과 같습니다. wandb.init(group="experiment_1", job_type="eval")

2. 그룹 환경 변수 설정

WANDB_RUN_GROUP 를 사용하여 Runs 에 대한 그룹을 환경 변수로 지정합니다. 자세한 내용은 환경 변수에 대한 문서를 확인하세요. Group 은 프로젝트 내에서 고유해야 하며 그룹의 모든 Runs 에서 공유해야 합니다. wandb.util.generate_id() 를 사용하여 모든 프로세스에서 사용할 고유한 8자 문자열을 생성할 수 있습니다. 예를 들어 os.environ["WANDB_RUN_GROUP"] = "experiment-" + wandb.util.generate_id() 와 같습니다.

3. UI에서 그룹화 전환

구성 열별로 동적으로 그룹화할 수 있습니다. 예를 들어 wandb.config 를 사용하여 배치 크기 또는 학습률을 로그하면 웹 앱에서 해당 하이퍼파라미터별로 동적으로 그룹화할 수 있습니다.

그룹화를 사용한 분산 트레이닝

wandb.init() 에서 그룹화를 설정하면 UI에서 기본적으로 Runs 가 그룹화됩니다. 테이블 상단의 Group 버튼을 클릭하여 이를 켜거나 끌 수 있습니다. 그룹화를 설정한 샘플 코드에서 생성된 예제 프로젝트가 있습니다. 사이드바에서 각 “Group” 행을 클릭하여 해당 experiment 에 대한 전용 그룹 페이지로 이동할 수 있습니다.

위의 프로젝트 페이지에서 왼쪽 사이드바의 Group 을 클릭하여 이 페이지와 같은 전용 페이지로 이동할 수 있습니다.

UI에서 동적으로 그룹화

예를 들어 하이퍼파라미터별로 열별로 Runs 를 그룹화할 수 있습니다. 다음은 그 모양의 예입니다.

  • 사이드바: Runs 는 에포크 수별로 그룹화됩니다.
  • 그래프: 각 선은 그룹의 평균을 나타내고 음영은 분산을 나타냅니다. 이 동작은 그래프 설정에서 변경할 수 있습니다.

그룹화 끄기

언제든지 그룹화 버튼을 클릭하고 그룹 필드를 지우면 테이블과 그래프가 그룹 해제된 상태로 돌아갑니다.

그룹화 그래프 설정

그래프 오른쪽 상단 모서리에 있는 편집 버튼을 클릭하고 Advanced 탭을 선택하여 선과 음영을 변경합니다. 각 그룹에서 선의 평균, 최소값 또는 최대값을 선택할 수 있습니다. 음영의 경우 음영을 끄고 최소값과 최대값, 표준 편차 및 표준 오차를 표시할 수 있습니다.

2.1.5.5 - Move runs

이 페이지에서는 run 을 한 프로젝트에서 다른 프로젝트로, 팀 내부 또는 외부로, 또는 한 팀에서 다른 팀으로 이동하는 방법을 보여줍니다. 현재 위치와 새 위치에서 run 에 대한 엑세스 권한이 있어야 합니다.

Runs 탭을 사용자 정의하려면 Project page를 참조하세요.

프로젝트 간에 run 이동

run 을 한 프로젝트에서 다른 프로젝트로 이동하려면 다음을 수행합니다.

  1. 이동하려는 run 이 포함된 프로젝트로 이동합니다.
  2. 프로젝트 사이드바에서 Runs 탭을 선택합니다.
  3. 이동하려는 run 옆에 있는 확인란을 선택합니다.
  4. 테이블 위의 Move 버튼을 선택합니다.
  5. 드롭다운에서 대상 프로젝트를 선택합니다.

팀으로 run 이동

자신이 멤버인 팀으로 run 을 이동합니다.

  1. 이동하려는 run 이 포함된 프로젝트로 이동합니다.
  2. 프로젝트 사이드바에서 Runs 탭을 선택합니다.
  3. 이동하려는 run 옆에 있는 확인란을 선택합니다.
  4. 테이블 위의 Move 버튼을 선택합니다.
  5. 드롭다운에서 대상 팀 및 프로젝트를 선택합니다.

2.1.5.6 - Resume a run

일시 중지되었거나 종료된 W&B Run 다시 시작

run이 중지되거나 충돌할 경우 run이 어떻게 작동해야 하는지 지정합니다. run을 재개하거나 자동으로 재개하도록 설정하려면 id 파라미터에 대해 해당 run과 연결된 고유한 run ID를 지정해야 합니다.

run = wandb.init(entity="<entity>", \ 
        project="<project>", id="<run ID>", resume="<resume>")

다음 인수 중 하나를 resume 파라미터에 전달하여 W&B가 어떻게 응답해야 하는지 결정합니다. 각 경우에 대해 W&B는 먼저 run ID가 이미 존재하는지 확인합니다.

인수 설명 Run ID 존재 Run ID 존재하지 않음 유스 케이스
"must" W&B는 run ID로 지정된 run을 반드시 재개해야 합니다. W&B는 동일한 run ID로 run을 재개합니다. W&B에서 오류를 발생시킵니다. 동일한 run ID를 사용해야 하는 run을 재개합니다.
"allow" W&B가 run ID가 존재하는 경우 run을 재개하도록 허용합니다. W&B는 동일한 run ID로 run을 재개합니다. W&B는 지정된 run ID로 새 run을 초기화합니다. 기존 run을 덮어쓰지 않고 run을 재개합니다.
"never" W&B가 run ID로 지정된 run을 재개하도록 허용하지 않습니다. W&B에서 오류를 발생시킵니다. W&B는 지정된 run ID로 새 run을 초기화합니다.

resume="auto"를 지정하여 W&B가 자동으로 사용자를 대신하여 run을 다시 시작하도록 할 수도 있습니다. 그러나 동일한 디렉토리에서 run을 다시 시작해야 합니다. 자세한 내용은 자동으로 run을 재개하도록 설정 섹션을 참조하세요.

아래의 모든 예제에서는 <>로 묶인 값을 사용자 고유의 값으로 바꿉니다.

동일한 Run ID를 사용해야 하는 Run 재개

run이 중지되거나, 충돌하거나, 실패하는 경우 동일한 run ID를 사용하여 재개할 수 있습니다. 이렇게 하려면 run을 초기화하고 다음을 지정합니다.

  • resume 파라미터를 "must"(resume="must")로 설정합니다.
  • 중지되거나 충돌한 run의 run ID를 제공합니다.

다음 코드조각은 W&B Python SDK를 사용하여 이를 수행하는 방법을 보여줍니다.

run = wandb.init(entity="<entity>", \ 
        project="<project>", id="<run ID>", resume="must")

기존 Run을 덮어쓰지 않고 Run 재개

기존 run을 덮어쓰지 않고 중지되거나 충돌한 run을 재개합니다. 이는 프로세스가 성공적으로 종료되지 않는 경우에 특히 유용합니다. 다음에 W&B를 시작하면 W&B는 마지막 단계부터 로깅을 시작합니다.

W&B로 run을 초기화할 때 resume 파라미터를 "allow"(resume="allow")로 설정합니다. 중지되거나 충돌한 run의 run ID를 제공합니다. 다음 코드조각은 W&B Python SDK를 사용하여 이를 수행하는 방법을 보여줍니다.

import wandb

run = wandb.init(entity="<entity>", \ 
        project="<project>", id="<run ID>", resume="allow")

Run이 자동으로 재개되도록 설정

다음 코드조각은 Python SDK 또는 환경 변수를 사용하여 run이 자동으로 재개되도록 설정하는 방법을 보여줍니다.

다음 코드조각은 Python SDK로 W&B run ID를 지정하는 방법을 보여줍니다.

<>로 묶인 값을 사용자 고유의 값으로 바꿉니다.

run = wandb.init(entity="<entity>", \ 
        project="<project>", id="<run ID>", resume="<resume>")

다음 예제는 bash 스크립트에서 W&B WANDB_RUN_ID 변수를 지정하는 방법을 보여줍니다.

RUN_ID="$1"

WANDB_RESUME=allow WANDB_RUN_ID="$RUN_ID" python eval.py

터미널 내에서 W&B run ID와 함께 셸 스크립트를 실행할 수 있습니다. 다음 코드조각은 run ID akj172를 전달합니다.

sh run_experiment.sh akj172 

예를 들어 Users/AwesomeEmployee/Desktop/ImageClassify/training/이라는 디렉토리에서 train.py라는 python 스크립트를 실행한다고 가정합니다. train.py 내에서 스크립트는 자동 재개를 활성화하는 run을 만듭니다. 다음으로 트레이닝 스크립트가 중지되었다고 가정합니다. 이 run을 재개하려면 Users/AwesomeEmployee/Desktop/ImageClassify/training/ 내에서 train.py 스크립트를 다시 시작해야 합니다.

Preemptible Sweeps Run 재개

중단된 sweep run을 자동으로 다시 큐에 넣습니다. 이는 선점형 큐의 SLURM 작업, EC2 스팟 인스턴스 또는 Google Cloud 선점형 VM과 같이 선점이 적용되는 컴퓨팅 환경에서 sweep agent를 실행하는 경우에 특히 유용합니다.

mark_preempting 함수를 사용하여 W&B가 중단된 sweep run을 자동으로 다시 큐에 넣도록 설정합니다. 예를 들어, 다음 코드조각을 참조하세요.

run = wandb.init()  # Run 초기화
run.mark_preempting()

다음 표는 sweep run의 종료 상태에 따라 W&B가 run을 처리하는 방법을 간략하게 설명합니다.

상태 행동
상태 코드 0 Run이 성공적으로 종료된 것으로 간주되며 다시 큐에 넣지 않습니다.
0이 아닌 상태 W&B는 run을 sweep과 연결된 run 큐에 자동으로 추가합니다.
상태 없음 Run이 sweep run 큐에 추가됩니다. Sweep agent는 큐가 비워질 때까지 run 큐에서 run을 소비합니다. 큐가 비워지면 sweep 큐는 sweep 검색 알고리즘을 기반으로 새 run 생성을 재개합니다.

2.1.5.7 - Rewind a run

되감기

run 되감기

원본 데이터를 잃지 않고 run 기록을 수정하거나 변경하려면 run을 되감으십시오. 또한 run을 되감을 때 해당 시점부터 새로운 데이터를 로그할 수 있습니다. W&B는 새롭게 기록된 기록을 기반으로 되감은 run에 대한 요약 메트릭을 다시 계산합니다. 이는 다음 동작을 의미합니다.

  • 기록 잘림: W&B는 기록을 되감기 시점까지 자르므로 새로운 데이터 로깅이 가능합니다.
  • 요약 메트릭: 새롭게 기록된 기록을 기반으로 다시 계산됩니다.
  • 설정 보존: W&B는 원래 설정을 보존하고 새로운 설정을 병합할 수 있습니다.

run을 되감을 때 W&B는 원래 데이터를 보존하고 일관된 run ID를 유지하면서 run 상태를 지정된 단계로 재설정합니다. 이는 다음을 의미합니다.

  • run 보관: W&B는 원래 run을 보관합니다. Run Overview 탭에서 run에 엑세스할 수 있습니다.
  • 아티팩트 연결: 아티팩트를 해당 아티팩트를 생성하는 run과 연결합니다.
  • 변경 불가능한 run ID: 정확한 상태에서 일관된 포크를 위해 도입되었습니다.
  • 변경 불가능한 run ID 복사: 향상된 run 관리를 위해 변경 불가능한 run ID를 복사하는 버튼입니다.

run 되감기

resume_from과 함께 wandb.init()을 사용하여 run 기록을 특정 단계로 “되감습니다”. 되감을 run의 이름과 되감을 단계를 지정합니다.

import wandb
import math

# 첫 번째 run을 초기화하고 일부 메트릭을 기록합니다.
# your_project_name 및 your_entity_name으로 대체하십시오!
run1 = wandb.init(project="your_project_name", entity="your_entity_name")
for i in range(300):
    run1.log({"metric": i})
run1.finish()

# 특정 단계에서 첫 번째 run부터 되감고 200단계부터 메트릭을 기록합니다.
run2 = wandb.init(project="your_project_name", entity="your_entity_name", resume_from=f"{run1.id}?_step=200")

# 새로운 run에서 계속 기록합니다.
# 처음 몇 단계에서는 run1에서 메트릭을 그대로 기록합니다.
# 250단계 이후에는 스파이크 패턴을 기록하기 시작합니다.
for i in range(200, 300):
    if i < 250:
        run2.log({"metric": i, "step": i})  # 스파이크 없이 run1부터 계속 기록합니다.
    else:
        # 250단계부터 스파이크 동작을 도입합니다.
        subtle_spike = i + (2 * math.sin(i / 3.0))  # 미묘한 스파이크 패턴을 적용합니다.
        run2.log({"metric": subtle_spike, "step": i})
    # 또한 모든 단계에서 새로운 메트릭을 기록합니다.
    run2.log({"additional_metric": i * 1.1, "step": i})
run2.finish()

보관된 run 보기

run을 되감은 후 W&B App UI를 사용하여 보관된 run을 탐색할 수 있습니다. 보관된 run을 보려면 다음 단계를 따르십시오.

  1. Overview 탭에 엑세스: run 페이지의 Overview 탭으로 이동합니다. 이 탭은 run의 세부 정보 및 기록에 대한 포괄적인 보기를 제공합니다.
  2. Forked From 필드 찾기: Overview 탭 내에서 Forked From 필드를 찾습니다. 이 필드는 재개 기록을 캡처합니다. Forked From 필드에는 소스 run에 대한 링크가 포함되어 있어 원래 run으로 다시 추적하고 전체 되감기 기록을 이해할 수 있습니다.

Forked From 필드를 사용하면 보관된 재개 트리를 쉽게 탐색하고 각 되감기의 순서와 출처에 대한 통찰력을 얻을 수 있습니다.

되감은 run에서 포크

되감은 run에서 포크하려면 wandb.init()에서 fork_from 인수를 사용하고 포크할 소스 run ID와 소스 run의 단계를 지정합니다.

import wandb

# 특정 단계에서 run을 포크합니다.
forked_run = wandb.init(
    project="your_project_name",
    entity="your_entity_name",
    fork_from=f"{rewind_run.id}?_step=500",
)

# 새로운 run에서 계속 기록합니다.
for i in range(500, 1000):
    forked_run.log({"metric": i*3})
forked_run.finish()

2.1.5.8 - Send an alert

Slack 또는 이메일로 Python 코드에서 트리거되는 알림을 보냅니다.

run 이 충돌하거나 사용자 정의 트리거를 사용하는 경우 Slack 또는 이메일로 알림을 생성합니다. 예를 들어, 트레이닝 루프의 그레이디언트가 폭발하기 시작하거나 (NaN을 reports) ML 파이프라인의 단계가 완료되면 알림을 생성할 수 있습니다. 알림은 개인 및 팀 프로젝트를 포함하여 run을 초기화하는 모든 프로젝트에 적용됩니다.

그런 다음 Slack (또는 이메일)에서 W&B Alerts 메시지를 확인합니다:

알림 생성 방법

알림을 설정하는 주요 단계는 두 가지입니다:

  1. W&B 사용자 설정에서 Alerts 켜기
  2. 코드에 run.alert() 추가
  3. 알림이 올바르게 설정되었는지 확인

1. W&B 사용자 설정에서 알림 켜기

사용자 설정에서:

  • Alerts 섹션으로 스크롤
  • run.alert()에서 알림을 받으려면 스크립트 가능한 run 알림을 켭니다.
  • Slack 연결을 사용하여 알림을 게시할 Slack 채널을 선택합니다. 알림을 비공개로 유지하므로 Slackbot 채널을 권장합니다.
  • 이메일은 W&B에 가입할 때 사용한 이메일 주소로 전송됩니다. 이러한 모든 알림이 폴더로 이동하여 받은 편지함을 채우지 않도록 이메일에서 필터를 설정하는 것이 좋습니다.

W&B Alerts를 처음 설정하거나 알림 수신 방법을 수정하려는 경우에만 이 작업을 수행하면 됩니다.

W&B 사용자 설정의 알림 설정

2. 코드에 run.alert() 추가

알림을 트리거하려는 위치에서 코드 (노트북 또는 Python 스크립트)에 run.alert()를 추가합니다.

import wandb

run = wandb.init()
run.alert(title="High Loss", text="Loss is increasing rapidly")

3. Slack 또는 이메일 확인

Slack 또는 이메일에서 알림 메시지를 확인합니다. 아무것도 받지 못한 경우 사용자 설정에서 스크립트 가능한 알림에 대해 이메일 또는 Slack이 켜져 있는지 확인하십시오.

예시

이 간단한 알림은 정확도가 임계값 아래로 떨어지면 경고를 보냅니다. 이 예에서는 최소 5분 간격으로 알림을 보냅니다.

import wandb
from wandb import AlertLevel

run = wandb.init()

if acc < threshold:
    run.alert(
        title="Low accuracy",
        text=f"Accuracy {acc} is below the acceptable threshold {threshold}",
        level=AlertLevel.WARN,
        wait_duration=300,
    )

사용자 태그 또는 멘션 방법

알림 제목 또는 텍스트에서 자신 또는 동료를 태그하려면 at 기호 @ 다음에 Slack 사용자 ID를 사용하십시오. Slack 프로필 페이지에서 Slack 사용자 ID를 찾을 수 있습니다.

run.alert(title="Loss is NaN", text=f"Hey <@U1234ABCD> loss has gone to NaN")

팀 알림

팀 관리자는 팀 설정 페이지 wandb.ai/teams/your-team에서 팀에 대한 알림을 설정할 수 있습니다.

팀 알림은 팀의 모든 사용자에게 적용됩니다. W&B는 알림을 비공개로 유지하므로 Slackbot 채널을 사용하는 것이 좋습니다.

알림을 보낼 Slack 채널 변경

알림을 보낼 채널을 변경하려면 Slack 연결 끊기를 클릭한 다음 다시 연결합니다. 다시 연결한 후 다른 Slack 채널을 선택합니다.

2.1.6 - Log objects and media

메트릭, 비디오, 사용자 정의 플롯 등을 추적하세요.

W&B Python SDK를 사용하여 메트릭, 미디어 또는 사용자 정의 오브젝트의 사전을 단계별로 기록합니다. W&B는 각 단계에서 키-값 쌍을 수집하고 wandb.log()로 데이터를 기록할 때마다 하나의 통합된 사전에 저장합니다. 스크립트에서 기록된 데이터는 wandb라는 디렉토리에 로컬로 저장된 다음 W&B 클라우드 또는 개인 서버로 동기화됩니다.

wandb.log를 호출할 때마다 기본적으로 새로운 step이 됩니다. W&B는 차트 및 패널을 만들 때 단계를 기본 x축으로 사용합니다. 선택적으로 사용자 정의 x축을 만들고 사용하거나 사용자 정의 요약 메트릭을 캡처할 수 있습니다. 자세한 내용은 로그 축 사용자 정의를 참조하세요.

자동으로 기록되는 데이터

W&B는 W&B Experiments 동안 다음 정보를 자동으로 기록합니다.

  • 시스템 메트릭: CPU 및 GPU 사용률, 네트워크 등. 이러한 메트릭은 run 페이지의 시스템 탭에 표시됩니다. GPU의 경우 이러한 메트릭은 nvidia-smi를 통해 가져옵니다.
  • 커맨드 라인: stdout 및 stderr이 선택되어 run 페이지의 로그 탭에 표시됩니다.

계정의 설정 페이지에서 코드 저장을 켜서 다음을 기록합니다.

  • Git 커밋: 최신 git 커밋을 선택하여 run 페이지의 Overview 탭에서 확인하고 커밋되지 않은 변경 사항이 있는 경우 diff.patch 파일을 확인합니다.
  • Dependencies: requirements.txt 파일이 업로드되어 run 페이지의 파일 탭에 표시되고, run을 위해 wandb 디렉터리에 저장하는 모든 파일과 함께 표시됩니다.

특정 W&B API 호출로 기록되는 데이터는 무엇입니까?

W&B를 사용하면 기록할 대상을 정확하게 결정할 수 있습니다. 다음은 일반적으로 기록되는 오브젝트의 일부입니다.

  • Datasets: 이미지를 W&B로 스트리밍하려면 이미지 또는 기타 데이터셋 샘플을 구체적으로 기록해야 합니다.
  • Plots: 차트를 추적하려면 wandb.plotwandb.log와 함께 사용합니다. 자세한 내용은 Plots 기록을 참조하세요.
  • Tables: W&B로 시각화하고 쿼리할 데이터를 기록하려면 wandb.Table을 사용합니다. 자세한 내용은 Tables 기록을 참조하세요.
  • PyTorch 그레이디언트: UI에서 가중치의 그레이디언트를 히스토그램으로 보려면 wandb.watch(model)을 추가합니다.
  • 설정 정보: 하이퍼파라미터, 데이터셋 링크 또는 사용 중인 아키텍처 이름을 config 파라미터로 기록합니다. 예: wandb.init(config=your_config_dictionary). 자세한 내용은 PyTorch 인테그레이션 페이지를 참조하세요.
  • 메트릭: 모델의 메트릭을 보려면 wandb.log를 사용합니다. 트레이닝 루프 내에서 정확도 및 손실과 같은 메트릭을 기록하면 UI에서 실시간 업데이트 그래프를 얻을 수 있습니다.

일반적인 워크플로우

  1. 최고 정확도 비교: run 간에 메트릭의 최고 값을 비교하려면 해당 메트릭의 요약 값을 설정합니다. 기본적으로 요약은 각 키에 대해 기록한 마지막 값으로 설정됩니다. 이는 UI의 테이블에서 유용합니다. 여기서 요약 메트릭을 기준으로 run을 정렬하고 필터링하여 최종 정확도가 아닌 최고 정확도를 기준으로 테이블 또는 막대 차트에서 run을 비교할 수 있습니다. 예: wandb.run.summary["best_accuracy"] = best_accuracy
  2. 하나의 차트에 여러 메트릭 보기: wandb.log({"acc'": 0.9, "loss": 0.1})과 같이 wandb.log에 대한 동일한 호출에서 여러 메트릭을 기록하면 UI에서 플롯하는 데 사용할 수 있습니다.
  3. x축 사용자 정의: 동일한 로그 호출에 사용자 정의 x축을 추가하여 W&B 대시보드에서 다른 축에 대해 메트릭을 시각화합니다. 예: wandb.log({'acc': 0.9, 'epoch': 3, 'batch': 117}). 지정된 메트릭에 대한 기본 x축을 설정하려면 Run.define_metric()을 사용합니다.
  4. 풍부한 미디어 및 차트 기록: wandb.log이미지 및 비디오와 같은 미디어에서 테이블차트에 이르기까지 다양한 데이터 유형의 로깅을 지원합니다.

모범 사례 및 팁

Experiments 및 로깅에 대한 모범 사례 및 팁은 모범 사례: Experiments 및 로깅을 참조하세요.

2.1.6.1 - Create and track plots from experiments

기계 학습 실험에서 플롯을 생성하고 추적합니다.

wandb.plot의 메소드를 사용하면 트레이닝 중 시간에 따라 변하는 차트를 포함하여 wandb.log로 차트를 추적할 수 있습니다. 사용자 정의 차트 프레임워크에 대해 자세히 알아보려면 이 가이드를 확인하십시오.

기본 차트

이러한 간단한 차트를 사용하면 메트릭 및 결과의 기본 시각화를 쉽게 구성할 수 있습니다.

wandb.plot.line()

임의의 축에서 연결되고 정렬된 점 목록인 사용자 정의 라인 플롯을 기록합니다.

data = [[x, y] for (x, y) in zip(x_values, y_values)]
table = wandb.Table(data=data, columns=["x", "y"])
wandb.log(
    {
        "my_custom_plot_id": wandb.plot.line(
            table, "x", "y", title="Custom Y vs X Line Plot"
        )
    }
)

이를 사용하여 임의의 두 차원에 대한 곡선을 기록할 수 있습니다. 두 값 목록을 서로 플로팅하는 경우 목록의 값 수는 정확히 일치해야 합니다. 예를 들어 각 점에는 x와 y가 있어야 합니다.

앱에서 보기

코드 실행

wandb.plot.scatter()

임의의 축 x 및 y 쌍에 대한 점 (x, y) 목록인 사용자 정의 스캐터 플롯을 기록합니다.

data = [[x, y] for (x, y) in zip(class_x_scores, class_y_scores)]
table = wandb.Table(data=data, columns=["class_x", "class_y"])
wandb.log({"my_custom_id": wandb.plot.scatter(table, "class_x", "class_y")})

이를 사용하여 임의의 두 차원에 대한 스캐터 점을 기록할 수 있습니다. 두 값 목록을 서로 플로팅하는 경우 목록의 값 수는 정확히 일치해야 합니다. 예를 들어 각 점에는 x와 y가 있어야 합니다.

앱에서 보기

코드 실행

wandb.plot.bar()

몇 줄의 코드로 레이블이 지정된 값 목록을 막대로 표시하는 사용자 정의 막대 차트를 기본적으로 기록합니다.

data = [[label, val] for (label, val) in zip(labels, values)]
table = wandb.Table(data=data, columns=["label", "value"])
wandb.log(
    {
        "my_bar_chart_id": wandb.plot.bar(
            table, "label", "value", title="Custom Bar Chart"
        )
    }
)

이를 사용하여 임의의 막대 차트를 기록할 수 있습니다. 목록의 레이블과 값 수는 정확히 일치해야 합니다. 각 데이터 포인트에는 레이블과 값이 모두 있어야 합니다.

앱에서 보기

코드 실행

wandb.plot.histogram()

몇 줄의 코드로 값 목록을 발생 횟수/빈도별로 bin으로 정렬하는 사용자 정의 히스토그램을 기본적으로 기록합니다. 예측 신뢰도 점수 목록 (scores)이 있고 분포를 시각화하고 싶다고 가정해 보겠습니다.

data = [[s] for s in scores]
table = wandb.Table(data=data, columns=["scores"])
wandb.log({"my_histogram": wandb.plot.histogram(table, "scores", title="Histogram")})

이를 사용하여 임의의 히스토그램을 기록할 수 있습니다. data는 행과 열의 2D 배열을 지원하기 위한 목록의 목록입니다.

앱에서 보기

코드 실행

wandb.plot.line_series()

하나의 공유된 x-y 축 집합에 여러 라인 또는 여러 x-y 좌표 쌍 목록을 플로팅합니다.

wandb.log(
    {
        "my_custom_id": wandb.plot.line_series(
            xs=[0, 1, 2, 3, 4],
            ys=[[10, 20, 30, 40, 50], [0.5, 11, 72, 3, 41]],
            keys=["metric Y", "metric Z"],
            title="Two Random Metrics",
            xname="x units",
        )
    }
)

x 및 y 점의 수는 정확히 일치해야 합니다. y 값의 여러 목록과 일치시키기 위해 x 값 목록 하나를 제공하거나 y 값의 각 목록에 대해 별도의 x 값 목록을 제공할 수 있습니다.

앱에서 보기

모델 평가 차트

이러한 사전 설정 차트에는 스크립트에서 직접 차트를 빠르게 쉽게 기록하고 UI에서 찾고 있는 정확한 정보를 볼 수 있도록 하는 기본 제공 wandb.plot 메소드가 있습니다.

wandb.plot.pr_curve()

한 줄로 Precision-Recall curve를 만듭니다.

wandb.log({"pr": wandb.plot.pr_curve(ground_truth, predictions)})

코드가 다음에 엑세스할 수 있을 때마다 이를 기록할 수 있습니다.

  • 예제 집합에 대한 모델의 예측 점수 (predictions)
  • 해당 예제에 대한 해당 그라운드 트루스 레이블 (ground_truth)
  • (선택 사항) 레이블/클래스 이름 목록 (labels=["cat", "dog", "bird"...] 레이블 인덱스 0이 cat, 1 = dog, 2 = bird 등을 의미하는 경우)
  • (선택 사항) 플롯에서 시각화할 레이블의 서브셋 (여전히 목록 형식)

앱에서 보기

코드 실행

wandb.plot.roc_curve()

한 줄로 ROC curve를 만듭니다.

wandb.log({"roc": wandb.plot.roc_curve(ground_truth, predictions)})

코드가 다음에 엑세스할 수 있을 때마다 이를 기록할 수 있습니다.

  • 예제 집합에 대한 모델의 예측 점수 (predictions)
  • 해당 예제에 대한 해당 그라운드 트루스 레이블 (ground_truth)
  • (선택 사항) 레이블/클래스 이름 목록 (labels=["cat", "dog", "bird"...] 레이블 인덱스 0이 cat, 1 = dog, 2 = bird 등을 의미하는 경우)
  • (선택 사항) 플롯에서 시각화할 이러한 레이블의 서브셋 (여전히 목록 형식)

앱에서 보기

코드 실행

wandb.plot.confusion_matrix()

한 줄로 다중 클래스 confusion matrix를 만듭니다.

cm = wandb.plot.confusion_matrix(
    y_true=ground_truth, preds=predictions, class_names=class_names
)

wandb.log({"conf_mat": cm})

코드가 다음에 엑세스할 수 있을 때마다 이를 기록할 수 있습니다.

  • 예제 집합에 대한 모델의 예측 레이블 (preds) 또는 정규화된 확률 점수 (probs). 확률은 (예제 수, 클래스 수) 모양이어야 합니다. 확률 또는 예측값 중 하나를 제공할 수 있지만 둘 다 제공할 수는 없습니다.
  • 해당 예제에 대한 해당 그라운드 트루스 레이블 (y_true)
  • class_names 문자열로 된 레이블/클래스 이름의 전체 목록. 예: class_names=["cat", "dog", "bird"] 인덱스 0이 cat, 1이 dog, 2가 bird인 경우

앱에서 보기

코드 실행

인터랙티브 사용자 정의 차트

전체 사용자 정의를 위해 기본 제공 사용자 정의 차트 사전 설정을 조정하거나 새 사전 설정을 만든 다음 차트를 저장합니다. 차트 ID를 사용하여 스크립트에서 직접 해당 사용자 정의 사전 설정에 데이터를 기록합니다.

# 플로팅할 열이 있는 테이블을 만듭니다.
table = wandb.Table(data=data, columns=["step", "height"])

# 테이블의 열에서 차트의 필드로 매핑합니다.
fields = {"x": "step", "value": "height"}

# 테이블을 사용하여 새 사용자 정의 차트 사전 설정을 채웁니다.
# 자신의 저장된 차트 사전 설정을 사용하려면 vega_spec_name을 변경하십시오.
# 제목을 편집하려면 string_fields를 변경하십시오.
my_custom_chart = wandb.plot_table(
    vega_spec_name="carey/new_chart",
    data_table=table,
    fields=fields,
    string_fields={"title": "Height Histogram"},
)

코드 실행

Matplotlib 및 Plotly 플롯

wandb.plot으로 W&B 사용자 정의 차트를 사용하는 대신 matplotlibPlotly로 생성된 차트를 기록할 수 있습니다.

import matplotlib.pyplot as plt

plt.plot([1, 2, 3, 4])
plt.ylabel("some interesting numbers")
wandb.log({"chart": plt})

matplotlib 플롯 또는 그림 오브젝트를 wandb.log()에 전달하기만 하면 됩니다. 기본적으로 플롯을 Plotly 플롯으로 변환합니다. 플롯을 이미지로 기록하려면 플롯을 wandb.Image에 전달할 수 있습니다. Plotly 차트도 직접 허용합니다.

W&B Tables에 사용자 정의 HTML 로그

W&B는 Plotly 및 Bokeh의 인터랙티브 차트를 HTML로 기록하고 이를 Tables에 추가하는 것을 지원합니다.

Plotly 그림을 HTML로 Tables에 로그

HTML로 변환하여 인터랙티브 Plotly 차트를 wandb Tables에 기록할 수 있습니다.

import wandb
import plotly.express as px

# 새 run 초기화
run = wandb.init(project="log-plotly-fig-tables", name="plotly_html")

# 테이블 만들기
table = wandb.Table(columns=["plotly_figure"])

# Plotly 그림에 대한 경로 만들기
path_to_plotly_html = "./plotly_figure.html"

# Plotly 그림 예제
fig = px.scatter(x=[0, 1, 2, 3, 4], y=[0, 1, 4, 9, 16])

# Plotly 그림을 HTML에 쓰기
# auto_play를 False로 설정하면 테이블에서 애니메이션 Plotly 차트가 자동으로 재생되지 않습니다.
fig.write_html(path_to_plotly_html, auto_play=False)

# Plotly 그림을 HTML 파일로 테이블에 추가
table.add_data(wandb.Html(path_to_plotly_html))

# 테이블 로그
run.log({"test_table": table})
wandb.finish()

Bokeh 그림을 HTML로 Tables에 로그

HTML로 변환하여 인터랙티브 Bokeh 차트를 wandb Tables에 기록할 수 있습니다.

from scipy.signal import spectrogram
import holoviews as hv
import panel as pn
from scipy.io import wavfile
import numpy as np
from bokeh.resources import INLINE

hv.extension("bokeh", logo=False)
import wandb


def save_audio_with_bokeh_plot_to_html(audio_path, html_file_name):
    sr, wav_data = wavfile.read(audio_path)
    duration = len(wav_data) / sr
    f, t, sxx = spectrogram(wav_data, sr)
    spec_gram = hv.Image((t, f, np.log10(sxx)), ["Time (s)", "Frequency (hz)"]).opts(
        width=500, height=150, labelled=[]
    )
    audio = pn.pane.Audio(wav_data, sample_rate=sr, name="Audio", throttle=500)
    slider = pn.widgets.FloatSlider(end=duration, visible=False)
    line = hv.VLine(0).opts(color="white")
    slider.jslink(audio, value="time", bidirectional=True)
    slider.jslink(line, value="glyph.location")
    combined = pn.Row(audio, spec_gram * line, slider).save(html_file_name)


html_file_name = "audio_with_plot.html"
audio_path = "hello.wav"
save_audio_with_bokeh_plot_to_html(audio_path, html_file_name)

wandb_html = wandb.Html(html_file_name)
run = wandb.init(project="audio_test")
my_table = wandb.Table(columns=["audio_with_plot"], data=[[wandb_html], [wandb_html]])
run.log({"audio_table": my_table})
run.finish()

2.1.6.2 - Customize log axes

define_metric을 사용하여 사용자 정의 x축을 설정하세요. 사용자 정의 x축은 트레이닝 중 과거의 다른 타임 스텝에 비동기적으로 로그해야 하는 상황에서 유용합니다. 예를 들어, 에피소드별 보상과 스텝별 보상을 추적할 수 있는 RL에서 유용할 수 있습니다.

Google Colab에서 define_metric을 직접 사용해 보세요 →

축 사용자 정의

기본적으로 모든 메트릭은 W&B 내부 step인 동일한 x축에 대해 기록됩니다. 때로는 이전 스텝에 로그하거나 다른 x축을 사용하고 싶을 수 있습니다.

다음은 기본 스텝 대신 사용자 정의 x축 메트릭을 설정하는 예입니다.

import wandb

wandb.init()
# 사용자 정의 x축 메트릭 정의
wandb.define_metric("custom_step")
# 어떤 메트릭을 기준으로 플롯할지 정의
wandb.define_metric("validation_loss", step_metric="custom_step")

for i in range(10):
    log_dict = {
        "train_loss": 1 / (i + 1),
        "custom_step": i**2,
        "validation_loss": 1 / (i + 1),
    }
    wandb.log(log_dict)

x축은 glob을 사용하여 설정할 수도 있습니다. 현재 문자열 접두사가 있는 glob만 사용할 수 있습니다. 다음 예제는 접두사 "train/"가 있는 기록된 모든 메트릭을 x축 "train/step"에 플롯합니다.

import wandb

wandb.init()
# 사용자 정의 x축 메트릭 정의
wandb.define_metric("train/step")
# 다른 모든 train/ 메트릭이 이 스텝을 사용하도록 설정
wandb.define_metric("train/*", step_metric="train/step")

for i in range(10):
    log_dict = {
        "train/step": 2**i,  # 내부 W&B 스텝으로 지수적 증가
        "train/loss": 1 / (i + 1),  # x축은 train/step
        "train/accuracy": 1 - (1 / (1 + i)),  # x축은 train/step
        "val/loss": 1 / (1 + i),  # x축은 내부 wandb step
    }
    wandb.log(log_dict)

2.1.6.3 - Log distributed training experiments

W&B를 사용하여 여러 개의 GPU로 분산 트레이닝 실험을 로그하세요.

분산 트레이닝에서 모델은 여러 개의 GPU를 병렬로 사용하여 트레이닝됩니다. W&B는 분산 트레이닝 Experiments를 추적하는 두 가지 패턴을 지원합니다.

  1. 단일 프로세스: 단일 프로세스에서 W&B (wandb.init)를 초기화하고 Experiments (wandb.log)를 기록합니다. 이는 PyTorch Distributed Data Parallel (DDP) 클래스를 사용하여 분산 트레이닝 Experiments를 로깅하는 일반적인 솔루션입니다. 경우에 따라 사용자는 멀티프로세싱 대기열(또는 다른 통신 기본 요소)을 사용하여 다른 프로세스의 데이터를 기본 로깅 프로세스로 전달합니다.
  2. 다중 프로세스: 모든 프로세스에서 W&B (wandb.init)를 초기화하고 Experiments (wandb.log)를 기록합니다. 각 프로세스는 사실상 별도의 experiment입니다. W&B를 초기화할 때 group 파라미터(wandb.init(group='group-name'))를 사용하여 공유 experiment를 정의하고 기록된 값들을 W&B App UI에서 함께 그룹화합니다.

다음 예제는 단일 머신에서 2개의 GPU를 사용하는 PyTorch DDP를 통해 W&B로 메트릭을 추적하는 방법을 보여줍니다. PyTorch DDP(torch.nnDistributedDataParallel)는 분산 트레이닝을 위한 널리 사용되는 라이브러리입니다. 기본 원리는 모든 분산 트레이닝 설정에 적용되지만 구현 세부 사항은 다를 수 있습니다.

방법 1: 단일 프로세스

이 방법에서는 순위 0 프로세스만 추적합니다. 이 방법을 구현하려면 W&B(wandb.init)를 초기화하고, W&B Run을 시작하고, 순위 0 프로세스 내에서 메트릭(wandb.log)을 기록합니다. 이 방법은 간단하고 강력하지만 다른 프로세스의 모델 메트릭(예: 배치에서의 손실 값 또는 입력)을 기록하지 않습니다. 사용량 및 메모리와 같은 시스템 메트릭은 해당 정보가 모든 프로세스에서 사용 가능하므로 모든 GPU에 대해 계속 기록됩니다.

샘플 Python 스크립트(log-ddp.py) 내에서 순위가 0인지 확인합니다. 이를 구현하기 위해 먼저 torch.distributed.launch를 사용하여 여러 프로세스를 시작합니다. 다음으로 --local_rank 커맨드라인 인수로 순위를 확인합니다. 순위가 0으로 설정된 경우 train() 함수에서 조건부로 wandb 로깅을 설정합니다. Python 스크립트 내에서 다음 검사를 사용합니다.

if __name__ == "__main__":
    # Get args
    args = parse_args()

    if args.local_rank == 0:  # only on main process
        # Initialize wandb run
        run = wandb.init(
            entity=args.entity,
            project=args.project,
        )
        # Train model with DDP
        train(args, run)
    else:
        train(args)

W&B App UI를 탐색하여 단일 프로세스에서 추적된 메트릭의 예제 대시보드를 확인하세요. 대시보드는 두 GPU에 대해 추적된 온도 및 사용률과 같은 시스템 메트릭을 표시합니다.

그러나 에포크 및 배치 크기 함수로서의 손실 값은 단일 GPU에서만 기록되었습니다.

방법 2: 다중 프로세스

이 방법에서는 작업의 각 프로세스를 추적하여 각 프로세스에서 wandb.init()wandb.log()를 호출합니다. 트레이닝이 끝나면 wandb.finish()를 호출하여 Run이 완료되었음을 표시하여 모든 프로세스가 올바르게 종료되도록 하는 것이 좋습니다.

이 방법을 사용하면 더 많은 정보를 로깅에 엑세스할 수 있습니다. 그러나 여러 개의 W&B Runs가 W&B App UI에 보고되는 점에 유의하세요. 여러 Experiments에서 W&B Runs를 추적하기 어려울 수 있습니다. 이를 완화하려면 W&B를 초기화할 때 group 파라미터에 값을 제공하여 지정된 experiment에 속하는 W&B Run을 추적하세요. Experiments에서 트레이닝 및 평가 W&B Runs를 추적하는 방법에 대한 자세한 내용은 Run 그룹화를 참조하세요.

다음 Python 코드 조각은 W&B를 초기화할 때 group 파라미터를 설정하는 방법을 보여줍니다.

if __name__ == "__main__":
    # Get args
    args = parse_args()
    # Initialize run
    run = wandb.init(
        entity=args.entity,
        project=args.project,
        group="DDP",  # all runs for the experiment in one group
    )
    # Train model with DDP
    train(args, run)

W&B App UI를 탐색하여 여러 프로세스에서 추적된 메트릭의 예제 대시보드를 확인하세요. 왼쪽 사이드바에 함께 그룹화된 두 개의 W&B Runs가 있습니다. 그룹을 클릭하여 experiment에 대한 전용 그룹 페이지를 확인하세요. 전용 그룹 페이지에는 각 프로세스의 메트릭이 개별적으로 표시됩니다.

앞의 이미지는 W&B App UI 대시보드를 보여줍니다. 사이드바에는 두 개의 Experiments가 있습니다. 하나는 ’null’로 레이블이 지정되고 다른 하나는 ‘DPP’(노란색 상자로 묶임)로 표시됩니다. 그룹을 확장하면(그룹 드롭다운 선택) 해당 experiment와 연결된 W&B Runs가 표시됩니다.

W&B Service를 사용하여 일반적인 분산 트레이닝 문제 방지

W&B 및 분산 트레이닝을 사용할 때 발생할 수 있는 두 가지 일반적인 문제가 있습니다.

  1. 트레이닝 시작 시 중단 - wandb 멀티프로세싱이 분산 트레이닝의 멀티프로세싱을 방해하는 경우 wandb 프로세스가 중단될 수 있습니다.
  2. 트레이닝 종료 시 중단 - wandb 프로세스가 종료해야 할 시점을 알지 못하는 경우 트레이닝 작업이 중단될 수 있습니다. Python 스크립트의 끝에서 wandb.finish() API를 호출하여 W&B에 Run이 완료되었음을 알립니다. wandb.finish() API는 데이터 업로드를 완료하고 W&B가 종료되도록 합니다.

wandb service를 사용하여 분산 작업의 안정성을 개선하는 것이 좋습니다. 앞서 언급한 두 가지 트레이닝 문제는 일반적으로 wandb service를 사용할 수 없는 W&B SDK 버전에서 발견됩니다.

W&B Service 활성화

W&B SDK 버전에 따라 W&B Service가 기본적으로 활성화되어 있을 수 있습니다.

W&B SDK 0.13.0 이상

W&B Service는 W&B SDK 0.13.0 버전 이상에서 기본적으로 활성화되어 있습니다.

W&B SDK 0.12.5 이상

Python 스크립트를 수정하여 W&B SDK 버전 0.12.5 이상에서 W&B Service를 활성화하세요. wandb.require 메소드를 사용하고 기본 함수 내에서 문자열 "service"를 전달하세요.

if __name__ == "__main__":
    main()


def main():
    wandb.require("service")
    # rest-of-your-script-goes-here

최적의 경험을 위해 최신 버전으로 업그레이드하는 것이 좋습니다.

W&B SDK 0.12.4 이하

W&B SDK 버전 0.12.4 이하를 사용하는 경우 WANDB_START_METHOD 환경 변수를 "thread"로 설정하여 대신 멀티스레딩을 사용하세요.

멀티프로세싱에 대한 예제 유스 케이스

다음 코드 조각은 고급 분산 유스 케이스에 대한 일반적인 방법을 보여줍니다.

프로세스 생성

생성된 프로세스에서 W&B Run을 시작하는 경우 기본 함수에서 wandb.setup() 메소드를 사용하세요.

import multiprocessing as mp


def do_work(n):
    run = wandb.init(config=dict(n=n))
    run.log(dict(this=n * n))


def main():
    wandb.setup()
    pool = mp.Pool(processes=4)
    pool.map(do_work, range(4))


if __name__ == "__main__":
    main()

W&B Run 공유

W&B Run 오브젝트를 인수로 전달하여 프로세스 간에 W&B Runs를 공유합니다.

def do_work(run):
    run.log(dict(this=1))


def main():
    run = wandb.init()
    p = mp.Process(target=do_work, kwargs=dict(run=run))
    p.start()
    p.join()


if __name__ == "__main__":
    main()

2.1.6.4 - Log media and objects

3D 포인트 클라우드 및 분자에서 HTML 및 히스토그램에 이르기까지 다양한 미디어를 로그

이미지, 비디오, 오디오 등을 지원합니다. 풍부한 미디어를 기록하여 결과물을 살펴보고 run, model, dataset을 시각적으로 비교해 보세요. 예시와 사용 가이드는 아래를 참고하세요.

사전 준비 사항

W&B SDK로 미디어 오브젝트를 기록하려면 추가 종속성을 설치해야 할 수 있습니다. 다음 코맨드를 실행하여 이러한 종속성을 설치할 수 있습니다.

pip install wandb[media]

이미지

이미지를 기록하여 입력, 출력, 필터 가중치, 활성화 등을 추적합니다.

Inputs and outputs of an autoencoder network performing in-painting.

이미지는 NumPy 배열, PIL 이미지 또는 파일 시스템에서 직접 기록할 수 있습니다.

단계별로 이미지를 기록할 때마다 UI에 표시되도록 저장됩니다. 이미지 패널을 확장하고 스텝 슬라이더를 사용하여 다른 스텝의 이미지를 확인합니다. 이렇게 하면 트레이닝 중에 모델의 출력이 어떻게 변하는지 쉽게 비교할 수 있습니다.

torchvisionmake_grid를 사용하는 등 이미지를 수동으로 구성할 때 배열을 직접 제공합니다.

배열은 Pillow를 사용하여 png로 변환됩니다.

images = wandb.Image(image_array, caption="Top: Output, Bottom: Input")

wandb.log({"examples": images})

마지막 차원이 1이면 이미지가 회색조, 3이면 RGB, 4이면 RGBA라고 가정합니다. 배열에 float가 포함된 경우 0255 사이의 정수로 변환합니다. 이미지를 다르게 정규화하려면 mode를 수동으로 지정하거나 이 패널의 “PIL 이미지 로깅” 탭에 설명된 대로 PIL.Image를 제공하면 됩니다.

배열을 이미지로 변환하는 것을 완벽하게 제어하려면 PIL.Image를 직접 구성하여 제공합니다.

images = [PIL.Image.fromarray(image) for image in image_array]

wandb.log({"examples": [wandb.Image(image) for image in images]})

더욱 완벽하게 제어하려면 원하는 방식으로 이미지를 만들고 디스크에 저장한 다음 파일 경로를 제공합니다.

im = PIL.fromarray(...)
rgb_im = im.convert("RGB")
rgb_im.save("myimage.jpg")

wandb.log({"example": wandb.Image("myimage.jpg")})

이미지 오버레이

W&B UI를 통해 시멘틱 세그멘테이션 마스크를 기록하고 (불투명도 변경, 시간 경과에 따른 변경 사항 보기 등) 상호 작용합니다.

Interactive mask viewing in the W&B UI.

오버레이를 기록하려면 다음 키와 값이 있는 사전을 wandb.Imagemasks 키워드 인수에 제공해야 합니다.

  • 이미지 마스크를 나타내는 두 개의 키 중 하나:
    • "mask_data": 각 픽셀에 대한 정수 클래스 레이블을 포함하는 2D NumPy 배열
    • "path": (문자열) 저장된 이미지 마스크 파일의 경로
  • "class_labels": (선택 사항) 이미지 마스크의 정수 클래스 레이블을 읽을 수 있는 클래스 이름에 매핑하는 사전

여러 마스크를 기록하려면 아래 코드조각과 같이 여러 키가 있는 마스크 사전을 기록합니다.

라이브 예시 보기

샘플 코드

mask_data = np.array([[1, 2, 2, ..., 2, 2, 1], ...])

class_labels = {1: "tree", 2: "car", 3: "road"}

mask_img = wandb.Image(
    image,
    masks={
        "predictions": {"mask_data": mask_data, "class_labels": class_labels},
        "ground_truth": {
            # ...
        },
        # ...
    },
)

이미지와 함께 바운딩 박스를 기록하고 필터와 토글을 사용하여 UI에서 다양한 박스 세트를 동적으로 시각화합니다.

라이브 예시 보기

바운딩 박스를 기록하려면 다음 키와 값이 있는 사전을 wandb.Image의 boxes 키워드 인수에 제공해야 합니다.

  • box_data: 각 박스에 대해 하나씩, 사전의 리스트입니다. 박스 사전 형식은 아래에 설명되어 있습니다.
    • position: 아래에 설명된 두 가지 형식 중 하나로 박스의 위치와 크기를 나타내는 사전입니다. 박스가 모두 동일한 형식을 사용할 필요는 없습니다.
      • 옵션 1: {"minX", "maxX", "minY", "maxY"}. 각 박스 차원의 상한 및 하한을 정의하는 좌표 세트를 제공합니다.
      • 옵션 2: {"middle", "width", "height"}. middle 좌표를 [x,y]로 지정하고 widthheight를 스칼라로 지정하는 좌표 세트를 제공합니다.
    • class_id: 박스의 클래스 ID를 나타내는 정수입니다. 아래의 class_labels 키를 참조하세요.
    • scores: 점수에 대한 문자열 레이블과 숫자 값의 사전입니다. UI에서 박스를 필터링하는 데 사용할 수 있습니다.
    • domain: 박스 좌표의 단위/형식을 지정합니다. 박스 좌표가 이미지 크기 범위 내의 정수와 같이 픽셀 공간으로 표현되는 경우 “pixel"로 설정합니다. 기본적으로 도메인은 이미지의 분수/백분율로 간주되며 0과 1 사이의 부동 소수점 숫자로 표현됩니다.
    • box_caption: (선택 사항) 이 박스의 레이블 텍스트로 표시할 문자열입니다.
  • class_labels: (선택 사항) class_id를 문자열에 매핑하는 사전입니다. 기본적으로 class_0, class_1 등 클래스 레이블을 생성합니다.

이 예시를 확인해 보세요.

class_id_to_label = {
    1: "car",
    2: "road",
    3: "building",
    # ...
}

img = wandb.Image(
    image,
    boxes={
        "predictions": {
            "box_data": [
                {
                    # one box expressed in the default relative/fractional domain
                    "position": {"minX": 0.1, "maxX": 0.2, "minY": 0.3, "maxY": 0.4},
                    "class_id": 2,
                    "box_caption": class_id_to_label[2],
                    "scores": {"acc": 0.1, "loss": 1.2},
                    # another box expressed in the pixel domain
                    # (for illustration purposes only, all boxes are likely
                    # to be in the same domain/format)
                    "position": {"middle": [150, 20], "width": 68, "height": 112},
                    "domain": "pixel",
                    "class_id": 3,
                    "box_caption": "a building",
                    "scores": {"acc": 0.5, "loss": 0.7},
                    # ...
                    # Log as many boxes an as needed
                }
            ],
            "class_labels": class_id_to_label,
        },
        # Log each meaningful group of boxes with a unique key name
        "ground_truth": {
            # ...
        },
    },
)

wandb.log({"driving_scene": img})

테이블의 이미지 오버레이

Interactive Segmentation Masks in Tables

테이블에 시멘틱 세그멘테이션 마스크를 기록하려면 테이블의 각 행에 대해 wandb.Image 오브젝트를 제공해야 합니다.

아래 코드조각에 예시가 제공되어 있습니다.

table = wandb.Table(columns=["ID", "Image"])

for id, img, label in zip(ids, images, labels):
    mask_img = wandb.Image(
        img,
        masks={
            "prediction": {"mask_data": label, "class_labels": class_labels}
            # ...
        },
    )

    table.add_data(id, img)

wandb.log({"Table": table})
Interactive Bounding Boxes in Tables

테이블에 바운딩 박스가 있는 이미지를 기록하려면 테이블의 각 행에 대해 wandb.Image 오브젝트를 제공해야 합니다.

아래 코드조각에 예시가 제공되어 있습니다.

table = wandb.Table(columns=["ID", "Image"])

for id, img, boxes in zip(ids, images, boxes_set):
    box_img = wandb.Image(
        img,
        boxes={
            "prediction": {
                "box_data": [
                    {
                        "position": {
                            "minX": box["minX"],
                            "minY": box["minY"],
                            "maxX": box["maxX"],
                            "maxY": box["maxY"],
                        },
                        "class_id": box["class_id"],
                        "box_caption": box["caption"],
                        "domain": "pixel",
                    }
                    for box in boxes
                ],
                "class_labels": class_labels,
            }
        },
    )

히스토그램

리스트, 배열 또는 텐서와 같은 숫자 시퀀스가 첫 번째 인수로 제공되면 np.histogram을 호출하여 히스토그램이 자동으로 구성됩니다. 모든 배열/텐서는 평면화됩니다. 선택적 num_bins 키워드 인수를 사용하여 기본값인 64개 구간을 재정의할 수 있습니다. 지원되는 최대 구간 수는 512개입니다.

UI에서 히스토그램은 x축에 트레이닝 스텝, y축에 메트릭 값, 색상으로 표현되는 개수로 플롯되어 트레이닝 전반에 걸쳐 기록된 히스토그램을 쉽게 비교할 수 있습니다. 일회성 히스토그램 로깅에 대한 자세한 내용은 이 패널의 “요약의 히스토그램” 탭을 참조하세요.

wandb.log({"gradients": wandb.Histogram(grads)})
Gradients for the discriminator in a GAN.

더 많은 제어를 원하면 np.histogram을 호출하고 반환된 튜플을 np_histogram 키워드 인수에 전달합니다.

np_hist_grads = np.histogram(grads, density=True, range=(0.0, 1.0))
wandb.log({"gradients": wandb.Histogram(np_hist_grads)})
wandb.run.summary.update(  # if only in summary, only visible on Overview 탭
    {"final_logits": wandb.Histogram(logits)}
)

'obj', 'gltf', 'glb', 'babylon', 'stl', 'pts.json' 형식으로 파일을 기록하면 run이 완료될 때 UI에서 렌더링됩니다.

wandb.log(
    {
        "generated_samples": [
            wandb.Object3D(open("sample.obj")),
            wandb.Object3D(open("sample.gltf")),
            wandb.Object3D(open("sample.glb")),
        ]
    }
)
Ground truth and prediction of a headphones point cloud

라이브 예시 보기

히스토그램이 요약에 있으면 Run 페이지의 Overview 탭에 나타납니다. 히스토리가 있으면 차트 탭에서 시간 경과에 따른 구간의 히트맵이 플롯됩니다.

3D 시각화

바운딩 박스가 있는 3D 포인트 클라우드와 Lidar 장면을 기록합니다. 렌더링할 점에 대한 좌표와 색상을 포함하는 NumPy 배열을 전달합니다.

point_cloud = np.array([[0, 0, 0, COLOR]])

wandb.log({"point_cloud": wandb.Object3D(point_cloud)})

:::info W&B UI는 데이터를 300,000개 포인트에서 자릅니다. :::

NumPy 배열 형식

유연한 색 구성표를 위해 세 가지 다른 형식의 NumPy 배열이 지원됩니다.

  • [[x, y, z], ...] nx3
  • [[x, y, z, c], ...] nx4 | c는 카테고리입니다 범위 [1, 14] (세그멘테이션에 유용)
  • [[x, y, z, r, g, b], ...] nx6 | r,g,b는 빨강, 초록 및 파랑 색상 채널에 대한 범위 [0,255]의 값입니다.

Python 오브젝트

이 스키마를 사용하면 Python 오브젝트를 정의하고 the from_point_cloud method에 아래와 같이 전달할 수 있습니다.

  • points위에 표시된 단순 포인트 클라우드 렌더러와 동일한 형식을 사용하여 렌더링할 점에 대한 좌표와 색상을 포함하는 NumPy 배열입니다.
  • boxes는 세 가지 속성이 있는 Python 사전의 NumPy 배열입니다.
    • corners- 8개 코너의 리스트
    • label- 박스에 렌더링할 레이블을 나타내는 문자열입니다 (선택 사항)
    • color- 박스의 RGB 값을 나타냅니다
    • score - 바운딩 박스에 표시되며 표시된 바운딩 박스를 필터링하는 데 사용할 수 있는 숫자 값입니다 (예: score > 0.75인 바운딩 박스만 표시). (선택 사항)
  • type은 렌더링할 장면 유형을 나타내는 문자열입니다. 현재 지원되는 유일한 값은 lidar/beta입니다.
point_list = [
    [
        2566.571924017235, # x
        746.7817289698219, # y
        -15.269245470863748,# z
        76.5, # red
        127.5, # green
        89.46617199365393 # blue
    ],
    [ 2566.592983606823, 746.6791987335685, -15.275803826279521, 76.5, 127.5, 89.45471117247024 ],
    [ 2566.616361739416, 746.4903185513501, -15.28628929674075, 76.5, 127.5, 89.41336375503832 ],
    [ 2561.706014951675, 744.5349468458361, -14.877496818222781, 76.5, 127.5, 82.21868245418283 ],
    [ 2561.5281847916694, 744.2546118233013, -14.867862032341005, 76.5, 127.5, 81.87824684536432 ],
    [ 2561.3693562897465, 744.1804761656741, -14.854129178142523, 76.5, 127.5, 81.64137897587152 ],
    [ 2561.6093071504515, 744.0287526628543, -14.882135189841177, 76.5, 127.5, 81.89871499537098 ],
    # ... and so on
]

run.log({"my_first_point_cloud": wandb.Object3D.from_point_cloud(
     points = point_list,
     boxes = [{
         "corners": [
                [ 2601.2765123137915, 767.5669506323393, -17.816764802288663 ],
                [ 2599.7259021588347, 769.0082337923552, -17.816764802288663 ],
                [ 2599.7259021588347, 769.0082337923552, -19.66876480228866 ],
                [ 2601.2765123137915, 767.5669506323393, -19.66876480228866 ],
                [ 2604.8684867834395, 771.4313904894723, -17.816764802288663 ],
                [ 2603.3178766284827, 772.8726736494882, -17.816764802288663 ],
                [ 2603.3178766284827, 772.8726736494882, -19.66876480228866 ],
                [ 2604.8684867834395, 771.4313904894723, -19.66876480228866 ]
        ],
         "color": [0, 0, 255], # 바운딩 박스의 RGB 색상
         "label": "car", # 바운딩 박스에 표시되는 문자열
         "score": 0.6 # 바운딩 박스에 표시되는 숫자
     }],
     vectors = [
        {"start": [0, 0, 0], "end": [0.1, 0.2, 0.5], "color": [255, 0, 0]}, # 색상은 선택 사항입니다.
     ],
     point_cloud_type = "lidar/beta",
)})

포인트 클라우드를 볼 때 control 키를 누른 상태에서 마우스를 사용하여 공간 내부를 이동할 수 있습니다.

포인트 클라우드 파일

the from_file method를 사용하여 포인트 클라우드 데이터로 가득 찬 JSON 파일을 로드할 수 있습니다.

run.log({"my_cloud_from_file": wandb.Object3D.from_file(
     "./my_point_cloud.pts.json"
)})

포인트 클라우드 데이터 형식을 지정하는 방법의 예는 아래와 같습니다.

{
    "boxes": [
        {
            "color": [
                0,
                255,
                0
            ],
            "score": 0.35,
            "label": "My label",
            "corners": [
                [
                    2589.695869075582,
                    760.7400443552185,
                    -18.044831294622487
                ],
                [
                    2590.719039645323,
                    762.3871153874499,
                    -18.044831294622487
                ],
                [
                    2590.719039645323,
                    762.3871153874499,
                    -19.54083129462249
                ],
                [
                    2589.695869075582,
                    760.7400443552185,
                    -19.54083129462249
                ],
                [
                    2594.9666662674313,
                    757.4657929961453,
                    -18.044831294622487
                ],
                [
                    2595.9898368371723,
                    759.1128640283766,
                    -18.044831294622487
                ],
                [
                    2595.9898368371723,
                    759.1128640283766,
                    -19.54083129462249
                ],
                [
                    2594.9666662674313,
                    757.4657929961453,
                    -19.54083129462249
                ]
            ]
        }
    ],
    "points": [
        [
            2566.571924017235,
            746.7817289698219,
            -15.269245470863748,
            76.5,
            127.5,
            89.46617199365393
        ],
        [
            2566.592983606823,
            746.6791987335685,
            -15.275803826279521,
            76.5,
            127.5,
            89.45471117247024
        ],
        [
            2566.616361739416,
            746.4903185513501,
            -15.28628929674075,
            76.5,
            127.5,
            89.41336375503832
        ]
    ],
    "type": "lidar/beta"
}

NumPy 배열

위에서 정의한 것과 동일한 배열 형식을 사용하여 [numpy 배열을 the from_numpy` method와 함께 직접 사용하여 포인트 클라우드를 정의할 수 있습니다.

run.log({"my_cloud_from_numpy_xyz": wandb.Object3D.from_numpy(
     np.array(
        [
            [0.4, 1, 1.3], # x, y, z
            [1, 1, 1],
            [1.2, 1, 1.2]
        ]
    )
)})
run.log({"my_cloud_from_numpy_cat": wandb.Object3D.from_numpy(
     np.array(
        [
            [0.4, 1, 1.3, 1], # x, y, z, 카테고리
            [1, 1, 1, 1],
            [1.2, 1, 1.2, 12],
            [1.2, 1, 1.3, 12],
            [1.2, 1, 1.4, 12],
            [1.2, 1, 1.5, 12],
            [1.2, 1, 1.6, 11],
            [1.2, 1, 1.7, 11],
        ]
    )
)})
run.log({"my_cloud_from_numpy_rgb": wandb.Object3D.from_numpy(
     np.array(
        [
            [0.4, 1, 1.3, 255, 0, 0], # x, y, z, r, g, b
            [1, 1, 1, 0, 255, 0],
            [1.2, 1, 1.3, 0, 255, 255],
            [1.2, 1, 1.4, 0, 255, 255],
            [1.2, 1, 1.5, 0, 0, 255],
            [1.2, 1, 1.1, 0, 0, 255],
            [1.2, 1, 0.9, 0, 0, 255],
        ]
    )
)})
wandb.log({"protein": wandb.Molecule("6lu7.pdb")})

10가지 파일 형식(pdb, pqr, mmcif, mcif, cif, sdf, sd, gro, mol2 또는 mmtf)으로 분자 데이터를 기록합니다.

또한 W&B는 SMILES 문자열, rdkit mol 파일 및 rdkit.Chem.rdchem.Mol 오브젝트에서 분자 데이터 로깅을 지원합니다.

resveratrol = rdkit.Chem.MolFromSmiles("Oc1ccc(cc1)C=Cc1cc(O)cc(c1)O")

wandb.log(
    {
        "resveratrol": wandb.Molecule.from_rdkit(resveratrol),
        "green fluorescent protein": wandb.Molecule.from_rdkit("2b3p.mol"),
        "acetaminophen": wandb.Molecule.from_smiles("CC(=O)Nc1ccc(O)cc1"),
    }
)

run이 완료되면 UI에서 분자의 3D 시각화와 상호 작용할 수 있습니다.

AlphaFold를 사용하는 라이브 예시 보기

PNG 이미지

wandb.Imagenumpy 배열 또는 PILImage 인스턴스를 기본적으로 PNG로 변환합니다.

wandb.log({"example": wandb.Image(...)})
# 또는 여러 이미지
wandb.log({"example": [wandb.Image(...) for img in images]})

비디오

비디오는 wandb.Video 데이터 유형을 사용하여 기록됩니다.

wandb.log({"example": wandb.Video("myvideo.mp4")})

이제 미디어 브라우저에서 비디오를 볼 수 있습니다. 프로젝트 워크스페이스, run 워크스페이스 또는 리포트로 이동하여 시각화 추가를 클릭하여 풍부한 미디어 패널을 추가합니다.

분자의 2D 보기

wandb.Image 데이터 유형과 rdkit을 사용하여 분자의 2D 보기를 기록할 수 있습니다.

molecule = rdkit.Chem.MolFromSmiles("CC(=O)O")
rdkit.Chem.AllChem.Compute2DCoords(molecule)
rdkit.Chem.AllChem.GenerateDepictionMatching2DStructure(molecule, molecule)
pil_image = rdkit.Chem.Draw.MolToImage(molecule, size=(300, 300))

wandb.log({"acetic_acid": wandb.Image(pil_image)})

기타 미디어

W&B는 다양한 다른 미디어 유형의 로깅도 지원합니다.

오디오

wandb.log({"whale songs": wandb.Audio(np_array, caption="OooOoo", sample_rate=32)})

스텝당 최대 100개의 오디오 클립을 기록할 수 있습니다. 자세한 사용 정보는 audio-file을 참조하세요.

비디오

wandb.log({"video": wandb.Video(numpy_array_or_path_to_video, fps=4, format="gif")})

numpy 배열이 제공되면 차원은 시간, 채널, 너비, 높이 순서라고 가정합니다. 기본적으로 4fps gif 이미지를 만듭니다 (ffmpegmoviepy python 라이브러리는 numpy 오브젝트를 전달할 때 필요합니다). 지원되는 형식은 "gif", "mp4", "webm""ogg"입니다. 문자열을 wandb.Video에 전달하면 파일을 업로드하기 전에 파일이 존재하고 지원되는 형식인지 확인합니다. BytesIO 오브젝트를 전달하면 지정된 형식을 확장자로 사용하여 임시 파일이 생성됩니다.

W&B RunProject 페이지에서 미디어 섹션에 비디오가 표시됩니다.

자세한 사용 정보는 video-file을 참조하세요.

텍스트

UI에 표시되도록 테이블에 텍스트를 기록하려면 wandb.Table을 사용합니다. 기본적으로 열 헤더는 ["Input", "Output", "Expected"]입니다. 최적의 UI 성능을 보장하기 위해 기본 최대 행 수는 10,000으로 설정됩니다. 그러나 사용자는 wandb.Table.MAX_ROWS = {DESIRED_MAX}를 사용하여 최대값을 명시적으로 재정의할 수 있습니다.

columns = ["Text", "Predicted Sentiment", "True Sentiment"]
# Method 1
data = [["I love my phone", "1", "1"], ["My phone sucks", "0", "-1"]]
table = wandb.Table(data=data, columns=columns)
wandb.log({"examples": table})

# Method 2
table = wandb.Table(columns=columns)
table.add_data("I love my phone", "1", "1")
table.add_data("My phone sucks", "0", "-1")
wandb.log({"examples": table})

pandas DataFrame 오브젝트를 전달할 수도 있습니다.

table = wandb.Table(dataframe=my_dataframe)

자세한 사용 정보는 string을 참조하세요.

HTML

wandb.log({"custom_file": wandb.Html(open("some.html"))})
wandb.log({"custom_string": wandb.Html('<a href="https://mysite">Link</a>')})

사용자 지정 HTML은 임의의 키로 기록할 수 있으며, 이는 run 페이지에서 HTML 패널을 노출합니다. 기본적으로 기본 스타일을 삽입합니다. inject=False를 전달하여 기본 스타일을 해제할 수 있습니다.

wandb.log({"custom_file": wandb.Html(open("some.html"), inject=False)})

자세한 사용 정보는 html-file을 참조하세요.

2.1.6.5 - Log models

모델 로깅

다음 가이드는 모델을 W&B run에 로깅하고 상호 작용하는 방법을 설명합니다.

모델을 run에 로깅

log_model을 사용하여 지정한 디렉토리 내에 콘텐츠가 포함된 모델 아티팩트를 로깅합니다. log_model 메서드는 결과 모델 아티팩트를 W&B run의 출력으로 표시합니다.

모델을 W&B run의 입력 또는 출력으로 표시하면 모델의 종속성과 모델의 연결을 추적할 수 있습니다. W&B App UI 내에서 모델의 계보를 확인하세요. 자세한 내용은 Artifacts 챕터의 아티팩트 그래프 탐색 및 트래버스 페이지를 참조하세요.

모델 파일이 저장된 경로를 path 파라미터에 제공하세요. 경로는 로컬 파일, 디렉토리 또는 s3://bucket/path와 같은 외부 버킷에 대한 참조 URI일 수 있습니다.

<>로 묶인 값은 사용자 고유의 값으로 바꾸세요.

import wandb

# W&B run 초기화
run = wandb.init(project="<your-project>", entity="<your-entity>")

# 모델 로깅
run.log_model(path="<path-to-model>", name="<name>")

선택적으로 name 파라미터에 모델 아티팩트 이름을 제공합니다. name이 지정되지 않은 경우 W&B는 run ID가 앞에 붙은 입력 경로의 기본 이름을 이름으로 사용합니다.

가능한 파라미터에 대한 자세한 내용은 API 참조 가이드의 log_model을 참조하세요.

예시: 모델을 run에 로깅
import os
import wandb
from tensorflow import keras
from tensorflow.keras import layers

config = {"optimizer": "adam", "loss": "categorical_crossentropy"}

# W&B run 초기화
run = wandb.init(entity="charlie", project="mnist-experiments", config=config)

# 하이퍼파라미터
loss = run.config["loss"]
optimizer = run.config["optimizer"]
metrics = ["accuracy"]
num_classes = 10
input_shape = (28, 28, 1)

# 트레이닝 알고리즘
model = keras.Sequential(
    [
        layers.Input(shape=input_shape),
        layers.Conv2D(32, kernel_size=(3, 3), activation="relu"),
        layers.MaxPooling2D(pool_size=(2, 2)),
        layers.Conv2D(64, kernel_size=(3, 3), activation="relu"),
        layers.MaxPooling2D(pool_size=(2, 2)),
        layers.Flatten(),
        layers.Dropout(0.5),
        layers.Dense(num_classes, activation="softmax"),
    ]
)

# 트레이닝을 위한 모델 구성
model.compile(loss=loss, optimizer=optimizer, metrics=metrics)

# 모델 저장
model_filename = "model.h5"
local_filepath = "./"
full_path = os.path.join(local_filepath, model_filename)
model.save(filepath=full_path)

# 모델을 W&B run에 로깅
run.log_model(path=full_path, name="MNIST")
run.finish()

사용자가 log_model을 호출하면 MNIST라는 모델 아티팩트가 생성되고 파일 model.h5가 모델 아티팩트에 추가되었습니다. 터미널 또는 노트북에 모델이 로깅된 run에 대한 정보를 찾을 수 있는 위치가 출력됩니다.

View run different-surf-5 at: https://wandb.ai/charlie/mnist-experiments/runs/wlby6fuw
Synced 5 W&B file(s), 0 media file(s), 1 artifact file(s) and 0 other file(s)
Find logs at: ./wandb/run-20231206_103511-wlby6fuw/logs

로깅된 모델 다운로드 및 사용

use_model 함수를 사용하여 이전에 W&B run에 로깅된 모델 파일에 엑세스하고 다운로드합니다.

검색하려는 모델 파일이 저장된 모델 아티팩트의 이름을 제공합니다. 제공하는 이름은 기존의 로깅된 모델 아티팩트의 이름과 일치해야 합니다.

log_model로 파일을 원래 로깅할 때 name을 정의하지 않은 경우 할당된 기본 이름은 run ID가 앞에 붙은 입력 경로의 기본 이름입니다.

<>로 묶인 다른 값은 사용자 고유의 값으로 바꾸세요.

import wandb

# run 초기화
run = wandb.init(project="<your-project>", entity="<your-entity>")

# 모델에 엑세스 및 다운로드합니다. 다운로드된 아티팩트의 경로를 반환합니다.
downloaded_model_path = run.use_model(name="<your-model-name>")

use_model 함수는 다운로드된 모델 파일의 경로를 반환합니다. 나중에 이 모델을 연결하려면 이 경로를 추적하세요. 앞의 코드 조각에서 반환된 경로는 downloaded_model_path라는 변수에 저장됩니다.

예시: 로깅된 모델 다운로드 및 사용

예를 들어, 앞의 코드 조각에서 사용자는 use_model API를 호출했습니다. 그들은 가져오려는 모델 아티팩트의 이름을 지정하고 버전/에일리어스도 제공했습니다. 그런 다음 API에서 반환된 경로를 downloaded_model_path 변수에 저장했습니다.

import wandb

entity = "luka"
project = "NLP_Experiments"
alias = "latest"  # 모델 버전에 대한 시맨틱 닉네임 또는 식별자
model_artifact_name = "fine-tuned-model"

# run 초기화
run = wandb.init(project=project, entity=entity)
# 모델에 엑세스 및 다운로드합니다. 다운로드된 아티팩트의 경로를 반환합니다.
downloaded_model_path = run.use_model(name = f"{model_artifact_name}:{alias}") 

가능한 파라미터 및 반환 유형에 대한 자세한 내용은 API 참조 가이드의 use_model을 참조하세요.

모델을 로깅하고 W&B Model Registry에 연결

link_model 메서드를 사용하여 모델 파일을 W&B run에 로깅하고 W&B Model Registry에 연결합니다. 등록된 모델이 없으면 W&B는 registered_model_name 파라미터에 제공하는 이름으로 새 모델을 만듭니다.

모델을 연결하는 것은 팀의 다른 구성원이 보고 사용할 수 있는 모델의 중앙 집중식 팀 리포지토리에 모델을 ‘북마크’하거나 ‘게시’하는 것과 유사합니다.

모델을 연결하면 해당 모델이 Registry에서 복제되거나 프로젝트에서 레지스트리로 이동되지 않습니다. 연결된 모델은 프로젝트의 원래 모델에 대한 포인터입니다.

Registry를 사용하여 작업별로 최상의 모델을 구성하고, 모델 수명 주기를 관리하고, ML 수명 주기 전반에 걸쳐 간편한 추적 및 감사를 용이하게 하고, 웹 훅 또는 작업을 통해 다운스트림 작업을 자동화합니다.

Registered ModelModel Registry의 연결된 모델 버전의 컬렉션 또는 폴더입니다. 등록된 모델은 일반적으로 단일 모델링 유스 케이스 또는 작업에 대한 후보 모델을 나타냅니다.

앞의 코드 조각은 link_model API로 모델을 연결하는 방법을 보여줍니다. <>로 묶인 다른 값은 사용자 고유의 값으로 바꾸세요.

import wandb

run = wandb.init(entity="<your-entity>", project="<your-project>")
run.link_model(path="<path-to-model>", registered_model_name="<registered-model-name>")
run.finish()

선택적 파라미터에 대한 자세한 내용은 API 참조 가이드의 link_model을 참조하세요.

registered-model-name이 Model Registry 내에 이미 존재하는 등록된 모델의 이름과 일치하면 모델이 해당 등록된 모델에 연결됩니다. 이러한 등록된 모델이 없으면 새 모델이 생성되고 모델이 첫 번째로 연결됩니다.

예를 들어, Model Registry에 “Fine-Tuned-Review-Autocompletion"이라는 기존 등록된 모델이 있다고 가정합니다(예제는 여기 참조). 그리고 몇 개의 모델 버전이 이미 v0, v1, v2로 연결되어 있다고 가정합니다. registered-model-name="Fine-Tuned-Review-Autocompletion"으로 link_model을 호출하면 새 모델이 이 기존 등록된 모델에 v3으로 연결됩니다. 이 이름으로 등록된 모델이 없으면 새 모델이 생성되고 새 모델이 v0으로 연결됩니다.

예시: 모델을 로깅하고 W&B Model Registry에 연결

예를 들어, 앞의 코드 조각은 모델 파일을 로깅하고 모델을 등록된 모델 이름 "Fine-Tuned-Review-Autocompletion"에 연결합니다.

이를 위해 사용자는 link_model API를 호출합니다. API를 호출할 때 모델 콘텐츠를 가리키는 로컬 파일 경로(path)를 제공하고 연결할 등록된 모델의 이름(registered_model_name)을 제공합니다.

import wandb

path = "/local/dir/model.pt"
registered_model_name = "Fine-Tuned-Review-Autocompletion"

run = wandb.init(project="llm-evaluation", entity="noa")
run.link_model(path=path, registered_model_name=registered_model_name)
run.finish()

2.1.6.6 - Log summary metrics

트레이닝 과정에서 시간이 지남에 따라 변하는 값 외에도, 모델 또는 전처리 단계를 요약하는 단일 값을 추적하는 것이 중요한 경우가 많습니다. W&B Run의 summary 사전에 이 정보를 기록하세요. Run의 summary 사전은 numpy 배열, PyTorch 텐서 또는 TensorFlow 텐서를 처리할 수 있습니다. 값이 이러한 유형 중 하나인 경우 전체 텐서를 바이너리 파일에 유지하고 요약 오브젝트에 최소값, 평균, 분산, 백분위수 등과 같은 높은 수준의 메트릭을 저장합니다.

wandb.log로 기록된 마지막 값은 W&B Run에서 자동으로 summary 사전으로 설정됩니다. summary 메트릭 사전이 수정되면 이전 값은 손실됩니다.

다음 코드 조각은 사용자 정의 summary 메트릭을 W&B에 제공하는 방법을 보여줍니다.

wandb.init(config=args)

best_accuracy = 0
for epoch in range(1, args.epochs + 1):
    test_loss, test_accuracy = test()
    if test_accuracy > best_accuracy:
        wandb.summary["best_accuracy"] = test_accuracy
        best_accuracy = test_accuracy

트레이닝이 완료된 후 기존 W&B Run의 summary 속성을 업데이트할 수 있습니다. W&B Public API를 사용하여 summary 속성을 업데이트합니다.

api = wandb.Api()
run = api.run("username/project/run_id")
run.summary["tensor"] = np.random.random(1000)
run.summary.update()

summary 메트릭 사용자 정의

사용자 정의 summary 메트릭은 wandb.summary에서 트레이닝의 최적 단계에서 모델 성능을 캡처하는 데 유용합니다. 예를 들어 최종 값 대신 최대 정확도 또는 최소 손실 값을 캡처할 수 있습니다.

기본적으로 summary는 히스토리의 최종 값을 사용합니다. summary 메트릭을 사용자 정의하려면 define_metric에서 summary 인수를 전달합니다. 다음 값을 사용할 수 있습니다.

  • "min"
  • "max"
  • "mean"
  • "best"
  • "last"
  • "none"

선택적 objective 인수를 "minimize" 또는 "maximize"로 설정한 경우에만 "best"를 사용할 수 있습니다.

다음 예제는 손실 및 정확도의 최소값과 최대값을 summary에 추가합니다.

import wandb
import random

random.seed(1)
wandb.init()

# 손실에 대한 최소값 및 최대값 summary
wandb.define_metric("loss", summary="min")
wandb.define_metric("loss", summary="max")

# 정확도에 대한 최소값 및 최대값 summary
wandb.define_metric("acc", summary="min")
wandb.define_metric("acc", summary="max")

for i in range(10):
    log_dict = {
        "loss": random.uniform(0, 1 / (i + 1)),
        "acc": random.uniform(1 / (i + 1), 1),
    }
    wandb.log(log_dict)

summary 메트릭 보기

run의 Overview 페이지 또는 프로젝트의 runs 테이블에서 summary 값을 봅니다.

  1. W&B 앱으로 이동합니다.
  2. Workspace 탭을 선택합니다.
  3. runs 목록에서 summary 값이 기록된 run의 이름을 클릭합니다.
  4. Overview 탭을 선택합니다.
  5. Summary 섹션에서 summary 값을 봅니다.
W&B에 기록된 run의 Overview 페이지. UI의 오른쪽 하단 모서리에 Summary 메트릭 섹션 내에서 기계 학습 모델 정확도 및 손실의 최소값과 최대값이 표시됩니다.
  1. W&B 앱으로 이동합니다.
  2. Runs 탭을 선택합니다.
  3. runs 테이블 내에서 summary 값의 이름을 기준으로 열 내에서 summary 값을 볼 수 있습니다.

W&B Public API를 사용하여 run의 summary 값을 가져올 수 있습니다.

다음 코드 예제는 W&B Public API 및 pandas를 사용하여 특정 run에 기록된 summary 값을 검색하는 한 가지 방법을 보여줍니다.

import wandb
import pandas

entity = "<your-entity>"
project = "<your-project>"
run_name = "<your-run-name>" # summary 값이 있는 run의 이름

all_runs = []

for run in api.runs(f"{entity}/{project_name}"):
  print("Fetching details for run: ", run.id, run.name)
  run_data = {
            "id": run.id,
            "name": run.name,
            "url": run.url,
            "state": run.state,
            "tags": run.tags,
            "config": run.config,
            "created_at": run.created_at,
            "system_metrics": run.system_metrics,
            "summary": run.summary,
            "project": run.project,
            "entity": run.entity,
            "user": run.user,
            "path": run.path,
            "notes": run.notes,
            "read_only": run.read_only,
            "history_keys": run.history_keys,
            "metadata": run.metadata,
        }
  all_runs.append(run_data)
  
# DataFrame으로 변환
df = pd.DataFrame(all_runs)

# 열 이름(run)을 기준으로 행을 가져오고 사전으로 변환
df[df['name']==run_name].summary.reset_index(drop=True).to_dict()

2.1.6.7 - Log tables

W&B로 테이블을 로그합니다.

wandb.Table을 사용하여 데이터를 기록하고 Weights & Biases로 시각화하고 쿼리합니다. 이 가이드에서는 다음 방법을 배울 수 있습니다.

  1. 테이블 만들기
  2. 데이터 추가
  3. 데이터 검색
  4. 테이블 저장

테이블 만들기

테이블을 정의하려면 데이터의 각 행에 대해 보려는 열을 지정합니다. 각 행은 트레이닝 데이터셋의 단일 항목, 트레이닝 중의 특정 단계 또는 에포크, 테스트 항목에 대한 모델의 예측값, 모델에서 생성된 오브젝트 등이 될 수 있습니다. 각 열에는 숫자, 텍스트, 부울, 이미지, 비디오, 오디오 등 고정된 유형이 있습니다. 유형을 미리 지정할 필요는 없습니다. 각 열에 이름을 지정하고 해당 유형의 데이터만 해당 열 인덱스로 전달해야 합니다. 더 자세한 예는 이 리포트를 참조하십시오.

다음 두 가지 방법 중 하나로 wandb.Table 생성자를 사용합니다.

  1. 행 목록: 이름이 지정된 열과 데이터 행을 기록합니다. 예를 들어 다음 코드 조각은 두 개의 행과 세 개의 열이 있는 테이블을 생성합니다.
wandb.Table(columns=["a", "b", "c"], data=[["1a", "1b", "1c"], ["2a", "2b", "2c"]])
  1. Pandas DataFrame: wandb.Table(dataframe=my_df)를 사용하여 DataFrame을 기록합니다. 열 이름은 DataFrame에서 추출됩니다.

기존 배열 또는 데이터 프레임에서

# 모델이 다음 필드를 사용할 수 있는 네 개의 이미지에 대한 예측을 반환했다고 가정합니다.
# - 이미지 ID
# - wandb.Image()로 래핑된 이미지 픽셀
# - 모델의 예측 레이블
# - 그라운드 트루스 레이블
my_data = [
    [0, wandb.Image("img_0.jpg"), 0, 0],
    [1, wandb.Image("img_1.jpg"), 8, 0],
    [2, wandb.Image("img_2.jpg"), 7, 1],
    [3, wandb.Image("img_3.jpg"), 1, 1],
]

# 해당 열이 있는 wandb.Table() 생성
columns = ["id", "image", "prediction", "truth"]
test_table = wandb.Table(data=my_data, columns=columns)

데이터 추가

테이블은 변경 가능합니다. 스크립트가 실행될 때 테이블에 최대 200,000개의 행까지 더 많은 데이터를 추가할 수 있습니다. 테이블에 데이터를 추가하는 방법에는 두 가지가 있습니다.

  1. 행 추가: table.add_data("3a", "3b", "3c"). 새 행은 목록으로 표시되지 않습니다. 행이 목록 형식인 경우 별표 표기법 *을 사용하여 목록을 위치 인수로 확장합니다. table.add_data(*my_row_list). 행에는 테이블의 열 수와 동일한 수의 항목이 포함되어야 합니다.
  2. 열 추가: table.add_column(name="col_name", data=col_data). col_data의 길이는 테이블의 현재 행 수와 같아야 합니다. 여기서 col_data는 목록 데이터 또는 NumPy NDArray일 수 있습니다.

점진적으로 데이터 추가

이 코드 샘플은 W&B 테이블을 점진적으로 생성하고 채우는 방법을 보여줍니다. 가능한 모든 레이블에 대한 신뢰도 점수를 포함하여 미리 정의된 열로 테이블을 정의하고 추론 중에 행별로 데이터를 추가합니다. run을 재개할 때 테이블에 점진적으로 데이터를 추가할 수도 있습니다.

# 각 레이블에 대한 신뢰도 점수를 포함하여 테이블의 열을 정의합니다.
columns = ["id", "image", "guess", "truth"]
for digit in range(10):  # 각 숫자(0-9)에 대한 신뢰도 점수 열을 추가합니다.
    columns.append(f"score_{digit}")

# 정의된 열로 테이블을 초기화합니다.
test_table = wandb.Table(columns=columns)

# 테스트 데이터셋을 반복하고 데이터를 행별로 테이블에 추가합니다.
# 각 행에는 이미지 ID, 이미지, 예측 레이블, 트루 레이블 및 신뢰도 점수가 포함됩니다.
for img_id, img in enumerate(mnist_test_data):
    true_label = mnist_test_data_labels[img_id]  # 그라운드 트루스 레이블
    guess_label = my_model.predict(img)  # 예측 레이블
    test_table.add_data(
        img_id, wandb.Image(img), guess_label, true_label
    )  # 테이블에 행 데이터를 추가합니다.

재개된 run에 데이터 추가

아티팩트에서 기존 테이블을 로드하고, 데이터의 마지막 행을 검색하고, 업데이트된 메트릭을 추가하여 재개된 run에서 W&B 테이블을 점진적으로 업데이트할 수 있습니다. 그런 다음 호환성을 위해 테이블을 다시 초기화하고 업데이트된 버전을 W&B에 다시 기록합니다.

# 아티팩트에서 기존 테이블을 로드합니다.
best_checkpt_table = wandb.use_artifact(table_tag).get(table_name)

# 재개를 위해 테이블에서 데이터의 마지막 행을 가져옵니다.
best_iter, best_metric_max, best_metric_min = best_checkpt_table.data[-1]

# 필요에 따라 최상의 메트릭을 업데이트합니다.

# 업데이트된 데이터를 테이블에 추가합니다.
best_checkpt_table.add_data(best_iter, best_metric_max, best_metric_min)

# 호환성을 보장하기 위해 업데이트된 데이터로 테이블을 다시 초기화합니다.
best_checkpt_table = wandb.Table(
    columns=["col1", "col2", "col3"], data=best_checkpt_table.data
)

# 업데이트된 테이블을 Weights & Biases에 기록합니다.
wandb.log({table_name: best_checkpt_table})

데이터 검색

데이터가 테이블에 있으면 열 또는 행별로 엑세스합니다.

  1. 행 반복기: 사용자는 for ndx, row in table.iterrows(): ...와 같은 테이블의 행 반복기를 사용하여 데이터의 행을 효율적으로 반복할 수 있습니다.
  2. 열 가져오기: 사용자는 table.get_column("col_name")을 사용하여 데이터 열을 검색할 수 있습니다. 편의를 위해 사용자는 convert_to="numpy"를 전달하여 열을 기본 요소의 NumPy NDArray로 변환할 수 있습니다. 이는 열에 기본 데이터에 직접 엑세스할 수 있도록 wandb.Image와 같은 미디어 유형이 포함된 경우에 유용합니다.

테이블 저장

예를 들어 모델 예측 테이블과 같이 스크립트에서 데이터 테이블을 생성한 후 결과를 라이브로 시각화하기 위해 W&B에 저장합니다.

테이블을 run에 기록

wandb.log()를 사용하여 다음과 같이 테이블을 run에 저장합니다.

run = wandb.init()
my_table = wandb.Table(columns=["a", "b"], data=[["1a", "1b"], ["2a", "2b"]])
run.log({"table_key": my_table})

테이블이 동일한 키에 기록될 때마다 테이블의 새 버전이 생성되어 백엔드에 저장됩니다. 즉, 모델 예측이 시간이 지남에 따라 어떻게 향상되는지 확인하기 위해 여러 트레이닝 단계에서 동일한 테이블을 기록하거나 동일한 키에 기록되는 한 다른 run에서 테이블을 비교할 수 있습니다. 최대 200,000개의 행을 기록할 수 있습니다.

프로그래밍 방식으로 테이블 엑세스

백엔드에서 테이블은 Artifacts로 유지됩니다. 특정 버전에 엑세스하려면 아티팩트 API를 사용하여 엑세스할 수 있습니다.

with wandb.init() as run:
    my_table = run.use_artifact("run-<run-id>-<table-name>:<tag>").get("<table-name>")

Artifacts에 대한 자세한 내용은 개발자 가이드의 Artifacts 챕터를 참조하십시오.

테이블 시각화

이러한 방식으로 기록된 테이블은 Run 페이지와 Project 페이지 모두의 Workspace에 표시됩니다. 자세한 내용은 테이블 시각화 및 분석을 참조하십시오.

아티팩트 테이블

artifact.add()를 사용하여 워크스페이스 대신 run의 Artifacts 섹션에 테이블을 기록합니다. 이는 한 번 기록한 다음 향후 run에 참조할 데이터셋이 있는 경우에 유용할 수 있습니다.

run = wandb.init(project="my_project")
# 각 의미 있는 단계에 대한 wandb Artifact 생성
test_predictions = wandb.Artifact("mnist_test_preds", type="predictions")

# [위와 같이 예측 데이터 빌드]
test_table = wandb.Table(data=data, columns=columns)
test_predictions.add(test_table, "my_test_key")
run.log_artifact(test_predictions)

이미지 데이터와 함께 artifact.add()자세한 예는 이 Colab을 참조하고, Artifacts 및 Tables를 사용하여 테이블 형식 데이터의 버전 제어 및 중복 제거하는 방법의 예는 이 리포트를 참조하십시오.

아티팩트 테이블 결합

wandb.JoinedTable(table_1, table_2, join_key)를 사용하여 로컬에서 구성한 테이블 또는 다른 아티팩트에서 검색한 테이블을 결합할 수 있습니다.

인수 설명
table_1 (str, wandb.Table, ArtifactEntry) 아티팩트의 wandb.Table 경로, 테이블 오브젝트 또는 ArtifactEntry
table_2 (str, wandb.Table, ArtifactEntry) 아티팩트의 wandb.Table 경로, 테이블 오브젝트 또는 ArtifactEntry
join_key (str, [str, str]) 결합을 수행할 키

아티팩트 컨텍스트에서 이전에 기록한 두 개의 테이블을 결합하려면 아티팩트에서 가져와 결과를 새 테이블로 결합합니다.

예를 들어 'original_songs'라는 원본 노래의 테이블 하나와 동일한 노래의 합성 버전의 또 다른 테이블인 'synth_songs'를 읽는 방법을 보여줍니다. 다음 코드 예제는 "song_id"에서 두 테이블을 결합하고 결과 테이블을 새 W&B 테이블로 업로드합니다.

import wandb

run = wandb.init(project="my_project")

# 원본 노래 테이블 가져오기
orig_songs = run.use_artifact("original_songs:latest")
orig_table = orig_songs.get("original_samples")

# 합성 노래 테이블 가져오기
synth_songs = run.use_artifact("synth_songs:latest")
synth_table = synth_songs.get("synth_samples")

# "song_id"에서 테이블 결합
join_table = wandb.JoinedTable(orig_table, synth_table, "song_id")
join_at = wandb.Artifact("synth_summary", "analysis")

# 아티팩트에 테이블을 추가하고 W&B에 기록
join_at.add(join_table, "synth_explore")
run.log_artifact(join_at)

서로 다른 Artifact 오브젝트에 저장된 두 개의 이전에 저장된 테이블을 결합하는 방법의 예는 이 튜토리얼을 참조하십시오.

2.1.6.8 - Track CSV files with experiments

W&B로 데이터를 가져오고 로깅하기

W&B Python 라이브러리를 사용하여 CSV 파일을 기록하고 W&B 대시보드에서 시각화하세요. W&B 대시보드는 기계 학습 모델의 결과를 구성하고 시각화하는 중심 공간입니다. 이는 W&B에 기록되지 않은 이전 기계 학습 Experiments의 정보가 포함된 CSV 파일이 있거나 데이터셋이 포함된 CSV 파일이 있는 경우 특히 유용합니다.

데이터셋 CSV 파일 가져오기 및 기록

CSV 파일의 내용을 더 쉽게 재사용할 수 있도록 W&B Artifacts를 활용하는 것이 좋습니다.

  1. 시작하려면 먼저 CSV 파일을 가져옵니다. 다음 코드 조각에서 iris.csv 파일 이름을 CSV 파일 이름으로 바꿉니다.
import wandb
import pandas as pd

# CSV를 새 DataFrame으로 읽기
new_iris_dataframe = pd.read_csv("iris.csv")
  1. CSV 파일을 W&B Table로 변환하여 W&B 대시보드를 활용합니다.
# DataFrame을 W&B Table로 변환
iris_table = wandb.Table(dataframe=new_iris_dataframe)
  1. 다음으로 W&B Artifact를 생성하고 테이블을 Artifact에 추가합니다.
# 테이블을 Artifact에 추가하여 행
# 제한을 200000으로 늘리고 재사용을 용이하게 합니다.
iris_table_artifact = wandb.Artifact("iris_artifact", type="dataset")
iris_table_artifact.add(iris_table, "iris_table")

# 원시 CSV 파일을 Artifact 내에 기록하여 데이터를 보존합니다.
iris_table_artifact.add_file("iris.csv")

W&B Artifacts에 대한 자세한 내용은 Artifacts 챕터를 참조하세요.

  1. 마지막으로 wandb.init으로 새로운 W&B Run을 시작하여 W&B에 추적하고 기록합니다.
# 데이터를 기록하기 위해 W&B Run 시작
run = wandb.init(project="tables-walkthrough")

# Run으로 시각화하기 위해 테이블을 기록합니다...
run.log({"iris": iris_table})

# ...사용 가능한 행 제한을 늘리기 위해 Artifact로 기록합니다!
run.log_artifact(iris_table_artifact)

wandb.init() API는 데이터를 Run에 기록하기 위해 새로운 백그라운드 프로세스를 생성하고, wandb.ai에 데이터를 동기화합니다(기본적으로). W&B Workspace 대시보드에서 라이브 시각화를 확인하세요. 다음 이미지는 코드 조각 데모의 출력을 보여줍니다.

CSV 파일을 W&B 대시보드로 가져옴

앞선 코드 조각이 포함된 전체 스크립트는 아래에서 찾을 수 있습니다.

import wandb
import pandas as pd

# CSV를 새 DataFrame으로 읽기
new_iris_dataframe = pd.read_csv("iris.csv")

# DataFrame을 W&B Table로 변환
iris_table = wandb.Table(dataframe=new_iris_dataframe)

# 테이블을 Artifact에 추가하여 행
# 제한을 200000으로 늘리고 재사용을 용이하게 합니다.
iris_table_artifact = wandb.Artifact("iris_artifact", type="dataset")
iris_table_artifact.add(iris_table, "iris_table")

# 원시 CSV 파일을 Artifact 내에 기록하여 데이터를 보존합니다.
iris_table_artifact.add_file("iris.csv")

# 데이터를 기록하기 위해 W&B Run 시작
run = wandb.init(project="tables-walkthrough")

# Run으로 시각화하기 위해 테이블을 기록합니다...
run.log({"iris": iris_table})

# ...사용 가능한 행 제한을 늘리기 위해 Artifact로 기록합니다!
run.log_artifact(iris_table_artifact)

# Run 완료 (노트북에서 유용)
run.finish()

Experiments의 CSV 가져오기 및 기록

경우에 따라 Experiments 세부 정보가 CSV 파일에 있을 수 있습니다. 이러한 CSV 파일에서 흔히 볼 수 있는 세부 정보는 다음과 같습니다.

Experiment Model Name Notes Tags Num Layers Final Train Acc Final Val Acc Training Losses
Experiment 1 mnist-300-layers 트레이닝 데이터에서 너무 많이 과적합 [최신] 300 0.99 0.90 [0.55, 0.45, 0.44, 0.42, 0.40, 0.39]
Experiment 2 mnist-250-layers 현재 최고의 모델 [prod, 최고] 250 0.95 0.96 [0.55, 0.45, 0.44, 0.42, 0.40, 0.39]
Experiment 3 mnist-200-layers 베이스라인 모델보다 성능이 더 나빴습니다. 디버그해야 합니다. [디버그] 200 0.76 0.70 [0.55, 0.45, 0.44, 0.42, 0.40, 0.39]
Experiment N mnist-X-layers NOTES […, …]

W&B는 Experiments의 CSV 파일을 가져와 W&B Experiment Run으로 변환할 수 있습니다. 다음 코드 조각과 코드 스크립트는 Experiments의 CSV 파일을 가져와 기록하는 방법을 보여줍니다.

  1. 시작하려면 먼저 CSV 파일을 읽고 Pandas DataFrame으로 변환합니다. "experiments.csv"를 CSV 파일 이름으로 바꿉니다.
import wandb
import pandas as pd

FILENAME = "experiments.csv"
loaded_experiment_df = pd.read_csv(FILENAME)

PROJECT_NAME = "Converted Experiments"

EXPERIMENT_NAME_COL = "Experiment"
NOTES_COL = "Notes"
TAGS_COL = "Tags"
CONFIG_COLS = ["Num Layers"]
SUMMARY_COLS = ["Final Train Acc", "Final Val Acc"]
METRIC_COLS = ["Training Losses"]

# Pandas DataFrame의 형식을 지정하여 작업하기 쉽게 만듭니다.
for i, row in loaded_experiment_df.iterrows():
    run_name = row[EXPERIMENT_NAME_COL]
    notes = row[NOTES_COL]
    tags = row[TAGS_COL]

    config = {}
    for config_col in CONFIG_COLS:
        config[config_col] = row[config_col]

    metrics = {}
    for metric_col in METRIC_COLS:
        metrics[metric_col] = row[metric_col]

    summaries = {}
    for summary_col in SUMMARY_COLS:
        summaries[summary_col] = row[summary_col]
  1. 다음으로 wandb.init()으로 새로운 W&B Run을 시작하여 W&B에 추적하고 기록합니다.
run = wandb.init(
    project=PROJECT_NAME, name=run_name, tags=tags, notes=notes, config=config
)

Experiment가 실행되면 W&B에서 보고 쿼리하고 분석할 수 있도록 메트릭의 모든 인스턴스를 기록할 수 있습니다. run.log() 코맨드를 사용하여 이를 수행합니다.

run.log({key: val})

선택적으로 Run의 결과를 정의하기 위해 최종 요약 메트릭을 기록할 수 있습니다. W&B define_metric API를 사용하여 이를 수행합니다. 이 예제에서는 run.summary.update()를 사용하여 요약 메트릭을 Run에 추가합니다.

run.summary.update(summaries)

요약 메트릭에 대한 자세한 내용은 요약 메트릭 기록을 참조하세요.

아래는 위의 샘플 테이블을 W&B 대시보드로 변환하는 전체 예제 스크립트입니다.

FILENAME = "experiments.csv"
loaded_experiment_df = pd.read_csv(FILENAME)

PROJECT_NAME = "Converted Experiments"

EXPERIMENT_NAME_COL = "Experiment"
NOTES_COL = "Notes"
TAGS_COL = "Tags"
CONFIG_COLS = ["Num Layers"]
SUMMARY_COLS = ["Final Train Acc", "Final Val Acc"]
METRIC_COLS = ["Training Losses"]

for i, row in loaded_experiment_df.iterrows():
    run_name = row[EXPERIMENT_NAME_COL]
    notes = row[NOTES_COL]
    tags = row[TAGS_COL]

    config = {}
    for config_col in CONFIG_COLS:
        config[config_col] = row[config_col]

    metrics = {}
    for metric_col in METRIC_COLS:
        metrics[metric_col] = row[metric_col]

    summaries = {}
    for summary_col in SUMMARY_COLS:
        summaries[summary_col] = row[summary_col]

    run = wandb.init(
        project=PROJECT_NAME, name=run_name, tags=tags, notes=notes, config=config
    )

    for key, val in metrics.items():
        if isinstance(val, list):
            for _val in val:
                run.log({key: _val})
        else:
            run.log({key: val})

    run.summary.update(summaries)
    run.finish()

2.1.7 - Track Jupyter notebooks

Jupyter 와 W&B를 함께 사용하여 노트북을 벗어나지 않고도 대화형 시각화 를 얻으세요.

Jupyter와 W&B를 함께 사용하면 노트북에서 나가지 않고도 대화형 시각화 자료를 얻을 수 있습니다. 사용자 정의 분석, Experiments, 프로토타입을 모두 결합하여 완벽하게 로그할 수 있습니다.

Jupyter 노트북과 W&B의 유스 케이스

  1. 반복적인 실험: 파라미터를 조정하여 Experiments를 실행하고 다시 실행하면 수동으로 메모하지 않아도 수행하는 모든 Runs가 자동으로 W&B에 저장됩니다.
  2. 코드 저장: 모델을 재현할 때 노트북에서 어떤 셀이 어떤 순서로 실행되었는지 알기 어렵습니다. 설정 페이지에서 코드 저장을 켜면 각 experiment에 대한 셀 실행 기록이 저장됩니다.
  3. 사용자 정의 분석: Runs가 W&B에 기록되면 API에서 데이터프레임을 가져와 사용자 정의 분석을 수행한 다음 해당 결과를 W&B에 기록하여 리포트에 저장하고 공유하기 쉽습니다.

노트북에서 시작하기

다음 코드로 노트북을 시작하여 W&B를 설치하고 계정을 연결합니다.

!pip install wandb -qqq
import wandb
wandb.login()

다음으로 experiment를 설정하고 하이퍼파라미터를 저장합니다.

wandb.init(
    project="jupyter-projo",
    config={
        "batch_size": 128,
        "learning_rate": 0.01,
        "dataset": "CIFAR-100",
    },
)

wandb.init()를 실행한 후 %%wandb로 새 셀을 시작하여 노트북에서 라이브 그래프를 확인합니다. 이 셀을 여러 번 실행하면 데이터가 Run에 추가됩니다.

%%wandb

# Your training loop here

예제 노트북에서 직접 사용해 보세요.

노트북에서 직접 라이브 W&B 인터페이스 렌더링

%wandb 매직을 사용하여 기존의 대시보드, Sweeps 또는 리포트를 노트북에서 직접 표시할 수도 있습니다.

# Display a project workspace
%wandb USERNAME/PROJECT
# Display a single run
%wandb USERNAME/PROJECT/runs/RUN_ID
# Display a sweep
%wandb USERNAME/PROJECT/sweeps/SWEEP_ID
# Display a report
%wandb USERNAME/PROJECT/reports/REPORT_ID
# Specify the height of embedded iframe
%wandb USERNAME/PROJECT -h 2048

%%wandb 또는 %wandb 매직의 대안으로 wandb.init()를 실행한 후 wandb.run으로 셀을 종료하여 인라인 그래프를 표시하거나 API에서 반환된 리포트, 스윕 또는 Run 오브젝트에서 ipython.display(...)를 호출할 수 있습니다.

# Initialize wandb.run first
wandb.init()

# If cell outputs wandb.run, you'll see live graphs
wandb.run

W&B의 추가 Jupyter 기능

  1. Colab에서 간편한 인증: Colab에서 wandb.init를 처음 호출하면 브라우저에서 W&B에 로그인한 경우 런타임이 자동으로 인증됩니다. Run 페이지의 Overview 탭에서 Colab 링크를 볼 수 있습니다.
  2. Jupyter Magic: 대시보드, Sweeps 및 리포트를 노트북에서 직접 표시합니다. %wandb 매직은 프로젝트, Sweeps 또는 리포트의 경로를 허용하고 W&B 인터페이스를 노트북에서 직접 렌더링합니다.
  3. dockerized Jupyter 실행: wandb docker --jupyter를 호출하여 docker 컨테이너를 시작하고, 코드를 마운트하고, Jupyter가 설치되었는지 확인하고, 포트 8888에서 시작합니다.
  4. 두려움 없이 임의의 순서로 셀 실행: 기본적으로 Run이 finished로 표시될 때까지 wandb.init가 다음에 호출될 때까지 기다립니다. 이를 통해 여러 셀(예: 데이터 설정, 트레이닝, 테스트)을 원하는 순서로 실행하고 모두 동일한 Run에 기록할 수 있습니다. 설정에서 코드 저장을 켜면 실행된 셀도 순서대로, 그리고 실행된 상태로 기록하여 가장 비선형적인 파이프라인도 재현할 수 있습니다. Jupyter 노트북에서 Run을 수동으로 완료하려면 run.finish를 호출합니다.
import wandb

run = wandb.init()

# training script and logging goes here

run.finish()

2.1.8 - Experiments limits and performance

제안된 범위 내에서 로깅하여 W&B에서 페이지를 더 빠르고 반응적으로 유지하세요.

다음과 같은 권장 범위 내에서 로깅하면 W&B에서 페이지를 더 빠르고 응답성 좋게 유지할 수 있습니다.

로깅 고려 사항

wandb.log를 사용하여 실험 메트릭을 추적합니다. 한 번 로깅되면 이러한 메트릭은 차트를 생성하고 테이블에 표시됩니다. 너무 많은 데이터를 로깅하면 앱이 느려질 수 있습니다.

고유한 메트릭 수

더 빠른 성능을 위해 프로젝트의 총 고유 메트릭 수를 10,000개 미만으로 유지하십시오.

import wandb

wandb.log(
    {
        "a": 1,  # "a"는 고유한 메트릭입니다.
        "b": {
            "c": "hello",  # "b.c"는 고유한 메트릭입니다.
            "d": [1, 2, 3],  # "b.d"는 고유한 메트릭입니다.
        },
    }
)

워크스페이스가 갑자기 느려지면 최근의 runs이 의도치 않게 수천 개의 새로운 메트릭을 로깅했는지 확인하십시오. (수천 개의 플롯이 있는 섹션에 하나 또는 두 개의 runs만 표시되는지 확인하면 가장 쉽게 알 수 있습니다.) 그렇다면 해당 runs을 삭제하고 원하는 메트릭으로 다시 만드는 것을 고려하십시오.

값 너비

단일 로깅된 값의 크기를 1MB 미만으로 제한하고 단일 wandb.log 호출의 총 크기를 25MB 미만으로 제한합니다. 이 제한은 wandb.Image, wandb.Audio 등과 같은 wandb.Media 유형에는 적용되지 않습니다.

# ❌ 권장하지 않음
wandb.log({"wide_key": range(10000000)})

# ❌ 권장하지 않음
with f as open("large_file.json", "r"):
    large_data = json.load(f)
    wandb.log(large_data)

넓은 값은 넓은 값이 있는 메트릭뿐만 아니라 run의 모든 메트릭에 대한 플롯 로드 시간에 영향을 줄 수 있습니다.

메트릭 빈도

로깅하는 메트릭에 적합한 로깅 빈도를 선택하십시오. 일반적으로 메트릭이 넓을수록 로깅 빈도를 줄여야 합니다. W&B는 다음을 권장합니다.

  • 스칼라: 메트릭당 로깅된 포인트 <100,000개
  • 미디어: 메트릭당 로깅된 포인트 <50,000개
  • 히스토그램: 메트릭당 로깅된 포인트 <10,000개
# 총 1백만 단계의 트레이닝 루프
for step in range(1000000):
    # ❌ 권장하지 않음
    wandb.log(
        {
            "scalar": step,  # 스칼라 100,000개
            "media": wandb.Image(...),  # 이미지 100,000개
            "histogram": wandb.Histogram(...),  # 히스토그램 100,000개
        }
    )

    # ✅ 권장
    if step % 1000 == 0:
        wandb.log(
            {
                "histogram": wandb.Histogram(...),  # 히스토그램 10,000개
            },
            commit=False,
        )
    if step % 200 == 0:
        wandb.log(
            {
                "media": wandb.Image(...),  # 이미지 50,000개
            },
            commit=False,
        )
    if step % 100 == 0:
        wandb.log(
            {
                "scalar": step,  # 스칼라 100,000개
            },
            commit=True,
        )  # 일괄 처리된 단계별 메트릭을 함께 커밋합니다.

config 크기

run config의 총 크기를 10MB 미만으로 제한하십시오. 큰 값을 로깅하면 프로젝트 워크스페이스 및 runs 테이블 작업 속도가 느려질 수 있습니다.

# ✅ 권장
wandb.init(
    config={
        "lr": 0.1,
        "batch_size": 32,
        "epochs": 4,
    }
)

# ❌ 권장하지 않음
wandb.init(
    config={
        "steps": range(10000000),
    }
)

# ❌ 권장하지 않음
with f as open("large_config.json", "r"):
    large_config = json.load(f)
    wandb.init(config=large_config)

워크스페이스 고려 사항

Run 수

로드 시간을 줄이려면 단일 프로젝트의 총 run 수를 다음 미만으로 유지하십시오.

  • SaaS Cloud에서 100,000개
  • 전용 클라우드 또는 자체 관리에서 10,000개

이러한 임계값을 초과하는 Run 수는 프로젝트 워크스페이스 또는 runs 테이블과 관련된 작업 속도를 늦출 수 있습니다. 특히 runs을 그룹화하거나 runs 중에 많은 수의 고유한 메트릭을 수집하는 경우에 그렇습니다. 메트릭 수 섹션도 참조하십시오.

팀이 최근 runs 집합과 같이 동일한 runs 집합에 자주 액세스하는 경우 덜 자주 사용하는 runs을 대량으로 이동하는 것을 고려하여 새로운 “보관” 프로젝트로 이동하고 작업 프로젝트에 더 작은 runs 집합을 남겨두십시오.

워크스페이스 성능

이 섹션에서는 워크스페이스의 성능을 최적화하기 위한 팁을 제공합니다.

패널 수

기본적으로 워크스페이스는 _자동_이며 로깅된 각 키에 대해 표준 패널을 생성합니다. 대규모 프로젝트의 워크스페이스에 많은 로깅된 키에 대한 패널이 포함되어 있으면 워크스페이스 로드 및 사용 속도가 느려질 수 있습니다. 성능을 향상시키려면 다음을 수행할 수 있습니다.

  1. 워크스페이스를 수동 모드로 재설정합니다. 수동 모드에는 기본적으로 패널이 포함되어 있지 않습니다.
  2. 빠른 추가를 사용하여 시각화해야 하는 로깅된 키에 대한 패널을 선택적으로 추가합니다.

워크스페이스 구성에 대한 자세한 내용은 패널을 참조하십시오.

섹션 수

워크스페이스에 수백 개의 섹션이 있으면 성능이 저하될 수 있습니다. 메트릭의 상위 수준 그룹화를 기반으로 섹션을 만들고 각 메트릭에 대해 하나의 섹션을 만드는 안티 패턴을 피하십시오.

섹션이 너무 많고 성능이 느린 경우 접미사가 아닌 접두사로 섹션을 만드는 워크스페이스 설정을 고려하십시오. 이렇게 하면 섹션 수가 줄어들고 성능이 향상될 수 있습니다.

섹션 생성 토글

메트릭 수

Run당 5000~100,000개의 메트릭을 로깅하는 경우 W&B는 수동 워크스페이스를 사용하는 것이 좋습니다. 수동 모드에서는 다양한 메트릭 집합을 탐색하도록 선택할 때 패널을 대량으로 쉽게 추가하고 제거할 수 있습니다. 더 집중적인 플롯 집합을 사용하면 워크스페이스 로드 속도가 빨라집니다. 플롯되지 않은 메트릭은 평소와 같이 계속 수집 및 저장됩니다.

워크스페이스를 수동 모드로 재설정하려면 워크스페이스의 작업 ... 메뉴를 클릭한 다음 워크스페이스 재설정을 클릭합니다. 워크스페이스를 재설정해도 runs에 대한 저장된 메트릭에는 영향을 미치지 않습니다. 워크스페이스 관리에 대해 자세히 알아보십시오.

파일 수

단일 run에 대해 업로드된 총 파일 수를 1,000개 미만으로 유지하십시오. 많은 수의 파일을 로깅해야 하는 경우 W&B Artifacts를 사용할 수 있습니다. 단일 run에서 1,000개가 넘는 파일을 초과하면 run 페이지 속도가 느려질 수 있습니다.

리포트 대 워크스페이스

리포트는 패널, 텍스트 및 미디어를 임의로 배열하여 동료와 통찰력을 쉽게 공유할 수 있는 자유 형식의 컴포지션입니다.

대조적으로 워크스페이스는 수백에서 수십만 개의 runs에 걸쳐 수십에서 수천 개의 메트릭을 고밀도로 효율적으로 분석할 수 있습니다. 워크스페이스는 리포트에 비해 최적화된 캐싱, 쿼리 및 로드 기능을 제공합니다. 워크스페이스는 주로 프레젠테이션보다는 분석에 사용되는 프로젝트에 권장되거나 20개 이상의 플롯을 함께 표시해야 하는 경우에 권장됩니다.

Python 스크립트 성능

Python 스크립트의 성능이 저하되는 몇 가지 방법이 있습니다.

  1. 데이터 크기가 너무 큽니다. 데이터 크기가 크면 트레이닝 루프에 >1ms의 오버헤드가 발생할 수 있습니다.
  2. 네트워크 속도와 W&B 백엔드 구성 방법
  3. wandb.log를 초당 몇 번 이상 호출합니다. 이는 wandb.log가 호출될 때마다 트레이닝 루프에 작은 대기 시간이 추가되기 때문입니다.

W&B는 속도 제한 외에는 어떠한 제한도 주장하지 않습니다. W&B Python SDK는 제한을 초과하는 요청에 대해 지수 “백오프” 및 “재시도"를 자동으로 완료합니다. W&B Python SDK는 커맨드라인에 “네트워크 실패"로 응답합니다. 유료 계정이 아닌 경우 W&B는 사용량이 합리적인 임계값을 초과하는 극단적인 경우에 연락할 수 있습니다.

속도 제한

W&B SaaS Cloud API는 시스템 무결성을 유지하고 가용성을 보장하기 위해 속도 제한을 구현합니다. 이 측정은 단일 사용자가 공유 인프라에서 사용 가능한 리소스를 독점하는 것을 방지하여 모든 사용자가 서비스에 액세스할 수 있도록 보장합니다. 다양한 이유로 더 낮은 속도 제한이 발생할 수 있습니다.

속도 제한 HTTP 헤더

이전 표에서는 속도 제한 HTTP 헤더에 대해 설명합니다.

헤더 이름 설명
RateLimit-Limit 시간 창당 사용 가능한 할당량으로, 0~1000 범위로 조정됩니다.
RateLimit-Remaining 현재 속도 제한 창의 할당량으로, 0~1000 범위로 조정됩니다.
RateLimit-Reset 현재 할당량이 재설정될 때까지의 시간(초)

메트릭 로깅 API의 속도 제한

스크립트의 wandb.log 호출은 메트릭 로깅 API를 사용하여 트레이닝 데이터를 W&B에 로깅합니다. 이 API는 온라인 또는 오프라인 동기화를 통해 사용됩니다. 두 경우 모두 롤링 시간 창에서 속도 제한 할당량을 부과합니다. 여기에는 총 요청 크기 및 요청 속도에 대한 제한이 포함되며, 후자는 시간 기간 내의 요청 수를 나타냅니다.

W&B는 W&B 프로젝트당 속도 제한을 적용합니다. 따라서 팀에 3개의 프로젝트가 있는 경우 각 프로젝트에는 자체 속도 제한 할당량이 있습니다. 팀 및 엔터프라이즈 요금제 사용자는 무료 요금제 사용자보다 더 높은 속도 제한을 받습니다.

메트릭 로깅 API를 사용하는 동안 속도 제한에 도달하면 표준 출력에 오류를 나타내는 관련 메시지가 표시됩니다.

메트릭 로깅 API 속도 제한을 초과하지 않기 위한 제안

속도 제한을 초과하면 속도 제한이 재설정될 때까지 run.finish()가 지연될 수 있습니다. 이를 방지하려면 다음 전략을 고려하십시오.

  • W&B Python SDK 버전 업데이트: 최신 버전의 W&B Python SDK를 사용하고 있는지 확인하십시오. W&B Python SDK는 정기적으로 업데이트되며 요청을 정상적으로 재시도하고 할당량 사용량을 최적화하기 위한 향상된 메커니즘이 포함되어 있습니다.
  • 메트릭 로깅 빈도 줄이기: 할당량을 보존하기 위해 메트릭 로깅 빈도를 최소화합니다. 예를 들어, 모든 에포크 대신 5개의 에포크마다 메트릭을 로깅하도록 코드를 수정할 수 있습니다.
if epoch % 5 == 0:  # 5개의 에포크마다 메트릭 로깅
    wandb.log({"acc": accuracy, "loss": loss})
  • 수동 데이터 동기화: 속도 제한이 있는 경우 W&B는 run 데이터를 로컬에 저장합니다. 커맨드 wandb sync <run-file-path>를 사용하여 데이터를 수동으로 동기화할 수 있습니다. 자세한 내용은 wandb sync 참조를 참조하십시오.

GraphQL API의 속도 제한

W&B Models UI 및 SDK의 공용 API는 서버에 GraphQL 요청을 보내 데이터를 쿼리하고 수정합니다. SaaS Cloud의 모든 GraphQL 요청에 대해 W&B는 권한이 없는 요청에 대해 IP 어드레스당, 권한이 있는 요청에 대해 사용자당 속도 제한을 적용합니다. 제한은 고정 시간 창 내의 요청 속도(초당 요청)를 기반으로 하며, 요금제에 따라 기본 제한이 결정됩니다. 프로젝트 경로(예: 리포트, runs, 아티팩트)를 지정하는 관련 SDK 요청의 경우 W&B는 데이터베이스 쿼리 시간으로 측정하여 프로젝트당 속도 제한을 적용합니다.

팀 및 엔터프라이즈 요금제 사용자는 무료 요금제 사용자보다 더 높은 속도 제한을 받습니다. W&B Models SDK의 공용 API를 사용하는 동안 속도 제한에 도달하면 표준 출력에 오류를 나타내는 관련 메시지가 표시됩니다.

GraphQL API 속도 제한을 초과하지 않기 위한 제안

W&B Models SDK의 공용 API를 사용하여 많은 양의 데이터를 가져오는 경우 요청 사이에 최소 1초 이상 기다리는 것을 고려하십시오. 429 상태 코드를 받거나 응답 헤더에 RateLimit-Remaining=0이 표시되면 재시도하기 전에 RateLimit-Reset에 지정된 시간(초) 동안 기다리십시오.

브라우저 고려 사항

W&B 앱은 메모리 사용량이 많을 수 있으며 Chrome에서 가장 잘 작동합니다. 컴퓨터의 메모리에 따라 W&B가 3개 이상의 탭에서 동시에 활성화되어 있으면 성능이 저하될 수 있습니다. 예기치 않게 느린 성능이 발생하는 경우 다른 탭이나 애플리케이션을 닫는 것을 고려하십시오.

W&B에 성능 문제 보고

W&B는 성능을 중요하게 생각하고 지연에 대한 모든 리포트를 조사합니다. 조사를 신속하게 처리하기 위해 로드 시간이 느린 경우 주요 메트릭 및 성능 이벤트를 캡처하는 W&B의 기본 제공 성능 로거를 호출하는 것을 고려하십시오. 로드 속도가 느린 페이지에 URL 파라미터 &PERF_LOGGING을 추가한 다음 콘솔 출력을 계정 팀 또는 지원팀과 공유하십시오.

PERF_LOGGING 추가

2.1.9 - Reproduce experiments

팀 멤버가 생성한 실험을 재현하여 결과를 검증하고 유효성을 확인합니다.

실험을 재현하기 전에 다음 사항을 기록해 두어야 합니다.

  • 해당 run이 기록된 프로젝트 이름
  • 재현하려는 run 이름

실험을 재현하는 방법:

  1. 해당 run이 기록된 프로젝트로 이동합니다.
  2. 왼쪽 사이드바에서 Workspace 탭을 선택합니다.
  3. run 목록에서 재현하려는 run을 선택합니다.
  4. Overview를 클릭합니다.

계속하려면 특정 해시에서 실험 코드를 다운로드하거나 실험의 전체 저장소를 복제합니다.

실험의 Python 스크립트 또는 노트북을 다운로드합니다.

  1. Command 필드에서 실험을 생성한 스크립트 이름을 기록합니다.
  2. 왼쪽 네비게이션 바에서 Code 탭을 선택합니다.
  3. 스크립트 또는 노트북에 해당하는 파일 옆에 있는 Download를 클릭합니다.

팀 멤버가 실험을 생성할 때 사용한 GitHub 저장소를 복제합니다. 이렇게 하려면 다음을 수행합니다.

  1. 필요한 경우 팀 멤버가 실험을 생성하는 데 사용한 GitHub 저장소에 대한 엑세스 권한을 얻습니다.
  2. GitHub 저장소 URL이 포함된 Git repository 필드를 복사합니다.
  3. 저장소를 복제합니다.
    git clone https://github.com/your-repo.git && cd your-repo
    
  4. Git state 필드를 복사하여 터미널에 붙여넣습니다. Git 상태는 팀 멤버가 실험을 생성하는 데 사용한 정확한 커밋을 체크아웃하는 Git 코맨드 집합입니다. 다음 코드 조각에 지정된 값을 자신의 값으로 바꿉니다.
    git checkout -b "<run-name>" 0123456789012345678901234567890123456789
    
  1. 왼쪽 네비게이션 바에서 Files를 선택합니다.

  2. requirements.txt 파일을 다운로드하여 작업 디렉토리에 저장합니다. 이 디렉토리에는 복제된 GitHub 저장소 또는 다운로드된 Python 스크립트 또는 노트북이 포함되어야 합니다.

  3. (권장) Python 가상 환경을 만듭니다.

  4. requirements.txt 파일에 지정된 요구 사항을 설치합니다.

    pip install -r requirements.txt
    
  5. 이제 코드와 종속성이 있으므로 스크립트 또는 노트북을 실행하여 실험을 재현할 수 있습니다. 저장소를 복제한 경우 스크립트 또는 노트북이 있는 디렉토리로 이동해야 할 수 있습니다. 그렇지 않으면 작업 디렉토리에서 스크립트 또는 노트북을 실행할 수 있습니다.

Python 노트북을 다운로드한 경우 노트북을 다운로드한 디렉토리로 이동하여 터미널에서 다음 코맨드를 실행합니다.

jupyter notebook

Python 스크립트를 다운로드한 경우 스크립트를 다운로드한 디렉토리로 이동하여 터미널에서 다음 코맨드를 실행합니다. 괄호 안의 <> 값을 자신의 값으로 바꿉니다.

python <your-script-name>.py

2.1.10 - Import and export data

MLFlow에서 데이터를 가져오고, W&B에 저장한 데이터를 내보내거나 업데이트합니다.

W&B Public API를 사용하여 데이터를 내보내거나 가져올 수 있습니다.

MLFlow에서 데이터 가져오기

W&B는 Experiments, Runs, Artifacts, 메트릭 및 기타 메타데이터를 포함하여 MLFlow에서 데이터를 가져오는 것을 지원합니다.

다음과 같이 종속성을 설치합니다:

# 참고: py38+ 필요
pip install wandb[importers]

W&B에 로그인합니다. 이전에 로그인하지 않은 경우 프롬프트에 따르십시오.

wandb login

기존 MLFlow 서버에서 모든 Runs을 가져옵니다:

from wandb.apis.importers.mlflow import MlflowImporter

importer = MlflowImporter(mlflow_tracking_uri="...")

runs = importer.collect_runs()
importer.import_runs(runs)

기본적으로 importer.collect_runs()는 MLFlow 서버에서 모든 Runs을 수집합니다. 특정 서브셋을 업로드하려면 Runs의 반복 가능한 객체를 직접 구성하여 임포터에 전달할 수 있습니다.

import mlflow
from wandb.apis.importers.mlflow import MlflowRun

client = mlflow.tracking.MlflowClient(mlflow_tracking_uri)

runs: Iterable[MlflowRun] = []
for run in mlflow_client.search_runs(...):
    runs.append(MlflowRun(run, client))

importer.import_runs(runs)

Artifacts 가져오기를 생략하려면 artifacts=False를 전달하면 됩니다:

importer.import_runs(runs, artifacts=False)

특정 W&B 엔티티 및 프로젝트로 가져오려면 Namespace를 전달하면 됩니다:

from wandb.apis.importers import Namespace

importer.import_runs(runs, namespace=Namespace(entity, project))

데이터 내보내기

Public API를 사용하여 W&B에 저장한 데이터를 내보내거나 업데이트합니다. 이 API를 사용하기 전에 스크립트에서 데이터를 기록하십시오. 자세한 내용은 퀵스타트를 확인하세요.

Public API 유스 케이스

  • 데이터 내보내기: Jupyter Notebook에서 사용자 정의 분석을 위해 데이터프레임을 가져옵니다. 데이터를 탐색한 후 새로운 분석 Run을 생성하고 결과를 기록하여 결과를 동기화할 수 있습니다(예: wandb.init(job_type="analysis")).
  • 기존 Runs 업데이트: W&B Run과 연결하여 기록된 데이터를 업데이트할 수 있습니다. 예를 들어 아키텍처 또는 원래 기록되지 않은 하이퍼파라미터와 같은 추가 정보를 포함하도록 Runs 집합의 구성을 업데이트할 수 있습니다.

사용 가능한 함수에 대한 자세한 내용은 생성된 참조 문서를 참조하십시오.

API 키 생성

API 키는 W&B에 대한 컴퓨터 인증을 처리합니다. 사용자 프로필에서 API 키를 생성할 수 있습니다.

  1. 오른쪽 상단 모서리에 있는 사용자 프로필 아이콘을 클릭합니다.
  2. 사용자 설정을 선택한 다음 API 키 섹션으로 스크롤합니다.
  3. 표시를 클릭합니다. 표시된 API 키를 복사합니다. API 키를 숨기려면 페이지를 새로 고칩니다.

Run 경로 찾기

Public API를 사용하려면 <entity>/<project>/<run_id>인 Run 경로가 필요한 경우가 많습니다. 앱 UI에서 Run 페이지를 열고 Overview 탭을 클릭하여 Run 경로를 가져옵니다.

Run 데이터 내보내기

완료되었거나 활성 상태인 Run에서 데이터를 다운로드합니다. 일반적인 사용 사례로는 Jupyter 노트북에서 사용자 정의 분석을 위해 데이터프레임을 다운로드하거나 자동화된 환경에서 사용자 정의 로직을 사용하는 것이 있습니다.

import wandb

api = wandb.Api()
run = api.run("<entity>/<project>/<run_id>")

Run 객체의 가장 일반적으로 사용되는 속성은 다음과 같습니다:

속성 의미
run.config 트레이닝 Run의 하이퍼파라미터 또는 데이터셋 Artifact를 만드는 Run의 전처리 방법과 같은 Run의 구성 정보 사전입니다. 이를 Run의 입력이라고 생각하십시오.
run.history() 손실과 같이 모델이 트레이닝되는 동안 변하는 값을 저장하기 위한 사전 목록입니다. wandb.log() 코맨드는 이 객체에 추가됩니다.
run.summary Run 결과의 요약 정보 사전입니다. 여기에는 정확도 및 손실과 같은 스칼라 또는 큰 파일이 포함될 수 있습니다. 기본적으로 wandb.log()는 요약을 기록된 시계열의 최종 값으로 설정합니다. 요약 내용은 직접 설정할 수도 있습니다. 요약을 Run의 출력이라고 생각하십시오.

과거 Runs의 데이터를 수정하거나 업데이트할 수도 있습니다. 기본적으로 API 객체의 단일 인스턴스는 모든 네트워크 요청을 캐시합니다. 유스 케이스에서 실행 중인 스크립트의 실시간 정보가 필요한 경우 api.flush()를 호출하여 업데이트된 값을 가져옵니다.

다양한 속성 이해

아래의 Run의 경우

n_epochs = 5
config = {"n_epochs": n_epochs}
run = wandb.init(project=project, config=config)
for n in range(run.config.get("n_epochs")):
    run.log(
        {"val": random.randint(0, 1000), "loss": (random.randint(0, 1000) / 1000.00)}
    )
run.finish()

다음은 위의 Run 객체 속성에 대한 다양한 출력입니다

run.config

{"n_epochs": 5}

run.history()

   _step  val   loss  _runtime  _timestamp
0      0  500  0.244         4  1644345412
1      1   45  0.521         4  1644345412
2      2  240  0.785         4  1644345412
3      3   31  0.305         4  1644345412
4      4  525  0.041         4  1644345412

run.summary

{
    "_runtime": 4,
    "_step": 4,
    "_timestamp": 1644345412,
    "_wandb": {"runtime": 3},
    "loss": 0.041,
    "val": 525,
}

샘플링

기본 히스토리 메서드는 메트릭을 고정된 수의 샘플로 샘플링합니다(기본값은 500이며, samples __ 인수로 변경할 수 있음). 대규모 Run에서 모든 데이터를 내보내려면 run.scan_history() 메서드를 사용하면 됩니다. 자세한 내용은 API 참조를 참조하십시오.

여러 Runs 쿼리

이 예제 스크립트는 프로젝트를 찾고 이름, 구성 및 요약 통계가 있는 Runs의 CSV를 출력합니다. <entity><project>를 W&B 엔티티 및 프로젝트 이름으로 각각 바꿉니다.

import pandas as pd
import wandb

api = wandb.Api()
entity, project = "<entity>", "<project>"
runs = api.runs(entity + "/" + project)

summary_list, config_list, name_list = [], [], []
for run in runs:
    # .summary에는 정확도와 같은
    # 메트릭에 대한 출력 키/값이 포함되어 있습니다.
    #  큰 파일을 생략하기 위해 ._json_dict를 호출합니다
    summary_list.append(run.summary._json_dict)

    # .config에는 하이퍼파라미터가 포함되어 있습니다.
    #  _로 시작하는 특수 값을 제거합니다.
    config_list.append({k: v for k, v in run.config.items() if not k.startswith("_")})

    # .name은 Run의 사람이 읽을 수 있는 이름입니다.
    name_list.append(run.name)

runs_df = pd.DataFrame(
    {"summary": summary_list, "config": config_list, "name": name_list}
)

runs_df.to_csv("project.csv")

W&B API는 api.runs()를 사용하여 프로젝트의 Runs을 쿼리하는 방법도 제공합니다. 가장 일반적인 유스 케이스는 사용자 정의 분석을 위해 Runs 데이터를 내보내는 것입니다. 쿼리 인터페이스는 MongoDB에서 사용하는 인터페이스와 동일합니다.

runs = api.runs(
    "username/project",
    {"$or": [{"config.experiment_name": "foo"}, {"config.experiment_name": "bar"}]},
)
print(f"Found {len(runs)} runs")

api.runs를 호출하면 반복 가능하고 목록처럼 작동하는 Runs 객체가 반환됩니다. 기본적으로 객체는 필요에 따라 한 번에 50개의 Runs을 순서대로 로드하지만 per_page 키워드 인수를 사용하여 페이지당 로드되는 수를 변경할 수 있습니다.

api.runsorder 키워드 인수도 허용합니다. 기본 순서는 -created_at입니다. 결과를 오름차순으로 정렬하려면 +created_at를 지정합니다. 구성 또는 요약 값으로 정렬할 수도 있습니다. 예를 들어 summary.val_acc 또는 config.experiment_name입니다.

오류 처리

W&B 서버와 통신하는 동안 오류가 발생하면 wandb.CommError가 발생합니다. 원래 예외는 exc 속성을 통해 조사할 수 있습니다.

API를 통해 최신 git 커밋 가져오기

UI에서 Run을 클릭한 다음 Run 페이지에서 Overview 탭을 클릭하여 최신 git 커밋을 확인합니다. 또한 wandb-metadata.json 파일에도 있습니다. Public API를 사용하면 run.commit으로 git 해시를 가져올 수 있습니다.

Run 중 Run의 이름 및 ID 가져오기

wandb.init()를 호출한 후 다음과 같이 스크립트에서 임의 Run ID 또는 사람이 읽을 수 있는 Run 이름을 액세스할 수 있습니다.

  • 고유 Run ID(8자 해시): wandb.run.id
  • 임의 Run 이름(사람이 읽을 수 있음): wandb.run.name

Runs에 유용한 식별자를 설정하는 방법을 고려하고 있다면 다음을 권장합니다.

  • Run ID: 생성된 해시로 둡니다. 이는 프로젝트의 Runs에서 고유해야 합니다.
  • Run 이름: 차트에서 여러 줄의 차이점을 알 수 있도록 짧고 읽기 쉽고 가급적이면 고유해야 합니다.
  • Run 노트: Run에서 수행하는 작업에 대한 간단한 설명을 적어두는 것이 좋습니다. wandb.init(notes="여기에 메모 입력")로 설정할 수 있습니다.
  • Run 태그: Run 태그에서 동적으로 추적하고 UI에서 필터를 사용하여 테이블을 원하는 Runs로 필터링합니다. 스크립트에서 태그를 설정한 다음 Runs 테이블과 Run 페이지의 Overview 탭 모두에서 UI에서 편집할 수 있습니다. 자세한 내용은 여기의 자세한 지침을 참조하십시오.

Public API 예제

matplotlib 또는 seaborn에서 시각화하기 위해 데이터 내보내기

몇 가지 일반적인 내보내기 패턴은 API 예제를 확인하십시오. 사용자 정의 플롯 또는 확장된 Runs 테이블에서 다운로드 버튼을 클릭하여 브라우저에서 CSV를 다운로드할 수도 있습니다.

Run에서 메트릭 읽기

이 예제는 wandb.log({"accuracy": acc})로 저장된 Run에 대해 "<entity>/<project>/<run_id>"에 저장된 타임스탬프 및 정확도를 출력합니다.

import wandb

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")
if run.state == "finished":
    for i, row in run.history().iterrows():
        print(row["_timestamp"], row["accuracy"])

Runs 필터링

MongoDB Query Language를 사용하여 필터링할 수 있습니다.

날짜

runs = api.runs(
    "<entity>/<project>",
    {"$and": [{"created_at": {"$lt": "YYYY-MM-DDT##", "$gt": "YYYY-MM-DDT##"}}]},
)

Run에서 특정 메트릭 읽기

Run에서 특정 메트릭을 가져오려면 keys 인수를 사용합니다. run.history()를 사용할 때 기본 샘플 수는 500입니다. 특정 메트릭을 포함하지 않는 기록된 단계는 출력 데이터프레임에 NaN으로 표시됩니다. keys 인수를 사용하면 API가 나열된 메트릭 키를 포함하는 단계를 더 자주 샘플링합니다.

import wandb

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")
if run.state == "finished":
    for i, row in run.history(keys=["accuracy"]).iterrows():
        print(row["_timestamp"], row["accuracy"])

두 Runs 비교

이렇게 하면 run1run2 간에 다른 구성 파라미터가 출력됩니다.

import pandas as pd
import wandb

api = wandb.Api()

# <entity>, <project> 및 <run_id>로 바꿉니다
run1 = api.run("<entity>/<project>/<run_id>")
run2 = api.run("<entity>/<project>/<run_id>")


df = pd.DataFrame([run1.config, run2.config]).transpose()

df.columns = [run1.name, run2.name]
print(df[df[run1.name] != df[run2.name]])

출력:

              c_10_sgd_0.025_0.01_long_switch base_adam_4_conv_2fc
batch_size                                 32                   16
n_conv_layers                               5                    4
optimizer                             rmsprop                 adam

Run이 완료된 후 Run에 대한 메트릭 업데이트

이 예제는 이전 Run의 정확도를 0.9로 설정합니다. 또한 이전 Run의 정확도 히스토그램을 numpy_array의 히스토그램으로 수정합니다.

import wandb

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")
run.summary["accuracy"] = 0.9
run.summary["accuracy_histogram"] = wandb.Histogram(numpy_array)
run.summary.update()

완료된 Run에서 메트릭 이름 바꾸기

이 예제는 테이블에서 요약 열의 이름을 바꿉니다.

import wandb

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")
run.summary["new_name"] = run.summary["old_name"]
del run.summary["old_name"]
run.summary.update()

기존 Run에 대한 구성 업데이트

이 예제는 구성 설정 중 하나를 업데이트합니다.

import wandb

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")
run.config["key"] = updated_value
run.update()

시스템 리소스 소비를 CSV 파일로 내보내기

아래 코드 조각은 시스템 리소스 소비를 찾은 다음 CSV에 저장합니다.

import wandb

run = wandb.Api().run("<entity>/<project>/<run_id>")

system_metrics = run.history(stream="events")
system_metrics.to_csv("sys_metrics.csv")

샘플링되지 않은 메트릭 데이터 가져오기

히스토리에서 데이터를 가져올 때 기본적으로 500포인트로 샘플링됩니다. run.scan_history()를 사용하여 기록된 모든 데이터 포인트를 가져옵니다. 다음은 히스토리에 기록된 모든 loss 데이터 포인트를 다운로드하는 예입니다.

import wandb

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")
history = run.scan_history()
losses = [row["loss"] for row in history]

히스토리에서 페이지가 매겨진 데이터 가져오기

백엔드에서 메트릭을 느리게 가져오거나 API 요청 시간이 초과되는 경우 scan_history에서 페이지 크기를 줄여 개별 요청 시간이 초과되지 않도록 할 수 있습니다. 기본 페이지 크기는 500이므로 다양한 크기를 실험하여 가장 적합한 크기를 확인할 수 있습니다.

import wandb

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")
run.scan_history(keys=sorted(cols), page_size=100)

프로젝트의 모든 Runs에서 메트릭을 CSV 파일로 내보내기

이 스크립트는 프로젝트에서 Runs을 가져오고 이름, 구성 및 요약 통계를 포함한 Runs의 데이터프레임과 CSV를 생성합니다. <entity><project>를 W&B 엔티티 및 프로젝트 이름으로 각각 바꿉니다.

import pandas as pd
import wandb

api = wandb.Api()
entity, project = "<entity>", "<project>"
runs = api.runs(entity + "/" + project)

summary_list, config_list, name_list = [], [], []
for run in runs:
    # .summary에는 출력 키/값이 포함되어 있습니다.
    # 정확도와 같은 메트릭의 경우.
    #  큰 파일을 생략하기 위해 ._json_dict를 호출합니다
    summary_list.append(run.summary._json_dict)

    # .config에는 하이퍼파라미터가 포함되어 있습니다.
    #  _로 시작하는 특수 값을 제거합니다.
    config_list.append({k: v for k, v in run.config.items() if not k.startswith("_")})

    # .name은 Run의 사람이 읽을 수 있는 이름입니다.
    name_list.append(run.name)

runs_df = pd.DataFrame(
    {"summary": summary_list, "config": config_list, "name": name_list}
)

runs_df.to_csv("project.csv")

Run의 시작 시간 가져오기

이 코드 조각은 Run이 생성된 시간을 검색합니다.

import wandb

api = wandb.Api()

run = api.run("entity/project/run_id")
start_time = run.created_at

완료된 Run에 파일 업로드

아래 코드 조각은 선택한 파일을 완료된 Run에 업로드합니다.

import wandb

api = wandb.Api()

run = api.run("entity/project/run_id")
run.upload_file("file_name.extension")

Run에서 파일 다운로드

이것은 cifar 프로젝트에서 Run ID uxte44z7과 연결된 파일 “model-best.h5"를 찾아 로컬에 저장합니다.

import wandb

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")
run.file("model-best.h5").download()

Run에서 모든 파일 다운로드

이것은 Run과 연결된 모든 파일을 찾아 로컬에 저장합니다.

import wandb

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")
for file in run.files():
    file.download()

특정 스위프에서 Runs 가져오기

이 코드 조각은 특정 스위프와 연결된 모든 Runs을 다운로드합니다.

import wandb

api = wandb.Api()

sweep = api.sweep("<entity>/<project>/<sweep_id>")
sweep_runs = sweep.runs

스위프에서 가장 적합한 Run 가져오기

다음 코드 조각은 지정된 스위프에서 가장 적합한 Run을 가져옵니다.

import wandb

api = wandb.Api()

sweep = api.sweep("<entity>/<project>/<sweep_id>")
best_run = sweep.best_run()

best_run은 스위프 구성의 metric 파라미터에 의해 정의된 가장 적합한 메트릭을 가진 Run입니다.

스위프에서 가장 적합한 모델 파일 다운로드

이 코드 조각은 모델 파일을 model.h5에 저장한 Runs이 있는 스위프에서 가장 높은 검증 정확도를 가진 모델 파일을 다운로드합니다.

import wandb

api = wandb.Api()

sweep = api.sweep("<entity>/<project>/<sweep_id>")
runs = sorted(sweep.runs, key=lambda run: run.summary.get("val_acc", 0), reverse=True)
val_acc = runs[0].summary.get("val_acc", 0)
print(f"가장 적합한 Run {runs[0].name} (검증 정확도 {val_acc}%)")

runs[0].file("model.h5").download(replace=True)
print("가장 적합한 모델이 model-best.h5에 저장되었습니다.")

Run에서 지정된 확장명을 가진 모든 파일 삭제

이 코드 조각은 Run에서 지정된 확장명을 가진 파일을 삭제합니다.

import wandb

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")

extension = ".png"
files = run.files()
for file in files:
    if file.name.endswith(extension):
        file.delete()

시스템 메트릭 데이터 다운로드

이 코드 조각은 Run에 대한 모든 시스템 리소스 소비 메트릭이 포함된 데이터프레임을 생성한 다음 CSV에 저장합니다.

import wandb

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")
system_metrics = run.history(stream="events")
system_metrics.to_csv("sys_metrics.csv")

요약 메트릭 업데이트

사전을 전달하여 요약 메트릭을 업데이트할 수 있습니다.

summary.update({"key": val})

Run을 실행한 코맨드 가져오기

각 Run은 Run 개요 페이지에서 실행을 시작한 코맨드를 캡처합니다. API에서 이 코맨드를 가져오려면 다음을 실행할 수 있습니다.

import wandb

api = wandb.Api()

run = api.run("<entity>/<project>/<run_id>")

meta = json.load(run.file("wandb-metadata.json").download())
program = ["python"] + [meta["program"]] + meta["args"]

2.1.11 - Environment variables

W&B 환경 변수를 설정하세요.

자동화된 환경에서 스크립트를 실행할 때 스크립트 실행 전 또는 스크립트 내에서 설정된 환경 변수로 wandb를 제어할 수 있습니다.

# 이것은 비밀이며 버전 관리 시스템에 체크인되어서는 안 됩니다.
WANDB_API_KEY=$YOUR_API_KEY
# 이름과 노트는 선택 사항입니다.
WANDB_NAME="나의 첫 번째 run"
WANDB_NOTES="더 작은 학습률, 더 많은 정규화."
# wandb/settings 파일을 체크인하지 않은 경우에만 필요합니다.
WANDB_ENTITY=$username
WANDB_PROJECT=$project
# 스크립트가 클라우드에 동기화되는 것을 원하지 않는 경우
os.environ["WANDB_MODE"] = "offline"

# 스윕 ID 추적을 Run 오브젝트 및 관련 클래스에 추가
os.environ["WANDB_SWEEP_ID"] = "b05fq58z"

선택적 환경 변수

이러한 선택적 환경 변수를 사용하여 원격 머신에서 인증을 설정하는 등의 작업을 수행합니다.

변수 이름 사용법
WANDB_ANONYMOUS 사용자가 비밀 URL로 익명 run을 생성하도록 허용하려면 이 변수를 allow, never 또는 must로 설정합니다.
WANDB_API_KEY 계정과 연결된 인증 키를 설정합니다. 키는 설정 페이지에서 찾을 수 있습니다. 원격 머신에서 wandb login이 실행되지 않은 경우 이 변수를 설정해야 합니다.
WANDB_BASE_URL wandb/local을 사용하는 경우 이 환경 변수를 http://YOUR_IP:YOUR_PORT로 설정해야 합니다.
WANDB_CACHE_DIR 기본값은 ~/.cache/wandb이며, 이 환경 변수로 이 위치를 재정의할 수 있습니다.
WANDB_CONFIG_DIR 기본값은 ~/.config/wandb이며, 이 환경 변수로 이 위치를 재정의할 수 있습니다.
WANDB_CONFIG_PATHS wandb.config에 로드할 쉼표로 구분된 yaml 파일 목록입니다. config를 참조하십시오.
WANDB_CONSOLE stdout / stderr 로깅을 비활성화하려면 이 변수를 “off"로 설정합니다. 기본적으로 이를 지원하는 환경에서는 “on"으로 설정됩니다.
WANDB_DATA_DIR 스테이징 Artifacts가 업로드되는 위치입니다. 기본 위치는 platformdirs Python 패키지의 user_data_dir 값을 사용하기 때문에 플랫폼에 따라 다릅니다.
WANDB_DIR 트레이닝 스크립트를 기준으로 wandb 디렉토리가 아닌 여기에 생성된 모든 파일을 저장하려면 이 변수를 절대 경로로 설정합니다. 이 디렉토리가 존재하고 프로세스가 실행되는 사용자가 쓸 수 있는지 확인하십시오. 이는 다운로드된 Artifacts의 위치에는 영향을 미치지 않으며, 대신 _WANDB_ARTIFACT_DIR_을 사용하여 설정할 수 있습니다.
WANDB_ARTIFACT_DIR 트레이닝 스크립트를 기준으로 artifacts 디렉토리가 아닌 여기에 다운로드된 모든 Artifacts를 저장하려면 이 변수를 절대 경로로 설정합니다. 이 디렉토리가 존재하고 프로세스가 실행되는 사용자가 쓸 수 있는지 확인하십시오. 이는 생성된 메타데이터 파일의 위치에는 영향을 미치지 않으며, 대신 _WANDB_DIR_을 사용하여 설정할 수 있습니다.
WANDB_DISABLE_GIT wandb가 git 저장소를 검색하고 최신 커밋/diff를 캡처하지 못하도록 합니다.
WANDB_DISABLE_CODE wandb가 노트북 또는 git diff를 저장하지 못하도록 하려면 이 변수를 true로 설정합니다. git 저장소에 있는 경우 현재 커밋은 계속 저장됩니다.
WANDB_DOCKER run 복원을 활성화하려면 이 변수를 docker 이미지 다이제스트로 설정합니다. 이는 wandb docker 코맨드로 자동 설정됩니다. wandb docker my/image/name:tag --digest를 실행하여 이미지 다이제스트를 얻을 수 있습니다.
WANDB_ENTITY run과 연결된 entity입니다. 트레이닝 스크립트의 디렉토리에서 wandb init를 실행한 경우 _wandb_라는 디렉토리가 생성되고 소스 제어에 체크인할 수 있는 기본 entity가 저장됩니다. 해당 파일을 생성하지 않거나 파일을 재정의하려는 경우 환경 변수를 사용할 수 있습니다.
WANDB_ERROR_REPORTING wandb가 심각한 오류를 오류 추적 시스템에 로깅하지 못하도록 하려면 이 변수를 false로 설정합니다.
WANDB_HOST 시스템에서 제공하는 호스트 이름을 사용하지 않으려는 경우 wandb 인터페이스에 표시할 호스트 이름으로 설정합니다.
WANDB_IGNORE_GLOBS 무시할 파일 glob의 쉼표로 구분된 목록으로 설정합니다. 이러한 파일은 클라우드에 동기화되지 않습니다.
WANDB_JOB_NAME wandb로 생성된 모든 jobs의 이름을 지정합니다.
WANDB_JOB_TYPE run의 다양한 유형을 나타내기 위해 “training” 또는 “evaluation"과 같은 job 유형을 지정합니다. 자세한 내용은 grouping을 참조하십시오.
WANDB_MODE 이 변수를 “offline"으로 설정하면 wandb가 run 메타데이터를 로컬에 저장하고 서버에 동기화하지 않습니다. 이 변수를 disabled로 설정하면 wandb가 완전히 꺼집니다.
WANDB_NAME run의 사람이 읽을 수 있는 이름입니다. 설정하지 않으면 임의로 생성됩니다.
WANDB_NOTEBOOK_NAME jupyter에서 실행 중인 경우 이 변수로 노트북 이름을 설정할 수 있습니다. 자동으로 감지하려고 시도합니다.
WANDB_NOTES run에 대한 더 긴 메모입니다. Markdown이 허용되며 나중에 UI에서 편집할 수 있습니다.
WANDB_PROJECT run과 연결된 project입니다. 이는 wandb init로도 설정할 수 있지만 환경 변수가 값을 재정의합니다.
WANDB_RESUME 기본적으로 이는 _never_로 설정됩니다. _auto_로 설정하면 wandb가 실패한 run을 자동으로 재개합니다. _must_로 설정하면 시작 시 run이 강제로 존재합니다. 항상 고유한 ID를 생성하려면 _allow_로 설정하고 항상 WANDB_RUN_ID를 설정합니다.
WANDB_RUN_GROUP run을 자동으로 그룹화할 실험 이름을 지정합니다. 자세한 내용은 grouping을 참조하십시오.
WANDB_RUN_ID 스크립트의 단일 run에 해당하는 전역적으로 고유한 문자열(project당)로 설정합니다. 64자 이하여야 합니다. 모든 단어가 아닌 문자는 대시로 변환됩니다. 이는 실패 시 기존 run을 재개하는 데 사용할 수 있습니다.
WANDB_SILENT wandb 로그 문을 숨기려면 이 변수를 true로 설정합니다. 이 변수를 설정하면 모든 로그가 WANDB_DIR/debug.log에 기록됩니다.
WANDB_SHOW_RUN 운영 체제에서 지원하는 경우 run URL로 브라우저를 자동으로 열려면 이 변수를 true로 설정합니다.
WANDB_SWEEP_ID 스윕 ID 추적을 Run 오브젝트 및 관련 클래스에 추가하고 UI에 표시합니다.
WANDB_TAGS run에 적용할 쉼표로 구분된 태그 목록입니다.
WANDB_USERNAME run과 연결된 팀 구성원의 사용자 이름입니다. 이는 서비스 계정 API 키와 함께 사용하여 자동화된 run을 팀 구성원에게 귀속시키는 데 사용할 수 있습니다.
WANDB_USER_EMAIL run과 연결된 팀 구성원의 이메일입니다. 이는 서비스 계정 API 키와 함께 사용하여 자동화된 run을 팀 구성원에게 귀속시키는 데 사용할 수 있습니다.

Singularity 환경

Singularity에서 컨테이너를 실행하는 경우 위의 변수 앞에 **SINGULARITYENV_**를 붙여 환경 변수를 전달할 수 있습니다. Singularity 환경 변수에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

AWS에서 실행

AWS에서 배치 jobs를 실행하는 경우 W&B 자격 증명으로 머신을 쉽게 인증할 수 있습니다. 설정 페이지에서 API 키를 가져오고 AWS 배치 job 사양에서 WANDB_API_KEY 환경 변수를 설정합니다.

2.2 - Sweeps

W&B Sweeps를 사용한 하이퍼파라미터 검색 및 모델 최적화

W&B Sweeps 를 사용하여 하이퍼파라미터 검색을 자동화하고 풍부하고 인터랙티브한 experiment 추적을 시각화하세요. Bayesian, 그리드 검색 및 random과 같은 인기 있는 검색 방법 중에서 선택하여 하이퍼파라미터 공간을 검색합니다. 하나 이상의 시스템에서 스윕을 확장하고 병렬화합니다.

인터랙티브한 대시보드를 통해 대규모 하이퍼파라미터 튜닝 Experiments에서 통찰력을 얻으세요.

작동 방식

두 개의 W&B CLI 명령으로 스윕을 생성합니다.

  1. 스윕 초기화
wandb sweep --project <propject-name> <path-to-config file>
  1. 스윕 에이전트 시작
wandb agent <sweep-ID>

시작 방법

유스 케이스에 따라 다음 리소스를 탐색하여 W&B Sweeps를 시작하세요.

단계별 비디오는 W&B Sweeps로 하이퍼파라미터를 쉽게 튜닝하세요를 참조하세요.

2.2.1 - Tutorial: Define, initialize, and run a sweep

Sweeps 퀵스타트 는 스윕을 정의, 초기화 및 실행하는 방법을 보여줍니다. 주요 단계는 다음과 같습니다.

이 페이지에서는 스윕을 정의하고 초기화하고 실행하는 방법을 보여줍니다. 주요 단계는 네 가지입니다.

  1. 트레이닝 코드 설정
  2. 스윕 구성으로 검색 공간 정의
  3. 스윕 초기화
  4. 스윕 에이전트 시작

다음 코드를 Jupyter Notebook 또는 Python 스크립트에 복사하여 붙여넣으세요.

# W&B Python 라이브러리를 임포트하고 W&B에 로그인합니다
import wandb

wandb.login()

# 1: objective/트레이닝 함수 정의
def objective(config):
    score = config.x**3 + config.y
    return score

def main():
    wandb.init(project="my-first-sweep")
    score = objective(wandb.config)
    wandb.log({"score": score})

# 2: 검색 공간 정의
sweep_configuration = {
    "method": "random",
    "metric": {"goal": "minimize", "name": "score"},
    "parameters": {
        "x": {"max": 0.1, "min": 0.01},
        "y": {"values": [1, 3, 7]},
    },
}

# 3: 스윕 시작
sweep_id = wandb.sweep(sweep=sweep_configuration, project="my-first-sweep")

wandb.agent(sweep_id, function=main, count=10)

다음 섹션에서는 코드 샘플의 각 단계를 분석하고 설명합니다.

트레이닝 코드 설정

wandb.config에서 하이퍼파라미터 값을 가져와 모델을 트레이닝하고 메트릭을 반환하는 트레이닝 함수를 정의합니다.

선택적으로 W&B Run의 출력을 저장할 프로젝트 이름을 제공합니다(wandb.init의 project 파라미터). 프로젝트가 지정되지 않은 경우 run은 “Uncategorized” 프로젝트에 배치됩니다.

# 1: objective/트레이닝 함수 정의
def objective(config):
    score = config.x**3 + config.y
    return score


def main():
    wandb.init(project="my-first-sweep")
    score = objective(wandb.config)
    wandb.log({"score": score})

스윕 구성으로 검색 공간 정의

사전에서 스윕할 하이퍼파라미터를 지정합니다. 구성 옵션은 스윕 구성 정의을 참조하세요.

다음 예제는 랜덤 검색('method':'random')을 사용하는 스윕 구성을 보여줍니다. 스윕은 배치 크기, 에포크 및 학습률에 대해 구성에 나열된 임의의 값 집합을 무작위로 선택합니다.

W&B는 metric 키에 “goal": "minimize"가 연결되어 있을 때 지정된 메트릭을 최소화합니다. 이 경우 W&B는 메트릭 score("name": "score")를 최소화하도록 최적화합니다.

# 2: 검색 공간 정의
sweep_configuration = {
    "method": "random",
    "metric": {"goal": "minimize", "name": "score"},
    "parameters": {
        "x": {"max": 0.1, "min": 0.01},
        "y": {"values": [1, 3, 7]},
    },
}

스윕 초기화

W&B는 클라우드(표준), 로컬(로컬)에서 하나 이상의 머신에서 스윕을 관리하기 위해 Sweep Controller 를 사용합니다. Sweep Controller에 대한 자세한 내용은 로컬에서 검색 및 중지 알고리즘을 참조하세요.

스윕을 초기화하면 스윕 식별 번호가 반환됩니다.

sweep_id = wandb.sweep(sweep=sweep_configuration, project="my-first-sweep")

스윕 초기화에 대한 자세한 내용은 스윕 초기화을 참조하세요.

스윕 시작

wandb.agent API 호출을 사용하여 스윕을 시작합니다.

wandb.agent(sweep_id, function=main, count=10)

결과 시각화 (선택 사항)

프로젝트를 열어 W&B App 대시보드에서 실시간 결과를 확인하세요. 몇 번의 클릭만으로 평행 좌표 플롯, 파라미터 중요도 분석기타와 같은 풍부한 인터랙티브 차트를 구성합니다.

Sweeps Dashboard example

결과 시각화 방법에 대한 자세한 내용은 스윕 결과 시각화를 참조하세요. 대시보드 예제는 샘플 Sweeps Project를 참조하세요.

에이전트 중지 (선택 사항)

터미널에서 Ctrl+C를 눌러 현재 run을 중지합니다. 다시 누르면 에이전트가 종료됩니다.

2.2.2 - Add W&B (wandb) to your code

Python 코드 스크립트 또는 Jupyter 노트북 에 W&B를 추가하세요.

스크립트 또는 Jupyter Notebook에 W&B Python SDK를 추가하는 방법은 다양합니다. 아래에는 W&B Python SDK를 사용자 정의 코드에 통합하는 “모범 사례” 예제가 나와 있습니다.

원본 트레이닝 스크립트

다음 코드가 Python 스크립트에 있다고 가정합니다. 일반적인 트레이닝 루프를 모방하는 main이라는 함수를 정의합니다. 각 에포크마다 트레이닝 및 검증 데이터 세트에서 정확도와 손실이 계산됩니다. 이 예제의 목적을 위해 해당 값은 임의로 생성됩니다.

하이퍼파라미터 값을 저장하는 config라는 사전을 정의했습니다. 셀의 끝에서 main 함수를 호출하여 모의 트레이닝 코드를 실행합니다.

import random
import numpy as np

def train_one_epoch(epoch, lr, bs):
    acc = 0.25 + ((epoch / 30) + (random.random() / 10))
    loss = 0.2 + (1 - ((epoch - 1) / 10 + random.random() / 5))
    return acc, loss

def evaluate_one_epoch(epoch):
    acc = 0.1 + ((epoch / 20) + (random.random() / 10))
    loss = 0.25 + (1 - ((epoch - 1) / 10 + random.random() / 6))
    return acc, loss

# config 변수, 하이퍼파라미터 값 포함
config = {"lr": 0.0001, "bs": 16, "epochs": 5}

def main():
    # 하드 코딩된 값을 정의하는 대신
    # `wandb.config`에서 값을 정의합니다.
    lr = config["lr"]
    bs = config["bs"]
    epochs = config["epochs"]

    for epoch in np.arange(1, epochs):
        train_acc, train_loss = train_one_epoch(epoch, lr, bs)
        val_acc, val_loss = evaluate_one_epoch(epoch)

        print("epoch: ", epoch)
        print("training accuracy:", train_acc, "training loss:", train_loss)
        print("validation accuracy:", val_acc, "training loss:", val_loss)        

W&B Python SDK를 사용한 트레이닝 스크립트

다음 코드 예제에서는 W&B Python SDK를 코드에 추가하는 방법을 보여줍니다. CLI에서 W&B Sweep 작업을 시작하는 경우 CLI 탭을 살펴보십시오. Jupyter Notebook 또는 Python 스크립트 내에서 W&B Sweep 작업을 시작하는 경우 Python SDK 탭을 살펴보십시오.

W&B Sweep을 생성하기 위해 코드 예제에 다음을 추가했습니다.

  1. Weights & Biases Python SDK를 가져옵니다.
  2. 키-값 쌍이 스윕 구성을 정의하는 사전 오브젝트를 생성합니다. 다음 예제에서는 각 스윕 중에 배치 크기(batch_size), 에포크(epochs) 및 학습률(lr) 하이퍼파라미터가 다양합니다. 스윕 구성을 생성하는 방법에 대한 자세한 내용은 스윕 구성 정의를 참조하십시오.
  3. 스윕 구성 사전을 wandb.sweep에 전달합니다. 그러면 스윕이 초기화됩니다. 스윕 ID(sweep_id)가 반환됩니다. 스윕을 초기화하는 방법에 대한 자세한 내용은 스윕 초기화를 참조하십시오.
  4. wandb.init() API를 사용하여 데이터를 동기화하고 W&B Run으로 기록하는 백그라운드 프로세스를 생성합니다.
  5. (선택 사항) 하드 코딩된 값을 정의하는 대신 wandb.config에서 값을 정의합니다.
  6. wandb.log를 사용하여 최적화하려는 메트릭을 기록합니다. 구성에 정의된 메트릭을 기록해야 합니다. 구성 사전(이 예제에서는 sweep_configuration) 내에서 val_acc 값을 최대화하도록 스윕을 정의했습니다.
  7. wandb.agent API 호출로 스윕을 시작합니다. 스윕 ID, 스윕이 실행할 함수의 이름(function=main)을 제공하고 시도할 최대 run 수를 4개(count=4)로 설정합니다. W&B Sweep 시작 방법에 대한 자세한 내용은 스윕 에이전트 시작을 참조하십시오.
import wandb
import numpy as np
import random

# 스윕 구성 정의
sweep_configuration = {
    "method": "random",
    "name": "sweep",
    "metric": {"goal": "maximize", "name": "val_acc"},
    "parameters": {
        "batch_size": {"values": [16, 32, 64]},
        "epochs": {"values": [5, 10, 15]},
        "lr": {"max": 0.1, "min": 0.0001},
    },
}

# 구성을 전달하여 스윕을 초기화합니다.
# (선택 사항) 프로젝트 이름을 제공합니다.
sweep_id = wandb.sweep(sweep=sweep_configuration, project="my-first-sweep")


# `wandb.config`에서 하이퍼파라미터
# 값을 가져와서 모델을 트레이닝하고
# 메트릭을 반환하는 트레이닝 함수를 정의합니다.
def train_one_epoch(epoch, lr, bs):
    acc = 0.25 + ((epoch / 30) + (random.random() / 10))
    loss = 0.2 + (1 - ((epoch - 1) / 10 + random.random() / 5))
    return acc, loss


def evaluate_one_epoch(epoch):
    acc = 0.1 + ((epoch / 20) + (random.random() / 10))
    loss = 0.25 + (1 - ((epoch - 1) / 10 + random.random() / 6))
    return acc, loss


def main():
    run = wandb.init()

    # 하드 코딩된 값을 정의하는 대신
    # `wandb.config`에서 값을 정의합니다.
    lr = wandb.config.lr
    bs = wandb.config.batch_size
    epochs = wandb.config.epochs

    for epoch in np.arange(1, epochs):
        train_acc, train_loss = train_one_epoch(epoch, lr, bs)
        val_acc, val_loss = evaluate_one_epoch(epoch)

        wandb.log(
            {
                "epoch": epoch,
                "train_acc": train_acc,
                "train_loss": train_loss,
                "val_acc": val_acc,
                "val_loss": val_loss,
            }
        )


# 스윕 작업을 시작합니다.
wandb.agent(sweep_id, function=main, count=4)

W&B Sweep을 생성하려면 먼저 YAML 구성 파일을 생성합니다. 구성 파일에는 스윕이 탐색할 하이퍼파라미터가 포함되어 있습니다. 다음 예제에서는 각 스윕 중에 배치 크기(batch_size), 에포크(epochs) 및 학습률(lr) 하이퍼파라미터가 다양합니다.

# config.yaml
program: train.py
method: random
name: sweep
metric:
  goal: maximize
  name: val_acc
parameters:
  batch_size: 
    values: [16,32,64]
  lr:
    min: 0.0001
    max: 0.1
  epochs:
    values: [5, 10, 15]

W&B Sweep 구성을 생성하는 방법에 대한 자세한 내용은 스윕 구성 정의를 참조하십시오.

YAML 파일의 program 키에 Python 스크립트의 이름을 제공해야 합니다.

다음으로 코드 예제에 다음을 추가합니다.

  1. Wieghts & Biases Python SDK(wandb) 및 PyYAML(yaml)을 가져옵니다. PyYAML은 YAML 구성 파일을 읽어오는 데 사용됩니다.
  2. 구성 파일을 읽어옵니다.
  3. wandb.init() API를 사용하여 데이터를 동기화하고 W&B Run으로 기록하는 백그라운드 프로세스를 생성합니다. config 오브젝트를 config 파라미터에 전달합니다.
  4. 하드 코딩된 값을 사용하는 대신 wandb.config에서 하이퍼파라미터 값을 정의합니다.
  5. wandb.log를 사용하여 최적화하려는 메트릭을 기록합니다. 구성에 정의된 메트릭을 기록해야 합니다. 구성 사전(이 예제에서는 sweep_configuration) 내에서 val_acc 값을 최대화하도록 스윕을 정의했습니다.
import wandb
import yaml
import random
import numpy as np


def train_one_epoch(epoch, lr, bs):
    acc = 0.25 + ((epoch / 30) + (random.random() / 10))
    loss = 0.2 + (1 - ((epoch - 1) / 10 + random.random() / 5))
    return acc, loss


def evaluate_one_epoch(epoch):
    acc = 0.1 + ((epoch / 20) + (random.random() / 10))
    loss = 0.25 + (1 - ((epoch - 1) / 10 + random.random() / 6))
    return acc, loss


def main():
    # 기본 하이퍼파라미터를 설정합니다.
    with open("./config.yaml") as file:
        config = yaml.load(file, Loader=yaml.FullLoader)

    run = wandb.init(config=config)

    # 하드 코딩된 값을 정의하는 대신
    # `wandb.config`에서 값을 정의합니다.
    lr = wandb.config.lr
    bs = wandb.config.batch_size
    epochs = wandb.config.epochs

    for epoch in np.arange(1, epochs):
        train_acc, train_loss = train_one_epoch(epoch, lr, bs)
        val_acc, val_loss = evaluate_one_epoch(epoch)

        wandb.log(
            {
                "epoch": epoch,
                "train_acc": train_acc,
                "train_loss": train_loss,
                "val_acc": val_acc,
                "val_loss": val_loss,
            }
        )


# main 함수를 호출합니다.
main()

CLI로 이동합니다. CLI 내에서 스윕 에이전트가 시도해야 하는 최대 run 수를 설정합니다. 이 단계는 선택 사항입니다. 다음 예제에서는 최대 숫자를 5로 설정합니다.

NUM=5

다음으로 wandb sweep 코맨드로 스윕을 초기화합니다. YAML 파일의 이름을 제공합니다. 선택적으로 프로젝트 플래그(--project)에 대한 프로젝트 이름을 제공합니다.

wandb sweep --project sweep-demo-cli config.yaml

그러면 스윕 ID가 반환됩니다. 스윕을 초기화하는 방법에 대한 자세한 내용은 스윕 초기화를 참조하십시오.

스윕 ID를 복사하고 다음 코드 조각에서 sweepID를 바꾸어 wandb agent 코맨드로 스윕 작업을 시작합니다.

wandb agent --count $NUM your-entity/sweep-demo-cli/sweepID

스윕 작업 시작 방법에 대한 자세한 내용은 스윕 작업 시작을 참조하십시오.

메트릭 로깅 시 고려 사항

스윕 구성에 지정한 메트릭을 W&B에 명시적으로 기록해야 합니다. 하위 디렉터리 내부에 스윕에 대한 메트릭을 기록하지 마십시오.

예를 들어 다음 유사 코드를 고려하십시오. 사용자는 검증 손실("val_loss": loss)을 기록하려고 합니다. 먼저 값을 사전에 전달합니다. 그러나 wandb.log에 전달된 사전은 사전에서 키-값 쌍에 명시적으로 엑세스하지 않습니다.

# W&B Python 라이브러리를 가져오고 W&B에 로그인합니다.
import wandb
import random

def train():
    offset = random.random() / 5
    acc = 1 - 2**-epoch - random.random() / epoch - offset
    loss = 2**-epoch + random.random() / epoch + offset

    val_metrics = {"val_loss": loss, "val_acc": acc}
    return val_metrics


def main():
    wandb.init(entity="<entity>", project="my-first-sweep")
    val_metrics = train()
    # 잘못되었습니다. 사전에서 키-값 쌍에 명시적으로 엑세스해야 합니다.
    # 메트릭을 올바르게 기록하는 방법을 보려면 다음 코드 블록을 참조하십시오.
    wandb.log({"val_loss": val_metrics})


sweep_configuration = {
    "method": "random",
    "metric": {"goal": "minimize", "name": "val_loss"},
    "parameters": {
        "x": {"max": 0.1, "min": 0.01},
        "y": {"values": [1, 3, 7]},
    },
}

sweep_id = wandb.sweep(sweep=sweep_configuration, project="my-first-sweep")

wandb.agent(sweep_id, function=main, count=10)

대신 Python 사전 내에서 키-값 쌍에 명시적으로 엑세스합니다. 예를 들어 다음 코드는 사전을 wandb.log 메소드에 전달할 때 키-값 쌍을 지정합니다.

# W&B Python 라이브러리를 가져오고 W&B에 로그인합니다.
import wandb
import random


def train():
    offset = random.random() / 5
    acc = 1 - 2**-epoch - random.random() / epoch - offset
    loss = 2**-epoch + random.random() / epoch + offset

    val_metrics = {"val_loss": loss, "val_acc": acc}
    return val_metrics


def main():
    wandb.init(entity="<entity>", project="my-first-sweep")
    val_metrics = train()
    wandb.log({"val_loss", val_metrics["val_loss"]})


sweep_configuration = {
    "method": "random",
    "metric": {"goal": "minimize", "name": "val_loss"},
    "parameters": {
        "x": {"max": 0.1, "min": 0.01},
        "y": {"values": [1, 3, 7]},
    },
}

sweep_id = wandb.sweep(sweep=sweep_configuration, project="my-first-sweep")

wandb.agent(sweep_id, function=main, count=10)

2.2.3 - Define a sweep configuration

스윕을 위한 설정 파일을 만드는 방법을 배워보세요.

W&B Sweep은 하이퍼파라미터 값을 탐색하는 전략과 해당 값을 평가하는 코드를 결합합니다. 이 전략은 모든 옵션을 시도하는 것만큼 간단할 수도 있고, 베이지안 최적화 및 Hyperband(BOHB)만큼 복잡할 수도 있습니다.

Python dictionary 또는 YAML 파일에서 스윕 구성을 정의합니다. 스윕 구성을 정의하는 방법은 스윕을 관리하려는 방식에 따라 다릅니다.

다음 가이드에서는 스윕 구성의 형식을 지정하는 방법을 설명합니다. 최상위 스윕 구성 키의 전체 목록은 스윕 구성 옵션을 참조하십시오.

기본 구조

두 가지 스윕 구성 형식 옵션(YAML 및 Python dictionary) 모두 키-값 쌍과 중첩 구조를 활용합니다.

스윕 구성 내에서 최상위 키를 사용하여 스윕 이름(name 키), 검색할 파라미터(parameters 키), 파라미터 공간을 검색하는 방법(method 키) 등과 같은 스윕 검색의 품질을 정의합니다.

예를 들어, 다음 코드 조각은 YAML 파일과 Python dictionary 내에서 정의된 동일한 스윕 구성을 보여줍니다. 스윕 구성 내에는 program, name, method, metricparameters의 5가지 최상위 키가 지정되어 있습니다.

커맨드라인 (CLI)에서 스윕을 대화형으로 관리하려면 YAML 파일에서 스윕 구성을 정의하십시오.

program: train.py
name: sweepdemo
method: bayes
metric:
  goal: minimize
  name: validation_loss
parameters:
  learning_rate:
    min: 0.0001
    max: 0.1
  batch_size:
    values: [16, 32, 64]
  epochs:
    values: [5, 10, 15]
  optimizer:
    values: ["adam", "sgd"]

Python 스크립트 또는 Jupyter notebook에서 트레이닝 알고리즘을 정의하는 경우 Python dictionary 데이터 구조에서 스윕을 정의하십시오.

다음 코드 조각은 sweep_configuration이라는 변수에 스윕 구성을 저장합니다.

sweep_configuration = {
    "name": "sweepdemo",
    "method": "bayes",
    "metric": {"goal": "minimize", "name": "validation_loss"},
    "parameters": {
        "learning_rate": {"min": 0.0001, "max": 0.1},
        "batch_size": {"values": [16, 32, 64]},
        "epochs": {"values": [5, 10, 15]},
        "optimizer": {"values": ["adam", "sgd"]},
    },
}

최상위 parameters 키 내에는 learning_rate, batch_size, epochoptimizer 키가 중첩되어 있습니다. 중첩된 각 키에 대해 하나 이상의 값, 분포, 확률 등을 제공할 수 있습니다. 자세한 내용은 스윕 구성 옵션파라미터 섹션을 참조하십시오.

이중 중첩 파라미터

스윕 구성은 중첩된 파라미터를 지원합니다. 중첩된 파라미터를 구분하려면 최상위 파라미터 이름 아래에 추가 parameters 키를 사용하십시오. 스윕 구성은 다단계 중첩을 지원합니다.

베이지안 또는 랜덤 하이퍼파라미터 검색을 사용하는 경우 랜덤 변수에 대한 확률 분포를 지정하십시오. 각 하이퍼파라미터에 대해:

  1. 스윕 구성에 최상위 parameters 키를 만듭니다.
  2. parameters 키 내에서 다음을 중첩합니다.
    1. 최적화하려는 하이퍼파라미터의 이름을 지정합니다.
    2. distribution 키에 사용할 분포를 지정합니다. 하이퍼파라미터 이름 아래에 distribution 키-값 쌍을 중첩합니다.
    3. 탐색할 하나 이상의 값을 지정합니다. 값은 분포 키와 일치해야 합니다.
      1. (선택 사항) 최상위 파라미터 이름 아래에 추가 parameters 키를 사용하여 중첩된 파라미터를 구분합니다.

스윕 구성 템플릿

다음 템플릿은 파라미터를 구성하고 검색 제약 조건을 지정하는 방법을 보여줍니다. hyperparameter_name을 하이퍼파라미터 이름으로 바꾸고 <>로 묶인 모든 값을 바꿉니다.

program: <insert>
method: <insert>
parameter:
  hyperparameter_name0:
    value: 0  
  hyperparameter_name1: 
    values: [0, 0, 0]
  hyperparameter_name: 
    distribution: <insert>
    value: <insert>
  hyperparameter_name2:  
    distribution: <insert>
    min: <insert>
    max: <insert>
    q: <insert>
  hyperparameter_name3: 
    distribution: <insert>
    values:
      - <list_of_values>
      - <list_of_values>
      - <list_of_values>
early_terminate:
  type: hyperband
  s: 0
  eta: 0
  max_iter: 0
command:
- ${Command macro}
- ${Command macro}
- ${Command macro}
- ${Command macro}      

스윕 구성 예제

program: train.py
method: random
metric:
  goal: minimize
  name: loss
parameters:
  batch_size:
    distribution: q_log_uniform_values
    max: 256 
    min: 32
    q: 8
  dropout: 
    values: [0.3, 0.4, 0.5]
  epochs:
    value: 1
  fc_layer_size: 
    values: [128, 256, 512]
  learning_rate:
    distribution: uniform
    max: 0.1
    min: 0
  optimizer:
    values: ["adam", "sgd"]
sweep_config = {
    "method": "random",
    "metric": {"goal": "minimize", "name": "loss"},
    "parameters": {
        "batch_size": {
            "distribution": "q_log_uniform_values",
            "max": 256,
            "min": 32,
            "q": 8,
        },
        "dropout": {"values": [0.3, 0.4, 0.5]},
        "epochs": {"value": 1},
        "fc_layer_size": {"values": [128, 256, 512]},
        "learning_rate": {"distribution": "uniform", "max": 0.1, "min": 0},
        "optimizer": {"values": ["adam", "sgd"]},
    },
}

Bayes hyperband 예제

program: train.py
method: bayes
metric:
  goal: minimize
  name: val_loss
parameters:
  dropout:
    values: [0.15, 0.2, 0.25, 0.3, 0.4]
  hidden_layer_size:
    values: [96, 128, 148]
  layer_1_size:
    values: [10, 12, 14, 16, 18, 20]
  layer_2_size:
    values: [24, 28, 32, 36, 40, 44]
  learn_rate:
    values: [0.001, 0.01, 0.003]
  decay:
    values: [1e-5, 1e-6, 1e-7]
  momentum:
    values: [0.8, 0.9, 0.95]
  epochs:
    value: 27
early_terminate:
  type: hyperband
  s: 2
  eta: 3
  max_iter: 27

다음 탭은 early_terminate에 대한 최소 또는 최대 반복 횟수를 지정하는 방법을 보여줍니다.

이 예제의 대괄호는 [3, 3*eta, 3*eta*eta, 3*eta*eta*eta]이며, 이는 [3, 9, 27, 81]과 같습니다.

early_terminate:
  type: hyperband
  min_iter: 3

이 예제의 대괄호는 [27/eta, 27/eta/eta]이며, 이는 [9, 3]과 같습니다.

early_terminate:
  type: hyperband
  max_iter: 27
  s: 2

커맨드 예제

program: main.py
metric:
  name: val_loss
  goal: minimize

method: bayes
parameters:
  optimizer.config.learning_rate:
    min: !!float 1e-5
    max: 0.1
  experiment:
    values: [expt001, expt002]
  optimizer:
    values: [sgd, adagrad, adam]

command:
- ${env}
- ${interpreter}
- ${program}
- ${args_no_hyphens}
/usr/bin/env python train.py --param1=value1 --param2=value2
python train.py --param1=value1 --param2=value2

다음 탭은 일반적인 커맨드 매크로를 지정하는 방법을 보여줍니다.

{$interpreter} 매크로를 제거하고 값을 명시적으로 제공하여 Python 인터프리터를 하드 코딩하십시오. 예를 들어, 다음 코드 조각은 이를 수행하는 방법을 보여줍니다.

command:
  - ${env}
  - python3
  - ${program}
  - ${args}

다음은 스윕 구성 파라미터에 의해 지정되지 않은 추가 커맨드라인 인수를 추가하는 방법을 보여줍니다.

command:
  - ${env}
  - ${interpreter}
  - ${program}
  - "--config"
  - "your-training-config.json"
  - ${args}

프로그램이 인수 파싱을 사용하지 않는 경우 인수를 모두 전달하지 않고 wandb.init이 스윕 파라미터를 자동으로 wandb.config에 선택하도록 할 수 있습니다.

command:
  - ${env}
  - ${interpreter}
  - ${program}

Hydra와 같은 툴이 예상하는 방식으로 인수를 전달하도록 커맨드를 변경할 수 있습니다. 자세한 내용은 W&B와 함께 Hydra 사용하기를 참조하십시오.

command:
  - ${env}
  - ${interpreter}
  - ${program}
  - ${args_no_hyphens}

2.2.3.1 - Sweep configuration options

스윕 구성은 중첩된 키-값 쌍으로 구성됩니다. 스윕 구성 내에서 최상위 키를 사용하여 검색할 파라미터 ( parameter 키), 파라미터 공간을 검색하는 방법 ( method 키) 등과 같은 스윕 검색의 특성을 정의합니다.

다음 표는 최상위 스윕 구성 키와 간단한 설명을 나열합니다. 각 키에 대한 자세한 내용은 해당 섹션을 참조하십시오.

최상위 키 설명
program (필수) 실행할 트레이닝 스크립트
entity 이 스윕에 대한 엔티티
project 이 스윕에 대한 프로젝트
description 스윕에 대한 텍스트 설명
name W&B UI에 표시되는 스윕의 이름
method (필수) 검색 전략
metric 최적화할 메트릭 (특정 검색 전략 및 중단 조건에만 사용)
parameters (필수) 검색할 파라미터 범위
early_terminate 조기 중단 조건
command 트레이닝 스크립트를 호출하고 인수를 전달하기 위한 코맨드 구조
run_cap 이 스윕의 최대 run 수

스윕 구성을 구성하는 방법에 대한 자세한 내용은 스윕 구성 구조를 참조하십시오.

metric

metric 최상위 스윕 구성 키를 사용하여 최적화할 이름, 목표 및 대상 메트릭을 지정합니다.

설명
name 최적화할 메트릭의 이름입니다.
goal minimize 또는 maximize (기본값은 minimize)입니다.
target 최적화하려는 메트릭의 목표 값입니다. 스윕은 run이 지정한 목표 값에 도달하면 새 run을 만들지 않습니다. run을 실행 중인 활성 에이전트는 (run이 목표에 도달하면) 에이전트가 새 run 생성을 중단하기 전에 run이 완료될 때까지 기다립니다.

parameters

YAML 파일 또는 Python 스크립트에서 parameters를 최상위 키로 지정합니다. parameters 키 내에서 최적화하려는 하이퍼파라미터의 이름을 제공합니다. 일반적인 하이퍼파라미터에는 학습률, 배치 크기, 에포크, 옵티마이저 등이 있습니다. 스윕 구성에서 정의하는 각 하이퍼파라미터에 대해 하나 이상의 검색 제약 조건을 지정합니다.

다음 표는 지원되는 하이퍼파라미터 검색 제약 조건을 보여줍니다. 하이퍼파라미터 및 유스 케이스에 따라 아래 검색 제약 조건 중 하나를 사용하여 스윕 에이전트에게 검색하거나 사용할 위치 (분포의 경우) 또는 내용 (value, values 등)을 알려줍니다.

검색 제약 조건 설명
values 이 하이퍼파라미터에 대한 모든 유효한 값을 지정합니다. grid와 호환됩니다.
value 이 하이퍼파라미터에 대한 단일 유효한 값을 지정합니다. grid와 호환됩니다.
distribution 확률 분포를 지정합니다. 기본값에 대한 정보는 이 표 다음에 나오는 참고 사항을 참조하십시오.
probabilities random을 사용할 때 values의 각 요소를 선택할 확률을 지정합니다.
min, max (int 또는 float) 최대값 및 최소값입니다. int인 경우 int_uniform 분포된 하이퍼파라미터에 사용됩니다. float인 경우 uniform 분포된 하이퍼파라미터에 사용됩니다.
mu (float) normal 또는 lognormal 분포된 하이퍼파라미터에 대한 평균 파라미터입니다.
sigma (float) normal 또는 lognormal 분포된 하이퍼파라미터에 대한 표준 편차 파라미터입니다.
q (float) 양자화된 하이퍼파라미터에 대한 양자화 단계 크기입니다.
parameters 루트 수준 파라미터 내부에 다른 파라미터를 중첩합니다.

method

method 키를 사용하여 하이퍼파라미터 검색 전략을 지정합니다. 선택할 수 있는 세 가지 하이퍼파라미터 검색 전략이 있습니다: 그리드, 랜덤, 베이지안 탐색.

그리드 검색

하이퍼파라미터 값의 모든 조합을 반복합니다. 그리드 검색은 각 반복에서 사용할 하이퍼파라미터 값 집합에 대해 정보에 입각하지 않은 결정을 내립니다. 그리드 검색은 계산 비용이 많이 들 수 있습니다.

그리드 검색은 연속 검색 공간 내에서 검색하는 경우 영원히 실행됩니다.

랜덤 검색

각 반복에서 분포에 따라 임의의, 정보에 입각하지 않은 하이퍼파라미터 값 집합을 선택합니다. 랜덤 검색은 커맨드라인, Python 스크립트 또는 W&B 앱 UI 내에서 프로세스를 중지하지 않는 한 영원히 실행됩니다.

랜덤 (method: random) 검색을 선택하는 경우 메트릭 키를 사용하여 분포 공간을 지정합니다.

베이지안 탐색

랜덤그리드 검색과 달리 베이지안 모델은 정보에 입각한 결정을 내립니다. 베이지안 최적화는 확률 모델을 사용하여 목적 함수를 평가하기 전에 대리 함수에서 값을 테스트하는 반복적인 프로세스를 통해 사용할 값을 결정합니다. 베이지안 탐색은 작은 수의 연속 파라미터에 적합하지만 확장성이 떨어집니다. 베이지안 탐색에 대한 자세한 내용은 Bayesian Optimization Primer 논문을 참조하십시오.

베이지안 탐색은 커맨드라인, Python 스크립트 또는 W&B 앱 UI 내에서 프로세스를 중지하지 않는 한 영원히 실행됩니다.

랜덤 및 베이지안 탐색을 위한 분포 옵션

parameter 키 내에서 하이퍼파라미터의 이름을 중첩합니다. 다음으로 distribution 키를 지정하고 값에 대한 분포를 지정합니다.

다음 표는 W&B가 지원하는 분포를 나열합니다.

distribution 키 값 설명
constant 상수 분포. 사용할 상수 값 (value)을 지정해야 합니다.
categorical 범주형 분포. 이 하이퍼파라미터에 대한 모든 유효한 값 (values)을 지정해야 합니다.
int_uniform 정수에 대한 이산 균등 분포. maxmin을 정수로 지정해야 합니다.
uniform 연속 균등 분포. maxmin을 부동 소수점으로 지정해야 합니다.
q_uniform 양자화된 균등 분포. round(X / q) * q를 반환합니다. 여기서 X는 균등 분포입니다. q의 기본값은 1입니다.
log_uniform 로그 균등 분포. exp(min)exp(max) 사이의 값 X를 반환합니다. 여기서 자연 로그는 minmax 사이에서 균등하게 분포됩니다.
log_uniform_values 로그 균등 분포. minmax 사이의 값 X를 반환합니다. 여기서 log(X)log(min)log(max) 사이에서 균등하게 분포됩니다.
q_log_uniform 양자화된 로그 균등 분포. round(X / q) * q를 반환합니다. 여기서 Xlog_uniform입니다. q의 기본값은 1입니다.
q_log_uniform_values 양자화된 로그 균등 분포. round(X / q) * q를 반환합니다. 여기서 Xlog_uniform_values입니다. q의 기본값은 1입니다.
inv_log_uniform 역 로그 균등 분포. X를 반환합니다. 여기서 log(1/X)minmax 사이에서 균등하게 분포됩니다.
inv_log_uniform_values 역 로그 균등 분포. X를 반환합니다. 여기서 log(1/X)log(1/max)log(1/min) 사이에서 균등하게 분포됩니다.
normal 정규 분포. 평균 mu (기본값 0) 및 표준 편차 sigma (기본값 1)로 정규 분포된 값을 반환합니다.
q_normal 양자화된 정규 분포. round(X / q) * q를 반환합니다. 여기서 Xnormal입니다. Q의 기본값은 1입니다.
log_normal 로그 정규 분포. 자연 로그 log(X)가 평균 mu (기본값 0) 및 표준 편차 sigma (기본값 1)로 정규 분포된 값 X를 반환합니다.
q_log_normal 양자화된 로그 정규 분포. round(X / q) * q를 반환합니다. 여기서 Xlog_normal입니다. q의 기본값은 1입니다.

early_terminate

조기 종료 (early_terminate)를 사용하여 성능이 낮은 run을 중지합니다. 조기 종료가 발생하면 W&B는 새 하이퍼파라미터 값 집합으로 새 run을 만들기 전에 현재 run을 중지합니다.

중지 알고리즘

Hyperband 하이퍼파라미터 최적화는 프로그램을 중지해야 하는지 또는 사전 설정된 하나 이상의 반복 횟수 ( brackets 라고 함)에서 계속해야 하는지 평가합니다.

W&B run이 bracket에 도달하면 스윕은 해당 run의 메트릭을 이전에 보고된 모든 메트릭 값과 비교합니다. 스윕은 run의 메트릭 값이 너무 높으면 (목표가 최소화인 경우) 또는 run의 메트릭 값이 너무 낮으면 (목표가 최대화인 경우) run을 종료합니다.

Brackets는 기록된 반복 횟수를 기반으로 합니다. brackets 수는 최적화하는 메트릭을 기록하는 횟수에 해당합니다. 반복은 단계, 에포크 또는 그 사이의 무언가에 해당할 수 있습니다. 단계 카운터의 숫자 값은 bracket 계산에 사용되지 않습니다.

설명
min_iter 첫 번째 bracket에 대한 반복을 지정합니다.
max_iter 최대 반복 횟수를 지정합니다.
s 총 bracket 수를 지정합니다 (max_iter에 필요).
eta bracket 승수 일정을 지정합니다 (기본값: 3).
strict 원본 Hyperband 논문을 더 면밀히 따르면서 실행을 적극적으로 정리하는 ‘엄격’ 모드를 활성화합니다. 기본값은 false입니다.

command

command 키 내에서 중첩된 값으로 형식과 내용을 수정합니다. 파일 이름과 같은 고정된 구성 요소를 직접 포함할 수 있습니다.

W&B는 코맨드의 가변 구성 요소에 대해 다음 매크로를 지원합니다.

코맨드 매크로 설명
${env} Unix 시스템의 경우 /usr/bin/env, Windows에서는 생략됩니다.
${interpreter} python으로 확장됩니다.
${program} 스윕 구성 program 키로 지정된 트레이닝 스크립트 파일 이름입니다.
${args} --param1=value1 --param2=value2 형식의 하이퍼파라미터 및 해당 값입니다.
${args_no_boolean_flags} --param1=value1 형식의 하이퍼파라미터 및 해당 값입니다. 단, 부울 파라미터는 True이면 --boolean_flag_param 형식이고 False이면 생략됩니다.
${args_no_hyphens} param1=value1 param2=value2 형식의 하이퍼파라미터 및 해당 값입니다.
${args_json} JSON으로 인코딩된 하이퍼파라미터 및 해당 값입니다.
${args_json_file} JSON으로 인코딩된 하이퍼파라미터 및 해당 값이 포함된 파일의 경로입니다.
${envvar} 환경 변수를 전달하는 방법입니다. ${envvar:MYENVVAR}은 MYENVVAR 환경 변수의 값으로 확장됩니다.

2.2.4 - Initialize a sweep

W&B 스윕 초기화

W&B는 클라우드 (표준), 로컬 (local) 환경에서 하나 이상의 머신에서 Sweeps 를 관리하기 위해 Sweep Controller 를 사용합니다. Run이 완료되면, 스윕 컨트롤러는 실행할 새로운 Run을 설명하는 새로운 명령어 세트를 발행합니다. 이 명령어는 실제로 Run을 수행하는 에이전트 에 의해 선택됩니다. 일반적인 W&B 스윕에서 컨트롤러는 W&B 서버에 존재합니다. 에이전트는 사용자 의 머신에 존재합니다.

다음 코드 조각은 CLI 및 Jupyter Notebook 또는 Python 스크립트 내에서 스윕을 초기화하는 방법을 보여줍니다.

W&B SDK를 사용하여 스윕을 초기화합니다. 스윕 구성 dictionary 를 sweep 파라미터에 전달합니다. 선택적으로 W&B Run 의 출력을 저장할 Projects 파라미터 (project)에 대한 프로젝트 이름을 제공합니다. 프로젝트가 지정되지 않은 경우 Run은 “Uncategorized” 프로젝트에 배치됩니다.

import wandb

# 스윕 구성 예시
sweep_configuration = {
    "method": "random",
    "name": "sweep",
    "metric": {"goal": "maximize", "name": "val_acc"},
    "parameters": {
        "batch_size": {"values": [16, 32, 64]},
        "epochs": {"values": [5, 10, 15]},
        "lr": {"max": 0.1, "min": 0.0001},
    },
}

sweep_id = wandb.sweep(sweep=sweep_configuration, project="project-name")

wandb.sweep 함수는 스윕 ID를 반환합니다. 스윕 ID에는 Entities 이름과 Projects 이름이 포함됩니다. 스윕 ID를 기록해 두세요.

W&B CLI를 사용하여 스윕을 초기화합니다. 구성 파일 이름을 제공합니다. 선택적으로 project 플래그에 대한 프로젝트 이름을 제공합니다. 프로젝트가 지정되지 않은 경우 W&B Run은 “Uncategorized” 프로젝트에 배치됩니다.

wandb sweep 코맨드를 사용하여 스윕을 초기화합니다. 다음 코드 예제는 sweeps_demo 프로젝트에 대한 스윕을 초기화하고 구성에 config.yaml 파일을 사용합니다.

wandb sweep --project sweeps_demo config.yaml

이 코맨드는 스윕 ID를 출력합니다. 스윕 ID에는 Entities 이름과 Projects 이름이 포함됩니다. 스윕 ID를 기록해 두세요.

2.2.5 - Start or stop a sweep agent

하나 이상의 머신에서 W&B 스윕 에이전트 를 시작하거나 중지합니다.

하나 이상의 머신에서 하나 이상의 에이전트로 W&B 스윕을 시작하세요. W&B 스윕 에이전트는 하이퍼파라미터에 대해 W&B 스윕 ( wandb sweep)을 초기화할 때 시작한 W&B 서버를 쿼리하고 이를 사용하여 모델 트레이닝을 실행합니다.

W&B 스윕 에이전트를 시작하려면 W&B 스윕을 초기화할 때 반환된 W&B 스윕 ID를 제공하세요. W&B 스윕 ID의 형식은 다음과 같습니다.

entity/project/sweep_ID

여기서:

  • entity: W&B 사용자 이름 또는 팀 이름입니다.
  • project: W&B Run의 출력을 저장할 프로젝트의 이름입니다. 프로젝트를 지정하지 않으면 run이 “Uncategorized” 프로젝트에 저장됩니다.
  • sweep_ID: W&B에서 생성한 의사 난수 고유 ID입니다.

Jupyter Notebook 또는 Python 스크립트 내에서 W&B 스윕 에이전트를 시작하는 경우 W&B 스윕이 실행할 함수의 이름을 제공하세요.

다음 코드 조각은 W&B로 에이전트를 시작하는 방법을 보여줍니다. 이미 구성 파일이 있고 W&B 스윕을 초기화했다고 가정합니다. 구성 파일을 정의하는 방법에 대한 자세한 내용은 스윕 구성 정의을 참조하세요.

wandb agent 코맨드를 사용하여 스윕을 시작합니다. 스윕을 초기화할 때 반환된 스윕 ID를 제공합니다. 아래 코드 조각을 복사하여 붙여넣고 sweep_id를 스윕 ID로 바꾸세요.

wandb agent sweep_id

W&B Python SDK 라이브러리를 사용하여 스윕을 시작합니다. 스윕을 초기화할 때 반환된 스윕 ID를 제공합니다. 또한 스윕이 실행할 함수의 이름을 제공합니다.

wandb.agent(sweep_id=sweep_id, function=function_name)

W&B 에이전트 중지

선택적으로 스윕 에이전트가 시도해야 하는 W&B Runs의 수를 지정합니다. 다음 코드 조각은 CLI 및 Jupyter Notebook, Python 스크립트 내에서 최대 W&B Runs 수를 설정하는 방법을 보여줍니다.

먼저 스윕을 초기화합니다. 자세한 내용은 스윕 초기화을 참조하세요.

sweep_id = wandb.sweep(sweep_config)

다음으로 스윕 작업을 시작합니다. 스윕 시작에서 생성된 스윕 ID를 제공합니다. 시도할 최대 run 수를 설정하려면 count 파라미터에 정수 값을 전달합니다.

sweep_id, count = "dtzl1o7u", 10
wandb.agent(sweep_id, count=count)

먼저 wandb sweep 코맨드로 스윕을 초기화합니다. 자세한 내용은 스윕 초기화을 참조하세요.

wandb sweep config.yaml

시도할 최대 run 수를 설정하려면 count 플래그에 정수 값을 전달합니다.

NUM=10
SWEEPID="dtzl1o7u"
wandb agent --count $NUM $SWEEPID

2.2.6 - Parallelize agents

멀티 코어 또는 멀티 GPU 머신에서 W&B 스윕 에이전트를 병렬화하세요.

멀티 코어 또는 멀티 GPU 머신에서 W&B 스윕 에이전트를 병렬화하세요. 시작하기 전에 W&B 스윕을 초기화했는지 확인하세요. W&B 스윕을 초기화하는 방법에 대한 자세한 내용은 스윕 초기화를 참조하세요.

멀티 CPU 머신에서 병렬화

유스 케이스에 따라 다음 탭을 살펴보고 CLI 또는 Jupyter Notebook 내에서 W&B 스윕 에이전트를 병렬화하는 방법을 알아보세요.

wandb agent 코맨드를 사용하여 터미널에서 여러 CPU에 걸쳐 W&B 스윕 에이전트를 병렬화하세요. 스윕을 초기화할 때 반환된 스윕 ID를 제공하세요.

  1. 로컬 머신에서 둘 이상의 터미널 창을 여세요.
  2. 아래 코드 조각을 복사하여 붙여넣고 sweep_id를 스윕 ID로 바꾸세요.
wandb agent sweep_id

W&B Python SDK 라이브러리를 사용하여 Jupyter Notebook 내에서 여러 CPU에 걸쳐 W&B 스윕 에이전트를 병렬화하세요. 스윕을 초기화할 때 반환된 스윕 ID가 있는지 확인하세요. 또한 스윕이 실행할 함수의 이름을 function 파라미터에 제공하세요.

  1. 둘 이상의 Jupyter Notebook을 여세요.
  2. 여러 Jupyter Notebook에 W&B 스윕 ID를 복사하여 붙여넣어 W&B 스윕을 병렬화하세요. 예를 들어, 스윕 ID가 sweep_id라는 변수에 저장되어 있고 함수의 이름이 function_name인 경우 다음 코드 조각을 여러 Jupyter Notebook에 붙여넣어 스윕을 병렬화할 수 있습니다.
wandb.agent(sweep_id=sweep_id, function=function_name)

멀티 GPU 머신에서 병렬화

CUDA 툴킷을 사용하여 터미널에서 여러 GPU에 걸쳐 W&B 스윕 에이전트를 병렬화하려면 다음 절차를 따르세요.

  1. 로컬 머신에서 둘 이상의 터미널 창을 여세요.
  2. W&B 스윕 작업을 시작할 때 CUDA_VISIBLE_DEVICES를 사용하여 사용할 GPU 인스턴스를 지정하세요(wandb agent). 사용할 GPU 인스턴스에 해당하는 정수 값을 CUDA_VISIBLE_DEVICES에 할당하세요.

예를 들어, 로컬 머신에 두 개의 NVIDIA GPU가 있다고 가정해 보겠습니다. 터미널 창을 열고 CUDA_VISIBLE_DEVICES0으로 설정하세요(CUDA_VISIBLE_DEVICES=0). 다음 예제에서 sweep_ID를 W&B 스윕을 초기화할 때 반환되는 W&B 스윕 ID로 바꾸세요.

터미널 1

CUDA_VISIBLE_DEVICES=0 wandb agent sweep_ID

두 번째 터미널 창을 여세요. CUDA_VISIBLE_DEVICES1로 설정하세요(CUDA_VISIBLE_DEVICES=1). 이전 코드 조각에 언급된 sweep_ID에 대해 동일한 W&B 스윕 ID를 붙여넣으세요.

터미널 2

CUDA_VISIBLE_DEVICES=1 wandb agent sweep_ID

2.2.7 - Visualize sweep results

W&B App UI를 사용하여 W&B Sweeps의 결과를 시각화하세요.

W&B App UI를 사용하여 W&B Sweeps 의 결과를 시각화합니다. https://wandb.ai/home에서 W&B App UI로 이동합니다. W&B Sweep을 초기화할 때 지정한 project를 선택합니다. project workspace로 리디렉션됩니다. 왼쪽 panel에서 Sweep 아이콘(빗자루 아이콘)을 선택합니다. Sweep UI에서 목록에서 Sweep 이름을 선택합니다.

기본적으로 W&B는 W&B Sweep 작업을 시작할 때 평행 좌표 플롯, 파라미터 중요도 플롯 및 산점도를 자동으로 생성합니다.

Sweep UI 인터페이스로 이동하여 자동 생성된 플롯을 보는 방법을 보여주는 애니메이션입니다.

평행 좌표 차트는 많은 수의 하이퍼파라미터 와 model metrics 간의 관계를 한눈에 요약합니다. 평행 좌표 플롯에 대한 자세한 내용은 평행 좌표를 참조하십시오.

평행 좌표 플롯의 예.

산점도(왼쪽)는 Sweep 중에 생성된 W&B Runs 을 비교합니다. 산점도에 대한 자세한 내용은 산점도를 참조하십시오.

파라미터 중요도 플롯(오른쪽)은 metrics 의 바람직한 value 와 가장 잘 예측하고 높은 상관 관계가 있는 하이퍼파라미터 를 나열합니다. 자세한 내용은 파라미터 중요도 플롯은 파라미터 중요도를 참조하십시오.

산점도 (왼쪽) 및 파라미터 중요도 플롯 (오른쪽)의 예.

자동으로 사용되는 종속 및 독립 value (x 및 y 축)를 변경할 수 있습니다. 각 panel 에는 Edit panel 이라는 연필 아이콘이 있습니다. Edit panel 을 선택합니다. model 이 나타납니다. 모달 내에서 그래프의 행동을 변경할 수 있습니다.

모든 기본 W&B visualization 옵션에 대한 자세한 내용은 Panels를 참조하십시오. W&B Sweep의 일부가 아닌 W&B Runs 에서 플롯을 만드는 방법에 대한 자세한 내용은 Data Visualization docs를 참조하십시오.

2.2.8 - Manage sweeps with the CLI

CLI를 사용하여 W&B 스윕을 일시 중지, 재개 및 취소합니다.

CLI를 사용하여 W&B 스윕을 일시 중지, 재개 및 취소합니다. W&B 스윕을 일시 중지하면 스윕이 재개될 때까지 새로운 W&B Runs이 실행되지 않도록 W&B 에이전트에 알립니다. 스윕을 재개하면 에이전트가 새로운 W&B Runs을 계속 실행합니다. W&B 스윕을 중지하면 W&B 스윕 에이전트가 새로운 W&B Runs의 생성 또는 실행을 중지합니다. W&B 스윕을 취소하면 스윕 에이전트가 현재 실행 중인 W&B Runs을 중단하고 새로운 Runs 실행을 중지합니다.

각각의 경우, W&B 스윕을 초기화할 때 생성된 W&B 스윕 ID를 제공합니다. 선택적으로 새 터미널 창을 열어 다음 명령을 실행합니다. 새 터미널 창은 W&B 스윕이 현재 터미널 창에 출력문을 인쇄하는 경우 명령을 더 쉽게 실행할 수 있도록 합니다.

다음 지침에 따라 스윕을 일시 중지, 재개 및 취소합니다.

스윕 일시 중지

새로운 W&B Runs 실행을 일시적으로 중단하도록 W&B 스윕을 일시 중지합니다. wandb sweep --pause 코맨드를 사용하여 W&B 스윕을 일시 중지합니다. 일시 중지할 W&B 스윕 ID를 제공합니다.

wandb sweep --pause entity/project/sweep_ID

스윕 재개

wandb sweep --resume 코맨드로 일시 중지된 W&B 스윕을 재개합니다. 재개할 W&B 스윕 ID를 제공합니다.

wandb sweep --resume entity/project/sweep_ID

스윕 중지

새로운 W&B Runs 실행을 중지하고 현재 실행 중인 Runs을 완료하도록 W&B 스윕을 완료합니다.

wandb sweep --stop entity/project/sweep_ID

스윕 취소

실행 중인 모든 Runs을 중단하고 새로운 Runs 실행을 중지하도록 스윕을 취소합니다. wandb sweep --cancel 코맨드를 사용하여 W&B 스윕을 취소합니다. 취소할 W&B 스윕 ID를 제공합니다.

wandb sweep --cancel entity/project/sweep_ID

전체 CLI 코맨드 옵션 목록은 wandb sweep CLI 레퍼런스 가이드를 참조하세요.

여러 에이전트에서 스윕 일시 중지, 재개, 중지 및 취소

단일 터미널에서 여러 에이전트에 걸쳐 W&B 스윕을 일시 중지, 재개, 중지 또는 취소합니다. 예를 들어, 다중 코어 머신이 있다고 가정합니다. W&B 스윕을 초기화한 후 새 터미널 창을 열고 각 새 터미널에 스윕 ID를 복사합니다.

터미널 내에서 wandb sweep CLI 코맨드를 사용하여 W&B 스윕을 일시 중지, 재개, 중지 또는 취소합니다. 예를 들어, 다음 코드 조각은 CLI를 사용하여 여러 에이전트에서 W&B 스윕을 일시 중지하는 방법을 보여줍니다.

wandb sweep --pause entity/project/sweep_ID

에이전트에서 스윕을 재개하려면 스윕 ID와 함께 --resume 플래그를 지정합니다.

wandb sweep --resume entity/project/sweep_ID

W&B 에이전트를 병렬화하는 방법에 대한 자세한 내용은 에이전트 병렬화를 참조하세요.

2.2.9 - Learn more about sweeps

스윕에 유용한 소스 모음입니다.

학술 논문

Li, Lisha, 외. “Hyperband: A novel bandit-based approach to hyperparameter optimization.The Journal of Machine Learning Research 18.1 (2017): 6765-6816.

Sweep Experiments

다음 W&B Reports는 W&B Sweeps를 사용한 하이퍼파라미터 최적화 실험의 프로젝트 예제를 보여줍니다.

selfm-anaged

다음 방법 가이드는 W&B로 실제 문제를 해결하는 방법을 보여줍니다.

  • Sweeps with XGBoost
    • 설명: XGBoost를 사용하여 하이퍼파라미터 튜닝을 위해 W&B Sweeps를 사용하는 방법.

Sweep GitHub repository

W&B는 오픈 소스를 옹호하며 커뮤니티의 기여를 환영합니다. GitHub 저장소는 https://github.com/wandb/sweeps에서 찾을 수 있습니다. W&B 오픈 소스 레포지토리에 기여하는 방법에 대한 자세한 내용은 W&B GitHub Contribution guidelines를 참조하십시오.

2.2.10 - Manage algorithms locally

W&B 클라우드 호스팅 서비스를 사용하는 대신 로컬에서 알고리즘을 검색하고 중지합니다.

하이퍼파라미터 컨트롤러는 기본적으로 Weights & Biases에서 클라우드 서비스로 호스팅됩니다. W&B 에이전트는 컨트롤러와 통신하여 트레이닝에 사용할 다음 파라미터 세트를 결정합니다. 또한 컨트롤러는 조기 중단 알고리즘을 실행하여 중단할 수 있는 run을 결정합니다.

로컬 컨트롤러 기능을 사용하면 사용자가 로컬에서 검색 및 중단 알고리즘을 시작할 수 있습니다. 로컬 컨트롤러는 사용자에게 문제를 디버그하고 클라우드 서비스에 통합할 수 있는 새로운 기능을 개발하기 위해 코드를 검사하고 계측할 수 있는 기능을 제공합니다.

시작하기 전에 W&B SDK(wandb)를 설치해야 합니다. 커맨드라인에 다음 코드 조각을 입력하세요.

pip install wandb sweeps

다음 예제에서는 이미 구성 파일과 트레이닝 루프가 Python 스크립트 또는 Jupyter Notebook에 정의되어 있다고 가정합니다. 구성 파일을 정의하는 방법에 대한 자세한 내용은 스윕 구성 정의를 참조하세요.

커맨드라인에서 로컬 컨트롤러 실행

W&B에서 클라우드 서비스로 호스팅하는 하이퍼파라미터 컨트롤러를 사용할 때와 유사하게 스윕을 초기화합니다. 컨트롤러 플래그(controller)를 지정하여 W&B 스윕 작업에 로컬 컨트롤러를 사용하려는 의사를 나타냅니다.

wandb sweep --controller config.yaml

또는 스윕 초기화와 로컬 컨트롤러 사용 지정 단계를 분리할 수 있습니다.

단계를 분리하려면 먼저 스윕의 YAML 구성 파일에 다음 키-값을 추가합니다.

controller:
  type: local

다음으로 스윕을 초기화합니다.

wandb sweep config.yaml

스윕을 초기화한 후 wandb controller로 컨트롤러를 시작합니다.

# wandb sweep 코맨드는 sweep_id를 출력합니다.
wandb controller {user}/{entity}/{sweep_id}

로컬 컨트롤러를 사용하도록 지정했으면 스윕을 실행하기 위해 하나 이상의 Sweep 에이전트를 시작합니다. 평소와 같은 방식으로 W&B 스윕을 시작합니다. 자세한 내용은 스윕 에이전트 시작을 참조하세요.

wandb sweep sweep_ID

W&B Python SDK로 로컬 컨트롤러 실행

다음 코드 조각은 W&B Python SDK로 로컬 컨트롤러를 지정하고 사용하는 방법을 보여줍니다.

Python SDK로 컨트롤러를 사용하는 가장 간단한 방법은 스윕 ID를 wandb.controller 메서드에 전달하는 것입니다. 다음으로 반환 오브젝트 run 메서드를 사용하여 스윕 작업을 시작합니다.

sweep = wandb.controller(sweep_id)
sweep.run()

컨트롤러 루프를 더 세밀하게 제어하려면:

import wandb

sweep = wandb.controller(sweep_id)
while not sweep.done():
    sweep.print_status()
    sweep.step()
    time.sleep(5)

또는 제공되는 파라미터를 훨씬 더 세밀하게 제어할 수 있습니다.

import wandb

sweep = wandb.controller(sweep_id)
while not sweep.done():
    params = sweep.search()
    sweep.schedule(params)
    sweep.print_status()

코드로 스윕을 완전히 지정하려면 다음과 같이 할 수 있습니다.

import wandb

sweep = wandb.controller()
sweep.configure_search("grid")
sweep.configure_program("train-dummy.py")
sweep.configure_controller(type="local")
sweep.configure_parameter("param1", value=3)
sweep.create()
sweep.run()

2.2.11 - Sweeps troubleshooting

일반적인 W&B 스윕 문제를 해결합니다.

다음 가이드라인을 참고하여 자주 발생하는 오류 메시지를 해결하세요.

CommError, Run does not existERROR Error uploading

이 두 오류 메시지가 모두 반환되는 경우 W&B Run ID가 정의되었을 수 있습니다. 예를 들어 Jupyter Notebook 또는 Python 스크립트에 다음과 유사한 코드 조각이 정의되어 있을 수 있습니다.

wandb.init(id="some-string")

W&B는 W&B Sweeps에서 생성된 Runs에 대해 무작위의 고유한 ID를 자동으로 생성하므로 W&B Sweeps에 대한 Run ID를 설정할 수 없습니다.

W&B Run ID는 프로젝트 내에서 고유해야 합니다.

테이블과 그래프에 표시될 사용자 지정 이름을 설정하려면 W&B를 초기화할 때 name 파라미터에 이름을 전달하는 것이 좋습니다. 예:

wandb.init(name="a helpful readable run name")

Cuda out of memory

이 오류 메시지가 표시되면 코드 리팩터링을 통해 프로세스 기반 실행을 사용하세요. 특히, 코드를 Python 스크립트로 다시 작성하세요. 또한 W&B Python SDK 대신 CLI에서 W&B Sweep 에이전트를 호출하세요.

예를 들어 코드를 train.py라는 Python 스크립트로 다시 작성한다고 가정합니다. 트레이닝 스크립트 이름(train.py)을 YAML Sweep 구성 파일(config.yaml (이 예시))에 추가합니다.

program: train.py
method: bayes
metric:
  name: validation_loss
  goal: maximize
parameters:
  learning_rate:
    min: 0.0001
    max: 0.1
  optimizer:
    values: ["adam", "sgd"]

다음으로, 다음 코드를 train.py Python 스크립트에 추가합니다.

if _name_ == "_main_":
    train()

CLI로 이동하여 wandb sweep 명령어로 W&B Sweep을 초기화합니다.

wandb sweep config.yaml

반환된 W&B Sweep ID를 기록해 둡니다. 다음으로, Python SDK(wandb.agent) 대신 CLI를 사용하여 wandb agent로 Sweep 작업을 시작합니다. 아래 코드 조각에서 sweep_ID를 이전 단계에서 반환된 Sweep ID로 바꿉니다.

wandb agent sweep_ID

anaconda 400 error

다음 오류는 일반적으로 최적화하려는 메트릭을 로깅하지 않을 때 발생합니다.

wandb: ERROR Error while calling W&B API: anaconda 400 error: 
{"code": 400, "message": "TypeError: bad operand type for unary -: 'NoneType'"}

YAML 파일 또는 중첩된 사전 내에서 최적화할 “metric"이라는 키를 지정합니다. 이 메트릭을 반드시 로깅(wandb.log)해야 합니다. 또한 Python 스크립트 또는 Jupyter Notebook 내에서 스윕을 최적화하도록 정의한 정확한 메트릭 이름을 사용해야 합니다. 구성 파일에 대한 자세한 내용은 스윕 구성 정의를 참조하세요.

2.2.12 - Sweeps UI

Sweeps UI의 다양한 구성 요소에 대해 설명합니다.

상태 (State), 생성 시간 (Created), 스윕을 시작한 엔티티 (Creator), 완료된 run 수 (Run count) 및 스윕을 계산하는 데 걸린 시간 (Compute time)이 Sweeps UI에 표시됩니다. 스윕이 생성할 것으로 예상되는 run 수 (Est. Runs)는 이산 검색 공간에서 그리드 검색을 수행할 때 제공됩니다. 인터페이스에서 스윕을 클릭하여 스윕을 일시 중지, 재개, 중지 또는 중단할 수도 있습니다.

2.2.13 - Tutorial: Create sweep job from project

기존 W&B 프로젝트에서 스윕 작업을 생성하는 방법에 대한 튜토리얼입니다.

이 튜토리얼에서는 기존의 W&B 프로젝트에서 스윕 작업을 생성하는 방법을 설명합니다. Fashion MNIST 데이터셋을 사용하여 이미지를 분류하는 방법을 PyTorch 컨볼루션 신경망을 트레이닝합니다. 필요한 코드와 데이터셋은 W&B 저장소에 있습니다: https://github.com/wandb/examples/tree/master/examples/pytorch/pytorch-cnn-fashion

W&B 대시보드에서 결과를 살펴보세요.

1. 프로젝트 생성

먼저, 베이스라인을 만듭니다. W&B 예제 GitHub 저장소에서 PyTorch MNIST 데이터셋 예제 모델을 다운로드합니다. 다음으로, 모델을 트레이닝합니다. 트레이닝 스크립트는 examples/pytorch/pytorch-cnn-fashion 디렉토리 내에 있습니다.

  1. 이 저장소를 클론합니다: git clone https://github.com/wandb/examples.git
  2. 이 예제를 엽니다: cd examples/pytorch/pytorch-cnn-fashion
  3. run을 수동으로 실행합니다: python train.py

선택적으로 W&B App UI 대시보드에 나타나는 예제를 탐색합니다.

예제 프로젝트 페이지 보기 →

2. 스윕 생성

프로젝트 페이지에서 사이드바의 Sweep tab을 열고 Create Sweep을 선택합니다.

자동 생성된 설정은 완료한 run을 기반으로 스윕할 값을 추측합니다. 시도할 하이퍼파라미터 범위를 지정하도록 설정을 편집합니다. 스윕을 시작하면 호스팅된 W&B 스윕 서버에서 새 프로세스가 시작됩니다. 이 중앙 집중식 서비스는 트레이닝 작업을 실행하는 머신인 에이전트를 조정합니다.

3. 에이전트 시작

다음으로, 로컬에서 에이전트를 시작합니다. 작업을 분산하고 스윕 작업을 더 빨리 완료하려면 최대 20개의 에이전트를 서로 다른 머신에서 병렬로 시작할 수 있습니다. 에이전트는 다음에 시도할 파라미터 세트를 출력합니다.

이제 스윕을 실행하고 있습니다. 다음 이미지는 예제 스윕 작업이 실행되는 동안 대시보드가 어떻게 보이는지 보여줍니다. 예제 프로젝트 페이지 보기 →

기존 run으로 새 스윕 시드하기

이전에 기록한 기존 run을 사용하여 새 스윕을 시작합니다.

  1. 프로젝트 테이블을 엽니다.
  2. 테이블 왼쪽에서 확인란을 사용하여 사용할 run을 선택합니다.
  3. 드롭다운을 클릭하여 새 스윕을 만듭니다.

이제 스윕이 서버에 설정됩니다. run 실행을 시작하려면 하나 이상의 에이전트를 시작하기만 하면 됩니다.

2.3 - Tables

데이터셋을 반복하고 모델 예측값을 이해합니다

W&B Tables를 사용하여 표 형식 데이터를 시각화하고 쿼리합니다. 예를 들면 다음과 같습니다.

  • 동일한 테스트 세트에서 다양한 모델의 성능을 비교합니다.
  • 데이터에서 패턴을 식별합니다.
  • 샘플 모델 예측값을 시각적으로 살펴봅니다.
  • 일반적으로 잘못 분류된 예제를 찾기 위해 쿼리합니다.

위 이미지는 시멘틱 세분화 및 사용자 정의 메트릭이 있는 테이블을 보여줍니다. W&B ML Course의 샘플 프로젝트에서 이 테이블을 볼 수 있습니다.

작동 방식

Table은 각 열에 단일 유형의 데이터가 있는 2차원 데이터 그리드입니다. Tables는 기본 및 숫자 유형은 물론 중첩 목록, 딕셔너리 및 다양한 미디어 유형을 지원합니다.

Table 기록

몇 줄의 코드로 table을 기록합니다.

  • wandb.init(): 결과를 추적하기 위해 run을 생성합니다.
  • wandb.Table(): 새 table 오브젝트를 생성합니다.
    • columns: 열 이름을 설정합니다.
    • data: table의 내용을 설정합니다.
  • run.log(): table을 기록하여 W&B에 저장합니다.
import wandb

run = wandb.init(project="table-test")
my_table = wandb.Table(columns=["a", "b"], data=[["a1", "b1"], ["a2", "b2"]])
run.log({"Table Name": my_table})

시작 방법

  • 퀵스타트: 데이터 table 기록, 데이터 시각화 및 데이터 쿼리에 대해 알아봅니다.
  • Tables Gallery: Tables의 유스 케이스 예시를 확인하세요.

2.3.1 - Tutorial: Log tables, visualize and query data

W&B Tables를 사용하는 방법을 이 5분 퀵스타트 에서 알아보세요.

다음 퀵스타트는 데이터 테이블을 기록하고, 데이터를 시각화하고, 데이터를 쿼리하는 방법을 보여줍니다.

아래 버튼을 선택하여 MNIST 데이터에 대한 PyTorch 퀵스타트 예제 프로젝트를 사용해 보세요.

1. 테이블 기록

W&B로 테이블을 기록합니다. 새 테이블을 만들거나 Pandas Dataframe을 전달할 수 있습니다.

새로운 Table을 생성하고 기록하려면 다음을 사용합니다.

  • wandb.init(): 결과를 추적하기 위해 run을 생성합니다.
  • wandb.Table(): 새로운 테이블 오브젝트를 생성합니다.
    • columns: 열 이름을 설정합니다.
    • data: 각 행의 내용을 설정합니다.
  • run.log(): 테이블을 기록하여 W&B에 저장합니다.

예시:

import wandb

run = wandb.init(project="table-test")
# 새로운 테이블을 생성하고 기록합니다.
my_table = wandb.Table(columns=["a", "b"], data=[["a1", "b1"], ["a2", "b2"]])
run.log({"Table Name": my_table})

Pandas Dataframe을 wandb.Table()에 전달하여 새 테이블을 생성합니다.

import wandb
import pandas as pd

df = pd.read_csv("my_data.csv")

run = wandb.init(project="df-table")
my_table = wandb.Table(dataframe=df)
wandb.log({"Table Name": my_table})

지원되는 데이터 유형에 대한 자세한 내용은 W&B API Reference Guide의 wandb.Table을 참조하세요.

2. 프로젝트 워크스페이스에서 테이블 시각화

워크스페이스에서 결과 테이블을 봅니다.

  1. W&B 앱에서 프로젝트로 이동합니다.
  2. 프로젝트 워크스페이스에서 run 이름을 선택합니다. 각 고유한 테이블 키에 대해 새로운 패널이 추가됩니다.

이 예제에서 my_table"Table Name" 키 아래에 기록됩니다.

3. 모델 버전 간 비교

여러 W&B Runs에서 샘플 테이블을 기록하고 프로젝트 워크스페이스에서 결과를 비교합니다. 이 example workspace에서는 동일한 테이블에서 여러 다른 버전의 행을 결합하는 방법을 보여줍니다.

테이블 필터, 정렬 및 그룹화 기능을 사용하여 모델 결과를 탐색하고 평가합니다.

2.3.2 - Visualize and analyze tables

W&B Tables를 시각화하고 분석하세요.

W&B Tables를 사용자 정의하여 기계 학습 모델의 성능에 대한 질문에 답변하고, 데이터를 분석하는 등의 작업을 수행할 수 있습니다.

데이터를 대화형으로 탐색하여 다음을 수행할 수 있습니다.

  • 모델, 에포크 또는 개별 예제 간의 변경 사항을 정확하게 비교합니다.
  • 데이터의 상위 수준 패턴을 이해합니다.
  • 시각적 샘플을 통해 통찰력을 포착하고 전달합니다.

두 개의 테이블을 보는 방법

병합된 뷰 또는 나란히 보기로 두 개의 테이블을 비교합니다. 예를 들어 아래 이미지는 MNIST 데이터의 테이블 비교를 보여줍니다.

왼쪽: 1 트레이닝 에포크 후의 오류, 오른쪽: 5 에포크 후의 오류

다음 단계에 따라 두 개의 테이블을 비교합니다.

  1. W&B App에서 프로젝트로 이동합니다.
  2. 왼쪽 패널에서 Artifacts 아이콘을 선택합니다.
  3. 아티팩트 버전을 선택합니다.

다음 이미지에서는 5개의 에포크 각각 이후에 MNIST 검증 데이터에 대한 모델의 예측을 보여줍니다(여기에서 대화형 예제 보기).

'예측'을 클릭하여 테이블을 봅니다.
  1. 사이드바에서 비교하려는 두 번째 아티팩트 버전 위로 마우스를 가져간 다음 나타나는 비교를 클릭합니다. 예를 들어 아래 이미지에서는 5 에포크 트레이닝 후 동일한 모델에서 만든 MNIST 예측과 비교하기 위해 “v4"로 레이블이 지정된 버전을 선택합니다.
1 에포크 (여기 표시됨) 대 5 에포크 트레이닝 후 모델 예측을 비교할 준비 중 (v4)

병합된 뷰

처음에는 두 테이블이 함께 병합되어 표시됩니다. 첫 번째 선택한 테이블은 인덱스 0과 파란색 강조 표시가 있고 두 번째 테이블은 인덱스 1과 노란색 강조 표시가 있습니다. 여기에서 병합된 테이블의 라이브 예제를 봅니다.

병합된 뷰에서 숫자 열은 기본적으로 히스토그램으로 표시됩니다.

병합된 뷰에서 다음을 수행할 수 있습니다.

  • 조인 키 선택: 왼쪽 상단의 드롭다운을 사용하여 두 테이블의 조인 키로 사용할 열을 설정합니다. 일반적으로 이것은 데이터셋의 특정 예제의 파일 이름 또는 생성된 샘플의 증가하는 인덱스와 같은 각 행의 고유 식별자입니다. 현재 모든 열을 선택할 수 있으므로 읽을 수 없는 테이블과 느린 쿼리가 발생할 수 있습니다.
  • 조인 대신 연결: 이 드롭다운에서 “모든 테이블 연결"을 선택하여 열을 조인하는 대신 두 테이블의 _모든 행을 결합_하여 더 큰 Table 하나로 만듭니다.
  • 각 Table을 명시적으로 참조: 필터 표현식에서 0, 1 및 *를 사용하여 하나 또는 두 테이블 인스턴스의 열을 명시적으로 지정합니다.
  • 자세한 숫자 차이를 히스토그램으로 시각화: 모든 셀의 값을 한눈에 비교합니다.

나란히 보기

두 개의 테이블을 나란히 보려면 첫 번째 드롭다운을 “테이블 병합: 테이블"에서 “목록: 테이블"로 변경한 다음 “페이지 크기"를 각각 업데이트합니다. 여기서 첫 번째 선택한 Table은 왼쪽에 있고 두 번째 Table은 오른쪽에 있습니다. 또한 “수직” 확인란을 클릭하여 이러한 테이블을 수직으로 비교할 수도 있습니다.

나란히 보기에서 테이블 행은 서로 독립적입니다.
  • 테이블을 한눈에 비교: 모든 작업 (정렬, 필터, 그룹)을 두 테이블에 동시에 적용하고 변경 사항이나 차이점을 빠르게 찾습니다. 예를 들어 추측별로 그룹화된 잘못된 예측, 가장 어려운 네거티브 전체, 실제 레이블별 신뢰도 점수 분포 등을 봅니다.
  • 두 개의 테이블을 독립적으로 탐색: 관심 있는 측면/행을 스크롤하고 집중합니다.

Artifacts 비교

또한 시간 경과에 따른 테이블 비교 또는 모델 변형 비교를 수행할 수 있습니다.

시간 경과에 따른 테이블 비교

트레이닝 시간 동안 모델 성능을 분석하기 위해 트레이닝의 의미 있는 각 단계에 대한 아티팩트에서 테이블을 기록합니다. 예를 들어 모든 검증 단계가 끝날 때, 50 에포크의 트레이닝마다 또는 파이프라인에 적합한 빈도로 테이블을 기록할 수 있습니다. 나란히 보기를 사용하여 모델 예측의 변경 사항을 시각화합니다.

각 레이블에 대해 모델은 1 (L)보다 5 (R) 트레이닝 에포크 후에 더 적은 오류를 만듭니다.

트레이닝 시간 동안 예측을 시각화하는 방법에 대한 자세한 내용은 이 Report와 이 대화형 노트북 예제를 참조하십시오.

모델 변형 간 테이블 비교

서로 다른 구성(하이퍼파라미터, 기본 아키텍처 등)에서 모델 성능을 분석하기 위해 두 개의 다른 모델에 대해 동일한 단계에서 기록된 두 개의 아티팩트 버전을 비교합니다.

예를 들어 baseline과 새 모델 변형 2x_layers_2x_lr 간의 예측을 비교합니다. 여기서 첫 번째 컨볼루션 레이어는 32에서 64로, 두 번째 레이어는 128에서 256으로, 학습률은 0.001에서 0.002로 두 배가 됩니다. 이 라이브 예제에서 나란히 보기를 사용하고 1 (왼쪽 탭) 대 5 트레이닝 에포크 (오른쪽 탭) 후에 잘못된 예측으로 필터링합니다.

1 에포크 후 성능이 혼합됩니다. 일부 클래스의 경우 정밀도가 향상되고 다른 클래스의 경우 악화됩니다.
5 에포크 후 '더블' 변형이 베이스라인을 따라잡고 있습니다.

뷰 저장

run 워크스페이스, 프로젝트 워크스페이스 또는 Report에서 상호 작용하는 테이블은 뷰 상태를 자동으로 저장합니다. 테이블 작업을 적용한 다음 브라우저를 닫으면 테이블은 다음에 테이블로 이동할 때 마지막으로 본 구성을 유지합니다.

특정 상태의 워크스페이스에서 테이블을 저장하려면 W&B Report로 내보냅니다. 테이블을 Report로 내보내려면:

  1. 워크스페이스 시각화 패널의 오른쪽 상단 모서리에 있는 케밥 아이콘 (세 개의 수직 점)을 선택합니다.
  2. 패널 공유 또는 Report에 추가를 선택합니다.
패널 공유는 새 Report를 만들고 Report에 추가하면 기존 Report에 추가할 수 있습니다.

예제

다음 Reports는 W&B Tables의 다양한 유스 케이스를 강조합니다.

2.3.3 - Example tables

W&B Tables 예시

다음 섹션에서는 테이블을 사용할 수 있는 몇 가지 방법을 중점적으로 설명합니다.

데이터 보기

모델 트레이닝 또는 평가 중에 메트릭과 풍부한 미디어를 기록한 다음, 클라우드 또는 호스팅 인스턴스에 동기화된 영구 데이터베이스에서 결과를 시각화합니다.

데이터 예제를 찾아보고 개수와 분포를 확인하세요.

예를 들어, 사진 데이터셋의 균형 잡힌 분할을 보여주는 테이블을 확인해 보세요.

데이터 대화형으로 탐색하기

테이블을 보고, 정렬하고, 필터링하고, 그룹화하고, 조인하고, 쿼리하여 데이터와 모델 성능을 이해합니다. 정적 파일을 찾아보거나 분석 스크립트를 다시 실행할 필요가 없습니다.

원본 노래와 합성 버전(음색 전송 포함)을 들어보세요.

예를 들어, 스타일이 전송된 오디오에 대한 이 report를 참조하세요.

모델 버전 비교

다양한 트레이닝 에포크, 데이터셋, 하이퍼파라미터 선택, 모델 아키텍처 등에서 결과를 빠르게 비교합니다.

세분화된 차이점을 확인하세요. 왼쪽 모델은 일부 빨간색 보도를 감지하지만 오른쪽 모델은 감지하지 못합니다.

예를 들어, 동일한 테스트 이미지에서 두 모델을 비교하는 테이블을 참조하세요.

모든 세부 사항을 추적하고 더 큰 그림 보기

특정 단계에서 특정 예측을 시각화하기 위해 확대합니다. 집계 통계를 보고, 오류 패턴을 식별하고, 개선 기회를 파악하기 위해 축소합니다. 이 tool은 단일 모델 트레이닝의 단계를 비교하거나 서로 다른 모델 버전의 결과를 비교하는 데 사용할 수 있습니다.

예를 들어, MNIST 데이터셋에서 1에포크 후, 5에포크 후의 결과를 분석하는 예제 테이블을 참조하세요.

W&B Tables를 사용한 예제 Projects

다음은 W&B Tables를 사용하는 실제 W&B Projects를 강조합니다.

이미지 분류

이 report를 읽고, 이 colab을 따르거나, artifacts 컨텍스트를 탐색하여 CNN이 iNaturalist 사진에서 10가지 유형의 생물(식물, 새, 곤충 등)을 식별하는 방법을 확인하세요.

서로 다른 두 모델의 예측에서 실제 레이블의 분포를 비교합니다.

오디오

음색 전송에 대한 이 report에서 오디오 테이블과 상호 작용합니다. 녹음된 고래 노래와 바이올린이나 트럼펫과 같은 악기로 동일한 멜로디를 합성한 연주를 비교할 수 있습니다. 또한 이 colab을 사용하여 자신의 노래를 녹음하고 W&B에서 합성 버전을 탐색할 수도 있습니다.

텍스트

트레이닝 데이터 또는 생성된 출력에서 텍스트 샘플을 찾아보고, 관련 필드별로 동적으로 그룹화하고, 모델 변형 또는 실험 설정에서 평가를 조정합니다. 텍스트를 Markdown으로 렌더링하거나 시각적 차이 모드를 사용하여 텍스트를 비교합니다. 이 report에서 Shakespeare를 생성하기 위한 간단한 문자 기반 RNN을 탐색합니다.

숨겨진 레이어의 크기를 두 배로 늘리면 좀 더 창의적인 프롬프트 완성이 가능합니다.

비디오

트레이닝 중에 기록된 비디오를 찾아보고 집계하여 모델을 이해합니다. 다음은 부작용을 최소화하려는 RL 에이전트에 대한 SafeLife 벤치마크를 사용하는 초기 예제입니다.

성공적인 에이전트를 쉽게 찾아보세요.

표 형식 데이터

버전 관리 및 중복 제거를 통해 표 형식 데이터를 분할하고 사전 처리하는 방법에 대한 report를 봅니다.

테이블과 Artifacts는 함께 작동하여 데이터셋 반복을 버전 제어, 레이블 지정 및 중복 제거합니다.

모델 변형 비교 (시멘틱 세분화)

시멘틱 세분화에 대한 테이블을 기록하고 서로 다른 모델을 비교하는 대화형 노트북라이브 예제입니다. 이 테이블에서 자신의 쿼리를 시도해 보세요.

동일한 테스트 세트에서 두 모델에서 가장 적합한 예측을 찾으세요.

트레이닝 시간 경과에 따른 개선 분석

시간 경과에 따른 예측 시각화 방법에 대한 자세한 report와 함께 제공되는 대화형 노트북입니다.

2.3.4 - Export table data

테이블에서 데이터를 내보내는 방법.

W&B Artifacts와 마찬가지로, Tables는 쉬운 데이터 내보내기를 위해 pandas 데이터프레임으로 변환할 수 있습니다.

tableartifact로 변환하기

먼저, 테이블을 아티팩트로 변환해야 합니다. artifact.get(table, "table_name")을 사용하여 가장 쉽게 수행할 수 있습니다.

# 새로운 테이블을 생성하고 로그합니다.
with wandb.init() as r:
    artifact = wandb.Artifact("my_dataset", type="dataset")
    table = wandb.Table(
        columns=["a", "b", "c"], data=[(i, i * 2, 2**i) for i in range(10)]
    )
    artifact.add(table, "my_table")
    wandb.log_artifact(artifact)

# 생성된 아티팩트를 사용하여 생성된 테이블을 검색합니다.
with wandb.init() as r:
    artifact = r.use_artifact("my_dataset:latest")
    table = artifact.get("my_table")

artifact를 Dataframe으로 변환하기

다음으로, 테이블을 데이터프레임으로 변환합니다.

# 이전 코드 예제에서 계속됩니다.
df = table.get_dataframe()

데이터 내보내기

이제 데이터프레임이 지원하는 모든 방법을 사용하여 내보낼 수 있습니다.

# 테이블 데이터를 .csv로 변환
df.to_csv("example.csv", encoding="utf-8")

다음 단계

2.4 - W&B App UI Reference

2.4.1 - Panels

workspace 패널 시각화를 사용하여 키별로 기록된 데이터를 탐색하고, 하이퍼파라미터와 출력 메트릭 간의 관계를 시각화하는 등의 작업을 수행할 수 있습니다.

workspace 모드

W&B 프로젝트는 두 가지 다른 workspace 모드를 지원합니다. workspace 이름 옆의 아이콘은 해당 모드를 나타냅니다.

아이콘 workspace 모드
automated workspace icon 자동화된 workspaces는 프로젝트에 기록된 모든 키에 대한 패널을 자동으로 생성합니다. 자동 workspace를 선택하는 경우:
  • 프로젝트에 사용 가능한 모든 데이터를 시각화하여 빠르게 시작합니다.
  • 더 적은 키를 기록하는 소규모 프로젝트에 적합합니다.
  • 보다 광범위한 분석에 적합합니다.
자동 workspace에서 패널을 삭제한 경우 빠른 추가를 사용하여 다시 만들 수 있습니다.
manual workspace icon 수동 workspaces는 빈 상태로 시작하여 사용자가 의도적으로 추가한 패널만 표시합니다. 수동 workspace를 선택하는 경우:
  • 프로젝트에 기록된 키의 일부에만 주로 관심이 있는 경우.
  • 보다 집중적인 분석을 위해.
  • workspace 성능을 향상시키기 위해 덜 유용한 패널의 로딩을 방지합니다.
빠른 추가를 사용하여 유용한 시각화로 수동 workspace 및 해당 섹션을 빠르게 채울 수 있습니다.

workspace가 패널을 생성하는 방식을 변경하려면 workspace 재설정을 수행합니다.

workspace 재설정

workspace를 재설정하려면:

  1. workspace 상단에서 액션 메뉴 ...를 클릭합니다.
  2. workspace 재설정을 클릭합니다.

workspace 레이아웃 구성

workspace 레이아웃을 구성하려면 workspace 상단의 설정을 클릭한 다음 workspace 레이아웃을 클릭합니다.

  • 검색 중에 비어 있는 섹션 숨기기(기본적으로 켜져 있음)
  • 패널을 알파벳순으로 정렬(기본적으로 꺼져 있음)
  • 섹션 구성(기본적으로 첫 번째 접두사로 그룹화됨). 이 설정을 수정하려면:
    1. 자물쇠 아이콘을 클릭합니다.
    2. 섹션 내에서 패널을 그룹화하는 방법을 선택합니다.

workspace의 라인 플롯에 대한 기본값을 구성하려면 라인 플롯을 참조하십시오.

섹션 레이아웃 구성

섹션의 레이아웃을 구성하려면 해당 기어 아이콘을 클릭한 다음 표시 기본 설정을 클릭합니다.

  • 툴팁에서 색상이 지정된 run 이름 켜거나 끄기(기본적으로 켜져 있음)
  • 컴패니언 차트 툴팁에서 강조 표시된 run만 표시(기본적으로 꺼져 있음)
  • 툴팁에 표시되는 run 수(단일 run, 모든 runs 또는 기본값)
  • 기본 차트 툴팁에 전체 run 이름 표시(기본적으로 꺼져 있음)

전체 화면 모드에서 패널 보기

전체 화면 모드에서 run 선택기가 표시되고 패널은 그렇지 않은 경우 1000개의 버킷이 아닌 10,000개의 버킷이 있는 완전한 충실도 샘플링 모드 플롯을 사용합니다.

전체 화면 모드에서 패널을 보려면:

  1. 패널 위로 마우스를 가져갑니다.
  2. 패널의 액션 메뉴 ...를 클릭한 다음 뷰파인더 또는 정사각형의 네 모서리를 보여주는 윤곽선처럼 보이는 전체 화면 버튼을 클릭합니다. 패널 전체 화면 보기
  3. 전체 화면 모드에서 보고 있는 동안 패널을 공유하면 결과 링크가 자동으로 전체 화면 모드로 열립니다.

전체 화면 모드에서 패널의 workspace로 돌아가려면 페이지 상단의 왼쪽 화살표를 클릭합니다.

패널 추가

이 섹션에서는 workspace에 패널을 추가하는 다양한 방법을 보여줍니다.

패널 수동으로 추가

workspace에 패널을 한 번에 하나씩, 전체적으로 또는 섹션 수준에서 추가합니다.

  1. 패널을 전체적으로 추가하려면 패널 검색 필드 근처의 컨트롤 바에서 패널 추가를 클릭합니다.
  2. 대신 섹션에 직접 패널을 추가하려면 섹션의 액션 ... 메뉴를 클릭한 다음 + 패널 추가를 클릭합니다.
  3. 추가할 패널 유형(예: 차트)을 선택합니다. 패널의 구성 세부 정보가 기본값으로 선택되어 나타납니다.
  4. 선택적으로 패널 및 해당 표시 기본 설정을 사용자 정의합니다. 구성 옵션은 선택한 패널 유형에 따라 다릅니다. 각 유형의 패널에 대한 옵션에 대한 자세한 내용은 아래의 관련 섹션(예: 라인 플롯 또는 막대 플롯)을 참조하십시오.
  5. 적용을 클릭합니다.
패널 추가 데모

패널 빠르게 추가

빠른 추가를 사용하여 선택한 각 키에 대해 전체적으로 또는 섹션 수준에서 자동으로 패널을 추가합니다.

  1. 빠른 추가를 사용하여 패널을 전체적으로 추가하려면 패널 검색 필드 근처의 컨트롤 바에서 패널 추가를 클릭한 다음 빠른 추가를 클릭합니다.
  2. 빠른 추가를 사용하여 패널을 섹션에 직접 추가하려면 섹션의 액션 ... 메뉴를 클릭하고 패널 추가를 클릭한 다음 빠른 추가를 클릭합니다.
  3. 패널 목록이 나타납니다. 확인 표시가 있는 각 패널은 이미 workspace에 포함되어 있습니다.
    • 사용 가능한 모든 패널을 추가하려면 목록 상단의 패널 개 추가 버튼을 클릭합니다. 빠른 추가 목록이 닫히고 새 패널이 workspace에 표시됩니다.
    • 목록에서 개별 패널을 추가하려면 패널의 행 위로 마우스를 가져간 다음 추가를 클릭합니다. 추가할 각 패널에 대해 이 단계를 반복한 다음 오른쪽 상단의 X를 클릭하여 빠른 추가 목록을 닫습니다. 새 패널이 workspace에 표시됩니다.
  4. 선택적으로 패널의 설정을 사용자 정의합니다.

패널 공유

이 섹션에서는 링크를 사용하여 패널을 공유하는 방법을 보여줍니다.

링크를 사용하여 패널을 공유하려면 다음 중 하나를 수행할 수 있습니다.

  • 전체 화면 모드에서 패널을 보는 동안 브라우저에서 URL을 복사합니다.
  • 액션 메뉴 ...를 클릭하고 패널 URL 복사를 선택합니다.

해당 링크를 사용자 또는 팀과 공유합니다. 링크에 액세스하면 패널이 전체 화면 모드로 열립니다.

전체 화면 모드에서 패널의 workspace로 돌아가려면 페이지 상단의 왼쪽 화살표를 클릭합니다.

패널의 전체 화면 링크를 프로그래밍 방식으로 구성

자동화 생성와 같은 특정 상황에서는 패널의 전체 화면 URL을 포함하는 것이 유용할 수 있습니다. 이 섹션에서는 패널의 전체 화면 URL 형식을 보여줍니다. 다음 예제에서 괄호 안의 entity, project, 패널 및 섹션 이름을 바꿉니다.

https://wandb.ai/<ENTITY_NAME>/<PROJECT_NAME>?panelDisplayName=<PANEL_NAME>&panelSectionName=<SECTON_NAME>

동일한 섹션에 이름이 같은 여러 패널이 있는 경우 이 URL은 해당 이름의 첫 번째 패널을 엽니다.

소셜 미디어에 패널 포함 또는 공유

웹 사이트에 패널을 포함하거나 소셜 미디어에 공유하려면 링크가 있는 모든 사람이 패널을 볼 수 있어야 합니다. 프로젝트가 비공개인 경우 프로젝트의 멤버만 패널을 볼 수 있습니다. 프로젝트가 공개인 경우 링크가 있는 모든 사람이 패널을 볼 수 있습니다.

소셜 미디어에 패널을 포함하거나 공유하는 코드를 얻으려면:

  1. workspace에서 패널 위로 마우스를 가져간 다음 해당 액션 메뉴 ...를 클릭합니다.
  2. 공유 탭을 클릭합니다.
  3. 초대된 사람만 액세스할 수 있음링크가 있는 모든 사람이 볼 수 있음으로 변경합니다. 그렇지 않으면 다음 단계의 선택 사항을 사용할 수 없습니다.
  4. 트위터에 공유, 레딧에 공유, 링크드인에 공유 또는 임베드 링크 복사를 선택합니다.

패널 리포트 이메일 보내기

단일 패널을 독립 실행형 리포트로 이메일로 보내려면:

  1. 패널 위로 마우스를 가져간 다음 패널의 액션 메뉴 ...를 클릭합니다.
  2. 리포트에서 패널 공유를 클릭합니다.
  3. 초대 탭을 선택합니다.
  4. 이메일 주소 또는 사용자 이름을 입력합니다.
  5. 선택적으로 볼 수 있음편집할 수 있음으로 변경합니다.
  6. 초대를 클릭합니다. W&B는 공유하는 패널만 포함된 리포트로 연결되는 클릭 가능한 링크가 있는 이메일을 사용자에게 보냅니다.

패널 공유와 달리 수신자는 이 리포트에서 workspace로 이동할 수 없습니다.

패널 관리

패널 편집

패널을 편집하려면:

  1. 해당 연필 아이콘을 클릭합니다.
  2. 패널의 설정을 수정합니다.
  3. 패널을 다른 유형으로 변경하려면 유형을 선택한 다음 설정을 구성합니다.
  4. 적용을 클릭합니다.

패널 이동

패널을 다른 섹션으로 이동하려면 패널의 드래그 핸들을 사용할 수 있습니다. 대신 목록에서 새 섹션을 선택하려면:

  1. 필요한 경우 마지막 섹션 뒤에 섹션 추가를 클릭하여 새 섹션을 만듭니다.
  2. 패널의 액션 ... 메뉴를 클릭합니다.
  3. 이동을 클릭한 다음 새 섹션을 선택합니다.

드래그 핸들을 사용하여 섹션 내에서 패널을 재정렬할 수도 있습니다.

패널 복제

패널을 복제하려면:

  1. 패널 상단에서 액션 ... 메뉴를 클릭합니다.
  2. 복제를 클릭합니다.

원하는 경우 복제된 패널을 사용자 정의하거나 이동할 수 있습니다.

패널 제거

패널을 제거하려면:

  1. 패널 위로 마우스를 가져갑니다.
  2. 액션 ... 메뉴를 선택합니다.
  3. 삭제를 클릭합니다.

수동 workspace에서 모든 패널을 제거하려면 해당 액션 ... 메뉴를 클릭한 다음 모든 패널 지우기를 클릭합니다.

자동 또는 수동 workspace에서 모든 패널을 제거하려면 workspace를 재설정할 수 있습니다. 자동을 선택하여 기본 패널 세트로 시작하거나 수동을 선택하여 패널이 없는 빈 workspace로 시작합니다.

섹션 관리

기본적으로 workspace의 섹션은 키의 로깅 계층 구조를 반영합니다. 그러나 수동 workspace에서는 패널을 추가하기 시작한 후에만 섹션이 나타납니다.

섹션 추가

섹션을 추가하려면 마지막 섹션 뒤에 섹션 추가를 클릭합니다.

기존 섹션 앞이나 뒤에 새 섹션을 추가하려면 섹션의 액션 ... 메뉴를 클릭한 다음 아래에 새 섹션 또는 위에 새 섹션을 클릭할 수 있습니다.

섹션의 패널 관리

많은 수의 패널이 있는 섹션은 표준 그리드 레이아웃을 사용하는 경우 기본적으로 페이지로 나뉩니다. 페이지당 패널의 기본 수는 패널의 구성과 섹션에 있는 패널의 크기에 따라 다릅니다.

  1. 섹션에서 사용하는 레이아웃을 확인하려면 섹션의 액션 ... 메뉴를 클릭합니다. 섹션의 레이아웃을 변경하려면 레이아웃 그리드 섹션에서 표준 그리드 또는 사용자 정의 그리드를 선택합니다.
  2. 패널의 크기를 조정하려면 패널 위로 마우스를 가져가 드래그 핸들을 클릭하고 드래그하여 패널의 크기를 조정합니다.
  • 섹션에서 표준 그리드를 사용하는 경우 하나의 패널 크기를 조정하면 섹션의 모든 패널 크기가 조정됩니다.
  • 섹션에서 사용자 정의 그리드를 사용하는 경우 각 패널의 크기를 개별적으로 사용자 정의할 수 있습니다.
  1. 섹션이 페이지로 나뉘면 페이지에 표시할 패널 수를 사용자 정의할 수 있습니다.
  2. 섹션 상단에서 1에서 개 중 를 클릭합니다. 여기서 <X>는 보이는 패널의 수이고 <Y>는 총 패널 수입니다.
  3. 페이지당 표시할 패널 수를 최대 100개까지 선택합니다.
  4. 많은 수의 패널이 있는 경우 모든 패널을 표시하려면 사용자 정의 그리드 레이아웃을 사용하도록 패널을 구성합니다. 섹션의 액션 ... 메뉴를 클릭한 다음 레이아웃 그리드 섹션에서 사용자 정의 그리드를 선택합니다.
  5. 섹션에서 패널을 삭제하려면:
  6. 패널 위로 마우스를 가져간 다음 해당 액션 ... 메뉴를 클릭합니다.
  7. 삭제를 클릭합니다.

workspace를 자동 workspace로 재설정하면 삭제된 모든 패널이 다시 나타납니다.

섹션 이름 바꾸기

섹션 이름을 바꾸려면 해당 액션 ... 메뉴를 클릭한 다음 섹션 이름 바꾸기를 클릭합니다.

섹션 삭제

섹션을 삭제하려면 해당 ... 메뉴를 클릭한 다음 섹션 삭제를 클릭합니다. 이렇게 하면 섹션과 해당 패널이 제거됩니다.

2.4.1.1 - Line plots

메트릭 을 시각화하고, 축을 사용자 정의하고, 플롯에서 여러 라인을 비교합니다.

라인 플롯은 wandb.log() 로 시간에 따른 메트릭을 플롯할 때 기본적으로 표시됩니다. 차트 설정을 사용하여 동일한 플롯에서 여러 라인을 비교하고, 사용자 정의 축을 계산하고, 레이블 이름을 바꿀 수 있습니다.

라인 플롯 설정 편집

이 섹션에서는 개별 라인 플롯 패널, 섹션의 모든 라인 플롯 패널 또는 워크스페이스의 모든 라인 플롯 패널에 대한 설정을 편집하는 방법을 보여줍니다.

개별 라인 플롯

라인 플롯의 개별 설정은 섹션 또는 워크스페이스에 대한 라인 플롯 설정을 재정의합니다. 라인 플롯을 사용자 정의하려면:

  1. 마우스를 패널 위로 이동한 다음 기어 아이콘을 클릭합니다.
  2. 나타나는 모달 내에서 탭을 선택하여 설정을 편집합니다.
  3. 적용을 클릭합니다.

라인 플롯 설정

라인 플롯에 대해 이러한 설정을 구성할 수 있습니다.

날짜: 플롯의 데이터 표시 세부 정보를 구성합니다.

  • X: X축에 사용할 값을 선택합니다 (기본값은 Step). x축을 Relative Time으로 변경하거나 W&B로 기록하는 값을 기반으로 사용자 정의 축을 선택할 수 있습니다.
    • Relative Time (Wall) 은 프로세스가 시작된 이후의 시계 시간이므로 run을 시작하고 하루 후에 다시 시작하여 기록한 경우 24시간으로 플롯됩니다.
    • Relative Time (Process) 는 실행 중인 프로세스 내부의 시간이므로 run을 시작하고 10초 동안 실행한 다음 하루 후에 다시 시작하면 해당 지점이 10초로 플롯됩니다.
    • Wall Time은 그래프에서 첫 번째 run이 시작된 이후 경과된 시간 (분) 입니다.
    • Step은 기본적으로 wandb.log()가 호출될 때마다 증가하며 모델에서 기록한 트레이닝 스텝 수를 반영해야 합니다.
  • Y: 시간에 따라 변하는 메트릭 및 하이퍼파라미터를 포함하여 기록된 값에서 하나 이상의 y축을 선택합니다.
  • X축Y축 최소 및 최대값 (선택 사항).
  • 포인트 집계 방식. Random sampling (기본값) 또는 Full fidelity. Sampling을 참조하십시오.
  • Smoothing: 라인 플롯의 Smoothing을 변경합니다. 기본값은 Time weighted EMA입니다. 다른 값으로는 No smoothing, Running averageGaussian이 있습니다.
  • Outliers: 기본 플롯 최소 및 최대 스케일에서 이상값을 제외하도록 스케일을 재조정합니다.
  • 최대 run 또는 그룹 수: 이 숫자를 늘려 라인 플롯에 더 많은 라인을 한 번에 표시합니다. 기본값은 10개의 run입니다. 사용 가능한 run이 10개 이상이지만 차트가 보이는 수를 제한하는 경우 차트 상단에 “Showing first 10 runs"라는 메시지가 표시됩니다.
  • 차트 유형: 라인 플롯, 영역 플롯 및 백분율 영역 플롯 간에 변경합니다.

Grouping: 플롯에서 run을 그룹화하고 집계할지 여부와 방법을 구성합니다.

  • Group by: 열을 선택하면 해당 열에서 동일한 값을 가진 모든 run이 함께 그룹화됩니다.
  • Agg: 집계— 그래프의 라인 값. 옵션은 그룹의 평균, 중앙값, 최소값 및 최대값입니다.

차트: 패널, X축 및 Y축의 제목과 -축을 지정하고 범례를 숨기거나 표시하고 위치를 구성합니다.

범례: 패널의 범례 모양을 사용자 정의합니다 (활성화된 경우).

  • 범례: 플롯의 각 라인에 대한 범례의 필드입니다.
  • 범례 템플릿: 범례에 대한 완전히 사용자 정의 가능한 템플릿을 정의하여 라인 플롯 상단에 표시할 텍스트와 변수 및 마우스를 플롯 위로 이동할 때 나타나는 범례를 정확하게 지정합니다.

Expressions: 사용자 정의 계산된 표현식을 패널에 추가합니다.

  • Y축 표현식: 계산된 메트릭을 그래프에 추가합니다. 기록된 메트릭과 하이퍼파라미터와 같은 구성 값을 사용하여 사용자 정의 라인을 계산할 수 있습니다.
  • X축 표현식: 사용자 정의 표현식을 사용하여 계산된 값을 사용하도록 x축의 스케일을 재조정합니다. 유용한 변수에는 기본 x축에 대한**_step**이 포함되며 요약 값을 참조하는 구문은 ${summary:value}입니다.

섹션의 모든 라인 플롯

섹션의 모든 라인 플롯에 대한 기본 설정을 사용자 정의하려면 라인 플롯에 대한 워크스페이스 설정을 재정의합니다.

  1. 섹션의 기어 아이콘을 클릭하여 설정을 엽니다.
  2. 나타나는 모달 내에서 데이터 또는 표시 기본 설정 탭을 선택하여 섹션의 기본 설정을 구성합니다. 각 데이터 설정에 대한 자세한 내용은 이전 섹션인 개별 라인 플롯을 참조하십시오. 각 표시 기본 설정에 대한 자세한 내용은 섹션 레이아웃 구성을 참조하십시오.

워크스페이스의 모든 라인 플롯

워크스페이스의 모든 라인 플롯에 대한 기본 설정을 사용자 정의하려면:

  1. 워크스페이스의 설정을 클릭합니다. 여기에는 설정 레이블이 있는 기어가 있습니다.
  2. 라인 플롯을 클릭합니다.
  3. 나타나는 모달 내에서 데이터 또는 표시 기본 설정 탭을 선택하여 워크스페이스의 기본 설정을 구성합니다.
    • 데이터 설정에 대한 자세한 내용은 이전 섹션인 개별 라인 플롯을 참조하십시오.

    • 표시 기본 설정 섹션에 대한 자세한 내용은 워크스페이스 표시 기본 설정을 참조하십시오. 워크스페이스 수준에서 라인 플롯에 대한 기본 확대/축소 동작을 구성할 수 있습니다. 이 설정은 일치하는 x축 키가 있는 라인 플롯에서 확대/축소를 동기화할지 여부를 제어합니다. 기본적으로 비활성화되어 있습니다.

플롯에서 평균값 시각화

여러 개의 다른 Experiments가 있고 플롯에서 해당 값의 평균을 보려면 테이블에서 그룹화 기능을 사용할 수 있습니다. run 테이블 위에서 “그룹"을 클릭하고 “모두"를 선택하여 그래프에 평균값을 표시합니다.

평균화하기 전의 그래프 모양은 다음과 같습니다.

다음 이미지는 그룹화된 라인을 사용하여 run에서 평균값을 나타내는 그래프를 보여줍니다.

플롯에서 NaN 값 시각화

wandb.log를 사용하여 라인 플롯에 PyTorch 텐서를 포함한 NaN 값을 플롯할 수도 있습니다. 예:

wandb.log({"test": [..., float("nan"), ...]})

하나의 차트에서 두 개의 메트릭 비교

  1. 페이지 오른쪽 상단에서 패널 추가 버튼을 선택합니다.
  2. 나타나는 왼쪽 패널에서 평가 드롭다운을 확장합니다.
  3. Run comparer를 선택합니다.

라인 플롯의 색상 변경

경우에 따라 run의 기본 색상이 비교에 도움이 되지 않을 수 있습니다. 이를 극복하기 위해 wandb는 색상을 수동으로 변경할 수 있는 두 가지 인스턴스를 제공합니다.

각 run은 초기화 시 기본적으로 임의의 색상이 지정됩니다.

Run에 지정된 임의의 색상

색상 중 하나를 클릭하면 색상 팔레트가 나타나고 여기에서 원하는 색상을 수동으로 선택할 수 있습니다.

색상 팔레트
  1. 설정을 편집할 패널 위로 마우스를 가져갑니다.
  2. 나타나는 연필 아이콘을 선택합니다.
  3. 범례 탭을 선택합니다.

다른 x축에서 시각화

experiment가 소요된 절대 시간을 보거나 experiment가 실행된 날짜를 보려면 x축을 전환할 수 있습니다. 다음은 단계를 상대 시간으로 전환한 다음 벽 시간으로 전환하는 예입니다.

영역 플롯

라인 플롯 설정의 고급 탭에서 다른 플롯 스타일을 클릭하여 영역 플롯 또는 백분율 영역 플롯을 얻습니다.

확대/축소

사각형을 클릭하고 드래그하여 수직 및 수평으로 동시에 확대/축소합니다. 그러면 x축 및 y축 확대/축소가 변경됩니다.

차트 범례 숨기기

이 간단한 토글로 라인 플롯에서 범례를 끕니다.

2.4.1.1.1 - Line plot reference

X축

Selecting X-Axis

W&B.log 로 기록한 값이 항상 숫자로 기록되는 한, 선 그래프의 X축을 원하는 값으로 설정할 수 있습니다.

Y축 변수

wandb.log 로 기록한 값이 숫자, 숫자 배열 또는 숫자 히스토그램인 경우 Y축 변수를 원하는 값으로 설정할 수 있습니다. 변수에 대해 1500개 이상의 포인트를 기록한 경우 W&B 는 1500개 포인트로 샘플링합니다.

X 범위 및 Y 범위

플롯의 X 및 Y의 최대값과 최소값을 변경할 수 있습니다.

X 범위의 기본값은 X축의 최소값에서 최대값까지입니다.

Y 범위의 기본값은 메트릭의 최소값과 0부터 메트릭의 최대값까지입니다.

최대 Runs/그룹

기본적으로 10개의 run 또는 run 그룹만 플롯됩니다. Runs은 run 테이블 또는 run 세트의 맨 위에서 가져오므로 run 테이블 또는 run 세트를 정렬하면 표시되는 run 을 변경할 수 있습니다.

범례

차트의 범례를 제어하여 생성 시간 또는 run 을 생성한 user 와 같은 run 의 모든 config 값과 메타 데이터를 표시할 수 있습니다.

예시:

${run:displayName} - ${config:dropout} 은 각 run 에 대한 범례 이름을 royal-sweep - 0.5 와 같이 만듭니다. 여기서 royal-sweep 은 run 이름이고 0.5dropout 이라는 config 파라미터입니다.

[[ ]] 안에 값을 설정하여 차트 위로 마우스를 가져갈 때 십자선에 특정 포인트 값을 표시할 수 있습니다. 예를 들어 \[\[ $x: $y ($original) ]] 은 “2: 3 (2.9)” 와 같이 표시됩니다.

[[ ]] 내에서 지원되는 값은 다음과 같습니다.

의미
${x} X 값
${y} Y 값 (스무딩 조정 포함)
${original} Y 값 (스무딩 조정 미포함)
${mean} 그룹화된 run 의 평균
${stddev} 그룹화된 run 의 표준 편차
${min} 그룹화된 run 의 최소값
${max} 그룹화된 run 의 최대값
${percent} 합계의 백분율 (누적 영역 차트의 경우)

그룹화

그룹화를 켜서 모든 run 을 집계하거나 개별 변수별로 그룹화할 수 있습니다. 테이블 내에서 그룹화하여 그룹화를 켤 수도 있으며 그룹이 그래프에 자동으로 채워집니다.

스무딩

스무딩 계수를 0과 1 사이로 설정할 수 있습니다. 여기서 0은 스무딩 없음, 1은 최대 스무딩입니다.

이상치 무시

기본 플롯 최소 및 최대 스케일에서 이상치를 제외하도록 플롯의 스케일을 다시 조정합니다. 플롯에 대한 설정의 영향은 플롯의 샘플링 모드에 따라 다릅니다.

  • 임의 샘플링 모드를 사용하는 플롯의 경우 이상치 무시를 활성화하면 5%에서 95%의 포인트만 표시됩니다. 이상치가 표시되더라도 다른 포인트와 다르게 서식이 지정되지는 않습니다.
  • 전체 충실도 모드를 사용하는 플롯의 경우 모든 포인트가 항상 표시되며 각 버킷의 마지막 값으로 압축됩니다. 이상치 무시를 활성화하면 각 버킷의 최소 및 최대 경계가 음영 처리됩니다. 그렇지 않으면 영역이 음영 처리되지 않습니다.

표현식

표현식을 사용하면 1-정확도와 같은 메트릭에서 파생된 값을 플롯할 수 있습니다. 현재 단일 메트릭을 플롯하는 경우에만 작동합니다. 간단한 산술 표현식 +, -, *, / 및 %는 물론 거듭제곱에 대한 **를 수행할 수 있습니다.

플롯 스타일

선 그래프의 스타일을 선택합니다.

선 그래프:

영역 그래프:

백분율 영역 그래프:

2.4.1.1.2 - Point aggregation

Data Visualization 정확도와 성능을 향상시키려면 라인 플롯 내에서 포인트 집계 방법을 사용하세요. 포인트 집계 모드에는 전체 충실도임의 샘플링의 두 가지 유형이 있습니다. W&B는 기본적으로 전체 충실도 모드를 사용합니다.

전체 충실도

전체 충실도 모드를 사용하면 W&B는 데이터 포인트 수를 기반으로 x축을 동적 버킷으로 나눕니다. 그런 다음 라인 플롯에 대한 포인트 집계를 렌더링하는 동안 각 버킷 내의 최소값, 최대값 및 평균값을 계산합니다.

포인트 집계에 전체 충실도 모드를 사용하면 다음과 같은 세 가지 주요 이점이 있습니다.

  • 극단값 및 스파이크 보존: 데이터에서 극단값 및 스파이크를 유지합니다.
  • 최소 및 최대 포인트 렌더링 방법 구성: W&B 앱을 사용하여 극단(최소/최대) 값을 음영 영역으로 표시할지 여부를 대화식으로 결정합니다.
  • 데이터 정확도를 잃지 않고 데이터 탐색: 특정 데이터 포인트를 확대하면 W&B가 x축 버킷 크기를 다시 계산합니다. 이는 정확도를 잃지 않고 데이터를 탐색하는 데 도움이 됩니다. 캐싱은 이전에 계산된 집계를 저장하여 로딩 시간을 줄이는 데 사용되며, 이는 대규모 데이터셋을 탐색할 때 특히 유용합니다.

최소 및 최대 포인트 렌더링 방법 구성

라인 플롯 주위에 음영 영역을 사용하여 최소값과 최대값을 표시하거나 숨깁니다.

다음 이미지는 파란색 라인 플롯을 보여줍니다. 밝은 파란색 음영 영역은 각 버킷의 최소값과 최대값을 나타냅니다.

라인 플롯에서 최소값과 최대값을 렌더링하는 세 가지 방법이 있습니다.

  • 없음: 최소/최대값은 음영 영역으로 표시되지 않습니다. x축 버킷에서 집계된 라인만 표시합니다.
  • 호버 시: 차트 위로 마우스를 가져가면 최소/최대값에 대한 음영 영역이 동적으로 나타납니다. 이 옵션은 뷰를 깔끔하게 유지하면서 범위를 대화식으로 검사할 수 있도록 합니다.
  • 항상: 최소/최대 음영 영역이 차트의 모든 버킷에 대해 일관되게 표시되어 항상 전체 값 범위를 시각화할 수 있습니다. 차트에 시각화된 Runs가 많은 경우 시각적 노이즈가 발생할 수 있습니다.

기본적으로 최소값과 최대값은 음영 영역으로 표시되지 않습니다. 음영 영역 옵션 중 하나를 보려면 다음 단계를 따르세요.

  1. W&B 프로젝트로 이동합니다.
  2. 왼쪽 탭에서 Workspace 아이콘을 선택합니다.
  3. 화면 오른쪽 상단에서 패널 추가 버튼 바로 왼쪽에 있는 기어 아이콘을 선택합니다.
  4. 나타나는 UI 슬라이더에서 라인 플롯을 선택합니다.
  5. 포인트 집계 섹션 내에서 최소/최대값을 음영 영역으로 표시 드롭다운 메뉴에서 호버 시 또는 항상을 선택합니다.
  1. W&B 프로젝트로 이동합니다.
  2. 왼쪽 탭에서 Workspace 아이콘을 선택합니다.
  3. 전체 충실도 모드를 활성화할 라인 플롯 패널을 선택합니다.
  4. 나타나는 모달 내에서 최소/최대값을 음영 영역으로 표시 드롭다운 메뉴에서 호버 시 또는 항상을 선택합니다.

데이터 정확도를 잃지 않고 데이터 탐색

극단값 또는 스파이크와 같은 중요한 포인트를 놓치지 않고 데이터셋의 특정 영역을 분석합니다. 라인 플롯을 확대하면 W&B는 각 버킷 내에서 최소값, 최대값 및 평균값을 계산하는 데 사용되는 버킷 크기를 조정합니다.

W&B는 x축을 기본적으로 1000개의 버킷으로 동적으로 나눕니다. 각 버킷에 대해 W&B는 다음 값을 계산합니다.

  • 최소값: 해당 버킷의 가장 낮은 값입니다.
  • 최대값: 해당 버킷의 가장 높은 값입니다.
  • 평균값: 해당 버킷의 모든 포인트의 평균값입니다.

W&B는 전체 데이터 표현을 보존하고 모든 플롯에 극단값을 포함하는 방식으로 버킷의 값을 플롯합니다. 1,000포인트 이하로 확대하면 전체 충실도 모드는 추가 집계 없이 모든 데이터 포인트를 렌더링합니다.

라인 플롯을 확대하려면 다음 단계를 따르세요.

  1. W&B 프로젝트로 이동합니다.
  2. 왼쪽 탭에서 Workspace 아이콘을 선택합니다.
  3. 필요에 따라 워크스페이스에 라인 플롯 패널을 추가하거나 기존 라인 플롯 패널로 이동합니다.
  4. 클릭하고 드래그하여 확대할 특정 영역을 선택합니다.

임의 샘플링

임의 샘플링은 1500개의 임의로 샘플링된 포인트를 사용하여 라인 플롯을 렌더링합니다. 임의 샘플링은 데이터 포인트 수가 많은 경우 성능상의 이유로 유용합니다.

임의 샘플링 활성화

기본적으로 W&B는 전체 충실도 모드를 사용합니다. 임의 샘플링을 활성화하려면 다음 단계를 따르세요.

  1. W&B 프로젝트로 이동합니다.
  2. 왼쪽 탭에서 Workspace 아이콘을 선택합니다.
  3. 화면 오른쪽 상단에서 패널 추가 버튼 바로 왼쪽에 있는 기어 아이콘을 선택합니다.
  4. 나타나는 UI 슬라이더에서 라인 플롯을 선택합니다.
  5. 포인트 집계 섹션에서 임의 샘플링을 선택합니다.
  1. W&B 프로젝트로 이동합니다.
  2. 왼쪽 탭에서 Workspace 아이콘을 선택합니다.
  3. 임의 샘플링을 활성화할 라인 플롯 패널을 선택합니다.
  4. 나타나는 모달 내에서 포인트 집계 방법 섹션에서 임의 샘플링을 선택합니다.

샘플링되지 않은 데이터에 엑세스

W&B Run API를 사용하여 Run 중에 기록된 메트릭의 전체 기록에 엑세스할 수 있습니다. 다음 예제에서는 특정 Run에서 손실 값을 검색하고 처리하는 방법을 보여줍니다.

# W&B API 초기화
run = api.run("l2k2/examples-numpy-boston/i0wt6xua")

# 'Loss' 메트릭의 기록 검색
history = run.scan_history(keys=["Loss"])

# 기록에서 손실 값 추출
losses = [row["Loss"] for row in history]

2.4.1.1.3 - Smooth line plots

꺾은선 그래프에서 스무딩을 사용하여 노이즈가 많은 데이터의 추세를 확인하세요.

W&B는 세 가지 유형의 평활화를 지원합니다:

대화형 W&B report에서 실시간으로 확인하세요.

지수 이동 평균 (기본값)

지수 평활화는 이전 점의 가중치를 지수적으로 감쇠시켜 시계열 데이터를 평활화하는 기술입니다. 범위는 0에서 1 사이입니다. 배경 정보는 지수 평활화를 참조하세요. 시계열의 초기 값이 0으로 치우치지 않도록 편향 제거 항이 추가되었습니다.

EMA 알고리즘은 선의 점 밀도 (x축 범위 단위당 y 값의 수)를 고려합니다. 이를 통해 특성이 다른 여러 선을 동시에 표시할 때 일관된 평활화가 가능합니다.

다음은 내부 작동 방식에 대한 샘플 코드입니다:

const smoothingWeight = Math.min(Math.sqrt(smoothingParam || 0), 0.999);
let lastY = yValues.length > 0 ? 0 : NaN;
let debiasWeight = 0;

return yValues.map((yPoint, index) => {
  const prevX = index > 0 ? index - 1 : 0;
  // VIEWPORT_SCALE scales the result to the chart's x-axis range
  const changeInX =
    ((xValues[index] - xValues[prevX]) / rangeOfX) * VIEWPORT_SCALE;
  const smoothingWeightAdj = Math.pow(smoothingWeight, changeInX);

  lastY = lastY * smoothingWeightAdj + yPoint;
  debiasWeight = debiasWeight * smoothingWeightAdj + 1;
  return lastY / debiasWeight;
});

에서 어떻게 보이는지 살펴보세요:

가우시안 평활화

가우시안 평활화 (또는 가우시안 커널 평활화)는 점의 가중 평균을 계산하며, 가중치는 평활화 파라미터로 지정된 표준 편차를 갖는 가우시안 분포에 해당합니다. 자세한 내용은 . 평활화된 값은 모든 입력 x 값에 대해 계산됩니다.

TensorBoard의 동작과 일치하는 데 관심이 없다면 가우시안 평활화는 평활화를 위한 좋은 표준 선택입니다. 지수 이동 평균과 달리 점은 값 이전과 이후에 발생하는 점을 기반으로 평활화됩니다.

에서 어떻게 보이는지 살펴보세요:

이동 평균

이동 평균은 주어진 x 값 이전과 이후의 창에서 점의 평균으로 점을 대체하는 평활화 알고리즘입니다. https://en.wikipedia.org/wiki/Moving_average의 “Boxcar Filter"를 참조하세요. 이동 평균에 대해 선택된 파라미터는 Weights and Biases에 이동 평균에서 고려할 점의 수를 알려줍니다.

점이 x축에서 고르지 않게 배치된 경우 가우시안 평활화를 사용하는 것이 좋습니다.

다음 이미지는 이동 앱이 에서 어떻게 보이는지 보여줍니다:

지수 이동 평균 (더 이상 사용되지 않음)

TensorBoard EMA 알고리즘은 x축 단위당 플롯된 점의 수가 일관되지 않은 동일한 차트에서 여러 선을 정확하게 평활화할 수 없으므로 더 이상 사용되지 않습니다.

지수 이동 평균은 TensorBoard의 평활화 알고리즘과 일치하도록 구현됩니다. 범위는 0에서 1 사이입니다. 배경 정보는 지수 평활화를 참조하세요. 시계열의 초기 값이 0으로 치우치지 않도록 편향 제거 항이 추가되었습니다.

다음은 내부 작동 방식에 대한 샘플 코드입니다:

  data.forEach(d => {
    const nextVal = d;
    last = last * smoothingWeight + (1 - smoothingWeight) * nextVal;
    numAccum++;
    debiasWeight = 1.0 - Math.pow(smoothingWeight, numAccum);
    smoothedData.push(last / debiasWeight);

에서 어떻게 보이는지 살펴보세요:

구현 세부 정보

모든 평활화 알고리즘은 샘플링된 데이터에서 실행됩니다. 즉, 1500개 이상의 점을 기록하면 평활화 알고리즘은 서버에서 점을 다운로드한 후에 실행됩니다. 평활화 알고리즘의 의도는 데이터에서 패턴을 빠르게 찾는 데 도움을 주는 것입니다. 많은 수의 기록된 점이 있는 메트릭에 대해 정확한 평활화된 값이 필요한 경우 API를 통해 메트릭을 다운로드하고 자체 평활화 methods를 실행하는 것이 좋습니다.

원본 데이터 숨기기

기본적으로 원본의 평활화되지 않은 데이터가 배경에 희미한 선으로 표시됩니다. 원본 보기 토글을 클릭하여 이 기능을 끄세요.

2.4.1.2 - Bar plots

메트릭을 시각화하고, 축을 사용자 정의하고, 범주형 데이터를 막대로 비교하세요.

막대 그래프는 범주형 데이터를 직사각형 막대로 나타내며, 이 막대는 수직 또는 수평으로 플롯할 수 있습니다. 모든 기록된 값이 길이가 1인 경우 막대 그래프는 기본적으로 wandb.log() 와 함께 표시됩니다.

Plotting Box and horizontal Bar plots in W&B

차트 설정을 사용하여 표시할 최대 Runs 수를 제한하고, 모든 config별로 Runs를 그룹화하고, 레이블 이름을 바꿀 수 있습니다.

막대 그래프 사용자 정의

Box 또는 Violin 플롯을 생성하여 여러 요약 통계를 하나의 차트 유형으로 결합할 수도 있습니다.

  1. Runs 테이블을 통해 Runs를 그룹화합니다.
  2. 워크스페이스에서 ‘패널 추가’를 클릭합니다.
  3. 표준 ‘막대 차트’를 추가하고 플롯할 메트릭을 선택합니다.
  4. ‘그룹화’ 탭에서 ‘box plot’ 또는 ‘Violin’ 등을 선택하여 이러한 스타일 중 하나를 플롯합니다.
Customize Bar Plots

2.4.1.3 - Parallel coordinates

기계 학습 실험 전반에서 결과를 비교하세요.

병렬 좌표 차트는 많은 수의 하이퍼파라미터와 모델 메트릭 간의 관계를 한눈에 요약합니다.

  • Axes: wandb.config 의 다양한 하이퍼파라미터와 wandb.log 의 메트릭.
  • Lines: 각 라인은 단일 run을 나타냅니다. 라인 위에 마우스를 올리면 run에 대한 세부 정보가 담긴 툴팁이 표시됩니다. 현재 필터와 일치하는 모든 라인이 표시되지만, 눈 모양 아이콘을 끄면 라인이 회색으로 표시됩니다.

병렬 좌표 패널 만들기

  1. 워크스페이스 랜딩 페이지로 이동합니다.
  2. 패널 추가를 클릭합니다.
  3. 병렬 좌표를 선택합니다.

패널 설정

패널을 구성하려면 패널 오른쪽 상단에 있는 편집 버튼을 클릭합니다.

  • Tooltip: 마우스 오버 시 각 run에 대한 정보가 담긴 범례가 나타납니다.
  • Titles: 축 제목을 더 읽기 쉽게 편집합니다.
  • Gradient: 원하는 색상 범위로 그레이디언트를 사용자 정의합니다.
  • Log scale: 각 축을 독립적으로 로그 스케일로 보도록 설정할 수 있습니다.
  • Flip axis: 축 방향을 전환합니다. 정확도와 손실을 모두 열로 사용할 때 유용합니다.

라이브 병렬 좌표 패널과 상호 작용하기

2.4.1.4 - Scatter plots

이 페이지에서는 W&B에서 산점도를 사용하는 방법을 보여줍니다.

유스 케이스

산점도를 사용하여 여러 run을 비교하고 실험의 성능을 시각화합니다.

  • 최소, 최대 및 평균값에 대한 선을 플롯합니다.
  • 메타데이터 툴팁을 사용자 정의합니다.
  • 포인트 색상을 제어합니다.
  • 축 범위를 조정합니다.
  • 축에 로그 스케일을 사용합니다.

예시

다음 예시는 몇 주간의 실험에 걸쳐 다양한 model의 검증 정확도를 표시하는 산점도를 보여줍니다. 툴팁에는 배치 크기, 드롭아웃 및 축 값이 포함됩니다. 선은 또한 검증 정확도의 이동 평균을 보여줍니다.

라이브 예시 보기 →

Example of validation accuracy of different models over a couple of weeks of experimentation

산점도 만들기

W&B UI에서 산점도를 만들려면 다음을 수행합니다.

  1. Workspaces 탭으로 이동합니다.
  2. Charts 패널에서 액션 메뉴 ...을 클릭합니다.
  3. 팝업 메뉴에서 Add panels를 선택합니다.
  4. Add panels 메뉴에서 Scatter plot을 선택합니다.
  5. xy 축을 설정하여 보려는 데이터를 플롯합니다. 선택적으로 축의 최대 및 최소 범위를 설정하거나 z 축을 추가합니다.
  6. Apply를 클릭하여 산점도를 만듭니다.
  7. Charts 패널에서 새로운 산점도를 봅니다.

2.4.1.5 - Save and diff code

기본적으로 W&B는 가장 최근의 git 커밋 해시만 저장합니다. 더 많은 코드 기능을 켜면 UI에서 Experiments 간의 코드를 동적으로 비교할 수 있습니다.

wandb 버전 0.8.28부터 W&B는 wandb.init()을 호출하는 메인 트레이닝 파일의 코드를 저장할 수 있습니다.

라이브러리 코드 저장

코드 저장을 활성화하면 W&B는 wandb.init()을 호출한 파일의 코드를 저장합니다. 추가 라이브러리 코드를 저장하려면 다음 세 가지 옵션이 있습니다.

wandb.init()을 호출한 후 wandb.run.log_code(".") 호출

import wandb

wandb.init()
wandb.run.log_code(".")

code_dir이 설정된 settings 오브젝트를 wandb.init에 전달

import wandb

wandb.init(settings=wandb.Settings(code_dir="."))

이렇게 하면 현재 디렉토리와 모든 하위 디렉토리의 모든 파이썬 소스 코드 파일이 artifact로 캡처됩니다. 저장되는 소스 코드 파일의 유형 및 위치를 보다 세밀하게 제어하려면 참조 문서를 참조하세요.

UI에서 코드 저장 설정

프로그래밍 방식으로 코드 저장을 설정하는 것 외에도 W&B 계정 설정에서 이 기능을 토글할 수도 있습니다. 이는 계정과 연결된 모든 Teams에 대해 코드 저장을 활성화합니다.

기본적으로 W&B는 모든 Teams에 대해 코드 저장을 비활성화합니다.

  1. W&B 계정에 로그인합니다.
  2. Settings > Privacy로 이동합니다.
  3. Project and content security에서 Disable default code saving을 켭니다.

코드 비교기

서로 다른 W&B Runs에서 사용된 코드를 비교합니다.

  1. 페이지 오른쪽 상단에서 Add panels 버튼을 선택합니다.
  2. TEXT AND CODE 드롭다운을 확장하고 Code를 선택합니다.

Jupyter 세션 기록

W&B는 Jupyter 노트북 세션에서 실행된 코드의 기록을 저장합니다. Jupyter 내에서 **wandb.init()**을 호출하면 W&B는 현재 세션에서 실행된 코드의 기록이 포함된 Jupyter 노트북을 자동으로 저장하는 훅을 추가합니다.

  1. 코드가 포함된 project 워크스페이스로 이동합니다.
  2. 왼쪽 네비게이션 바에서 Artifacts 탭을 선택합니다.
  3. code artifact를 확장합니다.
  4. Files 탭을 선택합니다.

이렇게 하면 iPython의 display 메소드를 호출하여 생성된 모든 출력과 함께 세션에서 실행된 셀이 표시됩니다. 이를 통해 지정된 Run 내에서 Jupyter 내에서 실행된 코드를 정확히 볼 수 있습니다. 가능한 경우 W&B는 코드 디렉토리에서도 찾을 수 있는 노트북의 최신 버전도 저장합니다.

2.4.1.6 - Parameter importance

모델의 하이퍼파라미터와 출력 메트릭 간의 관계를 시각화합니다.

어떤 하이퍼파라미터가 가장 예측력이 높고 메트릭의 바람직한 값과 상관관계가 높은지 알아보세요.

**상관 관계(Correlation)**는 하이퍼파라미터와 선택한 메트릭 (이 경우 val_loss) 간의 선형 상관 관계입니다. 따라서 상관 관계가 높다는 것은 하이퍼파라미터의 값이 높을 때 메트릭도 더 높은 값을 갖고 그 반대도 마찬가지임을 의미합니다. 상관 관계는 살펴보기에 좋은 메트릭이지만 입력 간의 2차 상호 작용을 포착할 수 없으며 범위가 매우 다른 입력을 비교하는 것이 복잡해질 수 있습니다.

따라서 W&B는 중요도(importance) 메트릭도 계산합니다. W&B는 하이퍼파라미터를 입력으로, 메트릭을 대상 출력으로 사용하여 랜덤 포레스트를 트레이닝하고 랜덤 포레스트에 대한 특징 중요도 값을 리포트합니다.

이 기술에 대한 아이디어는 Fast.ai에서 하이퍼파라미터 공간을 탐색하기 위해 랜덤 포레스트 특징 중요도를 사용하는 것을 개척한 Jeremy Howard와의 대화에서 영감을 받았습니다. 이 강의 (및 이 노트)를 확인하여 이 분석의 동기에 대해 자세히 알아보는 것이 좋습니다.

하이퍼파라미터 중요도 패널은 상관관계가 높은 하이퍼파라미터 간의 복잡한 상호 작용을 해결합니다. 이를 통해 모델 성능 예측 측면에서 가장 중요한 하이퍼파라미터를 보여줌으로써 하이퍼파라미터 검색을 미세 튜닝하는 데 도움이 됩니다.

하이퍼파라미터 중요도 패널 만들기

  1. W&B 프로젝트로 이동합니다.
  2. 패널 추가 버튼을 선택합니다.
  3. 차트 드롭다운을 확장하고 드롭다운에서 평행 좌표를 선택합니다.
Using automatic parameter visualization

파라미터 관리자를 사용하면 표시 및 숨겨진 파라미터를 수동으로 설정할 수 있습니다.

Manually setting the visible and hidden fields

하이퍼파라미터 중요도 패널 해석하기

이 패널은 트레이닝 스크립트의 wandb.config 오브젝트에 전달된 모든 파라미터를 보여줍니다. 다음으로 이러한 config 파라미터의 특징 중요도와 모델 메트릭과 관련된 상관 관계를 보여줍니다 (이 경우 val_loss).

중요도

중요도 열은 각 하이퍼파라미터가 선택한 메트릭을 예측하는 데 얼마나 유용한지를 보여줍니다. 수많은 하이퍼파라미터를 튜닝하기 시작하고 이 플롯을 사용하여 추가 탐색할 가치가 있는 하이퍼파라미터를 정확히 찾아내는 시나리오를 상상해 보십시오. 후속 스윕은 가장 중요한 하이퍼파라미터로 제한되어 더 좋고 저렴한 모델을 더 빠르게 찾을 수 있습니다.

위의 이미지에서 epochs, learning_rate, batch_sizeweight_decay가 상당히 중요하다는 것을 알 수 있습니다.

상관 관계

상관 관계는 개별 하이퍼파라미터와 메트릭 값 간의 선형 관계를 캡처합니다. SGD 옵티마이저와 같은 하이퍼파라미터를 사용하는 것과 val_loss 사이에 중요한 관계가 있는지에 대한 질문에 답합니다 (이 경우 답은 ‘예’입니다). 상관 관계 값은 -1에서 1 사이이며, 양수 값은 양의 선형 상관 관계를 나타내고 음수 값은 음의 선형 상관 관계를 나타내고 값 0은 상관 관계가 없음을 나타냅니다. 일반적으로 어느 방향이든 0.7보다 큰 값은 강한 상관 관계를 나타냅니다.

이 그래프를 사용하여 메트릭과 더 높은 상관 관계가 있는 값을 추가로 탐색하거나 (이 경우 rmsprop 또는 nadam보다 stochastic gradient descent 또는 adam을 선택할 수 있음) 더 많은 에포크 동안 트레이닝할 수 있습니다.

중요도와 상관 관계의 차이는 중요도가 하이퍼파라미터 간의 상호 작용을 고려하는 반면 상관 관계는 개별 하이퍼파라미터가 메트릭 값에 미치는 영향만 측정한다는 사실에서 비롯됩니다. 둘째, 상관 관계는 선형 관계만 캡처하는 반면 중요도는 더 복잡한 관계를 캡처할 수 있습니다.

보시다시피 중요도와 상관 관계는 모두 하이퍼파라미터가 모델 성능에 미치는 영향을 이해하는 데 유용한 입니다.

2.4.1.7 - Compare run metrics

여러 run에서 메트릭 비교

Run Comparer를 사용하여 여러 run에서 어떤 메트릭이 다른지 확인하세요.

  1. 페이지 오른쪽 상단에서 패널 추가 버튼을 선택합니다.
  2. 나타나는 왼쪽 패널에서 Evaluation 드롭다운을 확장합니다.
  3. Run Comparer를 선택합니다.

Diff Only 옵션을 켜서 여러 run에서 값이 동일한 행을 숨깁니다.

2.4.1.8 - Query panels

이 페이지의 일부 기능은 베타 버전이며 기능 플래그 뒤에 숨겨져 있습니다. 프로필 페이지의 자기 소개에 weave-plot을 추가하여 관련된 모든 기능을 잠금 해제하세요.

쿼리 패널을 사용하여 데이터를 쿼리하고 대화형으로 시각화하세요.

쿼리 패널 만들기

워크스페이스 또는 리포트 내에 쿼리를 추가하세요.

  1. 프로젝트 워크스페이스로 이동합니다.
  2. 오른쪽 상단 모서리에서 패널 추가를 클릭합니다.
  3. 드롭다운에서 쿼리 패널을 선택합니다.

/쿼리 패널을 입력하고 선택합니다.

또는 쿼리를 run 집합과 연결할 수 있습니다:

  1. 리포트 내에서 /패널 그리드를 입력하고 선택합니다.
  2. 패널 추가 버튼을 클릭합니다.
  3. 드롭다운에서 쿼리 패널을 선택합니다.

쿼리 구성 요소

표현식

쿼리 표현식을 사용하여 run, Artifacts, Models, 테이블 등과 같이 W&B에 저장된 데이터를 쿼리합니다.

예시: 테이블 쿼리

W&B Table을 쿼리한다고 가정합니다. 트레이닝 코드에서 "cifar10_sample_table"이라는 테이블을 로깅합니다:

import wandb
wandb.log({"cifar10_sample_table":<MY_TABLE>})

쿼리 패널 내에서 다음을 사용하여 테이블을 쿼리할 수 있습니다:

runs.summary["cifar10_sample_table"]

분해하면 다음과 같습니다:

  • runs는 쿼리 패널이 워크스페이스에 있을 때 쿼리 패널 표현식에 자동으로 삽입되는 변수입니다. “값"은 해당 특정 워크스페이스에 대해 보이는 run 목록입니다. run 내에서 사용할 수 있는 다양한 속성에 대해 자세히 알아보려면 여기를 참조하세요.
  • summary는 Run에 대한 Summary 오브젝트를 반환하는 op입니다. Op는 _매핑_됩니다. 즉, 이 op는 목록의 각 Run에 적용되어 Summary 오브젝트 목록이 생성됩니다.
  • ["cifar10_sample_table"]predictions 파라미터가 있는 Pick op(대괄호로 표시)입니다. Summary 오브젝트는 사전 또는 맵과 같이 작동하므로 이 작업은 각 Summary 오브젝트에서 predictions 필드를 선택합니다.

자신만의 쿼리를 대화형으로 작성하는 방법을 배우려면 이 리포트를 참조하세요.

설정

패널 왼쪽 상단 모서리에 있는 톱니바퀴 아이콘을 선택하여 쿼리 설정을 확장합니다. 이를 통해 사용자는 패널 유형과 결과 패널에 대한 파라미터를 구성할 수 있습니다.

결과 패널

마지막으로 쿼리 결과 패널은 선택한 쿼리 패널을 사용하여 쿼리 표현식의 결과를 렌더링하고, 데이터를 대화형 형식으로 표시하기 위해 설정에 의해 구성됩니다. 다음 이미지는 동일한 데이터의 테이블과 플롯을 보여줍니다.

기본 작업

쿼리 패널 내에서 수행할 수 있는 다음의 일반적인 작업입니다.

정렬

열 옵션에서 정렬:

필터

쿼리에서 직접 또는 왼쪽 상단 모서리에 있는 필터 버튼을 사용하여 필터링할 수 있습니다(두 번째 이미지).

맵 작업은 목록을 반복하고 데이터의 각 요소에 함수를 적용합니다. 패널 쿼리를 통해 직접 또는 열 옵션에서 새 열을 삽입하여 이를 수행할 수 있습니다.

Groupby

쿼리 또는 열 옵션에서 groupby를 사용할 수 있습니다.

Concat

concat 작업을 통해 2개의 테이블을 연결하고 패널 설정에서 연결하거나 조인할 수 있습니다.

Join

쿼리에서 직접 테이블을 조인할 수도 있습니다. 다음 쿼리 표현식을 고려하십시오:

project("luis_team_test", "weave_example_queries").runs.summary["short_table_0"].table.rows.concat.join(\
project("luis_team_test", "weave_example_queries").runs.summary["short_table_1"].table.rows.concat,\
(row) => row["Label"],(row) => row["Label"], "Table1", "Table2",\
"false", "false")

왼쪽 테이블은 다음에서 생성됩니다:

project("luis_team_test", "weave_example_queries").\
runs.summary["short_table_0"].table.rows.concat.join

오른쪽 테이블은 다음에서 생성됩니다:

project("luis_team_test", "weave_example_queries").\
runs.summary["short_table_1"].table.rows.concat

여기서:

  • (row) => row["Label"]은 각 테이블에 대한 선택기이며 조인할 열을 결정합니다.
  • "Table1""Table2"는 조인될 때 각 테이블의 이름입니다.
  • truefalse는 왼쪽 및 오른쪽 내부/외부 조인 설정을 위한 것입니다.

Runs 오브젝트

쿼리 패널을 사용하여 runs 오브젝트에 엑세스합니다. Run 오브젝트는 Experiments 기록을 저장합니다. 이 섹션의 리포트에서 자세한 내용을 확인할 수 있지만, 간략하게 살펴보면 runs 오브젝트는 다음과 같습니다.

  • summary: run 결과를 요약하는 정보 사전입니다. 여기에는 정확도 및 손실과 같은 스칼라 또는 큰 파일이 포함될 수 있습니다. 기본적으로 wandb.log()는 Summary를 로깅된 시계열의 최종 값으로 설정합니다. Summary 내용을 직접 설정할 수 있습니다. Summary를 run의 출력이라고 생각하세요.
  • history: 손실과 같이 모델이 트레이닝되는 동안 변경되는 값을 저장하기 위한 사전 목록입니다. wandb.log() 코맨드는 이 오브젝트에 추가됩니다.
  • config: 트레이닝 Run에 대한 하이퍼파라미터 또는 데이터셋 Artifact를 생성하는 Run에 대한 전처리 메소드와 같은 Run의 설정 정보 사전입니다. 이것을 Run의 “입력"이라고 생각하십시오.

Artifacts 엑세스

Artifacts는 W&B의 핵심 개념입니다. 버전이 지정된 명명된 파일 및 디렉토리 모음입니다. Artifacts를 사용하여 모델 가중치, 데이터셋 및 기타 파일 또는 디렉토리를 추적합니다. Artifacts는 W&B에 저장되며 다운로드하거나 다른 Run에서 사용할 수 있습니다. 이 섹션의 리포트에서 자세한 내용과 예제를 확인할 수 있습니다. Artifacts는 일반적으로 project 오브젝트에서 엑세스됩니다.

  • project.artifactVersion(): 프로젝트 내에서 주어진 이름과 버전에 대한 특정 아티팩트 버전을 반환합니다.
  • project.artifact(""): 프로젝트 내에서 주어진 이름에 대한 아티팩트를 반환합니다. 그런 다음 .versions를 사용하여 이 아티팩트의 모든 버전 목록을 가져올 수 있습니다.
  • project.artifactType(): 프로젝트 내에서 주어진 이름에 대한 artifactType을 반환합니다. 그런 다음 .artifacts를 사용하여 이 유형의 모든 아티팩트 목록을 가져올 수 있습니다.
  • project.artifactTypes: 프로젝트 아래의 모든 아티팩트 유형 목록을 반환합니다.

2.4.1.8.1 - Embed objects

W&B의 Embedding Projector를 통해 PCA, UMAP, t-SNE와 같은 일반적인 차원 축소 알고리즘을 사용하여 다차원 임베딩을 2D 평면에 플롯할 수 있습니다.

Embeddings는 오브젝트 (사람, 이미지, 게시물, 단어 등)를 숫자 목록 ( vector 라고도 함)으로 나타내는 데 사용됩니다. 기계 학습 및 데이터 과학 유스 케이스에서 Embeddings는 다양한 애플리케이션에서 다양한 접근 방식을 사용하여 생성할 수 있습니다. 이 페이지에서는 독자가 Embeddings에 익숙하고 W&B 내에서 Embeddings를 시각적으로 분석하는 데 관심이 있다고 가정합니다.

Embedding 예시

Hello World

W&B를 사용하면 wandb.Table 클래스를 사용하여 Embeddings를 로그할 수 있습니다. 각각 5개의 차원으로 구성된 3개의 Embeddings의 다음 예제를 고려하십시오.

import wandb

wandb.init(project="embedding_tutorial")
embeddings = [
    # D1   D2   D3   D4   D5
    [0.2, 0.4, 0.1, 0.7, 0.5],  # embedding 1
    [0.3, 0.1, 0.9, 0.2, 0.7],  # embedding 2
    [0.4, 0.5, 0.2, 0.2, 0.1],  # embedding 3
]
wandb.log(
    {"embeddings": wandb.Table(columns=["D1", "D2", "D3", "D4", "D5"], data=embeddings)}
)
wandb.finish()

위의 코드를 실행하면 W&B 대시보드에 데이터가 포함된 새 Table이 표시됩니다. 오른쪽 상단 패널 선택기에서 2D Projection을 선택하여 Embeddings를 2차원으로 플롯할 수 있습니다. 스마트 기본값이 자동으로 선택되며, 기어 아이콘을 클릭하여 엑세스할 수 있는 설정 메뉴에서 쉽게 재정의할 수 있습니다. 이 예제에서는 사용 가능한 5개의 숫자 차원을 모두 자동으로 사용합니다.

Digits MNIST

위의 예제는 Embeddings 로깅의 기본 메커니즘을 보여 주지만 일반적으로 훨씬 더 많은 차원과 샘플을 사용합니다. MNIST Digits 데이터셋 (UCI ML 손으로 쓴 숫자 데이터셋s)을 고려해 보겠습니다. SciKit-Learn을 통해 사용할 수 있습니다. 이 데이터셋에는 각각 64개의 차원을 가진 1797개의 레코드가 있습니다. 문제는 10개의 클래스 분류 유스 케이스입니다. 시각화를 위해 입력 데이터를 이미지로 변환할 수도 있습니다.

import wandb
from sklearn.datasets import load_digits

wandb.init(project="embedding_tutorial")

# Load the dataset
ds = load_digits(as_frame=True)
df = ds.data

# Create a "target" column
df["target"] = ds.target.astype(str)
cols = df.columns.tolist()
df = df[cols[-1:] + cols[:-1]]

# Create an "image" column
df["image"] = df.apply(
    lambda row: wandb.Image(row[1:].values.reshape(8, 8) / 16.0), axis=1
)
cols = df.columns.tolist()
df = df[cols[-1:] + cols[:-1]]

wandb.log({"digits": df})
wandb.finish()

위의 코드를 실행하면 UI에 Table이 다시 표시됩니다. 2D Projection을 선택하면 Embedding 정의, 색상, 알고리즘 (PCA, UMAP, t-SNE), 알고리즘 파라미터를 구성하고 오버레이할 수도 있습니다 (이 경우 점 위로 마우스를 가져갈 때 이미지가 표시됨). 이 특정 경우에서는 이 모든 것이 “스마트 기본값"이며 2D Projection에서 한 번의 클릭으로 매우 유사한 내용을 볼 수 있습니다. (이 예제와 상호 작용하려면 여기를 클릭하십시오.).

로깅 옵션

다양한 형식으로 Embeddings를 로그할 수 있습니다.

  1. 단일 Embedding 열: 데이터가 이미 “매트릭스"와 유사한 형식인 경우가 많습니다. 이 경우 셀 값의 데이터 유형이 list[int], list[float] 또는 np.ndarray일 수 있는 단일 Embedding 열을 만들 수 있습니다.
  2. 여러 숫자 열: 위의 두 예제에서는 이 접근 방식을 사용하고 각 차원에 대한 열을 만듭니다. 현재 셀에 대해 python int 또는 float를 허용합니다.

Single Embedding Column Many Numeric Columns

또한 모든 테이블과 마찬가지로 테이블 구성 방법에 대한 많은 옵션이 있습니다.

  1. wandb.Table(dataframe=df)를 사용하여 데이터프레임에서 직접
  2. wandb.Table(data=[...], columns=[...])를 사용하여 데이터 목록에서 직접
  3. 테이블을 점진적으로 행 단위로 빌드합니다 (코드에 루프가 있는 경우에 적합). table.add_data(...)를 사용하여 테이블에 행을 추가합니다.
  4. 테이블에 Embedding 열을 추가합니다 (Embedding 형식의 예측 목록이 있는 경우에 적합): table.add_col("col_name", ...)
  5. 계산된 열을 추가합니다 (테이블에서 매핑하려는 함수 또는 model이 있는 경우에 적합): table.add_computed_columns(lambda row, ndx: {"embedding": model.predict(row)})

플로팅 옵션

2D Projection을 선택한 후 기어 아이콘을 클릭하여 렌더링 설정을 편집할 수 있습니다. 원하는 열을 선택하는 것 외에도 (위 참조) 원하는 알고리즘 (원하는 파라미터와 함께)을 선택할 수 있습니다. 아래에서 UMAP 및 t-SNE에 대한 파라미터를 각각 볼 수 있습니다.

2.4.2 - Custom charts

W&B 프로젝트에서 커스텀 차트를 만드세요. 임의의 데이터 테이블을 기록하고 원하는 방식으로 시각화하세요. Vega의 강력한 기능을 사용하여 글꼴, 색상 및 툴팁의 세부 사항을 제어하세요.

vega.github.io/vega에서 지원하는 차트

작동 방식

  1. 데이터 기록: 스크립트에서 config 및 요약 데이터를 기록합니다.
  2. 차트 사용자 정의: GraphQL 쿼리로 기록된 데이터를 가져옵니다. 강력한 시각화 문법인 Vega로 쿼리 결과를 시각화합니다.
  3. 차트 기록: wandb.plot_table()로 스크립트에서 자체 프리셋을 호출합니다.

예상되는 데이터가 보이지 않으면 찾고 있는 열이 선택된 runs에 기록되지 않았을 수 있습니다. 차트를 저장하고 runs 테이블로 돌아가서 아이콘을 사용하여 선택한 runs를 확인합니다.

스크립트에서 차트 기록

내장 프리셋

W&B에는 스크립트에서 직접 기록할 수 있는 여러 내장 차트 프리셋이 있습니다. 여기에는 선 플롯, 산점도, 막대 차트, 히스토그램, PR 곡선 및 ROC 곡선이 포함됩니다.

wandb.plot.line()

임의의 축 x와 y에서 연결되고 정렬된 점 목록(x,y)인 사용자 지정 선 플롯을 기록합니다.

data = [[x, y] for (x, y) in zip(x_values, y_values)]
table = wandb.Table(data=data, columns=["x", "y"])
wandb.log(
    {
        "my_custom_plot_id": wandb.plot.line(
            table, "x", "y", title="Custom Y vs X Line Plot"
        )
    }
)

선 플롯은 두 차원에 대한 곡선을 기록합니다. 두 값 목록을 서로 플롯하는 경우 목록의 값 수는 정확히 일치해야 합니다(예: 각 점에 x와 y가 있어야 함).

예제 리포트를 보거나 예제 Google Colab 노트북을 사용해 보세요.

wandb.plot.scatter()

임의의 축 x와 y 쌍의 점 목록(x, y)인 사용자 지정 산점도를 기록합니다.

data = [[x, y] for (x, y) in zip(class_x_prediction_scores, class_y_prediction_scores)]
table = wandb.Table(data=data, columns=["class_x", "class_y"])
wandb.log({"my_custom_id": wandb.plot.scatter(table, "class_x", "class_y")})

이를 사용하여 두 차원에 대한 산점도를 기록할 수 있습니다. 두 값 목록을 서로 플롯하는 경우 목록의 값 수는 정확히 일치해야 합니다(예: 각 점에 x와 y가 있어야 함).

예제 리포트를 보거나 예제 Google Colab 노트북을 사용해 보세요.

wandb.plot.bar()

몇 줄 안에 레이블이 지정된 값 목록을 막대로 사용자 지정 막대 차트로 기본적으로 기록합니다.

data = [[label, val] for (label, val) in zip(labels, values)]
table = wandb.Table(data=data, columns=["label", "value"])
wandb.log(
    {
        "my_bar_chart_id": wandb.plot.bar(
            table, "label", "value", title="Custom Bar Chart"
        )
    }
)

이를 사용하여 임의의 막대 차트를 기록할 수 있습니다. 목록의 레이블 및 값 수는 정확히 일치해야 합니다(예: 각 데이터 점에 둘 다 있어야 함).

예제 리포트를 보거나 예제 Google Colab 노트북을 사용해 보세요.

wandb.plot.histogram()

값 목록을 발생 횟수/빈도별로 구간으로 정렬하여 사용자 지정 히스토그램으로 기본적으로 몇 줄 안에 기록합니다. 예측 신뢰도 점수 목록(scores)이 있고 해당 분포를 시각화하려는 경우를 예로 들어 보겠습니다.

data = [[s] for s in scores]
table = wandb.Table(data=data, columns=["scores"])
wandb.log({"my_histogram": wandb.plot.histogram(table, "scores", title=None)})

이를 사용하여 임의의 히스토그램을 기록할 수 있습니다. data는 행과 열의 2D 배열을 지원하기 위한 목록의 목록입니다.

예제 리포트를 보거나 예제 Google Colab 노트북을 사용해 보세요.

wandb.plot.pr_curve()

한 줄로 Precision-Recall 곡선을 만듭니다.

plot = wandb.plot.pr_curve(ground_truth, predictions, labels=None, classes_to_plot=None)

wandb.log({"pr": plot})

코드가 다음에 엑세스할 수 있을 때마다 이를 기록할 수 있습니다.

  • 예제 집합에 대한 모델의 예측 점수(predictions)
  • 해당 예제에 대한 해당 ground truth 레이블(ground_truth)
  • (선택 사항) 레이블/클래스 이름 목록(labels=["cat", "dog", "bird"...] 레이블 인덱스 0이 고양이, 1 = 개, 2 = 새 등을 의미하는 경우)
  • (선택 사항) 플롯에서 시각화할 레이블의 서브셋(여전히 목록 형식)

예제 리포트를 보거나 예제 Google Colab 노트북을 사용해 보세요.

wandb.plot.roc_curve()

한 줄로 ROC 곡선을 만듭니다.

plot = wandb.plot.roc_curve(
    ground_truth, predictions, labels=None, classes_to_plot=None
)

wandb.log({"roc": plot})

코드가 다음에 엑세스할 수 있을 때마다 이를 기록할 수 있습니다.

  • 예제 집합에 대한 모델의 예측 점수(predictions)
  • 해당 예제에 대한 해당 ground truth 레이블(ground_truth)
  • (선택 사항) 레이블/클래스 이름 목록(labels=["cat", "dog", "bird"...] 레이블 인덱스 0이 고양이, 1 = 개, 2 = 새 등을 의미하는 경우)
  • (선택 사항) 플롯에서 시각화할 이러한 레이블의 서브셋(여전히 목록 형식)

예제 리포트를 보거나 예제 Google Colab 노트북을 사용해 보세요.

커스텀 프리셋

내장 프리셋을 조정하거나 새 프리셋을 만든 다음 차트를 저장합니다. 차트 ID를 사용하여 스크립트에서 해당 커스텀 프리셋에 직접 데이터를 기록합니다. 예제 Google Colab 노트북을 사용해 보세요.

# 플롯할 열이 있는 테이블 만들기
table = wandb.Table(data=data, columns=["step", "height"])

# 테이블의 열에서 차트의 필드로 매핑
fields = {"x": "step", "value": "height"}

# 테이블을 사용하여 새 커스텀 차트 프리셋 채우기
# 자신의 저장된 차트 프리셋을 사용하려면 vega_spec_name을 변경하세요.
my_custom_chart = wandb.plot_table(
    vega_spec_name="carey/new_chart",
    data_table=table,
    fields=fields,
)

데이터 기록

스크립트에서 다음 데이터 형식을 기록하고 커스텀 차트에서 사용할 수 있습니다.

  • Config: 실험의 초기 설정(독립 변수). 여기에는 트레이닝 시작 시 wandb.config에 대한 키로 기록한 명명된 필드가 포함됩니다. 예: wandb.config.learning_rate = 0.0001
  • 요약: 트레이닝 중에 기록된 단일 값(결과 또는 종속 변수). 예: wandb.log({"val_acc" : 0.8}). wandb.log()를 통해 트레이닝 중에 이 키에 여러 번 쓰면 요약이 해당 키의 최종 값으로 설정됩니다.
  • History: 기록된 스칼라의 전체 시계열은 history 필드를 통해 쿼리에 사용할 수 있습니다.
  • summaryTable: 여러 값 목록을 기록해야 하는 경우 wandb.Table()을 사용하여 해당 데이터를 저장한 다음 커스텀 패널에서 쿼리합니다.
  • historyTable: history 데이터를 봐야 하는 경우 커스텀 차트 패널에서 historyTable을 쿼리합니다. wandb.Table()을 호출하거나 커스텀 차트를 기록할 때마다 해당 단계의 history에 새 테이블을 만들고 있습니다.

커스텀 테이블을 기록하는 방법

wandb.Table()을 사용하여 데이터를 2D 배열로 기록합니다. 일반적으로 이 테이블의 각 행은 하나의 데이터 점을 나타내고 각 열은 플롯하려는 각 데이터 점에 대한 관련 필드/차원을 나타냅니다. 커스텀 패널을 구성할 때 전체 테이블은 wandb.log()(custom_data_table 아래)에 전달된 명명된 키를 통해 액세스할 수 있으며 개별 필드는 열 이름(x, yz)을 통해 액세스할 수 있습니다. 실험 전반에 걸쳐 여러 시간 단계에서 테이블을 기록할 수 있습니다. 각 테이블의 최대 크기는 10,000행입니다. 예제 Google Colab을 사용해 보세요.

# 데이터의 커스텀 테이블 기록
my_custom_data = [[x1, y1, z1], [x2, y2, z2]]
wandb.log(
    {"custom_data_table": wandb.Table(data=my_custom_data, columns=["x", "y", "z"])}
)

차트 사용자 정의

새 커스텀 차트를 추가하여 시작한 다음 쿼리를 편집하여 표시되는 runs에서 데이터를 선택합니다. 쿼리는 GraphQL을 사용하여 runs의 config, 요약 및 history 필드에서 데이터를 가져옵니다.

새 커스텀 차트를 추가한 다음 쿼리를 편집합니다.

커스텀 시각화

오른쪽 상단 모서리에서 차트를 선택하여 기본 프리셋으로 시작합니다. 다음으로 차트 필드를 선택하여 쿼리에서 가져오는 데이터를 차트의 해당 필드에 매핑합니다.

다음 이미지는 메트릭을 선택한 다음 아래의 막대 차트 필드에 매핑하는 방법을 보여주는 예입니다.

프로젝트에서 runs 간의 정확도를 보여주는 커스텀 막대 차트 만들기

Vega를 편집하는 방법

패널 상단의 편집을 클릭하여 Vega 편집 모드로 들어갑니다. 여기에서 UI에서 대화형 차트를 만드는 Vega 사양을 정의할 수 있습니다. 차트의 모든 측면을 변경할 수 있습니다. 예를 들어 제목을 변경하고, 다른 색 구성표를 선택하고, 곡선을 연결된 선 대신 일련의 점으로 표시할 수 있습니다. 또한 Vega 변환을 사용하여 값 배열을 히스토그램으로 비닝하는 등 데이터 자체를 변경할 수도 있습니다. 패널 미리 보기가 대화형으로 업데이트되므로 Vega 사양 또는 쿼리를 편집할 때 변경 사항의 효과를 볼 수 있습니다. Vega 문서 및 튜토리얼을 참조하세요.

필드 참조

W&B에서 차트로 데이터를 가져오려면 Vega 사양의 아무 곳에나 "${field:<field-name>}" 형식의 템플릿 문자열을 추가합니다. 그러면 오른쪽의 차트 필드 영역에 드롭다운이 생성되어 사용자가 쿼리 결과 열을 선택하여 Vega에 매핑할 수 있습니다.

필드의 기본값을 설정하려면 다음 구문을 사용하세요. "${field:<field-name>:<placeholder text>}"

차트 프리셋 저장

모달 하단의 버튼을 사용하여 특정 시각화 패널에 대한 변경 사항을 적용합니다. 또는 Vega 사양을 저장하여 프로젝트의 다른 곳에서 사용할 수 있습니다. 재사용 가능한 차트 정의를 저장하려면 Vega 편집기 상단의 다른 이름으로 저장을 클릭하고 프리셋에 이름을 지정합니다.

기사 및 가이드

  1. W&B 기계 학습 시각화 IDE
  2. 커스텀 차트를 사용하여 NLP 어텐션 기반 모델 시각화
  3. 커스텀 차트를 사용하여 기울기 흐름에 대한 어텐션의 효과 시각화
  4. 임의 곡선 기록

일반적인 유스 케이스

  • 오류 막대가 있는 막대 플롯 사용자 정의
  • 사용자 지정 x-y 좌표가 필요한 모델 유효성 검사 메트릭 표시(예: precision-recall 곡선)
  • 두 개의 다른 모델/Experiments의 데이터 분포를 히스토그램으로 오버레이
  • 트레이닝 중 여러 지점에서 스냅샷을 통해 메트릭의 변경 사항 표시
  • W&B에서 아직 사용할 수 없는 고유한 시각화 만들기(그리고 바라건대 전 세계와 공유)

2.4.2.1 - Tutorial: Use custom charts

W&B UI에서 사용자 정의 차트 기능을 사용하는 방법에 대한 튜토리얼

커스텀 차트를 사용하여 패널에 로드하는 데이터와 시각화를 제어할 수 있습니다.

1. W&B에 데이터 기록

먼저 스크립트에 데이터를 기록합니다. 트레이닝 시작 시 설정된 단일 포인트 (예: 하이퍼파라미터)에는 wandb.config를 사용합니다. 시간에 따른 여러 포인트에는 wandb.log()를 사용하고, wandb.Table()을 사용하여 커스텀 2D 배열을 기록합니다. 기록된 키당 최대 10,000개의 데이터 포인트를 기록하는 것이 좋습니다.

# 커스텀 데이터 테이블 기록
my_custom_data = [[x1, y1, z1], [x2, y2, z2]]
wandb.log(
  {"custom_data_table": wandb.Table(data=my_custom_data, columns=["x", "y", "z"])}
)

데이터 테이블을 기록하려면 간단한 예제 노트북을 사용해 보고, 다음 단계에서 커스텀 차트를 설정합니다. 라이브 리포트에서 결과 차트가 어떻게 보이는지 확인하세요.

2. 쿼리 만들기

시각화할 데이터를 기록했으면 프로젝트 페이지로 이동하여 + 버튼을 클릭하여 새 패널을 추가한 다음 Custom Chart를 선택합니다. 이 워크스페이스에서 따라 할 수 있습니다.

구성할 준비가 된 새로운 빈 커스텀 차트

쿼리 추가

  1. summary를 클릭하고 historyTable을 선택하여 run 기록에서 데이터를 가져오는 새 쿼리를 설정합니다.
  2. wandb.Table()을 기록한 키를 입력합니다. 위의 코드 조각에서는 my_custom_table입니다. 예제 노트북에서 키는 pr_curveroc_curve입니다.

Vega 필드 설정

이제 쿼리가 이러한 열을 로드하므로 Vega 필드 드롭다운 메뉴에서 선택할 수 있는 옵션으로 사용할 수 있습니다.

쿼리 결과에서 열을 가져와 Vega 필드 설정
  • x-axis: runSets_historyTable_r (recall)
  • y-axis: runSets_historyTable_p (precision)
  • color: runSets_historyTable_c (class label)

3. 차트 사용자 정의

이제 보기에 좋지만 산점도에서 선 플롯으로 전환하고 싶습니다. Edit를 클릭하여 이 내장 차트에 대한 Vega 사양을 변경합니다. 이 워크스페이스에서 따라 하세요.

시각화를 사용자 정의하기 위해 Vega 사양을 업데이트했습니다.

  • 플롯, 범례, x축 및 y축에 대한 제목 추가 (각 필드에 대해 “title” 설정)
  • “mark” 값을 “point"에서 “line"으로 변경
  • 사용되지 않는 “size” 필드 제거

이것을 이 프로젝트의 다른 곳에서 사용할 수 있는 사전 설정으로 저장하려면 페이지 상단의 Save as를 클릭합니다. 결과는 ROC 곡선과 함께 다음과 같습니다.

보너스: 합성 히스토그램

히스토그램은 숫자 분포를 시각화하여 더 큰 데이터셋을 이해하는 데 도움을 줄 수 있습니다. 합성 히스토그램은 동일한 bin에서 여러 분포를 보여주어 서로 다른 모델 간 또는 모델 내의 서로 다른 클래스 간에 두 개 이상의 메트릭을 비교할 수 있습니다. 운전 장면에서 오브젝트를 감지하는 시멘틱 세그멘테이션 모델의 경우 정확도 대 IOU (intersection over union)에 대해 최적화하는 효과를 비교하거나 서로 다른 모델이 자동차 (데이터에서 크고 일반적인 영역) 대 교통 표지판 (훨씬 작고 덜 일반적인 영역)을 얼마나 잘 감지하는지 알고 싶을 수 있습니다. 데모 Colab에서는 10가지 생물 클래스 중 2가지에 대한 신뢰도 점수를 비교할 수 있습니다.

커스텀 합성 히스토그램 패널의 자체 버전을 만들려면:

  1. 워크스페이스 또는 리포트에서 새 Custom Chart 패널을 만듭니다 (“Custom Chart” 시각화를 추가하여). 오른쪽 상단의 “Edit” 버튼을 눌러 내장 패널 유형부터 시작하여 Vega 사양을 수정합니다.
  2. 해당 내장 Vega 사양을 Vega의 합성 히스토그램에 대한 MVP 코드로 바꿉니다. Vega 구문 Vega syntax를 사용하여 이 Vega 사양에서 메인 제목, 축 제목, 입력 도메인 및 기타 세부 정보를 직접 수정할 수 있습니다 (색상을 변경하거나 세 번째 히스토그램을 추가할 수도 있습니다 :)
  3. 오른쪽 쿼리를 수정하여 wandb 로그에서 올바른 데이터를 로드합니다. 필드 summaryTable을 추가하고 해당 tableKeyclass_scores로 설정하여 run에서 기록한 wandb.Table을 가져옵니다. 이렇게 하면 드롭다운 메뉴를 통해 wandb.Tableclass_scores로 기록된 열과 함께 두 개의 히스토그램 bin 세트 (red_binsblue_bins)를 채울 수 있습니다. 내 예제에서는 빨간색 bin에 대한 animal 클래스 예측 점수와 파란색 bin에 대한 plant를 선택했습니다.
  4. 미리 보기 렌더링에서 보이는 플롯이 마음에 들 때까지 Vega 사양과 쿼리를 계속 변경할 수 있습니다. 완료되면 상단의 Save as를 클릭하고 나중에 재사용할 수 있도록 커스텀 플롯 이름을 지정합니다. 그런 다음 Apply from panel library를 클릭하여 플롯을 완료합니다.

다음은 매우 간단한 실험에서 얻은 결과입니다. 에포크에 대해 1000개의 예제만으로 트레이닝하면 대부분의 이미지가 식물이 아니고 어떤 이미지가 동물일 수 있는지 매우 불확실한 모델이 생성됩니다.

2.4.3 - Manage workspace, section, and panel settings

특정 워크스페이스 페이지 내에는 워크스페이스, 섹션 및 패널의 세 가지 설정 수준이 있습니다. 워크스페이스 설정은 전체 워크스페이스에 적용됩니다. 섹션 설정은 섹션 내의 모든 패널에 적용됩니다. 패널 설정은 개별 패널에 적용됩니다.

워크스페이스 설정

워크스페이스 설정은 모든 섹션과 해당 섹션 내의 모든 패널에 적용됩니다. 편집할 수 있는 워크스페이스 설정에는 워크스페이스 레이아웃라인 플롯의 두 가지 유형이 있습니다. 워크스페이스 레이아웃은 워크스페이스의 구조를 결정하는 반면, 라인 플롯 설정은 워크스페이스에서 라인 플롯의 기본 설정을 제어합니다.

이 워크스페이스의 전체 구조에 적용되는 설정을 편집하려면 다음을 수행하세요.

  1. 프로젝트 워크스페이스로 이동합니다.
  2. 새 리포트 버튼 옆에 있는 톱니바퀴 아이콘을 클릭하여 워크스페이스 설정을 확인합니다.
  3. 워크스페이스 레이아웃을 변경하려면 워크스페이스 레이아웃을 선택하고, 워크스페이스에서 라인 플롯의 기본 설정을 구성하려면 라인 플롯을 선택합니다.

워크스페이스 레이아웃 옵션

워크스페이스의 전체 구조를 정의하도록 워크스페이스 레이아웃을 구성합니다. 여기에는 섹션 나누기 로직과 패널 구성이 포함됩니다.

워크스페이스 레이아웃 옵션 페이지에는 워크스페이스에서 패널을 자동으로 생성하는지 또는 수동으로 생성하는지가 표시됩니다. 워크스페이스의 패널 생성 모드를 조정하려면 패널을 참조하세요.

다음 표는 각 워크스페이스 레이아웃 옵션에 대해 설명합니다.

워크스페이스 설정 설명
검색 중 빈 섹션 숨기기 패널을 검색할 때 패널이 없는 섹션을 숨깁니다.
패널을 알파벳순으로 정렬 워크스페이스의 패널을 알파벳순으로 정렬합니다.
섹션 구성 기존의 모든 섹션과 패널을 제거하고 새 섹션 이름으로 다시 채웁니다. 새로 채워진 섹션을 첫 번째 또는 마지막 접두사로 그룹화합니다.

라인 플롯 옵션

라인 플롯 워크스페이스 설정을 수정하여 워크스페이스에서 라인 플롯의 글로벌 기본값과 사용자 지정 규칙을 설정합니다.

라인 플롯 설정 내에서 데이터표시 기본 설정의 두 가지 주요 설정을 편집할 수 있습니다. 데이터 탭에는 다음 설정이 포함되어 있습니다.

라인 플롯 설정 설명
X축 라인 플롯에서 x축의 스케일입니다. x축은 기본적으로 단계로 설정됩니다. x축 옵션 목록은 다음 표를 참조하세요.
범위 x축에 표시할 최소 및 최대 설정입니다.
평활화 라인 플롯에서 평활화를 변경합니다. 평활화에 대한 자세한 내용은 라인 플롯 평활화를 참조하세요.
이상값 기본 플롯 최소 및 최대 스케일에서 이상값을 제외하도록 스케일을 다시 조정합니다.
포인트 집계 메소드 데이터 시각화 정확도와 성능을 향상시킵니다. 자세한 내용은 포인트 집계를 참조하세요.
최대 run 또는 그룹 수 라인 플롯에 표시되는 run 또는 그룹 수를 제한합니다.

단계 외에도 x축에 대한 다른 옵션이 있습니다.

X축 옵션 설명
상대 시간 (벽시계) 프로세스가 시작된 이후의 타임스탬프입니다. 예를 들어, run을 시작하고 다음 날 해당 run을 재개한다고 가정합니다. 그런 다음 무언가를 로깅하면 기록된 포인트는 24시간입니다.
상대 시간 (프로세스) 실행 중인 프로세스 내부의 타임스탬프입니다. 예를 들어, run을 시작하고 10초 동안 계속 실행한다고 가정합니다. 다음 날 해당 run을 재개합니다. 포인트는 10초로 기록됩니다.
벽시계 시간 그래프에서 첫 번째 run이 시작된 이후 경과된 시간 (분)입니다.
단계 wandb.log()를 호출할 때마다 증가합니다.

표시 기본 설정 탭 내에서 다음 설정을 전환할 수 있습니다.

표시 기본 설정 설명
모든 패널에서 범례 제거 패널의 범례를 제거합니다.
툴팁에 색상이 지정된 run 이름 표시 툴팁 내에 run을 색상이 지정된 텍스트로 표시합니다.
컴패니언 차트 툴팁에 강조 표시된 run만 표시 차트 툴팁에 강조 표시된 run만 표시합니다.
툴팁에 표시되는 run 수 툴팁에 run 수를 표시합니다.
기본 차트 툴팁에 전체 run 이름 표시 차트 툴팁에 run의 전체 이름을 표시합니다.

섹션 설정

섹션 설정은 해당 섹션 내의 모든 패널에 적용됩니다. 워크스페이스 섹션 내에서 패널을 정렬하고, 패널을 재정렬하고, 섹션 이름을 바꿀 수 있습니다.

섹션의 오른쪽 상단 모서리에 있는 세 개의 가로 점 ()을 선택하여 섹션 설정을 수정합니다.

드롭다운에서 전체 섹션에 적용되는 다음 설정을 편집할 수 있습니다.

섹션 설정 설명
섹션 이름 바꾸기 섹션 이름을 바꿉니다.
패널 A-Z 정렬 섹션 내의 패널을 알파벳순으로 정렬합니다.
패널 재정렬 섹션 내에서 패널을 선택하고 끌어 패널을 수동으로 정렬합니다.

다음 애니메이션은 섹션 내에서 패널을 재정렬하는 방법을 보여줍니다.

패널 설정

개별 패널의 설정을 사용자 지정하여 동일한 플롯에서 여러 라인을 비교하고, 사용자 지정 축을 계산하고, 레이블 이름을 변경할 수 있습니다. 패널 설정을 편집하려면 다음을 수행하세요.

  1. 편집할 패널 위로 마우스를 가져갑니다.
  2. 나타나는 연필 아이콘을 선택합니다.
  3. 나타나는 모달 내에서 패널의 데이터, 표시 기본 설정 등에 관련된 설정을 편집할 수 있습니다.

패널에 적용할 수 있는 설정의 전체 목록은 라인 패널 설정 편집을 참조하세요.

2.4.4 - Settings

Weights & Biases 설정 페이지를 사용하여 개별 사용자 프로필 또는 팀 설정을 사용자 정의하세요.

개인 사용자 계정 내에서 프로필 사진, 표시 이름, 지리적 위치, 자기 소개 정보, 계정에 연결된 이메일을 편집하고 Runs 에 대한 알림을 관리할 수 있습니다. 또한 설정 페이지를 사용하여 GitHub 저장소를 연결하고 계정을 삭제할 수도 있습니다. 자세한 내용은 사용자 설정을 참조하세요.

팀 설정 페이지를 사용하여 팀에 새 멤버를 초대하거나 제거하고, 팀 Runs 에 대한 알림을 관리하고, 개인 정보 설정을 변경하고, 저장소 사용량을 보고 관리할 수 있습니다. 팀 설정에 대한 자세한 내용은 팀 설정을 참조하세요.

2.4.4.1 - Manage user settings

사용자 설정 에서 프로필 정보, 계정 기본값, 알림, 베타 제품 참여, GitHub 인테그레이션 , 저장소 사용량, 계정 활성화를 관리하고 팀 을 만드세요.

사용자 프로필 페이지로 이동하여 오른쪽 상단 모서리에 있는 사용자 아이콘을 선택하세요. 드롭다운 메뉴에서 설정을 선택합니다.

프로필

프로필 섹션에서는 계정 이름과 소속 기관을 관리하고 수정할 수 있습니다. 선택적으로 자기소개, 위치, 개인 또는 소속 기관 웹사이트 링크를 추가하고 프로필 이미지를 업로드할 수 있습니다.

자기 소개 편집

자기 소개를 편집하려면 프로필 상단의 편집을 클릭합니다. 열리는 WYSIWYG 편집기는 Markdown을 지원합니다.

  1. 줄을 편집하려면 해당 줄을 클릭합니다. 시간을 절약하기 위해 /를 입력하고 목록에서 Markdown을 선택할 수 있습니다.
  2. 항목의 드래그 핸들을 사용하여 이동합니다.
  3. 블록을 삭제하려면 드래그 핸들을 클릭한 다음 삭제를 클릭합니다.
  4. 변경 사항을 저장하려면 저장을 클릭합니다.

소셜 배지 추가

X에서 @weights_biases 계정에 대한 팔로우 배지를 추가하려면 배지 이미지를 가리키는 HTML <img> 태그가 있는 Markdown 스타일 링크를 추가할 수 있습니다.

[<img src="https://img.shields.io/twitter/follow/weights_biases?style=social" alt="X: @weights_biases" >](https://x.com/intent/follow?screen_name=weights_biases)

<img> 태그에서 width, height 또는 둘 다 지정할 수 있습니다. 둘 중 하나만 지정하면 이미지 비율이 유지됩니다.

섹션에서 새 팀을 만듭니다. 새 팀을 만들려면 새 팀 버튼을 선택하고 다음을 제공합니다.

  • 팀 이름 - 팀의 이름입니다. 팀 이름은 고유해야 합니다. 팀 이름은 변경할 수 없습니다.
  • 팀 유형 - 업무 또는 학술 버튼을 선택합니다.
  • 회사/조직 - 팀의 회사 또는 조직 이름을 제공합니다. 드롭다운 메뉴를 선택하여 회사 또는 조직을 선택합니다. 선택적으로 새 조직을 제공할 수 있습니다.

베타 기능

베타 기능 섹션에서는 선택적으로 재미있는 추가 기능과 개발 중인 새 제품의 미리 보기를 활성화할 수 있습니다. 활성화하려는 베타 기능 옆에 있는 토글 스위치를 선택합니다.

알림

wandb.alert()을 사용하여 run이 충돌하거나 완료될 때 알림을 받고 사용자 정의 알림을 설정합니다. 이메일 또는 Slack을 통해 알림을 받습니다. 알림을 받을 이벤트 유형 옆에 있는 스위치를 토글합니다.

  • Runs finished: Weights & Biases run이 성공적으로 완료되었는지 여부.
  • Run crashed: run이 완료되지 못한 경우 알림.

알림을 설정하고 관리하는 방법에 대한 자세한 내용은 wandb.alert로 알림 보내기를 참조하세요.

개인 GitHub 인테그레이션

개인 Github 계정을 연결합니다. Github 계정을 연결하려면:

  1. Github 연결 버튼을 선택합니다. 그러면 OAuth (Open Authorization) 페이지로 리디렉션됩니다.
  2. 조직 엑세스 섹션에서 엑세스 권한을 부여할 조직을 선택합니다.
  3. wandb승인합니다.

계정 삭제

계정 삭제 버튼을 선택하여 계정을 삭제합니다.

저장 공간

저장 공간 섹션에서는 계정이 Weights & Biases 서버에서 사용한 총 메모리 사용량을 설명합니다. 기본 저장 공간 플랜은 100GB입니다. 저장 공간 및 가격 책정에 대한 자세한 내용은 가격 페이지를 참조하세요.

2.4.4.2 - Manage billing settings

조직의 결제 설정을 관리하세요

사용자 프로필 페이지로 이동하여 오른쪽 상단 모서리에 있는 사용자 아이콘을 선택하세요. 드롭다운에서 결제를 선택하거나 설정을 선택한 다음 결제 탭을 선택하세요.

요금제 정보

요금제 정보 섹션에서는 조직의 현재 요금제, 요금, 제한 및 사용량을 요약하여 보여줍니다.

  • 사용자 상세 정보 및 목록을 보려면 사용자 관리를 클릭하세요.
  • 사용량에 대한 자세한 내용을 보려면 사용량 보기를 클릭하세요.
  • 조직에서 사용하는 저장 공간의 양(무료 및 유료). 여기에서 추가 저장 공간을 구매하고 현재 사용 중인 저장 공간을 관리할 수 있습니다. 자세한 내용은 저장 공간 설정을 참조하세요.

여기에서 요금제를 비교하거나 영업팀에 문의할 수 있습니다.

요금제 사용량

이 섹션에서는 현재 사용량을 시각적으로 요약하고 예정된 사용량 요금을 표시합니다. 월별 사용량에 대한 자세한 정보를 보려면 개별 타일에서 사용량 보기를 클릭하세요. 달력 월, Teams 또는 project별로 사용량을 내보내려면 CSV 내보내기를 클릭하세요.

사용량 알림

유료 요금제를 사용하는 조직의 경우, 관리자는 특정 임계값이 충족되면 결제 기간당 한 번 이메일을 통해 알림을 받습니다. 알림에는 결제 관리자인 경우 조직의 제한을 늘리는 방법과 그렇지 않은 경우 결제 관리자에게 문의하는 방법에 대한 세부 정보가 포함됩니다. Pro plan에서는 결제 관리자만 사용량 알림을 받습니다.

이러한 알림은 구성할 수 없으며 다음과 같은 경우에 전송됩니다.

  • 조직이 월간 사용량 범주 제한(사용 시간의 85%)에 가까워지고 요금제에 따라 제한의 100%에 도달했을 때.
  • 조직의 누적 평균 요금이 결제 기간 동안 $200, $450, $700 및 $1000 임계값을 초과했을 때. 이러한 초과 요금은 조직에서 추적 시간, 저장 공간 또는 Weave 데이터 수집에 대해 요금제에 포함된 것보다 더 많은 사용량을 누적할 때 발생합니다.

사용량 또는 결제에 대한 질문은 계정 팀 또는 지원팀에 문의하세요.

결제 방법

이 섹션에서는 조직에 등록된 결제 방법을 보여줍니다. 결제 방법을 추가하지 않은 경우 요금제를 업그레이드하거나 유료 저장 공간을 추가할 때 결제 방법을 추가하라는 메시지가 표시됩니다.

결제 관리자

이 섹션에서는 현재 결제 관리자를 보여줍니다. 결제 관리자는 조직 관리자이며 모든 결제 관련 이메일을 수신하고 결제 방법을 보고 관리할 수 있습니다.

결제 관리자를 변경하거나 역할을 추가 Users에게 할당하려면:

  1. 역할 관리를 클릭하세요.
  2. User를 검색하세요.
  3. 해당 User의 행에서 결제 관리자 필드를 클릭하세요.
  4. 요약을 읽은 다음 결제 User 변경을 클릭하세요.

송장

신용 카드를 사용하여 결제하는 경우 이 섹션에서 월별 송장을 볼 수 있습니다.

  • 전신 송금을 통해 결제하는 Enterprise 계정의 경우 이 섹션은 비어 있습니다. 질문이 있으면 계정 팀에 문의하세요.
  • 조직에 요금이 발생하지 않으면 송장이 생성되지 않습니다.

2.4.4.3 - Manage team settings

Team 설정 페이지에서 팀의 멤버, 아바타, 알림 및 개인 정보 설정을 관리하세요.

팀 설정

팀 멤버, 아바타, 알림, 개인 정보 보호, 사용량 등 팀 설정을 변경합니다. 조직 관리자와 팀 관리자는 팀 설정을 보고 편집할 수 있습니다.

멤버

멤버 섹션에는 보류 중인 초대 목록과 팀 가입 초대를 수락한 멤버가 모두 표시됩니다. 나열된 각 멤버는 멤버의 이름, 사용자 이름, 이메일, 팀 역할과 조직에서 상속된 Models 및 Weave에 대한 엑세스 권한을 표시합니다. 표준 팀 역할인 Admin, MemberView-only 중에서 선택할 수 있습니다. 조직에서 사용자 정의 역할을 생성한 경우 사용자 정의 역할을 대신 할당할 수 있습니다.

팀 생성, 팀 관리, 팀 멤버십 및 역할 관리에 대한 자세한 내용은 팀 추가 및 관리를 참조하세요. 팀에 대한 새로운 멤버 초대 권한을 구성하고 기타 개인 정보 보호 설정을 구성하려면 개인 정보 보호를 참조하세요.

아바타

아바타 섹션으로 이동하여 이미지를 업로드하여 아바타를 설정합니다.

  1. 아바타 업데이트를 선택하여 파일 대화 상자를 표시합니다.
  2. 파일 대화 상자에서 사용할 이미지를 선택합니다.

알림

Runs이 충돌하거나 완료될 때 또는 사용자 정의 알림을 설정할 때 팀에 알립니다. 팀은 이메일 또는 Slack을 통해 알림을 받을 수 있습니다.

알림을 받을 이벤트 유형 옆에 있는 스위치를 토글합니다. Weights & Biases는 기본적으로 다음과 같은 이벤트 유형 옵션을 제공합니다.

  • Runs finished: Weights & Biases run이 성공적으로 완료되었는지 여부.
  • Run crashed: run이 완료되지 못한 경우.

알림을 설정하고 관리하는 방법에 대한 자세한 내용은 wandb.alert로 알림 보내기를 참조하세요.

Slack 알림

새로운 아티팩트가 생성되거나 run 메트릭이 정의된 임계값을 충족하는 경우와 같이 팀의 자동화가 Registry 또는 프로젝트에서 이벤트가 발생할 때 알림을 보낼 수 있는 Slack 대상을 구성합니다. Slack 자동화 생성를 참조하세요.

This feature is available for all Enterprise licenses.

웹훅

새로운 아티팩트가 생성되거나 run 메트릭이 정의된 임계값을 충족하는 경우와 같이 팀의 자동화가 Registry 또는 프로젝트에서 이벤트가 발생할 때 실행할 수 있는 웹훅을 구성합니다. 웹훅 자동화 생성를 참조하세요.

This feature is available for all Enterprise licenses.

개인 정보 보호

개인 정보 보호 섹션으로 이동하여 개인 정보 보호 설정을 변경합니다. 조직 관리자만 개인 정보 보호 설정을 수정할 수 있습니다.

  • 향후 프로젝트를 공개하거나 Reports를 공개적으로 공유하는 기능을 끕니다.
  • 팀 관리자뿐만 아니라 모든 팀 멤버가 다른 멤버를 초대할 수 있도록 허용합니다.
  • 코드 저장을 기본적으로 켤지 여부를 관리합니다.

사용량

사용량 섹션에서는 팀이 Weights and Biases 서버에서 소비한 총 메모리 사용량을 설명합니다. 기본 스토리지 플랜은 100GB입니다. 스토리지 및 가격 책정에 대한 자세한 내용은 가격 책정 페이지를 참조하세요.

스토리지

스토리지 섹션에서는 팀의 데이터에 사용되는 클라우드 스토리지 버킷 구성을 설명합니다. 자세한 내용은 보안 스토리지 커넥터를 참조하거나 자체 호스팅하는 경우 W&B 서버 문서를 확인하세요.

2.4.4.4 - Manage email settings

설정 페이지에서 이메일을 관리하세요.

W&B 프로필 설정 페이지에서 이메일 유형과 기본 이메일 주소를 추가, 삭제, 관리합니다. W&B 대시보드의 오른쪽 상단 모서리에 있는 프로필 아이콘을 선택하세요. 드롭다운 메뉴에서 설정을 선택합니다. 설정 페이지에서 아래로 스크롤하여 이메일 대시보드로 이동합니다.

기본 이메일 관리

기본 이메일은 😎 이모지로 표시됩니다. 기본 이메일은 W&B 계정을 만들 때 제공한 이메일로 자동 정의됩니다.

케밥 드롭다운을 선택하여 Weights And Biases 계정과 연결된 기본 이메일을 변경합니다.

이메일 추가

+ 이메일 추가를 선택하여 이메일을 추가합니다. 그러면 Auth0 페이지로 이동합니다. 새 이메일의 자격 증명을 입력하거나 Single Sign-On (SSO)을 사용하여 연결할 수 있습니다.

이메일 삭제

케밥 드롭다운을 선택하고 이메일 삭제를 선택하여 W&B 계정에 등록된 이메일을 삭제합니다.

로그인 방법

로그인 방법 열에는 계정과 연결된 로그인 방법이 표시됩니다.

W&B 계정을 만들 때 이메일 계정으로 인증 이메일이 전송됩니다. 이메일 주소를 인증할 때까지 이메일 계정은 인증되지 않은 것으로 간주됩니다. 인증되지 않은 이메일은 빨간색으로 표시됩니다.

이메일 주소로 다시 로그인하여 이메일 계정으로 전송된 원본 인증 이메일이 더 이상 없는 경우 두 번째 인증 이메일을 검색하십시오.

계정 로그인 문제는 support@wandb.com으로 문의하십시오.

2.4.4.5 - Manage teams

동료와 협업하고, 결과를 공유하며, 팀 전체의 모든 실험을 추적하세요.

W&B Teams를 사용하여 ML 팀의 중앙 워크스페이스를 구축하여 더 나은 모델을 더 빠르게 만드세요.

  • 팀에서 시도한 모든 실험을 추적하여 작업이 중복되지 않도록 하세요.
  • 이전에 트레이닝된 모델을 저장하고 재현하세요.
  • 상사 및 협력자와 진행 상황과 결과를 공유하세요.
  • 회귀를 포착하고 성능이 저하되면 즉시 알림을 받으세요.
  • 모델 성능을 벤치마킹하고 모델 버전을 비교하세요.

협업 팀 만들기

  1. 무료 W&B 계정에 가입하거나 로그인하세요.
  2. 네비게이션 바에서 팀 초대를 클릭하세요.
  3. 팀을 만들고 협력자를 초대하세요.
  4. 팀을 구성하려면 팀 설정 관리를 참조하세요.

팀 프로필 만들기

팀 프로필 페이지를 사용자 정의하여 소개를 표시하고 공개 또는 팀 멤버에게 보이는 리포트 및 프로젝트를 소개할 수 있습니다. 리포트, 프로젝트 및 외부 링크를 제시하세요.

  • 최고의 공개 리포트를 소개하여 방문자에게 최고의 연구 결과를 강조하세요.
  • 팀원이 더 쉽게 찾을 수 있도록 가장 활발한 프로젝트를 소개하세요.
  • 회사 또는 연구실 웹사이트 및 게시한 논문에 외부 링크를 추가하여 협력자를 찾으세요.

팀 멤버 제거

팀 관리자는 팀 설정 페이지를 열고 떠나는 멤버의 이름 옆에 있는 삭제 버튼을 클릭할 수 있습니다. 사용자가 떠난 후에도 팀에 기록된 모든 run은 유지됩니다.

팀 역할 및 권한 관리

동료를 팀에 초대할 때 팀 역할을 선택하세요. 다음과 같은 팀 역할 옵션이 있습니다.

  • 관리자: 팀 관리자는 다른 관리자나 팀 멤버를 추가하거나 제거할 수 있습니다. 모든 프로젝트를 수정할 수 있는 권한과 완전한 삭제 권한이 있습니다. 여기에는 run, 프로젝트, 아티팩트 및 스윕 삭제가 포함되지만 이에 국한되지는 않습니다.
  • 멤버: 팀의 일반 멤버입니다. 기본적으로 관리자만 팀 멤버를 초대할 수 있습니다. 이 동작을 변경하려면 팀 설정 관리를 참조하세요.

팀 멤버는 자신이 만든 run만 삭제할 수 있습니다. 멤버 A와 B가 있다고 가정합니다. 멤버 B가 팀 B의 프로젝트에서 멤버 A가 소유한 다른 프로젝트로 run을 이동합니다. 멤버 A는 멤버 B가 멤버 A의 프로젝트로 이동한 run을 삭제할 수 없습니다. 관리자는 모든 팀 멤버가 만든 run과 스윕 run을 관리할 수 있습니다.

  • 보기 전용 (엔터프라이즈 전용 기능): 보기 전용 멤버는 run, 리포트 및 워크스페이스와 같은 팀 내 자산을 볼 수 있습니다. 리포트를 팔로우하고 댓글을 달 수 있지만 프로젝트 개요, 리포트 또는 run을 생성, 편집 또는 삭제할 수는 없습니다.
  • 사용자 정의 역할 (엔터프라이즈 전용 기능): 사용자 정의 역할을 사용하면 조직 관리자가 세분화된 엑세스 제어를 위해 추가 권한과 함께 보기 전용 또는 멤버 역할 중 하나를 기반으로 새 역할을 구성할 수 있습니다. 그런 다음 팀 관리자는 해당 사용자 정의 역할을 각 팀의 사용자에게 할당할 수 있습니다. 자세한 내용은 W&B 팀을 위한 사용자 정의 역할 소개를 참조하세요.
  • 서비스 계정 (엔터프라이즈 전용 기능): 서비스 계정을 사용하여 워크플로우 자동화를 참조하세요.

팀 설정

팀 설정을 사용하면 팀 및 팀 멤버에 대한 설정을 관리할 수 있습니다. 이러한 권한을 통해 W&B 내에서 팀을 효과적으로 감독하고 구성할 수 있습니다.

권한 보기 전용 팀 멤버 팀 관리자
팀 멤버 추가 X
팀 멤버 제거 X
팀 설정 관리 X

레지스트리

다음 표에는 지정된 팀의 모든 프로젝트에 적용되는 권한이 나와 있습니다.

권한 보기 전용 팀 멤버 레지스트리 관리자 팀 관리자
에일리어스 추가 X X X
레지스트리에 모델 추가 X X X
레지스트리에서 모델 보기 X X X X
모델 다운로드 X X X X
레지스트리 관리자 추가 또는 제거 X X
보호된 에일리어스 추가 또는 제거 X

보호된 에일리어스에 대한 자세한 내용은 레지스트리 엑세스 제어를 참조하세요.

리포트

리포트 권한은 리포트를 생성, 보고 편집할 수 있는 엑세스 권한을 부여합니다. 다음 표에는 지정된 팀의 모든 리포트에 적용되는 권한이 나와 있습니다.

권한 보기 전용 팀 멤버 팀 관리자
리포트 보기 X X X
리포트 만들기 X X
리포트 편집 X (팀 멤버는 자신의 리포트만 편집할 수 있음) X
리포트 삭제 X (팀 멤버는 자신의 리포트만 편집할 수 있음) X

실험

다음 표에는 지정된 팀의 모든 실험에 적용되는 권한이 나와 있습니다.

권한 보기 전용 팀 멤버 팀 관리자
실험 메타데이터 보기 (기록 메트릭, 시스템 메트릭, 파일 및 로그 포함) X X X
실험 패널 및 워크스페이스 편집 X X
실험 기록 X X
실험 삭제 X (팀 멤버는 자신이 만든 실험만 삭제할 수 있음) X
실험 중지 X (팀 멤버는 자신이 만든 실험만 중지할 수 있음) X

아티팩트

다음 표에는 지정된 팀의 모든 아티팩트에 적용되는 권한이 나와 있습니다.

권한 보기 전용 팀 멤버 팀 관리자
아티팩트 보기 X X X
아티팩트 만들기 X X
아티팩트 삭제 X X
메타데이터 편집 X X
에일리어스 편집 X X
에일리어스 삭제 X X
아티팩트 다운로드 X X

시스템 설정 (W&B 서버만 해당)

시스템 권한을 사용하여 팀 및 팀 멤버를 만들고 관리하고 시스템 설정을 조정합니다. 이러한 권한을 통해 W&B 인스턴스를 효과적으로 관리하고 유지 관리할 수 있습니다.

권한 보기 전용 팀 멤버 팀 관리자 시스템 관리자
시스템 설정 구성 X
팀 생성/삭제 X

팀 서비스 계정 행동

  • 트레이닝 환경에서 팀을 구성할 때 해당 팀의 서비스 계정을 사용하여 해당 팀 내의 비공개 또는 공개 프로젝트에 run을 기록할 수 있습니다. 또한 환경에 WANDB_USERNAME 또는 WANDB_USER_EMAIL 변수가 있고 참조된 사용자가 해당 팀의 구성원인 경우 해당 run을 사용자에게 귀속시킬 수 있습니다.
  • 트레이닝 환경에서 팀을 구성 하지 않고 서비스 계정을 사용하는 경우 run은 해당 서비스 계정의 상위 팀 내에서 명명된 프로젝트에 기록됩니다. 이 경우에도 환경에 WANDB_USERNAME 또는 WANDB_USER_EMAIL 변수가 있고 참조된 사용자가 서비스 계정의 상위 팀의 구성원인 경우 run을 사용자에게 귀속시킬 수 있습니다.
  • 서비스 계정은 상위 팀과 다른 팀의 비공개 프로젝트에 run을 기록할 수 없습니다. 프로젝트가 공개 프로젝트 가시성으로 설정된 경우에만 서비스 계정이 프로젝트에 run을 기록할 수 있습니다.

팀 트라이얼

W&B 요금제에 대한 자세한 내용은 요금 페이지를 참조하세요. 대시보드 UI 또는 내보내기 API를 사용하여 언제든지 모든 데이터를 다운로드할 수 있습니다.

개인 정보 설정

팀 설정 페이지에서 모든 팀 프로젝트의 개인 정보 설정을 확인할 수 있습니다. app.wandb.ai/teams/your-team-name

고급 구성

보안 스토리지 커넥터

팀 수준 보안 스토리지 커넥터를 사용하면 팀에서 W&B와 함께 자체 클라우드 스토리지 버킷을 사용할 수 있습니다. 이는 매우 민감한 데이터 또는 엄격한 규정 준수 요구 사항이 있는 팀에 대해 더 나은 데이터 엑세스 제어 및 데이터 격리를 제공합니다. 자세한 내용은 보안 스토리지 커넥터를 참조하세요.

2.4.4.6 - Manage storage

W&B 데이터 저장소를 관리하는 방법.

스토리지 한도에 접근하거나 초과하는 경우, 데이터를 관리할 수 있는 여러 가지 방법이 있습니다. 어떤 방법이 가장 적합한지는 계정 유형과 현재 프로젝트 설정에 따라 달라집니다.

스토리지 사용량 관리

W&B는 스토리지 사용량을 최적화할 수 있는 다양한 방법을 제공합니다.

  • 참조 Artifacts를 사용하여 W&B 시스템 외부에서 저장된 파일을 추적하고, W&B 스토리지에 업로드하는 대신 사용할 수 있습니다.
  • 스토리지를 위해 외부 클라우드 스토리지 버킷을 사용합니다. (엔터프라이즈 전용)

데이터 삭제

스토리지 한도 내에서 유지하기 위해 데이터를 삭제할 수도 있습니다. 이를 수행하는 방법은 여러 가지가 있습니다.

  • 앱 UI를 사용하여 대화형으로 데이터를 삭제합니다.
  • Artifacts에 TTL 정책 설정하여 자동으로 삭제되도록 합니다.

2.4.4.7 - System metrics

W&B에 의해 자동으로 로그되는 메트릭.

이 페이지에서는 W&B SDK에서 추적하는 시스템 메트릭에 대한 자세한 정보를 제공합니다.

CPU

프로세스 CPU 백분율 (CPU)

사용 가능한 CPU 수로 정규화된 프로세스의 CPU 사용량 백분율입니다.

W&B는 이 메트릭에 cpu 태그를 할당합니다.

프로세스 CPU 스레드

프로세스에서 활용하는 스레드 수입니다.

W&B는 이 메트릭에 proc.cpu.threads 태그를 할당합니다.

디스크

기본적으로 사용량 메트릭은 / 경로에 대해 수집됩니다. 모니터링할 경로를 구성하려면 다음 설정을 사용하세요.

run = wandb.init(
    settings=wandb.Settings(
        x_stats_disk_paths=("/System/Volumes/Data", "/home", "/mnt/data"),
    ),
)

디스크 사용량 백분율

지정된 경로에 대한 총 시스템 디스크 사용량을 백분율로 나타냅니다.

W&B는 이 메트릭에 disk.{path}.usagePercent 태그를 할당합니다.

디스크 사용량

지정된 경로에 대한 총 시스템 디스크 사용량을 기가바이트(GB)로 나타냅니다. 엑세스 가능한 경로는 샘플링되고 각 경로에 대한 디스크 사용량(GB)이 샘플에 추가됩니다.

W&B는 이 메트릭에 disk.{path}.usageGB 태그를 할당합니다.

디스크 In

총 시스템 디스크 읽기(MB)를 나타냅니다. 초기 디스크 읽기 바이트는 첫 번째 샘플을 채취할 때 기록됩니다. 후속 샘플은 현재 읽기 바이트와 초기 값의 차이를 계산합니다.

W&B는 이 메트릭에 disk.in 태그를 할당합니다.

디스크 Out

총 시스템 디스크 쓰기(MB)를 나타냅니다. 디스크 In과 유사하게 초기 디스크 쓰기 바이트는 첫 번째 샘플을 채취할 때 기록됩니다. 후속 샘플은 현재 쓰기 바이트와 초기 값의 차이를 계산합니다.

W&B는 이 메트릭에 disk.out 태그를 할당합니다.

메모리

프로세스 메모리 RSS

프로세스에 대한 메모리 Resident Set Size (RSS)를 메가바이트(MB) 단위로 나타냅니다. RSS는 메인 메모리(RAM)에 보관된 프로세스가 차지하는 메모리 부분입니다.

W&B는 이 메트릭에 proc.memory.rssMB 태그를 할당합니다.

프로세스 메모리 백분율

총 사용 가능한 메모리의 백분율로 프로세스의 메모리 사용량을 나타냅니다.

W&B는 이 메트릭에 proc.memory.percent 태그를 할당합니다.

메모리 백분율

총 사용 가능한 메모리의 백분율로 총 시스템 메모리 사용량을 나타냅니다.

W&B는 이 메트릭에 memory_percent 태그를 할당합니다.

사용 가능한 메모리

총 사용 가능한 시스템 메모리를 메가바이트(MB) 단위로 나타냅니다.

W&B는 이 메트릭에 proc.memory.availableMB 태그를 할당합니다.

네트워크

네트워크 Sent

네트워크를 통해 전송된 총 바이트를 나타냅니다. 초기 전송된 바이트는 메트릭이 처음 초기화될 때 기록됩니다. 후속 샘플은 현재 전송된 바이트와 초기 값의 차이를 계산합니다.

W&B는 이 메트릭에 network.sent 태그를 할당합니다.

네트워크 Received

네트워크를 통해 수신된 총 바이트를 나타냅니다. 네트워크 Sent와 유사하게 초기 수신된 바이트는 메트릭이 처음 초기화될 때 기록됩니다. 후속 샘플은 현재 수신된 바이트와 초기 값의 차이를 계산합니다.

W&B는 이 메트릭에 network.recv 태그를 할당합니다.

NVIDIA GPU

아래에 설명된 메트릭 외에도 프로세스 및/또는 해당 하위 항목이 특정 GPU를 사용하는 경우 W&B는 해당 메트릭을 gpu.process.{gpu_index}.{metric_name}으로 캡처합니다.

GPU 메모리 활용률

각 GPU에 대한 GPU 메모리 활용률을 백분율로 나타냅니다.

W&B는 이 메트릭에 gpu.{gpu_index}.memory 태그를 할당합니다.

GPU 메모리 할당됨

각 GPU에 대해 총 사용 가능한 메모리의 백분율로 GPU 메모리가 할당되었음을 나타냅니다.

W&B는 이 메트릭에 gpu.{gpu_index}.memoryAllocated 태그를 할당합니다.

GPU 메모리 할당된 바이트

각 GPU에 대해 바이트 단위로 GPU 메모리가 할당되었음을 지정합니다.

W&B는 이 메트릭에 gpu.{gpu_index}.memoryAllocatedBytes 태그를 할당합니다.

GPU 활용률

각 GPU에 대한 GPU 활용률을 백분율로 반영합니다.

W&B는 이 메트릭에 gpu.{gpu_index}.gpu 태그를 할당합니다.

GPU 온도

각 GPU에 대한 GPU 온도를 섭씨로 나타냅니다.

W&B는 이 메트릭에 gpu.{gpu_index}.temp 태그를 할당합니다.

GPU 전력 사용량 (와트)

각 GPU에 대한 GPU 전력 사용량을 와트 단위로 나타냅니다.

W&B는 이 메트릭에 gpu.{gpu_index}.powerWatts 태그를 할당합니다.

GPU 전력 사용량 백분율

각 GPU에 대한 전력 용량의 백분율로 GPU 전력 사용량을 반영합니다.

W&B는 이 메트릭에 gpu.{gpu_index}.powerPercent 태그를 할당합니다.

GPU SM 클럭 속도

GPU의 SM(Streaming Multiprocessor) 클럭 속도를 MHz로 나타냅니다. 이 메트릭은 계산 작업을 담당하는 GPU 코어 내 처리 속도를 나타냅니다.

W&B는 gpu.{gpu_index}.smClock 태그를 이 메트릭에 할당합니다.

GPU 메모리 클럭 속도

GPU 메모리의 클럭 속도를 MHz로 나타냅니다. 이 속도는 GPU 메모리와 처리 코어 간의 데이터 전송 속도에 영향을 미칩니다.

W&B는 gpu.{gpu_index}.memoryClock 태그를 이 메트릭에 할당합니다.

GPU 그래픽 클럭 속도

GPU에서 그래픽 렌더링 작업의 기본 클럭 속도를 MHz로 나타냅니다. 이 메트릭은 시각화 또는 렌더링 작업 중 성능을 반영합니다.

W&B는 gpu.{gpu_index}.graphicsClock 태그를 이 메트릭에 할당합니다.

GPU 수정된 메모리 오류

W&B가 오류 검사 프로토콜을 통해 자동으로 수정하는 GPU의 메모리 오류 수를 추적하여 복구 가능한 하드웨어 문제를 나타냅니다.

W&B는 gpu.{gpu_index}.correctedMemoryErrors 태그를 이 메트릭에 할당합니다.

GPU 수정되지 않은 메모리 오류

W&B가 수정하지 않은 GPU의 메모리 오류 수를 추적하여 처리 안정성에 영향을 줄 수 있는 복구 불가능한 오류를 나타냅니다.

W&B는 gpu.{gpu_index}.unCorrectedMemoryErrors 태그를 이 메트릭에 할당합니다.

GPU 인코더 활용률

GPU의 비디오 인코더 활용률을 백분율로 나타냅니다. 이 값은 인코딩 작업(예: 비디오 렌더링)이 실행 중일 때의 로드를 나타냅니다.

W&B는 gpu.{gpu_index}.encoderUtilization 태그를 이 메트릭에 할당합니다.

AMD GPU

W&B는 AMD에서 제공하는 rocm-smi 툴의 출력에서 메트릭을 추출합니다 (rocm-smi -a --json).

ROCm 6.x (최신)5.x 형식이 지원됩니다. ROCm 형식에 대한 자세한 내용은 AMD ROCm documentation에서 확인하세요. 최신 형식에는 더 많은 세부 정보가 포함되어 있습니다.

AMD GPU 활용률

각 AMD GPU 장치에 대한 GPU 활용률을 백분율로 나타냅니다.

W&B는 이 메트릭에 gpu.{gpu_index}.gpu 태그를 할당합니다.

AMD GPU 메모리 할당됨

각 AMD GPU 장치에 대해 총 사용 가능한 메모리의 백분율로 GPU 메모리가 할당되었음을 나타냅니다.

W&B는 이 메트릭에 gpu.{gpu_index}.memoryAllocated 태그를 할당합니다.

AMD GPU 온도

각 AMD GPU 장치에 대한 GPU 온도를 섭씨로 나타냅니다.

W&B는 이 메트릭에 gpu.{gpu_index}.temp 태그를 할당합니다.

AMD GPU 전력 사용량 (와트)

각 AMD GPU 장치에 대한 GPU 전력 사용량을 와트 단위로 나타냅니다.

W&B는 이 메트릭에 gpu.{gpu_index}.powerWatts 태그를 할당합니다.

AMD GPU 전력 사용량 백분율

각 AMD GPU 장치에 대한 전력 용량의 백분율로 GPU 전력 사용량을 반영합니다.

W&B는 이 메트릭에 gpu.{gpu_index}.powerPercent 태그를 할당합니다.

Apple ARM Mac GPU

Apple GPU 활용률

Apple GPU 장치, 특히 ARM Mac에서 GPU 활용률을 백분율로 나타냅니다.

W&B는 이 메트릭에 gpu.0.gpu 태그를 할당합니다.

Apple GPU 메모리 할당됨

ARM Mac의 Apple GPU 장치에 대해 총 사용 가능한 메모리의 백분율로 GPU 메모리가 할당되었습니다.

W&B는 이 메트릭에 gpu.0.memoryAllocated 태그를 할당합니다.

Apple GPU 온도

ARM Mac의 Apple GPU 장치에 대한 GPU 온도를 섭씨로 나타냅니다.

W&B는 이 메트릭에 gpu.0.temp 태그를 할당합니다.

Apple GPU 전력 사용량 (와트)

ARM Mac의 Apple GPU 장치에 대한 GPU 전력 사용량을 와트 단위로 나타냅니다.

W&B는 이 메트릭에 gpu.0.powerWatts 태그를 할당합니다.

Apple GPU 전력 사용량 백분율

ARM Mac의 Apple GPU 장치에 대한 전력 용량의 백분율로 GPU 전력 사용량을 나타냅니다.

W&B는 이 메트릭에 gpu.0.powerPercent 태그를 할당합니다.

Graphcore IPU

Graphcore IPU(Intelligence Processing Units)는 기계 학습 작업을 위해 특별히 설계된 고유한 하드웨어 가속기입니다.

IPU 장치 메트릭

이러한 메트릭은 특정 IPU 장치에 대한 다양한 통계를 나타냅니다. 각 메트릭에는 장치를 식별하기 위한 장치 ID(device_id)와 메트릭 키(metric_key)가 있습니다. W&B는 이 메트릭에 ipu.{device_id}.{metric_key} 태그를 할당합니다.

메트릭은 Graphcore의 gcipuinfo 바이너리와 상호 작용하는 독점 gcipuinfo 라이브러리를 사용하여 추출됩니다. sample 메소드는 프로세스 ID(pid)와 연결된 각 IPU 장치에 대해 이러한 메트릭을 가져옵니다. 시간이 지남에 따라 변경되는 메트릭 또는 장치의 메트릭을 처음 가져오는 경우에만 중복된 데이터 로깅을 방지하기 위해 기록됩니다.

각 메트릭에 대해 parse_metric 메소드를 사용하여 원시 문자열 표현에서 메트릭의 값을 추출합니다. 그런 다음 aggregate 메소드를 사용하여 여러 샘플에서 메트릭을 집계합니다.

다음은 사용 가능한 메트릭 및 해당 단위를 나열한 것입니다.

  • 평균 보드 온도 (average board temp (C)): IPU 보드의 온도를 섭씨로 나타냅니다.
  • 평균 다이 온도 (average die temp (C)): IPU 다이의 온도를 섭씨로 나타냅니다.
  • 클럭 속도 (clock (MHz)): IPU의 클럭 속도를 MHz로 나타냅니다.
  • IPU 전력 (ipu power (W)): IPU의 전력 소비량을 와트 단위로 나타냅니다.
  • IPU 활용률 (ipu utilisation (%)): IPU 활용률을 백분율로 나타냅니다.
  • IPU 세션 활용률 (ipu utilisation (session) (%)): 현재 세션에 특정한 IPU 활용률을 백분율로 나타냅니다.
  • 데이터 링크 속도 (speed (GT/s)): 데이터 전송 속도를 초당 기가 전송 단위로 나타냅니다.

Google Cloud TPU

TPU(Tensor Processing Units)는 기계 학습 워크로드를 가속화하는 데 사용되는 Google의 맞춤형 ASIC(Application Specific Integrated Circuits)입니다.

TPU 메모리 사용량

TPU 코어당 현재 High Bandwidth Memory 사용량을 바이트 단위로 나타냅니다.

W&B는 이 메트릭에 tpu.{tpu_index}.memoryUsageBytes 태그를 할당합니다.

TPU 메모리 사용량 백분율

TPU 코어당 현재 High Bandwidth Memory 사용량을 백분율로 나타냅니다.

W&B는 이 메트릭에 tpu.{tpu_index}.memoryUsageBytes 태그를 할당합니다.

TPU 듀티 사이클

TPU 장치당 TensorCore 듀티 사이클 백분율입니다. 가속기 TensorCore가 활발하게 처리 중인 샘플 기간 동안의 시간 백분율을 추적합니다. 값이 클수록 TensorCore 활용률이 높다는 것을 의미합니다.

W&B는 이 메트릭에 tpu.{tpu_index}.dutyCycle 태그를 할당합니다.

AWS Trainium

AWS Trainium은 AWS에서 제공하는 특수 하드웨어 플랫폼으로, 기계 학습 워크로드 가속화에 중점을 둡니다. AWS의 neuron-monitor 툴은 AWS Trainium 메트릭을 캡처하는 데 사용됩니다.

Trainium Neuron Core 활용률

각 NeuronCore의 활용률을 코어별로 보고합니다.

W&B는 이 메트릭에 trn.{core_index}.neuroncore_utilization 태그를 할당합니다.

Trainium 호스트 메모리 사용량, 총계

호스트의 총 메모리 소비량을 바이트 단위로 나타냅니다.

W&B는 이 메트릭에 trn.host_total_memory_usage 태그를 할당합니다.

Trainium Neuron 장치 총 메모리 사용량

Neuron 장치의 총 메모리 사용량을 바이트 단위로 나타냅니다.

W&B는 trn.neuron_device_total_memory_usage) 태그를 이 메트릭에 할당합니다.

Trainium 호스트 메모리 사용량 분석:

다음은 호스트의 메모리 사용량 분석입니다.

  • 애플리케이션 메모리 (trn.host_total_memory_usage.application_memory): 애플리케이션에서 사용하는 메모리입니다.
  • 상수 (trn.host_total_memory_usage.constants): 상수에 사용되는 메모리입니다.
  • DMA 버퍼 (trn.host_total_memory_usage.dma_buffers): DMA(Direct Memory Access) 버퍼에 사용되는 메모리입니다.
  • 텐서 (trn.host_total_memory_usage.tensors): 텐서에 사용되는 메모리입니다.

Trainium Neuron Core 메모리 사용량 분석

각 NeuronCore에 대한 자세한 메모리 사용량 정보:

  • 상수 (trn.{core_index}.neuroncore_memory_usage.constants)
  • 모델 코드 (trn.{core_index}.neuroncore_memory_usage.model_code)
  • 모델 공유 스크래치패드 (trn.{core_index}.neuroncore_memory_usage.model_shared_scratchpad)
  • 런타임 메모리 (trn.{core_index}.neuroncore_memory_usage.runtime_memory)
  • 텐서 (trn.{core_index}.neuroncore_memory_usage.tensors)

OpenMetrics

커스텀 정규식 기반 메트릭 필터 지원을 통해 OpenMetrics / Prometheus 호환 데이터를 노출하는 외부 엔드포인트에서 메트릭을 캡처하고 기록하여 사용된 엔드포인트에 적용합니다.

이 리포트에서 NVIDIA DCGM-Exporter로 GPU 클러스터 성능을 모니터링하는 특정 경우에 이 기능을 사용하는 방법에 대한 자세한 예제를 참조하세요.

2.4.4.8 - Anonymous mode

W&B 계정 없이 데이터 를 기록하고 시각화하세요.

누구나 쉽게 실행할 수 있는 코드를 게시하고 싶으신가요? 익명 모드를 사용하면 다른 사람이 W&B 계정을 먼저 만들 필요 없이도 코드를 실행하고 W&B 대시보드를 보고 결과를 시각화할 수 있습니다.

다음과 같이 익명 모드에서 결과를 기록하도록 허용합니다.

import wandb

wandb.init(anonymous="allow")

예를 들어, 다음 코드 조각은 W&B로 아티팩트를 생성하고 기록하는 방법을 보여줍니다.

import wandb

run = wandb.init(anonymous="allow")

artifact = wandb.Artifact(name="art1", type="foo")
artifact.add_file(local_path="path/to/file")
run.log_artifact(artifact)

run.finish()

익명 모드의 작동 방식을 보려면 예제 노트북을 사용해보세요.

3 - W&B Weave

Weave는 LLM 애플리케이션을 추적하고 평가하기 위한 가벼운 툴킷입니다. W&B Weave를 사용하여 LLM의 실행 흐름을 시각화하고 검사하고, LLM의 입출력을 분석하고, 중간 결과를 확인하고, 프롬프트와 LLM 체인 설정을 안전하게 저장하고 관리하세요.

W&B Weave를 사용하면 다음을 수행할 수 있습니다.

  • 언어 모델 입력, 출력 및 추적 로그 및 디버그
  • 언어 모델 use case에 대한 엄격하고 공정한 평가 구축
  • 실험에서 평가, production에 이르기까지 LLM 워크플로우에서 생성된 모든 정보 구성

시작 방법

use case에 따라 다음 리소스를 탐색하여 W&B Weave를 시작하세요.

4 - W&B Core

W&B Core는 W&B ModelsW&B Weave 를 지원하는 기본 프레임워크이며, W&B Platform 에 의해 자체적으로 지원됩니다.

W&B Core는 전체 ML 라이프사이클에 걸쳐 기능을 제공합니다. W&B Core를 통해 다음을 수행할 수 있습니다.

4.1 - Artifacts

W&B Artifacts 에 대한 개요, 작동 방식, Artifacts 사용 시작 방법

W&B Artifacts를 사용하여 데이터를 W&B Runs의 입력 및 출력으로 추적하고 버전을 관리하세요. 예를 들어, 모델 트레이닝 run은 데이터셋을 입력으로 사용하고 트레이닝된 모델을 출력으로 생성할 수 있습니다. 하이퍼파라미터, 메타데이터, 메트릭을 run에 기록하고, 아티팩트를 사용하여 모델 트레이닝에 사용된 데이터셋을 입력으로, 결과 모델 체크포인트를 출력으로 기록, 추적 및 버전 관리할 수 있습니다.

유스 케이스

runs의 입력 및 출력으로 전체 ML 워크플로우에서 아티팩트를 사용할 수 있습니다. 데이터셋, 모델 또는 기타 아티팩트를 처리 입력으로 사용할 수 있습니다.

유스 케이스 입력 출력
모델 트레이닝 데이터셋 (트레이닝 및 검증 데이터) 트레이닝된 모델
데이터셋 전처리 데이터셋 (raw 데이터) 데이터셋 (전처리된 데이터)
모델 평가 모델 + 데이터셋 (테스트 데이터) W&B Table
모델 최적화 모델 최적화된 모델

아티팩트 만들기

다음 네 줄의 코드로 아티팩트를 만드세요:

  1. W&B run을 만듭니다.
  2. wandb.Artifact API로 아티팩트 오브젝트를 만듭니다.
  3. 모델 파일 또는 데이터셋과 같은 파일을 아티팩트 오브젝트에 하나 이상 추가합니다.
  4. 아티팩트를 W&B에 기록합니다.

예를 들어, 다음 코드 조각은 dataset.h5 파일을 example_artifact라는 아티팩트에 기록하는 방법을 보여줍니다:

import wandb

run = wandb.init(project="artifacts-example", job_type="add-dataset")
artifact = wandb.Artifact(name="example_artifact", type="dataset")
artifact.add_file(local_path="./dataset.h5", name="training_dataset")
artifact.save()

# "my_data" 아티팩트 버전을 dataset.h5의 데이터와 함께 데이터셋으로 기록합니다.

아티팩트 다운로드

use_artifact 메소드를 사용하여 run에 대한 입력으로 표시할 아티팩트를 지정합니다.

이전 코드 조각에 따라 다음 코드 블록은 training_dataset 아티팩트를 사용하는 방법을 보여줍니다.

artifact = run.use_artifact(
    "training_dataset:latest"
)  # "my_data" 아티팩트를 사용하여 run 오브젝트를 반환합니다.

이것은 아티팩트 오브젝트를 반환합니다.

다음으로, 반환된 오브젝트를 사용하여 아티팩트의 모든 내용을 다운로드합니다.

datadir = (
    artifact.download()
)  # `my_data` 아티팩트 전체를 기본 디렉토리에 다운로드합니다.

다음 단계

  • 아티팩트 버전 관리업데이트 방법에 대해 알아보세요.
  • 자동화를 통해 아티팩트 변경에 대한 응답으로 다운스트림 워크플로우를 트리거하거나 Slack 채널에 알리는 방법에 대해 알아보세요.
  • 트레이닝된 모델을 보관하는 공간인 레지스트리에 대해 알아보세요.
  • Python SDKCLI 참조 가이드를 살펴보세요.

4.1.1 - Create an artifact

W&B 아티팩트를 생성하고 구축합니다. 아티팩트에 하나 이상의 파일 또는 URI 참조를 추가하는 방법을 알아봅니다.

W&B Python SDK를 사용하여 W&B Runs에서 Artifacts를 구성합니다. 파일, 디렉토리, URI 및 병렬 Runs의 파일을 Artifacts에 추가할 수 있습니다. Artifact에 파일을 추가한 후 Artifact를 W&B 서버 또는 자체 개인 서버에 저장합니다.

Amazon S3에 저장된 파일과 같은 외부 파일을 추적하는 방법에 대한 자세한 내용은 외부 파일 추적 페이지를 참조하세요.

Artifact를 구성하는 방법

다음 세 단계로 W&B Artifact를 구성합니다.

1. wandb.Artifact()로 아티팩트 Python 오브젝트를 생성합니다.

wandb.Artifact() 클래스를 초기화하여 아티팩트 오브젝트를 생성합니다. 다음 파라미터를 지정합니다.

  • 이름: Artifact 이름을 지정합니다. 이름은 고유하고, 설명적이며, 기억하기 쉬워야 합니다. Artifact 이름을 사용하여 W&B App UI에서 Artifact를 식별하고, 해당 Artifact를 사용하려는 경우에도 Artifact 이름을 사용합니다.
  • 유형: 유형을 제공합니다. 유형은 간단하고 설명적이어야 하며, 기계 학습 파이프라인의 단일 단계를 나타내야 합니다. 일반적인 Artifact 유형에는 'dataset' 또는 'model'이 있습니다.

Artifact 오브젝트를 초기화할 때 선택적으로 설명과 메타데이터를 제공할 수 있습니다. 사용 가능한 속성 및 파라미터에 대한 자세한 내용은 Python SDK 참조 가이드에서 wandb.Artifact 클래스 정의를 참조하세요.

다음 예제는 데이터셋 Artifact를 만드는 방법을 보여줍니다.

import wandb

artifact = wandb.Artifact(name="<replace>", type="<replace>")

이전 코드 조각에서 문자열 인수를 자신의 이름과 유형으로 바꿉니다.

2. Artifact에 파일을 하나 이상 추가합니다.

Artifact 메소드를 사용하여 파일, 디렉토리, 외부 URI 참조 (예: Amazon S3) 등을 추가합니다. 예를 들어, 단일 텍스트 파일을 추가하려면 add_file 메소드를 사용합니다.

artifact.add_file(local_path="hello_world.txt", name="optional-name")

add_dir 메소드를 사용하여 여러 파일을 추가할 수도 있습니다. 파일을 추가하는 방법에 대한 자세한 내용은 Artifact 업데이트를 참조하세요.

3. Artifact를 W&B 서버에 저장합니다.

마지막으로, Artifact를 W&B 서버에 저장합니다. Artifacts는 Run과 연결되어 있습니다. 따라서 Run 오브젝트의 log_artifact() 메소드를 사용하여 Artifact를 저장합니다.

# W&B Run을 생성합니다. 'job-type'을 바꿉니다.
run = wandb.init(project="artifacts-example", job_type="job-type")

run.log_artifact(artifact)

선택적으로 W&B Run 외부에서 Artifact를 구성할 수 있습니다. 자세한 내용은 외부 파일 추적을 참조하세요.

Artifact에 파일 추가

다음 섹션에서는 다양한 파일 형식과 병렬 Runs에서 Artifacts를 구성하는 방법을 보여줍니다.

다음 예제에서는 여러 파일과 디렉토리 구조가 있는 프로젝트 디렉토리가 있다고 가정합니다.

project-directory
|-- images
|   |-- cat.png
|   +-- dog.png
|-- checkpoints
|   +-- model.h5
+-- model.h5

단일 파일 추가

다음 코드 조각은 단일 로컬 파일을 Artifact에 추가하는 방법을 보여줍니다.

# 단일 파일 추가
artifact.add_file(local_path="path/file.format")

예를 들어, 작업 로컬 디렉토리에 'file.txt'라는 파일이 있다고 가정합니다.

artifact.add_file("path/file.txt")  # `file.txt`로 추가됨

이제 Artifact에 다음 콘텐츠가 있습니다.

file.txt

선택적으로 name 파라미터에 대해 Artifact 내에서 원하는 경로를 전달합니다.

artifact.add_file(local_path="path/file.format", name="new/path/file.format")

Artifact는 다음과 같이 저장됩니다.

new/path/file.txt
API 호출 결과 Artifact
artifact.add_file('model.h5') model.h5
artifact.add_file('checkpoints/model.h5') model.h5
artifact.add_file('model.h5', name='models/mymodel.h5') models/mymodel.h5

여러 파일 추가

다음 코드 조각은 전체 로컬 디렉토리를 Artifact에 추가하는 방법을 보여줍니다.

# 디렉토리를 재귀적으로 추가합니다.
artifact.add_dir(local_path="path/file.format", name="optional-prefix")

다음 API 호출은 다음 Artifact 콘텐츠를 생성합니다.

API 호출 결과 Artifact
artifact.add_dir('images')

cat.png

dog.png

artifact.add_dir('images', name='images')

images/cat.png

images/dog.png

artifact.new_file('hello.txt') hello.txt

URI 참조 추가

Artifacts는 W&B 라이브러리가 처리 방법을 알고 있는 스키마가 URI에 있는 경우 재현성을 위해 체크섬 및 기타 정보를 추적합니다.

add_reference 메소드를 사용하여 외부 URI 참조를 Artifact에 추가합니다. 'uri' 문자열을 자신의 URI로 바꿉니다. 선택적으로 name 파라미터에 대해 Artifact 내에서 원하는 경로를 전달합니다.

# URI 참조 추가
artifact.add_reference(uri="uri", name="optional-name")

Artifacts는 현재 다음 URI 스키마를 지원합니다.

  • http(s)://: HTTP를 통해 액세스할 수 있는 파일의 경로입니다. Artifact는 HTTP 서버가 ETagContent-Length 응답 헤더를 지원하는 경우 etag 형식의 체크섬과 크기 메타데이터를 추적합니다.
  • s3://: S3의 오브젝트 또는 오브젝트 접두사의 경로입니다. Artifact는 참조된 오브젝트에 대해 체크섬 및 버전 관리 정보(버킷에 오브젝트 버전 관리가 활성화된 경우)를 추적합니다. 오브젝트 접두사는 최대 10,000개의 오브젝트까지 접두사 아래의 오브젝트를 포함하도록 확장됩니다.
  • gs://: GCS의 오브젝트 또는 오브젝트 접두사의 경로입니다. Artifact는 참조된 오브젝트에 대해 체크섬 및 버전 관리 정보(버킷에 오브젝트 버전 관리가 활성화된 경우)를 추적합니다. 오브젝트 접두사는 최대 10,000개의 오브젝트까지 접두사 아래의 오브젝트를 포함하도록 확장됩니다.

다음 API 호출은 다음 Artifacts를 생성합니다.

API 호출 결과 Artifact 콘텐츠
artifact.add_reference('s3://my-bucket/model.h5') model.h5
artifact.add_reference('s3://my-bucket/checkpoints/model.h5') model.h5
artifact.add_reference('s3://my-bucket/model.h5', name='models/mymodel.h5') models/mymodel.h5
artifact.add_reference('s3://my-bucket/images')

cat.png

dog.png

artifact.add_reference('s3://my-bucket/images', name='images')

images/cat.png

images/dog.png

병렬 Runs에서 Artifacts에 파일 추가

대규모 데이터셋 또는 분산 트레이닝의 경우 여러 병렬 Runs가 단일 Artifact에 기여해야 할 수 있습니다.

import wandb
import time

# 데모 목적으로 ray를 사용하여 Runs를 병렬로 시작합니다.
# 원하는 방식으로 병렬 Runs를 오케스트레이션할 수 있습니다.
import ray

ray.init()

artifact_type = "dataset"
artifact_name = "parallel-artifact"
table_name = "distributed_table"
parts_path = "parts"
num_parallel = 5

# 병렬 작성기의 각 배치는 자체 고유한 그룹 이름을 가져야 합니다.
group_name = "writer-group-{}".format(round(time.time()))


@ray.remote
def train(i):
    """
    작성기 작업입니다. 각 작성기는 Artifact에 이미지를 하나 추가합니다.
    """
    with wandb.init(group=group_name) as run:
        artifact = wandb.Artifact(name=artifact_name, type=artifact_type)

        # 데이터를 wandb 테이블에 추가합니다. 이 경우 예제 데이터를 사용합니다.
        table = wandb.Table(columns=["a", "b", "c"], data=[[i, i * 2, 2**i]])

        # Artifact의 폴더에 테이블을 추가합니다.
        artifact.add(table, "{}/table_{}".format(parts_path, i))

        # Artifact를 업서트하면 Artifact에 데이터를 만들거나 추가합니다.
        run.upsert_artifact(artifact)


# 병렬로 Runs를 시작합니다.
result_ids = [train.remote(i) for i in range(num_parallel)]

# 모든 작성기가 완료되었는지 확인하기 위해 모든 작성기에 조인합니다.
# Artifact를 완료하기 전에 파일이 추가되었습니다.
ray.get(result_ids)

# 모든 작성기가 완료되면 Artifact를 완료합니다.
# 준비되었음을 표시합니다.
with wandb.init(group=group_name) as run:
    artifact = wandb.Artifact(artifact_name, type=artifact_type)

    # 테이블 폴더를 가리키는 "PartitionTable"을 만듭니다.
    # Artifact에 추가합니다.
    artifact.add(wandb.data_types.PartitionedTable(parts_path), table_name)

    # Finish artifact는 Artifact를 완료하고 향후 "upserts"를 허용하지 않습니다.
    # 이 버전으로.
    run.finish_artifact(artifact)

4.1.2 - Download and use artifacts

여러 프로젝트에서 아티팩트 를 다운로드하고 사용하세요.

W&B 서버에 이미 저장된 Artifacts를 다운로드하여 사용하거나, 필요에 따라 중복 제거를 위해 Artifact 오브젝트를 생성하여 전달합니다.

W&B에 저장된 Artifacts 다운로드 및 사용

W&B Run 내부 또는 외부에서 W&B에 저장된 Artifacts를 다운로드하여 사용합니다. W&B에 이미 저장된 데이터를 내보내거나 업데이트하려면 퍼블릭 API (wandb.Api)를 사용하세요. 자세한 내용은 W&B 퍼블릭 API 레퍼런스 가이드를 참조하세요.

먼저 W&B Python SDK를 임포트합니다. 다음으로 W&B Run을 생성합니다.

import wandb

run = wandb.init(project="<example>", job_type="<job-type>")

use_artifact 메서드를 사용하여 사용하려는 Artifact를 지정합니다. 그러면 run 오브젝트가 반환됩니다. 다음 코드 조각은 에일리어스 'latest'를 가진 'bike-dataset'이라는 Artifact를 지정합니다.

artifact = run.use_artifact("bike-dataset:latest")

반환된 오브젝트를 사용하여 Artifact의 모든 내용을 다운로드합니다.

datadir = artifact.download()

선택적으로 root 파라미터에 경로를 전달하여 Artifact의 내용을 특정 디렉토리로 다운로드할 수 있습니다. 자세한 내용은 Python SDK 레퍼런스 가이드를 참조하세요.

파일의 서브셋만 다운로드하려면 get_path 메서드를 사용하세요.

path = artifact.get_path(name)

이것은 name 경로에 있는 파일만 가져옵니다. 다음과 같은 메서드를 가진 Entry 오브젝트를 반환합니다.

  • Entry.download: name 경로에 있는 Artifact에서 파일을 다운로드합니다.
  • Entry.ref: add_reference가 항목을 참조로 저장한 경우 URI를 반환합니다.

W&B가 처리하는 방법을 아는 스키마가 있는 참조는 Artifact 파일처럼 다운로드됩니다. 자세한 내용은 외부 파일 추적을 참조하세요.

먼저 W&B SDK를 임포트합니다. 다음으로 퍼블릭 API 클래스에서 Artifact를 생성합니다. 해당 Artifact와 연결된 엔티티, 프로젝트, Artifact 및 에일리어스를 제공합니다.

import wandb

api = wandb.Api()
artifact = api.artifact("entity/project/artifact:alias")

반환된 오브젝트를 사용하여 Artifact의 내용을 다운로드합니다.

artifact.download()

선택적으로 root 파라미터에 경로를 전달하여 Artifact의 내용을 특정 디렉토리로 다운로드할 수 있습니다. 자세한 내용은 API 레퍼런스 가이드를 참조하세요.

wandb artifact get 코맨드를 사용하여 W&B 서버에서 Artifact를 다운로드합니다.

$ wandb artifact get project/artifact:alias --root mnist/

Artifact 부분 다운로드

선택적으로 접두사를 기반으로 Artifact의 일부를 다운로드할 수 있습니다. path_prefix 파라미터를 사용하면 단일 파일 또는 하위 폴더의 콘텐츠를 다운로드할 수 있습니다.

artifact = run.use_artifact("bike-dataset:latest")

artifact.download(path_prefix="bike.png") # bike.png만 다운로드

또는 특정 디렉토리에서 파일을 다운로드할 수 있습니다.

artifact.download(path_prefix="images/bikes/") # images/bikes 디렉토리의 파일 다운로드

다른 프로젝트의 Artifact 사용

Artifact 이름과 함께 프로젝트 이름을 지정하여 Artifact를 참조합니다. Artifact 이름과 함께 엔티티 이름을 지정하여 엔티티 간에 Artifacts를 참조할 수도 있습니다.

다음 코드 예제는 다른 프로젝트의 Artifact를 현재 W&B run에 대한 입력으로 쿼리하는 방법을 보여줍니다.

import wandb

run = wandb.init(project="<example>", job_type="<job-type>")
# 다른 프로젝트의 Artifact에 대해 W&B를 쿼리하고 다음으로 표시합니다.
# 이 run에 대한 입력입니다.
artifact = run.use_artifact("my-project/artifact:alias")

# 다른 엔티티의 Artifact를 사용하고 이를 입력으로 표시합니다.
# 이 run에.
artifact = run.use_artifact("my-entity/my-project/artifact:alias")

Artifact를 동시에 구성하고 사용

Artifact를 동시에 구성하고 사용합니다. Artifact 오브젝트를 생성하고 use_artifact에 전달합니다. 이렇게 하면 아직 존재하지 않는 경우 W&B에 Artifact가 생성됩니다. use_artifact API는 idempotent이므로 원하는 만큼 여러 번 호출할 수 있습니다.

import wandb

artifact = wandb.Artifact("reference model")
artifact.add_file("model.h5")
run.use_artifact(artifact)

Artifact 구성에 대한 자세한 내용은 Artifact 구성을 참조하세요.

4.1.3 - Update an artifact

W&B Run 안팎에서 기존 아티팩트 를 업데이트합니다.

원하는 값을 전달하여 아티팩트의 description, metadata, 그리고 alias를 업데이트하세요. W&B 서버에서 아티팩트를 업데이트하려면 save() 메서드를 호출하세요. W&B Run 도중 또는 Run 외부에서 아티팩트를 업데이트할 수 있습니다.

Run 외부에서 아티팩트를 업데이트하려면 W&B Public API(wandb.Api)를 사용하세요. Run 도중에 아티팩트를 업데이트하려면 Artifact API(wandb.Artifact)를 사용하세요.

다음 코드 예제는 wandb.Artifact API를 사용하여 아티팩트의 설명을 업데이트하는 방법을 보여줍니다:

import wandb

run = wandb.init(project="<example>")
artifact = run.use_artifact("<artifact-name>:<alias>")
artifact.description = "<description>"
artifact.save()

다음 코드 예제는 wandb.Api API를 사용하여 아티팩트의 설명을 업데이트하는 방법을 보여줍니다:

import wandb

api = wandb.Api()

artifact = api.artifact("entity/project/artifact:alias")

# Update the description
artifact.description = "My new description"

# Selectively update metadata keys
artifact.metadata["oldKey"] = "new value"

# Replace the metadata entirely
artifact.metadata = {"newKey": "new value"}

# Add an alias
artifact.aliases.append("best")

# Remove an alias
artifact.aliases.remove("latest")

# Completely replace the aliases
artifact.aliases = ["replaced"]

# Persist all artifact modifications
artifact.save()

자세한 내용은 Weights and Biases Artifact API를 참조하십시오.

단일 아티팩트와 같은 방식으로 Artifact 컬렉션을 업데이트할 수도 있습니다:

import wandb
run = wandb.init(project="<example>")
api = wandb.Api()
artifact = api.artifact_collection(type="<type-name>", collection="<collection-name>")
artifact.name = "<new-collection-name>"
artifact.description = "<This is where you'd describe the purpose of your collection.>"
artifact.save()

자세한 내용은 Artifacts Collection 레퍼런스를 참조하십시오.

4.1.4 - Create an artifact alias

W&B Artifacts에 대한 사용자 지정 에일리어스를 만드세요.

에일리어스를 특정 버전의 포인터로 사용하세요. 기본적으로 Run.log_artifact는 기록된 버전에 latest 에일리어스를 추가합니다.

아티팩트를 처음 기록할 때 아티팩트 버전 v0가 생성되어 아티팩트에 연결됩니다. W&B는 동일한 아티팩트에 다시 기록할 때 콘텐츠의 체크섬을 계산합니다. 아티팩트가 변경되면 W&B는 새 버전 v1을 저장합니다.

예를 들어, 트레이닝 스크립트가 데이터셋의 최신 버전을 가져오도록 하려면 해당 아티팩트를 사용할 때 latest를 지정하세요. 다음 코드 예제는 latest라는 에일리어스가 있는 bike-dataset이라는 최신 데이터셋 아티팩트를 다운로드하는 방법을 보여줍니다.

import wandb

run = wandb.init(project="<example-project>")

artifact = run.use_artifact("bike-dataset:latest")

artifact.download()

사용자 지정 에일리어스를 아티팩트 버전에 적용할 수도 있습니다. 예를 들어, 해당 모델 체크포인트가 AP-50 메트릭에서 가장 좋다고 표시하려면 모델 아티팩트를 기록할 때 문자열 'best-ap50'을 에일리어스로 추가하면 됩니다.

artifact = wandb.Artifact("run-3nq3ctyy-bike-model", type="model")
artifact.add_file("model.h5")
run.log_artifact(artifact, aliases=["latest", "best-ap50"])

4.1.5 - Create an artifact version

단일 run 또는 분산된 process 에서 새로운 아티팩트 버전을 만드세요.

단일 run에서 또는 분산된 run과 협업하여 새로운 아티팩트 버전을 만드세요. 선택적으로 증분 아티팩트라고 알려진 이전 버전에서 새로운 아티팩트 버전을 만들 수 있습니다.

처음부터 새로운 아티팩트 버전 만들기

새로운 아티팩트 버전을 만드는 방법에는 단일 run에서 만드는 방법과 분산된 run에서 만드는 두 가지 방법이 있습니다. 이들은 다음과 같이 정의됩니다.

  • 단일 run: 단일 run은 새로운 버전에 대한 모든 데이터를 제공합니다. 이것은 가장 일반적인 경우이며, run이 필요한 데이터를 완전히 재 생성할 때 가장 적합합니다. 예를 들어, 분석을 위해 테이블에 저장된 모델 또는 모델 예측값을 출력합니다.
  • 분산된 run: run 집합이 공동으로 새로운 버전에 대한 모든 데이터를 제공합니다. 이것은 여러 run이 데이터를 생성하는 분산 작업에 가장 적합하며, 종종 병렬로 수행됩니다. 예를 들어, 분산 방식으로 모델을 평가하고 예측값을 출력합니다.

W&B는 프로젝트에 존재하지 않는 이름을 wandb.Artifact API에 전달하면 새로운 아티팩트를 생성하고 v0 에일리어스를 할당합니다. 동일한 아티팩트에 다시 로그할 때 W&B는 콘텐츠의 체크섬을 계산합니다. 아티팩트가 변경되면 W&B는 새 버전 v1을 저장합니다.

W&B는 프로젝트에 있는 기존 아티팩트와 일치하는 이름과 아티팩트 유형을 wandb.Artifact API에 전달하면 기존 아티팩트를 검색합니다. 검색된 아티팩트의 버전은 1보다 큽니다.

단일 run

아티팩트의 모든 파일을 생성하는 단일 run으로 Artifact의 새 버전을 기록합니다. 이 경우는 단일 run이 아티팩트의 모든 파일을 생성할 때 발생합니다.

유스 케이스에 따라 아래 탭 중 하나를 선택하여 run 내부 또는 외부에서 새로운 아티팩트 버전을 만드세요.

W&B run 내에서 아티팩트 버전을 만듭니다.

  1. wandb.init으로 run을 만듭니다.
  2. wandb.Artifact로 새로운 아티팩트를 만들거나 기존 아티팩트를 검색합니다.
  3. .add_file로 아티팩트에 파일을 추가합니다.
  4. .log_artifact로 아티팩트를 run에 기록합니다.
with wandb.init() as run:
    artifact = wandb.Artifact("artifact_name", "artifact_type")

    # `.add`, `.add_file`, `.add_dir`, and `.add_reference`를 사용하여
    # 아티팩트에 파일 및 에셋을 추가합니다.
    artifact.add_file("image1.png")
    run.log_artifact(artifact)

W&B run 외부에서 아티팩트 버전을 만듭니다.

  1. wanb.Artifact로 새로운 아티팩트를 만들거나 기존 아티팩트를 검색합니다.
  2. .add_file로 아티팩트에 파일을 추가합니다.
  3. .save로 아티팩트를 저장합니다.
artifact = wandb.Artifact("artifact_name", "artifact_type")
# `.add`, `.add_file`, `.add_dir`, and `.add_reference`를 사용하여
# 아티팩트에 파일 및 에셋을 추가합니다.
artifact.add_file("image1.png")
artifact.save()

분산된 run

커밋하기 전에 run 컬렉션이 버전에서 공동 작업할 수 있도록 합니다. 이는 하나의 run이 새 버전에 대한 모든 데이터를 제공하는 위에서 설명한 단일 run 모드와 대조됩니다.

다음 예제를 고려하십시오. 서로 다른 run (아래에 Run 1, Run 2Run 3으로 표시됨)은 upsert_artifact를 사용하여 동일한 아티팩트에 다른 이미지 파일을 추가합니다.

Run 1:

with wandb.init() as run:
    artifact = wandb.Artifact("artifact_name", "artifact_type")
    # `.add`, `.add_file`, `.add_dir`, and `.add_reference`를 사용하여
    # 아티팩트에 파일 및 에셋을 추가합니다.
    artifact.add_file("image1.png")
    run.upsert_artifact(artifact, distributed_id="my_dist_artifact")

Run 2:

with wandb.init() as run:
    artifact = wandb.Artifact("artifact_name", "artifact_type")
    # `.add`, `.add_file`, `.add_dir`, and `.add_reference`를 사용하여
    # 아티팩트에 파일 및 에셋을 추가합니다.
    artifact.add_file("image2.png")
    run.upsert_artifact(artifact, distributed_id="my_dist_artifact")

Run 3

Run 1과 Run 2가 완료된 후 실행해야 합니다. finish_artifact를 호출하는 Run은 아티팩트에 파일을 포함할 수 있지만 필요하지는 않습니다.

with wandb.init() as run:
    artifact = wandb.Artifact("artifact_name", "artifact_type")
    # 아티팩트에 파일 및 에셋을 추가합니다.
    # `.add`, `.add_file`, `.add_dir`, and `.add_reference`
    artifact.add_file("image3.png")
    run.finish_artifact(artifact, distributed_id="my_dist_artifact")

기존 버전에서 새로운 아티팩트 버전 만들기

변경되지 않은 파일을 다시 인덱싱할 필요 없이 이전 아티팩트 버전에서 파일의 서브셋을 추가, 수정 또는 제거합니다. 이전 아티팩트 버전에서 파일의 서브셋을 추가, 수정 또는 제거하면 증분 아티팩트라고 하는 새로운 아티팩트 버전이 생성됩니다.

다음은 발생할 수 있는 각 유형의 증분 변경에 대한 몇 가지 시나리오입니다.

  • add: 새로운 배치를 수집한 후 데이터셋에 새로운 파일 서브셋을 주기적으로 추가합니다.
  • remove: 여러 중복 파일을 발견했고 아티팩트에서 제거하고 싶습니다.
  • update: 파일 서브셋에 대한 주석을 수정했고 이전 파일을 올바른 파일로 바꾸고 싶습니다.

처음부터 아티팩트를 만들어 증분 아티팩트와 동일한 기능을 수행할 수 있습니다. 그러나 처음부터 아티팩트를 만들면 로컬 디스크에 아티팩트의 모든 콘텐츠가 있어야 합니다. 증분 변경을 수행할 때 이전 아티팩트 버전의 파일을 변경하지 않고도 단일 파일을 추가, 제거 또는 수정할 수 있습니다.

아래 절차에 따라 아티팩트를 증분 방식으로 변경합니다.

  1. 증분 변경을 수행할 아티팩트 버전을 가져옵니다.
saved_artifact = run.use_artifact("my_artifact:latest")
client = wandb.Api()
saved_artifact = client.artifact("my_artifact:latest")
  1. 다음으로 초안을 만듭니다.
draft_artifact = saved_artifact.new_draft()
  1. 다음 버전에서 보고 싶은 증분 변경 사항을 수행합니다. 기존 항목을 추가, 제거 또는 수정할 수 있습니다.

각 변경을 수행하는 방법에 대한 예제는 다음 탭 중 하나를 선택하십시오.

add_file 메소드를 사용하여 기존 아티팩트 버전에 파일을 추가합니다.

draft_artifact.add_file("file_to_add.txt")

remove 메소드를 사용하여 기존 아티팩트 버전에서 파일을 제거합니다.

draft_artifact.remove("file_to_remove.txt")

초안에서 이전 콘텐츠를 제거하고 새 콘텐츠를 다시 추가하여 콘텐츠를 수정하거나 바꿉니다.

draft_artifact.remove("modified_file.txt")
draft_artifact.add_file("modified_file.txt")
  1. 마지막으로 변경 사항을 기록하거나 저장합니다. 다음 탭에서는 W&B run 내부 및 외부에서 변경 사항을 저장하는 방법을 보여줍니다. 유스 케이스에 적합한 탭을 선택하세요.
run.log_artifact(draft_artifact)
draft_artifact.save()

모두 합치면 위의 코드 예제는 다음과 같습니다.

with wandb.init(job_type="modify dataset") as run:
    saved_artifact = run.use_artifact(
        "my_artifact:latest"
    )  # 아티팩트를 가져와서 run에 입력합니다.
    draft_artifact = saved_artifact.new_draft()  # 초안 버전을 만듭니다.

    # 초안 버전에서 파일의 서브셋을 수정합니다.
    draft_artifact.add_file("file_to_add.txt")
    draft_artifact.remove("dir_to_remove/")
    run.log_artifact(
        artifact
    )  # 변경 사항을 기록하여 새 버전을 만들고 run에 대한 출력으로 표시합니다.
client = wandb.Api()
saved_artifact = client.artifact("my_artifact:latest")  # 아티팩트를 로드합니다.
draft_artifact = saved_artifact.new_draft()  # 초안 버전을 만듭니다.

# 초안 버전에서 파일의 서브셋을 수정합니다.
draft_artifact.remove("deleted_file.txt")
draft_artifact.add_file("modified_file.txt")
draft_artifact.save()  # 초안에 변경 사항을 커밋합니다.

4.1.6 - Track external files

Amazon S3 버킷, GCS 버킷, HTTP 파일 서버 또는 NFS 공유와 같이 W&B 외부에 저장된 파일을 추적합니다.

reference artifacts 를 사용하여 W&B 시스템 외부 (예: Amazon S3 버킷, GCS 버킷, Azure Blob, HTTP 파일 서버 또는 NFS 공유)에 저장된 파일을 추적합니다. W&B CLI를 사용하여 W&B Run 외부에서 아티팩트를 기록합니다.

Run 외부에서 아티팩트 기록

W&B는 run 외부에서 아티팩트를 기록할 때 run을 생성합니다. 각 아티팩트는 run에 속하며, run은 프로젝트에 속합니다. 아티팩트 (버전)는 컬렉션에도 속하며, 유형이 있습니다.

wandb artifact put 코맨드를 사용하여 W&B run 외부의 W&B 서버에 아티팩트를 업로드합니다. 아티팩트가 속할 프로젝트 이름과 아티팩트 이름 (project/artifact_name)을 제공합니다. 선택적으로 유형 (TYPE)을 제공합니다. 아래 코드 조각에서 PATH를 업로드할 아티팩트의 파일 경로로 바꿉니다.

$ wandb artifact put --name project/artifact_name --type TYPE PATH

지정한 프로젝트가 존재하지 않으면 W&B가 새 프로젝트를 생성합니다. 아티팩트 다운로드 방법에 대한 자세한 내용은 아티팩트 다운로드 및 사용을 참조하세요.

W&B 외부에서 아티팩트 추적

데이터셋 버전 관리 및 모델 이력에 W&B Artifacts를 사용하고, reference artifacts 를 사용하여 W&B 서버 외부에서 저장된 파일을 추적합니다. 이 모드에서 아티팩트는 URL, 크기 및 체크섬과 같은 파일에 대한 메타데이터만 저장합니다. 기본 데이터는 시스템을 벗어나지 않습니다. 파일을 W&B 서버에 저장하는 방법에 대한 자세한 내용은 빠른 시작을 참조하세요.

다음은 reference artifacts 를 구성하는 방법과 이를 워크플로우에 통합하는 가장 좋은 방법을 설명합니다.

Amazon S3 / GCS / Azure Blob Storage 참조

클라우드 스토리지 버킷에서 참조를 추적하기 위해 데이터셋 및 모델 버전 관리에 W&B Artifacts를 사용합니다. 아티팩트 참조를 사용하면 기존 스토리지 레이아웃을 수정하지 않고도 버킷 위에 원활하게 추적 기능을 레이어링할 수 있습니다.

Artifacts는 기본 클라우드 스토리지 공급 업체 (예: AWS, GCP 또는 Azure)를 추상화합니다. 다음 섹션에 설명된 정보는 Amazon S3, Google Cloud Storage 및 Azure Blob Storage에 균일하게 적용됩니다.

다음과 같은 구조의 버킷이 있다고 가정합니다.

s3://my-bucket
+-- datasets/
|		+-- mnist/
+-- models/
		+-- cnn/

mnist/ 아래에 이미지 모음인 데이터셋이 있습니다. 아티팩트로 추적해 보겠습니다.

import wandb

run = wandb.init()
artifact = wandb.Artifact("mnist", type="dataset")
artifact.add_reference("s3://my-bucket/datasets/mnist")
run.log_artifact(artifact)

새 reference artifact 인 mnist:latest는 일반 아티팩트와 유사하게 보이고 작동합니다. 유일한 차이점은 아티팩트가 ETag, 크기 및 버전 ID (오브젝트 버전 관리가 버킷에서 활성화된 경우)와 같은 S3/GCS/Azure 오브젝트에 대한 메타데이터로만 구성된다는 것입니다.

W&B는 기본 메커니즘을 사용하여 사용하는 클라우드 공급자를 기반으로 자격 증명을 찾습니다. 사용된 자격 증명에 대한 자세한 내용은 클라우드 공급자의 문서를 참조하십시오.

클라우드 공급자 자격 증명 문서
AWS Boto3 문서
GCP Google Cloud 문서
Azure Azure 문서

AWS의 경우 버킷이 구성된 사용자의 기본 리전에 있지 않으면 AWS_REGION 환경 변수를 버킷 리전과 일치하도록 설정해야 합니다.

일반 아티팩트와 유사하게 이 아티팩트와 상호 작용합니다. App UI에서 파일 브라우저를 사용하여 reference artifact 의 내용을 살펴보고 전체 종속성 그래프를 탐색하고 아티팩트의 버전 관리된 기록을 스캔할 수 있습니다.

reference artifact 다운로드

import wandb

run = wandb.init()
artifact = run.use_artifact("mnist:latest", type="dataset")
artifact_dir = artifact.download()

W&B는 아티팩트가 기록될 때 기록된 메타데이터를 사용하여 reference artifact 를 다운로드할 때 기본 버킷에서 파일을 검색합니다. 버킷에서 오브젝트 버전 관리를 활성화한 경우 W&B는 아티팩트가 기록될 당시의 파일 상태에 해당하는 오브젝트 버전을 검색합니다. 즉, 버킷 내용을 발전시키더라도 아티팩트가 트레이닝 당시 버킷의 스냅샷 역할을 하므로 지정된 모델이 트레이닝된 데이터의 정확한 반복을 계속 가리킬 수 있습니다.

함께 묶기

다음 코드 예제는 Amazon S3, GCS 또는 Azure에서 트레이닝 작업에 제공되는 데이터셋을 추적하는 데 사용할 수 있는 간단한 워크플로우를 보여줍니다.

import wandb

run = wandb.init()

artifact = wandb.Artifact("mnist", type="dataset")
artifact.add_reference("s3://my-bucket/datasets/mnist")

# 아티팩트를 추적하고
# 이 run에 대한 입력으로 표시합니다. 새 아티팩트 버전은
# 버킷의 파일이 변경된 경우에만 기록됩니다.
run.use_artifact(artifact)

artifact_dir = artifact.download()

# 여기서 트레이닝을 수행합니다...

모델을 추적하기 위해 트레이닝 스크립트가 모델 파일을 버킷에 업로드한 후 모델 아티팩트를 기록할 수 있습니다.

import boto3
import wandb

run = wandb.init()

# 여기서 트레이닝을 수행합니다...

s3_client = boto3.client("s3")
s3_client.upload_file("my_model.h5", "my-bucket", "models/cnn/my_model.h5")

model_artifact = wandb.Artifact("cnn", type="model")
model_artifact.add_reference("s3://my-bucket/models/cnn/")
run.log_artifact(model_artifact)

파일 시스템 참조

데이터셋에 빠르게 엑세스하기 위한 또 다른 일반적인 패턴은 트레이닝 작업을 실행하는 모든 머신에서 원격 파일 시스템에 대한 NFS 마운트 지점을 노출하는 것입니다. 트레이닝 스크립트의 관점에서 파일이 로컬 파일 시스템에 있는 것처럼 보이기 때문에 클라우드 스토리지 버킷보다 훨씬 더 간단한 솔루션이 될 수 있습니다. 다행히 이러한 사용 편의성은 파일 시스템에 대한 참조를 추적하기 위해 Artifacts를 사용하는 데까지 확장됩니다 (마운트 여부와 관계없이).

다음과 같은 구조로 /mount에 파일 시스템이 마운트되어 있다고 가정합니다.

mount
+-- datasets/
|		+-- mnist/
+-- models/
		+-- cnn/

mnist/ 아래에 이미지 모음인 데이터셋이 있습니다. 아티팩트로 추적해 보겠습니다.

import wandb

run = wandb.init()
artifact = wandb.Artifact("mnist", type="dataset")
artifact.add_reference("file:///mount/datasets/mnist/")
run.log_artifact(artifact)

기본적으로 W&B는 디렉토리에 대한 참조를 추가할 때 10,000개의 파일 제한을 적용합니다. add_reference 호출에서 max_objects=를 지정하여 이 제한을 조정할 수 있습니다.

URL에서 슬래시가 세 개 있다는 점에 유의하십시오. 첫 번째 구성 요소는 파일 시스템 참조 사용을 나타내는 file:// 접두사입니다. 두 번째는 데이터셋 경로인 /mount/datasets/mnist/입니다.

결과 아티팩트인 mnist:latest는 일반 아티팩트와 마찬가지로 보이고 작동합니다. 유일한 차이점은 아티팩트가 크기 및 MD5 체크섬과 같은 파일에 대한 메타데이터로만 구성된다는 것입니다. 파일 자체는 시스템을 벗어나지 않습니다.

일반 아티팩트와 마찬가지로 이 아티팩트와 상호 작용할 수 있습니다. UI에서 파일 브라우저를 사용하여 reference artifact 의 내용을 찾아보고 전체 종속성 그래프를 탐색하고 아티팩트의 버전 관리된 기록을 스캔할 수 있습니다. 그러나 데이터 자체가 아티팩트에 포함되어 있지 않으므로 UI는 이미지, 오디오 등과 같은 풍부한 미디어를 렌더링할 수 없습니다.

reference artifact 를 다운로드하는 것은 간단합니다.

import wandb

run = wandb.init()
artifact = run.use_artifact("entity/project/mnist:latest", type="dataset")
artifact_dir = artifact.download()

파일 시스템 참조의 경우 download() 작업은 참조된 경로에서 파일을 복사하여 아티팩트 디렉토리를 구성합니다. 위의 예에서 /mount/datasets/mnist의 내용은 artifacts/mnist:v0/ 디렉토리에 복사됩니다. 아티팩트에 덮어쓴 파일에 대한 참조가 포함되어 있는 경우 아티팩트를 더 이상 재구성할 수 없으므로 download()에서 오류가 발생합니다.

모든 것을 함께 놓으면 다음은 마운트된 파일 시스템에서 트레이닝 작업에 제공되는 데이터셋을 추적하는 데 사용할 수 있는 간단한 워크플로우입니다.

import wandb

run = wandb.init()

artifact = wandb.Artifact("mnist", type="dataset")
artifact.add_reference("file:///mount/datasets/mnist/")

# 아티팩트를 추적하고
# 이 run에 대한 입력으로 표시합니다. 새 아티팩트 버전은
# 디렉토리 아래의 파일이
# 변경되었습니다.
run.use_artifact(artifact)

artifact_dir = artifact.download()

# 여기서 트레이닝을 수행합니다...

모델을 추적하기 위해 트레이닝 스크립트가 모델 파일을 마운트 지점에 쓴 후 모델 아티팩트를 기록할 수 있습니다.

import wandb

run = wandb.init()

# 여기서 트레이닝을 수행합니다...

# 디스크에 모델 쓰기

model_artifact = wandb.Artifact("cnn", type="model")
model_artifact.add_reference("file:///mount/cnn/my_model.h5")
run.log_artifact(model_artifact)

4.1.7 - Manage data

4.1.7.1 - Delete an artifact

App UI를 통해 대화형으로 또는 W&B SDK를 통해 프로그래밍 방식으로 아티팩트 를 삭제합니다.

App UI 또는 W&B SDK를 사용하여 아티팩트를 대화형으로 삭제할 수 있습니다. 아티팩트를 삭제하면 W&B는 해당 아티팩트를 소프트 삭제로 표시합니다. 즉, 아티팩트는 삭제 대상으로 표시되지만 파일은 즉시 스토리지에서 삭제되지 않습니다.

아티팩트의 내용은 정기적으로 실행되는 가비지 수집 프로세스가 삭제 대상으로 표시된 모든 아티팩트를 검토할 때까지 소프트 삭제 또는 삭제 대기 상태로 유지됩니다. 가비지 수집 프로세스는 아티팩트 및 관련 파일이 이전 또는 이후 아티팩트 버전에서 사용되지 않는 경우 스토리지에서 관련 파일을 삭제합니다.

이 페이지의 섹션에서는 특정 아티팩트 버전을 삭제하는 방법, 아티팩트 컬렉션을 삭제하는 방법, 에일리어스가 있거나 없는 아티팩트를 삭제하는 방법 등을 설명합니다. TTL 정책을 사용하여 W&B에서 아티팩트가 삭제되는 시점을 예약할 수 있습니다. 자세한 내용은 아티팩트 TTL 정책으로 데이터 보존 관리을 참조하세요.

아티팩트 버전 삭제

아티팩트 버전을 삭제하려면 다음을 수행하세요.

  1. 아티팩트 이름을 선택합니다. 그러면 아티팩트 보기가 확장되고 해당 아티팩트와 연결된 모든 아티팩트 버전이 나열됩니다.
  2. 아티팩트 목록에서 삭제할 아티팩트 버전을 선택합니다.
  3. 워크스페이스 오른쪽에 있는 케밥 드롭다운을 선택합니다.
  4. 삭제를 선택합니다.

아티팩트 버전은 delete() 메소드를 통해 프로그래밍 방식으로 삭제할 수도 있습니다. 아래 예시를 참조하세요.

에일리어스가 있는 여러 아티팩트 버전 삭제

다음 코드 예제는 에일리어스가 연결된 아티팩트를 삭제하는 방법을 보여줍니다. 아티팩트를 만든 엔터티, 프로젝트 이름 및 run ID를 제공합니다.

import wandb

run = api.run("entity/project/run_id")

for artifact in run.logged_artifacts():
    artifact.delete()

아티팩트에 에일리어스가 하나 이상 있는 경우 delete_aliases 파라미터를 부울 값 True로 설정하여 에일리어스를 삭제합니다.

import wandb

run = api.run("entity/project/run_id")

for artifact in run.logged_artifacts():
    # Set delete_aliases=True in order to delete
    # artifacts with one more aliases
    artifact.delete(delete_aliases=True)

특정 에일리어스가 있는 여러 아티팩트 버전 삭제

다음 코드는 특정 에일리어스가 있는 여러 아티팩트 버전을 삭제하는 방법을 보여줍니다. 아티팩트를 만든 엔터티, 프로젝트 이름 및 run ID를 제공합니다. 삭제 로직을 직접 작성하세요.

import wandb

runs = api.run("entity/project_name/run_id")

# Delete artifact ith alias 'v3' and 'v4
for artifact_version in runs.logged_artifacts():
    # Replace with your own deletion logic.
    if artifact_version.name[-2:] == "v3" or artifact_version.name[-2:] == "v4":
        artifact.delete(delete_aliases=True)

에일리어스가 없는 아티팩트의 모든 버전 삭제

다음 코드 조각은 에일리어스가 없는 아티팩트의 모든 버전을 삭제하는 방법을 보여줍니다. wandb.Apiprojectentity 키에 대한 프로젝트 및 엔터티 이름을 각각 제공합니다. <>를 아티팩트 이름으로 바꿉니다.

import wandb

# Provide your entity and a project name when you
# use wandb.Api methods.
api = wandb.Api(overrides={"project": "project", "entity": "entity"})

artifact_type, artifact_name = "<>"  # provide type and name
for v in api.artifact_versions(artifact_type, artifact_name):
    # Clean up versions that don't have an alias such as 'latest'.
    # NOTE: You can put whatever deletion logic you want here.
    if len(v.aliases) == 0:
        v.delete()

아티팩트 컬렉션 삭제

아티팩트 컬렉션을 삭제하려면 다음을 수행하세요.

  1. 삭제할 아티팩트 컬렉션으로 이동하여 마우스를 올려 놓습니다.
  2. 아티팩트 컬렉션 이름 옆에 있는 케밥 드롭다운을 선택합니다.
  3. 삭제를 선택합니다.

delete() 메소드를 사용하여 프로그래밍 방식으로 아티팩트 컬렉션을 삭제할 수도 있습니다. wandb.Apiprojectentity 키에 대한 프로젝트 및 엔터티 이름을 각각 제공합니다.

import wandb

# Provide your entity and a project name when you
# use wandb.Api methods.
api = wandb.Api(overrides={"project": "project", "entity": "entity"})
collection = api.artifact_collection(
    "<artifact_type>", "entity/project/artifact_collection_name"
)
collection.delete()

W&B 호스팅 방식에 따라 가비지 수집을 활성화하는 방법

W&B의 공유 클라우드를 사용하는 경우 가비지 수집은 기본적으로 활성화됩니다. W&B를 호스팅하는 방식에 따라 가비지 수집을 활성화하기 위해 추가 단계를 수행해야 할 수 있습니다.

  • GORILLA_ARTIFACT_GC_ENABLED 환경 변수를 true로 설정합니다. GORILLA_ARTIFACT_GC_ENABLED=true
  • AWS, GCP 또는 Minio와 같은 다른 스토리지 공급자를 사용하는 경우 버킷 버전 관리를 활성화합니다. Azure를 사용하는 경우 소프트 삭제를 활성화합니다.

다음 표는 배포 유형에 따라 가비지 수집을 활성화하기 위한 요구 사항을 충족하는 방법을 설명합니다.

X는 요구 사항을 충족해야 함을 나타냅니다.

Environment variable Enable versioning
Shared cloud
Shared cloud with secure storage connector X
Dedicated cloud
Dedicated cloud with secure storage connector X
Customer-managed cloud X X
Customer managed on-prem X X

4.1.7.2 - Manage artifact data retention

TTL(Time to live) 정책

W&B Artifact time-to-live (TTL) 정책을 사용하여 Artifacts가 W&B에서 삭제되는 시점을 예약하세요. 아티팩트를 삭제하면 W&B는 해당 아티팩트를 soft-delete 로 표시합니다. 즉, 아티팩트는 삭제 대상으로 표시되지만 파일은 즉시 스토리지에서 삭제되지 않습니다. W&B에서 아티팩트를 삭제하는 방법에 대한 자세한 내용은 아티팩트 삭제 페이지를 참조하세요.

비디오 튜토리얼에서 W&B 앱에서 Artifacts TTL로 데이터 보존을 관리하는 방법을 알아보세요.

자동 생성된 Artifacts

사용자가 생성한 아티팩트만 TTL 정책을 사용할 수 있습니다. W&B에서 자동으로 생성된 아티팩트에는 TTL 정책을 설정할 수 없습니다.

다음 아티팩트 유형은 자동 생성된 Artifacts를 나타냅니다.

  • run_table
  • code
  • job
  • wandb-* 로 시작하는 모든 아티팩트 유형

W&B 플랫폼 또는 프로그래밍 방식으로 아티팩트의 유형을 확인할 수 있습니다.

import wandb

run = wandb.init(project="<my-project-name>")
artifact = run.use_artifact(artifact_or_name="<my-artifact-name>")
print(artifact.type)

<> 로 묶인 값을 자신의 값으로 바꿉니다.

TTL 정책을 편집하고 설정할 수 있는 사람 정의

팀 내에서 TTL 정책을 설정하고 편집할 수 있는 사람을 정의합니다. 팀 관리자에게만 TTL 권한을 부여하거나 팀 관리자와 팀 멤버 모두에게 TTL 권한을 부여할 수 있습니다.

  1. 팀 프로필 페이지로 이동합니다.
  2. 설정 탭을 선택합니다.
  3. Artifacts time-to-live (TTL) 섹션으로 이동합니다.
  4. TTL 권한 드롭다운에서 TTL 정책을 설정하고 편집할 수 있는 사람을 선택합니다.
  5. 설정 검토 및 저장을 클릭합니다.
  6. 변경 사항을 확인하고 설정 저장을 선택합니다.

TTL 정책 만들기

아티팩트를 생성할 때 또는 아티팩트가 생성된 후 소급하여 아티팩트에 대한 TTL 정책을 설정합니다.

아래의 모든 코드 조각에서 <> 로 묶인 콘텐츠를 자신의 정보로 바꿔 코드 조각을 사용하세요.

아티팩트를 생성할 때 TTL 정책 설정

W&B Python SDK를 사용하여 아티팩트를 생성할 때 TTL 정책을 정의합니다. TTL 정책은 일반적으로 일 단위로 정의됩니다.

단계는 다음과 같습니다.

  1. 아티팩트 만들기.
  2. 파일, 디렉토리 또는 참조와 같은 아티팩트에 콘텐츠 추가.
  3. Python 표준 라이브러리의 일부인 datetime.timedelta 데이터 유형으로 TTL 시간 제한을 정의합니다.
  4. 아티팩트 로깅.

다음 코드 조각은 아티팩트를 만들고 TTL 정책을 설정하는 방법을 보여줍니다.

import wandb
from datetime import timedelta

run = wandb.init(project="<my-project-name>", entity="<my-entity>")
artifact = wandb.Artifact(name="<artifact-name>", type="<type>")
artifact.add_file("<my_file>")

artifact.ttl = timedelta(days=30)  # TTL 정책 설정
run.log_artifact(artifact)

앞의 코드 조각은 아티팩트의 TTL 정책을 30일로 설정합니다. 즉, W&B는 30일 후에 아티팩트를 삭제합니다.

아티팩트를 만든 후 TTL 정책 설정 또는 편집

W&B App UI 또는 W&B Python SDK를 사용하여 이미 존재하는 아티팩트에 대한 TTL 정책을 정의합니다.

  1. 아티팩트 가져오기.
  2. 시간 델타를 아티팩트의 ttl 속성에 전달합니다.
  3. save 메소드로 아티팩트를 업데이트합니다.

다음 코드 조각은 아티팩트에 대한 TTL 정책을 설정하는 방법을 보여줍니다.

import wandb
from datetime import timedelta

artifact = run.use_artifact("<my-entity/my-project/my-artifact:alias>")
artifact.ttl = timedelta(days=365 * 2)  # 2년 후에 삭제
artifact.save()

앞의 코드 예제는 TTL 정책을 2년으로 설정합니다.

  1. W&B App UI에서 W&B 프로젝트로 이동합니다.
  2. 왼쪽 패널에서 아티팩트 아이콘을 선택합니다.
  3. 아티팩트 목록에서 TTL 정책을 편집할 아티팩트 유형을 확장합니다.
  4. TTL 정책을 편집할 아티팩트 버전을 선택합니다.
  5. 버전 탭을 클릭합니다.
  6. 드롭다운에서 TTL 정책 편집을 선택합니다.
  7. 나타나는 모달 내에서 TTL 정책 드롭다운에서 Custom을 선택합니다.
  8. TTL duration 필드 내에서 TTL 정책을 일 단위로 설정합니다.
  9. TTL 업데이트 버튼을 선택하여 변경 사항을 저장합니다.

팀에 대한 기본 TTL 정책 설정

팀에 대한 기본 TTL 정책을 설정합니다. 기본 TTL 정책은 각각 생성 날짜를 기준으로 기존 및 향후 모든 아티팩트에 적용됩니다. 기존 버전 수준 TTL 정책이 있는 아티팩트는 팀의 기본 TTL의 영향을 받지 않습니다.

  1. 팀 프로필 페이지로 이동합니다.
  2. 설정 탭을 선택합니다.
  3. Artifacts time-to-live (TTL) 섹션으로 이동합니다.
  4. 팀의 기본 TTL 정책 설정을 클릭합니다.
  5. Duration 필드 내에서 TTL 정책을 일 단위로 설정합니다.
  6. 설정 검토 및 저장을 클릭합니다. 7/ 변경 사항을 확인한 다음 설정 저장을 선택합니다.

run 외부에서 TTL 정책 설정

공용 API를 사용하여 run을 가져오지 않고 아티팩트를 검색하고 TTL 정책을 설정합니다. TTL 정책은 일반적으로 일 단위로 정의됩니다.

다음 코드 샘플은 공용 API를 사용하여 아티팩트를 가져오고 TTL 정책을 설정하는 방법을 보여줍니다.

api = wandb.Api()

artifact = api.artifact("entity/project/artifact:alias")

artifact.ttl = timedelta(days=365)  # 1년 후에 삭제

artifact.save()

TTL 정책 비활성화

W&B Python SDK 또는 W&B App UI를 사용하여 특정 아티팩트 버전에 대한 TTL 정책을 비활성화합니다.

  1. 아티팩트 가져오기.
  2. 아티팩트의 ttl 속성을 None 으로 설정합니다.
  3. save 메소드로 아티팩트를 업데이트합니다.

다음 코드 조각은 아티팩트에 대한 TTL 정책을 끄는 방법을 보여줍니다.

artifact = run.use_artifact("<my-entity/my-project/my-artifact:alias>")
artifact.ttl = None
artifact.save()
  1. W&B App UI에서 W&B 프로젝트로 이동합니다.
  2. 왼쪽 패널에서 아티팩트 아이콘을 선택합니다.
  3. 아티팩트 목록에서 TTL 정책을 편집할 아티팩트 유형을 확장합니다.
  4. TTL 정책을 편집할 아티팩트 버전을 선택합니다.
  5. 버전 탭을 클릭합니다.
  6. 레지스트리에 연결 버튼 옆에 있는 미트볼 UI 아이콘을 클릭합니다.
  7. 드롭다운에서 TTL 정책 편집을 선택합니다.
  8. 나타나는 모달 내에서 TTL 정책 드롭다운에서 비활성화를 선택합니다.
  9. TTL 업데이트 버튼을 선택하여 변경 사항을 저장합니다.

TTL 정책 보기

Python SDK 또는 W&B App UI를 사용하여 아티팩트에 대한 TTL 정책을 봅니다.

인쇄 문을 사용하여 아티팩트의 TTL 정책을 봅니다. 다음 예제는 아티팩트를 검색하고 TTL 정책을 보는 방법을 보여줍니다.

artifact = run.use_artifact("<my-entity/my-project/my-artifact:alias>")
print(artifact.ttl)

W&B App UI를 사용하여 아티팩트에 대한 TTL 정책을 봅니다.

  1. https://wandb.ai 에서 W&B 앱으로 이동합니다.
  2. W&B 프로젝트로 이동합니다.
  3. 프로젝트 내에서 왼쪽 사이드바에서 Artifacts 탭을 선택합니다.
  4. 컬렉션을 클릭합니다.

컬렉션 보기 내에서 선택한 컬렉션의 모든 아티팩트를 볼 수 있습니다. Time to Live 열 내에서 해당 아티팩트에 할당된 TTL 정책이 표시됩니다.

4.1.7.3 - Manage artifact storage and memory allocation

W&B Artifacts 의 스토리지, 메모리 할당을 관리합니다.

W&B는 기본적으로 미국에 위치한 개인 Google Cloud Storage 버킷에 아티팩트 파일을 저장합니다. 모든 파일은 저장 및 전송 중에 암호화됩니다.

민감한 파일의 경우, Private Hosting을 설정하거나 reference artifacts를 사용하는 것이 좋습니다.

트레이닝 중에 W&B는 로그, 아티팩트 및 설정 파일을 다음 로컬 디렉토리에 로컬로 저장합니다.

파일 기본 위치 기본 위치를 변경하려면 다음을 설정하십시오:
logs ./wandb wandb.initdir 또는 WANDB_DIR 환경 변수를 설정하십시오.
artifacts ~/.cache/wandb WANDB_CACHE_DIR 환경 변수
configs ~/.config/wandb WANDB_CONFIG_DIR 환경 변수
업로드를 위한 Staging artifacts ~/.cache/wandb-data/ WANDB_DATA_DIR 환경 변수
다운로드된 artifacts ./artifacts WANDB_ARTIFACT_DIR 환경 변수

환경 변수를 사용하여 W&B를 구성하는 방법에 대한 전체 가이드는 환경 변수 참조를 참조하십시오.

로컬 아티팩트 캐시 정리

W&B는 공통 파일을 공유하는 버전 간의 다운로드 속도를 높이기 위해 아티팩트 파일을 캐시합니다. 시간이 지남에 따라 이 캐시 디렉토리가 커질 수 있습니다. wandb artifact cache cleanup 명령을 실행하여 캐시를 정리하고 최근에 사용되지 않은 파일을 제거하십시오.

다음 코드 조각은 캐시 크기를 1GB로 제한하는 방법을 보여줍니다. 코드 조각을 복사하여 터미널에 붙여넣으십시오:

$ wandb artifact cache cleanup 1GB

4.1.8 - Explore artifact graphs

자동으로 생성된 직접 비순환 W&B Artifact 그래프를 트래버스합니다.

W&B는 주어진 run이 기록한 Artifacts와 주어진 run이 사용하는 Artifacts를 자동으로 추적합니다. 이러한 Artifacts에는 데이터셋, 모델, 평가 결과 등이 포함될 수 있습니다. Artifact의 계보를 탐색하여 기계 학습 라이프사이클 전반에 걸쳐 생성된 다양한 Artifacts를 추적하고 관리할 수 있습니다.

계보

Artifact의 계보를 추적하면 다음과 같은 주요 이점이 있습니다.

  • 재현성: 모든 Artifacts의 계보를 추적함으로써 팀은 실험, 모델 및 결과를 재현할 수 있습니다. 이는 디버깅, 실험 및 기계 학습 모델 검증에 필수적입니다.

  • 버전 관리: Artifact 계보는 Artifacts의 버전 관리와 시간 경과에 따른 변경 사항 추적을 포함합니다. 이를 통해 팀은 필요한 경우 이전 버전의 데이터 또는 모델로 롤백할 수 있습니다.

  • 감사: Artifacts 및 해당 변환에 대한 자세한 기록을 통해 조직은 규제 및 거버넌스 요구 사항을 준수할 수 있습니다.

  • 협업 및 지식 공유: Artifact 계보는 시도에 대한 명확한 기록과 무엇이 작동했고 무엇이 작동하지 않았는지 제공함으로써 팀 멤버 간의 더 나은 협업을 촉진합니다. 이는 노력의 중복을 피하고 개발 프로세스를 가속화하는 데 도움이 됩니다.

Artifact의 계보 찾기

Artifacts 탭에서 Artifact를 선택하면 해당 Artifact의 계보를 볼 수 있습니다. 이 그래프 보기는 파이프라인의 일반적인 개요를 보여줍니다.

Artifact 그래프를 보려면:

  1. W&B App UI에서 프로젝트로 이동합니다.
  2. 왼쪽 패널에서 Artifact 아이콘을 선택합니다.
  3. Lineage를 선택합니다.
Getting to the Lineage tab

계보 그래프 탐색

제공하는 Artifact 또는 job 유형은 이름 앞에 표시되며, Artifacts는 파란색 아이콘으로, runs는 녹색 아이콘으로 표시됩니다. 화살표는 그래프에서 run 또는 Artifact의 입력 및 출력을 자세히 설명합니다.

Run and artifact nodes Inputs and outputs

더 자세한 보기를 보려면 개별 Artifact 또는 run을 클릭하여 특정 오브젝트에 대한 자세한 정보를 얻으십시오.

Previewing a run

Artifact 클러스터

그래프 수준에 5개 이상의 runs 또는 Artifacts가 있는 경우 클러스터가 생성됩니다. 클러스터에는 특정 버전의 runs 또는 Artifacts를 찾기 위한 검색 창이 있으며 클러스터 내부의 노드 계보를 계속 조사하기 위해 클러스터에서 개별 노드를 가져옵니다.

노드를 클릭하면 노드에 대한 개요가 있는 미리보기가 열립니다. 화살표를 클릭하면 개별 run 또는 Artifact가 추출되어 추출된 노드의 계보를 검사할 수 있습니다.

Searching a run cluster

API를 사용하여 계보 추적

W&B API를 사용하여 그래프를 탐색할 수도 있습니다.

Artifact를 만듭니다. 먼저 wandb.init으로 run을 만듭니다. 그런 다음 wandb.Artifact로 새 Artifact를 만들거나 기존 Artifact를 검색합니다. 다음으로 .add_file로 Artifact에 파일을 추가합니다. 마지막으로 .log_artifact로 Artifact를 run에 기록합니다. 완성된 코드는 다음과 같습니다.

with wandb.init() as run:
    artifact = wandb.Artifact("artifact_name", "artifact_type")

    # Add Files and Assets to the artifact using
    # `.add`, `.add_file`, `.add_dir`, and `.add_reference`
    artifact.add_file("image1.png")
    run.log_artifact(artifact)

Artifact 오브젝트의 logged_byused_by 메서드를 사용하여 Artifact에서 그래프를 탐색합니다.

# Walk up and down the graph from an artifact:
producer_run = artifact.logged_by()
consumer_runs = artifact.used_by()

다음 단계

4.1.9 - Artifact data privacy and compliance

W&B 파일이 기본적으로 어디에 저장되는지 알아보세요. 민감한 정보를 저장하고 보관하는 방법을 살펴보세요.

Artifacts를 로깅할 때 파일은 W&B에서 관리하는 Google Cloud 버킷에 업로드됩니다. 버킷의 내용은 저장 시와 전송 중에 모두 암호화됩니다. 아티팩트 파일은 해당 프로젝트에 엑세스 권한이 있는 사용자에게만 표시됩니다.

GCS W&B Client Server diagram

아티팩트 버전을 삭제하면 데이터베이스에서 소프트 삭제로 표시되고 스토리지 비용에서 제거됩니다. 전체 아티팩트를 삭제하면 영구 삭제 대기열에 추가되고 모든 콘텐츠가 W&B 버킷에서 제거됩니다. 파일 삭제와 관련된 특정 요구 사항이 있는 경우 고객 지원에 문의하십시오.

멀티 테넌트 환경에 상주할 수 없는 중요한 데이터셋의 경우 클라우드 버킷에 연결된 프라이빗 W&B 서버 또는 _reference artifacts_를 사용할 수 있습니다. 레퍼런스 아티팩트는 파일 내용을 W&B로 보내지 않고 프라이빗 버킷에 대한 레퍼런스를 추적합니다. 레퍼런스 아티팩트는 버킷 또는 서버의 파일에 대한 링크를 유지 관리합니다. 즉, W&B는 파일 자체가 아닌 파일과 연결된 메타데이터만 추적합니다.

W&B Client Server Cloud diagram

레퍼런스가 아닌 아티팩트를 만드는 방법과 유사하게 레퍼런스 아티팩트를 만듭니다.

import wandb

run = wandb.init()
artifact = wandb.Artifact("animals", type="dataset")
artifact.add_reference("s3://my-bucket/animals")

대안이 필요하면 contact@wandb.com으로 문의하여 프라이빗 클라우드 및 온프레미스 설치에 대해 문의하십시오.

4.1.10 - Tutorial: Create, track, and use a dataset artifact

Artifacts 퀵스타트는 W&B를 사용하여 데이터셋 아티팩트를 생성, 추적 및 사용하는 방법을 보여줍니다.

이 가이드는 W&B Runs에서 데이터셋 Artifacts를 생성, 추적 및 사용하는 방법을 설명합니다.

1. W&B에 로그인

W&B 라이브러리를 가져오고 W&B에 로그인합니다. 아직 가입하지 않은 경우 무료 W&B 계정에 가입해야 합니다.

import wandb

wandb.login()

2. run 초기화

wandb.init() API를 사용하여 W&B Run으로 데이터를 동기화하고 기록하는 백그라운드 프로세스를 생성합니다. project 이름과 job 유형을 제공합니다.

# W&B Run을 만듭니다. 이 예제에서는 데이터셋 Artifact를 만드는 방법을 보여주기 때문에
# 'dataset'을 job 유형으로 지정합니다.
run = wandb.init(project="artifacts-example", job_type="upload-dataset")

3. Artifact 오브젝트 생성

wandb.Artifact() API를 사용하여 Artifact 오브젝트를 생성합니다. Artifact의 이름과 파일 형식에 대한 설명을 각각 nametype 파라미터에 제공합니다.

예를 들어 다음 코드 조각은 ‘bicycle-dataset’이라는 Artifact를 ‘dataset’ 레이블로 만드는 방법을 보여줍니다.

artifact = wandb.Artifact(name="bicycle-dataset", type="dataset")

Artifact를 구성하는 방법에 대한 자세한 내용은 Artifact 구성을 참조하십시오.

Artifact에 데이터셋 추가

Artifact에 파일을 추가합니다. 일반적인 파일 유형에는 모델과 데이터셋이 있습니다. 다음 예제에서는 시스템에 로컬로 저장된 dataset.h5라는 데이터셋을 Artifact에 추가합니다.

# Artifact 내용에 파일 추가
artifact.add_file(local_path="dataset.h5")

이전 코드 조각에서 파일 이름 dataset.h5를 Artifact에 추가할 파일의 경로로 바꿉니다.

4. 데이터셋 기록

W&B run 오브젝트 log_artifact() 메소드를 사용하여 Artifact 버전을 저장하고 Artifact를 run의 출력으로 선언합니다.

# Artifact 버전을 W&B에 저장하고 이 run의 출력으로 표시합니다.
run.log_artifact(artifact)

Artifact를 기록할 때 기본적으로 'latest' 에일리어스가 생성됩니다. Artifact 에일리어스 및 버전에 대한 자세한 내용은 사용자 지정 에일리어스 만들기새 Artifact 버전 만들기를 참조하십시오.

5. Artifact 다운로드 및 사용

다음 코드 예제는 W&B 서버에 기록하고 저장한 Artifact를 사용하는 단계를 보여줍니다.

  1. 먼저 **wandb.init()**으로 새 run 오브젝트를 초기화합니다.
  2. 둘째, run 오브젝트 use_artifact() 메소드를 사용하여 사용할 Artifact를 W&B에 알립니다. 그러면 Artifact 오브젝트가 반환됩니다.
  3. 셋째, Artifact download() 메소드를 사용하여 Artifact의 내용을 다운로드합니다.
# W&B Run을 만듭니다. 여기서는 'training'을 'type'으로 지정합니다.
# 이 run을 사용하여 트레이닝을 추적하기 때문입니다.
run = wandb.init(project="artifacts-example", job_type="training")

# Artifact에 대해 W&B를 쿼리하고 이 run에 대한 입력으로 표시합니다.
artifact = run.use_artifact("bicycle-dataset:latest")

# Artifact의 내용 다운로드
artifact_dir = artifact.download()

또는 Public API (wandb.Api)를 사용하여 Run 외부의 W&B에 이미 저장된 데이터를 내보내거나 (또는 업데이트)할 수 있습니다. 자세한 내용은 외부 파일 추적을 참조하십시오.

4.2 - Secrets

W&B secrets에 대한 개요, 작동 방식, 사용 시작 방법에 대해 설명합니다.

W&B Secret Manager를 사용하면 엑세스 토큰, bearer 토큰, API 키 또는 비밀번호와 같은 중요한 문자열인 _secrets_를 안전하고 중앙 집중식으로 저장, 관리 및 삽입할 수 있습니다. W&B Secret Manager는 중요한 문자열을 코드에 직접 추가하거나 웹 훅의 헤더 또는 페이로드를 구성할 때 불필요하게 만듭니다.

Secrets는 각 팀의 Secret Manager의 팀 설정Team secrets 섹션에 저장되고 관리됩니다.

secret 추가

secret을 추가하려면:

  1. 수신 서비스가 들어오는 웹 훅을 인증하는 데 필요한 경우 필요한 토큰 또는 API 키를 생성합니다. 필요한 경우 비밀번호 관리자와 같이 중요한 문자열을 안전하게 저장합니다.
  2. W&B에 로그인하여 팀의 Settings 페이지로 이동합니다.
  3. Team Secrets 섹션에서 New secret을 클릭합니다.
  4. 문자, 숫자 및 밑줄(_)을 사용하여 secret의 이름을 지정합니다.
  5. 중요한 문자열을 Secret 필드에 붙여넣습니다.
  6. Add secret을 클릭합니다.

웹 훅을 구성할 때 웹 훅 자동화에 사용할 secrets를 지정합니다. 자세한 내용은 웹 훅 구성 섹션을 참조하십시오.

secret 교체

secret을 교체하고 값을 업데이트하려면:

  1. secret의 행에서 연필 아이콘을 클릭하여 secret의 세부 정보를 엽니다.
  2. Secret을 새 값으로 설정합니다. 선택적으로 Reveal secret을 클릭하여 새 값을 확인합니다.
  3. Add secret을 클릭합니다. secret의 값이 업데이트되고 더 이상 이전 값으로 확인되지 않습니다.

secret 삭제

secret을 삭제하려면:

  1. secret의 행에서 휴지통 아이콘을 클릭합니다.
  2. 확인 대화 상자를 읽은 다음 Delete를 클릭합니다. secret이 즉시 영구적으로 삭제됩니다.

secrets에 대한 엑세스 관리

팀의 자동화는 팀의 secrets를 사용할 수 있습니다. secret을 제거하기 전에 secret을 사용하는 자동화가 작동을 멈추지 않도록 업데이트하거나 제거하십시오.

4.3 - Registry

W&B Registry는 조직 내 artifact 버전의 선별된 중앙 저장소입니다. 조직 내에서 권한을 가진 사용자는 사용자가 속한 팀에 관계없이 모든 artifact의 라이프사이클을 다운로드, 공유 및 공동으로 관리할 수 있습니다.

Registry를 사용하여 artifact 버전 추적, artifact 사용 및 변경 내역 감사, artifact의 거버넌스 및 규정 준수 보장, 모델 CI/CD와 같은 다운스트림 프로세스 자동화를 할 수 있습니다.

요약하면 W&B Registry를 사용하여 다음을 수행할 수 있습니다.

  • 기계 학습 작업에 적합한 artifact 버전을 조직의 다른 사용자에게 홍보합니다.
  • 특정 artifact를 찾거나 참조할 수 있도록 태그로 artifact 구성합니다.
  • artifact의 계보를 추적하고 변경 내역을 감사합니다.
  • 모델 CI/CD와 같은 다운스트림 프로세스를 자동화합니다.
  • 각 registry에서 artifact에 엑세스할 수 있는 조직 내 사용자 제한합니다.

위의 이미지는 “Model” 및 “Dataset” 코어 registry와 함께 사용자 지정 registry가 있는 Registry App을 보여줍니다.

기본 사항 알아보기

각 조직에는 모델 및 데이터셋 artifact를 구성하는 데 사용할 수 있는 ModelsDatasets라는 두 개의 registry가 초기에 포함되어 있습니다. 조직의 요구 사항에 따라 다른 artifact 유형을 구성하기 위해 추가 registry를 만들 수 있습니다.

registry는 하나 이상의 컬렉션으로 구성됩니다. 각 컬렉션은 고유한 작업 또는 유스 케이스를 나타냅니다.

artifact를 registry에 추가하려면 먼저 특정 artifact 버전을 W&B에 기록합니다. artifact를 기록할 때마다 W&B는 해당 artifact에 버전을 자동으로 할당합니다. artifact 버전은 0부터 인덱싱되므로 첫 번째 버전은 v0, 두 번째 버전은 v1과 같습니다.

artifact를 W&B에 기록한 후에는 해당 특정 artifact 버전을 registry의 컬렉션에 연결할 수 있습니다.

예를 들어, 다음 코드 예제는 “my_model.txt"라는 모델 artifact를 코어 registry의 “first-collection"이라는 컬렉션에 기록하고 연결하는 방법을 보여줍니다.

  1. W&B run을 초기화합니다.
  2. artifact를 W&B에 기록합니다.
  3. artifact 버전을 연결할 컬렉션 및 registry의 이름을 지정합니다.
  4. artifact를 컬렉션에 연결합니다.

이 Python 코드를 스크립트에 저장하고 실행합니다. W&B Python SDK 버전 0.18.6 이상이 필요합니다.

import wandb
import random

# track the artifact를 추적하기 위해 W&B run을 초기화합니다.
run = wandb.init(project="registry_quickstart") 

# 기록할 수 있도록 시뮬레이션된 모델 파일을 만듭니다.
with open("my_model.txt", "w") as f:
   f.write("Model: " + str(random.random()))

# artifact를 W&B에 기록합니다.
logged_artifact = run.log_artifact(
    artifact_or_path="./my_model.txt", 
    name="gemma-finetuned", 
    type="model" # artifact 유형을 지정합니다.
)

# artifact를 게시할 컬렉션 및 registry 이름을 지정합니다.
COLLECTION_NAME = "first-collection"
REGISTRY_NAME = "model"

# artifact를 registry에 연결합니다.
run.link_artifact(
    artifact=logged_artifact, 
    target_path=f"wandb-registry-{REGISTRY_NAME}/{COLLECTION_NAME}"
)

반환된 run 오브젝트의 link_artifact(target_path = "") 메소드에서 지정한 컬렉션이 지정한 registry 내에 없는 경우 W&B는 자동으로 컬렉션을 만듭니다.

Registry App으로 이동하여 사용자와 조직의 다른 구성원이 게시하는 artifact 버전을 봅니다. 이렇게 하려면 먼저 W&B로 이동합니다. 애플리케이션 아래 왼쪽 사이드바에서 Registry를 선택합니다. “Model” registry를 선택합니다. registry 내에서 연결된 artifact 버전이 있는 “first-collection” 컬렉션을 볼 수 있습니다.

artifact 버전을 registry 내의 컬렉션에 연결하면 조직 구성원은 적절한 권한이 있는 경우 artifact 버전을 보고, 다운로드하고, 관리하고, 다운스트림 자동화를 만들 수 있습니다.

W&B Registry 활성화

배포 유형에 따라 다음 조건을 충족하여 W&B Registry를 활성화합니다.

배포 유형 활성화 방법
Multi-tenant Cloud 별도의 조치가 필요하지 않습니다. W&B Registry는 W&B App에서 사용할 수 있습니다.
Dedicated Cloud 계정 팀에 문의하십시오. SA(Solutions Architect) 팀은 인스턴스의 운영자 콘솔 내에서 W&B Registry를 활성화합니다. 인스턴스가 서버 릴리스 버전 0.59.2 이상인지 확인합니다.
Self-Managed ENABLE_REGISTRY_UI라는 환경 변수를 활성화합니다. 서버에서 환경 변수를 활성화하는 방법에 대한 자세한 내용은 이 문서를 참조하십시오. 자체 관리형 인스턴스에서는 인프라 관리자가 이 환경 변수를 활성화하고 true로 설정해야 합니다. 인스턴스가 서버 릴리스 버전 0.59.2 이상인지 확인합니다.

시작하기 위한 리소스

유스 케이스에 따라 다음 리소스를 탐색하여 W&B Registry를 시작하십시오.

  • 튜토리얼 비디오를 확인하십시오.
  • W&B Model CI/CD 코스를 수강하고 다음 방법을 배우십시오.
    • W&B Registry를 사용하여 artifact를 관리하고 버전 관리하고, 계보를 추적하고, 다양한 라이프사이클 단계를 통해 모델을 홍보합니다.
    • 웹훅을 사용하여 모델 관리 워크플로를 자동화합니다.
    • 모델 평가, 모니터링 및 배포를 위해 registry를 외부 ML 시스템 및 툴과 통합합니다.

레거시 Model Registry에서 W&B Registry로 마이그레이션

레거시 Model Registry는 정확한 날짜가 아직 결정되지 않았지만 더 이상 사용되지 않을 예정입니다. 레거시 Model Registry를 더 이상 사용하지 않기 전에 W&B는 레거시 Model Registry의 내용을 W&B Registry로 마이그레이션합니다.

레거시 Model Registry에서 W&B Registry로의 마이그레이션 프로세스에 대한 자세한 내용은 레거시 Model Registry에서 마이그레이션을 참조하십시오.

마이그레이션이 발생할 때까지 W&B는 레거시 Model Registry와 새 Registry를 모두 지원합니다.

마이그레이션에 대한 질문이 있거나 W&B Product Team에 우려 사항에 대해 이야기하려면 support@wandb.com으로 문의하십시오.

4.3.1 - Registry types

W&B는 두 가지 유형의 레지스트리를 지원합니다: Core registriesCustom registries.

Core registry

Core registry는 특정 유스 케이스를 위한 템플릿입니다: ModelsDatasets.

기본적으로 Models 레지스트리는 "model" 아티팩트 유형을 허용하도록 구성되고 Dataset 레지스트리는 "dataset" 아티팩트 유형을 허용하도록 구성됩니다. 관리자는 추가로 허용되는 아티팩트 유형을 추가할 수 있습니다.

위의 이미지는 W&B Registry App UI에서 ModelsDataset core registry와 Fine_Tuned_Models라는 custom registry를 보여줍니다.

Core registry는 organization visibility를 가집니다. registry 관리자는 core registry의 visibility를 변경할 수 없습니다.

Custom registry

Custom registry는 "model" 아티팩트 유형 또는 "dataset" 아티팩트 유형으로 제한되지 않습니다.

초기 데이터 수집부터 최종 모델 배포까지 기계 학습 파이프라인의 각 단계에 대한 custom registry를 만들 수 있습니다.

예를 들어, 트레이닝된 모델의 성능을 평가하기 위해 선별된 데이터셋을 구성하기 위해 “Benchmark_Datasets"라는 레지스트리를 만들 수 있습니다. 이 레지스트리 내에서 모델이 트레이닝 중에 본 적이 없는 사용자 질문과 해당 전문가 검증 답변 세트가 포함된 “User_Query_Insurance_Answer_Test_Data"라는 컬렉션을 가질 수 있습니다.

Custom registry는 organization or restricted visibility를 가질 수 있습니다. registry 관리자는 custom registry의 visibility를 organization에서 restricted로 변경할 수 있습니다. 그러나 registry 관리자는 custom registry의 visibility를 restricted에서 organization visibility로 변경할 수 없습니다.

Custom registry를 만드는 방법에 대한 자세한 내용은 Create a custom registry를 참조하십시오.

Summary

다음 표는 core registry와 custom registry의 차이점을 요약합니다.

Core Custom
Visibility Organization visibility만 해당됩니다. Visibility를 변경할 수 없습니다. Organization 또는 restricted입니다. Visibility를 organization에서 restricted visibility로 변경할 수 있습니다.
Metadata 사전 구성되어 있으며 사용자가 편집할 수 없습니다. 사용자가 편집할 수 있습니다.
Artifact types 사전 구성되어 있으며 허용되는 아티팩트 유형을 제거할 수 없습니다. 사용자는 추가로 허용되는 아티팩트 유형을 추가할 수 있습니다. 관리자는 허용되는 유형을 정의할 수 있습니다.
Customization 기존 목록에 유형을 추가할 수 있습니다. 레지스트리 이름, 설명, visibility 및 허용되는 아티팩트 유형을 편집합니다.

4.3.2 - Create a custom registry

사용자 정의 레지스트리는 사용할 수 있는 아티팩트 유형에 대한 유연성과 제어 기능을 제공하고 레지스트리의 가시성을 제한하는 등의 작업을 수행할 수 있도록 합니다.

코어 및 사용자 정의 레지스트리에 대한 전체 비교는 레지스트리 유형의 요약 표를 참조하세요.

사용자 정의 레지스트리 만들기

사용자 정의 레지스트리를 만들려면 다음을 수행하세요.

  1. https://wandb.ai/registry/Registry 앱으로 이동합니다.
  2. Custom registry 내에서 Create registry 버튼을 클릭합니다.
  3. Name 필드에 레지스트리 이름을 입력합니다.
  4. 필요에 따라 레지스트리에 대한 설명을 제공합니다.
  5. Registry visibility 드롭다운에서 레지스트리를 볼 수 있는 사용자를 선택합니다. 레지스트리 가시성 옵션에 대한 자세한 내용은 레지스트리 가시성 유형을 참조하세요.
  6. Accepted artifacts type 드롭다운에서 All types 또는 Specify types를 선택합니다.
  7. (Specify types를 선택한 경우) 레지스트리가 허용하는 아티팩트 유형을 하나 이상 추가합니다.
  8. Create registry 버튼을 클릭합니다.

예를 들어, 다음 이미지는 사용자가 생성하려는 Fine_Tuned_Models라는 사용자 정의 레지스트리를 보여줍니다. 레지스트리는 수동으로 레지스트리에 추가된 멤버만 Restricted됩니다.

가시성 유형

레지스트리의 가시성은 해당 레지스트리에 액세스할 수 있는 사용자를 결정합니다. 사용자 정의 레지스트리의 가시성을 제한하면 지정된 멤버만 해당 레지스트리에 액세스할 수 있습니다.

사용자 정의 레지스트리에 대한 두 가지 유형의 레지스트리 가시성 옵션이 있습니다.

가시성 설명
Restricted 초대된 조직 멤버만 레지스트리에 액세스할 수 있습니다.
Organization 조직의 모든 사용자가 레지스트리에 액세스할 수 있습니다.

팀 관리자 또는 레지스트리 관리자는 사용자 정의 레지스트리의 가시성을 설정할 수 있습니다.

Restricted 가시성으로 사용자 정의 레지스트리를 생성하는 사용자는 레지스트리 관리자로 레지스트리에 자동으로 추가됩니다.

사용자 정의 레지스트리의 가시성 구성

팀 관리자 또는 레지스트리 관리자는 사용자 정의 레지스트리를 생성하는 동안 또는 생성 후에 사용자 정의 레지스트리의 가시성을 할당할 수 있습니다.

기존 사용자 정의 레지스트리의 가시성을 제한하려면 다음을 수행하세요.

  1. https://wandb.ai/registry/Registry 앱으로 이동합니다.
  2. 레지스트리를 선택합니다.
  3. 오른쪽 상단 모서리에 있는 톱니바퀴 아이콘을 클릭합니다.
  4. Registry visibility 드롭다운에서 원하는 레지스트리 가시성을 선택합니다.
  5. Restricted visibility를 선택한 경우:
    1. 이 레지스트리에 액세스할 수 있도록 하려는 조직 멤버를 추가합니다. Registry members and roles 섹션으로 스크롤하여 Add member 버튼을 클릭합니다.
    2. Member 필드 내에서 추가하려는 멤버의 이메일 또는 사용자 이름을 추가합니다.
    3. Add new member를 클릭합니다.

팀 관리자가 사용자 정의 레지스트리를 만들 때 가시성을 할당하는 방법에 대한 자세한 내용은 사용자 정의 레지스트리 만들기를 참조하세요.

4.3.3 - Configure registry access

Registry 관리자는 레지스트리 역할 구성, 사용자 추가, 또는 사용자 제거를 레지스트리의 설정을 구성하여 레지스트리에서 수행할 수 있습니다.

사용자 관리

사용자 또는 팀 추가

Registry 관리자는 개별 user 또는 전체 Teams를 Registry에 추가할 수 있습니다. Registry에 user 또는 Team을 추가하려면 다음을 수행하십시오.

  1. Registry(https://wandb.ai/registry/)로 이동합니다.
  2. user 또는 Team을 추가할 Registry를 선택합니다.
  3. 오른쪽 상단 모서리에 있는 톱니바퀴 아이콘을 클릭하여 Registry settings에 엑세스합니다.
  4. Registry access 섹션에서 Add access를 클릭합니다.
  5. Include users and teams 필드에 하나 이상의 user 이름, 이메일 또는 Team 이름을 지정합니다.
  6. Add access를 클릭합니다.
UI를 사용하여 팀과 개별 사용자를 레지스트리에 추가하는 애니메이션

레지스트리에서 user 역할 구성 또는 Registry 역할 권한에 대해 자세히 알아보세요.

사용자 또는 팀 제거

Registry 관리자는 개별 user 또는 전체 Teams를 Registry에서 제거할 수 있습니다. Registry에서 user 또는 Team을 제거하려면 다음을 수행하십시오.

  1. Registry(https://wandb.ai/registry/)로 이동합니다.
  2. user를 제거할 Registry를 선택합니다.
  3. 오른쪽 상단 모서리에 있는 톱니바퀴 아이콘을 클릭하여 Registry settings에 엑세스합니다.
  4. Registry access 섹션으로 이동하여 제거할 user 이름, 이메일 또는 Team을 입력합니다.
  5. Delete 버튼을 클릭합니다.

Registry 역할

Registry의 각 user는 해당 Registry에서 수행할 수 있는 작업을 결정하는 Registry 역할을 가집니다.

W&B는 user 또는 Team이 Registry에 추가될 때 자동으로 기본 Registry 역할을 할당합니다.

Entity 기본 Registry 역할
Team Viewer
User (관리자 아님) Viewer
Org 관리자 Admin

Registry 관리자는 Registry에서 user 및 Teams에 대한 역할을 할당하거나 수정할 수 있습니다. 자세한 내용은 레지스트리에서 user 역할 구성을 참조하십시오.

다음 표는 user가 가질 수 있는 다양한 역할과 해당 권한을 나열합니다.

권한 권한 그룹 Viewer Member Admin
컬렉션의 세부 정보 보기 읽기 X X X
연결된 아티팩트의 세부 정보 보기 읽기 X X X
사용량: use_artifact를 사용하여 레지스트리에서 아티팩트 사용 읽기 X X X
연결된 아티팩트 다운로드 읽기 X X X
아티팩트의 파일 뷰어에서 파일 다운로드 읽기 X X X
레지스트리 검색 읽기 X X X
레지스트리의 설정 및 user 목록 보기 읽기 X X X
컬렉션에 대한 새 자동화 생성 생성 X X
새 버전이 추가될 때 Slack 알림 켜기 생성 X X
새 컬렉션 생성 생성 X X
새 사용자 지정 레지스트리 생성 생성 X X
컬렉션 카드 편집(설명) 업데이트 X X
연결된 아티팩트 설명 편집 업데이트 X X
컬렉션의 태그 추가 또는 삭제 업데이트 X X
연결된 아티팩트에서 에일리어스 추가 또는 삭제 업데이트 X X
새 아티팩트 연결 업데이트 X X
레지스트리에 허용된 유형 목록 편집 업데이트 X X
사용자 지정 레지스트리 이름 편집 업데이트 X X
컬렉션 삭제 삭제 X X
자동화 삭제 삭제 X X
레지스트리에서 아티팩트 연결 해제 삭제 X X
레지스트리에 대해 허용된 아티팩트 유형 편집 Admin X
레지스트리 가시성 변경(Organization 또는 Restricted) Admin X
레지스트리에 user 추가 Admin X
레지스트리에서 user의 역할 할당 또는 변경 Admin X

상속된 권한

Registry에서 user의 권한은 개별적으로 또는 Team 멤버십에 의해 해당 user에게 할당된 최고 수준의 권한에 따라 달라집니다.

예를 들어, Registry 관리자가 Nico라는 user를 Registry A에 추가하고 Viewer Registry 역할을 할당한다고 가정합니다. 그런 다음 Registry 관리자가 Foundation Model Team이라는 Team을 Registry A에 추가하고 Foundation Model Team에 Member Registry 역할을 할당합니다.

Nico는 Registry의 Member인 Foundation Model Team의 멤버입니다. MemberViewer보다 더 많은 권한을 가지고 있기 때문에 W&B는 Nico에게 Member 역할을 부여합니다.

다음 표는 user의 개별 Registry 역할과 해당 멤버인 Team의 Registry 역할 간의 충돌이 발생할 경우 최고 수준의 권한을 보여줍니다.

Team Registry 역할 개별 Registry 역할 상속된 Registry 역할
Viewer Viewer Viewer
Member Viewer Member
Admin Viewer Admin

충돌이 있는 경우 W&B는 user 이름 옆에 최고 수준의 권한을 표시합니다.

예를 들어, 다음 이미지에서 Alex는 smle-reg-team-1 Team의 멤버이기 때문에 Member 역할 권한을 상속받습니다.

사용자가 팀의 일부이기 때문에 멤버 역할을 상속합니다.

Registry 역할 구성

  1. Registry(https://wandb.ai/registry/)로 이동합니다.
  2. 구성할 Registry를 선택합니다.
  3. 오른쪽 상단 모서리에 있는 톱니바퀴 아이콘을 클릭합니다.
  4. Registry members and roles 섹션으로 스크롤합니다.
  5. Member 필드 내에서 권한을 편집할 user 또는 Team을 검색합니다.
  6. Registry role 열에서 user의 역할을 클릭합니다.
  7. 드롭다운에서 user에게 할당할 역할을 선택합니다.

4.3.4 - Create a collection

컬렉션 은 레지스트리 내에서 연결된 아티팩트 버전들의 집합입니다. 각 컬렉션은 고유한 작업 또는 유스 케이스를 나타냅니다.

예를 들어, 코어 데이터셋 레지스트리 내에 여러 개의 컬렉션을 가질 수 있습니다. 각 컬렉션은 MNIST, CIFAR-10 또는 ImageNet과 같은 서로 다른 데이터셋을 포함합니다.

또 다른 예로, “chatbot"이라는 레지스트리가 있을 수 있으며, 여기에는 모델 Artifacts에 대한 컬렉션, 데이터셋 Artifacts에 대한 또 다른 컬렉션, 그리고 파인튜닝된 모델 Artifacts에 대한 또 다른 컬렉션이 포함될 수 있습니다.

레지스트리와 컬렉션을 구성하는 방법은 사용자에게 달려 있습니다.

컬렉션 유형

각 컬렉션은 오직 하나의 아티팩트 유형 만을 허용합니다. 지정하는 유형은 사용자와 조직의 다른 구성원이 해당 컬렉션에 연결할 수 있는 Artifacts의 종류를 제한합니다.

예를 들어, “데이터셋” 아티팩트 유형을 허용하는 컬렉션을 생성한다고 가정합니다. 이는 “데이터셋” 유형을 가진 미래의 Artifacts 버전만 이 컬렉션에 연결할 수 있음을 의미합니다. 마찬가지로, “모델” 아티팩트 유형만 허용하는 컬렉션에는 “모델” 유형의 Artifacts만 연결할 수 있습니다.

컬렉션을 생성할 때 미리 정의된 아티팩트 유형 목록에서 선택할 수 있습니다. 사용할 수 있는 아티팩트 유형은 컬렉션이 속한 레지스트리에 따라 다릅니다.

Artifacts를 컬렉션에 연결하거나 새 컬렉션을 만들기 전에 컬렉션이 허용하는 Artifacts 유형을 조사하십시오.

컬렉션이 허용하는 Artifacts 유형 확인

컬렉션에 연결하기 전에 컬렉션이 허용하는 아티팩트 유형을 검사하십시오. W&B Python SDK를 사용하여 프로그래밍 방식으로 또는 W&B App을 사용하여 대화식으로 컬렉션이 허용하는 아티팩트 유형을 검사할 수 있습니다.

홈페이지의 레지스트리 카드 또는 레지스트리의 설정 페이지에서 허용되는 아티팩트 유형을 찾을 수 있습니다.

두 방법 모두 먼저 W&B 레지스트리 App으로 이동합니다.

레지스트리 App의 홈페이지 내에서 해당 레지스트리의 레지스트리 카드로 스크롤하여 허용되는 아티팩트 유형을 볼 수 있습니다. 레지스트리 카드 내의 회색 가로 타원은 해당 레지스트리가 허용하는 아티팩트 유형을 나열합니다.

예를 들어, 위의 이미지는 레지스트리 App 홈페이지에 있는 여러 레지스트리 카드를 보여줍니다. 모델 레지스트리 카드 내에서 modelmodel-new의 두 가지 아티팩트 유형을 볼 수 있습니다.

레지스트리의 설정 페이지 내에서 허용되는 아티팩트 유형을 보려면:

  1. 설정을 보려는 레지스트리 카드를 클릭합니다.
  2. 오른쪽 상단 모서리에 있는 기어 아이콘을 클릭합니다.
  3. 허용되는 아티팩트 유형 필드로 스크롤합니다.

W&B Python SDK를 사용하여 프로그래밍 방식으로 레지스트리가 허용하는 아티팩트 유형을 봅니다.

import wandb

registry_name = "<registry_name>"
artifact_types = wandb.Api().project(name=f"wandb-registry-{registry_name}").artifact_types()
print(artifact_type.name for artifact_type in artifact_types)

컬렉션이 허용하는 아티팩트 유형을 알게 되면 컬렉션을 생성할 수 있습니다.

컬렉션 생성

레지스트리 내에서 대화식으로 또는 프로그래밍 방식으로 컬렉션을 생성합니다. 컬렉션을 생성한 후에는 컬렉션이 허용하는 아티팩트 유형을 변경할 수 없습니다.

프로그래밍 방식으로 컬렉션 생성

wandb.init.link_artifact() 메서드를 사용하여 Artifacts를 컬렉션에 연결합니다. target_path 필드에 컬렉션과 레지스트리를 모두 지정합니다. 경로는 다음과 같은 형식을 취합니다.

f"wandb-registry-{registry_name}/{collection_name}"

여기서 registry_name은 레지스트리의 이름이고 collection_name은 컬렉션의 이름입니다. 레지스트리 이름에 접두사 wandb-registry-를 추가해야 합니다.

다음 코드 조각은 프로그래밍 방식으로 컬렉션을 생성하는 방법을 보여줍니다. <>로 묶인 다른 값들을 자신의 값으로 바꾸십시오.

import wandb

# run 초기화
run = wandb.init(entity = "<team_entity>", project = "<project>")

# 아티팩트 오브젝트 생성
artifact = wandb.Artifact(
  name = "<artifact_name>",
  type = "<artifact_type>"
  )

registry_name = "<registry_name>"
collection_name = "<collection_name>"
target_path = f"wandb-registry-{registry_name}/{collection_name}"

# Artifacts를 컬렉션에 연결
run.link_artifact(artifact = artifact, target_path = target_path)

run.finish()

대화식으로 컬렉션 생성

다음 단계는 W&B 레지스트리 App UI를 사용하여 레지스트리 내에서 컬렉션을 생성하는 방법을 설명합니다.

  1. W&B App UI에서 레지스트리 App으로 이동합니다.
  2. 레지스트리를 선택합니다.
  3. 오른쪽 상단 모서리에 있는 컬렉션 생성 버튼을 클릭합니다.
  4. 이름 필드에 컬렉션 이름을 입력합니다.
  5. 유형 드롭다운에서 유형을 선택합니다. 또는 레지스트리에서 사용자 정의 아티팩트 유형을 활성화한 경우 이 컬렉션이 허용하는 하나 이상의 아티팩트 유형을 제공합니다.
  6. 선택적으로 설명 필드에 컬렉션에 대한 설명을 제공합니다.
  7. 선택적으로 태그 필드에 하나 이상의 태그를 추가합니다.
  8. 버전 연결을 클릭합니다.
  9. 프로젝트 드롭다운에서 Artifacts가 저장된 프로젝트를 선택합니다.
  10. Artifacts 컬렉션 드롭다운에서 Artifacts를 선택합니다.
  11. 버전 드롭다운에서 컬렉션에 연결하려는 Artifacts 버전을 선택합니다.
  12. 컬렉션 생성 버튼을 클릭합니다.

4.3.5 - Link an artifact version to a registry

Artifact 버전들을 컬렉션에 연결하여 조직의 다른 구성원들이 사용할 수 있도록 합니다.

Artifact를 레지스트리에 연결하면 해당 Artifact가 레지스트리에 “게시"됩니다. 해당 레지스트리에 대한 엑세스 권한이 있는 모든 사용자는 컬렉션에서 연결된 Artifact 버전에 엑세스할 수 있습니다.

즉, Artifact를 레지스트리 컬렉션에 연결하면 해당 Artifact 버전이 개인 프로젝트 수준 범위에서 공유 조직 수준 범위로 이동합니다.

Artifact를 컬렉션에 연결

Artifact 버전을 대화식으로 또는 프로그래밍 방식으로 컬렉션에 연결합니다.

유스 케이스에 따라 아래 탭에 설명된 지침을 따르십시오.

wandb.init.Run.link_artifact()를 사용하여 Artifact 버전을 프로그래밍 방식으로 컬렉션에 연결합니다.

target_path 파라미터를 사용하여 Artifact 버전을 연결할 컬렉션 및 레지스트리를 지정합니다. 대상 경로는 “wandb-registry” 접두사, 레지스트리 이름 및 컬렉션 이름으로 구성되며 슬래시(/)로 구분됩니다.

wandb-registry-{REGISTRY_NAME}/{COLLECTION_NAME}

아래 코드 조각을 복사하여 붙여넣어 기존 레지스트리 내의 컬렉션에 Artifact 버전을 연결합니다. 꺾쇠 괄호로 묶인 값을 자신의 값으로 바꿉니다.

import wandb

# run 초기화
run = wandb.init(
  entity = "<team_entity>",
  project = "<project_name>"
)

# Artifact 오브젝트 생성
# type 파라미터는 Artifact 오브젝트의 유형과 
# 컬렉션 유형을 모두 지정합니다.
artifact = wandb.Artifact(name = "<name>", type = "<type>")

# Artifact 오브젝트에 파일 추가
# 로컬 머신에서 파일의 경로를 지정합니다.
artifact.add_file(local_path = "<local_path_to_artifact>")

# Artifact를 연결할 컬렉션 및 레지스트리 지정
REGISTRY_NAME = "<registry_name>"  
COLLECTION_NAME = "<collection_name>"
target_path=f"wandb-registry-{REGISTRY_NAME}/{COLLECTION_NAME}"

# Artifact를 컬렉션에 연결
run.link_artifact(artifact = artifact, target_path = target_path)
  1. 레지스트리 앱으로 이동합니다.
  2. Artifact 버전을 연결할 컬렉션 이름 옆으로 마우스를 가져갑니다.
  3. 세부 정보 보기 옆에 있는 미트볼 메뉴 아이콘(가로 점 3개)을 선택합니다.
  4. 드롭다운에서 새 버전 연결을 선택합니다.
  5. 나타나는 사이드바에서 드롭다운에서 팀 이름을 선택합니다.
  6. 프로젝트 드롭다운에서 Artifact가 포함된 프로젝트 이름을 선택합니다.
  7. Artifact 드롭다운에서 Artifact 이름을 선택합니다.
  8. 버전 드롭다운에서 컬렉션에 연결할 Artifact 버전을 선택합니다.
  1. W&B App의 프로젝트 Artifact 브라우저(https://wandb.ai/<entity>/<project>/artifacts)로 이동합니다.
  2. 왼쪽 사이드바에서 Artifacts 아이콘을 선택합니다.
  3. 레지스트리에 연결할 Artifact 버전을 클릭합니다.
  4. 버전 개요 섹션 내에서 레지스트리에 연결 버튼을 클릭합니다.
  5. 화면 오른쪽에 나타나는 모달에서 레지스터 모델 선택 메뉴 드롭다운에서 Artifact를 선택합니다.
  6. 다음 단계를 클릭합니다.
  7. (선택 사항) 에일리어스 드롭다운에서 에일리어스를 선택합니다.
  8. 레지스트리에 연결을 클릭합니다.

레지스트리 앱에서 연결된 Artifact의 메타데이터, 버전 데이터, 사용량, 계보 정보 등을 봅니다.

레지스트리에서 연결된 Artifact 보기

레지스트리 앱에서 메타데이터, 계보 및 사용량 정보와 같은 연결된 Artifact에 대한 정보를 봅니다.

  1. 레지스트리 앱으로 이동합니다.
  2. Artifact를 연결한 레지스트리 이름을 선택합니다.
  3. 컬렉션 이름을 선택합니다.
  4. 컬렉션의 Artifact가 메트릭을 기록하는 경우 메트릭 표시를 클릭하여 버전 간의 메트릭을 비교합니다.
  5. Artifact 버전 목록에서 엑세스할 버전을 선택합니다. 버전 번호는 v0부터 시작하여 각 연결된 Artifact 버전에 점진적으로 할당됩니다.
  6. Artifact 버전에 대한 세부 정보를 보려면 해당 버전을 클릭합니다. 이 페이지의 탭에서 해당 버전의 메타데이터(기록된 메트릭 포함), 계보 및 사용량 정보를 볼 수 있습니다.

버전 탭 내에서 전체 이름 필드를 기록해 두십시오. 연결된 Artifact의 전체 이름은 레지스트리, 컬렉션 이름 및 Artifact 버전의 에일리어스 또는 인덱스로 구성됩니다.

wandb-registry-{REGISTRY_NAME}/{COLLECTION_NAME}:v{INTEGER}

Artifact 버전을 프로그래밍 방식으로 엑세스하려면 연결된 Artifact의 전체 이름이 필요합니다.

문제 해결

Artifact를 연결할 수 없는 경우 몇 가지 일반적인 사항을 다시 확인하십시오.

개인 계정에서 Artifact 기록

개인 엔터티로 W&B에 기록된 Artifact는 레지스트리에 연결할 수 없습니다. 조직 내에서 팀 엔터티를 사용하여 Artifact를 기록해야 합니다. 조직의 팀 내에서 기록된 Artifact만 조직의 레지스트리에 연결할 수 있습니다.

팀 엔터티 찾기

W&B는 팀 이름을 팀의 엔터티로 사용합니다. 예를 들어 팀 이름이 team-awesome인 경우 팀 엔터티는 team-awesome입니다.

다음을 통해 팀 이름을 확인할 수 있습니다.

  1. 팀의 W&B 프로필 페이지로 이동합니다.
  2. 사이트 URL을 복사합니다. URL은 https://wandb.ai/<team> 형식입니다. 여기서 <team>은 팀 이름과 팀 엔터티입니다.

팀 엔터티에서 기록

  1. wandb.init()로 run을 초기화할 때 팀을 엔터티로 지정합니다. run을 초기화할 때 entity를 지정하지 않으면 run은 팀 엔터티일 수도 있고 아닐 수도 있는 기본 엔터티를 사용합니다.
import wandb

run = wandb.init(
  entity='<team_entity>',
  project='<project_name>'
  )
  1. run.log_artifact를 사용하거나 Artifact 오브젝트를 생성한 다음 파일을 추가하여 Artifact 오브젝트에 Artifact를 기록합니다.

    artifact = wandb.Artifact(name="<artifact_name>", type="<type>")
    

    Artifact를 기록하는 방법에 대한 자세한 내용은 Artifact 생성을 참조하십시오.

  2. Artifact가 개인 엔터티에 기록된 경우 조직 내의 엔터티에 다시 기록해야 합니다.

W&B App UI에서 레지스트리 경로 확인

UI에서 레지스트리 경로를 확인하는 방법에는 빈 컬렉션을 만들고 컬렉션 세부 정보를 보거나 컬렉션 홈페이지에서 자동 생성된 코드를 복사하여 붙여넣는 두 가지 방법이 있습니다.

자동 생성된 코드 복사 및 붙여넣기

  1. 레지스트리 앱(https://wandb.ai/registry/)으로 이동합니다.
  2. Artifact를 연결할 레지스트리를 클릭합니다.
  3. 페이지 상단에 자동 생성된 코드 블록이 표시됩니다.
  4. 이 코드를 복사하여 코드에 붙여넣고 경로의 마지막 부분을 컬렉션 이름으로 바꿔야 합니다.

빈 컬렉션 만들기

  1. 레지스트리 앱(https://wandb.ai/registry/)으로 이동합니다.
  2. Artifact를 연결할 레지스트리를 클릭합니다.
  3. 빈 컬렉션을 클릭합니다. 빈 컬렉션이 없으면 새 컬렉션을 만듭니다.
  4. 나타나는 코드 조각 내에서 .link_artifact() 내의 target_path 필드를 식별합니다.
  5. (선택 사항) 컬렉션을 삭제합니다.

예를 들어 설명된 단계를 완료한 후 target_path 파라미터가 있는 코드 블록을 찾습니다.

target_path = 
      "smle-registries-bug-bash/wandb-registry-Golden Datasets/raw_images"

이를 구성 요소로 나누면 Artifact를 프로그래밍 방식으로 연결하는 데 사용할 경로를 만드는 데 필요한 것을 알 수 있습니다.

ORG_ENTITY_NAME = "smle-registries-bug-bash"
REGISTRY_NAME = "Golden Datasets"
COLLECTION_NAME = "raw_images"
```

4.3.6 - Download an artifact from a registry

W&B Python SDK를 사용하여 레지스트리에 연결된 아티팩트를 다운로드합니다. 아티팩트를 다운로드하여 사용하려면 레지스트리 이름, 컬렉션 이름, 다운로드할 아티팩트 버전의 에일리어스 또는 인덱스를 알아야 합니다.

아티팩트의 속성을 알면 연결된 아티팩트의 경로를 구성하고 아티팩트를 다운로드할 수 있습니다. 또는 W&B App UI에서 미리 생성된 코드 조각을 복사하여 붙여넣어 레지스트리에 연결된 아티팩트를 다운로드할 수 있습니다.

연결된 아티팩트의 경로 구성

레지스트리에 연결된 아티팩트를 다운로드하려면 해당 연결된 아티팩트의 경로를 알아야 합니다. 경로는 레지스트리 이름, 컬렉션 이름, 엑세스하려는 아티팩트 버전의 에일리어스 또는 인덱스로 구성됩니다.

레지스트리, 컬렉션, 아티팩트 버전의 에일리어스 또는 인덱스가 있으면 다음 문자열 템플릿을 사용하여 연결된 아티팩트의 경로를 구성할 수 있습니다.

# 버전 인덱스가 지정된 아티팩트 이름
f"wandb-registry-{REGISTRY}/{COLLECTION}:v{INDEX}"

# 에일리어스가 지정된 아티팩트 이름
f"wandb-registry-{REGISTRY}/{COLLECTION}:{ALIAS}"

중괄호 {} 안의 값을 엑세스하려는 레지스트리 이름, 컬렉션 이름, 아티팩트 버전의 에일리어스 또는 인덱스로 바꿉니다.

연결된 아티팩트의 경로가 있으면 wandb.init.use_artifact 메소드를 사용하여 아티팩트에 엑세스하고 해당 콘텐츠를 다운로드합니다. 다음 코드 조각은 W&B Registry에 연결된 아티팩트를 사용하고 다운로드하는 방법을 보여줍니다. <> 안의 값을 자신의 값으로 바꾸십시오.

import wandb

REGISTRY = '<registry_name>'
COLLECTION = '<collection_name>'
ALIAS = '<artifact_alias>'

run = wandb.init(
   entity = '<team_name>',
   project = '<project_name>'
   )  

artifact_name = f"wandb-registry-{REGISTRY}/{COLLECTION}:{ALIAS}"
# artifact_name = '<artifact_name>' # Registry App에 지정된 전체 이름을 복사하여 붙여넣습니다.
fetched_artifact = run.use_artifact(artifact_or_name = artifact_name)  
download_path = fetched_artifact.download()  

.use_artifact() 메소드는 run을 생성하고 다운로드하는 아티팩트를 해당 run의 입력으로 표시합니다. 아티팩트를 run의 입력으로 표시하면 W&B가 해당 아티팩트의 계보를 추적할 수 있습니다.

run을 생성하지 않으려면 wandb.Api() 오브젝트를 사용하여 아티팩트에 엑세스할 수 있습니다.

import wandb

REGISTRY = "<registry_name>"
COLLECTION = "<collection_name>"
VERSION = "<version>"

api = wandb.Api()
artifact_name = f"wandb-registry-{REGISTRY}/{COLLECTION}:{VERSION}"
artifact = api.artifact(name = artifact_name)
예시: W&B Registry에 연결된 아티팩트 사용 및 다운로드

다음 코드 예제는 사용자가 Fine-tuned Models 레지스트리의 phi3-finetuned라는 컬렉션에 연결된 아티팩트를 다운로드하는 방법을 보여줍니다. 아티팩트 버전의 에일리어스는 production으로 설정됩니다.

import wandb

TEAM_ENTITY = "product-team-applications"
PROJECT_NAME = "user-stories"

REGISTRY = "Fine-tuned Models"
COLLECTION = "phi3-finetuned"
ALIAS = 'production'

# 지정된 팀 및 프로젝트 내에서 run 초기화
run = wandb.init(entity=TEAM_ENTITY, project = PROJECT_NAME)

artifact_name = f"wandb-registry-{REGISTRY}/{COLLECTION}:{ALIAS}"

# 아티팩트에 엑세스하고 계보 추적을 위해 run에 대한 입력으로 표시
fetched_artifact = run.use_artifact(artifact_or_name = name)  

# 아티팩트 다운로드. 다운로드한 콘텐츠의 경로를 반환합니다.
downloaded_path = fetched_artifact.download()

가능한 파라미터 및 반환 유형에 대한 자세한 내용은 API Reference 가이드의 use_artifactArtifact.download()를 참조하십시오.

미리 생성된 코드 조각 복사 및 붙여넣기

W&B는 Python 스크립트, 노트북 또는 터미널에 복사하여 붙여넣어 레지스트리에 연결된 아티팩트를 다운로드할 수 있는 코드 조각을 생성합니다.

  1. Registry App으로 이동합니다.
  2. 아티팩트가 포함된 레지스트리 이름을 선택합니다.
  3. 컬렉션 이름을 선택합니다.
  4. 아티팩트 버전 목록에서 엑세스하려는 버전을 선택합니다.
  5. Usage 탭을 선택합니다.
  6. Usage API 섹션에 표시된 코드 조각을 복사합니다.
  7. 코드 조각을 Python 스크립트, 노트북 또는 터미널에 붙여넣습니다.

4.3.7 - Find registry items

W&B Registry App의 글로벌 검색 창을 사용하여 registry, collection, artifact version tag, collection tag 또는 에일리어스를 찾으세요. W&B Python SDK를 사용하여 특정 기준에 따라 MongoDB 스타일 쿼리로 registries, collections 및 artifact versions을 필터링할 수 있습니다.

보기 권한이 있는 항목만 검색 결과에 나타납니다.

Registry 항목 검색

registry 항목을 검색하려면 다음을 수행하세요.

  1. W&B Registry App으로 이동합니다.
  2. 페이지 상단의 검색 창에 검색어를 지정합니다. Enter 키를 눌러 검색합니다.

지정한 용어가 기존 registry, collection 이름, artifact version tag, collection tag 또는 에일리어스와 일치하면 검색 결과가 검색 창 아래에 나타납니다.

.gif of user typing text into registry search bar to filter registry items

MongoDB 스타일 쿼리로 registry 항목 쿼리

wandb.Api().registries()쿼리 predicates를 사용하여 하나 이상의 MongoDB 스타일 쿼리를 기반으로 registries, collections 및 artifact versions을 필터링합니다.

다음 표는 필터링하려는 항목 유형에 따라 사용할 수 있는 쿼리 이름을 나열합니다.

query name
registries name, description, created_at, updated_at
collections name, tag, description, created_at, updated_at
versions tag, alias, created_at, updated_at, metadata

다음 코드 예제는 몇 가지 일반적인 검색 시나리오를 보여줍니다.

wandb.Api().registries() 메소드를 사용하려면 먼저 W&B Python SDK(wandb) 라이브러리를 가져옵니다.

import wandb

# (선택 사항) 가독성을 위해 wandb.Api() 클래스의 인스턴스를 생성합니다.
api = wandb.Api()

문자열 model을 포함하는 모든 registries를 필터링합니다.

# 문자열 `model`을 포함하는 모든 registries를 필터링합니다.
registry_filters = {
    "name": {"$regex": "model"}
}

# 필터와 일치하는 모든 registries의 iterable을 반환합니다.
registries = api.registries(filter=registry_filters)

collection 이름에 문자열 yolo를 포함하는 registry에 관계없이 모든 collections을 필터링합니다.

# collection 이름에 문자열 `yolo`를 포함하는 registry에 관계없이
# 모든 collections을 필터링합니다.
collection_filters = {
    "name": {"$regex": "yolo"}
}

# 필터와 일치하는 모든 collections의 iterable을 반환합니다.
collections = api.registries().collections(filter=collection_filters)

collection 이름에 문자열 yolo를 포함하고 cnn을 태그로 갖는 registry에 관계없이 모든 collections을 필터링합니다.

# collection 이름에 문자열 `yolo`를 포함하고 `cnn`을 태그로 갖는
# registry에 관계없이 모든 collections을 필터링합니다.
collection_filters = {
    "name": {"$regex": "yolo"},
    "tag": "cnn"
}

# 필터와 일치하는 모든 collections의 iterable을 반환합니다.
collections = api.registries().collections(filter=collection_filters)

문자열 model을 포함하고 태그 image-classification 또는 latest 에일리어스를 갖는 모든 artifact versions을 찾습니다.

# 문자열 `model`을 포함하고
# 태그 `image-classification` 또는 `latest` 에일리어스를 갖는 모든 artifact versions을 찾습니다.
registry_filters = {
    "name": {"$regex": "model"}
}

# 논리적 $or 연산자를 사용하여 artifact versions을 필터링합니다.
version_filters = {
    "$or": [
        {"tag": "image-classification"},
        {"alias": "production"}
    ]
}

# 필터와 일치하는 모든 artifact versions의 iterable을 반환합니다.
artifacts = api.registries(filter=registry_filters).collections().versions(filter=version_filters)

논리적 쿼리 연산자에 대한 자세한 내용은 MongoDB 설명서를 참조하세요.

이전 코드 조각에서 artifacts iterable의 각 항목은 Artifact 클래스의 인스턴스입니다. 즉, 각 아티팩트의 속성 (예: name, collection, aliases, tags, created_at 등)에 엑세스할 수 있습니다.

for art in artifacts:
    print(f"artifact name: {art.name}")
    print(f"collection artifact belongs to: { art.collection.name}")
    print(f"artifact aliases: {art.aliases}")
    print(f"tags attached to artifact: {art.tags}")
    print(f"artifact created at: {art.created_at}\n")

아티팩트 오브젝트의 속성 전체 목록은 API Reference 문서의 Artifacts Class를 참조하세요.

2024-01-08과 2025-03-04 13:10 UTC 사이에 생성된 registry 또는 collection에 관계없이 모든 artifact versions을 필터링합니다.

# 2024-01-08과 2025-03-04 13:10 UTC 사이에 생성된 모든 artifact versions을 찾습니다.

artifact_filters = {
    "alias": "latest",
    "created_at" : {"$gte": "2024-01-08", "$lte": "2025-03-04 13:10:00"},
}

# 필터와 일치하는 모든 artifact versions의 iterable을 반환합니다.
artifacts = api.registries().collections().versions(filter=artifact_filters)

날짜 및 시간을 YYYY-MM-DD HH:MM:SS 형식으로 지정합니다. 날짜로만 필터링하려면 시간, 분, 초를 생략할 수 있습니다.

쿼리 비교에 대한 자세한 내용은 MongoDB 설명서를 참조하세요.

4.3.8 - Organize versions with tags

태그를 사용하여 컬렉션 내에서 컬렉션 또는 아티팩트 버전을 구성할 수 있습니다. Python SDK 또는 W&B App UI를 사용하여 태그를 추가, 제거, 편집할 수 있습니다.

레지스트리 내에서 컬렉션 또는 아티팩트 버전을 구성하기 위해 태그를 생성하고 추가합니다. W&B App UI 또는 W&B Python SDK를 사용하여 컬렉션 또는 아티팩트 버전에 태그를 추가, 수정, 보기 또는 제거합니다.

컬렉션에 태그 추가

W&B App UI 또는 Python SDK를 사용하여 컬렉션에 태그를 추가합니다.

W&B App UI를 사용하여 컬렉션에 태그를 추가합니다.

  1. W&B Registry(https://wandb.ai/registry)로 이동합니다.
  2. 레지스트리 카드를 클릭합니다.
  3. 컬렉션 이름 옆에 있는 세부 정보 보기를 클릭합니다.
  4. 컬렉션 카드 내에서 태그 필드 옆에 있는 더하기 아이콘(+)을 클릭하고 태그 이름을 입력합니다.
  5. 키보드에서 Enter 키를 누릅니다.
import wandb

COLLECTION_TYPE = "<collection_type>"
ORG_NAME = "<org_name>"
REGISTRY_NAME = "<registry_name>"
COLLECTION_NAME = "<collection_name>"

full_name = f"{ORG_NAME}/wandb-registry-{REGISTRY_NAME}/{COLLECTION_NAME}"

collection = wandb.Api().artifact_collection(
  type_name = COLLECTION_TYPE, 
  name = full_name
  )

collection.tags = ["your-tag"]
collection.save()

컬렉션에 속한 태그 업데이트

tags 속성을 재할당하거나 변경하여 프로그래밍 방식으로 태그를 업데이트합니다. W&B는 제자리 변경 대신 tags 속성을 재할당하는 것을 권장하며, 이는 좋은 Python 방식입니다.

예를 들어, 다음 코드 조각은 재할당을 통해 목록을 업데이트하는 일반적인 방법을 보여줍니다. 간결성을 위해 컬렉션에 태그 추가 섹션의 코드 예제를 계속합니다.

collection.tags = [*collection.tags, "new-tag", "other-tag"]
collection.tags = collection.tags + ["new-tag", "other-tag"]

collection.tags = set(collection.tags) - set(tags_to_delete)
collection.tags = []  # deletes all tags

다음 코드 조각은 제자리 변경을 사용하여 아티팩트 버전에 속한 태그를 업데이트하는 방법을 보여줍니다.

collection.tags += ["new-tag", "other-tag"]
collection.tags.append("new-tag")

collection.tags.extend(["new-tag", "other-tag"])
collection.tags[:] = ["new-tag", "other-tag"]
collection.tags.remove("existing-tag")
collection.tags.pop()
collection.tags.clear()

컬렉션에 속한 태그 보기

W&B App UI를 사용하여 컬렉션에 추가된 태그를 봅니다.

  1. W&B Registry(https://wandb.ai/registry)로 이동합니다.
  2. 레지스트리 카드를 클릭합니다.
  3. 컬렉션 이름 옆에 있는 세부 정보 보기를 클릭합니다.

컬렉션에 하나 이상의 태그가 있는 경우 태그 필드 옆의 컬렉션 카드 내에서 해당 태그를 볼 수 있습니다.

컬렉션에 추가된 태그는 해당 컬렉션 이름 옆에도 나타납니다.

예를 들어, 다음 이미지에서 “tag1"이라는 태그가 “zoo-dataset-tensors” 컬렉션에 추가되었습니다.

컬렉션에서 태그 제거

W&B App UI를 사용하여 컬렉션에서 태그를 제거합니다.

  1. W&B Registry(https://wandb.ai/registry)로 이동합니다.
  2. 레지스트리 카드를 클릭합니다.
  3. 컬렉션 이름 옆에 있는 세부 정보 보기를 클릭합니다.
  4. 컬렉션 카드 내에서 제거하려는 태그 이름 위로 마우스를 가져갑니다.
  5. 취소 버튼(X 아이콘)을 클릭합니다.

아티팩트 버전에 태그 추가

W&B App UI 또는 Python SDK를 사용하여 컬렉션에 연결된 아티팩트 버전에 태그를 추가합니다.

  1. W&B Registry(https://wandb.ai/registry)로 이동합니다.
  2. 레지스트리 카드를 클릭합니다.
  3. 태그를 추가하려는 컬렉션 이름 옆에 있는 세부 정보 보기를 클릭합니다.
  4. 버전으로 스크롤합니다.
  5. 아티팩트 버전 옆에 있는 보기를 클릭합니다.
  6. 버전 탭 내에서 태그 필드 옆에 있는 더하기 아이콘(+)을 클릭하고 태그 이름을 입력합니다.
  7. 키보드에서 Enter 키를 누릅니다.

태그를 추가하거나 업데이트하려는 아티팩트 버전을 가져옵니다. 아티팩트 버전을 가져왔으면 아티팩트 오브젝트의 tag 속성에 액세스하여 해당 아티팩트에 태그를 추가하거나 수정할 수 있습니다. 하나 이상의 태그를 목록으로 아티팩트의 tag 속성에 전달합니다.

다른 Artifacts와 마찬가지로 run을 생성하지 않고도 W&B에서 Artifact를 가져오거나 run을 생성하고 해당 run 내에서 Artifact를 가져올 수 있습니다. 어느 경우든 W&B 서버에서 Artifact를 업데이트하려면 Artifact 오브젝트의 save 메소드를 호출해야 합니다.

아래의 적절한 코드 셀을 복사하여 붙여넣어 아티팩트 버전의 태그를 추가하거나 수정합니다. <> 안의 값을 자신의 값으로 바꿉니다.

다음 코드 조각은 새 run을 생성하지 않고 Artifact를 가져와서 태그를 추가하는 방법을 보여줍니다.

import wandb

ARTIFACT_TYPE = "<TYPE>"
ORG_NAME = "<org_name>"
REGISTRY_NAME = "<registry_name>"
COLLECTION_NAME = "<collection_name>"
VERSION = "<artifact_version>"

artifact_name = f"{ORG_NAME}/wandb-registry-{REGISTRY_NAME}/{COLLECTION_NAME}:v{VERSION}"

artifact = wandb.Api().artifact(name = artifact_name, type = ARTIFACT_TYPE)
artifact.tags = ["tag2"] # 목록에 하나 이상의 태그 제공
artifact.save()

다음 코드 조각은 새 run을 생성하여 Artifact를 가져와서 태그를 추가하는 방법을 보여줍니다.

import wandb

ORG_NAME = "<org_name>"
REGISTRY_NAME = "<registry_name>"
COLLECTION_NAME = "<collection_name>"
VERSION = "<artifact_version>"

run = wandb.init(entity = "<entity>", project="<project>")

artifact_name = f"{ORG_NAME}/wandb-registry-{REGISTRY_NAME}/{COLLECTION_NAME}:v{VERSION}"

artifact = run.use_artifact(artifact_or_name = artifact_name)
artifact.tags = ["tag2"] # 목록에 하나 이상의 태그 제공
artifact.save()

아티팩트 버전에 속한 태그 업데이트

tags 속성을 재할당하거나 변경하여 프로그래밍 방식으로 태그를 업데이트합니다. W&B는 제자리 변경 대신 tags 속성을 재할당하는 것을 권장하며, 이는 좋은 Python 방식입니다.

예를 들어, 다음 코드 조각은 재할당을 통해 목록을 업데이트하는 일반적인 방법을 보여줍니다. 간결성을 위해 아티팩트 버전에 태그 추가 섹션의 코드 예제를 계속합니다.

artifact.tags = [*artifact.tags, "new-tag", "other-tag"]
artifact.tags = artifact.tags + ["new-tag", "other-tag"]

artifact.tags = set(artifact.tags) - set(tags_to_delete)
artifact.tags = []  # deletes all tags

다음 코드 조각은 제자리 변경을 사용하여 아티팩트 버전에 속한 태그를 업데이트하는 방법을 보여줍니다.

artifact.tags += ["new-tag", "other-tag"]
artifact.tags.append("new-tag")

artifact.tags.extend(["new-tag", "other-tag"])
artifact.tags[:] = ["new-tag", "other-tag"]
artifact.tags.remove("existing-tag")
artifact.tags.pop()
artifact.tags.clear()

아티팩트 버전에 속한 태그 보기

W&B App UI 또는 Python SDK를 사용하여 레지스트리에 연결된 아티팩트 버전에 속한 태그를 봅니다.

  1. W&B Registry(https://wandb.ai/registry)로 이동합니다.
  2. 레지스트리 카드를 클릭합니다.
  3. 태그를 추가하려는 컬렉션 이름 옆에 있는 세부 정보 보기를 클릭합니다.
  4. 버전 섹션으로 스크롤합니다.

아티팩트 버전에 하나 이상의 태그가 있는 경우 태그 열 내에서 해당 태그를 볼 수 있습니다.

태그를 보려면 아티팩트 버전을 가져옵니다. 아티팩트 버전을 가져왔으면 아티팩트 오브젝트의 tag 속성을 확인하여 해당 아티팩트에 속한 태그를 볼 수 있습니다.

다른 Artifacts와 마찬가지로 run을 생성하지 않고도 W&B에서 Artifact를 가져오거나 run을 생성하고 해당 run 내에서 Artifact를 가져올 수 있습니다.

아래의 적절한 코드 셀을 복사하여 붙여넣어 아티팩트 버전의 태그를 추가하거나 수정합니다. <> 안의 값을 자신의 값으로 바꿉니다.

다음 코드 조각은 새 run을 생성하지 않고 아티팩트 버전의 태그를 가져와서 보는 방법을 보여줍니다.

import wandb

ARTIFACT_TYPE = "<TYPE>"
ORG_NAME = "<org_name>"
REGISTRY_NAME = "<registry_name>"
COLLECTION_NAME = "<collection_name>"
VERSION = "<artifact_version>"

artifact_name = f"{ORG_NAME}/wandb-registry-{REGISTRY_NAME}/{COLLECTION_NAME}:v{VERSION}"

artifact = wandb.Api().artifact(name = artifact_name, type = artifact_type)
print(artifact.tags)

다음 코드 조각은 새 run을 생성하여 아티팩트 버전의 태그를 가져와서 보는 방법을 보여줍니다.

import wandb

ORG_NAME = "<org_name>"
REGISTRY_NAME = "<registry_name>"
COLLECTION_NAME = "<collection_name>"
VERSION = "<artifact_version>"

run = wandb.init(entity = "<entity>", project="<project>")

artifact_name = f"{ORG_NAME}/wandb-registry-{REGISTRY_NAME}/{COLLECTION_NAME}:v{VERSION}"

artifact = run.use_artifact(artifact_or_name = artifact_name)
print(artifact.tags)

아티팩트 버전에서 태그 제거

  1. W&B Registry(https://wandb.ai/registry)로 이동합니다.
  2. 레지스트리 카드를 클릭합니다.
  3. 태그를 추가하려는 컬렉션 이름 옆에 있는 세부 정보 보기를 클릭합니다.
  4. 버전으로 스크롤합니다.
  5. 아티팩트 버전 옆에 있는 보기를 클릭합니다.
  6. 버전 탭 내에서 태그 이름 위로 마우스를 가져갑니다.
  7. 취소 버튼(X 아이콘)을 클릭합니다.

기존 태그 검색

W&B App UI를 사용하여 컬렉션 및 아티팩트 버전에서 기존 태그를 검색합니다.

  1. W&B Registry(https://wandb.ai/registry)로 이동합니다.
  2. 레지스트리 카드를 클릭합니다.
  3. 검색 창에 태그 이름을 입력합니다.

특정 태그가 있는 아티팩트 버전 찾기

W&B Python SDK를 사용하여 태그 집합이 있는 아티팩트 버전을 찾습니다.

import wandb

api = wandb.Api()
tagged_artifact_versions = api.artifacts(
    type_name = "<artifact_type>",
    name = "<artifact_name>",
    tags = ["<tag_1>", "<tag_2>"]
)

for artifact_version in tagged_artifact_versions:
    print(artifact_version.tags)

4.3.9 - Annotate collections

컬렉션에 사람이 읽기 쉬운 텍스트를 추가하여 사용자가 컬렉션의 목적과 컬렉션에 포함된 아티팩트를 이해하는 데 도움이 되도록 하세요.

컬렉션에 따라 트레이닝 데이터, 모델 아키텍처, 작업, 라이선스, 참조 및 배포에 대한 정보를 포함할 수 있습니다. 다음은 컬렉션에 문서화할 가치가 있는 몇 가지 주제를 나열한 것입니다.

W&B는 최소한 다음 세부 정보를 포함할 것을 권장합니다.

  • 요약: 컬렉션의 목적. 기계 학습 실험에 사용된 기계 학습 프레임워크.
  • 라이선스: 기계 학습 모델 사용과 관련된 법적 조건 및 권한. 모델 사용자가 모델을 활용할 수 있는 법적 프레임워크를 이해하는 데 도움이 됩니다. 일반적인 라이선스에는 Apache 2.0, MIT 및 GPL이 있습니다.
  • 참조: 관련 연구 논문, 데이터셋 또는 외부 리소스에 대한 인용 또는 참조.

컬렉션에 트레이닝 데이터가 포함된 경우 다음 추가 세부 정보를 포함하는 것을 고려하십시오.

  • 트레이닝 데이터: 사용된 트레이닝 데이터에 대해 설명합니다.
  • 처리: 트레이닝 데이터 세트에서 수행된 처리.
  • 데이터 저장소: 해당 데이터가 저장된 위치 및 엑세스 방법.

컬렉션에 기계 학습 모델이 포함된 경우 다음 추가 세부 정보를 포함하는 것을 고려하십시오.

  • 아키텍처: 모델 아키텍처, 레이어 및 특정 설계 선택에 대한 정보.
  • 작업: 컬렉션 모델이 수행하도록 설계된 특정 유형의 작업 또는 문제. 모델의 의도된 기능을 분류한 것입니다.
  • 모델 역직렬화: 팀의 누군가가 모델을 메모리에 로드할 수 있는 방법에 대한 정보를 제공합니다.
  • 작업: 기계 학습 모델이 수행하도록 설계된 특정 유형의 작업 또는 문제입니다. 모델의 의도된 기능을 분류한 것입니다.
  • 배포: 모델이 배포되는 방식 및 위치에 대한 세부 정보와 모델을 워크플로우 오케스트레이션 플랫폼과 같은 다른 엔터프라이즈 시스템에 통합하는 방법에 대한 지침.

컬렉션에 대한 설명 추가

W&B Registry UI 또는 Python SDK를 사용하여 컬렉션에 대한 설명을 대화형으로 또는 프로그래밍 방식으로 추가합니다.

  1. https://wandb.ai/registry/의 W&B Registry로 이동합니다.
  2. 컬렉션을 클릭합니다.
  3. 컬렉션 이름 옆에 있는 세부 정보 보기를 선택합니다.
  4. 설명 필드 내에서 컬렉션에 대한 정보를 제공합니다. Markdown 마크업 언어를 사용하여 텍스트 형식을 지정합니다.

wandb.Api().artifact_collection() 메서드를 사용하여 컬렉션의 설명에 엑세스합니다. 반환된 오브젝트의 description 속성을 사용하여 컬렉션에 대한 설명을 추가하거나 업데이트합니다.

type_name 파라미터에 컬렉션의 유형을 지정하고 name 파라미터에 컬렉션의 전체 이름을 지정합니다. 컬렉션 이름은 접두사 “wandb-registry”, 레지스트리 이름 및 컬렉션 이름으로 구성되며 슬래시로 구분됩니다.

wandb-registry-{REGISTRY_NAME}/{COLLECTION_NAME}

다음 코드 조각을 Python 스크립트 또는 노트북에 복사하여 붙여 넣습니다. 꺾쇠 괄호(<>)로 묶인 값을 자신의 값으로 바꿉니다.

import wandb

api = wandb.Api()

collection = api.artifact_collection(
  type_name = "<collection_type>", 
  name = "<collection_name>"
  )


collection.description = "This is a description."
collection.save()  

예를 들어 다음 이미지는 모델 아키텍처, 용도, 성능 정보 등을 문서화하는 컬렉션을 보여줍니다.

모델 아키텍처, 용도, 성능 정보 등에 대한 정보가 포함된 컬렉션 카드입니다.

4.3.10 - Create and view lineage maps

W&B Registry에서 계보 맵을 만드세요.

W&B 레지스트리의 컬렉션 내에서 ML 실험에서 사용하는 아티팩트의 이력을 볼 수 있습니다. 이 이력을 계보 그래프 라고 합니다.

컬렉션에 속하지 않은 W&B에 기록하는 아티팩트에 대한 계보 그래프를 볼 수도 있습니다.

계보 그래프는 아티팩트를 기록하는 특정 run을 보여줄 수 있습니다. 또한 계보 그래프는 어떤 run이 아티팩트를 입력으로 사용했는지도 보여줄 수 있습니다. 다시 말해, 계보 그래프는 run의 입력과 출력을 보여줄 수 있습니다.

예를 들어, 다음 이미지는 ML 실험 전체에서 생성되고 사용된 아티팩트를 보여줍니다.

왼쪽에서 오른쪽으로 이미지는 다음을 보여줍니다.

  1. 여러 개의 run이 split_zoo_dataset:v4 아티팩트를 기록합니다.
  2. “rural-feather-20” run은 트레이닝을 위해 split_zoo_dataset:v4 아티팩트를 사용합니다.
  3. “rural-feather-20” run의 출력은 zoo-ylbchv20:v0이라는 모델 아티팩트입니다.
  4. “northern-lake-21"이라는 run은 모델을 평가하기 위해 모델 아티팩트 zoo-ylbchv20:v0을 사용합니다.

run의 입력 추적

wandb.init.use_artifact API를 사용하여 아티팩트를 run의 입력 또는 종속성으로 표시합니다.

다음 코드 조각은 use_artifact를 사용하는 방법을 보여줍니다. 꺾쇠 괄호(<>)로 묶인 값을 사용자의 값으로 바꿉니다.

import wandb

# run 초기화
run = wandb.init(project="<project>", entity="<entity>")

# 아티팩트를 가져오고 종속성으로 표시
artifact = run.use_artifact(artifact_or_name="<name>", aliases="<alias>")

run의 출력 추적

(wandb.init.log_artifact)를 사용하여 아티팩트를 run의 출력으로 선언합니다.

다음 코드 조각은 wandb.init.log_artifact API를 사용하는 방법을 보여줍니다. 꺾쇠 괄호(<>)로 묶인 값을 사용자의 값으로 바꾸십시오.

import wandb

# run 초기화
run = wandb.init(entity  "<entity>", project = "<project>",)
artifact = wandb.Artifact(name = "<artifact_name>", type = "<artifact_type>")
artifact.add_file(local_path = "<local_filepath>", name="<optional-name>")

# 아티팩트를 run의 출력으로 기록
run.log_artifact(artifact_or_path = artifact)

아티팩트 생성에 대한 자세한 내용은 아티팩트 생성을 참조하십시오.

컬렉션에서 계보 그래프 보기

W&B 레지스트리에서 컬렉션에 연결된 아티팩트의 계보를 봅니다.

  1. W&B 레지스트리로 이동합니다.
  2. 아티팩트가 포함된 컬렉션을 선택합니다.
  3. 드롭다운에서 계보 그래프를 보려는 아티팩트 버전을 클릭합니다.
  4. “계보” 탭을 선택합니다.

아티팩트의 계보 그래프 페이지에 있으면 해당 계보 그래프의 모든 노드에 대한 추가 정보를 볼 수 있습니다.

run 노드를 선택하여 run의 ID, run의 이름, run의 상태 등과 같은 run의 세부 정보를 봅니다. 예를 들어, 다음 이미지는 rural-feather-20 run에 대한 정보를 보여줍니다.

아티팩트 노드를 선택하여 전체 이름, 유형, 생성 시간 및 관련 에일리어스와 같은 해당 아티팩트의 세부 정보를 봅니다.

4.3.11 - Migrate from legacy Model Registry

W&B는 기존 W&B Model Registry의 자산을 새로운 W&B Registry로 이전할 예정입니다. 이 마이그레이션은 W&B에서 완전히 관리하고 트리거하며, 사용자 의 개입은 필요하지 않습니다. 이 프로세스는 기존 워크플로우의 중단을 최소화하면서 최대한 원활하게 진행되도록 설계되었습니다.

이전은 새로운 W&B Registry에 Model Registry에서 현재 사용할 수 있는 모든 기능이 포함되면 진행됩니다. W&B는 현재 워크플로우, 코드 베이스 및 레퍼런스를 보존하려고 노력할 것입니다.

이 가이드 는 살아있는 문서이며 더 많은 정보를 사용할 수 있게 되면 정기적으로 업데이트됩니다. 질문이나 지원이 필요하면 support@wandb.com으로 문의하십시오.

W&B Registry는 기존 Model Registry와 어떻게 다른가요?

W&B Registry는 모델, 데이터 셋 및 기타 Artifacts 관리 를 위한 보다 강력하고 유연한 환경을 제공하도록 설계된 다양한 새로운 기능과 개선 사항을 제공합니다.

조직 가시성

기존 Model Registry에 연결된 Artifacts는 팀 수준의 가시성을 갖습니다. 즉, 팀 멤버 만이 기존 W&B Model Registry에서 Artifacts를 볼 수 있습니다. W&B Registry는 조직 수준의 가시성을 갖습니다. 즉, 올바른 권한을 가진 조직 전체의 멤버는 레지스트리에 연결된 Artifacts를 볼 수 있습니다.

레지스트리에 대한 가시성 제한

사용자 정의 레지스트리를 보고 액세스할 수 있는 사용자를 제한합니다. 사용자 정의 레지스트리를 만들 때 또는 사용자 정의 레지스트리를 만든 후에 레지스트리에 대한 가시성을 제한할 수 있습니다. 제한된 레지스트리에서는 선택된 멤버만 콘텐츠에 액세스하여 개인 정보 보호 및 제어를 유지할 수 있습니다. 레지스트리 가시성에 대한 자세한 내용은 레지스트리 가시성 유형을 참조하십시오.

사용자 정의 레지스트리 만들기

기존 Model Registry와 달리 W&B Registry는 Models 또는 데이터셋 레지스트리에만 국한되지 않습니다. 특정 워크플로우 또는 프로젝트 요구 사항에 맞게 조정된 사용자 정의 레지스트리를 만들어 임의의 오브젝트 유형을 담을 수 있습니다. 이러한 유연성을 통해 팀은 고유한 요구 사항에 따라 Artifacts를 구성하고 관리할 수 있습니다. 사용자 정의 레지스트리를 만드는 방법에 대한 자세한 내용은 사용자 정의 레지스트리 만들기를 참조하십시오.

사용자 정의 엑세스 제어

각 레지스트리는 멤버에게 관리자, 멤버 또는 뷰어와 같은 특정 역할을 할당할 수 있는 자세한 엑세스 제어를 지원합니다. 관리자는 멤버 추가 또는 제거, 역할 설정 및 가시성 구성 을 포함하여 레지스트리 설정을 관리할 수 있습니다. 이를 통해 팀은 레지스트리에서 Artifacts를 보고, 관리하고, 상호 작용할 수 있는 사용자를 제어할 수 있습니다.

용어 업데이트

Registered Models는 이제 컬렉션이라고 합니다.

변경 사항 요약

기존 W&B Model Registry W&B Registry
Artifacts 가시성 팀 멤버 만 Artifacts를 보거나 액세스할 수 있습니다. 조직 내 멤버는 올바른 권한으로 레지스트리에 연결된 Artifacts를 보거나 액세스할 수 있습니다.
사용자 정의 엑세스 제어 사용할 수 없음 사용 가능
사용자 정의 레지스트리 사용할 수 없음 사용 가능
용어 업데이트 모델 버전에 대한 포인터(링크) 집합을 registered models라고 합니다. 아티팩트 버전에 대한 포인터(링크) 집합을 컬렉션이라고 합니다.
wandb.init.link_model Model Registry 특정 API 현재 기존 모델 레지스트리 와만 호환됩니다.

마이그레이션 준비

W&B는 Registered Models(현재 컬렉션이라고 함) 및 관련 아티팩트 버전을 기존 Model Registry에서 W&B Registry로 마이그레이션합니다. 이 프로세스는 자동으로 수행되며 사용자 의 조치가 필요하지 않습니다.

팀 가시성에서 조직 가시성으로

마이그레이션 후 모델 레지스트리는 조직 수준의 가시성을 갖습니다. 역할 할당을 통해 레지스트리에 액세스할 수 있는 사용자를 제한할 수 있습니다. 이를 통해 특정 멤버만 특정 레지스트리에 액세스할 수 있습니다.

마이그레이션은 기존 W&B Model Registry에서 현재 팀 수준으로 등록된 모델(곧 컬렉션이라고 함)의 기존 권한 경계를 유지합니다. 기존 Model Registry에 현재 정의된 권한은 새 레지스트리에서 보존됩니다. 즉, 현재 특정 팀 멤버 로 제한된 컬렉션은 마이그레이션 중과 후에 보호됩니다.

Artifacts 경로 연속성

현재 필요한 조치는 없습니다.

마이그레이션 중

W&B가 마이그레이션 프로세스를 시작합니다. 마이그레이션은 W&B 서비스의 중단을 최소화하는 시간대에 발생합니다. 마이그레이션이 시작되면 기존 Model Registry는 읽기 전용 상태로 전환되고 참조용으로 액세스할 수 있습니다.

마이그레이션 후

마이그레이션 후 컬렉션, Artifacts 버전 및 관련 속성은 새로운 W&B Registry 내에서 완전히 액세스할 수 있습니다. 현재 워크플로우가 그대로 유지되도록 보장하는 데 중점을 두고 있으며, 변경 사항을 탐색하는 데 도움이 되는 지속적인 지원이 제공됩니다.

새로운 레지스트리 사용

사용자는 W&B Registry에서 사용할 수 있는 새로운 기능과 기능을 탐색하는 것이 좋습니다. 레지스트리는 현재 의존하는 기능을 지원할 뿐만 아니라 사용자 정의 레지스트리, 향상된 가시성 및 유연한 엑세스 제어와 같은 향상된 기능도 제공합니다.

W&B Registry를 조기에 사용해 보거나, 기존 W&B Model Registry가 아닌 레지스트리로 시작하는 것을 선호하는 새로운 사용자를 위해 지원이 제공됩니다. 이 기능을 활성화하려면 support@wandb.com 또는 영업 MLE에 문의하십시오. 초기 마이그레이션은 BETA 버전으로 진행됩니다. W&B Registry의 BETA 버전에는 기존 Model Registry의 모든 기능 또는 특징이 없을 수 있습니다.

자세한 내용과 W&B Registry의 전체 기능 범위에 대해 알아보려면 W&B Registry 가이드를 방문하십시오.

FAQ

W&B가 Model Registry에서 W&B Registry로 자산을 마이그레이션하는 이유는 무엇입니까?

W&B는 새로운 레지스트리를 통해 보다 고급 기능과 기능을 제공하기 위해 플랫폼을 발전시키고 있습니다. 이 마이그레이션은 Models, 데이터 셋 및 기타 Artifacts 관리를 위한 보다 통합되고 강력한 툴 세트를 제공하기 위한 단계입니다.

마이그레이션 전에 수행해야 할 작업은 무엇입니까?

마이그레이션 전에 사용자 의 조치가 필요하지 않습니다. W&B는 워크플로우와 레퍼런스가 보존되도록 전환을 처리합니다.

모델 Artifacts에 대한 액세스 권한이 손실됩니까?

아니요, 모델 Artifacts에 대한 액세스 권한은 마이그레이션 후에도 유지됩니다. 기존 Model Registry는 읽기 전용 상태로 유지되고 모든 관련 데이터는 새 레지스트리로 마이그레이션됩니다.

Artifacts와 관련된 메타데이터가 보존됩니까?

예, Artifacts 생성, 계보 및 기타 속성과 관련된 중요한 메타데이터는 마이그레이션 중에 보존됩니다. 사용자는 마이그레이션 후에도 모든 관련 메타데이터에 계속 액세스할 수 있으므로 Artifacts의 무결성과 추적 가능성이 유지됩니다.

도움이 필요하면 누구에게 연락해야 합니까?

질문이나 우려 사항이 있는 경우 지원을 받을 수 있습니다. 지원이 필요하면 support@wandb.com으로 문의하십시오.

4.3.12 - Model registry

트레이닝부터 프로덕션까지 모델 생명주기를 관리하는 모델 레지스트리

W&B Model Registry는 팀의 트레이닝된 모델을 보관하는 곳으로, ML 전문가가 프로덕션 후보를 게시하여 다운스트림 팀과 이해 관계자가 사용할 수 있습니다. 스테이징된/후보 모델을 보관하고 스테이징과 관련된 워크플로우를 관리하는 데 사용됩니다.

W&B Model Registry를 사용하면 다음을 수행할 수 있습니다.

작동 방식

몇 가지 간단한 단계를 통해 스테이징된 모델을 추적하고 관리합니다.

  1. 모델 버전 로깅: 트레이닝 스크립트에서 몇 줄의 코드를 추가하여 모델 파일을 아티팩트 로 W&B에 저장합니다.
  2. 성능 비교: 라이브 차트를 확인하여 모델 트레이닝 및 유효성 검사에서 메트릭 과 샘플 예측값을 비교합니다. 어떤 모델 버전이 가장 성능이 좋았는지 식별합니다.
  3. 레지스트리에 연결: Python에서 프로그래밍 방식으로 또는 W&B UI에서 대화식으로 등록된 모델에 연결하여 최상의 모델 버전을 북마크합니다.

다음 코드 조각은 모델을 Model Registry에 로깅하고 연결하는 방법을 보여줍니다.

import wandb
import random

# Start a new W&B run
run = wandb.init(project="models_quickstart")

# Simulate logging model metrics
run.log({"acc": random.random()})

# Create a simulated model file
with open("my_model.h5", "w") as f:
    f.write("Model: " + str(random.random()))

# Log and link the model to the Model Registry
run.link_model(path="./my_model.h5", registered_model_name="MNIST")

run.finish()
  1. 모델 전환을 CI/CD 워크플로우에 연결: 웹훅을 사용하여 워크플로우 단계를 통해 후보 모델을 전환하고 다운스트림 작업 자동화합니다.

시작 방법

유스 케이스에 따라 다음 리소스를 탐색하여 W&B Models를 시작하십시오.

4.3.12.1 - Tutorial: Use W&B for model management

W&B를 사용해 모델 관리를 하는 방법을 알아보세요. (Model Management)

다음 가이드에서는 W&B에 모델을 기록하는 방법을 안내합니다. 이 가이드가 끝나면 다음을 수행할 수 있습니다.

  • MNIST 데이터셋과 Keras 프레임워크를 사용하여 모델을 만들고 트레이닝합니다.
  • 트레이닝한 모델을 W&B project에 기록합니다.
  • 사용된 데이터셋을 생성한 모델의 종속성으로 표시합니다.
  • 해당 모델을 W&B Registry에 연결합니다.
  • 레지스트리에 연결한 모델의 성능을 평가합니다.
  • 모델 버전을 프로덕션 준비 완료로 표시합니다.

설정

시작하기 전에 이 가이드에 필요한 Python 종속성을 가져옵니다.

import wandb
import numpy as np
from tensorflow import keras
from tensorflow.keras import layers
from wandb.integration.keras import WandbMetricsLogger
from sklearn.model_selection import train_test_split

W&B entity를 entity 변수에 제공합니다.

entity = "<entity>"

데이터셋 아티팩트 생성

먼저 데이터셋을 만듭니다. 다음 코드 조각은 MNIST 데이터셋을 다운로드하는 함수를 생성합니다.

def generate_raw_data(train_size=6000):
    eval_size = int(train_size / 6)
    (x_train, y_train), (x_eval, y_eval) = keras.datasets.mnist.load_data()

    x_train = x_train.astype("float32") / 255
    x_eval = x_eval.astype("float32") / 255
    x_train = np.expand_dims(x_train, -1)
    x_eval = np.expand_dims(x_eval, -1)

    print("Generated {} rows of training data.".format(train_size))
    # 트레이닝 데이터 {}행 생성됨.
    print("Generated {} rows of eval data.".format(eval_size))
    # 평가 데이터 {}행 생성됨.

    return (x_train[:train_size], y_train[:train_size]), (
        x_eval[:eval_size],
        y_eval[:eval_size],
    )

# 데이터셋 생성
(x_train, y_train), (x_eval, y_eval) = generate_raw_data()

다음으로 데이터셋을 W&B에 업로드합니다. 이렇게 하려면 artifact 오브젝트를 생성하고 해당 아티팩트에 데이터셋을 추가합니다.

project = "model-registry-dev"

model_use_case_id = "mnist"
job_type = "build_dataset"

# W&B run 초기화
run = wandb.init(entity=entity, project=project, job_type=job_type)

# 트레이닝 데이터를 위한 W&B 테이블 생성
train_table = wandb.Table(data=[], columns=[])
train_table.add_column("x_train", x_train)
train_table.add_column("y_train", y_train)
train_table.add_computed_columns(lambda ndx, row: {"img": wandb.Image(row["x_train"])})

# 평가 데이터를 위한 W&B 테이블 생성
eval_table = wandb.Table(data=[], columns=[])
eval_table.add_column("x_eval", x_eval)
eval_table.add_column("y_eval", y_eval)
eval_table.add_computed_columns(lambda ndx, row: {"img": wandb.Image(row["x_eval"])})

# 아티팩트 오브젝트 생성
artifact_name = "{}_dataset".format(model_use_case_id)
artifact = wandb.Artifact(name=artifact_name, type="dataset")

# wandb.WBValue obj를 아티팩트에 추가
artifact.add(train_table, "train_table")
artifact.add(eval_table, "eval_table")

# 아티팩트에 대한 변경 사항을 유지합니다.
artifact.save()

# W&B에 이 run이 완료되었음을 알립니다.
run.finish()

모델 트레이닝

이전 단계에서 생성한 아티팩트 데이터셋으로 모델을 트레이닝합니다.

데이터셋 아티팩트를 run에 대한 입력으로 선언

이전 단계에서 생성한 데이터셋 아티팩트를 W&B run에 대한 입력으로 선언합니다. 아티팩트를 run에 대한 입력으로 선언하면 특정 모델을 트레이닝하는 데 사용된 데이터셋(및 데이터셋 버전)을 추적할 수 있으므로 모델 로깅 컨텍스트에서 특히 유용합니다. W&B는 수집된 정보를 사용하여 lineage map을 만듭니다.

use_artifact API를 사용하여 데이터셋 아티팩트를 run의 입력으로 선언하고 아티팩트 자체를 검색합니다.

job_type = "train_model"
config = {
    "optimizer": "adam",
    "batch_size": 128,
    "epochs": 5,
    "validation_split": 0.1,
}

# W&B run 초기화
run = wandb.init(project=project, job_type=job_type, config=config)

# 데이터셋 아티팩트 검색
version = "latest"
name = "{}:{}".format("{}_dataset".format(model_use_case_id), version)
artifact = run.use_artifact(artifact_or_name=name)

# 데이터프레임에서 특정 콘텐츠 가져오기
train_table = artifact.get("train_table")
x_train = train_table.get_column("x_train", convert_to="numpy")
y_train = train_table.get_column("y_train", convert_to="numpy")

모델의 입력 및 출력 추적에 대한 자세한 내용은 모델 계보 맵 만들기를 참조하세요.

모델 정의 및 트레이닝

이 가이드에서는 Keras를 사용하여 MNIST 데이터셋의 이미지를 분류하기 위해 2D Convolutional Neural Network (CNN)를 정의합니다.

MNIST 데이터에서 CNN 트레이닝
# 구성 사전의 값을 변수에 저장하여 쉽게 엑세스
num_classes = 10
input_shape = (28, 28, 1)
loss = "categorical_crossentropy"
optimizer = run.config["optimizer"]
metrics = ["accuracy"]
batch_size = run.config["batch_size"]
epochs = run.config["epochs"]
validation_split = run.config["validation_split"]

# 모델 아키텍처 생성
model = keras.Sequential(
    [
        layers.Input(shape=input_shape),
        layers.Conv2D(32, kernel_size=(3, 3), activation="relu"),
        layers.MaxPooling2D(pool_size=(2, 2)),
        layers.Conv2D(64, kernel_size=(3, 3), activation="relu"),
        layers.MaxPooling2D(pool_size=(2, 2)),
        layers.Flatten(),
        layers.Dropout(0.5),
        layers.Dense(num_classes, activation="softmax"),
    ]
)
model.compile(loss=loss, optimizer=optimizer, metrics=metrics)

# 트레이닝 데이터에 대한 레이블 생성
y_train = keras.utils.to_categorical(y_train, num_classes)

# 트레이닝 및 테스트 세트 생성
x_t, x_v, y_t, y_v = train_test_split(x_train, y_train, test_size=0.33)

다음으로 모델을 트레이닝합니다.

# 모델 트레이닝
model.fit(
    x=x_t,
    y=y_t,
    batch_size=batch_size,
    epochs=epochs,
    validation_data=(x_v, y_v),
    callbacks=[WandbCallback(log_weights=True, log_evaluation=True)],
)

마지막으로 모델을 로컬 머신에 저장합니다.

# 모델을 로컬에 저장
path = "model.h5"
model.save(path)

모델을 Model Registry에 로깅하고 연결

link_model API를 사용하여 하나 이상의 모델 파일을 W&B run에 로깅하고 W&B Model Registry에 연결합니다.

path = "./model.h5"
registered_model_name = "MNIST-dev"

run.link_model(path=path, registered_model_name=registered_model_name)
run.finish()

registered-model-name에 대해 지정한 이름이 아직 존재하지 않으면 W&B가 registered model을 생성합니다.

선택적 파라미터에 대한 자세한 내용은 API Reference 가이드의 link_model을 참조하세요.

모델 성능 평가

하나 이상의 모델의 성능을 평가하는 것이 일반적인 방법입니다.

먼저 이전 단계에서 W&B에 저장된 평가 데이터셋 아티팩트를 가져옵니다.

job_type = "evaluate_model"

# run 초기화
run = wandb.init(project=project, entity=entity, job_type=job_type)

model_use_case_id = "mnist"
version = "latest"

# 데이터셋 아티팩트를 가져오고 종속성으로 표시합니다.
artifact = run.use_artifact(
    "{}:{}".format("{}_dataset".format(model_use_case_id), version)
)

# 원하는 데이터프레임 가져오기
eval_table = artifact.get("eval_table")
x_eval = eval_table.get_column("x_eval", convert_to="numpy")
y_eval = eval_table.get_column("y_eval", convert_to="numpy")

평가할 W&B의 model version을 다운로드합니다. use_model API를 사용하여 모델에 엑세스하고 다운로드합니다.

alias = "latest"  # 에일리어스
name = "mnist_model"  # 모델 아티팩트 이름

# 모델에 엑세스하고 다운로드합니다. 다운로드한 아티팩트의 경로를 반환합니다.
downloaded_model_path = run.use_model(name=f"{name}:{alias}")

Keras 모델을 로드하고 손실을 계산합니다.

model = keras.models.load_model(downloaded_model_path)

y_eval = keras.utils.to_categorical(y_eval, 10)
(loss, _) = model.evaluate(x_eval, y_eval)
score = (loss, _)

마지막으로 손실 메트릭을 W&B run에 기록합니다.

# # 메트릭, 이미지, 테이블 또는 평가에 유용한 모든 데이터를 기록합니다.
run.log(data={"loss": (loss, _)})

모델 버전 승격

model alias를 사용하여 기계 학습 워크플로우의 다음 단계를 위해 모델 버전을 준비 완료로 표시합니다. 각 registered model에는 하나 이상의 model alias가 있을 수 있습니다. model alias는 한 번에 하나의 model version에만 속할 수 있습니다.

예를 들어, 모델의 성능을 평가한 후 모델이 프로덕션 준비가 되었다고 확신한다고 가정합니다. 해당 모델 버전을 승격하려면 해당 특정 model version에 production 에일리어스를 추가합니다.

W&B App UI를 사용하여 대화형으로 또는 Python SDK를 사용하여 프로그래밍 방식으로 model version에 에일리어스를 추가할 수 있습니다. 다음 단계에서는 W&B Model Registry App을 사용하여 에일리어스를 추가하는 방법을 보여줍니다.

  1. https://wandb.ai/registry/model에서 Model Registry App으로 이동합니다.
  2. registered model 이름 옆에 있는 View details를 클릭합니다.
  3. Versions 섹션 내에서 승격하려는 model version 이름 옆에 있는 View 버튼을 클릭합니다.
  4. Aliases 필드 옆에 있는 더하기 아이콘(+)을 클릭합니다.
  5. 나타나는 필드에 production을 입력합니다.
  6. 키보드에서 Enter 키를 누릅니다.

4.3.12.2 - Model Registry Terms and Concepts

모델 레지스트리 용어 및 개념

다음 용어는 W&B Model Registry의 주요 구성 요소를 설명합니다. 모델 버전, 모델 아티팩트등록된 모델.

Model version

모델 버전은 단일 모델 체크포인트를 나타냅니다. 모델 버전은 실험 내에서 특정 시점의 모델과 해당 파일의 스냅샷입니다.

모델 버전은 학습된 모델을 설명하는 데이터 및 메타데이터의 변경 불가능한 디렉토리입니다. W&B는 모델 아키텍처와 학습된 파라미터를 나중에 저장하고 복원할 수 있도록 모델 버전에 파일을 추가할 것을 제안합니다.

모델 버전은 하나의 model artifact에만 속합니다. 모델 버전은 0개 이상의 registered models에 속할 수 있습니다. 모델 버전은 모델 아티팩트에 기록된 순서대로 모델 아티팩트에 저장됩니다. W&B는 (동일한 model artifact에) 기록하는 모델이 이전 모델 버전과 다른 콘텐츠를 가지고 있음을 감지하면 자동으로 새 모델 버전을 생성합니다.

모델링 라이브러리에서 제공하는 직렬화 프로세스에서 생성된 파일을 모델 버전 내에 저장합니다(예: PyTorchKeras).

Model alias

모델 에일리어스는 등록된 모델에서 모델 버전을 의미적으로 관련된 식별자로 고유하게 식별하거나 참조할 수 있도록 하는 변경 가능한 문자열입니다. 에일리어스는 등록된 모델의 한 버전에만 할당할 수 있습니다. 이는 에일리어스가 프로그래밍 방식으로 사용될 때 고유한 버전을 참조해야 하기 때문입니다. 또한 에일리어스를 사용하여 모델의 상태(챔피언, 후보, production)를 캡처할 수 있습니다.

"best", "latest", "production" 또는 "staging"과 같은 에일리어스를 사용하여 특수 목적을 가진 모델 버전을 표시하는 것이 일반적입니다.

예를 들어 모델을 만들고 "best" 에일리어스를 할당한다고 가정합니다. run.use_model로 특정 모델을 참조할 수 있습니다.

import wandb
run = wandb.init()
name = f"{entity/project/model_artifact_name}:{alias}"
run.use_model(name=name)

Model tags

모델 태그는 하나 이상의 registered models에 속하는 키워드 또는 레이블입니다.

모델 태그를 사용하여 registered models를 카테고리로 구성하고 Model Registry의 검색 창에서 해당 카테고리를 검색합니다. 모델 태그는 Registered Model Card 상단에 나타납니다. ML 작업, 소유 팀 또는 우선 순위별로 registered models를 그룹화하는 데 사용할 수 있습니다. 그룹화를 위해 동일한 모델 태그를 여러 registered models에 추가할 수 있습니다.

Model artifact

Model artifact는 기록된 model versions의 모음입니다. 모델 버전은 모델 아티팩트에 기록된 순서대로 모델 아티팩트에 저장됩니다.

Model artifact는 하나 이상의 모델 버전을 포함할 수 있습니다. 모델 버전을 기록하지 않으면 Model artifact는 비어 있을 수 있습니다.

예를 들어, Model artifact를 만든다고 가정합니다. 모델 트레이닝 중에 체크포인트 중에 모델을 주기적으로 저장합니다. 각 체크포인트는 자체 model version에 해당합니다. 모델 트레이닝 및 체크포인트 저장 중에 생성된 모든 모델 버전은 트레이닝 스크립트 시작 시 생성한 동일한 Model artifact에 저장됩니다.

다음 이미지는 v0, v1 및 v2의 세 가지 모델 버전을 포함하는 Model artifact를 보여줍니다.

예제 Model artifact here를 봅니다.

Registered model

Registered model은 모델 버전에 대한 포인터(링크) 모음입니다. Registered model을 동일한 ML 작업에 대한 후보 모델의 “북마크” 폴더라고 생각할 수 있습니다. Registered model의 각 “북마크"는 model artifact에 속한 model version에 대한 포인터입니다. Model tags를 사용하여 Registered models를 그룹화할 수 있습니다.

Registered models는 종종 단일 모델링 유스 케이스 또는 작업에 대한 후보 모델을 나타냅니다. 예를 들어 사용하는 모델을 기반으로 다양한 이미지 분류 작업에 대해 Registered model을 만들 수 있습니다. ImageClassifier-ResNet50, ImageClassifier-VGG16, DogBreedClassifier-MobileNetV2 등. 모델 버전은 Registered model에 연결된 순서대로 버전 번호가 할당됩니다.

예제 Registered Model here를 봅니다.

4.3.12.3 - Track a model

W&B Python SDK를 사용하여 모델, 모델의 종속성 및 해당 모델과 관련된 기타 정보를 추적합니다.

W&B Python SDK를 사용하여 모델, 모델의 종속성 및 해당 모델과 관련된 기타 정보를 추적합니다.

W&B는 내부적으로 모델 아티팩트의 계보를 생성하며, 이 계보는 W&B App UI 또는 W&B Python SDK를 통해 프로그래밍 방식으로 볼 수 있습니다. 자세한 내용은 모델 계보 맵 생성을 참조하세요.

모델을 기록하는 방법

run.log_model API를 사용하여 모델을 기록합니다. 모델 파일이 저장된 경로를 path 파라미터에 제공합니다. 경로는 로컬 파일, 디렉토리 또는 s3://bucket/path와 같은 외부 버킷에 대한 참조 URI일 수 있습니다.

선택적으로 name 파라미터에 대한 모델 아티팩트의 이름을 제공합니다. name이 지정되지 않은 경우 W&B는 run ID가 앞에 붙은 입력 경로의 기본 이름을 사용합니다.

다음 코드 조각을 복사하여 붙여넣습니다. <>로 묶인 값을 사용자 고유의 값으로 바꾸십시오.

import wandb

# W&B run 초기화
run = wandb.init(project="<project>", entity="<entity>")

# 모델 기록
run.log_model(path="<path-to-model>", name="<name>")
예: Keras 모델을 W&B에 기록

다음 코드 예제는 컨볼루션 신경망 (CNN) 모델을 W&B에 기록하는 방법을 보여줍니다.

import os
import wandb
from tensorflow import keras
from tensorflow.keras import layers

config = {"optimizer": "adam", "loss": "categorical_crossentropy"}

# W&B run 초기화
run = wandb.init(entity="charlie", project="mnist-project", config=config)

# 트레이닝 알고리즘
loss = run.config["loss"]
optimizer = run.config["optimizer"]
metrics = ["accuracy"]
num_classes = 10
input_shape = (28, 28, 1)

model = keras.Sequential(
    [
        layers.Input(shape=input_shape),
        layers.Conv2D(32, kernel_size=(3, 3), activation="relu"),
        layers.MaxPooling2D(pool_size=(2, 2)),
        layers.Conv2D(64, kernel_size=(3, 3), activation="relu"),
        layers.MaxPooling2D(pool_size=(2, 2)),
        layers.Flatten(),
        layers.Dropout(0.5),
        layers.Dense(num_classes, activation="softmax"),
    ]
)

model.compile(loss=loss, optimizer=optimizer, metrics=metrics)

# 모델 저장
model_filename = "model.h5"
local_filepath = "./"
full_path = os.path.join(local_filepath, model_filename)
model.save(filepath=full_path)

# 모델 기록
run.log_model(path=full_path, name="MNIST")

# W&B에 run 종료를 명시적으로 알립니다.
run.finish()

4.3.12.4 - Create a registered model

모델링 작업을 위한 모든 후보 모델을 담을 등록된 모델 을 만드세요.

등록된 모델을 생성하여 모델링 작업을 위한 모든 후보 모델을 보관하세요. Model Registry 내에서 대화식으로 또는 Python SDK를 사용하여 프로그래밍 방식으로 등록된 모델을 생성할 수 있습니다.

프로그래밍 방식으로 등록된 모델 생성

W&B Python SDK로 모델을 프로그래밍 방식으로 등록하세요. 등록된 모델이 존재하지 않으면 W&B가 자동으로 등록된 모델을 생성합니다.

<>로 묶인 다른 값들을 사용자의 값으로 바꾸세요:

import wandb

run = wandb.init(entity="<entity>", project="<project>")
run.link_model(path="<path-to-model>", registered_model_name="<registered-model-name>")
run.finish()

registered_model_name에 제공하는 이름은 Model Registry App에 나타나는 이름입니다.

대화식으로 등록된 모델 생성

Model Registry App 내에서 대화식으로 등록된 모델을 생성하세요.

  1. https://wandb.ai/registry/model에서 Model Registry App으로 이동합니다.
  2. Model Registry 페이지의 오른쪽 상단에 있는 New registered model 버튼을 클릭합니다.
  3. 나타나는 패널에서 등록된 모델이 속할 엔터티를 Owning Entity 드롭다운에서 선택합니다.
  4. Name 필드에 모델 이름을 입력합니다.
  5. Type 드롭다운에서 등록된 모델에 연결할 아티팩트의 유형을 선택합니다.
  6. (선택 사항) Description 필드에 모델에 대한 설명을 추가합니다.
  7. (선택 사항) Tags 필드 내에서 하나 이상의 태그를 추가합니다.
  8. Register model을 클릭합니다.

4.3.12.5 - Link a model version

W&B 앱 또는 Python SDK를 사용하여 모델 버전을 등록된 모델에 연결합니다.

W&B 앱 또는 Python SDK를 사용하여 모델 버전을 등록된 모델에 연결합니다.

프로그램으로 모델 연결하기

link_model 메소드를 사용하여 프로그램 방식으로 모델 파일을 W&B run에 로그하고 W&B Model Registry에 연결합니다.

<>로 묶인 다른 값들을 사용자 정의 값으로 바꾸십시오:

import wandb

run = wandb.init(entity="<entity>", project="<project>")
run.link_model(path="<path-to-model>", registered_model_name="<registered-model-name>")
run.finish()

registered-model-name 파라미터에 지정한 이름이 아직 존재하지 않는 경우, W&B가 등록된 모델을 생성합니다.

예를 들어, Model Registry에 “Fine-Tuned-Review-Autocompletion”(registered-model-name="Fine-Tuned-Review-Autocompletion")이라는 등록된 모델이 이미 있다고 가정합니다. 그리고 몇몇 모델 버전이 연결되어 있다고 가정합니다: v0, v1, v2. 새로운 모델을 프로그램 방식으로 연결하고 동일한 등록된 모델 이름(registered-model-name="Fine-Tuned-Review-Autocompletion")을 사용하면, W&B는 이 모델을 기존 등록된 모델에 연결하고 모델 버전 v3을 할당합니다. 이 이름으로 등록된 모델이 없으면 새로운 등록된 모델이 생성되고 모델 버전 v0을 갖게 됩니다.

“Fine-Tuned-Review-Autocompletion” 등록된 모델 예시를 참조하십시오.

대화형으로 모델 연결하기

Model Registry 또는 Artifact browser를 사용하여 대화형으로 모델을 연결합니다.

  1. Model Registry 앱(https://wandb.ai/registry/model)으로 이동합니다.
  2. 새 모델을 연결하려는 등록된 모델 이름 옆에 마우스를 올려 놓습니다.
  3. View details 옆에 있는 미트볼 메뉴 아이콘(가로 점 3개)을 선택합니다.
  4. 드롭다운에서 Link new version을 선택합니다.
  5. Project 드롭다운에서 모델이 포함된 프로젝트 이름을 선택합니다.
  6. Model Artifact 드롭다운에서 모델 아티팩트 이름을 선택합니다.
  7. Version 드롭다운에서 등록된 모델에 연결하려는 모델 버전을 선택합니다.
  1. W&B 앱의 프로젝트 아티팩트 브라우저(https://wandb.ai/<entity>/<project>/artifacts)로 이동합니다.
  2. 왼쪽 사이드바에서 Artifacts 아이콘을 선택합니다.
  3. 레지스트리에 연결하려는 모델 버전을 클릭합니다.
  4. Version overview 섹션 내에서 Link to registry 버튼을 클릭합니다.
  5. 화면 오른쪽에 나타나는 모달에서 Select a register model 메뉴 드롭다운에서 등록된 모델을 선택합니다.
  6. Next step을 클릭합니다.
  7. (선택 사항) Aliases 드롭다운에서 에일리어스를 선택합니다.
  8. Link to registry를 클릭합니다.

연결된 모델의 소스 보기

연결된 모델의 소스를 보는 방법은 두 가지가 있습니다: 모델이 로그된 프로젝트 내의 아티팩트 브라우저와 W&B Model Registry.

포인터는 모델 레지스트리의 특정 모델 버전을 소스 모델 아티팩트(모델이 로그된 프로젝트 내에 있음)에 연결합니다. 소스 모델 아티팩트에는 모델 레지스트리에 대한 포인터도 있습니다.

  1. 모델 레지스트리(https://wandb.ai/registry/model)로 이동합니다.
  2. 등록된 모델 이름 옆에 있는 View details를 선택합니다.
  3. Versions 섹션 내에서 조사하려는 모델 버전 옆에 있는 View를 선택합니다.
  4. 오른쪽 패널 내에서 Version 탭을 클릭합니다.
  5. Version overview 섹션 내에 Source Version 필드가 포함된 행이 있습니다. Source Version 필드는 모델 이름과 모델 버전을 모두 보여줍니다.

예를 들어, 다음 이미지는 MNIST-dev라는 등록된 모델에 연결된 v0 모델 버전 mnist_model을 보여줍니다( Source version 필드 mnist_model:v0 참조).

  1. W&B 앱의 프로젝트 아티팩트 브라우저(https://wandb.ai/<entity>/<project>/artifacts)로 이동합니다.
  2. 왼쪽 사이드바에서 Artifacts 아이콘을 선택합니다.
  3. Artifacts 패널에서 model 드롭다운 메뉴를 확장합니다.
  4. 모델 레지스트리에 연결된 모델의 이름과 버전을 선택합니다.
  5. 오른쪽 패널 내에서 Version 탭을 클릭합니다.
  6. Version overview 섹션 내에 Linked To 필드가 포함된 행이 있습니다. Linked To 필드는 등록된 모델 이름과 해당 버전(registered-model-name:version)을 모두 보여줍니다.

예를 들어, 다음 이미지에는 MNIST-dev라는 등록된 모델이 있습니다( Linked To 필드 참조). 버전 v0(mnist_model:v0)이 있는 mnist_model이라는 모델 버전은 MNIST-dev 등록된 모델을 가리킵니다.

4.3.12.6 - Organize models

모델 태그를 사용하여 등록된 모델을 범주로 정리하고 해당 범주를 검색합니다.

  1. https://wandb.ai/registry/model 의 W&B Model Registry 앱으로 이동합니다.

  2. 모델 태그를 추가할 등록된 모델 이름 옆에 있는 View details 를 선택합니다.

  3. Model card 섹션으로 스크롤합니다.

  4. Tags 필드 옆에 있는 더하기 버튼 (**) 를 클릭합니다.

  5. 태그 이름을 입력하거나 기존 모델 태그를 검색합니다. 예를 들어 다음 이미지는 FineTuned-Review-Autocompletion 이라는 등록된 모델에 추가된 여러 모델 태그를 보여줍니다.

4.3.12.7 - Create model lineage map

이 페이지에서는 기존 W&B Model Registry에서 계보 그래프를 생성하는 방법을 설명합니다. W&B Registry의 계보 그래프에 대해 자세히 알아보려면 계보 맵 생성 및 보기를 참조하세요.

W&B에 모델 아티팩트를 로깅하는 유용한 기능은 계보 그래프입니다. 계보 그래프는 run에서 로깅한 아티팩트와 특정 run에서 사용한 아티팩트를 보여줍니다.

즉, 모델 아티팩트를 로깅할 때 최소한 모델 아티팩트를 사용하거나 생성한 W&B run을 볼 수 있습니다. 아티팩트 종속성 추적을 통해 모델 아티팩트에서 사용한 입력도 볼 수 있습니다.

예를 들어, 다음 이미지는 ML 실험 전반에 걸쳐 생성 및 사용된 아티팩트를 보여줍니다.

왼쪽에서 오른쪽으로 이미지는 다음을 보여줍니다.

  1. jumping-monkey-1 W&B run은 mnist_dataset:v0 데이터셋 아티팩트를 생성했습니다.
  2. vague-morning-5 W&B run은 mnist_dataset:v0 데이터셋 아티팩트를 사용하여 모델을 트레이닝했습니다. 이 W&B run의 출력은 mnist_model:v0라는 모델 아티팩트였습니다.
  3. serene-haze-6이라는 run은 모델 아티팩트(mnist_model:v0)를 사용하여 모델을 평가했습니다.

아티팩트 종속성 추적

use_artifact API를 사용하여 데이터셋 아티팩트를 W&B run에 대한 입력으로 선언하여 종속성을 추적합니다.

다음 코드 조각은 use_artifact API를 사용하는 방법을 보여줍니다.

# Initialize a run
run = wandb.init(project=project, entity=entity)

# Get artifact, mark it as a dependency
artifact = run.use_artifact(artifact_or_name="name", aliases="<alias>")

아티팩트를 검색한 후에는 해당 아티팩트를 사용하여 (예를 들어) 모델의 성능을 평가할 수 있습니다.

예시: 모델을 트레이닝하고 데이터셋을 모델의 입력으로 추적
job_type = "train_model"

config = {
    "optimizer": "adam",
    "batch_size": 128,
    "epochs": 5,
    "validation_split": 0.1,
}

run = wandb.init(project=project, job_type=job_type, config=config)

version = "latest"
name = "{}:{}".format("{}_dataset".format(model_use_case_id), version)

artifact = run.use_artifact(name)

train_table = artifact.get("train_table")
x_train = train_table.get_column("x_train", convert_to="numpy")
y_train = train_table.get_column("y_train", convert_to="numpy")

# Store values from our config dictionary into variables for easy accessing
num_classes = 10
input_shape = (28, 28, 1)
loss = "categorical_crossentropy"
optimizer = run.config["optimizer"]
metrics = ["accuracy"]
batch_size = run.config["batch_size"]
epochs = run.config["epochs"]
validation_split = run.config["validation_split"]

# Create model architecture
model = keras.Sequential(
    [
        layers.Input(shape=input_shape),
        layers.Conv2D(32, kernel_size=(3, 3), activation="relu"),
        layers.MaxPooling2D(pool_size=(2, 2)),
        layers.Conv2D(64, kernel_size=(3, 3), activation="relu"),
        layers.MaxPooling2D(pool_size=(2, 2)),
        layers.Flatten(),
        layers.Dropout(0.5),
        layers.Dense(num_classes, activation="softmax"),
    ]
)
model.compile(loss=loss, optimizer=optimizer, metrics=metrics)

# Generate labels for training data
y_train = keras.utils.to_categorical(y_train, num_classes)

# Create training and test set
x_t, x_v, y_t, y_v = train_test_split(x_train, y_train, test_size=0.33)

# Train the model
model.fit(
    x=x_t,
    y=y_t,
    batch_size=batch_size,
    epochs=epochs,
    validation_data=(x_v, y_v),
    callbacks=[WandbCallback(log_weights=True, log_evaluation=True)],
)

# Save model locally
path = "model.h5"
model.save(path)

path = "./model.h5"
registered_model_name = "MNIST-dev"
name = "mnist_model"

run.link_model(path=path, registered_model_name=registered_model_name, name=name)
run.finish()

4.3.12.8 - Document machine learning model

모델 카드에 설명을 추가하여 모델을 문서화하세요.

등록된 모델의 모델 카드에 설명을 추가하여 머신러닝 모델의 여러 측면을 문서화하세요. 문서화할 가치가 있는 몇 가지 주제는 다음과 같습니다.

  • 요약: 모델에 대한 요약입니다. 모델의 목적, 모델이 사용하는 머신러닝 프레임워크 등입니다.
  • 트레이닝 데이터: 사용된 트레이닝 데이터, 트레이닝 데이터 세트에 대해 수행된 처리, 해당 데이터가 저장된 위치 등을 설명합니다.
  • 아키텍처: 모델 아키텍처, 레이어 및 특정 설계 선택에 대한 정보입니다.
  • 모델 역직렬화: 팀 구성원이 모델을 메모리에 로드하는 방법에 대한 정보를 제공합니다.
  • Task: 머신러닝 모델이 수행하도록 설계된 특정 유형의 Task 또는 문제입니다. 모델의 의도된 기능을 분류한 것입니다.
  • 라이선스: 머신러닝 모델 사용과 관련된 법적 조건 및 권한입니다. 이를 통해 모델 사용자는 모델을 활용할 수 있는 법적 프레임워크를 이해할 수 있습니다.
  • 참조: 관련 연구 논문, 데이터셋 또는 외부 리소스에 대한 인용 또는 참조입니다.
  • 배포: 모델이 배포되는 방식 및 위치에 대한 세부 정보와 워크플로우 오케스트레이션 플랫폼과 같은 다른 엔터프라이즈 시스템에 모델을 통합하는 방법에 대한 지침입니다.

모델 카드에 설명 추가

  1. https://wandb.ai/registry/model의 W&B Model Registry 앱으로 이동합니다.
  2. 모델 카드를 생성하려는 등록된 모델 이름 옆에 있는 세부 정보 보기를 선택합니다.
  3. Model card 섹션으로 이동합니다.
  1. Description 필드 내에 머신러닝 모델에 대한 정보를 제공합니다. Markdown 마크업 언어를 사용하여 모델 카드 내에서 텍스트 서식을 지정합니다.

예를 들어 다음 이미지는 신용카드 채무 불이행 예측 등록 모델의 모델 카드를 보여줍니다.

4.3.12.9 - Download a model version

W&B Python SDK로 모델을 다운로드하는 방법

W&B Python SDK를 사용하여 Model Registry에 연결한 모델 아티팩트를 다운로드합니다.

<> 안의 값을 직접 변경하세요:

import wandb

# run 초기화
run = wandb.init(project="<project>", entity="<entity>")

# 모델에 엑세스하고 다운로드합니다. 다운로드된 아티팩트의 경로를 반환합니다.
downloaded_model_path = run.use_model(name="<your-model-name>")

다음 형식 중 하나를 사용하여 모델 버전을 참조하세요:

  • latest - 가장 최근에 연결된 모델 버전을 지정하려면 latest 에일리어스를 사용합니다.
  • v# - Registered Model에서 특정 버전을 가져오려면 v0, v1, v2 등을 사용합니다.
  • alias - 팀에서 모델 버전에 할당한 사용자 지정 에일리어스를 지정합니다.

가능한 파라미터 및 반환 유형에 대한 자세한 내용은 API Reference 가이드의 use_model을 참조하세요.

예시: 기록된 모델 다운로드 및 사용

예를 들어, 다음 코드 조각에서 사용자는 use_model API를 호출했습니다. 가져오려는 모델 아티팩트의 이름을 지정하고 버전/에일리어스도 제공했습니다. 그런 다음 API에서 반환된 경로를 downloaded_model_path 변수에 저장했습니다.

import wandb

entity = "luka"
project = "NLP_Experiments"
alias = "latest"  # 모델 버전에 대한 시맨틱 닉네임 또는 식별자
model_artifact_name = "fine-tuned-model"

# run 초기화
run = wandb.init()
# 모델에 엑세스하고 다운로드합니다. 다운로드된 아티팩트의 경로를 반환합니다.

downloaded_model_path = run.use_model(name=f"{entity/project/model_artifact_name}:{alias}")

<> 안의 값을 직접 변경하세요:

import wandb
# run 초기화
run = wandb.init(project="<project>", entity="<entity>")
# 모델에 엑세스하고 다운로드합니다. 다운로드된 아티팩트의 경로를 반환합니다.
downloaded_model_path = run.use_model(name="<your-model-name>")

다음 형식 중 하나를 사용하여 모델 버전을 참조하세요:

  • latest - 가장 최근에 연결된 모델 버전을 지정하려면 latest 에일리어스를 사용합니다.
  • v# - Registered Model에서 특정 버전을 가져오려면 v0, v1, v2 등을 사용합니다.
  • alias - 팀에서 모델 버전에 할당한 사용자 지정 에일리어스를 지정합니다.

가능한 파라미터 및 반환 유형에 대한 자세한 내용은 API Reference 가이드의 use_model을 참조하세요.

  1. https://wandb.ai/registry/model에서 Model Registry App으로 이동합니다.
  2. 다운로드하려는 모델이 포함된 Registered Model 이름 옆에 있는 세부 정보 보기를 선택합니다.
  3. 버전 섹션에서 다운로드하려는 모델 버전 옆에 있는 보기 버튼을 선택합니다.
  4. 파일 탭을 선택합니다.
  5. 다운로드하려는 모델 파일 옆에 있는 다운로드 버튼을 클릭합니다.

4.3.12.10 - Create alerts and notifications

새로운 모델 버전이 모델 레지스트리에 연결될 때 Slack 알림을 받으세요.

새로운 모델 버전이 모델 레지스트리에 연결될 때 Slack 알림을 받으세요.

  1. https://wandb.ai/registry/model의 W&B Model Registry 앱으로 이동합니다.
  2. 알림을 받을 Registered Model을 선택합니다.
  3. Connect Slack 버튼을 클릭합니다.
  4. OAuth 페이지에 나타나는 지침에 따라 Slack workspace에서 W&B를 활성화합니다.

팀에 대한 Slack 알림을 구성했으면 알림을 받을 Registered Model을 선택할 수 있습니다.

아래 스크린샷은 Slack 알림이 있는 FMNIST 분류기 Registered Model을 보여줍니다.

새로운 모델 버전이 FMNIST 분류기 Registered Model에 연결될 때마다 연결된 Slack 채널에 메시지가 자동으로 게시됩니다.

4.3.12.11 - Manage data governance and access control

모델 레지스트리 역할 기반 엑세스 제어(RBAC)를 사용하여 보호된 에일리어스를 업데이트할 수 있는 사람을 제어합니다.

보호된 에일리어스를 사용하여 모델 개발 파이프라인의 주요 단계를 나타냅니다. 모델 레지스트리 관리자 만이 보호된 에일리어스를 추가, 수정 또는 제거할 수 있습니다. 모델 레지스트리 관리자는 보호된 에일리어스를 정의하고 사용할 수 있습니다. W&B는 관리자가 아닌 사용자가 모델 버전에서 보호된 에일리어스를 추가하거나 제거하는 것을 차단합니다.

예를 들어, stagingproduction을 보호된 에일리어스로 설정했다고 가정합니다. 팀의 모든 구성원은 새로운 모델 버전을 추가할 수 있습니다. 그러나 관리자만이 staging 또는 production 에일리어스를 추가할 수 있습니다.

엑세스 제어 설정

다음 단계에서는 팀의 모델 레지스트리에 대한 엑세스 제어를 설정하는 방법을 설명합니다.

  1. https://wandb.ai/registry/model의 W&B Model Registry 앱으로 이동합니다.
  2. 페이지 오른쪽 상단의 톱니바퀴 버튼을 선택합니다.
  3. 레지스트리 관리자 관리 버튼을 선택합니다.
  4. 멤버 탭에서 모델 버전에서 보호된 에일리어스를 추가하고 제거할 수 있는 엑세스 권한을 부여할 사용자를 선택합니다.

보호된 에일리어스 추가

  1. https://wandb.ai/registry/model의 W&B Model Registry 앱으로 이동합니다.
  2. 페이지 오른쪽 상단의 톱니바퀴 버튼을 선택합니다.
  3. 보호된 에일리어스 섹션으로 스크롤합니다.
  4. 더하기 아이콘(+) 아이콘을 클릭하여 새 에일리어스를 추가합니다.

4.4 - Reports

기계 학습 프로젝트를 위한 프로젝트 관리 및 협업 툴

W&B Reports를 사용하여 다음을 수행할 수 있습니다.

  • Runs를 정리합니다.
  • 시각화 자료를 포함하고 자동화합니다.
  • 발견한 내용을 설명합니다.
  • 공동 작업자와 업데이트를 LaTeX zip 파일 또는 PDF로 공유합니다.

다음 이미지는 트레이닝 과정에서 W&B에 기록된 메트릭에서 생성된 리포트의 섹션을 보여줍니다.

위 이미지가 가져온 리포트는 여기에서 볼 수 있습니다.

작동 방식

몇 번의 클릭으로 협업 리포트를 만듭니다.

  1. W&B App에서 W&B project 워크스페이스로 이동합니다.
  2. 워크스페이스의 오른쪽 상단 모서리에 있는 리포트 만들기 버튼을 클릭합니다.
  1. 리포트 만들기라는 모달이 나타납니다. 리포트에 추가할 차트와 패널을 선택합니다. (차트와 패널은 나중에 추가하거나 제거할 수 있습니다.)
  2. 리포트 만들기를 클릭합니다.
  3. 원하는 상태로 리포트를 편집합니다.
  4. 프로젝트에 게시를 클릭합니다.
  5. 공유 버튼을 클릭하여 공동 작업자와 리포트를 공유합니다.

W&B Python SDK를 사용하여 대화형 및 프로그래밍 방식으로 리포트를 만드는 방법에 대한 자세한 내용은 리포트 만들기 페이지를 참조하세요.

시작 방법

유스 케이스에 따라 다음 리소스를 탐색하여 W&B Reports를 시작하세요.

권장 모범 사례 및 팁

Experiments 및 로깅에 대한 모범 사례 및 팁은 모범 사례: Reports를 참조하세요.

4.4.1 - Create a report

W&B App UI를 사용하거나 Weights & Biases SDK를 사용하여 프로그래밍 방식으로 W&B 리포트 를 만드세요.

W&B App UI 또는 W&B Python SDK를 사용하여 프로그래밍 방식으로 리포트를 대화식으로 생성합니다.

  1. W&B App에서 프로젝트 워크스페이스로 이동합니다.

  2. 워크스페이스의 오른쪽 상단에서 Create report(리포트 생성)를 클릭합니다.

  3. 모달이 나타납니다. 먼저 시작할 차트를 선택합니다. 리포트 인터페이스에서 나중에 차트를 추가하거나 삭제할 수 있습니다.

  4. Filter run sets(run 세트 필터링) 옵션을 선택하여 새 run이 리포트에 추가되는 것을 방지합니다. 이 옵션을 켜거나 끌 수 있습니다. Create report(리포트 생성)를 클릭하면 리포트 탭에서 계속 작업할 수 있는 임시 리포트가 제공됩니다.

  1. W&B App에서 프로젝트 워크스페이스로 이동합니다.

  2. 프로젝트에서 Reports(리포트) 탭(클립보드 이미지)을 선택합니다.

  3. 리포트 페이지에서 Create Report(리포트 생성) 버튼을 선택합니다.

wandb 라이브러리를 사용하여 프로그래밍 방식으로 리포트를 생성합니다.

  1. W&B SDK 및 Workspaces API를 설치합니다:

    pip install wandb wandb-workspaces
    
  2. 다음으로 워크스페이스를 가져옵니다.

    import wandb
    import wandb_workspaces.reports.v2 as wr
    
  3. wandb_workspaces.reports.v2.Report로 리포트를 생성합니다. Report Class Public API(wandb.apis.reports)로 리포트 인스턴스를 생성합니다. 프로젝트 이름을 지정합니다.

    report = wr.Report(project="report_standard")
    
  4. 리포트를 저장합니다. .save() 메소드를 호출할 때까지 리포트가 W&B 서버에 업로드되지 않습니다.

    report.save()
    

App UI 또는 프로그래밍 방식으로 리포트를 대화식으로 편집하는 방법에 대한 자세한 내용은 리포트 편집을 참조하십시오.

4.4.2 - Edit a report

App UI를 통해 또는 W&B SDK를 사용하여 프로그래밍 방식으로 리포트 를 대화형으로 편집합니다.

App UI 또는 W&B SDK를 사용하여 프로그래밍 방식으로 리포트를 상호 작용하며 편집합니다.

Reports는 블록 으로 구성됩니다. 블록은 리포트의 본문을 구성합니다. 이러한 블록 내에서 텍스트, 이미지, 임베디드 시각화, Experiments 및 run의 플롯, 그리고 패널 그리드를 추가할 수 있습니다.

패널 그리드 는 패널과 run 세트 를 담는 특정 유형의 블록입니다. Run 세트는 W&B의 프로젝트에 기록된 run의 모음입니다. 패널은 run 세트 data의 시각화입니다.

플롯 추가

각 패널 그리드에는 run 세트와 패널 세트가 있습니다. 섹션 하단의 run 세트는 그리드의 패널에 표시되는 data를 제어합니다. 서로 다른 run 세트의 data를 가져오는 차트를 추가하려면 새 패널 그리드를 만드십시오.

리포트에 슬래시(/)를 입력하여 드롭다운 메뉴를 표시합니다. 패널 추가 를 선택하여 패널을 추가합니다. 라인 플롯, 산점도 또는 병렬 좌표 차트를 포함하여 W&B에서 지원하는 모든 패널을 추가할 수 있습니다.

리포트에 차트 추가

SDK를 사용하여 프로그래밍 방식으로 리포트에 플롯을 추가합니다. 하나 이상의 플롯 또는 차트 오브젝트 목록을 PanelGrid Public API Class의 panels 파라미터에 전달합니다. 관련 Python Class를 사용하여 플롯 또는 차트 오브젝트를 생성합니다.

다음 예제는 라인 플롯과 산점도를 만드는 방법을 보여줍니다.

import wandb
import wandb_workspaces.reports.v2 as wr

report = wr.Report(
    project="report-editing",
    title="An amazing title",
    description="A descriptive description.",
)

blocks = [
    wr.PanelGrid(
        panels=[
            wr.LinePlot(x="time", y="velocity"),
            wr.ScatterPlot(x="time", y="acceleration"),
        ]
    )
]

report.blocks = blocks
report.save()

프로그래밍 방식으로 리포트에 추가할 수 있는 사용 가능한 플롯 및 차트에 대한 자세한 내용은 wr.panels를 참조하십시오.

Run 세트 추가

App UI 또는 W&B SDK를 사용하여 프로젝트에서 run 세트를 상호 작용하며 추가합니다.

리포트에 슬래시(/)를 입력하여 드롭다운 메뉴를 표시합니다. 드롭다운에서 패널 그리드를 선택합니다. 그러면 리포트가 생성된 프로젝트에서 run 세트가 자동으로 가져옵니다.

wr.Runset()wr.PanelGrid Class를 사용하여 프로젝트에서 run 세트를 추가합니다. 다음 절차에서는 run 세트를 추가하는 방법을 설명합니다.

  1. wr.Runset() 오브젝트 인스턴스를 만듭니다. 프로젝트 파라미터에 대한 run 세트가 포함된 프로젝트 이름과 entity 파라미터에 대한 프로젝트를 소유한 entity를 제공합니다.
  2. wr.PanelGrid() 오브젝트 인스턴스를 만듭니다. 하나 이상의 run 세트 오브젝트 목록을 runsets 파라미터에 전달합니다.
  3. 하나 이상의 wr.PanelGrid() 오브젝트 인스턴스를 목록에 저장합니다.
  4. 패널 그리드 인스턴스 목록으로 리포트 인스턴스 블록 속성을 업데이트합니다.
import wandb
import wandb_workspaces.reports.v2 as wr

report = wr.Report(
    project="report-editing",
    title="An amazing title",
    description="A descriptive description.",
)

panel_grids = wr.PanelGrid(
    runsets=[wr.RunSet(project="<project-name>", entity="<entity-name>")]
)

report.blocks = [panel_grids]
report.save()

선택적으로 SDK에 대한 한 번의 호출로 run 세트와 패널을 추가할 수 있습니다.

import wandb

report = wr.Report(
    project="report-editing",
    title="An amazing title",
    description="A descriptive description.",
)

panel_grids = wr.PanelGrid(
    panels=[
        wr.LinePlot(
            title="line title",
            x="x",
            y=["y"],
            range_x=[0, 100],
            range_y=[0, 100],
            log_x=True,
            log_y=True,
            title_x="x axis title",
            title_y="y axis title",
            ignore_outliers=True,
            groupby="hyperparam1",
            groupby_aggfunc="mean",
            groupby_rangefunc="minmax",
            smoothing_factor=0.5,
            smoothing_type="gaussian",
            smoothing_show_original=True,
            max_runs_to_show=10,
            plot_type="stacked-area",
            font_size="large",
            legend_position="west",
        ),
        wr.ScatterPlot(
            title="scatter title",
            x="y",
            y="y",
            # z='x',
            range_x=[0, 0.0005],
            range_y=[0, 0.0005],
            # range_z=[0,1],
            log_x=False,
            log_y=False,
            # log_z=True,
            running_ymin=True,
            running_ymean=True,
            running_ymax=True,
            font_size="small",
            regression=True,
        ),
    ],
    runsets=[wr.RunSet(project="<project-name>", entity="<entity-name>")],
)


report.blocks = [panel_grids]
report.save()

Run 세트 고정

리포트는 프로젝트의 최신 data를 표시하도록 run 세트를 자동으로 업데이트합니다. 해당 run 세트를 고정 하여 리포트에서 run 세트를 보존할 수 있습니다. run 세트를 고정하면 특정 시점에 리포트에서 run 세트의 상태가 보존됩니다.

리포트를 볼 때 run 세트를 고정하려면 필터 버튼 근처의 패널 그리드에서 눈송이 아이콘을 클릭합니다.

코드 블록 추가

App UI 또는 W&B SDK를 사용하여 리포트에 코드 블록을 상호 작용하며 추가합니다.

리포트에 슬래시(/)를 입력하여 드롭다운 메뉴를 표시합니다. 드롭다운에서 코드 를 선택합니다.

코드 블록 오른쪽에 있는 프로그래밍 언어 이름을 선택합니다. 그러면 드롭다운이 확장됩니다. 드롭다운에서 프로그래밍 언어 구문을 선택합니다. Javascript, Python, CSS, JSON, HTML, Markdown 및 YAML 중에서 선택할 수 있습니다.

wr.CodeBlock Class를 사용하여 프로그래밍 방식으로 코드 블록을 만듭니다. 각각 language 및 code 파라미터에 대해 표시할 언어 이름과 코드를 제공합니다.

예를 들어 다음 예제는 YAML 파일의 목록을 보여줍니다.

import wandb
import wandb_workspaces.reports.v2 as wr

report = wr.Report(project="report-editing")

report.blocks = [
    wr.CodeBlock(
        code=["this:", "- is", "- a", "cool:", "- yaml", "- file"], language="yaml"
    )
]

report.save()

그러면 다음과 유사한 코드 블록이 렌더링됩니다.

this:
- is
- a
cool:
- yaml
- file

다음 예제는 Python 코드 블록을 보여줍니다.

report = wr.Report(project="report-editing")


report.blocks = [wr.CodeBlock(code=["Hello, World!"], language="python")]

report.save()

그러면 다음과 유사한 코드 블록이 렌더링됩니다.

Hello, World!

Markdown 추가

App UI 또는 W&B SDK를 사용하여 리포트에 Markdown을 상호 작용하며 추가합니다.

리포트에 슬래시(/)를 입력하여 드롭다운 메뉴를 표시합니다. 드롭다운에서 Markdown 을 선택합니다.

wandb.apis.reports.MarkdownBlock Class를 사용하여 프로그래밍 방식으로 Markdown 블록을 만듭니다. 문자열을 text 파라미터에 전달합니다.

import wandb
import wandb_workspaces.reports.v2 as wr

report = wr.Report(project="report-editing")

report.blocks = [
    wr.MarkdownBlock(text="Markdown cell with *italics* and **bold** and $e=mc^2$")
]

그러면 다음과 유사한 Markdown 블록이 렌더링됩니다.

HTML 요소 추가

App UI 또는 W&B SDK를 사용하여 리포트에 HTML 요소를 상호 작용하며 추가합니다.

리포트에 슬래시(/)를 입력하여 드롭다운 메뉴를 표시합니다. 드롭다운에서 텍스트 블록 유형을 선택합니다. 예를 들어 H2 제목 블록을 만들려면 Heading 2 옵션을 선택합니다.

하나 이상의 HTML 요소 목록을 wandb.apis.reports.blocks 속성에 전달합니다. 다음 예제는 H1, H2 및 순서가 지정되지 않은 목록을 만드는 방법을 보여줍니다.

import wandb
import wandb_workspaces.reports.v2 as wr

report = wr.Report(project="report-editing")

report.blocks = [
    wr.H1(text="How Programmatic Reports work"),
    wr.H2(text="Heading 2"),
    wr.UnorderedList(items=["Bullet 1", "Bullet 2"]),
]

report.save()

그러면 다음과 같은 HTML 요소가 렌더링됩니다.

리치 미디어 링크 임베드

App UI 또는 W&B SDK를 사용하여 리포트 내에 리치 미디어를 임베드합니다.

URL을 복사하여 리포트에 붙여넣어 리포트 내에 리치 미디어를 임베드합니다. 다음 애니메이션은 Twitter, YouTube 및 SoundCloud에서 URL을 복사하여 붙여넣는 방법을 보여줍니다.

Twitter

트윗 링크 URL을 복사하여 리포트에 붙여넣어 리포트 내에서 트윗을 봅니다.

Youtube

YouTube 비디오 URL 링크를 복사하여 리포트에 붙여넣어 리포트에 비디오를 임베드합니다.

SoundCloud

SoundCloud 링크를 복사하여 리포트에 붙여넣어 리포트에 오디오 파일을 임베드합니다.

하나 이상의 임베디드 미디어 오브젝트 목록을 wandb.apis.reports.blocks 속성에 전달합니다. 다음 예제는 비디오 및 Twitter 미디어를 리포트에 임베드하는 방법을 보여줍니다.

import wandb
import wandb_workspaces.reports.v2 as wr

report = wr.Report(project="report-editing")

report.blocks = [
    wr.Video(url="https://www.youtube.com/embed/6riDJMI-Y8U"),
    wr.Twitter(
        embed_html='<blockquote class="twitter-tweet"><p lang="en" dir="ltr">The voice of an angel, truly. <a href="https://twitter.com/hashtag/MassEffect?src=hash&amp;ref_src=twsrc%5Etfw">#MassEffect</a> <a href="https://t.co/nMev97Uw7F">pic.twitter.com/nMev97Uw7F</a></p>&mdash; Mass Effect (@masseffect) <a href="https://twitter.com/masseffect/status/1428748886655569924?ref_src=twsrc%5Etfw">August 20, 2021</a></blockquote>\n'
    ),
]
report.save()

패널 그리드 복제 및 삭제

재사용하려는 레이아웃이 있는 경우 패널 그리드를 선택하고 복사하여 붙여넣어 동일한 리포트에서 복제하거나 다른 리포트에 붙여넣을 수도 있습니다.

오른쪽 상단 모서리에 있는 드래그 핸들을 선택하여 전체 패널 그리드 섹션을 강조 표시합니다. 클릭하고 드래그하여 패널 그리드, 텍스트 및 제목과 같은 리포트의 영역을 강조 표시하고 선택합니다.

패널 그리드를 선택하고 키보드에서 delete를 눌러 패널 그리드를 삭제합니다.

헤더를 축소하여 Reports 구성

Report에서 헤더를 축소하여 텍스트 블록 내의 콘텐츠를 숨깁니다. 리포트가 로드되면 확장된 헤더만 콘텐츠를 표시합니다. 리포트에서 헤더를 축소하면 콘텐츠를 구성하고 과도한 data 로드를 방지하는 데 도움이 될 수 있습니다. 다음 gif는 해당 프로세스를 보여줍니다.

리포트에서 헤더 축소.

여러 차원에 걸쳐 관계 시각화

여러 차원에 걸쳐 관계를 효과적으로 시각화하려면 색상 그레이디언트를 사용하여 변수 중 하나를 나타냅니다. 이렇게 하면 명확성이 향상되고 패턴을 더 쉽게 해석할 수 있습니다.

  1. 색상 그레이디언트로 나타낼 변수를 선택합니다(예: 페널티 점수, 학습률 등). 이렇게 하면 트레이닝 시간(x축)에 따라 보상/부작용(y축)과 페널티(색상)가 상호 작용하는 방식을 더 명확하게 이해할 수 있습니다.
  2. 주요 추세를 강조 표시합니다. 특정 run 그룹 위에 마우스를 올리면 시각화에서 해당 run이 강조 표시됩니다.

4.4.3 - Collaborate on reports

W&B 리포트 를 동료, 동료 직원 및 팀과 협업하고 공유하세요.

리포트를 저장한 후 공유 버튼을 선택하여 협업할 수 있습니다. 편집 버튼을 선택하면 리포트의 초안 사본이 생성됩니다. 초안 리포트는 자동 저장됩니다. 변경 사항을 공유 리포트에 게시하려면 리포트에 저장을 선택하세요.

편집 충돌이 발생하면 경고 알림이 나타납니다. 이는 사용자와 다른 협업자가 동시에 동일한 리포트를 편집하는 경우에 발생할 수 있습니다. 경고 알림은 잠재적인 편집 충돌을 해결하는 데 도움이 됩니다.

'Public' 프로젝트의 리포트에 대한 리포트 공유 모달

리포트에 댓글 달기

리포트의 패널에 댓글을 직접 추가하려면 해당 패널에서 댓글 버튼을 클릭하세요.

패널에 댓글 추가하기

4.4.4 - Clone and export reports

W&B 리포트 를 PDF 또는 LaTeX로 내보내세요.

Reports 내보내기

리포트를 PDF 또는 LaTeX로 내보냅니다. 리포트 내에서 케밥 아이콘을 선택하여 드롭다운 메뉴를 확장합니다. 다운로드를 선택하고 PDF 또는 LaTeX 출력 형식을 선택합니다.

Reports 복제

리포트 내에서 케밥 아이콘을 선택하여 드롭다운 메뉴를 확장합니다. 이 리포트 복제 버튼을 선택합니다. 모달에서 복제된 리포트의 대상을 선택합니다. 리포트 복제를 선택합니다.

프로젝트의 템플릿과 형식을 재사용하기 위해 리포트를 복제합니다. 팀 계정 내에서 프로젝트를 복제하면 복제된 프로젝트가 팀에 표시됩니다. 개인 계정 내에서 복제된 프로젝트는 해당 사용자에게만 표시됩니다.

URL에서 Report를 로드하여 템플릿으로 사용합니다.

report = wr.Report(
    project=PROJECT, title="Quickstart Report", description="That was easy!"
)  # Create
report.save()  # Save
new_report = wr.Report.from_url(report.url)  # Load

new_report.blocks 내에서 콘텐츠를 편집합니다.

pg = wr.PanelGrid(
    runsets=[
        wr.Runset(ENTITY, PROJECT, "First Run Set"),
        wr.Runset(ENTITY, PROJECT, "Elephants Only!", query="elephant"),
    ],
    panels=[
        wr.LinePlot(x="Step", y=["val_acc"], smoothing_factor=0.8),
        wr.BarPlot(metrics=["acc"]),
        wr.MediaBrowser(media_keys="img", num_columns=1),
        wr.RunComparer(diff_only="split", layout={"w": 24, "h": 9}),
    ],
)
new_report.blocks = (
    report.blocks[:1] + [wr.H1("Panel Grid Example"), pg] + report.blocks[1:]
)
new_report.save()

4.4.5 - Embed a report

W&B 리포트 를 Notion에 직접 삽입하거나 HTML IFrame 요소를 사용하여 삽입하세요.

HTML iframe 요소

리포트의 오른쪽 상단 모서리에 있는 Share 버튼을 선택합니다. 모달 창이 나타납니다. 모달 창에서 Copy embed code를 선택합니다. 복사된 코드는 Inline Frame (IFrame) HTML 요소 내에서 렌더링됩니다. 복사된 코드를 원하는 iframe HTML 요소에 붙여넣습니다.

Confluence

다음 애니메이션은 Confluence의 IFrame 셀 내에 리포트에 대한 직접 링크를 삽입하는 방법을 보여줍니다.

Notion

다음 애니메이션은 Notion의 Embed 블록과 리포트의 임베디드 코드를 사용하여 리포트를 Notion 문서에 삽입하는 방법을 보여줍니다.

Gradio

gr.HTML 요소를 사용하여 Gradio 앱 내에 W&B Reports를 임베드하고 Hugging Face Spaces 내에서 사용할 수 있습니다.

import gradio as gr


def wandb_report(url):
    iframe = f'<iframe src={url} style="border:none;height:1024px;width:100%">'
    return gr.HTML(iframe)


with gr.Blocks() as demo:
    report = wandb_report(
        "https://wandb.ai/_scott/pytorch-sweeps-demo/reports/loss-22-10-07-16-00-17---VmlldzoyNzU2NzAx"
    )
demo.launch()

4.4.6 - Compare runs across projects

프로젝트 간 리포트를 사용하여 서로 다른 두 프로젝트의 run을 비교합니다.

프로젝트 간 리포트를 사용하여 서로 다른 두 프로젝트의 run을 비교하세요. run 세트 테이블에서 프로젝트 선택기를 사용하여 프로젝트를 선택합니다.

Compare runs across different projects

섹션의 시각화는 첫 번째 활성 runset에서 열을 가져옵니다. 라인 플롯에서 찾고 있는 메트릭이 보이지 않으면 섹션에서 첫 번째로 선택한 run 세트에 해당 열이 있는지 확인하세요.

이 기능은 시계열 라인의 기록 데이터를 지원하지만, 서로 다른 프로젝트에서 서로 다른 요약 메트릭을 가져오는 것은 지원하지 않습니다. 즉, 다른 프로젝트에만 기록된 열에서 산점도를 만들 수 없습니다.

두 프로젝트의 run을 비교해야 하는데 열이 작동하지 않으면, 한 프로젝트의 run에 태그를 추가한 다음 해당 run을 다른 프로젝트로 이동하세요. 각 프로젝트의 run만 필터링할 수 있지만, 리포트에는 두 세트의 run에 대한 모든 열이 포함됩니다.

보기 전용 리포트 링크

비공개 프로젝트 또는 팀 프로젝트에 있는 리포트에 대한 보기 전용 링크를 공유하세요.

보기 전용 리포트 링크는 URL에 비밀 엑세스 토큰을 추가하므로, 링크를 여는 모든 사람이 페이지를 볼 수 있습니다. 누구나 매직 링크를 사용하여 먼저 로그인하지 않고도 리포트를 볼 수 있습니다. W&B Local 프라이빗 클라우드 설치를 사용하는 고객의 경우, 이러한 링크는 방화벽 내에 유지되므로 팀 구성원 중 프라이빗 인스턴스에 대한 엑세스 권한과 보기 전용 링크에 대한 엑세스 권한이 있는 사람만 리포트를 볼 수 있습니다.

보기 전용 모드에서는 로그인하지 않은 사람도 차트를 보고 마우스를 올려 값의 툴팁을 보고, 차트를 확대/축소하고, 테이블에서 열을 스크롤할 수 있습니다. 보기 모드에서는 데이터를 탐색하기 위해 새 차트 또는 새 테이블 쿼리를 만들 수 없습니다. 리포트 링크의 보기 전용 방문자는 run을 클릭하여 run 페이지로 이동할 수 없습니다. 또한 보기 전용 방문자는 공유 모달을 볼 수 없고 대신 마우스를 올리면 보기 전용 엑세스에는 공유를 사용할 수 없습니다라는 툴팁이 표시됩니다.

그래프를 리포트로 보내기

진행 상황을 추적하기 위해 워크스페이스에서 리포트로 그래프를 보냅니다. 리포트에 복사할 차트 또는 패널의 드롭다운 메뉴를 클릭하고 리포트에 추가를 클릭하여 대상 리포트를 선택합니다.

4.4.7 - Example reports

Reports 갤러리

노트: 빠른 요약과 함께 시각화 추가

프로젝트 개발에서 중요한 관찰 내용, 향후 작업 아이디어 또는 달성한 이정표를 캡처합니다. 리포트의 모든 실험 run은 해당 파라미터, 메트릭, 로그 및 코드로 연결되므로 작업의 전체 컨텍스트를 저장할 수 있습니다.

텍스트를 적고 관련 차트를 가져와 통찰력을 설명합니다.

트레이닝 시간 비교를 공유하는 방법에 대한 예는 Inception-ResNet-V2가 너무 느릴 때 수행할 작업 W&B Report를 참조하십시오.

복잡한 코드베이스에서 가장 좋은 예제를 저장하여 쉽게 참조하고 향후 상호 작용할 수 있습니다. Lyft 데이터 세트의 LIDAR 포인트 클라우드를 시각화하고 3D 경계 상자로 주석을 추가하는 방법에 대한 예는 LIDAR 포인트 클라우드 W&B Report를 참조하십시오.

협업: 동료와 발견한 내용 공유

프로젝트 시작 방법, 지금까지 관찰한 내용 공유, 최신 findings 종합 방법을 설명합니다. 동료는 패널에서 또는 리포트 끝에 있는 댓글을 사용하여 제안하거나 세부 사항을 논의할 수 있습니다.

동료가 직접 탐색하고 추가 통찰력을 얻고 다음 단계를 더 잘 계획할 수 있도록 동적 설정을 포함합니다. 이 예에서는 세 가지 유형의 Experiments를 독립적으로 시각화, 비교 또는 평균화할 수 있습니다.

벤치마크의 첫 번째 run과 관찰 내용을 공유하는 방법에 대한 예는 SafeLife 벤치마크 Experiments W&B Report를 참조하십시오.

슬라이더와 구성 가능한 미디어 패널을 사용하여 model의 결과 또는 트레이닝 진행률을 보여줍니다. 슬라이더가 있는 W&B Report의 예는 귀여운 동물과 포스트 모던 스타일 전이: 다중 도메인 이미지 합성을 위한 StarGAN v2 리포트를 참조하십시오.

작업 로그: 시도한 내용 추적 및 다음 단계 계획

Experiments에 대한 생각, findings, 주의 사항 및 다음 단계를 프로젝트를 진행하면서 기록하여 모든 것을 한 곳에서 체계적으로 관리합니다. 이를 통해 스크립트 외에 중요한 모든 부분을 “문서화"할 수 있습니다. findings를 보고하는 방법에 대한 예는 누가 그들인가? 변환기를 사용한 텍스트 명확성 W&B Report를 참조하십시오.

프로젝트의 스토리를 전달하면 귀하와 다른 사람들이 나중에 참조하여 model이 개발된 방법과 이유를 이해할 수 있습니다. findings를 보고하는 방법에 대한 내용은 운전석에서 바라본 시각 W&B Report를 참조하십시오.

OpenAI Robotics 팀이 대규모 기계 학습 프로젝트를 실행하기 위해 W&B Reports를 사용한 방법을 탐색하기 위해 W&B Reports가 사용된 방법에 대한 예는 W&B Reports를 사용하여 엔드투엔드 손재주 학습을 참조하십시오.

4.5 - Automations

This feature requires a Pro or Enterprise plan.

이 페이지는 W&B의 자동화 에 대해 설명합니다. 자동화 생성을 통해, artifact 아티팩트 버전이 생성될 때와 같이 W&B의 이벤트에 따라 자동 모델 테스트 및 배포와 같은 워크플로우 단계를 트리거할 수 있습니다.

예를 들어, 새로운 버전이 생성될 때 Slack 채널에 게시하거나, production 에일리어스가 아티팩트에 추가될 때 자동 테스트를 트리거하는 훅을 실행하는 자동화를 설정할 수 있습니다.

개요

자동화는 특정 이벤트가 레지스트리 또는 프로젝트에서 발생할 때 실행될 수 있습니다.

Registry의 아티팩트의 경우, 다음을 실행하도록 자동화를 구성할 수 있습니다.

  • 새로운 아티팩트 버전이 컬렉션에 연결될 때. 예를 들어, 새로운 후보 모델에 대한 테스팅 및 유효성 검사 워크플로우를 트리거합니다.
  • 에일리어스가 아티팩트 버전에 추가될 때. 예를 들어, 에일리어스가 모델 버전에 추가될 때 배포 워크플로우를 트리거합니다.

project의 아티팩트의 경우, 다음을 실행하도록 자동화를 구성할 수 있습니다.

  • 새로운 버전이 아티팩트에 추가될 때. 예를 들어, 새로운 버전의 데이터셋 아티팩트가 주어진 컬렉션에 추가될 때 트레이닝 작업을 시작합니다.
  • 에일리어스가 아티팩트 버전에 추가될 때. 예를 들어, “redaction” 에일리어스가 데이터셋 아티팩트에 추가될 때 PII 삭제 워크플로우를 트리거합니다.

자세한 내용은 자동화 이벤트 및 범위를 참조하세요.

자동화 생성 방법:

  1. 필요한 경우, 엑세스 토큰, 비밀번호 또는 민감한 구성 세부 정보와 같이 자동화에 필요한 민감한 문자열에 대한 secrets를 구성합니다. Secrets는 Team Settings에서 정의됩니다. Secrets는 일반적으로 훅 자동화에서 자격 증명 또는 토큰을 일반 텍스트로 노출하거나 훅의 페이로드에 하드 코딩하지 않고 훅의 외부 서비스에 안전하게 전달하는 데 사용됩니다.
  2. W&B가 Slack에 게시하거나 사용자를 대신하여 훅을 실행할 수 있도록 훅 또는 Slack 알림을 구성합니다. 단일 자동화 작업(훅 또는 Slack 알림)은 여러 자동화에서 사용할 수 있습니다. 이러한 작업은 Team Settings에서 정의됩니다.
  3. 프로젝트 또는 레지스트리에서 자동화를 생성합니다.
    1. 새로운 아티팩트 버전이 추가될 때와 같이 감시할 이벤트를 정의합니다.
    2. 이벤트가 발생할 때 수행할 작업(Slack 채널에 게시 또는 훅 실행)을 정의합니다. 훅의 경우, 필요한 경우 엑세스 토큰에 사용할 secret 및/또는 페이로드와 함께 보낼 secret을 지정합니다.

다음 단계

4.5.1 - Create an automation

This feature requires a Pro or Enterprise plan.

이 페이지에서는 W&B 자동화 생성 및 관리에 대한 개요를 제공합니다. 자세한 내용은 Slack 자동화 생성 또는 Webhook 자동화 생성을 참조하세요.

요구 사항

  • 팀 관리자는 팀의 Projects에 대한 자동화와 웹훅, 보안 비밀 또는 Slack 연결과 같은 자동화 구성 요소를 생성하고 관리할 수 있습니다. 팀 설정을 참조하세요.
  • 레지스트리 자동화를 생성하려면 레지스트리에 대한 엑세스 권한이 있어야 합니다. 레지스트리 엑세스 구성을 참조하세요.
  • Slack 자동화를 생성하려면 선택한 Slack 인스턴스 및 채널에 게시할 수 있는 권한이 있어야 합니다.

자동화 생성

Project 또는 레지스트리의 Automations 탭에서 자동화를 생성합니다. 개략적으로 자동화를 생성하려면 다음 단계를 따르세요.

  1. 필요한 경우 엑세스 토큰, 비밀번호 또는 SSH 키와 같이 자동화에 필요한 각 민감한 문자열에 대해 W&B 보안 비밀 생성을 수행합니다. 보안 비밀은 Team Settings에 정의되어 있습니다. 보안 비밀은 일반적으로 웹훅 자동화에서 사용됩니다.
  2. W&B가 Slack에 게시하거나 사용자를 대신하여 웹훅을 실행할 수 있도록 웹훅 또는 Slack 알림을 구성합니다. 단일 자동화 작업(웹훅 또는 Slack 알림)은 여러 자동화에서 사용할 수 있습니다. 이러한 작업은 Team Settings에 정의되어 있습니다.
  3. Project 또는 레지스트리에서 감시할 이벤트와 수행할 작업(예: Slack에 게시 또는 웹훅 실행)을 지정하는 자동화를 생성합니다. 웹훅 자동화를 생성할 때 전송할 페이로드를 구성합니다.

자세한 내용은 다음을 참조하세요.

자동화 보기 및 관리

Project 또는 레지스트리의 Automations 탭에서 자동화를 보고 관리합니다.

  • 자동화 세부 정보를 보려면 해당 이름을 클릭합니다.
  • 자동화를 편집하려면 해당 작업 ... 메뉴를 클릭한 다음 자동화 편집을 클릭합니다.
  • 자동화를 삭제하려면 해당 작업 ... 메뉴를 클릭한 다음 자동화 삭제를 클릭합니다.

다음 단계

4.5.1.1 - Create a Slack automation

This feature requires a Pro or Enterprise plan.

이 페이지에서는 Slack 자동화를 만드는 방법을 보여줍니다. 웹훅 자동화를 만들려면 웹훅 자동화 생성를 대신 참조하세요.

Slack 자동화를 생성하려면 다음과 같은 단계를 수행합니다.

  1. Slack 통합 추가를 통해 Weights & Biases가 Slack 인스턴스 및 채널에 게시할 수 있도록 승인합니다.
  2. Slack 자동화 생성를 통해 감시할 이벤트와 게시할 채널을 정의합니다.

Slack에 연결

팀 관리자는 팀에 Slack 대상을 추가할 수 있습니다.

  1. W&B에 로그인하고 팀 설정 페이지로 이동합니다.

  2. Slack 채널 통합 섹션에서 Slack 연결을 클릭하여 새 Slack 인스턴스를 추가합니다. 기존 Slack 인스턴스에 대한 채널을 추가하려면 새로운 통합을 클릭합니다.

    필요한 경우 브라우저에서 Slack에 로그인합니다. 메시지가 표시되면 선택한 Slack 채널에 게시할 수 있는 권한을 W&B에 부여합니다. 페이지를 읽은 다음 채널 검색을 클릭하고 채널 이름을 입력하기 시작합니다. 목록에서 채널을 선택한 다음 허용을 클릭합니다.

  3. Slack에서 선택한 채널로 이동합니다. [Your Slack handle] added an integration to this channel: Weights & Biases와 같은 게시물이 표시되면 통합이 올바르게 구성된 것입니다.

이제 구성한 Slack 채널에 알림을 보내는 자동화 생성를 할 수 있습니다.

Slack 연결 보기 및 관리

팀 관리자는 팀의 Slack 인스턴스 및 채널을 보고 관리할 수 있습니다.

  1. W&B에 로그인하고 팀 설정으로 이동합니다.
  2. Slack 채널 통합 섹션에서 각 Slack 대상을 봅니다.
  3. 휴지통 아이콘을 클릭하여 대상을 삭제합니다.

자동화 생성

W&B 팀을 Slack에 연결한 후 Registry 또는 Project를 선택한 다음 다음 단계에 따라 Slack 채널에 알림을 보내는 자동화를 만듭니다.

Registry 관리자는 해당 Registry에서 자동화를 생성할 수 있습니다.

  1. W&B에 로그인합니다.

  2. Registry 이름을 클릭하여 세부 정보를 봅니다.

  3. Registry 범위로 자동화를 생성하려면 Automations 탭을 클릭한 다음 자동화 생성을 클릭합니다. Registry 범위로 지정된 자동화는 해당 컬렉션(향후 생성된 컬렉션 포함) 모두에 자동으로 적용됩니다.

    Registry에서 특정 컬렉션에만 범위가 지정된 자동화를 생성하려면 컬렉션 작업 ... 메뉴를 클릭한 다음 자동화 생성을 클릭합니다. 또는 컬렉션을 보는 동안 컬렉션 세부 정보 페이지의 Automations 섹션에서 자동화 생성 버튼을 사용하여 컬렉션에 대한 자동화를 만듭니다.

  4. 감시할 Event를 선택합니다.

    이벤트에 따라 나타나는 추가 필드를 작성합니다. 예를 들어 아티팩트 에일리어스가 추가됨을 선택한 경우 에일리어스 정규식을 지정해야 합니다.

    다음 단계를 클릭합니다.

  5. Slack 통합을 소유한 팀을 선택합니다.

  6. 액션 유형Slack 알림으로 설정합니다. Slack 채널을 선택한 다음 다음 단계를 클릭합니다.

  7. 자동화 이름을 입력합니다. 선택적으로 설명을 제공합니다.

  8. 자동화 생성을 클릭합니다.

W&B 관리자는 프로젝트에서 자동화를 생성할 수 있습니다.

  1. W&B에 로그인합니다.

  2. 프로젝트 페이지로 이동하여 Automations 탭을 클릭합니다.

  3. 자동화 생성을 클릭합니다.

  4. 감시할 Event를 선택합니다.

    이벤트에 따라 나타나는 추가 필드를 작성합니다. 예를 들어 아티팩트 에일리어스가 추가됨을 선택한 경우 에일리어스 정규식을 지정해야 합니다.

    다음 단계를 클릭합니다.

  5. Slack 통합을 소유한 팀을 선택합니다.

  6. 액션 유형Slack 알림으로 설정합니다. Slack 채널을 선택한 다음 다음 단계를 클릭합니다.

  7. 자동화 이름을 입력합니다. 선택적으로 설명을 제공합니다.

  8. 자동화 생성을 클릭합니다.

자동화 보기 및 관리

  • Registry의 Automations 탭에서 Registry의 자동화를 관리합니다.
  • 컬렉션의 세부 정보 페이지의 Automations 섹션에서 컬렉션의 자동화를 관리합니다.

이러한 페이지에서 Registry 관리자는 기존 자동화를 관리할 수 있습니다.

  • 자동화의 세부 정보를 보려면 해당 이름을 클릭합니다.
  • 자동화를 편집하려면 해당 작업 ... 메뉴를 클릭한 다음 자동화 편집을 클릭합니다.
  • 자동화를 삭제하려면 해당 작업 ... 메뉴를 클릭한 다음 자동화 삭제를 클릭합니다. 확인이 필요합니다.

W&B 관리자는 프로젝트의 Automations 탭에서 프로젝트의 자동화를 보고 관리할 수 있습니다.

  • 자동화의 세부 정보를 보려면 해당 이름을 클릭합니다.
  • 자동화를 편집하려면 해당 작업 ... 메뉴를 클릭한 다음 자동화 편집을 클릭합니다.
  • 자동화를 삭제하려면 해당 작업 ... 메뉴를 클릭한 다음 자동화 삭제를 클릭합니다. 확인이 필요합니다.

4.5.1.2 - Create a webhook automation

This feature requires a Pro or Enterprise plan.

이 페이지에서는 webhook 자동화를 만드는 방법을 보여줍니다. Slack 자동화를 만들려면 Slack 자동화 만들기를 참조하세요.

개략적으로 webhook 자동화를 만들려면 다음 단계를 수행합니다.

  1. 필요한 경우 액세스 토큰, 비밀번호 또는 SSH 키와 같이 자동화에 필요한 각 민감한 문자열에 대해 W&B secret 만들기를 수행합니다. secret은 팀 설정에 정의되어 있습니다.
  2. webhook 만들기를 수행하여 엔드포인트 및 인증 세부 정보를 정의하고 통합에 필요한 secret에 대한 엑세스 권한을 부여합니다.
  3. 자동화 만들기를 수행하여 감시할 이벤트와 W&B가 보낼 페이로드를 정의합니다. 페이로드에 필요한 secret에 대한 자동화 엑세스 권한을 부여합니다.

webhook 만들기

팀 관리자는 팀에 대한 webhook을 추가할 수 있습니다.

  1. W&B에 로그인하고 팀 설정 페이지로 이동합니다.

  2. Webhooks 섹션에서 New webhook을 클릭합니다.

  3. webhook의 이름을 입력합니다.

  4. webhook의 엔드포인트 URL을 입력합니다.

  5. webhook에 Bearer 토큰이 필요한 경우 Access token을 해당 토큰을 포함하는 secret으로 설정합니다. webhook 자동화를 사용할 때 W&B는 Authorization: Bearer HTTP 헤더를 엑세스 토큰으로 설정하고 ${ACCESS_TOKEN} 페이로드 변수에서 토큰에 엑세스할 수 있습니다.

  6. webhook의 페이로드에 비밀번호 또는 기타 민감한 문자열이 필요한 경우 Secret을 해당 문자열을 포함하는 secret으로 설정합니다. webhook을 사용하는 자동화를 구성할 때 이름 앞에 $를 붙여 페이로드 변수로 secret에 엑세스할 수 있습니다.

    webhook의 엑세스 토큰이 secret에 저장된 경우 secret을 엑세스 토큰으로 지정하려면 또한 다음 단계를 완료해야 합니다.

  7. W&B가 엔드포인트에 연결하고 인증할 수 있는지 확인하려면:

    1. 선택적으로 테스트할 페이로드를 제공합니다. 페이로드에서 webhook이 엑세스할 수 있는 secret을 참조하려면 이름 앞에 $를 붙입니다. 이 페이로드는 테스트에만 사용되며 저장되지 않습니다. 자동화를 만들 때 자동화의 페이로드를 구성합니다. secret과 엑세스 토큰이 POST 요청에 지정된 위치를 보려면 webhook 문제 해결을 참조하세요.
    2. Test를 클릭합니다. W&B는 구성한 자격 증명을 사용하여 webhook의 엔드포인트에 연결을 시도합니다. 페이로드를 제공한 경우 W&B는 해당 페이로드를 보냅니다.

    테스트가 성공하지 못하면 webhook의 구성을 확인하고 다시 시도하세요. 필요한 경우 webhook 문제 해결을 참조하세요.

이제 webhook을 사용하는 자동화를 만들 수 있습니다.

자동화 만들기

webhook을 구성한Registry 또는 Project를 선택한 다음 다음 단계에 따라 webhook을 트리거하는 자동화를 만듭니다.

Registry 관리자는 해당 Registry에서 자동화를 만들 수 있습니다. Registry 자동화는 향후 추가되는 자동화를 포함하여 Registry의 모든 컬렉션에 적용됩니다.

  1. W&B에 로그인합니다.

  2. Registry 이름을 클릭하여 세부 정보를 확인합니다.

  3. Registry로 범위가 지정된 자동화를 만들려면 Automations 탭을 클릭한 다음 Create automation을 클릭합니다. Registry로 범위가 지정된 자동화는 향후 생성되는 컬렉션을 포함하여 모든 컬렉션에 자동으로 적용됩니다.

    Registry의 특정 컬렉션으로만 범위가 지정된 자동화를 만들려면 컬렉션의 액션 ... 메뉴를 클릭한 다음 Create automation을 클릭합니다. 또는 컬렉션을 보는 동안 컬렉션 세부 정보 페이지의 Automations 섹션에 있는 Create automation 버튼을 사용하여 컬렉션에 대한 자동화를 만듭니다.

  4. 감시할 Event를 선택합니다. 이벤트에 따라 표시되는 추가 필드를 작성합니다. 예를 들어 An artifact alias is added를 선택한 경우 Alias regex를 지정해야 합니다. Next step을 클릭합니다.

  5. webhook을 소유한 팀을 선택합니다.

  6. Action typeWebhooks로 설정한 다음 사용할 webhook을 선택합니다.

  7. webhook에 대해 엑세스 토큰을 구성한 경우 ${ACCESS_TOKEN} 페이로드 변수에서 토큰에 엑세스할 수 있습니다. webhook에 대해 secret을 구성한 경우 이름 앞에 $를 붙여 페이로드에서 해당 secret에 엑세스할 수 있습니다. webhook의 요구 사항은 webhook의 서비스에 의해 결정됩니다.

  8. Next step을 클릭합니다.

  9. 자동화 이름을 입력합니다. 선택적으로 설명을 제공합니다. Create automation을 클릭합니다.

W&B 관리자는 Project에서 자동화를 만들 수 있습니다.

  1. W&B에 로그인하고 Project 페이지로 이동합니다.

  2. 사이드바에서 Automations을 클릭합니다.

  3. Create automation을 클릭합니다.

  4. 감시할 Event를 선택합니다.

    1. 이벤트에 따라 표시되는 추가 필드를 작성합니다. 예를 들어 An artifact alias is added를 선택한 경우 Alias regex를 지정해야 합니다.

    2. 선택적으로 컬렉션 필터를 지정합니다. 그렇지 않으면 자동화는 향후 추가되는 컬렉션을 포함하여 Project의 모든 컬렉션에 적용됩니다.

    Next step을 클릭합니다.

  5. webhook을 소유한 팀을 선택합니다.

  6. Action typeWebhooks로 설정한 다음 사용할 webhook을 선택합니다.

  7. webhook에 페이로드가 필요한 경우 페이로드를 구성하여 Payload 필드에 붙여넣습니다. webhook에 대해 엑세스 토큰을 구성한 경우 ${ACCESS_TOKEN} 페이로드 변수에서 토큰에 엑세스할 수 있습니다. webhook에 대해 secret을 구성한 경우 이름 앞에 $를 붙여 페이로드에서 해당 secret에 엑세스할 수 있습니다. webhook의 요구 사항은 webhook의 서비스에 의해 결정됩니다.

  8. Next step을 클릭합니다.

  9. 자동화 이름을 입력합니다. 선택적으로 설명을 제공합니다. Create automation을 클릭합니다.

자동화 보기 및 관리

  • Registry의 Automations 탭에서 Registry의 자동화를 관리합니다.
  • 컬렉션 세부 정보 페이지의 Automations 섹션에서 컬렉션의 자동화를 관리합니다.

이러한 페이지에서 Registry 관리자는 기존 자동화를 관리할 수 있습니다.

  • 자동화 세부 정보를 보려면 이름을 클릭합니다.
  • 자동화를 편집하려면 해당 액션 ... 메뉴를 클릭한 다음 Edit automation을 클릭합니다.
  • 자동화를 삭제하려면 해당 액션 ... 메뉴를 클릭한 다음 Delete automation을 클릭합니다. 확인이 필요합니다.

W&B 관리자는 Project의 Automations 탭에서 Project의 자동화를 보고 관리할 수 있습니다.

  • 자동화 세부 정보를 보려면 이름을 클릭합니다.
  • 자동화를 편집하려면 해당 액션 ... 메뉴를 클릭한 다음 Edit automation을 클릭합니다.
  • 자동화를 삭제하려면 해당 액션 ... 메뉴를 클릭한 다음 Delete automation을 클릭합니다. 확인이 필요합니다.

페이로드 참조

이 섹션을 사용하여 webhook의 페이로드를 구성합니다. webhook 및 해당 페이로드 테스트에 대한 자세한 내용은 webhook 문제 해결을 참조하세요.

페이로드 변수

이 섹션에서는 webhook의 페이로드를 구성하는 데 사용할 수 있는 변수에 대해 설명합니다.

변수 세부 정보
${project_name} 액션을 트리거한 변경을 소유한 Project의 이름입니다.
${entity_name} 액션을 트리거한 변경을 소유한 엔터티 또는 팀의 이름입니다.
${event_type} 액션을 트리거한 이벤트 유형입니다.
${event_author} 액션을 트리거한 사용자입니다.
${artifact_collection_name} 아티팩트 버전이 연결된 아티팩트 컬렉션의 이름입니다.
${artifact_metadata.<KEY>} 액션을 트리거한 아티팩트 버전의 임의의 최상위 메타데이터 키의 값입니다. <KEY>를 최상위 메타데이터 키의 이름으로 바꿉니다. 최상위 메타데이터 키만 webhook의 페이로드에서 사용할 수 있습니다.
${artifact_version} 액션을 트리거한 아티팩트 버전의 Wandb.Artifact 표현입니다.
${artifact_version_string} 액션을 트리거한 아티팩트 버전의 string 표현입니다.
${ACCESS_TOKEN} 엑세스 토큰이 구성된 경우 webhook에 구성된 엑세스 토큰의 값입니다. 엑세스 토큰은 Authorization: Bearer HTTP 헤더에 자동으로 전달됩니다.
${SECRET_NAME} 구성된 경우 webhook에 구성된 secret의 값입니다. SECRET_NAME을 secret 이름으로 바꿉니다.

페이로드 예시

이 섹션에는 몇 가지 일반적인 유스 케이스에 대한 webhook 페이로드 예시가 포함되어 있습니다. 이 예시는 페이로드 변수를 사용하는 방법을 보여줍니다.

W&B에서 리포지토리 디스패치를 보내 GitHub 액션을 트리거합니다. 예를 들어 on 키에 대한 트리거로 리포지토리 디스패치를 허용하는 GitHub 워크플로우 파일이 있다고 가정합니다.

on:
repository_dispatch:
  types: BUILD_AND_DEPLOY

리포지토리의 페이로드는 다음과 같을 수 있습니다.

{
  "event_type": "BUILD_AND_DEPLOY",
  "client_payload": 
  {
    "event_author": "${event_author}",
    "artifact_version": "${artifact_version}",
    "artifact_version_string": "${artifact_version_string}",
    "artifact_collection_name": "${artifact_collection_name}",
    "project_name": "${project_name}",
    "entity_name": "${entity_name}"
    }
}

렌더링된 템플릿 문자열의 내용과 위치는 자동화가 구성된 이벤트 또는 모델 버전에 따라 달라집니다. ${event_type}LINK_ARTIFACT 또는 ADD_ARTIFACT_ALIAS로 렌더링됩니다. 아래에서 예시 매핑을 참조하세요.

${event_type} --> "LINK_ARTIFACT" 또는 "ADD_ARTIFACT_ALIAS"
${event_author} --> "<wandb-user>"
${artifact_version} --> "wandb-artifact://_id/QXJ0aWZhY3Q6NTE3ODg5ODg3""
${artifact_version_string} --> "<entity>/model-registry/<registered_model_name>:<alias>"
${artifact_collection_name} --> "<registered_model_name>"
${project_name} --> "model-registry"
${entity_name} --> "<entity>"

템플릿 문자열을 사용하여 W&B에서 GitHub Actions 및 기타 툴로 컨텍스트를 동적으로 전달합니다. 이러한 툴이 Python 스크립트를 호출할 수 있는 경우 W&B API를 통해 등록된 모델 아티팩트를 사용할 수 있습니다.

이 예시 페이로드는 webhook을 사용하여 Teams 채널에 알리는 방법을 보여줍니다.

{
"@type": "MessageCard",
"@context": "http://schema.org/extensions",
"summary": "New Notification",
"sections": [
  {
    "activityTitle": "Notification from WANDB",
    "text": "This is an example message sent via Teams webhook.",
    "facts": [
      {
        "name": "Author",
        "value": "${event_author}"
      },
      {
        "name": "Event Type",
        "value": "${event_type}"
      }
    ],
    "markdown": true
  }
]
}

템플릿 문자열을 사용하여 실행 시 W&B 데이터를 페이로드에 삽입할 수 있습니다(위의 Teams 예시 참조).

Slack API 문서에 강조 표시된 지침에 따라 Slack 앱을 설정하고 수신 webhook 통합을 추가합니다. Bot User OAuth Token 아래에 지정된 secret이 W&B webhook의 엑세스 토큰인지 확인합니다.

다음은 예시 페이로드입니다.

{
    "text": "New alert from WANDB!",
"blocks": [
    {
            "type": "section",
        "text": {
            "type": "mrkdwn",
            "text": "Registry event: ${event_type}"
        }
    },
        {
            "type":"section",
            "text": {
            "type": "mrkdwn",
            "text": "New version: ${artifact_version_string}"
        }
        },
        {
        "type": "divider"
    },
        {
            "type": "section",
        "text": {
            "type": "mrkdwn",
            "text": "Author: ${event_author}"
        }
        }
    ]
}

webhook 문제 해결

W&B App UI를 사용하여 대화식으로 또는 Bash 스크립트를 사용하여 프로그래밍 방식으로 webhook 문제를 해결합니다. 새 webhook을 만들거나 기존 webhook을 편집할 때 webhook 문제를 해결할 수 있습니다.

팀 관리자는 W&B App UI를 사용하여 대화식으로 webhook을 테스트할 수 있습니다.

  1. W&B 팀 설정 페이지로 이동합니다.
  2. Webhooks 섹션으로 스크롤합니다.
  3. webhook 이름 옆에 있는 가로 세 개의 점(미트볼 아이콘)을 클릭합니다.
  4. Test를 선택합니다.
  5. 나타나는 UI 패널에서 나타나는 필드에 POST 요청을 붙여넣습니다. Demo of testing a webhook payload
  6. Test webhook을 클릭합니다. W&B App UI 내에서 W&B는 엔드포인트에서 응답을 게시합니다. Demo of testing a webhook

시연은 동영상 Weights & Biases에서 Webhook 테스트를 시청하세요.

이 셸 스크립트는 W&B가 트리거될 때 webhook 자동화로 보내는 요청과 유사한 POST 요청을 생성하는 한 가지 방법을 보여줍니다.

아래 코드를 복사하여 셸 스크립트에 붙여넣어 webhook 문제를 해결합니다. 다음 값에 대해 사용자 고유의 값을 지정합니다.

  • ACCESS_TOKEN
  • SECRET
  • PAYLOAD
  • API_ENDPOINT
webhook_test.sh

4.5.2 - Automation events and scopes

This feature requires a Pro or Enterprise plan.

자동화는 특정 이벤트가 프로젝트 또는 레지스트리의 범위 내에서 발생할 때 시작될 수 있습니다. 프로젝트의 범위는 [범위에 대한 기술적 정의 삽입]을 의미합니다. 이 페이지에서는 각 범위 내에서 자동화를 트리거할 수 있는 이벤트에 대해 설명합니다.

자동화에 대해 자세히 알아보려면 자동화 개요 또는 자동화 생성을 참조하세요.

Registry

이 섹션에서는 Registry의 자동화에 대한 범위와 이벤트에 대해 설명합니다.

  1. https://wandb.ai/registry/Registry 앱으로 이동합니다.
  2. 레지스트리 이름을 클릭한 다음 Automations 탭에서 자동화를 보고 생성합니다.

자동화 생성에 대해 자세히 알아보세요.

Scopes

다음 범위에서 Registry 자동화를 생성할 수 있습니다.

  • Registry 수준: 자동화는 특정 레지스트리 내의 모든 컬렉션에서 발생하는 이벤트 (향후 추가되는 컬렉션 포함) 를 감시합니다.
  • 컬렉션 수준: 특정 레지스트리의 단일 컬렉션.

Events

Registry 자동화는 다음 이벤트를 감시할 수 있습니다.

  • 새로운 아티팩트를 컬렉션에 연결: 새로운 Models 또는 Datasets 이 Registry 에 추가될 때 테스트하고 검증합니다.
  • 아티팩트 버전에 새로운 에일리어스 추가: 새로운 아티팩트 버전에 특정 에일리어스가 적용될 때 워크플로우의 특정 단계를 트리거합니다. 예를 들어, production 에일리어스가 적용된 Model 을 배포합니다.

Project

이 섹션에서는 project의 자동화에 대한 범위와 이벤트에 대해 설명합니다.

  1. W&B 앱의 W&B 프로젝트 ( https://wandb.ai/<team>/<project-name> ) 로 이동합니다.
  2. Automations 탭에서 자동화를 보고 생성합니다.

자동화 생성에 대해 자세히 알아보세요.

Scopes

다음 범위에서 project 자동화를 생성할 수 있습니다.

  • Project 수준: 자동화는 project 의 모든 컬렉션에서 발생하는 이벤트를 감시합니다.
  • 컬렉션 수준: 지정한 필터와 일치하는 project 의 모든 컬렉션.

Events

Project 자동화는 다음 이벤트를 감시할 수 있습니다.

  • 아티팩트의 새 버전이 컬렉션에 생성됨: 아티팩트의 각 버전에 반복 작업을 적용합니다. 컬렉션 지정은 선택 사항입니다. 예를 들어, 새로운 Dataset 아티팩트 버전이 생성되면 트레이닝 작업을 시작합니다.
  • 아티팩트 에일리어스가 추가됨: project 또는 컬렉션의 새로운 아티팩트 버전에 특정 에일리어스가 적용될 때 워크플로우의 특정 단계를 트리거합니다. 예를 들어, 아티팩트에 test-set-quality-check 에일리어스가 적용되면 일련의 다운스트림 처리 단계를 실행합니다.

다음 단계

5 - W&B Platform

W&B Platform은 Core, ModelsWeave와 같은 W&B 제품을 지원하는 기본적인 인프라, 툴링 및 거버넌스 스캐폴딩입니다.

W&B Platform은 세 가지의 다양한 배포 옵션으로 제공됩니다:

다음 책임 매트릭스는 주요 차이점을 간략하게 설명합니다:

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 Service (App) W&B에서 완전 관리 W&B에서 완전 관리 고객이 완전 관리
앱 보안 W&B에서 완전 관리 W&B와 고객의 공동 책임 고객이 완전 관리
유지 관리 (업그레이드, 백업 등) W&B에서 관리 W&B에서 관리 고객이 관리
지원 지원 SLA 지원 SLA 지원 SLA
지원되는 클라우드 인프라 GCP AWS, GCP, Azure AWS, GCP, Azure, On-Prem bare-metal

배포 옵션

다음 섹션에서는 각 배포 유형에 대한 개요를 제공합니다.

W&B Multi-tenant Cloud

W&B Multi-tenant Cloud는 W&B의 클라우드 인프라에 배포된 완전 관리형 서비스로, 원하는 규모로 W&B 제품에 원활하게 엑세스하고, 비용 효율적인 가격 옵션을 활용하며, 최신 기능 및 업데이트를 지속적으로 받을 수 있습니다. 프라이빗 배포의 보안이 필요하지 않고, 셀프 서비스 온보딩이 중요하며, 비용 효율성이 중요한 경우 프로덕션 AI 워크플로우를 관리하기 위해 Multi-tenant Cloud를 사용하는 것이 좋습니다.

자세한 내용은 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를 사용하는 것이 좋습니다. 엔터프라이즈 친화적인 설정을 찾고 있다면 여기에서 트라이얼에 적합한 배포 유형을 선택하십시오.

5.1 - Deployment options

5.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에서 자동 확장을 활용합니다.

데이터 보안

엔터프라이즈 플랜 사용자가 아닌 경우 모든 데이터는 공유 클라우드 스토리지에만 저장되고 공유 클라우드 컴퓨팅 서비스로 처리됩니다. 요금제에 따라 스토리지 제한이 적용될 수 있습니다.

엔터프라이즈 플랜 사용자는 보안 스토리지 커넥터를 사용하여 자체 버킷(BYOB)을 가져올 수 있습니다 팀 레벨에서 모델, 데이터셋 등과 같은 파일을 저장할 수 있습니다. 여러 팀에 대해 단일 버킷을 구성하거나 여러 W&B Teams에 대해 별도의 버킷을 사용할 수 있습니다. 팀에 대해 보안 스토리지 커넥터를 구성하지 않으면 해당 데이터는 공유 클라우드 스토리지에 저장됩니다.

ID 및 엑세스 관리 (IAM)

엔터프라이즈 플랜을 사용하는 경우 W&B 조직에서 안전한 인증 및 효과적인 권한 부여를 위해 ID 및 엑세스 관리 기능을 사용할 수 있습니다. Multi-tenant Cloud의 IAM에 사용할 수 있는 기능은 다음과 같습니다.

  • OIDC 또는 SAML을 사용한 SSO 인증. 조직에 대해 SSO를 구성하려면 W&B 팀 또는 지원팀에 문의하세요.
  • 조직 범위 내에서 그리고 팀 내에서 적절한 user 역할을 구성합니다.
  • W&B project의 범위를 정의하여 누가 W&B runs를 보고, 편집하고, 제출할 수 있는지 제한된 projects으로 제한합니다.

모니터링

Organization 관리자는 계정 보기의 Billing 탭에서 계정 사용량 및 청구를 관리할 수 있습니다. Multi-tenant Cloud에서 공유 클라우드 스토리지를 사용하는 경우 관리자는 조직의 여러 팀에서 스토리지 사용량을 최적화할 수 있습니다.

유지 관리

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에 직접 엑세스하세요. 엔터프라이즈 플랜을 시작하려면 이 양식을 제출하세요.

5.1.2 - Dedicated Cloud

전용 클라우드 (싱글 테넌트 SaaS) 사용

W&B 전용 클라우드는 W&B의 AWS, GCP 또는 Azure 클라우드 계정에 배포된 싱글 테넌트, 완전 관리형 플랫폼입니다. 각 전용 클라우드 인스턴스는 다른 W&B 전용 클라우드 인스턴스와 격리된 자체 네트워크, 컴퓨팅 및 스토리지를 가지고 있습니다. W&B 특정 메타데이터 및 데이터는 격리된 클라우드 스토리지에 저장되고 격리된 클라우드 컴퓨팅 서비스를 사용하여 처리됩니다.

W&B 전용 클라우드는 각 클라우드 공급자에 대해 여러 글로벌 지역에서 사용 가능합니다.

데이터 보안

보안 스토리지 커넥터를 사용하여 모델, 데이터셋 등과 같은 파일을 저장하기 위해 인스턴스 및 Teams 수준에서 자체 버킷(BYOB)을 가져올 수 있습니다.

W&B 멀티 테넌트 클라우드와 유사하게 여러 Teams에 대해 단일 버킷을 구성하거나 다른 Teams에 대해 별도의 버킷을 사용할 수 있습니다. Team에 대해 보안 스토리지 커넥터를 구성하지 않으면 해당 데이터는 인스턴스 수준 버킷에 저장됩니다.

보안 스토리지 커넥터를 사용한 BYOB 외에도 IP 허용 목록을 활용하여 신뢰할 수 있는 네트워크 위치에서만 전용 클라우드 인스턴스에 대한 엑세스를 제한할 수 있습니다.

클라우드 공급자의 보안 연결 솔루션을 사용하여 전용 클라우드 인스턴스에 비공개로 연결할 수도 있습니다.

ID 및 엑세스 관리 (IAM)

W&B Organization에서 보안 인증 및 효과적인 권한 부여를 위해 ID 및 엑세스 관리 기능을 사용하십시오. 전용 클라우드 인스턴스의 IAM에 사용할 수 있는 기능은 다음과 같습니다.

모니터링

감사 로그를 사용하여 Team 내의 User 활동을 추적하고 엔터프라이즈 거버넌스 요구 사항을 준수하십시오. 또한 W&B Organization 대시보드에서 전용 클라우드 인스턴스의 조직 사용량을 볼 수 있습니다.

유지 관리

W&B 멀티 테넌트 클라우드와 유사하게 전용 클라우드를 사용하면 W&B 플랫폼을 프로비저닝하고 유지 관리하는 오버헤드 및 비용이 발생하지 않습니다.

W&B가 전용 클라우드에서 업데이트를 관리하는 방법을 이해하려면 서버 릴리스 프로세스를 참조하십시오.

규정 준수

W&B 전용 클라우드에 대한 보안 제어는 내부 및 외부에서 주기적으로 감사됩니다. 제품 평가를 위한 보안 및 규정 준수 문서를 요청하려면 W&B 보안 포털을 참조하십시오.

마이그레이션 옵션

자체 관리 인스턴스 또는 멀티 테넌트 클라우드에서 전용 클라우드로의 마이그레이션이 지원됩니다.

다음 단계

전용 클라우드 사용에 관심이 있으시면 이 양식을 제출하십시오.

5.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 지역을 참조하십시오.

5.1.2.2 - Export data from Dedicated cloud

전용 클라우드에서 데이터 내보내기

전용 클라우드 인스턴스에서 관리하는 모든 데이터를 내보내려면 W&B SDK API를 사용하여 Import and Export API로 run, 메트릭, Artifacts 등을 추출할 수 있습니다. 다음 표는 주요 내보내기 유스 케이스를 다룹니다.

목적 문서
프로젝트 메타데이터 내보내기 Projects API
프로젝트에서 run 내보내기 Runs API
Reports 내보내기 Reports API
Artifacts 내보내기 Artifact 그래프 탐색, Artifacts 다운로드 및 사용

Secure Storage Connector를 사용하여 전용 클라우드에 저장된 Artifacts를 관리하는 경우 W&B SDK API를 사용하여 Artifacts를 내보낼 필요가 없을 수 있습니다.

5.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 Terraform 스크립트를 사용하여 AWS, GCP 또는 Azure 클라우드 계정에 W&B Server를 배포할 것을 권장합니다.

AWS, GCP 또는 Azure에서 W&B Server를 설정하는 방법에 대한 자세한 내용은 특정 클라우드 공급자 문서를 참조하세요.

온-프레미스 인프라에 W&B Server 배포

온-프레미스 인프라에서 W&B Server를 설정하려면 여러 인프라 구성 요소를 구성해야 합니다. 이러한 구성 요소에는 다음이 포함되지만 이에 국한되지는 않습니다.

  • (강력 권장) Kubernetes 클러스터
  • MySQL 8 데이터베이스 클러스터
  • Amazon S3 호환 오브젝트 스토리지
  • Redis 캐시 클러스터

온-프레미스 인프라에 W&B Server를 설치하는 방법에 대한 자세한 내용은 온-프레미스 인프라에 설치를 참조하세요. W&B는 다양한 구성 요소에 대한 권장 사항을 제공하고 설치 프로세스에 대한 지침을 제공할 수 있습니다.

사용자 지정 클라우드 플랫폼에 W&B Server 배포

AWS, GCP 또는 Azure가 아닌 클라우드 플랫폼에 W&B Server를 배포할 수 있습니다. 이에 대한 요구 사항은 온-프레미스 인프라에 배포하는 것과 유사합니다.

W&B Server 라이선스 받기

W&B 서버 설정을 완료하려면 W&B 트라이얼 라이선스가 필요합니다. Deploy Manager를 열어 무료 트라이얼 라이선스를 생성하세요.

URL은 W&B Local용 라이선스 받기 양식으로 리디렉션됩니다. 다음 정보를 제공하세요.

  1. 플랫폼 선택 단계에서 배포 유형을 선택합니다.
  2. 기본 정보 단계에서 라이선스 소유자를 선택하거나 새 조직을 추가합니다.
  3. 라이선스 받기 단계의 인스턴스 이름 필드에 인스턴스 이름을 제공하고 필요에 따라 설명 필드에 설명을 제공합니다.
  4. 라이선스 키 생성 버튼을 선택합니다.

인스턴스와 연결된 라이선스와 함께 배포 개요가 있는 페이지가 표시됩니다.

5.1.3.1 - Reference Architecture

W&B 참조 아키텍처

이 페이지에서는 Weights & Biases 배포를 위한 참조 아키텍처를 설명하고 플랫폼의 프로덕션 배포를 지원하기 위해 권장되는 인프라 및 리소스를 간략하게 설명합니다.

Weights & Biases(W&B)에 대해 선택한 배포 환경에 따라 다양한 서비스를 통해 배포의 복원력을 향상시킬 수 있습니다.

예를 들어 주요 클라우드 공급자는 데이터베이스 구성, 유지 관리, 고가용성 및 복원력의 복잡성을 줄이는 데 도움이 되는 강력한 관리형 데이터베이스 서비스를 제공합니다.

이 참조 아키텍처는 몇 가지 일반적인 배포 시나리오를 다루고 최적의 성능과 안정성을 위해 W&B 배포를 클라우드 공급업체 서비스와 통합하는 방법을 보여줍니다.

시작하기 전에

모든 애플리케이션을 프로덕션 환경에서 실행하는 데에는 자체적인 어려움이 따르며 W&B도 예외는 아닙니다. Google은 프로세스를 간소화하는 것을 목표로 하지만 고유한 아키텍처 및 설계 결정에 따라 특정 복잡성이 발생할 수 있습니다. 일반적으로 프로덕션 배포를 관리하려면 하드웨어, 운영 체제, 네트워킹, 스토리지, 보안, W&B 플랫폼 자체 및 기타 종속성을 포함한 다양한 구성 요소를 감독해야 합니다. 이 책임은 환경의 초기 설정과 지속적인 유지 관리 모두에 적용됩니다.

W&B를 사용한 자체 관리 방식이 팀 및 특정 요구 사항에 적합한지 신중하게 고려하십시오.

프로덕션 등급 애플리케이션을 실행하고 유지 관리하는 방법에 대한 확실한 이해는 자체 관리 W&B를 배포하기 전에 중요한 전제 조건입니다. 팀에 지원이 필요한 경우 Google의 Professional Services 팀과 파트너가 구현 및 최적화에 대한 지원을 제공합니다.

직접 관리하는 대신 W&B 실행을 위한 관리형 솔루션에 대한 자세한 내용은 W&B 멀티 테넌트 클라우드W&B 전용 클라우드를 참조하십시오.

인프라

W&B 인프라 다이어그램

애플리케이션 레이어

애플리케이션 레이어는 노드 장애에 대한 복원력을 갖춘 다중 노드 Kubernetes 클러스터로 구성됩니다. Kubernetes 클러스터는 W&B의 포드를 실행하고 유지 관리합니다.

스토리지 레이어

스토리지 레이어는 MySQL 데이터베이스와 오브젝트 스토리지로 구성됩니다. MySQL 데이터베이스는 메타데이터를 저장하고 오브젝트 스토리지는 모델 및 데이터셋과 같은 아티팩트를 저장합니다.

인프라 요구 사항

Kubernetes

W&B Server 애플리케이션은 여러 포드를 배포하는 Kubernetes Operator로 배포됩니다. 이러한 이유로 W&B에는 다음이 포함된 Kubernetes 클러스터가 필요합니다.

  • 완전히 구성되고 작동하는 Ingress 컨트롤러.
  • Persistent Volumes를 프로비저닝하는 기능.

MySQL

W&B는 메타데이터를 MySQL 데이터베이스에 저장합니다. 데이터베이스의 성능 및 스토리지 요구 사항은 모델 파라미터 및 관련 메타데이터의 형태에 따라 달라집니다. 예를 들어 더 많은 트레이닝 run을 추적할수록 데이터베이스 크기가 커지고 run 테이블, 사용자 워크스페이스 및 리포트의 쿼리를 기반으로 데이터베이스에 대한 부하가 증가합니다.

자체 관리 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를 참조하십시오. W&B와 오브젝트 스토리지에 대한 엑세스는 트레이닝 인프라와 Experiments의 요구 사항을 추적하는 각 시스템에 필요합니다.

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는 새로운 배포의 모든 구성 요소를 면밀히 모니터링하고 관찰된 사용 패턴에 따라 조정하는 것이 좋습니다. 시간이 지남에 따라 프로덕션 배포를 계속 모니터링하고 최적의 성능을 유지하기 위해 필요에 따라 조정하십시오.

모델만 해당

Kubernetes

환경 CPU 메모리 디스크
테스트/개발 2 코어 16GB 100GB
프로덕션 8 코어 64GB 100GB

숫자는 Kubernetes 작업자 노드당 개수입니다.

MySQL

환경 CPU 메모리 디스크
테스트/개발 2 코어 16GB 100GB
프로덕션 8 코어 64GB 500GB

숫자는 MySQL 노드당 개수입니다.

Weave만 해당

Kubernetes

환경 CPU 메모리 디스크
테스트/개발 4 코어 32GB 100GB
프로덕션 12 코어 96GB 100GB

숫자는 Kubernetes 작업자 노드당 개수입니다.

MySQL

환경 CPU 메모리 디스크
테스트/개발 2 코어 16GB 100GB
프로덕션 8 코어 64GB 500GB

숫자는 MySQL 노드당 개수입니다.

모델 및 Weave

Kubernetes

환경 CPU 메모리 디스크
테스트/개발 4 코어 32GB 100GB
프로덕션 16 코어 128GB 100GB

숫자는 Kubernetes 작업자 노드당 개수입니다.

MySQL

환경 CPU 메모리 디스크
테스트/개발 2 코어 16GB 100GB
프로덕션 8 코어 64GB 500GB

숫자는 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 (모델만 해당) K8s (Weave만 해당) K8s (모델&Weave) MySQL
테스트/개발 r6i.large r6i.xlarge r6i.xlarge db.r6g.large
프로덕션 r6i.2xlarge r6i.4xlarge r6i.4xlarge db.r6g.2xlarge

GCP

환경 K8s (모델만 해당) K8s (Weave만 해당) K8s (모델&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 (모델만 해당) K8s (Weave만 해당) K8s (모델&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

5.1.3.2 - Run W&B Server on Kubernetes

Kubernetes Operator로 W&B 플랫폼 배포

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 패턴을 참조하세요.

아키텍처 전환 이유

과거에는 W&B 애플리케이션이 Kubernetes 클러스터 내의 단일 배포 및 pod 또는 단일 Docker 컨테이너로 배포되었습니다. W&B는 데이터베이스 및 오브젝트 저장소를 외부화할 것을 권장해 왔으며 앞으로도 계속 권장할 것입니다. 데이터베이스 및 오브젝트 저장소를 외부화하면 애플리케이션의 상태가 분리됩니다.

애플리케이션이 성장함에 따라 모놀리식 컨테이너에서 분산 시스템(마이크로서비스)으로 발전해야 할 필요성이 분명해졌습니다. 이러한 변경은 백엔드 로직 처리를 용이하게 하고 내장된 Kubernetes 인프라 기능을 원활하게 도입합니다. 분산 시스템은 또한 W&B가 의존하는 추가 기능에 필수적인 새로운 서비스 배포를 지원합니다.

2024년 이전에는 Kubernetes 관련 변경 사항이 있을 때마다 terraform-kubernetes-wandb Terraform 모듈을 수동으로 업데이트해야 했습니다. Terraform 모듈을 업데이트하면 클라우드 공급자 간의 호환성이 보장되고 필요한 Terraform 변수가 구성되며 각 백엔드 또는 Kubernetes 수준 변경에 대해 Terraform 적용이 실행됩니다.

W&B 지원팀이 각 고객의 Terraform 모듈 업그레이드를 지원해야 했기 때문에 이 프로세스는 확장 가능하지 않았습니다.

해결책은 중앙 deploy.wandb.ai 서버에 연결하여 주어진 릴리스 채널에 대한 최신 사양 변경 사항을 요청하고 적용하는 operator를 구현하는 것이었습니다. 라이선스가 유효한 한 업데이트가 수신됩니다. Helm은 W&B operator의 배포 메커니즘이자 operator가 W&B Kubernetes 스택의 모든 설정 템플릿을 처리하는 수단(Helm-ception)으로 사용됩니다.

작동 방식

helm 또는 소스에서 operator를 설치할 수 있습니다. 자세한 내용은 charts/operator를 참조하세요.

설치 프로세스는 controller-manager라는 배포를 생성하고 weightsandbiases.apps.wandb.com이라는 custom resource 정의(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 라이선스를 획득하세요.

자체 관리 설치를 설정하고 구성하는 방법에 대한 자세한 설명은 가이드를 참조하세요.

설치 방법에 따라 다음 요구 사항을 충족해야 할 수도 있습니다.

  • 올바른 Kubernetes 클러스터 컨텍스트로 설치 및 구성된 Kubectl.
  • Helm이 설치되어 있습니다.

에어 갭 설치

에어 갭 환경에 W&B Kubernetes Operator를 설치하는 방법은 Kubernetes를 사용하여 에어 갭 환경에 W&B 배포 튜토리얼을 참조하세요.

W&B Server 애플리케이션 배포

이 섹션에서는 W&B Kubernetes operator를 배포하는 다양한 방법을 설명합니다.

다음 중 하나를 선택하세요.

  • 필요한 모든 외부 서비스를 프로비저닝하고 Helm CLI를 사용하여 W&B를 Kubernetes에 배포하려면 여기를 계속 진행하세요.
  • Terraform을 사용하여 인프라 및 W&B Server를 관리하려면 여기를 계속 진행하세요.
  • 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 chart는 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. 웹 UI를 사용하여 설치를 확인하려면 첫 번째 관리자 사용자 계정을 만든 다음 설치 확인에 설명된 확인 단계를 따르세요.

Helm Terraform Module을 사용하여 W&B 배포

이 방법을 사용하면 일관성과 반복성을 위해 Terraform의 infrastructure-as-code 접근 방식을 활용하여 특정 요구 사항에 맞는 사용자 정의 배포가 가능합니다. 공식 W&B Helm 기반 Terraform Module은 여기에 있습니다.

다음 코드는 시작점으로 사용할 수 있으며 프로덕션 수준 배포에 필요한 모든 설정 옵션을 포함합니다.

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 모듈을 사용하여 고객을 위한 “전용 클라우드” 설치를 배포하는 방법을 보려면 다음 링크를 따르세요.

W&B Cloud Terraform 모듈을 사용하여 W&B 배포

W&B는 AWS, GCP 및 Azure용 Terraform Modules 세트를 제공합니다. 이러한 모듈은 Kubernetes 클러스터, 로드 밸런서, MySQL 데이터베이스 등을 포함한 전체 인프라와 W&B Server 애플리케이션을 배포합니다. W&B Kubernetes Operator는 다음과 같은 버전의 공식 W&B 클라우드별 Terraform Modules와 함께 미리 준비되어 있습니다.

Terraform 레지스트리 소스 코드 버전
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를 사용하는 것이 좋습니다. 확인 코맨드는 모든 구성 요소와 구성을 확인하는 여러 테스트를 실행합니다.

다음 단계에 따라 설치를 확인하세요.

  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 Management Console 엑세스

W&B Kubernetes operator에는 관리 콘솔이 함께 제공됩니다. 예를 들어 https://wandb.company-name.com/ 콘솔과 같이 ${HOST_URI}/console에 있습니다.

관리 콘솔에 로그인하는 방법에는 두 가지가 있습니다.

  1. 브라우저에서 W&B 애플리케이션을 열고 로그인합니다. ${HOST_URI}/ (예: https://wandb.company-name.com/)로 W&B 애플리케이션에 로그인합니다.

  2. 콘솔에 엑세스합니다. 오른쪽 상단 모서리에 있는 아이콘을 클릭한 다음 시스템 콘솔을 클릭합니다. 관리자 권한이 있는 사용자만 시스템 콘솔 항목을 볼 수 있습니다.

  1. 브라우저에서 콘솔 애플리케이션을 엽니다. 위에서 설명한 URL을 열면 로그인 화면으로 리디렉션됩니다.
  2. 설치에서 생성되는 Kubernetes secret에서 비밀번호를 검색합니다.
    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 chart를 업데이트합니다.

    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 chart로 마이그레이션

다음 단계에 따라 Operator 기반 Helm chart로 마이그레이션하세요.

  1. 현재 W&B 설정을 가져옵니다. W&B가 비-operator 기반 버전의 Helm chart로 배포된 경우 다음과 같이 값을 내보냅니다.

    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 chart 저장소를 업데이트합니다.

    helm repo update
    
  5. 새 Helm chart를 설치합니다.

    helm upgrade --install operator wandb/operator -n wandb-cr --create-namespace
    
  6. 새 helm chart를 구성하고 W&B 애플리케이션 배포를 트리거합니다. 새 구성을 적용합니다.

    kubectl apply -f operator.yaml
    

    배포가 완료되는 데 몇 분 정도 걸립니다.

  7. 설치를 확인합니다. 설치 확인의 단계에 따라 모든 것이 작동하는지 확인합니다.

  8. 이전 설치를 제거합니다. 이전 helm chart를 제거하거나 매니페스트로 생성된 리소스를 삭제합니다.

Operator 기반 Terraform Helm chart로 마이그레이션

다음 단계에 따라 Operator 기반 Helm chart로 마이그레이션하세요.

  1. Terraform 설정을 준비합니다. Terraform 설정에서 이전 배포의 Terraform 코드를 여기에 설명된 코드로 바꿉니다. 이전과 동일한 변수를 설정합니다. .tfvars 파일이 있는 경우 변경하지 마세요.
  2. Terraform 실행을 실행합니다. terraform init, plan 및 apply를 실행합니다.
  3. 설치를 확인합니다. 설치 확인의 단계에 따라 모든 것이 작동하는지 확인합니다.
  4. 이전 설치를 제거합니다. 이전 helm chart를 제거하거나 매니페스트로 생성된 리소스를 삭제합니다.

W&B Server에 대한 설정 참조

이 섹션에서는 W&B Server 애플리케이션에 대한 설정 옵션을 설명합니다. 애플리케이션은 WeightsAndBiases라는 커스텀 리소스 정의로 설정을 수신합니다. 일부 설정 옵션은 아래 설정으로 노출되고 일부는 환경 변수로 설정해야 합니다.

설명서에는 기본고급의 두 가지 환경 변수 목록이 있습니다. 필요한 설정 옵션이 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 오브젝트 스토리지)가 포함된 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

Host

 # 프로토콜과 함께 FQDN을 제공합니다.
global:
  # 예제 호스트 이름, 자신의 호스트 이름으로 바꿉니다.
  host: https://wandb.example.com

오브젝트 스토리지 (bucket)

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이어야 합니다.

secret에서 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

secret에서 password를 참조하려면 다음과 같이 합니다.

global:
   mysql:
     # 예제 값, 자신의 값으로 바꿉니다.
     host: db.example.com
     port: 3306
     database: wandb_local
     user: wandb
     passwordSecret:
       name: database-secret
       passwordKey: MYSQL_WANDB_PASSWORD

License

global:
  # 예제 라이선스, 자신의 라이선스로 바꿉니다.
  license: eyJhbGnUzaHgyQjQy...VFnPS_KETXg1hi

secret에서 license를 참조하려면 다음과 같이 합니다.

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

Ingress

Ingress 클래스를 식별하려면 이 FAQ 항목을 참조하세요.

TLS 없음

global:
# 중요: Ingress는 YAML에서 'global'과 같은 수준에 있습니다 (하위 수준이 아님).
ingress:
  class: ""

TLS 사용

인증서가 포함된 secret을 만듭니다.

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

Ingress 설정에서 secret을 참조합니다.

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 ServiceAccounts

W&B pod를 실행할 커스텀 Kubernetes 서비스 계정을 지정합니다.

다음 코드 조각은 지정된 이름으로 배포의 일부로 서비스 계정을 만듭니다.

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: ""

secret에서 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 비밀번호가 포함된 Secret 이름 및 키 (익명 바인딩을 사용하지 않는 경우)
    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 비밀번호가 포함된 Secret 이름 및 키 (익명 바인딩을 사용하지 않는 경우)
    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

동일한 개념이 console, weave, weave-traceparquet에 적용됩니다.

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: GraphQL API 및 프런트엔드 애플리케이션을 포함한 W&B의 핵심입니다. 대부분의 플랫폼 기능을 제공합니다.
  • wandb-console: /console을 통해 엑세스할 수 있는 관리 콘솔입니다.
  • wandb-otel: Kubernetes 계층의 리소스에서 메트릭 및 로그를 수집하여 관리 콘솔에 표시하는 OpenTelemetry 에이전트입니다.
  • wandb-prometheus: 관리 콘솔에 표시하기 위해 다양한 구성 요소에서 메트릭을 캡처하는 Prometheus 서버입니다.
  • wandb-parquet: 데이터베이스 데이터를 Parquet 형식으로 오브젝트 스토리지로 내보내는 wandb-app pod와 분리된 백엔드 마이크로서비스입니다.
  • wandb-weave: UI에서 쿼리 테이블을 로드하고 다양한 핵심 앱 기능을 지원하는 또 다른 백엔드 마이크로서비스입니다.
  • wandb-weave-trace: LLM 기반 애플리케이션을 추적, 실험, 평가, 배포 및 개선하기 위한 프레임워크입니다. 이 프레임워크는 wandb-app pod를 통해 엑세스할 수 있습니다.

W&B Operator Console 비밀번호를 얻는 방법

W&B Kubernetes Operator Management Console 엑세스를 참조하세요.

Ingress가 작동하지 않는 경우 W&B Operator Console에 엑세스하는 방법

Kubernetes 클러스터에 연결할 수 있는 호스트에서 다음 코맨드를 실행합니다.

kubectl port-forward svc/wandb-console 8082

https://localhost:8082/ 콘솔에서 브라우저의 콘솔에 엑세스합니다.

비밀번호를 얻는 방법에 대한 내용은 W&B Kubernetes Operator Management Console 엑세스 (옵션 2)를 참조하세요.

W&B Server 로그를 보는 방법

애플리케이션 pod의 이름은 wandb-app-xxx입니다.

kubectl get pods
kubectl logs wandb-XXXXX-XXXXX

Kubernetes ingress 클래스를 식별하는 방법

다음을 실행하여 클러스터에 설치된 ingress 클래스를 가져올 수 있습니다.

kubectl get ingressclass

5.1.3.2.1 - Kubernetes operator for air-gapped instances

Kubernetes Operator를 사용하여 W&B 플랫폼 배포 (에어 갭)

도입

본 가이드는 에어 갭(air-gapped) 고객 관리 환경에 W&B 플랫폼을 배포하는 단계별 지침을 제공합니다.

Helm 차트와 컨테이너 이미지를 호스팅하려면 내부 저장소 또는 레지스트리를 사용하세요. Kubernetes 클러스터에 적절한 엑세스 권한을 가진 셸 콘솔에서 모든 코맨드를 실행합니다.

Kubernetes 애플리케이션을 배포하는 데 사용하는 모든 지속적 배포 툴링에서 유사한 코맨드를 활용할 수 있습니다.

1단계: 전제 조건

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

  • Kubernetes 버전 >= 1.28
  • Helm 버전 >= 3
  • 필요한 W&B 이미지가 있는 내부 컨테이너 레지스트리에 대한 엑세스
  • W&B Helm 차트에 대한 내부 Helm 저장소에 대한 엑세스

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

배포를 진행하기 전에 다음 컨테이너 이미지가 내부 컨테이너 레지스트리에서 사용 가능한지 확인해야 합니다.

이러한 이미지는 W&B 컴포넌트의 성공적인 배포에 매우 중요합니다. W&B는 WSM을 사용하여 컨테이너 레지스트리를 준비하는 것을 권장합니다.

조직에서 이미 내부 컨테이너 레지스트리를 사용하는 경우 이미지를 추가할 수 있습니다. 그렇지 않으면 다음 섹션에 따라 WSM을 사용하여 컨테이너 저장소를 준비하세요.

WSM 사용 또는 조직의 자체 프로세스를 사용하여 Operator의 요구 사항을 추적하고 이미지 업그레이드를 확인하고 다운로드하는 것은 사용자의 책임입니다.

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 관리 wandb/wsm GitHub 저장소( https://github.com/wandb/wsm )에서 WSM을 다운로드하거나 복제합니다. 최신 릴리스는 wandb/wsm 릴리스 노트를 참조하세요.

이미지 및 해당 버전 나열

wsm list를 사용하여 최신 이미지 버전 목록을 가져옵니다.

wsm list

출력은 다음과 같습니다.

:package: 배포에 필요한 모든 이미지를 나열하는 프로세스를 시작합니다...
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
다음은 W&B를 배포하는 데 필요한 이미지입니다. 이러한 이미지가 내부 컨테이너 레지스트리에서 사용 가능한지 확인하고 values.yaml을 적절하게 업데이트하십시오.

이미지 다운로드

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 차트 저장소 준비

컨테이너 이미지와 함께 다음 Helm 차트가 내부 Helm 차트 저장소에서 사용 가능한지 확인해야 합니다. 마지막 단계에서 소개된 WSM 툴은 Helm 차트도 다운로드할 수 있습니다. 또는 여기에서 다운로드하세요.

operator 차트는 컨트롤러 관리자라고도 하는 W&B Operator를 배포하는 데 사용됩니다. platform 차트는 CRD(사용자 정의 리소스 정의)에 구성된 값을 사용하여 W&B 플랫폼을 배포하는 데 사용됩니다.

4단계: Helm 저장소 설정

이제 내부 저장소에서 W&B Helm 차트를 가져오도록 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 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 플랫폼의 필요한 컴포넌트를 배포할 때 내부 레지스트리 및 저장소를 사용하도록 보장합니다.

이 예제 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 플랫폼을 배포하기 위해 Kubernetes Operator는 CR의 값을 사용하여 내부 저장소에서 operator-wandb Helm 차트를 구성합니다.

모든 태그/버전을 내부 레지스트리에서 사용 가능한 버전으로 바꿉니다.

앞의 구성 파일 작성에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

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

이제 Kubernetes operator와 CR이 구성되었으므로 wandb.yaml 구성을 적용하여 W&B 플랫폼을 배포합니다.

kubectl apply -f wandb.yaml

FAQ

배포 프로세스 중에 자주 묻는 질문(FAQ) 및 문제 해결 팁은 아래를 참조하십시오.

다른 ingress 클래스가 있습니다. 해당 클래스를 사용할 수 있습니까?

예, values.yaml에서 ingress 설정을 수정하여 ingress 클래스를 구성할 수 있습니다.

인증서 번들에 인증서가 두 개 이상 있습니다. 작동합니까?

values.yamlcustomCACerts 섹션에서 인증서를 여러 항목으로 분할해야 합니다.

Kubernetes operator가 무인 업데이트를 적용하지 못하도록 하는 방법은 무엇입니까? 가능합니까?

W&B 콘솔에서 자동 업데이트를 해제할 수 있습니다. 지원되는 버전에 대한 질문은 W&B 팀에 문의하십시오. 또한 W&B는 지난 6개월 동안 릴리스된 플랫폼 버전을 지원합니다. W&B는 주기적인 업그레이드를 수행하는 것이 좋습니다.

환경이 퍼블릭 저장소에 연결되어 있지 않은 경우 배포가 작동합니까?

구성에서 airgappedtrue로 설정하면 Kubernetes operator는 내부 리소스만 사용하고 퍼블릭 저장소에 연결을 시도하지 않습니다.

5.1.3.3 - Install on public cloud

5.1.3.3.1 - Deploy W&B Platform on AWS

AWS에 W&B 서버 호스팅하기.

W&B는 AWS에 플랫폼을 배포하기 위해 W&B Server AWS Terraform Module 사용을 권장합니다.

시작하기 전에, W&B는 Terraform에서 사용 가능한 원격 백엔드 중 하나를 선택하여 상태 파일을 저장하는 것을 권장합니다.

상태 파일은 모든 구성 요소를 다시 만들지 않고도 업그레이드를 롤아웃하거나 배포를 변경하는 데 필요한 리소스입니다.

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 정책IAM 역할을 생성하고 역할에 리소스를 할당할 수 있는 권한이 필요합니다.

일반적인 단계

이 주제의 단계는 이 문서에서 다루는 모든 배포 옵션에 공통적입니다.

  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 버전이 포함됩니다.

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

    AWS provider를 구성하려면 Terraform 공식 문서를 참조하세요.

    선택 사항이지만, 이 문서의 시작 부분에서 언급한 원격 백엔드 설정을 추가하는 것이 좋습니다.

  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 쿼리를 캐시하고 Experiments에 대한 메트릭을 로드할 때 애플리케이션 응답 속도를 높입니다.

캐시를 활성화하려면 권장 배포 섹션에 설명된 동일한 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.tfuse_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**

[...]
}

기타 배포 옵션

동일한 파일에 모든 구성을 추가하여 세 가지 배포 옵션을 모두 결합할 수 있습니다. Terraform Module은 표준 옵션과 배포 - 권장에서 찾을 수 있는 최소 구성과 함께 결합할 수 있는 여러 옵션을 제공합니다.

수동 구성

Amazon S3 버킷을 W&B의 파일 스토리지 백엔드로 사용하려면 다음을 수행해야 합니다.

버킷에서 오브젝트 생성 알림을 수신하도록 구성된 SQS 대기열과 함께 버킷을 만들어야 합니다. 인스턴스에는 이 대기열에서 읽을 수 있는 권한이 필요합니다.

S3 버킷 및 버킷 알림 생성

아래 절차에 따라 Amazon S3 버킷을 만들고 버킷 알림을 활성화합니다.

  1. AWS 콘솔에서 Amazon S3로 이동합니다.
  2. 버킷 만들기를 선택합니다.
  3. 고급 설정 내에서 이벤트 섹션 내에서 알림 추가를 선택합니다.
  4. 이전에 구성한 SQS 대기열로 전송되도록 모든 오브젝트 생성 이벤트를 구성합니다.
Enterprise file storage settings

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://<버킷 이름>
  • 파일 스토리지 리전(AWS 전용): <리전>
  • 알림 구독: sqs://<대기열 이름>
  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 모듈을 사용하여 pre-operator 환경에서 post-operator 환경으로 업그레이드하는 데 필요한 단계를 자세히 설명합니다.

이전 및 이후 아키텍처

이전에는 W&B 아키텍처에서 다음을 사용했습니다.

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

인프라를 제어합니다.

pre-operator-infra

그리고 이 모듈을 사용하여 W&B 서버를 배포합니다.

module "wandb_app" {
  source  = "wandb/wandb/kubernetes"
  version = "1.12.0"
}
pre-operator-k8s

전환 후 아키텍처는 다음을 사용합니다.

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

인프라 설치와 Kubernetes 클러스터에 대한 W&B 서버를 모두 관리하므로 post-operator.tf에서 module "wandb_app"이 필요하지 않습니다.

post-operator-k8s

이러한 아키텍처 변경을 통해 SRE/인프라 팀의 수동 Terraform 작업 없이도 추가 기능(예: OpenTelemetry, Prometheus, HPA, Kafka 및 이미지 업데이트)을 사용할 수 있습니다.

W&B Pre-Operator의 기본 설치를 시작하려면 post-operator.tf.disabled 파일 확장명이 있고 pre-operator.tf가 활성 상태인지(확장명이 .disabled가 아닌지) 확인합니다. 해당 파일은 여기에서 찾을 수 있습니다.

전제 조건

마이그레이션 프로세스를 시작하기 전에 다음 전제 조건이 충족되었는지 확인합니다.

  • Egress: 배포가 에어 갭이 될 수 없습니다. **Release Channel**에 대한 최신 사양을 가져오려면 deploy.wandb.ai에 엑세스해야 합니다.
  • AWS 자격 증명: AWS 리소스와 상호 작용하도록 구성된 적절한 AWS 자격 증명.
  • Terraform 설치됨: 시스템에 최신 버전의 Terraform이 설치되어 있어야 합니다.
  • Route53 호스팅 영역: 애플리케이션이 제공될 도메인에 해당하는 기존 Route53 호스팅 영역.
  • Pre-Operator Terraform 파일: pre-operator.tfpre-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 구성은 두 개의 모듈을 호출합니다.

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-apply

post-operator.tf에는 다음과 같은 단일 항목이 있습니다.

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

post-operator 구성의 변경 사항:

  1. 필수 Provider 업데이트: provider 호환성을 위해 required_providers.aws.version3.6에서 4.0으로 변경합니다.
  2. DNS 및 로드 밸런서 구성: Ingress를 통해 DNS 레코드 및 AWS 로드 밸런서 설정을 관리하려면 enable_dummy_dnsenable_operator_alb를 통합합니다.
  3. 라이선스 및 크기 구성: 새로운 운영 요구 사항에 맞게 licensesize 파라미터를 wandb_infra 모듈로 직접 전송합니다.
  4. 사용자 지정 도메인 처리: 필요한 경우 kube-system 네임스페이스 내에서 외부 DNS pod 로그를 확인하여 DNS 문제를 해결하려면 custom_domain_filter를 사용합니다.
  5. Helm Provider 구성: Kubernetes 리소스를 효과적으로 관리하려면 Helm provider를 활성화하고 구성합니다.
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 구성으로 원활하게 전환할 수 있습니다.

5.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 메시지 시스템

사전 필수 권한

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 = "리소스에 사용되는 네임스페이스 접두사"
    }
    
    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를 설치하는 가장 간단한 배포 옵션 구성입니다.

  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 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 토픽 및 구독을 만들려면 아래 절차를 따르십시오.

  1. GCP Console 내에서 Pub/Sub 서비스로 이동합니다.
  2. 토픽 만들기를 선택하고 토픽 이름을 입력합니다.
  3. 페이지 하단에서 구독 만들기를 선택합니다. 전달 유형Pull로 설정되어 있는지 확인합니다.
  4. 만들기를 클릭합니다.

인스턴스를 실행하는 서비스 계정 또는 계정이 이 구독에 대해 pubsub.admin 역할을 가지고 있는지 확인합니다. 자세한 내용은 https://cloud.google.com/pubsub/docs/access-control#console을 참조하십시오.

Storage Bucket 만들기

  1. Cloud Storage Buckets 페이지로 이동합니다.
  2. 버킷 만들기를 선택하고 버킷 이름을 입력합니다. Standard 스토리지 클래스를 선택해야 합니다.

인스턴스를 실행하는 서비스 계정 또는 계정이 다음을 모두 가지고 있는지 확인합니다.

  1. CORS 엑세스를 활성화합니다. 이는 커맨드라인을 사용해서만 수행할 수 있습니다. 먼저 다음 CORS 구성으로 JSON 파일을 만듭니다.
cors:
- maxAgeSeconds: 3600
  method:
   - GET
   - PUT
     origin:
   - '<YOUR_W&B_SERVER_HOST>'
     responseHeader:
   - Content-Type

origin 값의 체계, 호스트 및 포트가 정확히 일치해야 합니다.

  1. gcloud가 설치되어 있고 올바른 GCP 프로젝트에 로그인되어 있는지 확인합니다.
  2. 다음을 실행합니다.
gcloud storage buckets update gs://<BUCKET_NAME> --cors-file=<CORS_CONFIG_FILE>

PubSub Notification 만들기

커맨드라인에서 아래 절차에 따라 Storage Bucket에서 Pub/Sub 토픽으로의 알림 스트림을 만듭니다.

  1. GCP 프로젝트에 로그인합니다.
  2. 터미널에서 다음을 실행합니다.
gcloud pubsub topics list  # 참조용 토픽 이름 나열
gcloud storage ls          # 참조용 버킷 이름 나열

# 버킷 알림 만들기
gcloud storage buckets notifications create gs://<BUCKET_NAME> --topic=<TOPIC_NAME>

자세한 참조는 Cloud Storage 웹사이트에서 확인할 수 있습니다.

W&B 서버 구성

  1. 마지막으로 http(s)://YOUR-W&B-SERVER-HOST/console/settings/system에서 W&B System Connections 페이지로 이동합니다.
  2. Google Cloud Storage (gcs) 제공자를 선택합니다.
  3. GCS 버킷 이름을 제공합니다.
  1. 설정 업데이트를 눌러 새 설정을 적용합니다.

W&B Server 업그레이드

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. 구성을 업데이트한 후 배포 옵션 섹션에 설명된 단계를 완료합니다.

5.1.3.3.3 - Deploy W&B Platform on Azure

Azure에서 W&B 서버 호스팅하기.

W&B Server를 자체 관리하기로 결정했다면 W&B Server Azure Terraform Module을 사용하여 Azure에 플랫폼을 배포하는 것이 좋습니다.

모듈 설명서는 광범위하며 사용할 수 있는 모든 옵션이 포함되어 있습니다. 이 문서에서는 몇 가지 배포 옵션을 다룹니다.

시작하기 전에 Terraform에 사용할 수 있는 remote backends 중 하나를 선택하여 State File을 저장하는 것이 좋습니다.

State File은 모든 구성 요소를 다시 생성하지 않고도 업그레이드를 롤아웃하거나 배포를 변경하는 데 필요한 리소스입니다.

Terraform Module은 다음과 같은 필수 구성 요소를 배포합니다.

  • Azure Resource Group
  • Azure Virtual Network (VPC)
  • Azure MySQL Flexible Server
  • Azure Storage Account & Blob Storage
  • Azure Kubernetes Service
  • Azure Application Gateway

다른 배포 옵션에는 다음과 같은 선택적 구성 요소도 포함될 수 있습니다.

  • Azure Cache for Redis
  • Azure Event Grid

전제 조건 권한

AzureRM provider를 구성하는 가장 간단한 방법은 Azure CLI를 이용하는 것이지만, Azure Service Principal을 사용한 자동화도 유용할 수 있습니다. 어떤 인증 방법을 사용하든 Terraform을 실행할 계정은 도입부에 설명된 모든 구성 요소를 생성할 수 있어야 합니다.

일반적인 단계

이 주제의 단계는 이 문서에서 다루는 모든 배포 옵션에 공통적입니다.

  1. 개발 환경을 준비합니다.
  • Terraform을 설치합니다.
  • 사용할 코드로 Git repository를 만드는 것이 좋지만, 파일을 로컬에 보관할 수도 있습니다.
  1. terraform.tfvars 파일 만들기 tvfars 파일 내용은 설치 유형에 따라 사용자 정의할 수 있지만, 최소 권장 사항은 아래 예제와 같습니다.

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

    여기에 정의된 변수는 배포 전에 결정해야 합니다. namespace 변수는 Terraform에서 생성한 모든 리소스의 접두사가 되는 문자열입니다.

    subdomaindomain의 조합은 Weights & Biases가 구성될 FQDN을 형성합니다. 위의 예에서 W&B FQDN은 wandb-aws.wandb.ml이고 FQDN 레코드가 생성될 DNS zone_id입니다.

  2. versions.tf 파일 만들기 이 파일에는 AWS에 W&B를 배포하는 데 필요한 Terraform 및 Terraform provider 버전이 포함됩니다.

terraform {
  required_version = "~> 1.3"

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

AWS provider를 구성하려면 Terraform 공식 문서를 참조하세요.

선택 사항이지만, 매우 권장되는 방법으로 이 문서의 시작 부분에서 언급한 remote backend configuration을 추가할 수 있습니다.

  1. variables.tf 파일 만들기. terraform.tfvars에서 구성된 모든 옵션에 대해 Terraform은 해당 변수 선언이 필요합니다.
  variable "namespace" {
    type        = string
    description = "리소스 접두사에 사용되는 문자열입니다."
  }

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

  variable "domain_name" {
    type        = string
    description = "Weights & Biases UI에 엑세스하기 위한 도메인입니다."
  }

  variable "subdomain" {
    type        = string
    default     = null
    description = "Weights & Biases UI에 엑세스하기 위한 서브 도메인입니다. 기본값은 Route53 Route에 레코드를 생성합니다."
  }

  variable "license" {
    type        = string
    description = "wandb/local 라이선스"
  }

권장 배포

이것은 가장 간단한 배포 옵션 구성으로, 모든 필수 구성 요소를 생성하고 Kubernetes Cluster에 최신 버전의 W&B를 설치합니다.

  1. main.tf 만들기 일반적인 단계에서 파일을 만든 동일한 디렉토리에 다음 내용으로 main.tf 파일을 만듭니다.
provider "azurerm" {
  features {}
}

provider "kubernetes" {
  host                   = module.wandb.cluster_host
  cluster_ca_certificate = base64decode(module.wandb.cluster_ca_certificate)
  client_key             = base64decode(module.wandb.cluster_client_key)
  client_certificate     = base64decode(module.wandb.cluster_client_certificate)
}

provider "helm" {
  kubernetes {
    host                   = module.wandb.cluster_host
    cluster_ca_certificate = base64decode(module.wandb.cluster_ca_certificate)
    client_key             = base64decode(module.wandb.cluster_client_key)
    client_certificate     = base64decode(module.wandb.cluster_client_certificate)
  }
}

# 필요한 모든 서비스 시작
module "wandb" {
  source  = "wandb/wandb/azurerm"
  version = "~> 1.2"

  namespace   = var.namespace
  location    = var.location
  license     = var.license
  domain_name = var.domain_name
  subdomain   = var.subdomain

  deletion_protection = false

  tags = {
    "Example" : "PublicDns"
  }
}

output "address" {
  value = module.wandb.address
}

output "url" {
  value = module.wandb.url
}
  1. 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/azurerm"
  version = "~> 1.2"


  namespace   = var.namespace
  location    = var.location
  license     = var.license
  domain_name = var.domain_name
  subdomain   = var.subdomain

  create_redis       = true # Redis 생성
  [...]

외부 큐를 사용한 배포

배포 옵션 3은 외부 message broker를 활성화하는 것으로 구성됩니다. W&B는 broker를 내장하고 있기 때문에 선택 사항입니다. 이 옵션은 성능 향상을 가져오지 않습니다.

메시지 broker를 제공하는 Azure 리소스는 Azure Event Grid이며, 이를 활성화하려면 권장 배포에서 사용한 것과 동일한 main.tfuse_internal_queue = false 옵션을 추가해야 합니다.

# 필요한 모든 서비스 시작
module "wandb" {
  source  = "wandb/wandb/azurerm"
  version = "~> 1.2"


  namespace   = var.namespace
  location    = var.location
  license     = var.license
  domain_name = var.domain_name
  subdomain   = var.subdomain

  use_internal_queue       = false # Azure Event Grid 활성화
  [...]
}

기타 배포 옵션

동일한 파일에 모든 구성을 추가하여 세 가지 배포 옵션을 모두 결합할 수 있습니다. Terraform Module은 표준 옵션과 권장 배포에서 찾을 수 있는 최소 구성과 함께 결합할 수 있는 여러 옵션을 제공합니다.

5.1.3.4 - Deploy W&B Platform On-premises

온프레미스 인프라에 W&B Server 호스팅하기

관련 질문은 W&B Sales 팀에 문의하십시오: 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~100GB입니다. 사용량이 많으면 페타바이트의 스토리지 소비가 발생할 수 있습니다.
  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

Kubernetes에 W&B Server 애플리케이션 배포

권장되는 설치 방법은 공식 W&B Helm 차트를 사용하는 것입니다. 이 섹션에 따라 W&B Server 애플리케이션을 배포하십시오.

OpenShift

W&B는 OpenShift Kubernetes cluster 내에서 운영하는 것을 지원합니다.

권한 없는 사용자로 컨테이너 실행

기본적으로 컨테이너는 $UID 999를 사용합니다. 오케스트레이터에서 루트가 아닌 사용자로 컨테이너를 실행해야 하는 경우 $UID >= 100000 및 $GID 0을 지정하십시오.

Kubernetes에 대한 보안 컨텍스트 예제는 다음과 유사합니다.

spec:
  securityContext:
    runAsUser: 100000
    runAsGroup: 0

네트워킹

로드 밸런서

적절한 네트워크 경계에서 네트워크 요청을 중지하는 로드 밸런서를 실행합니다.

일반적인 로드 밸런서에는 다음이 포함됩니다.

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

기계 학습 페이로드를 실행하는 데 사용되는 모든 장치와 웹 브라우저를 통해 서비스에 액세스하는 데 사용되는 장치가 이 엔드포인트와 통신할 수 있는지 확인하십시오.

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
    map $http_x_forwarded_proto $proxy_x_forwarded_proto {
        default $http_x_forwarded_proto;
        ''      $scheme;
    }

    # Also, in the above case, force 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
    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
    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
    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 지원팀에 문의하십시오.

5.1.3.5 - Update W&B license and version

다양한 설치 방법에서 W&B (Weights & Biases) 버전 및 라이선스를 업데이트하는 방법에 대한 가이드입니다.

W&B 서버를 설치한 방법과 동일한 방법으로 W&B 서버 버전 및 라이선스를 업데이트합니다. 다음 표에는 다양한 배포 방법을 기준으로 라이선스 및 버전을 업데이트하는 방법이 나와 있습니다.

릴리스 유형 설명
Terraform W&B는 클라우드 배포를 위해 세 개의 퍼블릭 Terraform 모듈(AWS, GCPAzure)을 지원합니다.
Helm Helm Chart를 사용하여 기존 Kubernetes 클러스터에 W&B를 설치할 수 있습니다.

Terraform으로 업데이트

Terraform을 사용하여 라이선스 및 버전을 업데이트합니다. 다음 표에는 클라우드 플랫폼을 기반으로 W&B에서 관리하는 Terraform 모듈이 나와 있습니다.

클라우드 공급자 Terraform 모듈
AWS AWS Terraform 모듈
GCP GCP Terraform 모듈
Azure Azure Terraform 모듈
  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" # Your new license key
        wandb_version = "new_wandb_version" # Desired W&B version
        ...
    }
    
  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으로 업데이트

사양으로 W&B 업데이트

  1. Helm 차트 *.yaml 구성 파일에서 image.tag 및/또는 license 값을 수정하여 새 버전을 지정합니다.

    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
    

자세한 내용은 퍼블릭 저장소의 업그레이드 가이드를 참조하십시오.

관리 UI로 업데이트

이 방법은 일반적으로 자체 호스팅 Docker 설치에서 W&B 서버 컨테이너의 환경 변수로 설정되지 않은 라이선스를 업데이트하는 데만 사용할 수 있습니다.

  1. 업그레이드하려는 배포에 대해 올바른 organization 및 배포 ID와 일치하는지 확인하면서 W&B 배포 페이지에서 새 라이선스를 가져옵니다.
  2. <host-url>/system-settings에서 W&B 관리 UI에 엑세스합니다.
  3. 라이선스 관리 섹션으로 이동합니다.
  4. 새 라이선스 키를 입력하고 변경 사항을 저장합니다.

5.2 - Identity and access management (IAM)

W&B 플랫폼은 W&B 내에 세 가지 IAM 범위, 즉 Organizations, TeamsProjects를 가지고 있습니다.

Organization

Organization 은 W&B 계정 또는 인스턴스의 루트 범위입니다. 계정 또는 인스턴스의 모든 작업은 사용자 관리, 팀 관리, 팀 내 프로젝트 관리, 사용량 추적 등을 포함하여 해당 루트 범위 내에서 수행됩니다.

Multi-tenant Cloud를 사용하는 경우, 각 Organization은 사업부, 개인 사용자, 다른 기업과의 합작 파트너십 등에 해당할 수 있습니다.

전용 클라우드(Dedicated Cloud) 또는 자체 관리 인스턴스를 사용하는 경우, 하나의 Organization에 해당합니다. 회사는 여러 사업부 또는 부서에 매핑하기 위해 여러 개의 전용 클라우드(Dedicated Cloud) 또는 자체 관리 인스턴스를 가질 수 있지만, 이는 사업 또는 부서 전체에서 AI 실무자를 관리하는 선택적인 방법입니다.

자세한 내용은 Organizations 관리를 참조하십시오.

Team

Team 은 Organization 내의 하위 범위로, 사업부/기능, 부서 또는 회사 내 프로젝트 팀에 매핑될 수 있습니다. 배포 유형 및 가격 계획에 따라 Organization 내에 여러 개의 Team이 있을 수 있습니다.

AI 프로젝트는 Team 컨텍스트 내에서 구성됩니다. Team 내의 엑세스 제어는 Team 관리자가 관리하며, 이들은 상위 Organization 수준의 관리자일 수도 아닐 수도 있습니다.

자세한 내용은 Team 추가 및 관리를 참조하십시오.

Project

Project 는 Team 내의 하위 범위로, 특정 의도된 결과를 가진 실제 AI 프로젝트에 매핑됩니다. Team 내에 여러 개의 Project가 있을 수 있습니다. 각 Project에는 누가 엑세스할 수 있는지 결정하는 가시성 모드가 있습니다.

모든 Project는 WorkspacesReports로 구성되며, 관련 Artifacts, SweepsAutomations에 연결됩니다.

5.2.1 - Authentication

5.2.1.1 - Configure SSO with LDAP

W&B 서버 LDAP 서버로 인증 정보를 인증합니다. 다음 가이드는 W&B 서버의 설정을 구성하는 방법을 설명합니다. 필수 및 선택적 설정과 시스템 설정 UI에서 LDAP 연결을 구성하는 방법에 대한 지침을 다룹니다. 또한 어드레스, 기본 식별 이름, 속성과 같은 LDAP 설정의 다양한 입력에 대한 정보를 제공합니다. 이러한 속성은 W&B 앱 UI 또는 환경 변수를 사용하여 지정할 수 있습니다. 익명 바인딩 또는 관리자 DN 및 비밀번호를 사용하여 바인딩을 설정할 수 있습니다.

LDAP 연결 구성

  1. W&B 앱으로 이동합니다.
  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로 설정합니다. 아니요

5.2.1.2 - Configure SSO with OIDC

Weights & Biases 서버는 OpenID Connect (OIDC) 호환 ID 공급자를 지원하므로 Okta, Keycloak, Auth0, Google, Entra와 같은 외부 ID 공급자를 통해 사용자 ID 및 그룹 멤버십을 관리할 수 있습니다.

OpenID Connect (OIDC)

W&B 서버는 외부 IdP(Identity Provider)와 통합하기 위해 다음과 같은 OIDC 인증 흐름을 지원합니다.

  1. Form Post를 사용하는 암시적 흐름
  2. PKCE(Proof Key for Code Exchange)를 사용하는 Authorization Code 흐름

이러한 흐름은 사용자를 인증하고 엑세스 제어를 관리하는 데 필요한 ID 정보(ID 토큰 형태)를 W&B 서버에 제공합니다.

ID 토큰은 이름, 사용자 이름, 이메일, 그룹 멤버십과 같은 사용자 ID 정보가 포함된 JWT입니다. W&B 서버는 이 토큰을 사용하여 사용자를 인증하고 시스템 내 적절한 역할 또는 그룹에 매핑합니다.

W&B 서버의 맥락에서 엑세스 토큰은 사용자를 대신하여 API에 대한 요청을 승인하지만 W&B 서버의 주요 관심사는 사용자 인증 및 ID이므로 ID 토큰만 필요합니다.

환경 변수를 사용하여 IAM 옵션 구성전용 클라우드 또는 자체 관리형 인스턴스에 설정할 수 있습니다.

전용 클라우드 또는 자체 관리형 W&B 서버 설치를 위해 ID 공급자를 구성하는 데 도움이 되도록 다양한 IdP에 대한 다음 가이드라인을 따르세요. SaaS 버전의 W&B를 사용하는 경우 조직의 Auth0 테넌트 구성에 대한 지원은 support@wandb.com으로 문의하세요.

인증을 위해 AWS Cognito를 설정하려면 아래 절차를 따르세요.

  1. 먼저 AWS 계정에 로그인하고 AWS Cognito 앱으로 이동합니다.

    인증이 아닌 권한 부여에 OIDC를 사용하는 경우 퍼블릭 클라이언트는 설정을 간소화합니다.
  2. 허용된 콜백 URL을 제공하여 IdP에서 애플리케이션을 구성합니다.

    • http(s)://YOUR-W&B-HOST/oidc/callback을 콜백 URL로 추가합니다. 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 응답 유형과 함께 암시적 권한을 사용합니다.

    PKCE Code Exchange 흐름을 사용하는 authorization_code 권한을 수행하도록 _wandb/local_을 구성할 수도 있습니다.

  4. AWS Cognito가 앱에 토큰을 전달하는 방법을 구성하려면 하나 이상의 OAuth 권한 유형을 선택합니다.

  5. W&B에는 특정 OpenID Connect (OIDC) 범위가 필요합니다. AWS Cognito 앱에서 다음을 선택합니다.

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

    예를 들어 AWS Cognito 앱 UI는 다음 이미지와 유사해야 합니다.

    필수 필드

    설정 페이지에서 인증 방법을 선택하거나 OIDC_AUTH_METHOD 환경 변수를 설정하여 _wandb/local_에 사용할 권한을 알립니다.

    인증 방법을 pkce로 설정해야 합니다.

  6. 클라이언트 ID와 OIDC 발급자 URL이 필요합니다. OpenID 검색 문서는 $OIDC_ISSUER/.well-known/openid-configuration에서 사용할 수 있어야 합니다.

    예를 들어 사용자 풀 섹션 내의 앱 통합 탭에서 사용자 풀 ID를 Cognito IdP URL에 추가하여 발급자 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. 왼쪽에서 애플리케이션을 선택한 다음 애플리케이션을 다시 선택합니다.

  3. “앱 통합 생성"을 클릭합니다.

  4. “새 앱 통합 만들기"라는 화면에서 OIDC - OpenID Connect단일 페이지 애플리케이션을 선택합니다. 그런 다음 “다음"을 클릭합니다.

  5. “새 단일 페이지 앱 통합"이라는 화면에서 다음과 같이 값을 채우고 저장을 클릭합니다.

    • 앱 통합 이름(예: “Weights & Biases”)
    • 권한 유형: Authorization CodeImplicit (hybrid) 모두 선택
    • 로그인 리디렉션 URI: https://YOUR_W_AND_B_URL/oidc/callback
    • 로그아웃 리디렉션 URI: https://YOUR_W_AND_B_URL/logout
    • 할당: 지금 그룹 할당 건너뛰기 선택
  6. 방금 생성한 Okta 애플리케이션의 개요 화면에서 일반 탭 아래의 클라이언트 자격 증명 아래에 있는 클라이언트 ID를 기록해 둡니다.

  7. Okta OIDC 발급자 URL을 식별하려면 왼쪽에서 설정을 선택한 다음 계정을 선택합니다. Okta UI는 조직 연락처 아래에 회사 이름을 표시합니다.

OIDC 발급자 URL의 형식은 https://COMPANY.okta.com입니다. COMPANY를 해당 값으로 바꿉니다. 기록해 둡니다.

  1. https://portal.azure.com/에서 Azure Portal에 로그인합니다.

  2. “Microsoft Entra ID” 서비스를 선택합니다.

  3. 왼쪽에서 “앱 등록"을 선택합니다.

  4. 상단에서 “새 등록"을 클릭합니다.

    “애플리케이션 등록"이라는 화면에서 다음과 같이 값을 채웁니다.

    • 이름(예: “Weights and Biases application”)을 지정합니다.

    • 기본적으로 선택된 계정 유형은 “이 조직 디렉터리의 계정만 해당(기본 디렉터리만 해당 - 단일 테넌트)“입니다. 필요한 경우 수정합니다.

    • 유형으로 리디렉션 URI를 https://YOUR_W_AND_B_URL/oidc/callback 값으로 구성합니다.

    • “등록"을 클릭합니다.

    • “애플리케이션(클라이언트) ID” 및 “디렉터리(테넌트) ID"를 기록해 둡니다.

  5. 왼쪽에서 인증을 클릭합니다.

    • 프런트 채널 로그아웃 URL 아래에 https://YOUR_W_AND_B_URL/logout을 지정합니다.

    • “저장"을 클릭합니다.

  6. 왼쪽에서 “인증서 및 암호"를 클릭합니다.

    • “클라이언트 암호"를 클릭한 다음 “새 클라이언트 암호"를 클릭합니다.

      “클라이언트 암호 추가"라는 화면에서 다음과 같이 값을 채웁니다.

      • 설명(예: “wandb”)을 입력합니다.
      • “만료"는 그대로 두거나 필요한 경우 변경합니다.
      • “추가"를 클릭합니다.
    • 암호의 “값"을 기록해 둡니다. “암호 ID"는 필요하지 않습니다.

이제 세 가지 값을 기록해 두어야 합니다.

  • OIDC 클라이언트 ID
  • OIDC 클라이언트 암호
  • OIDC 발급자 URL에 테넌트 ID가 필요합니다.

OIDC 발급자 URL의 형식은 https://login.microsoftonline.com/${TenantID}/v2.0입니다.

W&B 서버에서 SSO 설정

SSO를 설정하려면 관리자 권한과 다음 정보가 필요합니다.

  • OIDC 클라이언트 ID
  • OIDC 인증 방법(implicit 또는 pkce)
  • OIDC 발급자 URL
  • OIDC 클라이언트 암호(선택 사항, IdP 설정 방법에 따라 다름)

W&B 서버 UI를 사용하거나 환경 변수wandb/local 포드로 전달하여 SSO를 구성할 수 있습니다. 환경 변수가 UI보다 우선합니다.

시스템 콘솔은 시스템 설정 페이지의 후속 버전입니다. W&B Kubernetes Operator 기반 배포에서 사용할 수 있습니다.

  1. W&B 관리 콘솔 엑세스를 참조하세요.

  2. 설정으로 이동한 다음 인증으로 이동합니다. 유형 드롭다운에서 OIDC를 선택합니다.

  3. 값을 입력합니다.

  4. 저장을 클릭합니다.

  5. 로그아웃한 다음 다시 로그인합니다. 이번에는 IdP 로그인 화면을 사용합니다.

  1. Weights & Biases 인스턴스에 로그인합니다.

  2. W&B 앱으로 이동합니다.

  3. 드롭다운에서 시스템 설정을 선택합니다.

  4. 발급자, 클라이언트 ID 및 인증 방법을 입력합니다.

  5. 설정 업데이트를 선택합니다.

SAML(Security Assertion Markup Language)

W&B 서버는 SAML을 지원하지 않습니다.

5.2.1.3 - Use federated identities with SDK

W&B SDK를 통해 조직의 자격 증명을 사용하여 로그인하려면 아이덴티티 연동을 사용하세요. W&B 조직 관리자가 조직에 대해 SSO를 구성한 경우, 이미 조직의 자격 증명을 사용하여 W&B 앱 UI에 로그인하고 있을 것입니다. 이러한 의미에서 아이덴티티 연동은 W&B SDK에 대한 SSO와 유사하지만 JSON Web Tokens (JWTs)를 직접 사용한다는 차이점이 있습니다. API 키 대신 아이덴티티 연동을 사용할 수 있습니다.

RFC 7523은 SDK와의 아이덴티티 연동의 기본 토대를 형성합니다.

JWT 발급자 설정

첫 번째 단계로 조직 관리자는 W&B 조직과 공개적으로 엑세스 가능한 JWT 발급자 간의 연동을 설정해야 합니다.

  • 조직 대시보드에서 설정 탭으로 이동합니다.
  • 인증 옵션에서 JWT 발급자 설정을 누릅니다.
  • 텍스트 상자에 JWT 발급자 URL을 추가하고 만들기를 누릅니다.

W&B는 자동으로 ${ISSUER_URL}/.well-known/oidc-configuration 경로에서 OIDC 검색 문서를 찾고 검색 문서의 관련 URL에서 JSON Web Key Set (JWKS)을 찾으려고 시도합니다. JWKS는 JWT가 관련 아이덴티티 공급자에 의해 발급되었는지 확인하기 위해 JWT의 실시간 유효성 검사에 사용됩니다.

JWT를 사용하여 W&B에 엑세스

W&B 조직에 대해 JWT 발급자가 설정되면 사용자는 해당 아이덴티티 공급자가 발급한 JWT를 사용하여 관련 W&B 프로젝트에 엑세스할 수 있습니다. JWT를 사용하는 메커니즘은 다음과 같습니다.

  • 조직에서 사용할 수 있는 메커니즘 중 하나를 사용하여 아이덴티티 공급자에 로그인해야 합니다. 일부 공급자는 API 또는 SDK를 사용하여 자동화된 방식으로 엑세스할 수 있지만 일부는 관련 UI를 사용해야만 엑세스할 수 있습니다. 자세한 내용은 W&B 조직 관리자 또는 JWT 발급자 소유자에게 문의하세요.
  • 아이덴티티 공급자에 로그인한 후 JWT를 검색했으면 안전한 위치의 파일에 저장하고 환경 변수 WANDB_IDENTITY_TOKEN_FILE에 절대 파일 경로를 구성합니다.
  • W&B SDK 또는 CLI를 사용하여 W&B 프로젝트에 엑세스합니다. SDK 또는 CLI는 JWT를 자동으로 감지하고 JWT가 성공적으로 유효성 검사된 후 W&B 엑세스 토큰으로 교환해야 합니다. W&B 엑세스 토큰은 AI 워크플로우를 활성화하기 위한 관련 API에 엑세스하는 데 사용됩니다. 즉, run, 메트릭, Artifacts 등을 로그합니다. 엑세스 토큰은 기본적으로 ~/.config/wandb/credentials.json 경로에 저장됩니다. 환경 변수 WANDB_CREDENTIALS_FILE을 지정하여 해당 경로를 변경할 수 있습니다.

JWT 유효성 검사

JWT를 W&B 엑세스 토큰으로 교환한 다음 프로젝트에 엑세스하는 워크플로우의 일부로 JWT는 다음 유효성 검사를 거칩니다.

  • JWT 서명은 W&B 조직 수준에서 JWKS를 사용하여 확인됩니다. 이것이 첫 번째 방어선이며, 실패하면 JWKS 또는 JWT 서명 방식에 문제가 있음을 의미합니다.
  • JWT의 iss 클레임은 조직 수준에서 구성된 발급자 URL과 같아야 합니다.
  • JWT의 sub 클레임은 W&B 조직에 구성된 사용자의 이메일 주소와 같아야 합니다.
  • JWT의 aud 클레임은 AI 워크플로우의 일부로 엑세스하는 프로젝트를 수용하는 W&B 조직의 이름과 같아야 합니다. 전용 클라우드 또는 자체 관리 인스턴스의 경우 인스턴스 수준 환경 변수 SKIP_AUDIENCE_VALIDATIONtrue로 구성하여 대상 클레임의 유효성 검사를 건너뛰거나 wandb를 대상으로 사용할 수 있습니다.
  • JWT의 exp 클레임은 토큰이 유효한지 또는 만료되었는지 확인하기 위해 검사되며 갱신해야 합니다.

외부 서비스 계정

W&B는 오랫동안 오래 지속되는 API 키가 있는 기본 제공 서비스 계정을 지원해 왔습니다. SDK 및 CLI에 대한 아이덴티티 연동 기능을 사용하면 조직 수준에서 구성된 동일한 발급자가 발급한 경우 JWT를 인증에 사용할 수 있는 외부 서비스 계정을 가져올 수도 있습니다. 팀 관리자는 기본 제공 서비스 계정과 마찬가지로 팀 범위 내에서 외부 서비스 계정을 구성할 수 있습니다.

외부 서비스 계정을 구성하려면:

  • 팀의 서비스 계정 탭으로 이동합니다.
  • 새 서비스 계정을 누릅니다.
  • 서비스 계정 이름을 제공하고 인증 방법으로 Federated Identity를 선택하고 Subject를 제공하고 만들기를 누릅니다.

외부 서비스 계정의 sub 클레임은 팀 관리자가 팀 수준 서비스 계정 탭에서 해당 제목으로 구성한 것과 동일해야 합니다. 해당 클레임은 JWT 유효성 검사의 일부로 확인됩니다. aud 클레임 요구 사항은 인간 사용자 JWT의 요구 사항과 유사합니다.

외부 서비스 계정의 JWT를 사용하여 W&B에 엑세스할 때 초기 JWT를 생성하고 지속적으로 갱신하는 워크플로우를 자동화하는 것이 일반적으로 더 쉽습니다. 외부 서비스 계정을 사용하여 기록된 run을 인간 사용자에게 귀속시키려면 기본 제공 서비스 계정에 대해 수행되는 방식과 유사하게 AI 워크플로우에 대해 환경 변수 WANDB_USERNAME 또는 WANDB_USER_EMAIL을 구성할 수 있습니다.

5.2.1.4 - Use service accounts to automate workflows

org 및 팀 범위의 서비스 계정을 사용하여 자동화된 워크플로우 또는 비대화형 워크플로우를 관리하세요.

서비스 계정은 팀 내 또는 팀 간의 프로젝트에서 일반적인 작업을 자동으로 수행할 수 있는 비인간 또는 머신 사용자를 나타냅니다.

  • 조직 관리자는 조직 범위에서 서비스 계정을 만들 수 있습니다.
  • 팀 관리자는 해당 팀 범위에서 서비스 계정을 만들 수 있습니다.

서비스 계정의 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 키를 비밀 관리자 또는 안전하지만 엑세스 가능한 다른 위치에 저장합니다.

팀 범위 서비스 계정

팀 범위의 서비스 계정은 해당 팀의 제한된 프로젝트를 제외하고 팀 내의 모든 프로젝트에서 읽고 쓸 수 있습니다. 팀 범위의 서비스 계정이 제한된 프로젝트에 엑세스하려면 해당 프로젝트의 관리자가 서비스 계정을 프로젝트에 명시적으로 추가해야 합니다.

팀 관리자는 팀의 <WANDB_HOST_URL>/<your-team-name>/service-accounts에서 팀 범위의 서비스 계정에 대한 API 키를 얻을 수 있습니다. 또는 팀의 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 웹 토큰(JWT)을 발급할 수 있는 ID 공급자(IdP)와 함께 Identity federation를 사용하여 W&B SDK 및 CLI를 통해 팀 범위의 External service accounts를 지원합니다.

5.2.2 - Access management

조직 내에서 사용자 및 팀 관리하기

고유한 조직 도메인으로 W&B에 처음 가입하는 사용자는 해당 조직의 인스턴스 관리자 역할로 지정됩니다. 조직 관리자는 특정 사용자에게 팀 관리자 역할을 할당합니다.

팀 관리자는 팀 내에서 관리 권한을 가진 조직의 사용자입니다.

조직 관리자는 https://wandb.ai/account-settings/에서 조직의 계정 설정을 엑세스하고 사용하여 사용자를 초대하고, 사용자의 역할을 할당하거나 업데이트하고, 팀을 만들고, 조직에서 사용자를 제거하고, 청구 관리자를 할당하는 등의 작업을 수행할 수 있습니다. 자세한 내용은 사용자 추가 및 관리를 참조하세요.

조직 관리자가 팀을 생성하면 인스턴스 관리자 또는 팀 관리자는 다음을 수행할 수 있습니다.

  • 기본적으로 관리자만 해당 팀에 사용자를 초대하거나 팀에서 사용자를 제거할 수 있습니다. 이 행동 을 변경하려면 팀 설정을 참조하세요.
  • 팀 멤버의 역할을 할당하거나 업데이트합니다.
  • 새 사용자가 조직에 가입할 때 자동으로 팀에 추가합니다.

조직 관리자와 팀 관리자는 모두 https://wandb.ai/<your-team-name>에서 팀 대시보드 를 사용하여 팀을 관리합니다. 자세한 내용과 팀의 기본 개인 정보 보호 설정을 구성하려면 팀 추가 및 관리를 참조하세요.

특정 Projects 에 대한 가시성 제한

W&B project 의 범위를 정의하여 누가 W&B runs 를 보고, 편집하고, 제출할 수 있는지 제한합니다. 팀이 민감하거나 기밀 데이터를 다루는 경우 project 를 볼 수 있는 사람을 제한하는 것이 특히 유용합니다.

조직 관리자, 팀 관리자 또는 project 소유자는 project 의 가시성을 설정하고 편집할 수 있습니다.

자세한 내용은 Project visibility를 참조하세요.

5.2.2.1 - Manage your organization

Organizations의 관리자는 Organization 내에서 개별 사용자를 관리하고 Teams를 관리할 수 있습니다.

Team 관리자는 Teams를 관리할 수 있습니다.

Organization에서 사용자 관리를 간소화하려면 사용자 및 Team 관리 자동화를 참조하십시오.

Organization 이름 변경

  1. https://wandb.ai/home 으로 이동합니다.
  2. 페이지 오른쪽 상단에서 User menu 드롭다운을 선택합니다. 드롭다운의 Account 섹션에서 Settings를 선택합니다.
  3. Settings 탭에서 General을 선택합니다.
  4. Change name 버튼을 선택합니다.
  5. 나타나는 모달에서 Organization의 새 이름을 입력하고 Save name 버튼을 선택합니다.

사용자 추가 및 관리

관리자는 Organization의 대시보드를 사용하여 다음을 수행할 수 있습니다.

  • 사용자 초대 또는 제거
  • 사용자의 Organization 역할 할당 또는 업데이트, 사용자 지정 역할 생성
  • 결제 관리자 할당

Organization 관리자가 사용자를 Organization에 추가할 수 있는 방법은 여러 가지가 있습니다.

  1. Member-by-invite
  2. SSO를 사용한 자동 프로비저닝
  3. 도메인 캡처

Seats 및 가격

다음 표는 Models 및 Weave의 Seats 작동 방식을 요약한 것입니다.

제품 Seats 비용 기준
Models 설정당 지불 보유한 Models 유료 Seats 수와 발생한 사용량에 따라 전체 구독 비용이 결정됩니다. 각 사용자는 Full, Viewer, No-Access의 세 가지 사용 가능한 Seat 유형 중 하나를 할당받을 수 있습니다.
Weave 무료 사용량 기준

사용자 초대

관리자는 사용자를 Organization 내의 특정 Teams뿐만 아니라 Organization에 초대할 수 있습니다.

  1. https://wandb.ai/home 으로 이동합니다.
  2. 페이지 오른쪽 상단에서 User menu 드롭다운을 선택합니다. 드롭다운의 Account 섹션에서 Users를 선택합니다.
  3. Invite new user를 선택합니다.
  4. 나타나는 모달에서 Email or username 필드에 사용자의 이메일 또는 사용자 이름을 입력합니다.
  5. (권장) Choose teams 드롭다운 메뉴에서 사용자를 Team에 추가합니다.
  6. Select role 드롭다운에서 사용자에게 할당할 역할을 선택합니다. 사용자의 역할은 나중에 변경할 수 있습니다. 가능한 역할에 대한 자세한 내용은 역할 할당에 나열된 표를 참조하십시오.
  7. Send invite 버튼을 선택합니다.

Send invite 버튼을 선택하면 W&B에서 타사 이메일 서버를 사용하여 사용자 이메일로 초대 링크를 보냅니다. 사용자는 초대를 수락하면 Organization에 액세스할 수 있습니다.

  1. https://<org-name>.io/console/settings/로 이동합니다. <org-name>을 Organization 이름으로 바꿉니다.
  2. Add user 버튼을 선택합니다.
  3. 나타나는 모달에서 Email 필드에 새 사용자의 이메일을 입력합니다.
  4. Role 드롭다운에서 사용자에게 할당할 역할을 선택합니다. 사용자의 역할은 나중에 변경할 수 있습니다. 가능한 역할에 대한 자세한 내용은 역할 할당에 나열된 표를 참조하십시오.
  5. W&B에서 타사 이메일 서버를 사용하여 사용자 이메일로 초대 링크를 보내려면 Send invite email to user 상자를 선택합니다.
  6. Add new user 버튼을 선택합니다.

사용자 자동 프로비저닝

SSO를 구성하고 SSO 제공업체에서 허용하는 경우 일치하는 이메일 도메인을 가진 W&B 사용자는 Single Sign-On (SSO)으로 W&B Organization에 로그인할 수 있습니다. SSO는 모든 Enterprise 라이선스에서 사용할 수 있습니다.

W&B는 자동 프로비저닝 사용자에게 기본적으로 “Member” 역할을 할당합니다. 자동 프로비저닝 사용자의 역할은 언제든지 변경할 수 있습니다.

SSO를 통한 자동 프로비저닝 사용자는 Dedicated Cloud 인스턴스 및 Self-managed 배포에서 기본적으로 켜져 있습니다. 자동 프로비저닝을 끌 수 있습니다. 자동 프로비저닝을 끄면 특정 사용자를 W&B Organization에 선택적으로 추가할 수 있습니다.

다음 탭에서는 배포 유형에 따라 SSO를 끄는 방법을 설명합니다.

Dedicated Cloud 인스턴스를 사용 중이고 SSO를 통한 자동 프로비저닝을 끄려면 W&B Team에 문의하십시오.

W&B Console을 사용하여 SSO를 통한 자동 프로비저닝을 끕니다.

  1. https://<org-name>.io/console/settings/로 이동합니다. <org-name>을 Organization 이름으로 바꿉니다.
  2. Security를 선택합니다.
  3. Disable SSO Provisioning을 선택하여 SSO를 통한 자동 프로비저닝을 끕니다.

사용자 지정 역할 만들기

Organization 관리자는 View-Only 또는 Member 역할을 기반으로 새 역할을 구성하고 세분화된 엑세스 제어를 위해 추가 권한을 추가할 수 있습니다. Team 관리자는 Team member에게 사용자 지정 역할을 할당할 수 있습니다. 사용자 지정 역할은 Organization 수준에서 생성되지만 Team 수준에서 할당됩니다.

사용자 지정 역할을 만들려면:

  1. https://wandb.ai/home 으로 이동합니다.
  2. 페이지 오른쪽 상단에서 User menu 드롭다운을 선택합니다. 드롭다운의 Account 섹션에서 Settings를 선택합니다.
  3. Roles를 클릭합니다.
  4. Custom roles 섹션에서 Create a role을 클릭합니다.
  5. 역할 이름을 입력합니다. 선택적으로 설명을 입력합니다.
  6. 사용자 지정 역할의 기반으로 사용할 역할을 선택합니다 (Viewer 또는 Member).
  7. 권한을 추가하려면 Search permissions 필드를 클릭한 다음 추가할 권한을 하나 이상 선택합니다.
  8. 역할에 있는 권한을 요약하는 Custom role permissions 섹션을 검토합니다.
  9. Create Role을 클릭합니다.

W&B Console을 사용하여 SSO를 통한 자동 프로비저닝을 끕니다.

  1. https://<org-name>.io/console/settings/로 이동합니다. <org-name>을 Organization 이름으로 바꿉니다.
  2. Custom roles 섹션에서 Create a role을 클릭합니다.
  3. 역할 이름을 입력합니다. 선택적으로 설명을 입력합니다.
  4. 사용자 지정 역할의 기반으로 사용할 역할을 선택합니다 (Viewer 또는 Member).
  5. 권한을 추가하려면 Search permissions 필드를 클릭한 다음 추가할 권한을 하나 이상 선택합니다.
  6. 역할에 있는 권한을 요약하는 Custom role permissions 섹션을 검토합니다.
  7. Create Role을 클릭합니다.

이제 Team 관리자는 Team 설정에서 Team의 구성원에게 사용자 지정 역할을 할당할 수 있습니다.

도메인 캡처

도메인 캡처는 직원이 회사 Organization에 가입하여 새 사용자가 회사 관할 구역 외부에서 에셋을 생성하지 않도록 하는 데 도움이 됩니다.

도메인 캡처를 사용하면 @example.com과 같은 회사 이메일 주소를 가진 사람들을 W&B SaaS Cloud Organization에 자동으로 추가할 수 있습니다. 이는 모든 직원이 올바른 Organization에 가입하고 새 사용자가 회사 관할 구역 외부에서 에셋을 생성하지 않도록 하는 데 도움이 됩니다.

다음 표는 도메인 캡처 활성화 여부에 따른 신규 및 기존 사용자의 행동을 요약한 것입니다.

도메인 캡처 사용 도메인 캡처 사용 안 함
신규 사용자 확인된 도메인에서 W&B에 가입하는 사용자는 Organization의 기본 Team에 자동으로 구성원으로 추가됩니다. Team 가입을 활성화하면 가입 시 추가 Team을 선택할 수 있습니다. 초대장을 통해 다른 Organization 및 Team에 가입할 수도 있습니다. 사용자는 사용 가능한 중앙 집중식 Organization이 있는지 모르고 W&B 계정을 만들 수 있습니다.
초대된 사용자 초대된 사용자는 초대를 수락하면 자동으로 Organization에 가입합니다. 초대된 사용자는 Organization의 기본 Team에 자동으로 구성원으로 추가되지 않습니다. 초대장을 통해 다른 Organization 및 Team에 가입할 수도 있습니다. 초대된 사용자는 초대를 수락하면 자동으로 Organization에 가입합니다. 초대장을 통해 다른 Organization 및 Team에 가입할 수도 있습니다.
기존 사용자 도메인의 확인된 이메일 주소를 가진 기존 사용자는 W&B 앱 내에서 Organization의 Teams에 가입할 수 있습니다. 기존 사용자가 Organization에 가입하기 전에 생성한 모든 데이터는 유지됩니다. W&B는 기존 사용자의 데이터를 마이그레이션하지 않습니다. 기존 W&B 사용자는 여러 Organization 및 Teams에 분산될 수 있습니다.

초대받지 않은 신규 사용자가 Organization에 가입할 때 기본 Team에 자동으로 할당하려면:

  1. https://wandb.ai/home 으로 이동합니다.
  2. 페이지 오른쪽 상단에서 User menu 드롭다운을 선택합니다. 드롭다운에서 Settings를 선택합니다.
  3. Settings 탭에서 General을 선택합니다.
  4. Domain capture 내에서 Claim domain 버튼을 선택합니다.
  5. Default team 드롭다운에서 새 사용자를 자동으로 가입시킬 Team을 선택합니다. 사용 가능한 Team이 없으면 Team 설정을 업데이트해야 합니다. Teams 추가 및 관리의 지침을 참조하십시오.
  6. Claim email domain 버튼을 클릭합니다.

초대받지 않은 신규 사용자를 Team에 자동으로 할당하려면 먼저 Team 설정 내에서 도메인 일치를 활성화해야 합니다.

  1. https://wandb.ai/<team-name>에서 Team의 대시보드로 이동합니다. 여기서 <team-name>은 도메인 일치를 활성화할 Team의 이름입니다.
  2. Team 대시보드의 왼쪽 탐색 모음에서 Team settings를 선택합니다.
  3. Privacy 섹션 내에서 “가입 시 일치하는 이메일 도메인을 가진 새 사용자가 이 Team에 가입하도록 추천” 옵션을 토글합니다.

도메인 캡처를 구성하려면 Dedicated 또는 Self-managed 배포 유형을 사용하는 경우 W&B Account Team에 문의하십시오. 구성되면 W&B SaaS 인스턴스는 회사 이메일 주소로 W&B 계정을 만드는 사용자에게 관리자에게 연락하여 Dedicated 또는 Self-managed 인스턴스에 대한 엑세스를 요청하라는 메시지를 자동으로 표시합니다.

도메인 캡처 사용 도메인 캡처 사용 안 함
신규 사용자 확인된 도메인에서 SaaS Cloud에서 W&B에 가입하는 사용자는 사용자 지정하는 이메일 주소로 관리자에게 연락하라는 메시지가 자동으로 표시됩니다. SaaS Cloud에서 Organizations을 만들어 제품을 트라이얼할 수도 있습니다. 사용자는 회사에 중앙 집중식 Dedicated 인스턴스가 있다는 것을 모른 채 W&B SaaS Cloud 계정을 만들 수 있습니다.
기존 사용자 기존 W&B 사용자는 여러 Organization 및 Teams에 분산될 수 있습니다. 기존 W&B 사용자는 여러 Organization 및 Teams에 분산될 수 있습니다.

사용자의 역할 할당 또는 업데이트

Organization의 모든 구성원은 W&B Models 및 Weave 모두에 대한 Organization 역할과 Seat를 갖습니다. 그들이 가지고 있는 Seat 유형은 그들의 결제 상태와 각 제품 라인에서 그들이 할 수 있는 작업을 결정합니다.

사용자를 Organization에 초대할 때 처음으로 Organization 역할을 할당합니다. 나중에 사용자의 역할을 변경할 수 있습니다.

Organization 내의 사용자는 다음 역할 중 하나를 가질 수 있습니다.

역할 설명
admin 다른 사용자를 Organization에 추가하거나 제거하고, 사용자 역할을 변경하고, 사용자 지정 역할을 관리하고, Teams를 추가할 수 있는 인스턴스 관리자입니다. W&B는 관리자가 부재중인 경우를 대비하여 둘 이상의 관리자가 있는지 확인하는 것이 좋습니다.
Member 인스턴스 관리자가 초대한 Organization의 일반 사용자입니다. Organization member는 다른 사용자를 초대하거나 Organization의 기존 사용자를 관리할 수 없습니다.
Viewer (Enterprise 전용 기능) 인스턴스 관리자가 초대한 Organization의 보기 전용 사용자입니다. Viewer는 Organization과 그들이 구성원인 기본 Teams에 대한 읽기 엑세스 권한만 있습니다.
사용자 지정 역할 (Enterprise 전용 기능) 사용자 지정 역할을 통해 Organization 관리자는 이전 View-Only 또는 Member 역할에서 상속하고 세분화된 엑세스 제어를 위해 추가 권한을 추가하여 새 역할을 구성할 수 있습니다. 그런 다음 Team 관리자는 해당 사용자 지정 역할을 각 Teams의 사용자에게 할당할 수 있습니다.

사용자의 역할을 변경하려면:

  1. https://wandb.ai/home 으로 이동합니다.
  2. 페이지 오른쪽 상단에서 User menu 드롭다운을 선택합니다. 드롭다운에서 Users를 선택합니다.
  3. 검색 창에 사용자의 이름 또는 이메일을 입력합니다.
  4. 사용자 이름 옆에 있는 TEAM ROLE 드롭다운에서 역할을 선택합니다.

사용자 엑세스 할당 또는 업데이트

Organization 내의 사용자는 다음 Models Seat 또는 Weave 엑세스 유형 중 하나를 갖습니다. full, viewer 또는 no access.

Seat 유형 설명
Full 이 역할 유형을 가진 사용자는 Models 또는 Weave에 대한 데이터를 쓰고, 읽고, 내보낼 수 있는 모든 권한을 갖습니다.
Viewer Organization의 보기 전용 사용자입니다. Viewer는 Organization과 그들이 속한 기본 Teams에 대한 읽기 엑세스 권한만 있고 Models 또는 Weave에 대한 보기 전용 엑세스 권한만 있습니다.
No access 이 역할을 가진 사용자는 Models 또는 Weave 제품에 대한 엑세스 권한이 없습니다.

Model Seat 유형 및 Weave 엑세스 유형은 Organization 수준에서 정의되며 Team에서 상속됩니다. 사용자의 Seat 유형을 변경하려면 Organization 설정으로 이동하여 다음 단계를 따르십시오.

  1. SaaS 사용자의 경우 https://wandb.ai/account-settings/<organization>/settings에서 Organization 설정으로 이동합니다. 꺾쇠 괄호 (<>)로 묶인 값을 Organization 이름으로 바꿔야 합니다. 다른 Dedicated 및 Self-managed 배포의 경우 https://<your-instance>.wandb.io/org/dashboard로 이동합니다.
  2. Users 탭을 선택합니다.
  3. Role 드롭다운에서 사용자에게 할당할 Seat 유형을 선택합니다.

사용자 제거

  1. https://wandb.ai/home 으로 이동합니다.
  2. 페이지 오른쪽 상단에서 User menu 드롭다운을 선택합니다. 드롭다운에서 Users를 선택합니다.
  3. 검색 창에 사용자의 이름 또는 이메일을 입력합니다.
  4. 나타날 때 줄임표 또는 세 개의 점 아이콘 ()을 선택합니다.
  5. 드롭다운에서 Remove member를 선택합니다.

결제 관리자 할당

  1. https://wandb.ai/home 으로 이동합니다.
  2. 페이지 오른쪽 상단에서 User menu 드롭다운을 선택합니다. 드롭다운에서 Users를 선택합니다.
  3. 검색 창에 사용자의 이름 또는 이메일을 입력합니다.
  4. Billing admin 열에서 결제 관리자로 할당할 사용자를 선택합니다.

Teams 추가 및 관리

Organization 대시보드를 사용하여 Organization 내에서 Teams를 만들고 관리합니다. Organization 관리자 또는 Team 관리자는 다음을 수행할 수 있습니다.

  • 사용자를 Team에 초대하거나 Team에서 사용자를 제거합니다.
  • Team member의 역할을 관리합니다.
  • 사용자가 Organization에 가입할 때 Team에 사용자를 자동으로 추가합니다.
  • https://wandb.ai/<team-name>에서 Team의 대시보드를 사용하여 Team 스토리지를 관리합니다.

Team 만들기

Organization 대시보드를 사용하여 Team을 만듭니다.

  1. https://wandb.ai/home 으로 이동합니다.
  2. 왼쪽 네비게이션 패널의 Teams 아래에서 Create a team to collaborate를 선택합니다.
  3. 나타나는 모달에서 Team name 필드에 Team 이름을 입력합니다.
  4. 스토리지 유형을 선택합니다.
  5. Create team 버튼을 선택합니다.

Create team 버튼을 선택하면 W&B에서 https://wandb.ai/<team-name>의 새 Team 페이지로 리디렉션합니다. 여기서 <team-name>은 Team을 만들 때 제공하는 이름으로 구성됩니다.

Team이 있으면 해당 Team에 사용자를 추가할 수 있습니다.

Team에 사용자 초대

Organization에서 Team에 사용자를 초대합니다. Team의 대시보드를 사용하여 이메일 주소 또는 W&B 사용자 이름(이미 W&B 계정이 있는 경우)을 사용하여 사용자를 초대합니다.

  1. https://wandb.ai/<team-name>로 이동합니다.
  2. 대시보드의 왼쪽 글로벌 네비게이션에서 Team settings를 선택합니다.
  3. Users 탭을 선택합니다.
  4. Invite a new user를 선택합니다.
  5. 나타나는 모달에서 Email or username 필드에 사용자의 이메일을 입력하고 Select a team 역할 드롭다운에서 해당 사용자에게 할당할 역할을 선택합니다. 사용자가 Team에서 가질 수 있는 역할에 대한 자세한 내용은 Team 역할을 참조하십시오.
  6. Send invite 버튼을 클릭합니다.

기본적으로 Team 또는 인스턴스 관리자만 Team에 구성원을 초대할 수 있습니다. 이 동작을 변경하려면 Team 설정을 참조하십시오.

이메일 초대를 통해 수동으로 사용자를 초대하는 것 외에도 새 사용자의 이메일이 Organization의 도메인과 일치하는 경우 새 사용자를 Team에 자동으로 추가할 수 있습니다.

가입 시 Team Organization에 구성원 일치

새 사용자가 가입할 때 Organization 내에서 Teams를 검색할 수 있도록 허용합니다. 새 사용자는 Organization의 확인된 이메일 도메인과 일치하는 확인된 이메일 도메인이 있어야 합니다. 확인된 새 사용자는 W&B 계정에 가입할 때 Organization에 속한 확인된 Teams 목록을 볼 수 있습니다.

Organization 관리자는 도메인 클레임을 활성화해야 합니다. 도메인 캡처를 활성화하려면 도메인 캡처에 설명된 단계를 참조하십시오.

Team member의 역할 할당 또는 업데이트

  1. Team member 이름 옆에 있는 계정 유형 아이콘을 선택합니다.
  2. 드롭다운에서 해당 Team member가 가질 계정 유형을 선택합니다.

다음 표는 Team 구성원에게 할당할 수 있는 역할을 나열합니다.

역할 정의
admin Team에서 다른 사용자를 추가 및 제거하고, 사용자 역할을 변경하고, Team 설정을 구성할 수 있는 사용자입니다.
Member Team 관리자가 이메일 또는 Organization 수준 사용자 이름으로 초대한 Team의 일반 사용자입니다. member 사용자는 다른 사용자를 Team에 초대할 수 없습니다.
View-Only (Enterprise 전용 기능) Team 관리자가 이메일 또는 Organization 수준 사용자 이름으로 초대한 Team의 보기 전용 사용자입니다. 보기 전용 사용자는 Team과 그 내용에 대한 읽기 엑세스 권한만 있습니다.
Service (Enterprise 전용 기능) 서비스 작업자 또는 서비스 계정은 run 자동화 툴로 W&B를 활용하는 데 유용한 API 키입니다. Team의 서비스 계정에서 API 키를 사용하는 경우 환경 변수 WANDB_USERNAME을 설정하여 run을 적절한 사용자에게 올바르게 할당해야 합니다.
사용자 지정 역할 (Enterprise 전용 기능) 사용자 지정 역할을 통해 Organization 관리자는 이전 View-Only 또는 Member 역할에서 상속하고 세분화된 엑세스 제어를 위해 추가 권한을 추가하여 새 역할을 구성할 수 있습니다. 그런 다음 Team 관리자는 해당 사용자 지정 역할을 각 Teams의 사용자에게 할당할 수 있습니다. 자세한 내용은 이 문서를 참조하십시오.

Team에서 사용자 제거

Team의 대시보드를 사용하여 Team에서 사용자를 제거합니다. W&B는 run을 생성한 구성원이 더 이상 해당 Team에 없더라도 Team에서 생성된 run을 보존합니다.

  1. https://wandb.ai/<team-name>로 이동합니다.
  2. 왼쪽 네비게이션 바에서 Team settings를 선택합니다.
  3. Users 탭을 선택합니다.
  4. 삭제할 사용자 이름 옆에 마우스를 가져갑니다. 나타날 때 줄임표 또는 세 개의 점 아이콘 ()을 선택합니다.
  5. 드롭다운에서 Remove user를 선택합니다.

5.2.2.2 - Manage access control for projects

가시성 범위와 프로젝트 수준 역할을 사용하여 프로젝트 엑세스 를 관리합니다.

W&B 프로젝트의 범위를 정의하여 누가 해당 프로젝트를 보고, 편집하고, W&B run을 제출할 수 있는지 제한합니다.

W&B 팀 내의 모든 프로젝트에 대한 엑세스 수준을 구성하기 위해 몇 가지 제어 기능을 함께 사용할 수 있습니다. 가시성 범위는 더 높은 수준의 메커니즘입니다. 이를 사용하여 어떤 사용자 그룹이 프로젝트에서 run을 보거나 제출할 수 있는지 제어합니다. Team 또는 Restricted 가시성 범위를 가진 프로젝트의 경우 프로젝트 수준 역할을 사용하여 각 사용자가 프로젝트 내에서 갖는 엑세스 수준을 제어할 수 있습니다.

가시성 범위

선택할 수 있는 프로젝트 가시성 범위는 네 가지가 있습니다. 가장 공개적인 것부터 가장 사적인 것 순으로 나열하면 다음과 같습니다.

범위 설명
Open 프로젝트에 대해 알고 있는 사람은 누구나 보고 run 또는 리포트를 제출할 수 있습니다.
Public 프로젝트에 대해 알고 있는 사람은 누구나 볼 수 있습니다. 팀만 run 또는 리포트를 제출할 수 있습니다.
Team 상위 팀의 팀 멤버만 프로젝트를 보고 run 또는 리포트를 제출할 수 있습니다. 팀 외부의 사람은 프로젝트에 엑세스할 수 없습니다.
Restricted 상위 팀에서 초대받은 팀 멤버만 프로젝트를 보고 run 또는 리포트를 제출할 수 있습니다.

새 프로젝트 또는 기존 프로젝트에서 가시성 범위 설정

프로젝트를 생성할 때 또는 나중에 편집할 때 프로젝트의 가시성 범위를 설정합니다.

새 프로젝트를 생성할 때 가시성 범위 설정

  1. SaaS Cloud, 전용 클라우드 또는 자체 관리 인스턴스에서 W&B 조직으로 이동합니다.
  2. 왼쪽 사이드바의 내 프로젝트 섹션에서 새 프로젝트 만들기 버튼을 클릭합니다. 또는 팀의 Projects 탭으로 이동하여 오른쪽 상단 모서리에 있는 새 프로젝트 만들기 버튼을 클릭합니다.
  3. 상위 팀을 선택하고 프로젝트 이름을 입력한 후 프로젝트 가시성 드롭다운에서 원하는 범위를 선택합니다.

Restricted 가시성을 선택한 경우 다음 단계를 완료하십시오.

  1. 팀 멤버 초대 필드에 하나 이상의 W&B 팀 멤버 이름을 입력합니다. 프로젝트에서 협업하는 데 필수적인 팀 멤버만 추가하십시오.

기존 프로젝트의 가시성 범위 편집

  1. W&B 프로젝트로 이동합니다.
  2. 왼쪽 열에서 Overview 탭을 선택합니다.
  3. 오른쪽 상단 모서리에 있는 프로젝트 세부 정보 편집 버튼을 클릭합니다.
  4. 프로젝트 가시성 드롭다운에서 원하는 범위를 선택합니다.

Restricted 가시성을 선택한 경우 다음 단계를 완료하십시오.

  1. 프로젝트의 Users 탭으로 이동하여 사용자 추가 버튼을 클릭하여 특정 사용자를 제한된 프로젝트에 초대합니다.

제한된 범위에 대한 기타 주요 참고 사항

  • 제한된 프로젝트에서 팀 수준 서비스 계정을 사용하려면 해당 계정을 프로젝트에 특별히 초대하거나 추가해야 합니다. 그렇지 않으면 팀 수준 서비스 계정은 기본적으로 제한된 프로젝트에 엑세스할 수 없습니다.
  • 제한된 프로젝트에서 run을 이동할 수는 없지만 제한되지 않은 프로젝트에서 제한된 프로젝트로 run을 이동할 수 있습니다.
  • 팀 개인 정보 설정 **향후 모든 팀 프로젝트를 비공개로 설정(공개 공유 불가)**에 관계없이 제한된 프로젝트의 가시성을 Team 범위로만 변환할 수 있습니다.
  • 제한된 프로젝트의 소유자가 더 이상 상위 팀에 속하지 않으면 팀 관리자는 프로젝트에서 원활한 운영을 보장하기 위해 소유자를 변경해야 합니다.

프로젝트 수준 역할

팀의 Team 또는 Restricted 범위 프로젝트의 경우 사용자에게 특정 역할을 할당할 수 있으며, 이는 해당 사용자의 팀 수준 역할과 다를 수 있습니다. 예를 들어 사용자가 팀 수준에서 Member 역할을 하는 경우 해당 팀의 Team 또는 Restricted 범위 프로젝트 내에서 해당 사용자에게 View-Only 또는 Admin 또는 사용 가능한 사용자 지정 역할을 할당할 수 있습니다.

사용자에게 프로젝트 수준 역할 할당

  1. W&B 프로젝트로 이동합니다.
  2. 왼쪽 열에서 Overview 탭을 선택합니다.
  3. 프로젝트의 Users 탭으로 이동합니다.
  4. 프로젝트 역할 필드에서 해당 사용자에 대해 현재 할당된 역할을 클릭하면 다른 사용 가능한 역할 목록이 있는 드롭다운이 열립니다.
  5. 드롭다운에서 다른 역할을 선택합니다. 즉시 저장됩니다.

프로젝트 수준 역할에 대한 기타 주요 참고 사항

  • 기본적으로 team 또는 restricted 범위 프로젝트의 모든 사용자에 대한 프로젝트 수준 역할은 해당 팀 수준 역할을 상속합니다.
  • 팀 수준에서 View-only 역할을 가진 사용자의 프로젝트 수준 역할은 변경할 수 없습니다.
  • 특정 프로젝트 내에서 사용자의 프로젝트 수준 역할이 팀 수준 역할과 동일하고 팀 관리자가 팀 수준 역할을 변경하면 관련 프로젝트 역할이 자동으로 변경되어 팀 수준 역할을 추적합니다.
  • 특정 프로젝트 내에서 사용자의 프로젝트 수준 역할을 팀 수준 역할과 다르게 변경하고 팀 관리자가 팀 수준 역할을 변경하면 관련 프로젝트 수준 역할은 그대로 유지됩니다.
  • 프로젝트 수준 역할이 팀 수준 역할과 다른 경우 restricted 프로젝트에서 사용자를 제거하고 일정 시간이 지난 후 사용자를 프로젝트에 다시 추가하면 기본 동작으로 인해 팀 수준 역할을 상속합니다. 필요한 경우 프로젝트 수준 역할을 다시 변경하여 팀 수준 역할과 다르게 만들어야 합니다.

5.2.3 - Automate user and team management

SCIM API

SCIM API를 사용하여 사용자 및 사용자가 속한 Teams를 효율적이고 반복 가능한 방식으로 관리합니다. SCIM API를 사용하여 사용자 정의 역할을 관리하거나 W&B organization의 사용자에게 역할을 할당할 수도 있습니다. 역할 엔드포인트는 공식 SCIM 스키마의 일부가 아닙니다. W&B는 사용자 정의 역할의 자동 관리를 지원하기 위해 역할 엔드포인트를 추가합니다.

SCIM API는 다음과 같은 경우에 특히 유용합니다.

  • 사용자 프로비저닝 및 프로비저닝 해제를 대규모로 관리하려는 경우
  • SCIM을 지원하는 ID 공급자로 사용자를 관리하려는 경우

SCIM API는 크게 User, Group, Roles의 세 가지 범주로 나뉩니다.

User SCIM API

User SCIM API를 사용하면 W&B organization에서 사용자를 생성, 비활성화, 사용자 세부 정보를 가져오거나 모든 사용자 목록을 가져올 수 있습니다. 이 API는 organization의 사용자에게 미리 정의된 역할 또는 사용자 정의 역할을 할당하는 기능도 지원합니다.

Group SCIM API

Group SCIM API를 사용하면 organization에서 Teams를 생성하거나 제거하는 것을 포함하여 W&B Teams를 관리할 수 있습니다. PATCH Group을 사용하여 기존 Team에서 사용자를 추가하거나 제거합니다.

Custom role API

Custom role SCIM API를 사용하면 organization에서 사용자 정의 역할을 생성, 나열 또는 업데이트하는 것을 포함하여 사용자 정의 역할을 관리할 수 있습니다.

W&B Python SDK API

SCIM API를 통해 사용자 및 Team 관리를 자동화할 수 있는 것처럼 W&B Python SDK API에서 사용할 수 있는 일부 메소드를 사용하여 이 목적을 달성할 수도 있습니다. 다음 메소드를 기록해 두십시오.

Method name Purpose
create_user(email, admin=False) organization에 사용자를 추가하고 선택적으로 organization 관리자로 만듭니다.
user(userNameOrEmail) organization에서 기존 사용자를 반환합니다.
user.teams() 사용자의 Teams를 반환합니다. user(userNameOrEmail) 메소드를 사용하여 사용자 오브젝트를 가져올 수 있습니다.
create_team(teamName, adminUserName) 새 Team을 만들고 선택적으로 organization 수준의 사용자를 Team 관리자로 만듭니다.
team(teamName) organization에서 기존 Team을 반환합니다.
Team.invite(userNameOrEmail, admin=False) Team에 사용자를 추가합니다. team(teamName) 메소드를 사용하여 Team 오브젝트를 가져올 수 있습니다.
Team.create_service_account(description) Team에 서비스 계정을 추가합니다. team(teamName) 메소드를 사용하여 Team 오브젝트를 가져올 수 있습니다.
Member.delete() Team에서 멤버 사용자를 제거합니다. team 오브젝트의 members 속성을 사용하여 Team에서 멤버 오브젝트 목록을 가져올 수 있습니다. 그리고 team(teamName) 메소드를 사용하여 Team 오브젝트를 가져올 수 있습니다.

5.2.4 - Manage users, groups, and roles with SCIM

SCIM(System for Cross-domain Identity Management) API를 통해 인스턴스 또는 organization 관리자는 W&B organization에서 사용자, 그룹 및 사용자 지정 역할을 관리할 수 있습니다. 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로 인코딩된 문자열로 설정합니다. 즉, 사용자 이름과 API 키를 : 문자로 구분된 값으로 바꾸고 결과를 base-64로 인코딩합니다. 예를 들어 demo:p@55w0rd로 인증하려면 헤더는 Authorization: Basic ZGVtbzpwQDU1dzByZA==여야 합니다.

사용자 리소스

SCIM 사용자 리소스는 W&B Users에 매핑됩니다.

사용자 가져오기

  • 엔드포인트: <host-url>/scim/Users/{id}
  • 메서드: GET
  • 설명: 사용자 고유 ID를 제공하여 SaaS Cloud organization 또는 Dedicated Cloud 또는 Self-managed 인스턴스에서 특정 사용자에 대한 정보를 검색합니다.
  • 요청 예시:
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"
}

사용자 목록

  • 엔드포인트: <host-url>/scim/Users
  • 메서드: GET
  • 설명: SaaS Cloud organization 또는 Dedicated Cloud 또는 Self-managed 인스턴스에서 모든 사용자 목록을 검색합니다.
  • 요청 예시:
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
}

사용자 생성

  • 엔드포인트: <host-url>/scim/Users
  • 메서드: POST
  • 설명: 새 사용자 리소스를 만듭니다.
  • 지원되는 필드:
필드 유형 필수
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"
}

사용자 삭제

  • 엔드포인트: <host-url>/scim/Users/{id}
  • 메서드: DELETE
  • 설명: 사용자 고유 ID를 제공하여 SaaS Cloud organization 또는 Dedicated Cloud 또는 Self-managed 인스턴스에서 사용자를 완전히 삭제합니다. 필요한 경우 사용자 생성 API를 사용하여 사용자를 organization 또는 인스턴스에 다시 추가합니다.
  • 요청 예시:
DELETE /scim/Users/abc
  • 응답 예시:
(Status 204)

사용자 비활성화

  • 엔드포인트: <host-url>/scim/Users/{id}
  • 메서드: PATCH
  • 설명: 사용자 고유 ID를 제공하여 Dedicated Cloud 또는 Self-managed 인스턴스에서 사용자를 일시적으로 비활성화합니다. 필요한 경우 사용자 다시 활성화 API를 사용하여 사용자를 다시 활성화합니다.
  • 지원되는 필드:
필드 유형 필수
op 문자열 작업 유형. 허용되는 유일한 값은 replace입니다.
value 오브젝트 사용자를 비활성화해야 함을 나타내는 오브젝트 {"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"
}

사용자 다시 활성화

  • 엔드포인트: <host-url>/scim/Users/{id}
  • 메서드: PATCH
  • 설명: 사용자 고유 ID를 제공하여 Dedicated Cloud 또는 Self-managed 인스턴스에서 비활성화된 사용자를 다시 활성화합니다.
  • 지원되는 필드:
필드 유형 필수
op 문자열 작업 유형. 허용되는 유일한 값은 replace입니다.
value 오브젝트 사용자를 다시 활성화해야 함을 나타내는 오브젝트 {"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"
}

사용자에게 organization 수준 역할 할당

  • 엔드포인트: <host-url>/scim/Users/{id}
  • 메서드: PATCH
  • 설명: 사용자에게 organization 수준 역할을 할당합니다. 역할은 여기에 설명된 대로 admin, viewer 또는 member 중 하나일 수 있습니다. SaaS Cloud의 경우 사용자 설정에서 SCIM API에 대한 올바른 organization을 구성했는지 확인합니다.
  • 지원되는 필드:
필드 유형 필수
op 문자열 작업 유형. 허용되는 유일한 값은 replace입니다.
path 문자열 역할 할당 작업이 적용되는 범위입니다. 허용되는 유일한 값은 organizationRole입니다.
value 문자열 사용자에게 할당할 미리 정의된 organization 수준 역할입니다. admin, viewer 또는 member 중 하나일 수 있습니다. 이 필드는 미리 정의된 역할에 대해 대소문자를 구분하지 않습니다.
  • 요청 예시:
PATCH /scim/Users/abc
{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [
        {
            "op": "replace",
            "path": "organizationRole",
            "value": "admin" // 사용자의 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": [  // 사용자가 속한 모든 Teams에서 사용자의 역할을 반환합니다.
        {
            "teamName": "team1",
            "roleName": "admin"
        }
    ],
    "organizationRole": "admin" // organization 범위에서 사용자의 역할을 반환합니다.
}

사용자에게 팀 수준 역할 할당

  • 엔드포인트: <host-url>/scim/Users/{id}
  • 메서드: PATCH
  • 설명: 사용자에게 팀 수준 역할을 할당합니다. 역할은 여기에 설명된 대로 admin, viewer, member 또는 사용자 지정 역할 중 하나일 수 있습니다. SaaS Cloud의 경우 사용자 설정에서 SCIM API에 대한 올바른 organization을 구성했는지 확인합니다.
  • 지원되는 필드:
필드 유형 필수
op 문자열 작업 유형. 허용되는 유일한 값은 replace입니다.
path 문자열 역할 할당 작업이 적용되는 범위입니다. 허용되는 유일한 값은 teamRoles입니다.
value 오브젝트 배열 오브젝트가 teamNameroleName 속성으로 구성된 단일 오브젝트 배열입니다. teamName은 사용자가 역할을 보유하는 팀의 이름이고, roleNameadmin, viewer, member 또는 사용자 지정 역할 중 하나일 수 있습니다. 이 필드는 미리 정의된 역할에 대해 대소문자를 구분하지 않고 사용자 지정 역할에 대해 대소문자를 구분합니다.
  • 요청 예시:
PATCH /scim/Users/abc
{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [
        {
            "op": "replace",
            "path": "teamRoles",
            "value": [
                {
                    "roleName": "admin", // 역할 이름은 미리 정의된 역할에 대해 대소문자를 구분하지 않고 사용자 지정 역할에 대해 대소문자를 구분합니다.
                    "teamName": "team1" // 팀 team1에서 사용자의 역할을 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": [  // 사용자가 속한 모든 Teams에서 사용자의 역할을 반환합니다.
        {
            "teamName": "team1",
            "roleName": "admin"
        }
    ],
    "organizationRole": "admin" // organization 범위에서 사용자의 역할을 반환합니다.
}

그룹 리소스

SCIM 그룹 리소스는 W&B Teams에 매핑됩니다. 즉, W&B 배포에서 SCIM 그룹을 만들면 W&B Team이 생성됩니다. 다른 그룹 엔드포인트에도 동일하게 적용됩니다.

팀 가져오기

  • 엔드포인트: <host-url>/scim/Groups/{id}
  • 메서드: GET
  • 설명: 팀의 고유 ID를 제공하여 팀 정보를 검색합니다.
  • 요청 예시:
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"
    ]
}

팀 목록

  • 엔드포인트: <host-url>/scim/Groups
  • 메서드: GET
  • 설명: 팀 목록을 검색합니다.
  • 요청 예시:
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
}

팀 생성

  • 엔드포인트: <host-url>/scim/Groups
  • 메서드: POST
  • 설명: 새 팀 리소스를 만듭니다.
  • 지원되는 필드:
필드 유형 필수
displayName 문자열
members 다중 값 배열 예( value 하위 필드는 필수이며 사용자 ID에 매핑됨)
  • 요청 예시:

dev-user2를 멤버로 하여 wandb-support라는 팀을 만듭니다.

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"
    ]
}

팀 업데이트

  • 엔드포인트: <host-url>/scim/Groups/{id}
  • 메서드: PATCH
  • 설명: 기존 팀의 멤버십 목록을 업데이트합니다.
  • 지원되는 작업: 멤버 add, 멤버 remove
  • 요청 예시:

wandb-devsdev-user2를 추가합니다.

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"
    ]
}

팀 삭제

  • 팀 삭제는 현재 SCIM API에서 지원되지 않습니다. 팀에 연결된 추가 데이터가 있기 때문입니다. 모든 항목을 삭제할지 확인하려면 앱에서 팀을 삭제하세요.

역할 리소스

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 형식의 값이 있는 name 문자열 필드가 포함된 권한 오브젝트 배열입니다. 예를 들어 W&B Runs에 대한 삭제 작업에 대한 권한 오브젝트의 namerun: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에서 사용자 지정 역할을 삭제합니다. 주의해서 사용하세요. 사용자 지정 역할이 상속된 미리 정의된 역할은 이제 작업 전에 사용자 지정 역할이 할당된 모든 사용자에게 할당됩니다.
  • 요청 예시:
DELETE /scim/Roles/abc
  • 응답 예시:
(Status 204)

사용자 지정 역할 권한 업데이트

  • 엔드포인트: <host-url>/scim/Roles/{id}
  • 메서드: PATCH
  • 설명: W&B organization에서 사용자 지정 역할에 사용자 지정 권한을 추가하거나 제거합니다.
  • 지원되는 필드:
필드 유형 필수
operations 오브젝트 배열 작업 오브젝트 배열
op 문자열 작업 오브젝트 내의 작업 유형입니다. add 또는 remove일 수 있습니다.
path 문자열 작업 오브젝트의 정적 필드입니다. 허용되는 유일한 값은 permissions입니다.
value 오브젝트 배열 각 오브젝트에 w&bobject:operation 형식의 값이 있는 name 문자열 필드가 포함된 권한 오브젝트 배열입니다. 예를 들어 W&B Runs에 대한 삭제 작업에 대한 권한 오브젝트의 namerun:delete입니다.
  • 요청 예시:
PATCH /scim/Roles/abc
{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [
        {
            "op": "add", // 작업 유형을 나타냅니다. 다른 가능한 값은 `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": [
        ""
    ]
}

5.2.5 - Advanced IAM configuration

기본적인 환경 변수 외에도, 환경 변수를 사용하여 전용 클라우드 또는 자체 관리 인스턴스에 대한 IAM 옵션을 구성할 수 있습니다.

IAM 요구 사항에 따라 인스턴스에 대해 다음 환경 변수 중 하나를 선택하십시오.

환경 변수 설명
DISABLE_SSO_PROVISIONING W&B 인스턴스에서 사용자 자동 프로비저닝을 끄려면 이 값을 true로 설정하십시오.
SESSION_LENGTH 기본 사용자 세션 만료 시간을 변경하려면 이 변수를 원하는 시간 수로 설정하십시오. 예를 들어 세션 만료 시간을 24시간으로 구성하려면 SESSION_LENGTH를 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 공급자에게 요청해야 하는 추가 scopes를 지정할 수 있습니다. W&B는 이러한 사용자 정의 scopes로 인해 SSO 기능을 변경하지 않습니다.
GORILLA_USE_IDENTIFIER_CLAIMS OIDC 기반 SSO를 사용하는 경우 이 변수를 true로 설정하여 ID 공급자의 특정 OIDC 클레임을 사용하여 사용자의 사용자 이름과 전체 이름을 적용하십시오. 설정된 경우 preferred_usernamename OIDC 클레임에서 적용된 사용자 이름과 전체 이름을 구성해야 합니다. 사용자 이름은 영숫자 문자와 특수 문자(밑줄 및 하이픈)만 포함할 수 있습니다.
GORILLA_DISABLE_PERSONAL_ENTITY W&B 인스턴스에서 개인 user projects를 끄려면 이 값을 true로 설정하십시오. 설정된 경우 users는 개인 Entities에서 새 개인 projects를 만들 수 없으며 기존 개인 projects에 대한 쓰기가 꺼집니다.
GORILLA_DISABLE_ADMIN_TEAM_ACCESS Organization 또는 Instance Admins가 W&B team에 자체 가입하거나 추가하는 것을 제한하려면 이 값을 true로 설정하여 Data & AI 담당자만 team 내의 projects에 액세스할 수 있도록 합니다.

5.3 - Data security

5.3.1 - Bring your own bucket (BYOB)

Bring your own bucket(BYOB)을 사용하면 W&B 아티팩트 및 기타 관련 민감한 데이터를 자체 클라우드 또는 온프레미스 인프라에 저장할 수 있습니다. 전용 클라우드 또는 SaaS Cloud의 경우 버킷에 저장하는 데이터는 W&B 관리 인프라에 복사되지 않습니다.

중앙 데이터베이스와 버킷에 저장되는 데이터

BYOB 기능을 사용할 때 특정 유형의 데이터는 W&B 중앙 데이터베이스에 저장되고 다른 유형은 버킷에 저장됩니다.

데이터베이스

  • 사용자, 팀, 아티팩트, Experiments 및 프로젝트에 대한 메타데이터
  • Reports
  • Experiment 로그
  • 시스템 메트릭

버킷

  • Experiment 파일 및 메트릭
  • Artifact 파일
  • 미디어 파일
  • Run 파일

설정 옵션

스토리지 버킷을 구성할 수 있는 범위는 인스턴스 수준 또는 팀 수준의 두 가지입니다.

  • 인스턴스 수준: 조직 내에서 관련 권한을 가진 모든 사용자가 인스턴스 수준 스토리지 버킷에 저장된 파일에 엑세스할 수 있습니다.
  • 팀 수준: W&B Teams의 팀 멤버는 팀 수준에서 구성된 버킷에 저장된 파일에 엑세스할 수 있습니다. 팀 수준 스토리지 버킷은 매우 민감한 데이터 또는 엄격한 규정 준수 요구 사항이 있는 팀을 위해 더 강력한 데이터 엑세스 제어 및 데이터 격리를 제공합니다.

인스턴스 수준에서 버킷을 구성하고 조직 내의 하나 이상의 팀에 대해 별도로 구성할 수 있습니다.

예를 들어 조직에 Kappa라는 팀이 있다고 가정합니다. 조직(및 Team Kappa)은 기본적으로 인스턴스 수준 스토리지 버킷을 사용합니다. 다음으로 Omega라는 팀을 만듭니다. Team Omega를 만들 때 해당 팀에 대한 팀 수준 스토리지 버킷을 구성합니다. Team Omega에서 생성된 파일은 Team Kappa에서 엑세스할 수 없습니다. 그러나 Team Kappa에서 만든 파일은 Team Omega에서 엑세스할 수 있습니다. Team Kappa에 대한 데이터를 격리하려면 해당 팀에 대한 팀 수준 스토리지 버킷도 구성해야 합니다.

가용성 매트릭스

다음 표는 다양한 W&B 서버 배포 유형에서 BYOB의 가용성을 보여줍니다. X는 특정 배포 유형에서 기능을 사용할 수 있음을 의미합니다.

W&B 서버 배포 유형 인스턴스 수준 팀 수준 추가 정보
전용 클라우드 X X 인스턴스 및 팀 수준 BYOB는 Amazon Web Services, Google Cloud Platform 및 Microsoft Azure에서 사용할 수 있습니다. 팀 수준 BYOB의 경우 동일하거나 다른 클라우드의 클라우드 네이티브 스토리지 버킷 또는 클라우드 또는 온프레미스 인프라에서 호스팅되는 MinIO와 같은 S3 호환 보안 스토리지에 연결할 수 있습니다.
SaaS Cloud 해당 사항 없음 X 팀 수준 BYOB는 Amazon Web Services 및 Google Cloud Platform에서만 사용할 수 있습니다. W&B는 Microsoft Azure에 대한 기본 및 유일한 스토리지 버킷을 완전히 관리합니다.
자체 관리 X X 인스턴스가 사용자에 의해 완전히 관리되므로 인스턴스 수준 BYOB가 기본값입니다. 자체 관리 인스턴스가 클라우드에 있는 경우 팀 수준 BYOB에 대해 동일하거나 다른 클라우드의 클라우드 네이티브 스토리지 버킷에 연결할 수 있습니다. 인스턴스 또는 팀 수준 BYOB에 MinIO와 같은 S3 호환 보안 스토리지를 사용할 수도 있습니다.

팀 수준 BYOB를 위한 크로스 클라우드 또는 S3 호환 스토리지

전용 클라우드 또는 자체 관리 인스턴스에서 팀 수준 BYOB에 대해 다른 클라우드의 클라우드 네이티브 스토리지 버킷 또는 MinIO와 같은 S3 호환 스토리지 버킷에 연결할 수 있습니다.

크로스 클라우드 또는 S3 호환 스토리지 사용을 활성화하려면 W&B 인스턴스에 대한 GORILLA_SUPPORTED_FILE_STORES 환경 변수를 사용하여 다음 형식 중 하나로 관련 엑세스 키를 포함하는 스토리지 버킷을 지정합니다.

전용 클라우드 또는 자체 관리 인스턴스에서 팀 수준 BYOB에 대한 S3 호환 스토리지 구성

다음 형식을 사용하여 경로를 지정합니다.

s3://<accessKey>:<secretAccessKey>@<url_endpoint>/<bucketName>?region=<region>?tls=true

W&B 인스턴스가 AWS에 있고 W&B 인스턴스 노드에 구성된 AWS_REGION이 S3 호환 스토리지에 구성된 지역과 일치하는 경우를 제외하고 region 파라미터는 필수입니다.

전용 클라우드 또는 자체 관리 인스턴스에서 팀 수준 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>

자세한 내용은 support@wandb.com으로 W&B 지원팀에 문의하십시오.

W&B 플랫폼과 동일한 클라우드의 클라우드 스토리지

유스 케이스에 따라 팀 또는 인스턴스 수준에서 스토리지 버킷을 구성합니다. 스토리지 버킷을 프로비저닝하거나 구성하는 방법은 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. 클라우드 인프라 또는 사용자 브라우저의 AI 워크로드가 버킷에 엑세스하는 데 사용하는 사전 서명된 URL을 생성하는 데 필요한 권한인 W&B 플랫폼을 호스팅하는 AWS 계정에 필요한 S3 권한을 부여합니다.

      {
        "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 팀과 공유합니다. 모든 배포 유형에서 팀 수준 BYOB의 경우 팀을 만드는 동안 버킷을 구성합니다.

      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 팀과 공유합니다. 모든 배포 유형에서 팀 수준 BYOB의 경우 팀을 만드는 동안 버킷을 구성합니다.

  1. Azure Blob Storage 프로비저닝

    인스턴스 수준 BYOB의 경우 이 Terraform 모듈을 사용하지 않는 경우 아래 단계에 따라 Azure 구독에서 Azure Blob Storage 버킷을 프로비저닝합니다.

    • 원하는 이름으로 버킷을 만듭니다. 선택적으로 모든 W&B 파일을 저장하기 위해 하위 경로로 구성할 수 있는 폴더를 만듭니다.

    • Blob 및 컨테이너 소프트 삭제를 활성화합니다.

    • 버전 관리를 활성화합니다.

    • 버킷에서 CORS 정책을 구성합니다.

      UI를 통해 CORS 정책을 설정하려면 Blob Storage로 이동하여 설정/리소스 공유(CORS)로 스크롤한 다음 다음을 설정합니다.

      파라미터
      허용된 원본 *
      허용된 메소드 GET, HEAD, PUT
      허용된 헤더 *
      노출된 헤더 *
      최대 사용 기간 3600
  2. 스토리지 계정 엑세스 키를 생성하고 스토리지 계정 이름과 함께 기록해 둡니다. 전용 클라우드를 사용하는 경우 보안 공유 메커니즘을 사용하여 스토리지 계정 이름과 엑세스 키를 W&B 팀과 공유합니다.

    팀 수준 BYOB의 경우 W&B는 필요한 엑세스 메커니즘 및 권한과 함께 Azure Blob Storage 버킷을 프로비저닝하기 위해 Terraform을 사용하는 것이 좋습니다. 전용 클라우드를 사용하는 경우 인스턴스에 대한 OIDC 발급자 URL을 제공합니다. 팀을 만드는 동안 버킷을 구성하는 데 필요한 세부 정보를 기록해 둡니다.

    • 스토리지 계정 이름
    • 스토리지 컨테이너 이름
    • 관리 ID 클라이언트 ID
    • Azure 테넌트 ID

W&B에서 BYOB 구성

W&B Team을 만들 때 팀 수준에서 스토리지 버킷을 구성하려면:

  1. 팀 이름 필드에 팀 이름을 입력합니다.

  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에서 선택 사항) 팀을 만들 때 팀 멤버를 초대할 수도 있습니다.

  10. 팀 만들기 버튼을 누릅니다.

버킷에 엑세스하는 데 문제가 있거나 버킷에 잘못된 설정이 있는 경우 페이지 하단에 오류 또는 경고가 나타납니다.

전용 클라우드 또는 자체 관리 인스턴스에 대한 인스턴스 수준 BYOB를 구성하려면 support@wandb.com으로 W&B 지원팀에 문의하십시오.

5.3.2 - Access BYOB using pre-signed URLs

W&B는 AI 워크로드 또는 사용자 브라우저에서 blob storage에 대한 엑세스를 간소화하기 위해 사전 서명된 URL을 사용합니다. 사전 서명된 URL에 대한 기본 정보는 AWS S3용 사전 서명된 URL, Google Cloud Storage용 서명된 URLAzure Blob Storage용 공유 엑세스 서명을 참조하십시오.

필요한 경우 네트워크 내의 AI 워크로드 또는 사용자 브라우저 클라이언트가 W&B Platform에서 사전 서명된 URL을 요청합니다. 그러면 W&B Platform은 관련 blob storage에 엑세스하여 필요한 권한으로 사전 서명된 URL을 생성하고 클라이언트에 다시 반환합니다. 그런 다음 클라이언트는 사전 서명된 URL을 사용하여 오브젝트 업로드 또는 검색 작업을 위해 blob storage에 엑세스합니다. 오브젝트 다운로드를 위한 URL 만료 시간은 1시간이고, 일부 대형 오브젝트는 청크 단위로 업로드하는 데 더 많은 시간이 필요할 수 있으므로 오브젝트 업로드는 24시간입니다.

팀 레벨 엑세스 제어

각 사전 서명된 URL은 W&B platform의 팀 레벨 엑세스 제어를 기반으로 특정 버킷으로 제한됩니다. 사용자가 보안 스토리지 커넥터를 사용하여 blob storage 버킷에 매핑된 팀에 속하고 해당 사용자만 해당 팀에 속한 경우, 해당 요청에 대해 생성된 사전 서명된 URL은 다른 팀에 매핑된 blob storage 버킷에 엑세스할 수 있는 권한이 없습니다.

네트워크 제한

W&B는 버킷에 대한 IAM 정책 기반 제한을 사용하여 사전 서명된 URL을 사용하여 blob storage에 엑세스할 수 있는 네트워크를 제한하는 것이 좋습니다.

AWS의 경우 VPC 또는 IP 어드레스 기반 네트워크 제한을 사용할 수 있습니다. 이렇게 하면 W&B 특정 버킷이 AI 워크로드가 실행 중인 네트워크 또는 사용자가 W&B UI를 사용하여 Artifacts에 엑세스하는 경우 사용자 머신에 매핑되는 게이트웨이 IP 어드레스에서만 엑세스할 수 있습니다.

감사 로그

W&B는 blob storage 특정 감사 로그 외에도 W&B 감사 로그를 사용하는 것이 좋습니다. 후자의 경우 AWS S3 엑세스 로그, Google Cloud Storage 감사 로그Azure blob storage 모니터링을 참조하십시오. 관리 및 보안 팀은 감사 로그를 사용하여 W&B 제품에서 어떤 사용자가 무엇을 하고 있는지 추적하고 특정 사용자에 대한 일부 작업을 제한해야 한다고 판단되면 필요한 조치를 취할 수 있습니다.

5.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 허용 목록을 사용하는 것이 좋습니다.

5.3.4 - Configure private connectivity to Dedicated Cloud

클라우드 공급자의 보안 사설 네트워크를 통해 전용 클라우드 인스턴스에 연결할 수 있습니다. 이는 AI 워크로드에서 W&B API로의 엑세스와 선택적으로 사용자 브라우저에서 W&B 앱 UI로의 엑세스에도 적용됩니다. 사설 연결을 사용하는 경우 관련 요청 및 응답은 공용 네트워크 또는 인터넷을 통해 전송되지 않습니다.

보안 사설 연결은 AWS, GCP 및 Azure의 전용 클라우드 인스턴스에서 사용할 수 있습니다.

활성화되면 W&B는 인스턴스에 대한 사설 엔드포인트 서비스를 생성하고 연결할 관련 DNS URI를 제공합니다. 이를 통해 클라우드 계정에서 사설 엔드포인트를 생성하여 관련 트래픽을 사설 엔드포인트 서비스로 라우팅할 수 있습니다. 사설 엔드포인트는 클라우드 VPC 또는 VNet 내에서 실행되는 AI 트레이닝 워크로드에 대해 더 쉽게 설정할 수 있습니다. 사용자 브라우저에서 W&B 앱 UI로의 트래픽에 대해 동일한 메커니즘을 사용하려면 회사 네트워크에서 클라우드 계정의 사설 엔드포인트로 적절한 DNS 기반 라우팅을 구성해야 합니다.

IP 허용 목록과 함께 보안 사설 연결을 사용할 수 있습니다. IP 허용 목록에 보안 사설 연결을 사용하는 경우 W&B는 AI 워크로드의 모든 트래픽과 가능한 경우 사용자 브라우저의 대부분 트래픽에 대해 보안 사설 연결을 사용하고 권한 있는 위치에서 인스턴스 관리에 IP 허용 목록을 사용하는 것이 좋습니다.

5.3.5 - Data encryption in Dedicated cloud

W&B는 각 전용 클라우드에서 클라우드 공급자의 고객 관리 암호화 키 (CMEK) 기능을 사용하여 W&B 관리 데이터베이스 및 오브젝트 스토리지를 암호화하기 위해 W&B 관리 클라우드 네이티브 키를 사용합니다. 이 경우 W&B는 클라우드 공급자의 customer 역할을 하며, W&B 플랫폼을 서비스로 제공합니다. W&B 관리 키를 사용한다는 것은 W&B가 각 클라우드에서 데이터를 암호화하는 데 사용하는 키를 제어하여 모든 고객에게 매우 안전하고 보안이 뛰어난 플랫폼을 제공하겠다는 약속을 강화한다는 의미입니다.

W&B는 각 고객 인스턴스의 데이터를 암호화하기 위해 unique key를 사용하여 전용 클라우드 테넌트 간에 또 다른 격리 계층을 제공합니다. 이 기능은 AWS, Azure 및 GCP에서 사용할 수 있습니다.

W&B는 일반적으로 고객이 전용 클라우드 인스턴스에서 W&B 관리 데이터베이스 및 오브젝트 스토리지를 암호화하기 위해 자체 클라우드 네이티브 키를 가져오는 것을 허용하지 않습니다. 조직의 여러 Teams 및 사용자가 다양한 이유로 클라우드 인프라에 엑세스할 수 있기 때문입니다. 이러한 Teams 또는 사용자는 조직의 기술 스택에서 중요한 구성 요소인 W&B에 대한 컨텍스트가 없을 수 있으므로 클라우드 네이티브 키를 완전히 제거하거나 W&B의 엑세스를 취소할 수 있습니다. 이러한 조치는 조직의 W&B 인스턴스에 있는 모든 데이터를 손상시켜 복구 불가능한 상태로 만들 수 있습니다.

AI 워크플로우에 전용 클라우드 사용을 승인하기 위해 조직에서 자체 클라우드 네이티브 키를 사용하여 W&B 관리 데이터베이스 및 오브젝트 스토리지를 암호화해야 하는 경우 W&B는 예외적으로 이를 검토할 수 있습니다. 승인되면 암호화에 대한 클라우드 네이티브 키 사용은 W&B 전용 클라우드의 shared responsibility model을 준수합니다. 전용 클라우드 인스턴스가 활성 상태일 때 조직의 사용자가 키를 제거하거나 W&B의 엑세스를 취소하는 경우 W&B는 그로 인한 데이터 손실 또는 손상에 대해 책임을 지지 않으며 해당 데이터 복구에 대한 책임도 지지 않습니다.

5.4 - Configure privacy settings

조직 및 팀 관리자는 조직 및 팀 범위에서 각각 개인 정보 보호 설정을 구성할 수 있습니다. 조직 범위에서 구성된 경우 조직 관리자는 해당 조직의 모든 팀에 대해 해당 설정을 적용합니다.

팀 개인 정보 보호 설정 구성

팀 관리자는 팀 Settings 탭의 Privacy 섹션에서 각 팀에 대한 개인 정보 보호 설정을 구성할 수 있습니다. 각 설정은 조직 범위에서 적용되지 않는 한 구성할 수 있습니다.

  • 이 팀을 모든 비 멤버에게 숨기기
  • 향후 모든 팀 Projects를 비공개로 설정 (공개 공유 불허)
  • 모든 팀 멤버가 다른 멤버를 초대하도록 허용 (관리자만 가능하지 않음)
  • 비공개 Projects의 Reports에 대한 팀 외부 공개 공유를 해제합니다. 이렇게 하면 기존의 매직 링크가 해제됩니다.
  • 조직 이메일 도메인이 일치하는 사용자가 이 팀에 참여하도록 허용합니다.
  • 코드 저장을 기본적으로 활성화합니다.

모든 팀에 대해 개인 정보 보호 설정 적용

조직 관리자는 계정 또는 조직 대시보드의 Settings 탭의 Privacy 섹션에서 조직 내 모든 팀에 대해 개인 정보 보호 설정을 적용할 수 있습니다. 조직 관리자가 설정을 적용하면 팀 관리자는 해당 팀 내에서 해당 설정을 구성할 수 없습니다.

  • 팀 공개 여부 제한 적용
    • 이 옵션을 활성화하면 모든 팀을 비 멤버에게 숨깁니다.
  • 향후 Projects에 대한 개인 정보 보호 적용
    • 이 옵션을 활성화하면 모든 팀의 향후 모든 Projects가 비공개 또는 restricted되도록 적용합니다.
  • 초대 제어 적용
    • 이 옵션을 활성화하면 관리자가 아닌 사용자가 팀에 멤버를 초대하지 못하도록 합니다.
  • Report 공유 제어 적용
    • 이 옵션을 활성화하면 비공개 Projects의 Reports에 대한 공개 공유를 해제하고 기존 매직 링크를 비활성화합니다.
  • 팀 자체 참여 제한 적용
    • 이 옵션을 활성화하면 조직 이메일 도메인이 일치하는 사용자가 팀에 자체 참여하지 못하도록 제한합니다.
    • 이 설정은 SaaS Cloud에만 적용됩니다. Dedicated Cloud 또는 Self-managed 인스턴스에서는 사용할 수 없습니다.
  • 기본 코드 저장 제한 적용
    • 이 옵션을 활성화하면 모든 팀에 대해 기본적으로 코드 저장을 해제합니다.

5.5 - Monitoring and usage

5.5.1 - Track user activity with audit logs

W&B 감사 로그를 사용하여 조직 내 사용자 활동을 추적하고 엔터프라이즈 거버넌스 요구 사항을 준수하십시오. 감사 로그는 JSON 형식으로 제공됩니다. 감사 로그 스키마를 참조하십시오.

감사 로그에 액세스하는 방법은 W&B 플랫폼 배포 유형에 따라 다릅니다.

W&B Platform 배포 유형 감사 로그 엑세스 메커니즘
자체 관리 10분마다 인스턴스 수준 버킷에 동기화됩니다. API를 사용하여 사용할 수도 있습니다.
전용 클라우드 (보안 스토리지 커넥터 (BYOB)) 10분마다 인스턴스 수준 버킷 (BYOB)에 동기화됩니다. API를 사용하여 사용할 수도 있습니다.
W&B 관리 스토리지 (BYOB 없음)가 있는 전용 클라우드 API를 통해서만 사용할 수 있습니다.
SaaS Cloud Enterprise 요금제에서만 사용할 수 있습니다. API를 통해서만 사용할 수 있습니다.

감사 로그를 가져온 후에는 Pandas, Amazon Redshift, Google BigQuery 또는 Microsoft Fabric과 같은 툴을 사용하여 분석할 수 있습니다. 일부 감사 로그 분석 툴은 JSON을 지원하지 않습니다. 분석 전에 JSON 형식의 감사 로그를 변환하기 위한 지침 및 요구 사항은 분석 툴 설명서를 참조하십시오.

감사 로그 스키마

이 표는 감사 로그 항목에 나타날 수 있는 모든 키를 알파벳순으로 보여줍니다. 작업 및 상황에 따라 특정 로그 항목에는 가능한 필드의 서브셋만 포함될 수 있습니다.

정의
action 이벤트의 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 또는 팀 ID.
entity_name 해당되는 경우, entity 또는 팀 이름.
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가 아님).
user_email 해당되는 경우, 작업이 영향을 미치는 user의 이메일 어드레스 (작업을 수행하는 user의 이메일 어드레스가 아님).

개인 식별 정보 (PII)

이메일 어드레스, project 이름, 팀 및 report와 같은 개인 식별 정보 (PII)는 API 엔드포인트 옵션을 통해서만 사용할 수 있습니다.

  • 자체 관리전용 클라우드의 경우 조직 관리자는 감사 로그를 가져올 때 PII를 제외할 수 있습니다.
  • SaaS Cloud의 경우 API 엔드포인트는 항상 PII를 포함하여 감사 로그에 대한 관련 필드를 반환합니다. 이는 구성할 수 없습니다.

감사 로그 가져오기

조직 또는 인스턴스 관리자는 audit_logs/ 엔드포인트에서 감사 로깅 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. 웹 브라우저 또는 Postman, HTTPie 또는 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 제외

자체 관리전용 클라우드의 경우 W&B 조직 또는 인스턴스 관리자는 감사 로그를 가져올 때 PII를 제외할 수 있습니다. SaaS Cloud의 경우 API 엔드포인트는 항상 PII를 포함하여 감사 로그에 대한 관련 필드를 반환합니다. 이는 구성할 수 없습니다.

PII를 제외하려면 anonymize=true URL 파라미터를 전달합니다. 예를 들어 W&B 인스턴스 URL이 https://mycompany.wandb.io이고 지난 주 동안의 사용자 활동에 대한 감사 로그를 가져오고 PII를 제외하려면 다음과 같은 API 엔드포인트를 사용합니다.

https://mycompany.wandb.io/admin/audit_logs?numDays=7&anonymize=true.

Actions

이 표는 W&B에서 기록할 수 있는 가능한 actions를 알파벳순으로 설명합니다.

Action 정의
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 스윕 에이전트가 생성되었습니다.
team:create_service_account 팀에 대한 서비스 계정이 생성되었습니다.
team:create 팀이 생성되었습니다.
team:delete 팀이 삭제되었습니다.
team:invite_user User가 팀에 초대되었습니다.
team:uninvite User 또는 서비스 계정이 팀에서 초대 취소되었습니다.
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에서 감사 로그는 다음에 대해 수집되지 않습니다.

  • 공개 또는 퍼블릭 프로젝트.
  • report:read action.
  • 특정 조직에 연결되지 않은 User actions.

5.5.2 - Use Prometheus monitoring

W&B Server 와 함께 Prometheus 를 사용하세요. Prometheus 설치는 kubernetes ClusterIP service 로 노출됩니다.

Prometheus 메트릭 엔드포인트 (/metrics) 에 엑세스하려면 아래 절차를 따르세요.

  1. Kubernetes CLI 툴킷인 kubectl 를 사용하여 클러스터에 연결합니다. 자세한 내용은 Kubernetes 의 클러스터 엑세스 문서를 참조하세요.

  2. 다음 코맨드를 사용하여 클러스터의 내부 어드레스를 찾으세요:

    kubectl describe svc prometheus
    
  3. kubectl exec 를 사용하여 Kubernetes 클러스터에서 실행 중인 컨테이너 내부에서 쉘 세션을 시작합니다. <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.5.3 - Configure Slack alerts

W&B 서버를 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 Console 에 있는 경우 Settings 로 이동한 다음 Notifications 로 이동합니다.

    • System Settings 에 있는 경우 Enable a custom Slack application to dispatch alerts 를 전환하여 사용자 지정 Slack 애플리케이션을 활성화합니다.

  3. Slack client IDSlack secret 을 제공한 다음 Save 를 클릭합니다. Settings 의 Basic Information 으로 이동하여 애플리케이션의 클라이언트 ID와 secret 을 찾습니다.

  4. W&B 앱에서 Slack 인테그레이션을 설정하여 모든 것이 작동하는지 확인합니다.

5.5.4 - View organization dashboard

W&B의 조직 사용량 보기

조직 대시보드를 사용하여 조직의 W&B 사용량에 대한 전체적인 보기를 얻을 수 있습니다. 대시보드는 탭별로 구성되어 있습니다.

  • Users: 이름, 이메일, Teams, 역할 및 마지막 활동을 포함하여 각 user에 대한 세부 정보를 나열합니다.
  • Service accounts: 서비스 계정에 대한 세부 정보를 나열하고 서비스 계정을 만들 수 있습니다.
  • Activity: 각 user의 활동에 대한 세부 정보를 나열합니다.
  • Teams: user 수 및 추적 시간을 포함하여 각 team에 대한 세부 정보를 나열하고 관리자가 team에 참여할 수 있도록 합니다.
  • Billing: 조직의 요금을 요약하고, 결제 Reports를 실행 및 내보낼 수 있으며, 라이선스 만료 시기와 같은 세부 정보를 보여줍니다.
  • Settings: 개인 정보 보호 및 인증과 관련된 사용자 정의 역할 및 설정을 구성할 수 있습니다.

user 상태 보기

Users 탭에는 모든 user와 각 user에 대한 데이터가 나열되어 있습니다. Last Active 열은 user가 초대를 수락했는지 여부와 user의 현재 상태를 보여줍니다.

  • Invite pending: 관리자가 초대를 보냈지만 user가 초대를 수락하지 않았습니다.
  • Active: user가 초대를 수락하고 계정을 만들었습니다.
  • -: user가 이전에 활성 상태였지만 지난 6개월 동안 활성 상태가 아닙니다.
  • Deactivated: 관리자가 user의 엑세스를 취소했습니다.

활동별로 user 목록을 정렬하려면 Last Active 열 머리글을 클릭합니다.

조직에서 W&B를 사용하는 방법 보기 및 공유

Users 탭에서 조직에서 W&B를 사용하는 방법에 대한 세부 정보를 CSV 형식으로 볼 수 있습니다.

  1. Invite new user 버튼 옆에 있는 작업 ... 메뉴를 클릭합니다.
  2. Export as CSV를 클릭합니다. 다운로드되는 CSV 파일에는 user 이름 및 이메일 어드레스, 마지막 활동 시간, 역할 등과 같은 조직의 각 user에 대한 세부 정보가 나열됩니다.

user 활동 보기

Users 탭의 Last Active 열을 사용하여 개별 user의 Activity summary를 가져옵니다.

  1. Last Active별로 user 목록을 정렬하려면 열 이름을 클릭합니다.
  2. user의 마지막 활동에 대한 세부 정보를 보려면 user의 Last Active 필드 위에 마우스를 가져갑니다. user가 추가된 시기와 user가 총 며칠 동안 활성 상태였는지 보여주는 툴팁이 나타납니다.

다음과 같은 경우 user는 active 상태입니다.

  • W&B에 로그인합니다.
  • W&B App에서 페이지를 봅니다.
  • Runs를 로그합니다.
  • SDK를 사용하여 experiment를 추적합니다.
  • 어떤 방식으로든 W&B Server와 상호 작용합니다.

시간 경과에 따른 활성 user 보기

Activity 탭의 플롯을 사용하여 시간 경과에 따라 얼마나 많은 user가 활성 상태였는지에 대한 집계 보기를 얻을 수 있습니다.

  1. Activity 탭을 클릭합니다.
  2. Total active users 플롯은 특정 기간 동안 얼마나 많은 user가 활성 상태였는지 보여줍니다 (기본값은 3개월).
  3. Users active over time 플롯은 특정 기간 동안 활성 user의 변동을 보여줍니다 (기본값은 6개월). 해당 날짜의 user 수를 보려면 포인트 위에 마우스를 가져갑니다.

플롯의 기간을 변경하려면 드롭다운을 사용합니다. 다음을 선택할 수 있습니다.

  • Last 30 days
  • Last 3 months
  • Last 6 months
  • Last 12 months
  • All time

5.6 - Configure SMTP

W&B server에서 인스턴스 또는 팀에 사용자를 추가하면 이메일 초대가 트리거됩니다. 이러한 이메일 초대를 보내기 위해 W&B는 타사 메일 서버를 사용합니다. 경우에 따라 조직은 회사 네트워크를 떠나는 트래픽에 대해 엄격한 정책을 적용하여 이러한 이메일 초대가 최종 사용자에게 전송되지 않을 수 있습니다. W&B server는 내부 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 환경 변수를 원하는 발신자 이메일 어드레스로 업데이트하면 됩니다.

5.7 - Configure environment variables

W&B 서버 설치를 구성하는 방법

System Settings 관리자 UI를 통해 인스턴스 수준 설정을 구성하는 것 외에도, W&B는 환경 변수를 사용하여 코드를 통해 이러한 값들을 구성하는 방법을 제공합니다. 또한, IAM 고급 설정을 참조하세요.

환경 변수 참조

환경 변수 설명
LICENSE wandb/local 라이선스
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 공급자 애플리케이션의 Client ID
OIDC_AUTH_METHOD Implicit (기본값) 또는 pkce, 자세한 내용은 아래 참조
SLACK_CLIENT_ID 알림에 사용할 Slack 애플리케이션의 client ID
SLACK_SECRET 알림에 사용할 Slack 애플리케이션의 secret
LOCAL_RESTORE 인스턴스에 엑세스할 수 없는 경우 임시로 true로 설정할 수 있습니다. 임시 자격 증명에 대한 컨테이너의 로그를 확인하십시오.
REDIS W&B와 함께 외부 REDIS 인스턴스를 설정하는 데 사용할 수 있습니다.
LOGGING_ENABLED true로 설정하면 엑세스 로그가 stdout으로 스트리밍됩니다. 이 변수를 설정하지 않고도 사이드카 컨테이너를 마운트하고 /var/log/gorilla.log를 tail할 수도 있습니다.
GORILLA_ALLOW_USER_TEAM_CREATION true로 설정하면 관리자가 아닌 사용자가 새 팀을 만들 수 있습니다. 기본값은 False입니다.
GORILLA_DATA_RETENTION_PERIOD 삭제된 run의 데이터를 보관하는 기간(시간)입니다. 삭제된 run 데이터는 복구할 수 없습니다. 입력 값에 h를 추가하십시오. 예를 들어, "24h"입니다.
ENABLE_REGISTRY_UI true로 설정하면 새로운 W&B Registry UI가 활성화됩니다.

고급 안정성 설정

Redis

외부 Redis 서버 구성은 선택 사항이지만 프로덕션 시스템에는 권장됩니다. 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 secret으로 설정할 수도 있습니다.

이 페이지에서는 Redis 인스턴스가 기본 포트 6379에서 실행 중이라고 가정합니다. 다른 포트를 구성하고 인증을 설정하고 redis 인스턴스에서 TLS를 활성화하려면 연결 문자열 형식이 redis://$USER:$PASSWORD@$HOST:$PORT?tls=true와 같이 표시됩니다.

5.8 - Release process for W&B Server

W&B 서버 릴리스 프로세스

빈도 및 배포 유형

W&B Server 릴리스는 전용 클라우드자체 관리 배포에 적용됩니다. 서버 릴리스에는 세 가지 종류가 있습니다.

릴리스 유형 설명
월별 월별 릴리스에는 새로운 기능, 개선 사항, 중간 및 낮은 심각도의 버그 수정이 포함됩니다.
패치 패치 릴리스에는 중요 및 높은 심각도의 버그 수정이 포함됩니다. 패치는 필요에 따라 드물게 릴리스됩니다.
기능 기능 릴리스는 새로운 제품 기능에 대한 특정 릴리스 날짜를 대상으로 하며, 이는 표준 월별 릴리스보다 간혹 먼저 발생합니다.

모든 릴리스는 인수 테스트 단계가 완료되는 즉시 모든 전용 클라우드 인스턴스에 즉시 배포됩니다. 이렇게 하면 관리되는 인스턴스가 완전히 업데이트되어 최신 기능 및 수정 사항을 관련 고객에게 제공할 수 있습니다. 자체 관리 인스턴스를 사용하는 고객은 자체 일정에 따라 업데이트 프로세스를 수행해야 하며, 여기서 최신 Docker 이미지를 사용할 수 있습니다. 릴리스 지원 및 수명 종료를 참조하십시오.

릴리스 정보

모든 릴리스에 대한 릴리스 정보는 GitHub의 W&B Server Releases에서 확인할 수 있습니다. Slack을 사용하는 고객은 W&B Slack 채널에서 자동 릴리스 알림을 받을 수 있습니다. W&B 팀에 문의하여 이러한 업데이트를 활성화하십시오.

릴리스 업데이트 및 가동 중지 시간

일반적으로 서버 릴리스는 전용 클라우드 인스턴스 및 적절한 롤링 업데이트 프로세스를 구현한 자체 관리 배포 고객에게 인스턴스 가동 중지 시간을 요구하지 않습니다.

다음 시나리오에서는 가동 중지 시간이 발생할 수 있습니다.

  • 새로운 기능 또는 개선 사항으로 인해 컴퓨팅, 스토리지 또는 네트워크와 같은 기본 인프라를 변경해야 합니다. W&B는 관련 사전 알림을 전용 클라우드 고객에게 보내려고 노력합니다.
  • 보안 패치 또는 특정 버전에 대한 ‘수명 종료 지원’을 피하기 위한 인프라 변경. 긴급한 변경의 경우 전용 클라우드 고객은 사전 알림을 받지 못할 수 있습니다. 여기서 우선 순위는 fleet을 안전하게 유지하고 완전히 지원하는 것입니다.

두 경우 모두 업데이트는 예외 없이 모든 전용 클라우드 인스턴스에 롤아웃됩니다. 자체 관리 인스턴스를 사용하는 고객은 자체 일정에 따라 이러한 업데이트를 관리해야 합니다. 릴리스 지원 및 수명 종료를 참조하십시오.

릴리스 지원 및 수명 종료 정책

W&B는 릴리스 날짜로부터 6개월 동안 모든 서버 릴리스를 지원합니다. 전용 클라우드 인스턴스는 자동으로 업데이트됩니다. 자체 관리 인스턴스를 사용하는 고객은 지원 정책을 준수하기 위해 제때 배포를 업데이트해야 합니다. W&B의 지원을 크게 제한할 수 있으므로 6개월 이상 된 버전을 사용하지 마십시오.

6 - Integrations

W&B 인테그레이션을 사용하면 기존 프로젝트 내에서 실험 추적 및 데이터 버전 관리를 빠르고 쉽게 설정할 수 있습니다. PyTorch와 같은 ML 프레임워크, Hugging Face와 같은 ML 라이브러리 또는 Amazon SageMaker와 같은 클라우드 서비스에 대한 인테그레이션을 확인하세요.

관련 자료

  • Examples: 각 인테그레이션에 대한 노트북 및 스크립트 예제를 사용하여 코드를 사용해 보세요.
  • Video Tutorials: YouTube 동영상 튜토리얼로 W&B 사용법을 배우세요.

6.1 - Add wandb to any library

모든 라이브러리에 wandb 추가하기

이 가이드는 강력한 Experiment Tracking, GPU 및 시스템 모니터링, 모델 체크포인팅 등을 사용자 라이브러리에서 활용할 수 있도록 W&B를 Python 라이브러리에 통합하는 모범 사례를 제공합니다.

다음은 작업 중인 코드베이스가 단일 Python 트레이닝 스크립트 또는 Jupyter 노트북보다 복잡할 때 유용한 팁과 모범 사례입니다. 다루는 주제는 다음과 같습니다.

  • 설정 요구 사항
  • 사용자 로그인
  • wandb Run 시작하기
  • Run 설정 정의하기
  • W&B에 로깅하기
  • 분산 트레이닝
  • 모델 체크포인팅 등
  • 하이퍼파라미터 튜닝
  • 고급 인테그레이션

설정 요구 사항

시작하기 전에 라이브러리의 종속성에 W&B가 필요한지 여부를 결정하세요.

설치 시 W&B 필요

W&B Python 라이브러리(wandb)를 종속성 파일에 추가합니다(예: requirements.txt 파일):

torch==1.8.0
...
wandb==0.13.*

설치 시 W&B를 선택 사항으로 만들기

W&B SDK(wandb)를 선택 사항으로 만드는 방법에는 두 가지가 있습니다.

A. 사용자가 수동으로 설치하지 않고 wandb 기능을 사용하려고 할 때 오류를 발생시키고 적절한 오류 메시지를 표시합니다.

try:
    import wandb
except ImportError:
    raise ImportError(
        "You are trying to use wandb which is not currently installed."
        "Please install it using pip install wandb"
    )

B. Python 패키지를 빌드하는 경우 pyproject.toml 파일에 wandb를 선택적 종속성으로 추가합니다.

[project]
name = "my_awesome_lib"
version = "0.1.0"
dependencies = [
    "torch",
    "sklearn"
]

[project.optional-dependencies]
dev = [
    "wandb"
]

사용자 로그인

API 키 만들기

API 키는 클라이언트 또는 머신을 W&B에 인증합니다. 사용자 프로필에서 API 키를 생성할 수 있습니다.

  1. 오른쪽 상단 모서리에 있는 사용자 프로필 아이콘을 클릭합니다.
  2. 사용자 설정을 선택한 다음 API 키 섹션으로 스크롤합니다.
  3. 표시를 클릭합니다. 표시된 API 키를 복사합니다. API 키를 숨기려면 페이지를 새로 고침합니다.

wandb 라이브러리 설치 및 로그인

로컬에서 wandb 라이브러리를 설치하고 로그인하려면:

  1. API 키로 WANDB_API_KEY 환경 변수를 설정합니다.

    export WANDB_API_KEY=<your_api_key>
    
  2. wandb 라이브러리를 설치하고 로그인합니다.

    pip install wandb
    
    wandb login
    
pip install wandb
import wandb
wandb.login()
!pip install wandb

import wandb
wandb.login()

사용자가 위에 언급된 단계를 따르지 않고 처음으로 wandb를 사용하는 경우 스크립트에서 wandb.init을 호출할 때 자동으로 로그인하라는 메시지가 표시됩니다.

Run 시작하기

W&B Run은 W&B에서 로깅하는 계산 단위입니다. 일반적으로 트레이닝 실험당 단일 W&B Run을 연결합니다.

코드 내에서 W&B를 초기화하고 Run을 시작합니다.

run = wandb.init()

선택적으로, 코드에서 wandb_project와 같은 파라미터와 함께 프로젝트 이름을 제공하거나 사용자 이름 또는 팀 이름(예: 엔터티 파라미터에 대한 wandb_entity)과 함께 프로젝트 이름을 제공하도록 할 수 있습니다.

run = wandb.init(project=wandb_project, entity=wandb_entity)

Run을 완료하려면 run.finish()를 호출해야 합니다. 이것이 통합 디자인에 적합한 경우 Run을 컨텍스트 관리자로 사용합니다.

# 이 블록이 종료되면 run.finish()를 자동으로 호출합니다.
# 예외로 인해 종료되면 run.finish(exit_code=1)을 사용하여 Run을 실패로 표시합니다.
with wandb.init() as run:
    ...

wandb.init을 언제 호출해야 할까요?

라이브러리는 가능한 한 빨리 W&B Run을 만들어야 합니다. 오류 메시지를 포함하여 콘솔의 모든 출력이 W&B Run의 일부로 로깅되기 때문입니다. 이렇게 하면 디버깅이 더 쉬워집니다.

wandb를 선택적 종속성으로 사용하기

사용자가 라이브러리를 사용할 때 wandb를 선택 사항으로 만들려면 다음 중 하나를 수행할 수 있습니다.

  • 다음과 같은 wandb 플래그를 정의합니다.
trainer = my_trainer(..., use_wandb=True)
python train.py ... --use-wandb
  • 또는 wandb.init에서 wandbdisabled로 설정합니다.
wandb.init(mode="disabled")
export WANDB_MODE=disabled

또는

wandb disabled
  • 또는 wandb를 오프라인으로 설정합니다. 이렇게 하면 여전히 wandb가 실행되지만 인터넷을 통해 W&B에 다시 통신하려고 시도하지 않습니다.
export WANDB_MODE=offline

또는

os.environ['WANDB_MODE'] = 'offline'
wandb offline

Run 설정 정의하기

wandb Run 설정으로 W&B Run을 만들 때 모델, 데이터셋 등에 대한 메타데이터를 제공할 수 있습니다. 이 정보를 사용하여 다양한 Experiments를 비교하고 주요 차이점을 빠르게 이해할 수 있습니다.

W&B Runs table

로깅할 수 있는 일반적인 구성 파라미터는 다음과 같습니다.

  • 모델 이름, 버전, 아키텍처 파라미터 등
  • 데이터셋 이름, 버전, 트레이닝/검증 예제 수 등
  • 학습률, 배치 크기, 옵티마이저 등과 같은 트레이닝 파라미터

다음 코드 조각은 구성을 로깅하는 방법을 보여줍니다.

config = {"batch_size": 32, ...}
wandb.init(..., config=config)

Run 설정 업데이트하기

run.config.update를 사용하여 구성을 업데이트합니다. 구성 사전이 정의된 후에 파라미터를 가져올 때 구성 사전을 업데이트하는 것이 유용합니다. 예를 들어 모델이 인스턴스화된 후에 모델의 파라미터를 추가할 수 있습니다.

run.config.update({"model_parameters": 3500})

구성 파일을 정의하는 방법에 대한 자세한 내용은 실험 구성을 참조하세요.

W&B에 로깅하기

메트릭 로깅

키 값이 메트릭 이름인 사전을 만듭니다. 이 사전 오브젝트를 run.log에 전달합니다.

for epoch in range(NUM_EPOCHS):
    for input, ground_truth in data:
        prediction = model(input)
        loss = loss_fn(prediction, ground_truth)
        metrics = { "loss": loss }
        run.log(metrics)

메트릭이 많은 경우 메트릭 이름에 train/...val/...와 같은 접두사를 사용하여 UI에서 자동으로 그룹화할 수 있습니다. 이렇게 하면 트레이닝 및 검증 메트릭 또는 분리하려는 다른 메트릭 유형에 대해 W&B Workspace에 별도의 섹션이 생성됩니다.

metrics = {
    "train/loss": 0.4,
    "train/learning_rate": 0.4,
    "val/loss": 0.5,
    "val/accuracy": 0.7
}
run.log(metrics)
A W&B Workspace with 2 separate sections

run.log에 대해 자세히 알아보세요.

x축 정렬 오류 방지

동일한 트레이닝 단계에 대해 run.log를 여러 번 호출하는 경우 wandb SDK는 run.log를 호출할 때마다 내부 단계 카운터를 증가시킵니다. 이 카운터는 트레이닝 루프의 트레이닝 단계와 정렬되지 않을 수 있습니다.

이러한 상황을 피하려면 wandb.init을 호출한 직후에 run.define_metric을 사용하여 x축 단계를 명시적으로 한 번 정의하세요.

with wandb.init(...) as run:
    run.define_metric("*", step_metric="global_step")

글로브 패턴 *는 모든 메트릭이 차트에서 global_step을 x축으로 사용함을 의미합니다. 특정 메트릭만 global_step에 대해 로깅하려면 대신 지정할 수 있습니다.

run.define_metric("train/loss", step_metric="global_step")

이제 run.log를 호출할 때마다 메트릭, step 메트릭 및 global_step을 로깅합니다.

for step, (input, ground_truth) in enumerate(data):
    ...
    run.log({"global_step": step, "train/loss": 0.1})
    run.log({"global_step": step, "eval/loss": 0.2})

예를 들어 검증 루프 중에 “global_step"을 사용할 수 없는 경우 독립 단계 변수에 액세스할 수 없는 경우 “global_step"에 대해 이전에 로깅된 값이 wandb에서 자동으로 사용됩니다. 이 경우 메트릭에 필요한 경우 정의되도록 메트릭에 대한 초기 값을 로깅해야 합니다.

이미지, 테이블, 오디오 등 로깅

메트릭 외에도 플롯, 히스토그램, 테이블, 텍스트, 이미지, 비디오, 오디오, 3D 등과 같은 미디어를 로깅할 수 있습니다.

데이터 로깅 시 고려해야 할 사항은 다음과 같습니다.

  • 메트릭을 얼마나 자주 로깅해야 할까요? 선택 사항이어야 할까요?
  • 시각화하는 데 어떤 유형의 데이터가 도움이 될 수 있을까요?
    • 이미지의 경우 시간 경과에 따른 진화를 확인하기 위해 샘플 예측, 분할 마스크 등을 로깅할 수 있습니다.
    • 텍스트의 경우 나중에 탐색할 수 있도록 샘플 예측 테이블을 로깅할 수 있습니다.

미디어, 오브젝트, 플롯 등을 로깅하는 방법에 대해 자세히 알아보세요.

분산 트레이닝

분산 환경을 지원하는 프레임워크의 경우 다음 워크플로우 중 하나를 적용할 수 있습니다.

  • “메인” 프로세스를 감지하고 거기에서만 wandb를 사용합니다. 다른 프로세스에서 오는 필요한 데이터는 먼저 메인 프로세스로 라우팅되어야 합니다. (이 워크플로우가 권장됩니다).
  • 모든 프로세스에서 wandb를 호출하고 모두 동일한 고유 group 이름을 지정하여 자동으로 그룹화합니다.

자세한 내용은 분산 트레이닝 실험 로깅을 참조하세요.

모델 체크포인트 등 로깅

프레임워크에서 모델 또는 데이터셋을 사용하거나 생성하는 경우 전체 추적성을 위해 로깅하고 wandb가 W&B Artifacts를 통해 전체 파이프라인을 자동으로 모니터링하도록 할 수 있습니다.

Stored Datasets and Model Checkpoints in W&B

Artifacts를 사용할 때 사용자가 다음을 정의하도록 하는 것이 유용하지만 필수는 아닙니다.

  • 모델 체크포인트 또는 데이터셋을 로깅하는 기능(선택 사항으로 만들려는 경우).
  • 입력으로 사용되는 아티팩트의 경로/참조(있는 경우). 예를 들어 user/project/artifact입니다.
  • Artifacts 로깅 빈도.

모델 체크포인트 로깅

모델 체크포인트를 W&B에 로깅할 수 있습니다. 고유한 wandb Run ID를 활용하여 출력 모델 체크포인트 이름을 지정하여 Runs 간에 차별화하는 것이 유용합니다. 유용한 메타데이터를 추가할 수도 있습니다. 또한 아래와 같이 각 모델에 에일리어스를 추가할 수도 있습니다.

metadata = {"eval/accuracy": 0.8, "train/steps": 800}

artifact = wandb.Artifact(
                name=f"model-{run.id}",
                metadata=metadata,
                type="model"
                )
artifact.add_dir("output_model") # 모델 가중치가 저장되는 로컬 디렉토리

aliases = ["best", "epoch_10"]
run.log_artifact(artifact, aliases=aliases)

사용자 지정 에일리어스를 만드는 방법에 대한 자세한 내용은 사용자 지정 에일리어스 만들기를 참조하세요.

출력 Artifacts를 임의의 빈도(예: 모든 에포크, 500단계마다 등)로 로깅할 수 있으며 자동으로 버전이 지정됩니다.

사전 학습된 모델 또는 데이터셋 로깅 및 추적

사전 학습된 모델 또는 데이터셋과 같이 트레이닝에 입력으로 사용되는 아티팩트를 로깅할 수 있습니다. 다음 코드 조각은 Artifact를 로깅하고 위의 그래프에 표시된 대로 진행 중인 Run에 입력으로 추가하는 방법을 보여줍니다.

artifact_input_data = wandb.Artifact(name="flowers", type="dataset")
artifact_input_data.add_file("flowers.npy")
run.use_artifact(artifact_input_data)

아티팩트 다운로드

Artifact(데이터셋, 모델 등)를 다시 사용하면 wandb가 로컬에 복사본을 다운로드합니다(그리고 캐시합니다).

artifact = run.use_artifact("user/project/artifact:latest")
local_path = artifact.download("./tmp")

Artifacts는 W&B의 Artifacts 섹션에서 찾을 수 있으며 자동으로 생성된 에일리어스(latest, v2, v3) 또는 로깅할 때 수동으로 생성된 에일리어스(best_accuracy 등)로 참조할 수 있습니다.

분산 환경 또는 간단한 추론과 같이(wandb.init을 통해) wandb Run을 만들지 않고 Artifact를 다운로드하려면 대신 wandb API로 아티팩트를 참조할 수 있습니다.

artifact = wandb.Api().artifact("user/project/artifact:latest")
local_path = artifact.download()

자세한 내용은 Artifacts 다운로드 및 사용을 참조하세요.

하이퍼파라미터 튜닝

라이브러리에서 W&B 하이퍼파라미터 튜닝을 활용하려면 W&B Sweeps를 라이브러리에 추가할 수도 있습니다.

고급 인테그레이션

다음 인테그레이션에서 고급 W&B 인테그레이션이 어떻게 보이는지 확인할 수도 있습니다. 대부분의 인테그레이션은 이만큼 복잡하지 않습니다.

6.2 - Azure OpenAI Fine-Tuning

W&B를 사용하여 Azure OpenAI 모델을 파인튜닝하는 방법.

도입

W&B를 사용하여 Microsoft Azure에서 GPT-3.5 또는 GPT-4 모델을 미세 조정하면 메트릭을 자동으로 캡처하고 W&B의 실험 추적 및 평가 툴을 통해 체계적인 평가를 용이하게 하여 모델 성능을 추적, 분석 및 개선할 수 있습니다.

전제 조건

  • 공식 Azure 설명서에 따라 Azure OpenAI 서비스를 설정합니다.
  • API 키로 W&B 계정을 구성합니다.

워크플로우 개요

1. 미세 조정 설정

  • Azure OpenAI 요구 사항에 따라 트레이닝 데이터를 준비합니다.
  • Azure OpenAI에서 미세 조정 작업을 구성합니다.
  • W&B는 미세 조정 프로세스를 자동으로 추적하여 메트릭 및 하이퍼파라미터를 기록합니다.

2. 실험 추적

미세 조정하는 동안 W&B는 다음을 캡처합니다.

  • 트레이닝 및 유효성 검사 메트릭
  • 모델 하이퍼파라미터
  • 리소스 활용률
  • 트레이닝 Artifacts

3. 모델 평가

미세 조정한 후 W&B Weave를 사용하여 다음을 수행합니다.

  • 참조 데이터셋에 대한 모델 출력을 평가합니다.
  • 다양한 미세 조정 Runs에서 성능을 비교합니다.
  • 특정 테스트 케이스에서 모델 행동을 분석합니다.
  • 모델 선택을 위해 데이터 기반 결정을 내립니다.

실제 예제

추가 자료

6.3 - Catalyst

Catalyst, Pytorch 프레임워크에 W&B를 통합하는 방법

Catalyst는 재현성, 빠른 실험, 코드베이스 재사용에 중점을 둔 딥러닝 R&D를 위한 PyTorch 프레임워크이므로 새로운 것을 만들 수 있습니다.

Catalyst에는 파라미터, 메트릭, 이미지 및 기타 Artifacts 로깅을 위한 W&B 인테그레이션이 포함되어 있습니다.

Python 및 Hydra를 사용한 예제가 포함된 인테그레이션 관련 문서를 확인하세요.

인터랙티브 예제

Catalyst 및 W&B 인테그레이션이 작동하는 것을 보려면 예제 colab을 실행하세요.

6.4 - Cohere fine-tuning

W&B를 사용하여 Cohere 모델을 파인튜닝하는 방법.

Weights & Biases를 사용하면 Cohere 모델의 미세 조정 메트릭 및 설정을 기록하여 모델의 성능을 분석하고 이해하며 동료와 결과를 공유할 수 있습니다.

Cohere 가이드에는 미세 조정 run을 시작하는 방법에 대한 전체 예제가 있으며, Cohere API 문서는 여기에서 찾을 수 있습니다.

Cohere 미세 조정 결과 기록

Cohere 미세 조정 로깅을 W&B workspace에 추가하려면 다음을 수행하십시오.

  1. W&B API 키, W&B entityproject 이름으로 WandbConfig를 생성합니다. W&B API 키는 https://wandb.ai/authorize 에서 찾을 수 있습니다.

  2. 모델 이름, 데이터셋 및 하이퍼파라미터와 함께 이 설정을 FinetunedModel 오브젝트에 전달하여 미세 조정 run을 시작합니다.

    from cohere.finetuning import WandbConfig, FinetunedModel
    
    # W&B 세부 정보로 config를 생성합니다.
    wandb_ft_config = WandbConfig(
        api_key="<wandb_api_key>",
        entity="my-entity", # 제공된 API 키와 연결된 유효한 entity여야 합니다.
        project="cohere-ft",
    )
    
    ...  # 데이터셋 및 하이퍼파라미터를 설정합니다.
    
    # cohere에서 미세 조정 run을 시작합니다.
    cmd_r_finetune = co.finetuning.create_finetuned_model(
      request=FinetunedModel(
        name="command-r-ft",
        settings=Settings(
          base_model=...
          dataset_id=...
          hyperparameters=...
          wandb=wandb_ft_config  # 여기에 W&B config를 전달합니다.
        ),
      ),
    )
    
  3. 모델의 미세 조정 트레이닝 및 유효성 검사 메트릭과 하이퍼파라미터를 생성한 W&B project에서 확인합니다.

Runs 구성

W&B runs는 자동으로 구성되며 job 유형, base model, 학습 속도 및 기타 하이퍼파라미터와 같은 모든 configuration 파라미터를 기준으로 필터링/정렬할 수 있습니다.

또한 runs의 이름을 바꾸거나, 노트를 추가하거나, 태그를 생성하여 그룹화할 수 있습니다.

참고 자료

6.5 - Databricks

W&B를 Databricks와 통합하는 방법.

W&B는 Databricks 환경에서 W&B Jupyter 노트북 경험을 사용자 정의하여 Databricks와 통합됩니다.

Databricks 설정

  1. 클러스터에 wandb 설치

    클러스터 설정으로 이동하여 클러스터를 선택하고 Libraries를 클릭합니다. Install New를 클릭하고 PyPI를 선택한 다음 wandb 패키지를 추가합니다.

  2. 인증 설정

    W&B 계정을 인증하려면 노트북이 쿼리할 수 있는 Databricks secret을 추가하면 됩니다.

    # databricks cli 설치
    pip install databricks-cli
    
    # databricks UI에서 토큰 생성
    databricks configure --token
    
    # 다음 두 코맨드 중 하나를 사용하여 스코프를 생성합니다 (databricks에서 보안 기능 활성화 여부에 따라 다름).
    # 보안 추가 기능 사용
    databricks secrets create-scope --scope wandb
    # 보안 추가 기능 미사용
    databricks secrets create-scope --scope wandb --initial-manage-principal users
    
    # 다음 위치에서 api_key를 추가합니다: https://app.wandb.ai/authorize
    databricks secrets put --scope wandb --key api_key
    

예시

간단한 예시

import os
import wandb

api_key = dbutils.secrets.get("wandb", "api_key")
wandb.login(key=api_key)

wandb.init()
wandb.log({"foo": 1})

Sweeps

wandb.sweep() 또는 wandb.agent()를 사용하려는 노트북에 필요한 설정(임시):

import os

# 다음은 향후에는 필요하지 않습니다.
os.environ["WANDB_ENTITY"] = "my-entity"
os.environ["WANDB_PROJECT"] = "my-project-that-exists"

6.6 - DeepChecks

DeepChecks와 W&B를 통합하는 방법.

DeepChecks는 최소한의 노력으로 데이터의 무결성 검증, 분포 검사, 데이터 분할 검증, 모델 평가, 여러 모델 간 비교 등 기계 학습 모델과 데이터를 검증하는 데 도움을 줍니다.

DeepChecks 및 wandb 통합에 대해 자세히 알아보기 ->

시작하기

DeepChecks를 Weights & Biases 와 함께 사용하려면 먼저 Weights & Biases 계정을 여기에서 가입해야 합니다. DeepChecks의 Weights & Biases 인테그레이션을 사용하면 다음과 같이 빠르게 시작할 수 있습니다.

import wandb

wandb.login()

# deepchecks에서 검사 가져오기
from deepchecks.checks import ModelErrorAnalysis

# 검사 실행
result = ModelErrorAnalysis()

# 해당 결과를 wandb로 푸시
result.to_wandb()

전체 DeepChecks 테스트 스위트를 Weights & Biases 에 로그할 수도 있습니다.

import wandb

wandb.login()

# deepchecks에서 full_suite 테스트 가져오기
from deepchecks.suites import full_suite

# DeepChecks 테스트 스위트 생성 및 실행
suite_result = full_suite().run(...)

# thes 결과를 wandb로 푸시
# 여기에서 필요한 wandb.init 구성 및 인수를 전달할 수 있습니다.
suite_result.to_wandb(project="my-suite-project", config={"suite-name": "full-suite"})

예시

``이 Report는 DeepChecks와 Weights & Biases를 사용하는 강력한 기능을 보여줍니다.

이 Weights & Biases 인테그레이션에 대한 질문이나 문제가 있으십니까? DeepChecks github repository에 이슈를 열어주시면 확인 후 답변드리겠습니다 :)

6.7 - DeepChem

DeepChem 라이브러리 와 W&B 를 통합하는 방법.

DeepChem 라이브러리는 약물 발견, 재료 과학, 화학 및 생물학에서 딥러닝 사용을 대중화하는 오픈 소스 툴을 제공합니다. 이 W&B 인테그레이션은 DeepChem을 사용하여 모델을 트레이닝하는 동안 간단하고 사용하기 쉬운 experiment 추적 및 모델 체크포인팅을 추가합니다.

3줄의 코드로 DeepChem 로깅하기

logger = WandbLogger()
model = TorchModel(, wandb_logger=logger)
model.fit()

Report 및 Google Colab

W&B와 DeepChem 사용: 분자 그래프 컨볼루션 네트워크 아티클에서 W&B DeepChem 인테그레이션을 사용하여 생성된 차트 예제를 살펴보세요.

작동하는 코드로 바로 들어가려면 이 Google Colab을 확인하세요.

Experiments 추적

KerasModel 또는 TorchModel 유형의 DeepChem 모델에 대해 W&B를 설정합니다.

가입하고 API 키 만들기

API 키는 W&B에 대한 컴퓨터를 인증합니다. 사용자 프로필에서 API 키를 생성할 수 있습니다.

  1. 오른쪽 상단 모서리에 있는 사용자 프로필 아이콘을 클릭합니다.
  2. User Settings를 선택한 다음 API Keys 섹션으로 스크롤합니다.
  3. Reveal을 클릭합니다. 표시된 API 키를 복사합니다. API 키를 숨기려면 페이지를 새로 고칩니다.

wandb 라이브러리를 설치하고 로그인하기

wandb 라이브러리를 로컬에 설치하고 로그인하려면 다음을 수행합니다.

  1. WANDB_API_KEY 환경 변수를 API 키로 설정합니다.

    export WANDB_API_KEY=<your_api_key>
    
  2. wandb 라이브러리를 설치하고 로그인합니다.

    pip install wandb
    
    wandb login
    
pip install wandb
import wandb
wandb.login()
!pip install wandb

import wandb
wandb.login()

W&B에 트레이닝 및 평가 데이터 기록하기

트레이닝 손실 및 평가 메트릭은 W&B에 자동으로 기록될 수 있습니다. DeepChem ValidationCallback을 사용하여 선택적 평가를 활성화할 수 있습니다. WandbLogger는 ValidationCallback 콜백을 감지하고 생성된 메트릭을 기록합니다.

from deepchem.models import TorchModel, ValidationCallback

vc = ValidationCallback()  # optional
model = TorchModel(, wandb_logger=logger)
model.fit(, callbacks=[vc])
logger.finish()
from deepchem.models import KerasModel, ValidationCallback

vc = ValidationCallback()  # optional
model = KerasModel(, wandb_logger=logger)
model.fit(, callbacks=[vc])
logger.finish()

6.8 - Docker

W&B를 Docker와 통합하는 방법.

Docker 인테그레이션

W&B는 코드 가 실행된 Docker 이미지에 대한 포인터를 저장하여 이전의 실험 을 정확한 환경 으로 복원할 수 있도록 합니다. wandb 라이브러리 는 이 상태 를 유지하기 위해 WANDB_DOCKER 환경 변수 를 찾습니다. 이 상태 를 자동으로 설정하는 몇 가지 도우미를 제공합니다.

로컬 개발

wandb docker 는 docker 컨테이너 를 시작하고, wandb 환경 변수 를 전달하고, 코드 를 마운트하고, wandb가 설치되었는지 확인하는 코맨드 입니다. 기본적으로 이 코맨드 는 TensorFlow, PyTorch, Keras 및 Jupyter가 설치된 docker 이미지 를 사용합니다. 동일한 코맨드 를 사용하여 자신의 docker 이미지 를 시작할 수 있습니다: wandb docker my/image:latest. 이 코맨드 는 현재 디렉토리 를 컨테이너 의 “/app” 디렉토리 에 마운트합니다. “–dir” 플래그 를 사용하여 이를 변경할 수 있습니다.

프로덕션

wandb docker-run 코맨드 는 프로덕션 워크로드 를 위해 제공됩니다. nvidia-docker 를 대체할 수 있도록 만들어졌습니다. 이는 docker run 코맨드 에 대한 간단한 래퍼 로, 자격 증명 과 WANDB_DOCKER 환경 변수 를 호출에 추가합니다. “–runtime” 플래그 를 전달하지 않고 시스템에서 nvidia-docker 를 사용할 수 있는 경우 런타임 이 nvidia로 설정됩니다.

Kubernetes

Kubernetes에서 트레이닝 워크로드 를 실행하고 k8s API가 Pod에 노출된 경우 (기본적으로 해당됨) wandb는 docker 이미지 의 다이제스트에 대해 API를 쿼리하고 WANDB_DOCKER 환경 변수 를 자동으로 설정합니다.

복원

WANDB_DOCKER 환경 변수 로 Run이 계측된 경우, wandb restore username/project:run_id 를 호출하면 코드 를 복원하는 새 분기를 체크아웃한 다음, 트레이닝 에 사용된 정확한 docker 이미지 를 원래 코맨드 로 미리 채워 시작합니다.

6.9 - Farama Gymnasium

Farama Gymnasium과 W&B를 통합하는 방법.

Farama Gymnasium을 사용하는 경우 gymnasium.wrappers.Monitor에서 생성된 환경의 비디오가 자동으로 기록됩니다. wandb.init에 대한 monitor_gym 키워드 인수를 True로 설정하기만 하면 됩니다.

Gymnasium 인테그레이션은 매우 간단합니다. gymnasium에서 기록된 비디오 파일의 이름을 확인하고, 그에 따라 이름을 지정하거나 일치하는 항목을 찾지 못하면 "videos"로 대체합니다. 더 많은 제어를 원한다면 언제든지 수동으로 비디오를 기록할 수 있습니다.

CleanRL 라이브러리와 함께 Gymnasium을 사용하는 방법에 대한 자세한 내용은 이 report를 확인하세요.

6.10 - fastai

fastai를 사용하여 모델을 트레이닝하는 경우, W&B는 WandbCallback을 사용하여 쉽게 통합할 수 있습니다. 예제가 포함된 대화형 문서에서 자세한 내용을 살펴보세요 →

가입 및 API 키 생성

API 키는 사용자의 머신을 W&B에 인증합니다. 사용자 프로필에서 API 키를 생성할 수 있습니다.

  1. 오른쪽 상단 모서리에 있는 사용자 프로필 아이콘을 클릭합니다.
  2. User Settings를 선택한 다음 API Keys 섹션으로 스크롤합니다.
  3. Reveal을 클릭합니다. 표시된 API 키를 복사합니다. API 키를 숨기려면 페이지를 새로 고칩니다.

wandb 라이브러리 설치 및 로그인

로컬에서 wandb 라이브러리를 설치하고 로그인하려면 다음을 수행합니다.

  1. WANDB_API_KEY 환경 변수를 API 키로 설정합니다.

    export WANDB_API_KEY=<your_api_key>
    
  2. wandb 라이브러리를 설치하고 로그인합니다.

    pip install wandb
    
    wandb login
    
pip install wandb
import wandb
wandb.login()
!pip install wandb

import wandb
wandb.login()

WandbCallbacklearner 또는 fit 메서드에 추가

import wandb
from fastai.callback.wandb import *

# wandb run 로깅 시작
wandb.init(project="my_project")

# 하나의 트레이닝 단계에서만 로깅하려면
learn.fit(..., cbs=WandbCallback())

# 모든 트레이닝 단계에서 지속적으로 로깅하려면
learn = learner(..., cbs=WandbCallback())

WandbCallback 인수

WandbCallback은 다음 인수를 허용합니다.

Args Description
log 모델의 다음 항목을 기록할지 여부: gradients , parameters, all 또는 None (기본값). 손실 및 메트릭은 항상 기록됩니다.
log_preds 예측 샘플을 기록할지 여부 (기본값은 True).
log_preds_every_epoch 에포크마다 예측을 기록할지 또는 마지막에 기록할지 여부 (기본값은 False)
log_model 모델을 기록할지 여부 (기본값은 False). 이 옵션은 SaveModelCallback도 필요합니다.
model_name 저장할 file 이름으로, SaveModelCallback을 재정의합니다.
log_dataset
  • False (기본값)
  • True는 learn.dls.path에서 참조하는 폴더를 기록합니다.
  • 기록할 폴더를 참조하기 위해 경로를 명시적으로 정의할 수 있습니다.

참고: 하위 폴더 “models"는 항상 무시됩니다.

dataset_name 기록된 데이터셋의 이름 (기본값은 folder name).
valid_dl 예측 샘플에 사용되는 항목을 포함하는 DataLoaders (기본값은 learn.dls.valid의 임의 항목).
n_preds 기록된 예측 수 (기본값은 36).
seed 임의 샘플을 정의하는 데 사용됩니다.

커스텀 워크플로우의 경우 데이터셋과 모델을 수동으로 기록할 수 있습니다.

  • log_dataset(path, name=None, metadata={})
  • log_model(path, name=None, metadata={})

참고: 모든 하위 폴더 “models"는 무시됩니다.

분산 트레이닝

fastai는 컨텍스트 관리자 distrib_ctx를 사용하여 분산 트레이닝을 지원합니다. W&B는 이를 자동으로 지원하며 Multi-GPU Experiments를 즉시 추적할 수 있습니다.

이 최소 예제를 검토하세요.

import wandb
from fastai.vision.all import *
from fastai.distributed import *
from fastai.callback.wandb import WandbCallback

wandb.require(experiment="service")
path = rank0_first(lambda: untar_data(URLs.PETS) / "images")

def train():
    dls = ImageDataLoaders.from_name_func(
        path,
        get_image_files(path),
        valid_pct=0.2,
        label_func=lambda x: x[0].isupper(),
        item_tfms=Resize(224),
    )
    wandb.init("fastai_ddp", entity="capecape")
    cb = WandbCallback()
    learn = vision_learner(dls, resnet34, metrics=error_rate, cbs=cb).to_fp16()
    with learn.distrib_ctx(sync_bn=False):
        learn.fit(1)

if __name__ == "__main__":
    train()

그런 다음 터미널에서 다음을 실행합니다.

$ torchrun --nproc_per_node 2 train.py

이 경우 머신에 2개의 GPU가 있습니다.

이제 노트북 내에서 직접 분산 트레이닝을 실행할 수 있습니다.

import wandb
from fastai.vision.all import *

from accelerate import notebook_launcher
from fastai.distributed import *
from fastai.callback.wandb import WandbCallback

wandb.require(experiment="service")
path = untar_data(URLs.PETS) / "images"

def train():
    dls = ImageDataLoaders.from_name_func(
        path,
        get_image_files(path),
        valid_pct=0.2,
        label_func=lambda x: x[0].isupper(),
        item_tfms=Resize(224),
    )
    wandb.init("fastai_ddp", entity="capecape")
    cb = WandbCallback()
    learn = vision_learner(dls, resnet34, metrics=error_rate, cbs=cb).to_fp16()
    with learn.distrib_ctx(in_notebook=True, sync_bn=False):
        learn.fit(1)

notebook_launcher(train, num_processes=2)

메인 프로세스에서만 로그

위의 예에서 wandb는 프로세스당 하나의 run을 시작합니다. 트레이닝이 끝나면 두 개의 run이 생성됩니다. 이는 혼란스러울 수 있으며 메인 프로세스에서만 로그할 수 있습니다. 이렇게 하려면 어떤 프로세스에 있는지 수동으로 감지하고 다른 모든 프로세스에서 run 생성을 피해야 합니다 (wandb.init 호출).

import wandb
from fastai.vision.all import *
from fastai.distributed import *
from fastai.callback.wandb import WandbCallback

wandb.require(experiment="service")
path = rank0_first(lambda: untar_data(URLs.PETS) / "images")

def train():
    cb = []
    dls = ImageDataLoaders.from_name_func(
        path,
        get_image_files(path),
        valid_pct=0.2,
        label_func=lambda x: x[0].isupper(),
        item_tfms=Resize(224),
    )
    if rank_distrib() == 0:
        run = wandb.init("fastai_ddp", entity="capecape")
        cb = WandbCallback()
    learn = vision_learner(dls, resnet34, metrics=error_rate, cbs=cb).to_fp16()
    with learn.distrib_ctx(sync_bn=False):
        learn.fit(1)

if __name__ == "__main__":
    train()

터미널에서 다음을 호출합니다.

$ torchrun --nproc_per_node 2 train.py
import wandb
from fastai.vision.all import *

from accelerate import notebook_launcher
from fastai.distributed import *
from fastai.callback.wandb import WandbCallback

wandb.require(experiment="service")
path = untar_data(URLs.PETS) / "images"

def train():
    cb = []
    dls = ImageDataLoaders.from_name_func(
        path,
        get_image_files(path),
        valid_pct=0.2,
        label_func=lambda x: x[0].isupper(),
        item_tfms=Resize(224),
    )
    if rank_distrib() == 0:
        run = wandb.init("fastai_ddp", entity="capecape")
        cb = WandbCallback()
    learn = vision_learner(dls, resnet34, metrics=error_rate, cbs=cb).to_fp16()
    with learn.distrib_ctx(in_notebook=True, sync_bn=False):
        learn.fit(1)

notebook_launcher(train, num_processes=2)

Examples

6.10.1 - fastai v1

fastai v1을 사용하는 스크립트의 경우, 모델 토폴로지, 손실, 메트릭, 가중치, 그레이디언트, 샘플 예측 및 최적 트레이닝된 모델을 자동으로 기록할 수 있는 콜백이 있습니다.

import wandb
from wandb.fastai import WandbCallback

wandb.init()

learn = cnn_learner(data, model, callback_fns=WandbCallback)
learn.fit(epochs)

요청된 기록 데이터는 콜백 생성자를 통해 구성할 수 있습니다.

from functools import partial

learn = cnn_learner(
    data, model, callback_fns=partial(WandbCallback, input_type="images")
)

트레이닝을 시작할 때만 WandbCallback을 사용하는 것도 가능합니다. 이 경우 인스턴스화해야 합니다.

learn.fit(epochs, callbacks=WandbCallback(learn))

사용자 지정 파라미터를 해당 단계에서 제공할 수도 있습니다.

learn.fit(epochs, callbacks=WandbCallback(learn, input_type="images"))

예제 코드

이 통합이 어떻게 작동하는지 보여주는 몇 가지 예제를 만들었습니다.

Fastai v1

옵션

WandbCallback() 클래스는 다음과 같은 여러 옵션을 지원합니다.

키워드 인수 기본값 설명
learn N/A 연결할 fast.ai 학습기입니다.
save_model True 각 단계에서 향상되면 모델을 저장합니다. 트레이닝이 끝나면 최적 모델도 로드합니다.
mode auto min, max 또는 auto: 단계 간에 monitor에 지정된 트레이닝 메트릭을 비교하는 방법입니다.
monitor None 최적 모델을 저장하기 위한 성능을 측정하는 데 사용되는 트레이닝 메트릭입니다. None은 유효성 검사 손실을 기본값으로 합니다.
log gradients gradients, parameters, all 또는 None. 손실 및 메트릭은 항상 기록됩니다.
input_type None images 또는 None. 샘플 예측을 표시하는 데 사용됩니다.
validation_data None input_type이 설정된 경우 샘플 예측에 사용되는 데이터입니다.
predictions 36 input_type이 설정되고 validation_dataNone인 경우 수행할 예측 횟수입니다.
seed 12345 input_type이 설정되고 validation_dataNone인 경우 샘플 예측을 위해 난수 생성기를 초기화합니다.

6.11 - Hugging Face Transformers

Hugging Face Transformers 라이브러리를 사용하면 최첨단 NLP 모델(예: BERT)과 혼합 정밀도 및 그레이디언트 체크포인트와 같은 트레이닝 기술을 쉽게 사용할 수 있습니다. W&B 통합은 사용 편의성을 유지하면서도 대화형 중앙 집중식 대시보드에 풍부하고 유연한 실험 추적 및 모델 버전 관리를 추가합니다.

몇 줄의 코드로 차세대 로깅 구현

os.environ["WANDB_PROJECT"] = "<my-amazing-project>"  # W&B 프로젝트 이름 지정
os.environ["WANDB_LOG_MODEL"] = "checkpoint"  # 모든 모델 체크포인트 로깅

from transformers import TrainingArguments, Trainer

args = TrainingArguments(..., report_to="wandb")  # W&B 로깅 켜기
trainer = Trainer(..., args=args)
W&B 대화형 대시보드에서 실험 결과 탐색

시작하기: Experiments 추적

가입하고 API 키 만들기

API 키는 사용자의 컴퓨터가 W&B에 인증되도록 합니다. 사용자 프로필에서 API 키를 생성할 수 있습니다.

  1. 오른쪽 상단 모서리에 있는 사용자 프로필 아이콘을 클릭합니다.
  2. User Settings를 선택한 다음 API Keys 섹션으로 스크롤합니다.
  3. Reveal을 클릭합니다. 표시된 API 키를 복사합니다. API 키를 숨기려면 페이지를 새로 고칩니다.

wandb 라이브러리 설치 및 로그인

wandb 라이브러리를 로컬에 설치하고 로그인하는 방법:

  1. WANDB_API_KEY 환경 변수를 API 키로 설정합니다.

    export WANDB_API_KEY=<your_api_key>
    
  2. wandb 라이브러리를 설치하고 로그인합니다.

    pip install wandb
    
    wandb login
    
pip install wandb
import wandb
wandb.login()
!pip install wandb

import wandb
wandb.login()

W&B를 처음 사용하는 경우 퀵스타트를 확인하는 것이 좋습니다.

프로젝트 이름 지정

W&B Project는 관련 Runs에서 기록된 모든 차트, 데이터 및 Models가 저장되는 곳입니다. 프로젝트 이름을 지정하면 작업을 구성하고 단일 프로젝트에 대한 모든 정보를 한 곳에 보관하는 데 도움이 됩니다.

Run을 프로젝트에 추가하려면 WANDB_PROJECT 환경 변수를 프로젝트 이름으로 설정하기만 하면 됩니다. WandbCallback은 이 프로젝트 이름 환경 변수를 가져와 Run을 설정할 때 사용합니다.

WANDB_PROJECT=amazon_sentiment_analysis
import os
os.environ["WANDB_PROJECT"]="amazon_sentiment_analysis"
%env WANDB_PROJECT=amazon_sentiment_analysis

프로젝트 이름이 지정되지 않은 경우 프로젝트 이름은 기본적으로 huggingface로 설정됩니다.

트레이닝 Runs를 W&B에 로깅

Trainer 트레이닝 인수를 정의할 때 코드 내부 또는 커맨드라인에서 가장 중요한 단계는 W&B를 사용하여 로깅을 활성화하기 위해 report_to"wandb"로 설정하는 것입니다.

TrainingArgumentslogging_steps 인수는 트레이닝 중에 트레이닝 메트릭이 W&B로 푸시되는 빈도를 제어합니다. run_name 인수를 사용하여 W&B에서 트레이닝 Run의 이름을 지정할 수도 있습니다.

이제 모델이 트레이닝하는 동안 손실, 평가 메트릭, 모델 토폴로지 및 그레이디언트를 W&B에 로깅합니다.

python run_glue.py \     # Python 스크립트 실행
  --report_to wandb \    # W&B에 로깅 활성화
  --run_name bert-base-high-lr \   # W&B Run 이름(선택 사항)
  # 기타 커맨드라인 인수
from transformers import TrainingArguments, Trainer

args = TrainingArguments(
    # 기타 인수 및 kwargs
    report_to="wandb",  # W&B에 로깅 활성화
    run_name="bert-base-high-lr",  # W&B Run 이름(선택 사항)
    logging_steps=1,  # W&B에 로깅 빈도
)

trainer = Trainer(
    # 기타 인수 및 kwargs
    args=args,  # 트레이닝 인수
)

trainer.train()  # 트레이닝을 시작하고 W&B에 로깅

모델 체크포인트 설정

Artifacts를 사용하면 최대 100GB의 Models 및 Datasets를 무료로 저장한 다음 Weights & Biases Registry를 사용할 수 있습니다. Registry를 사용하면 Models를 등록하여 탐색하고 평가하고, 스테이징을 준비하거나 프로덕션 환경에 배포할 수 있습니다.

Hugging Face 모델 체크포인트를 Artifacts에 로깅하려면 WANDB_LOG_MODEL 환경 변수를 다음 _중 하나_로 설정합니다.

  • checkpoint: TrainingArguments에서 args.save_steps마다 체크포인트를 업로드합니다.
  • end: load_best_model_at_end도 설정된 경우 트레이닝이 끝나면 모델을 업로드합니다.
  • false: 모델을 업로드하지 않습니다.
WANDB_LOG_MODEL="checkpoint"
import os

os.environ["WANDB_LOG_MODEL"] = "checkpoint"
%env WANDB_LOG_MODEL="checkpoint"

이제부터 초기화하는 모든 Transformers Trainer는 Models를 W&B Project에 업로드합니다. 로깅하는 모델 체크포인트는 Artifacts UI를 통해 볼 수 있으며 전체 모델 계보가 포함됩니다(UI에서 예제 모델 체크포인트를 보려면 여기 참조).

W&B Registry

체크포인트를 Artifacts에 로깅한 후에는 **Registry**를 사용하여 최고의 모델 체크포인트를 등록하고 팀 전체에서 중앙 집중화할 수 있습니다. Registry를 사용하면 작업별로 최고의 Models를 구성하고, Models의 라이프사이클을 관리하고, 전체 ML 라이프사이클을 추적 및 감사하고, 다운스트림 작업을 자동화할 수 있습니다.

모델 Artifact를 연결하려면 Registry를 참조하세요.

트레이닝 중 평가 결과 시각화

트레이닝 또는 평가 중 모델 출력을 시각화하는 것은 모델 트레이닝 방식을 실제로 이해하는 데 종종 필수적입니다.

Transformers Trainer의 콜백 시스템을 사용하면 모델의 텍스트 생성 출력 또는 기타 예측과 같은 추가적인 유용한 데이터를 W&B Tables에 로깅할 수 있습니다.

아래의 **사용자 지정 로깅 섹션**에서 트레이닝 중 평가 출력을 로깅하여 다음과 같은 W&B Table에 로깅하는 방법에 대한 전체 가이드를 참조하세요.

평가 출력이 있는 W&B Table을 보여줍니다.

W&B Run 종료(노트북 전용)

트레이닝이 Python 스크립트에 캡슐화된 경우 스크립트가 완료되면 W&B Run이 종료됩니다.

Jupyter 또는 Google Colab 노트북을 사용하는 경우 wandb.finish()를 호출하여 트레이닝이 완료되었음을 알려야 합니다.

trainer.train()  # 트레이닝을 시작하고 W&B에 로깅

# 트레이닝 후 분석, 테스트, 기타 로깅된 코드

wandb.finish()

결과 시각화

트레이닝 결과를 로깅했으면 W&B Dashboard에서 결과를 동적으로 탐색할 수 있습니다. 유연하고 대화형 시각화를 통해 한 번에 수십 개의 Runs를 비교하고, 흥미로운 발견을 확대하고, 복잡한 데이터에서 통찰력을 얻는 것이 쉽습니다.

고급 기능 및 FAQ

최고의 모델을 저장하는 방법은 무엇인가요?

TrainingArgumentsload_best_model_at_end=TrueTrainer에 전달하면 W&B는 가장 성능이 좋은 모델 체크포인트를 Artifacts에 저장합니다.

모델 체크포인트를 Artifacts로 저장하는 경우 Registry로 승격할 수 있습니다. Registry에서 다음을 수행할 수 있습니다.

  • ML 작업별로 최고의 모델 버전을 구성합니다.
  • Models를 중앙 집중화하고 팀과 공유합니다.
  • 프로덕션을 위해 Models를 스테이징하거나 추가 평가를 위해 북마크합니다.
  • 다운스트림 CI/CD 프로세스를 트리거합니다.

저장된 모델을 로드하는 방법은 무엇인가요?

WANDB_LOG_MODEL을 사용하여 모델을 W&B Artifacts에 저장한 경우 추가 트레이닝을 위해 또는 추론을 실행하기 위해 모델 가중치를 다운로드할 수 있습니다. 이전과 동일한 Hugging Face 아키텍처에 다시 로드하기만 하면 됩니다.

# 새 Run 만들기
with wandb.init(project="amazon_sentiment_analysis") as run:
    # Artifact 이름 및 버전 전달
    my_model_name = "model-bert-base-high-lr:latest"
    my_model_artifact = run.use_artifact(my_model_name)

    # 모델 가중치를 폴더에 다운로드하고 경로 반환
    model_dir = my_model_artifact.download()

    # 동일한 모델 클래스를 사용하여 해당 폴더에서 Hugging Face 모델 로드
    model = AutoModelForSequenceClassification.from_pretrained(
        model_dir, num_labels=num_labels
    )

    # 추가 트레이닝 또는 추론 실행

체크포인트에서 트레이닝을 재개하는 방법은 무엇인가요?

WANDB_LOG_MODEL='checkpoint'를 설정한 경우 model_dirTrainingArgumentsmodel_name_or_path 인수로 사용하고 resume_from_checkpoint=TrueTrainer에 전달하여 트레이닝을 재개할 수도 있습니다.

last_run_id = "xxxxxxxx"  # wandb Workspace에서 run_id 가져오기

# run_id에서 W&B Run 재개
with wandb.init(
    project=os.environ["WANDB_PROJECT"],
    id=last_run_id,
    resume="must",
) as run:
    # Artifact를 Run에 연결
    my_checkpoint_name = f"checkpoint-{last_run_id}:latest"
    my_checkpoint_artifact = run.use_artifact(my_model_name)

    # 체크포인트를 폴더에 다운로드하고 경로 반환
    checkpoint_dir = my_checkpoint_artifact.download()

    # 모델 및 Trainer 다시 초기화
    model = AutoModelForSequenceClassification.from_pretrained(
        "<model_name>", num_labels=num_labels
    )
    # 멋진 트레이닝 인수
    training_args = TrainingArguments()

    trainer = Trainer(model=model, args=training_args)

    # 체크포인트 디렉터리를 사용하여 체크포인트에서 트레이닝을 재개해야 합니다.
    trainer.train(resume_from_checkpoint=checkpoint_dir)

트레이닝 중에 평가 샘플을 로깅하고 보는 방법

Transformers Trainer를 통해 W&B에 로깅하는 것은 Transformers 라이브러리의 WandbCallback에서 처리합니다. Hugging Face 로깅을 사용자 지정해야 하는 경우 WandbCallback을 서브클래싱하고 Trainer 클래스의 추가적인 메서드를 활용하는 추가적인 기능을 추가하여 이 콜백을 수정할 수 있습니다.

아래는 이 새로운 콜백을 HF Trainer에 추가하는 일반적인 패턴이며, 아래에는 평가 출력을 W&B Table에 로깅하는 코드 완성 예제가 있습니다.

# Trainer를 정상적으로 인스턴스화
trainer = Trainer()

# Trainer 오브젝트를 전달하여 새로운 로깅 콜백 인스턴스화
evals_callback = WandbEvalsCallback(trainer, tokenizer, ...)

# Trainer에 콜백 추가
trainer.add_callback(evals_callback)

# Trainer 트레이닝을 정상적으로 시작
trainer.train()

트레이닝 중 평가 샘플 보기

다음 섹션에서는 모델 예측을 실행하고 트레이닝 중에 평가 샘플을 W&B Table에 로깅하도록 WandbCallback을 사용자 지정하는 방법을 보여줍니다. Trainer 콜백의 on_evaluate 메서드를 사용하여 모든 eval_steps에서 수행합니다.

여기서는 토크나이저를 사용하여 모델 출력에서 예측 및 레이블을 디코딩하는 decode_predictions 함수를 작성했습니다.

그런 다음 예측 및 레이블에서 pandas DataFrame을 만들고 DataFrame에 epoch 열을 추가합니다.

마지막으로 DataFrame에서 wandb.Table을 만들고 wandb에 로깅합니다. 또한 예측을 freq 에포크마다 로깅하여 로깅 빈도를 제어할 수 있습니다.

참고: 일반적인 WandbCallback과 달리 이 사용자 지정 콜백은 Trainer를 인스턴스화한 후에 Trainer에 추가해야 하며 Trainer 초기화 중에는 추가하면 안 됩니다. Trainer 인스턴스는 초기화 중에 콜백에 전달되기 때문입니다.

from transformers.integrations import WandbCallback
import pandas as pd


def decode_predictions(tokenizer, predictions):
    labels = tokenizer.batch_decode(predictions.label_ids)
    logits = predictions.predictions.argmax(axis=-1)
    prediction_text = tokenizer.batch_decode(logits)
    return {"labels": labels, "predictions": prediction_text}


class WandbPredictionProgressCallback(WandbCallback):
    """트레이닝 중에 모델 예측을 로깅하는 사용자 지정 WandbCallback입니다.

    이 콜백은 트레이닝 중 각 로깅 단계에서 모델 예측과 레이블을 wandb.Table에 로깅합니다.
    트레이닝이 진행됨에 따라 모델 예측을 시각화할 수 있습니다.

    특성:
        trainer (Trainer): Hugging Face Trainer 인스턴스입니다.
        tokenizer (AutoTokenizer): 모델과 연결된 토크나이저입니다.
        sample_dataset (Dataset): 예측 생성을 위한 유효성 검사 데이터셋의 서브셋입니다.
        num_samples (int, optional): 예측 생성을 위해 유효성 검사 데이터셋에서 선택할 샘플 수입니다. 기본값은 100입니다.
        freq (int, optional): 로깅 빈도입니다. 기본값은 2입니다.
    """

    def __init__(self, trainer, tokenizer, val_dataset, num_samples=100, freq=2):
        """WandbPredictionProgressCallback 인스턴스를 초기화합니다.

        인수:
            trainer (Trainer): Hugging Face Trainer 인스턴스입니다.
            tokenizer (AutoTokenizer): 모델과 연결된 토크나이저입니다.
            val_dataset (Dataset): 유효성 검사 데이터셋입니다.
            num_samples (int, optional): 예측 생성을 위해 유효성 검사 데이터셋에서 선택할 샘플 수입니다.
              기본값은 100입니다.
            freq (int, optional): 로깅 빈도입니다. 기본값은 2입니다.
        """
        super().__init__()
        self.trainer = trainer
        self.tokenizer = tokenizer
        self.sample_dataset = val_dataset.select(range(num_samples))
        self.freq = freq

    def on_evaluate(self, args, state, control, **kwargs):
        super().on_evaluate(args, state, control, **kwargs)
        # `freq` 에포크마다 예측을 로깅하여 로깅 빈도 제어
        if state.epoch % self.freq == 0:
            # 예측 생성
            predictions = self.trainer.predict(self.sample_dataset)
            # 예측 및 레이블 디코딩
            predictions = decode_predictions(self.tokenizer, predictions)
            # wandb.Table에 예측 추가
            predictions_df = pd.DataFrame(predictions)
            predictions_df["epoch"] = state.epoch
            records_table = self._wandb.Table(dataframe=predictions_df)
            # 테이블을 wandb에 로깅
            self._wandb.log({"sample_predictions": records_table})


# 먼저 Trainer 인스턴스화
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=lm_datasets["train"],
    eval_dataset=lm_datasets["validation"],
)

# WandbPredictionProgressCallback 인스턴스화
progress_callback = WandbPredictionProgressCallback(
    trainer=trainer,
    tokenizer=tokenizer,
    val_dataset=lm_dataset["validation"],
    num_samples=10,
    freq=2,
)

# Trainer에 콜백 추가
trainer.add_callback(progress_callback)

자세한 예제는 이 colab을 참조하세요.

어떤 추가 W&B 설정이 제공되나요?

환경 변수를 설정하여 Trainer로 로깅되는 항목을 추가로 구성할 수 있습니다. W&B 환경 변수의 전체 목록은 여기에서 찾을 수 있습니다.

환경 변수 사용법
WANDB_PROJECT 프로젝트 이름 지정(기본값: huggingface)
WANDB_LOG_MODEL

모델 체크포인트를 W&B Artifact로 로깅(기본값: false)

  • false(기본값): 모델 체크포인트 없음
  • checkpoint: 체크포인트는 모든 args.save_steps마다 업로드됩니다(Trainer의 TrainingArguments에서 설정).
  • end: 최종 모델 체크포인트는 트레이닝이 끝나면 업로드됩니다.
WANDB_WATCH

모델 그레이디언트, 파라미터 또는 둘 다를 로깅할지 여부 설정

  • false(기본값): 그레이디언트 또는 파라미터 로깅 없음
  • gradients: 그레이디언트의 히스토그램 로깅
  • all: 그레이디언트 및 파라미터의 히스토그램 로깅
WANDB_DISABLED true로 설정하여 로깅을 완전히 끕니다(기본값: false)
WANDB_SILENT true로 설정하여 wandb에서 인쇄된 출력을 표시하지 않습니다(기본값: false)
WANDB_WATCH=all
WANDB_SILENT=true
%env WANDB_WATCH=all
%env WANDB_SILENT=true

wandb.init를 사용자 지정하는 방법은 무엇인가요?

Trainer가 사용하는 WandbCallbackTrainer가 초기화될 때 내부적으로 wandb.init를 호출합니다. 또는 Trainer를 초기화하기 전에 wandb.init를 호출하여 Run을 수동으로 설정할 수 있습니다. 이렇게 하면 W&B Run 구성을 완전히 제어할 수 있습니다.

init에 전달할 수 있는 예는 아래와 같습니다. wandb.init를 사용하는 방법에 대한 자세한 내용은 참조 설명서를 확인하세요.

wandb.init(
    project="amazon_sentiment_analysis",
    name="bert-base-high-lr",
    tags=["baseline", "high-lr"],
    group="bert",
)

추가 자료

다음은 Transformer 및 W&B 관련 기사 6가지입니다.

Hugging Face Transformers의 하이퍼파라미터 최적화
  • Hugging Face Transformers의 하이퍼파라미터 최적화를 위한 세 가지 전략(그리드 검색, 베이지안 최적화 및 모집단 기반 트레이닝)을 비교합니다.
  • Hugging Face Transformers의 표준 uncased BERT 모델을 사용하고 SuperGLUE 벤치마크에서 RTE 데이터셋을 파인튜닝하려고 합니다.
  • 결과는 모집단 기반 트레이닝이 Hugging Face Transformer 모델의 하이퍼파라미터 최적화에 가장 효과적인 접근 방식임을 보여줍니다.

전체 리포트는 여기에서 읽어보세요.

Hugging Tweets: 트윗 생성을 위한 모델 트레이닝
  • 이 기사에서 작성자는 5분 안에 모든 사람의 트윗에서 사전 트레이닝된 GPT2 HuggingFace Transformer 모델을 파인튜닝하는 방법을 보여줍니다.
  • 이 모델은 다음 파이프라인을 사용합니다. 트윗 다운로드, 데이터셋 최적화, 초기 실험, 사용자 간 손실 비교, 모델 파인튜닝.

전체 리포트는 여기에서 읽어보세요.

Hugging Face BERT 및 WB를 사용한 문장 분류
  • 이 기사에서는 자연어 처리의 최근 혁신의 힘을 활용하여 문장 분류기를 구축하고 NLP에 대한 전이 학습 애플리케이션에 중점을 둡니다.
  • 우리는 단일 문장 분류를 위해 CoLA(Corpus of Linguistic Acceptability) 데이터셋을 사용합니다. 이 데이터셋은 문법적으로 올바르거나 올바르지 않은 것으로 레이블이 지정된 일련의 문장으로, 2018년 5월에 처음 게시되었습니다.
  • Google의 BERT를 사용하여 다양한 NLP 작업에서 최소한의 노력으로 고성능 모델을 만듭니다.

전체 리포트는 여기에서 읽어보세요.

Hugging Face 모델 성능 추적에 대한 단계별 가이드
  • W&B와 Hugging Face Transformers를 사용하여 BERT보다 40% 작지만 BERT 정확도의 97%를 유지하는 Transformer인 DistilBERT를 GLUE 벤치마크에서 트레이닝합니다.
  • GLUE 벤치마크는 NLP 모델 트레이닝을 위한 9개의 데이터셋 및 작업 모음입니다.

전체 리포트는 여기에서 읽어보세요.

HuggingFace의 조기 중단 예제
  • 조기 중단 정규화를 사용하여 Hugging Face Transformer를 파인튜닝하는 것은 PyTorch 또는 TensorFlow에서 기본적으로 수행할 수 있습니다.
  • TensorFlow에서 EarlyStopping 콜백을 사용하는 것은 tf.keras.callbacks.EarlyStopping 콜백을 사용하는 것과 간단합니다.
  • PyTorch에는 즉시 사용 가능한 조기 중단 메서드는 없지만 GitHub Gist에서 작업 조기 중단 훅을 사용할 수 있습니다.

전체 리포트는 여기에서 읽어보세요.

사용자 지정 데이터셋에서 Hugging Face Transformers를 파인튜닝하는 방법

사용자 지정 IMDB 데이터셋에서 감정 분석(이진 분류)을 위해 DistilBERT Transformer를 파인튜닝합니다.

전체 리포트는 여기에서 읽어보세요.

도움을 받거나 기능 요청

Hugging Face W&B 통합에 대한 문제, 질문 또는 기능 요청이 있는 경우 Hugging Face 포럼의 이 스레드에 게시하거나 Hugging Face Transformers GitHub 리포에 문제를 여유롭게 게시하세요.

6.12 - Hugging Face Diffusers

Hugging Face Diffusers는 이미지, 오디오, 심지어 분자의 3D 구조를 생성하기 위한 최첨단 사전학습된 diffusion model을 위한 라이브러리입니다. Weights & Biases 인테그레이션은 사용 편의성을 유지하면서도 대화형 중앙 집중식 대시보드에 풍부하고 유연한 실험 추적, 미디어 시각화, 파이프라인 아키텍처 및 설정 관리를 추가합니다.

단 두 줄로 차원이 다른 로깅을 경험하세요

단 2줄의 코드를 추가하는 것만으로도 실험과 관련된 모든 프롬프트, 부정적 프롬프트, 생성된 미디어 및 설정을 기록할 수 있습니다. 다음은 로깅을 시작하기 위한 2줄의 코드입니다.

# import the autolog function
from wandb.integration.diffusers import autolog

# call the autolog before calling the pipeline
autolog(init=dict(project="diffusers_logging"))
An example of how the results of your experiment are logged
실험 결과가 기록되는 방식의 예시입니다.

시작하기

  1. diffusers, transformers, acceleratewandb를 설치합니다.

    • 커맨드라인:

      pip install --upgrade diffusers transformers accelerate wandb
      
    • 노트북:

      !pip install --upgrade diffusers transformers accelerate wandb
      
  2. autolog를 사용하여 Weights & Biases run을 초기화하고 지원되는 모든 파이프라인 호출에서 입력 및 출력을 자동으로 추적합니다.

    wandb.init()에 필요한 파라미터의 dictionary를 받는 init 파라미터로 autolog() 함수를 호출할 수 있습니다.

    autolog()를 호출하면 Weights & Biases run이 초기화되고 지원되는 모든 파이프라인 호출에서 입력과 출력을 자동으로 추적합니다.

    • 각 파이프라인 호출은 워크스페이스의 자체 테이블로 추적되며, 파이프라인 호출과 관련된 설정은 해당 run의 설정에서 워크플로우 목록에 추가됩니다.
    • 프롬프트, 부정적 프롬프트 및 생성된 미디어는 wandb.Table에 기록됩니다.
    • 시드 및 파이프라인 아키텍처를 포함하여 실험과 관련된 다른 모든 설정은 run의 설정 섹션에 저장됩니다.
    • 각 파이프라인 호출에 대해 생성된 미디어도 run의 미디어 패널에 기록됩니다.

예시

Autologging

다음은 autolog의 간단한 엔드투엔드 예시입니다.

import torch
from diffusers import DiffusionPipeline

# import the autolog function
from wandb.integration.diffusers import autolog

# call the autolog before calling the pipeline
autolog(init=dict(project="diffusers_logging"))

# Initialize the diffusion pipeline
pipeline = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-2-1", torch_dtype=torch.float16
).to("cuda")

# Define the prompts, negative prompts, and seed.
prompt = ["a photograph of an astronaut riding a horse", "a photograph of a dragon"]
negative_prompt = ["ugly, deformed", "ugly, deformed"]
generator = torch.Generator(device="cpu").manual_seed(10)

# call the pipeline to generate the images
images = pipeline(
    prompt,
    negative_prompt=negative_prompt,
    num_images_per_prompt=2,
    generator=generator,
)
import torch
from diffusers import DiffusionPipeline

import wandb

# import the autolog function
from wandb.integration.diffusers import autolog

# call the autolog before calling the pipeline
autolog(init=dict(project="diffusers_logging"))

# Initialize the diffusion pipeline
pipeline = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-2-1", torch_dtype=torch.float16
).to("cuda")

# Define the prompts, negative prompts, and seed.
prompt = ["a photograph of an astronaut riding a horse", "a photograph of a dragon"]
negative_prompt = ["ugly, deformed", "ugly, deformed"]
generator = torch.Generator(device="cpu").manual_seed(10)

# call the pipeline to generate the images
images = pipeline(
    prompt,
    negative_prompt=negative_prompt,
    num_images_per_prompt=2,
    generator=generator,
)

# Finish the experiment
wandb.finish()
  • 단일 실험의 결과:

    An example of how the results of your experiment are logged
  • 여러 실험의 결과:

    An example of how the results of your experiment are logged
  • 실험의 설정:

    An example of how the autolog logs the configs of your experiment

다중 파이프라인 워크플로우 추적

이 섹션에서는 StableDiffusionXLPipeline에서 생성된 잠재 변수가 해당 리파이너에 의해 개선되는 일반적인 Stable Diffusion XL + Refiner 워크플로우에서 autolog를 시연합니다.

import torch
from diffusers import StableDiffusionXLImg2ImgPipeline, StableDiffusionXLPipeline
from wandb.integration.diffusers import autolog

# initialize the SDXL base pipeline
base_pipeline = StableDiffusionXLPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    torch_dtype=torch.float16,
    variant="fp16",
    use_safetensors=True,
)
base_pipeline.enable_model_cpu_offload()

# initialize the SDXL refiner pipeline
refiner_pipeline = StableDiffusionXLImg2ImgPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-refiner-1.0",
    text_encoder_2=base_pipeline.text_encoder_2,
    vae=base_pipeline.vae,
    torch_dtype=torch.float16,
    use_safetensors=True,
    variant="fp16",
)
refiner_pipeline.enable_model_cpu_offload()

prompt = "a photo of an astronaut riding a horse on mars"
negative_prompt = "static, frame, painting, illustration, sd character, low quality, low resolution, greyscale, monochrome, nose, cropped, lowres, jpeg artifacts, deformed iris, deformed pupils, bad eyes, semi-realistic worst quality, bad lips, deformed mouth, deformed face, deformed fingers, deformed toes standing still, posing"

# Make the experiment reproducible by controlling randomness.
# The seed would be automatically logged to WandB.
seed = 42
generator_base = torch.Generator(device="cuda").manual_seed(seed)
generator_refiner = torch.Generator(device="cuda").manual_seed(seed)

# Call WandB Autolog for Diffusers. This would automatically log
# the prompts, generated images, pipeline architecture and all
# associated experiment configs to Weights & Biases, thus making your
# image generation experiments easy to reproduce, share and analyze.
autolog(init=dict(project="sdxl"))

# Call the base pipeline to generate the latents
image = base_pipeline(
    prompt=prompt,
    negative_prompt=negative_prompt,
    output_type="latent",
    generator=generator_base,
).images[0]

# Call the refiner pipeline to generate the refined image
image = refiner_pipeline(
    prompt=prompt,
    negative_prompt=negative_prompt,
    image=image[None, :],
    generator=generator_refiner,
).images[0]
import torch
from diffusers import StableDiffusionXLImg2ImgPipeline, StableDiffusionXLPipeline

import wandb
from wandb.integration.diffusers import autolog

# initialize the SDXL base pipeline
base_pipeline = StableDiffusionXLPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    torch_dtype=torch.float16,
    variant="fp16",
    use_safetensors=True,
)
base_pipeline.enable_model_cpu_offload()

# initialize the SDXL refiner pipeline
refiner_pipeline = StableDiffusionXLImg2ImgPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-refiner-1.0",
    text_encoder_2=base_pipeline.text_encoder_2,
    vae=base_pipeline.vae,
    torch_dtype=torch.float16,
    use_safetensors=True,
    variant="fp16",
)
refiner_pipeline.enable_model_cpu_offload()

prompt = "a photo of an astronaut riding a horse on mars"
negative_prompt = "static, frame, painting, illustration, sd character, low quality, low resolution, greyscale, monochrome, nose, cropped, lowres, jpeg artifacts, deformed iris, deformed pupils, bad eyes, semi-realistic worst quality, bad lips, deformed mouth, deformed face, deformed fingers, deformed toes standing still, posing"

# Make the experiment reproducible by controlling randomness.
# The seed would be automatically logged to WandB.
seed = 42
generator_base = torch.Generator(device="cuda").manual_seed(seed)
generator_refiner = torch.Generator(device="cuda").manual_seed(seed)

# Call WandB Autolog for Diffusers. This would automatically log
# the prompts, generated images, pipeline architecture and all
# associated experiment configs to Weights & Biases, thus making your
# image generation experiments easy to reproduce, share and analyze.
autolog(init=dict(project="sdxl"))

# Call the base pipeline to generate the latents
image = base_pipeline(
    prompt=prompt,
    negative_prompt=negative_prompt,
    output_type="latent",
    generator=generator_base,
).images[0]

# Call the refiner pipeline to generate the refined image
image = refiner_pipeline(
    prompt=prompt,
    negative_prompt=negative_prompt,
    image=image[None, :],
    generator=generator_refiner,
).images[0]

# Finish the experiment
wandb.finish()
  • Stable Diffisuion XL + Refiner 실험의 예: An example of how the autolog tracks an Stable Diffusion XL + Refiner experiment

추가 자료