🤖

본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.

⚠️

본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.

이미지 로딩 중...

Weights & Biases 실험 추적 완벽 가이드 - 슬라이드 1/8
A

AI Generated

2025. 12. 2. · 66 Views

Weights & Biases 실험 추적 완벽 가이드

머신러닝 실험을 체계적으로 추적하고 관리하는 Weights & Biases의 핵심 기능을 다룹니다. 설정부터 팀 협업까지, 실무에서 바로 적용할 수 있는 내용을 담았습니다.


목차

  1. W&B 설정 및 초기화
  2. 실험 로깅하기
  3. Sweeps로 하이퍼파라미터 튜닝
  4. Artifacts 관리하기
  5. 모델 비교 및 분석
  6. 팀 협업 기능
  7. Dashboard 커스터마이징

1. W&B 설정 및 초기화

김개발 씨는 오늘도 모델을 학습시키며 터미널 출력을 열심히 복사해서 엑셀에 붙여넣고 있었습니다. 손실값, 정확도, 학습률...

매번 수동으로 기록하다 보니 실수도 잦았습니다. 그때 옆자리 박시니어 씨가 물었습니다.

"혹시 W&B 써보셨어요?"

Weights & Biases(줄여서 W&B)는 머신러닝 실험을 자동으로 추적하고 시각화해주는 도구입니다. 마치 비행기의 블랙박스처럼 모든 실험 과정을 기록해두어 나중에 언제든 되돌아볼 수 있게 해줍니다.

한 번 설정해두면 코드 몇 줄로 모든 실험을 체계적으로 관리할 수 있습니다.

다음 코드를 살펴봅시다.

# W&B 설치 및 초기화
import wandb

# API 키로 로그인 (최초 1회)
wandb.login(key="your-api-key")

# 새로운 실험 시작
run = wandb.init(
    project="my-ml-project",      # 프로젝트 이름
    name="baseline-experiment",    # 실험 이름
    config={                       # 하이퍼파라미터 설정
        "learning_rate": 0.001,
        "epochs": 100,
        "batch_size": 32
    }
)

# 실험 종료
wandb.finish()

김개발 씨는 입사 6개월 차 머신러닝 엔지니어입니다. 매일 다양한 모델을 실험하지만, 일주일 전에 좋은 결과를 냈던 하이퍼파라미터가 무엇이었는지 도무지 기억이 나지 않았습니다.

노트에 적어두었던 것 같은데, 어디에 적었는지도 모르겠습니다. 선배 개발자 박시니어 씨가 김개발 씨의 한숨 소리를 듣고 다가왔습니다.

"실험 관리가 안 되고 있구나. W&B를 한번 써봐.

인생이 달라질 거야." 그렇다면 Weights & Biases란 정확히 무엇일까요? 쉽게 비유하자면, W&B는 마치 과학자의 실험 노트와 같습니다.

화학자가 실험할 때마다 사용한 시약의 양, 온도, 시간을 꼼꼼히 기록하듯이, W&B는 머신러닝 실험의 모든 것을 자동으로 기록해줍니다. 더 놀라운 점은 이 기록이 클라우드에 저장되어 언제 어디서든 확인할 수 있다는 것입니다.

W&B가 없던 시절에는 어땠을까요? 개발자들은 터미널 출력을 복사해서 텍스트 파일에 저장하거나, 엑셀에 수동으로 입력해야 했습니다.

실험이 10개, 100개로 늘어나면 관리는 불가능에 가까워졌습니다. 더 큰 문제는 "지난주 목요일에 돌린 그 실험, 어떤 설정이었지?"라는 질문에 답할 수 없다는 것이었습니다.

바로 이런 문제를 해결하기 위해 W&B가 등장했습니다. W&B를 사용하려면 먼저 설치가 필요합니다.

pip install wandb 명령어 한 줄이면 됩니다. 설치 후 wandb.login()으로 계정을 연결하면 준비 완료입니다.

위의 코드를 한 줄씩 살펴보겠습니다. 먼저 **wandb.login()**은 여러분의 계정과 연결하는 과정입니다.

API 키는 W&B 웹사이트의 설정 페이지에서 찾을 수 있습니다. 한 번 로그인하면 컴퓨터에 저장되어 다시 입력할 필요가 없습니다.

**wandb.init()**이 핵심입니다. 이 함수를 호출하면 새로운 실험이 시작됩니다.

project는 관련 실험들을 묶는 폴더 이름이라고 생각하면 됩니다. name은 이 특정 실험의 별명입니다.

config 딕셔너리에는 이번 실험에서 사용할 하이퍼파라미터를 담습니다. 실제 현업에서는 어떻게 활용할까요?

예를 들어 이미지 분류 모델을 개발한다고 가정해봅시다. 매일 다른 모델 구조와 하이퍼파라미터로 실험을 진행합니다.

W&B를 사용하면 모든 실험이 자동으로 기록되고, 웹 대시보드에서 한눈에 비교할 수 있습니다. 하지만 주의할 점도 있습니다.

초보 개발자들이 흔히 하는 실수 중 하나는 **wandb.finish()**를 호출하지 않는 것입니다. 실험이 끝나면 반드시 finish()를 호출해야 데이터가 제대로 동기화됩니다.

Jupyter Notebook에서는 특히 이 부분을 잊기 쉬우니 주의하세요. 다시 김개발 씨의 이야기로 돌아가 봅시다.

박시니어 씨의 조언대로 W&B를 설정한 김개발 씨는 감탄했습니다. "이렇게 간단한 거였어요?" W&B 초기화를 제대로 이해하면 실험 관리의 첫 단추를 잘 끼울 수 있습니다.

다음 장에서는 실제로 데이터를 로깅하는 방법을 알아보겠습니다.

실전 팁

💡 - wandb.init()의 config는 나중에 실험을 필터링하는 데 유용하니 상세하게 작성하세요

  • 팀 프로젝트라면 entity 파라미터로 팀 이름을 지정하세요

2. 실험 로깅하기

W&B 설정을 마친 김개발 씨는 이제 학습 과정을 기록할 차례입니다. 매 에폭마다 손실값과 정확도가 출력되는데, 이것들을 어떻게 W&B에 보내야 할까요?

박시니어 씨가 웃으며 말했습니다. "wandb.log() 한 줄이면 돼."

**wandb.log()**는 실험 중 발생하는 모든 지표를 기록하는 함수입니다. 마치 일기장에 오늘 있었던 일을 적듯이, 학습 과정에서 발생하는 손실값, 정확도, 이미지 등을 기록할 수 있습니다.

기록된 데이터는 실시간으로 웹 대시보드에 그래프로 표시됩니다.

다음 코드를 살펴봅시다.

import wandb

wandb.init(project="image-classifier")

# 학습 루프
for epoch in range(100):
    train_loss = train_one_epoch(model, train_loader)
    val_loss, val_acc = evaluate(model, val_loader)

    # 지표 로깅 - 핵심!
    wandb.log({
        "epoch": epoch,
        "train_loss": train_loss,
        "val_loss": val_loss,
        "val_accuracy": val_acc,
        "learning_rate": optimizer.param_groups[0]['lr']
    })

# 이미지 로깅도 가능
wandb.log({"predictions": wandb.Image(img, caption="예측 결과")})

김개발 씨는 W&B 초기화를 성공적으로 마쳤습니다. 하지만 여전히 터미널에만 출력되는 숫자들을 바라보고 있었습니다.

"초기화는 했는데, 이 숫자들을 어떻게 W&B로 보내지?" 박시니어 씨가 화면을 가리키며 설명을 시작했습니다. "가장 중요한 함수는 wandb.log()야.

이것만 알면 90%는 끝난 거야." **wandb.log()**는 어떻게 동작할까요? 쉽게 비유하자면, wandb.log()는 마치 택배 발송과 같습니다.

여러분이 보내고 싶은 데이터를 딕셔너리 상자에 담아서 W&B 서버로 보내는 것입니다. 서버에 도착한 데이터는 자동으로 정리되어 예쁜 그래프로 변환됩니다.

학습 루프 안에서 wandb.log()를 호출할 때마다 하나의 스텝이 기록됩니다. W&B는 이 스텝을 기준으로 시간 순서대로 그래프를 그려줍니다.

에폭, 배치, 또는 어떤 단위로든 원하는 시점에 로깅할 수 있습니다. 위의 코드를 자세히 살펴보겠습니다.

학습 루프 안에서 wandb.log()에 딕셔너리를 전달합니다. 키는 그래프의 이름이 되고, 값은 해당 시점의 측정값입니다.

train_loss, val_loss, val_accuracy처럼 여러 지표를 한 번에 로깅할 수 있습니다. 특히 주목할 점은 learning_rate도 함께 로깅한다는 것입니다.

학습률 스케줄러를 사용할 때 학습률이 어떻게 변하는지 시각적으로 확인할 수 있어 매우 유용합니다. W&B의 강력한 기능 중 하나는 이미지 로깅입니다.

wandb.Image()를 사용하면 모델의 예측 결과, 혼동 행렬, 특성 맵 등을 이미지로 저장할 수 있습니다. 나중에 "이 모델이 어떤 이미지에서 틀렸지?"라는 질문에 바로 답할 수 있습니다.

실제 현업에서는 더 다양한 데이터를 로깅합니다. 오디오, 비디오, 3D 객체, HTML까지 지원됩니다.

추천 시스템이라면 추천 결과 테이블을, 객체 탐지라면 바운딩 박스가 그려진 이미지를 로깅할 수 있습니다. 주의할 점이 있습니다.

너무 자주 로깅하면 학습 속도가 느려질 수 있습니다. 매 배치마다 로깅하기보다는 100배치마다, 또는 에폭마다 로깅하는 것이 좋습니다.

또한 큰 이미지를 매번 로깅하면 저장 공간을 많이 차지하니 주의하세요. 김개발 씨는 코드에 wandb.log()를 추가하고 학습을 시작했습니다.

브라우저에서 W&B 대시보드를 열자, 실시간으로 그래프가 그려지고 있었습니다. "와, 이거 진짜 편하다!" wandb.log()를 마스터하면 실험의 모든 순간을 포착할 수 있습니다.

다음 장에서는 하이퍼파라미터 튜닝을 자동화하는 Sweeps를 알아보겠습니다.

실전 팁

💡 - 로깅 빈도를 조절하려면 step 파라미터를 명시적으로 사용하세요

  • wandb.Table()을 사용하면 구조화된 데이터를 표 형태로 로깅할 수 있습니다

3. Sweeps로 하이퍼파라미터 튜닝

김개발 씨는 고민에 빠졌습니다. 학습률은 0.001로 할까, 0.0001로 할까?

배치 크기는 32? 64?

128? 모든 조합을 직접 실험하려니 시간이 턱없이 부족했습니다.

박시니어 씨가 힌트를 줬습니다. "Sweeps 써봐.

컴퓨터가 알아서 찾아줄 거야."

Sweeps는 하이퍼파라미터 탐색을 자동화하는 W&B의 기능입니다. 마치 금속 탐지기로 해변을 훑듯이, 가능한 하이퍼파라미터 조합을 체계적으로 탐색하여 최적의 설정을 찾아줍니다.

그리드 탐색, 랜덤 탐색, 베이지안 최적화 등 다양한 전략을 지원합니다.

다음 코드를 살펴봅시다.

import wandb

# Sweep 설정 정의
sweep_config = {
    "method": "bayes",           # 베이지안 최적화
    "metric": {
        "name": "val_accuracy",
        "goal": "maximize"       # 정확도 최대화
    },
    "parameters": {
        "learning_rate": {
            "min": 0.0001,
            "max": 0.1
        },
        "batch_size": {
            "values": [16, 32, 64, 128]
        },
        "optimizer": {
            "values": ["adam", "sgd", "rmsprop"]
        }
    }
}

# Sweep 생성
sweep_id = wandb.sweep(sweep_config, project="my-project")

# 에이전트 실행 (학습 함수 전달)
wandb.agent(sweep_id, function=train, count=50)

김개발 씨는 지난 이틀 동안 수동으로 하이퍼파라미터를 바꿔가며 실험했습니다. 학습률 5종류, 배치 크기 4종류, 옵티마이저 3종류.

총 60가지 조합입니다. 하나당 30분씩만 걸려도 30시간이 필요합니다.

박시니어 씨가 김개발 씨의 지친 얼굴을 보며 말했습니다. "그렇게 하나하나 돌리고 있었어?

Sweeps를 쓰면 자동으로 해주는데." Sweeps란 무엇일까요? 쉽게 비유하자면, Sweeps는 마치 네비게이션과 같습니다.

목적지(최고 성능)를 알려주면, 네비게이션이 여러 경로를 탐색해서 최적의 길을 찾아주듯이, Sweeps도 다양한 하이퍼파라미터 조합을 시도하며 최적의 설정을 찾아줍니다. Sweeps는 세 가지 탐색 방법을 제공합니다.

첫 번째는 grid 방식입니다. 모든 가능한 조합을 빠짐없이 시도합니다.

확실하지만 조합이 많으면 시간이 오래 걸립니다. 두 번째는 random 방식입니다.

무작위로 조합을 선택합니다. 의외로 효율적이라서 많이 사용됩니다.

세 번째는 bayes 방식입니다. 이전 실험 결과를 분석하여 더 좋은 결과가 나올 것 같은 영역을 집중적으로 탐색합니다.

가장 똑똑한 방법입니다. 위의 코드를 살펴보겠습니다.

sweep_config 딕셔너리에서 method를 bayes로 설정했습니다. metric에는 최적화할 지표와 목표를 정의합니다.

여기서는 val_accuracy를 maximize하도록 설정했습니다. parameters에는 탐색할 하이퍼파라미터를 정의합니다.

learning_rate는 0.0001에서 0.1 사이의 연속적인 값을, batch_size와 optimizer는 미리 정의한 값들 중에서 선택합니다. **wandb.sweep()**으로 Sweep을 생성하면 고유한 ID가 반환됩니다.

이 ID를 **wandb.agent()**에 전달하면 자동으로 실험이 시작됩니다. count 파라미터로 총 실험 횟수를 제한할 수 있습니다.

실제 현업에서는 여러 대의 컴퓨터에서 동시에 agent를 실행하기도 합니다. 같은 sweep_id를 사용하면 W&B가 작업을 자동으로 분배해줍니다.

주의할 점이 있습니다. 탐색 범위를 너무 넓게 설정하면 비효율적입니다.

학습률을 0.00001에서 1까지 설정하면 대부분의 실험이 실패할 것입니다. 어느 정도 합리적인 범위를 먼저 정하고 Sweep을 시작하세요.

김개발 씨는 Sweep을 설정하고 퇴근했습니다. 다음 날 출근해보니 50개의 실험이 완료되어 있었고, 최고 성능 설정이 명확하게 표시되어 있었습니다.

"이게 바로 일잘러의 비결이구나!"

실전 팁

💡 - early_terminate 설정으로 성능이 나쁜 실험을 조기 종료할 수 있습니다

  • 처음에는 random으로 넓게 탐색한 후, 유망한 영역에서 bayes로 정밀 탐색하세요

4. Artifacts 관리하기

김개발 씨는 드디어 만족스러운 모델을 만들었습니다. 그런데 일주일 후, 동료가 물었습니다.

"그 모델 학습할 때 어떤 데이터셋 썼어?" 김개발 씨는 기억이 나지 않았습니다. 박시니어 씨가 말했습니다.

"Artifacts로 관리했으면 이런 일 없었을 텐데."

Artifacts는 모델, 데이터셋, 코드 등의 파일을 버전 관리하고 추적하는 기능입니다. 마치 택배 송장처럼 모든 파일에 고유한 버전과 출처 정보가 붙어서, 어떤 데이터로 어떤 모델이 만들어졌는지 완벽하게 추적할 수 있습니다.

다음 코드를 살펴봅시다.

import wandb

run = wandb.init(project="my-project")

# 데이터셋 Artifact 생성 및 로깅
dataset_artifact = wandb.Artifact(
    name="training-data",
    type="dataset",
    description="2024년 1분기 학습 데이터"
)
dataset_artifact.add_dir("./data/train")
run.log_artifact(dataset_artifact)

# 모델 Artifact 생성 및 로깅
model_artifact = wandb.Artifact(
    name="classifier-model",
    type="model"
)
model_artifact.add_file("./models/best_model.pth")
run.log_artifact(model_artifact)

# 다른 실험에서 Artifact 다운로드
artifact = run.use_artifact("training-data:v2")
data_dir = artifact.download()

김개발 씨는 괴로웠습니다. 분명히 좋은 성능을 냈던 모델인데, 그때 사용한 데이터 전처리 코드가 어디 있는지 모르겠습니다.

모델 파일은 있는데, 이게 어떤 버전의 데이터로 학습된 건지도 불확실합니다. 박시니어 씨가 진지하게 말했습니다.

"모델 재현성은 ML 엔지니어에게 생명과도 같아. Artifacts로 관리하지 않으면 나중에 반드시 후회하게 돼." Artifacts는 어떤 문제를 해결할까요?

머신러닝에서는 많은 것들이 서로 연결되어 있습니다. 원본 데이터가 있고, 전처리된 데이터가 있고, 그걸로 학습된 모델이 있고, 그 모델을 평가한 결과가 있습니다.

이 모든 것의 연결 고리를 추적하는 것이 Artifacts입니다. 쉽게 비유하자면, Artifacts는 마치 족보와 같습니다.

이 모델의 부모는 어떤 데이터이고, 그 데이터의 조상은 어떤 원본 파일인지 계보를 추적할 수 있습니다. 위의 코드를 살펴보겠습니다.

**wandb.Artifact()**로 새로운 Artifact를 생성합니다. name은 이름, type은 종류(dataset, model, code 등)입니다.

add_dir()로 폴더 전체를, add_file()로 특정 파일을 추가합니다. **run.log_artifact()**를 호출하면 해당 파일들이 W&B 서버에 업로드됩니다.

같은 이름으로 다시 로깅하면 자동으로 버전이 올라갑니다. v1, v2, v3처럼요.

다른 실험에서 이 파일이 필요할 때는 **run.use_artifact()**로 다운로드합니다. "training-data:v2"처럼 특정 버전을 지정하거나, "training-data:latest"로 최신 버전을 가져올 수 있습니다.

특히 강력한 기능은 의존성 추적입니다. use_artifact()로 데이터를 가져와서 모델을 학습하면, W&B는 "이 모델은 저 데이터로 만들어졌다"는 관계를 자동으로 기록합니다.

나중에 그래프로 시각화할 수도 있습니다. 실제 현업에서 Artifacts는 필수입니다.

"프로덕션 모델에 버그가 있어! 이전 버전으로 롤백해!"라는 상황을 상상해보세요.

Artifacts가 없다면 이전 버전 모델이 어디 있는지, 그게 어떤 데이터로 학습됐는지 찾느라 헤맬 것입니다. Artifacts가 있다면 버전만 지정해서 바로 복원할 수 있습니다.

김개발 씨는 그날부터 모든 데이터셋과 모델을 Artifacts로 관리하기 시작했습니다. 한 달 후, 과거 실험을 재현해야 할 일이 생겼을 때 단 5분 만에 해결할 수 있었습니다.

실전 팁

💡 - 대용량 데이터셋은 참조만 로깅하고 실제 파일은 별도 스토리지에 보관하세요

  • 모델 체크포인트는 best와 latest를 따로 관리하면 편리합니다

5. 모델 비교 및 분석

김개발 씨 앞에는 100개가 넘는 실험 결과가 쌓여 있었습니다. ResNet도 있고, EfficientNet도 있고, 직접 만든 모델도 있습니다.

어떤 게 가장 좋은 건지 눈으로 비교하기엔 너무 많았습니다. 박시니어 씨가 대시보드를 열며 말했습니다.

"비교 기능을 써봐."

W&B의 비교 및 분석 기능은 수십, 수백 개의 실험을 한눈에 비교할 수 있게 해줍니다. 마치 엑셀의 필터와 정렬 기능처럼, 원하는 조건으로 실험을 필터링하고 정렬하여 최적의 모델을 빠르게 찾을 수 있습니다.

다음 코드를 살펴봅시다.

import wandb

# 실험 결과 조회 (API 활용)
api = wandb.Api()
runs = api.runs("username/my-project")

# 특정 조건으로 필터링
best_runs = [run for run in runs
             if run.config.get("optimizer") == "adam"
             and run.summary.get("val_accuracy", 0) > 0.9]

# 결과 비교 출력
for run in sorted(best_runs,
                  key=lambda x: x.summary.get("val_accuracy", 0),
                  reverse=True)[:5]:
    print(f"{run.name}: {run.summary['val_accuracy']:.4f}")
    print(f"  Config: lr={run.config['learning_rate']}")

# 웹 UI에서 비교 테이블 생성
# Runs 페이지에서 원하는 실험 선택 후 Compare 버튼 클릭

김개발 씨는 한 달간 열심히 실험했습니다. 그 결과, W&B 대시보드에는 무려 247개의 실험이 쌓여 있었습니다.

이제 보고서를 작성해야 하는데, 어디서부터 시작해야 할지 막막했습니다. 박시니어 씨가 노트북을 가져오며 말했습니다.

"W&B 비교 기능을 안 써봤구나. 이거 쓰면 5분이면 돼." W&B 웹 대시보드에는 강력한 비교 도구가 내장되어 있습니다.

테이블 뷰에서는 모든 실험을 스프레드시트처럼 볼 수 있습니다. 컬럼을 추가하거나 숨기고, 원하는 조건으로 필터링하고, 특정 지표로 정렬할 수 있습니다.

val_accuracy가 0.9 이상인 실험만 보고 싶다면, 필터를 추가하면 됩니다. 여러 실험을 선택하고 Compare 버튼을 누르면 비교 페이지로 이동합니다.

여기서는 선택한 실험들의 학습 곡선을 겹쳐서 볼 수 있습니다. 어떤 모델이 더 빨리 수렴하는지, 어떤 모델이 과적합되는지 한눈에 파악할 수 있습니다.

Parallel Coordinates 차트도 유용합니다. 하이퍼파라미터와 결과 지표를 동시에 시각화하여, 어떤 하이퍼파라미터 조합이 좋은 결과를 내는지 패턴을 발견할 수 있습니다.

위의 코드처럼 API를 사용하면 프로그래밍 방식으로 분석할 수도 있습니다. wandb.Api()로 API 클라이언트를 생성하고, api.runs()로 프로젝트의 모든 실험을 가져옵니다.

Python의 리스트 컴프리헨션과 조합하면 원하는 조건의 실험만 필터링할 수 있습니다. 실제 현업에서는 이런 상황이 자주 발생합니다.

"지난 달에 진행한 실험 중에서 batch_size가 64이고 정확도가 90% 이상인 것만 골라서 재현해줘." 이런 요청이 들어왔을 때, W&B 없이는 하나하나 수동으로 찾아야 합니다. W&B가 있다면 필터 몇 번으로 해결됩니다.

김개발 씨는 비교 기능을 사용해서 top 5 모델을 빠르게 식별했습니다. 그리고 그 모델들의 공통점도 발견했습니다.

"아, 학습률이 0.001 근처일 때 성능이 좋구나!" 모델 비교를 마스터하면 데이터에서 인사이트를 빠르게 추출할 수 있습니다.

실전 팁

💡 - 자주 사용하는 필터 조건은 저장해두면 재사용할 수 있습니다

  • 중요한 실험에는 태그를 달아서 나중에 쉽게 찾으세요

6. 팀 협업 기능

김개발 씨의 프로젝트가 커지면서 팀원이 3명 더 합류했습니다. 각자 실험을 진행하는데, 누가 어떤 실험을 하고 있는지 파악하기 어려웠습니다.

중복 실험도 발생했습니다. 박시니어 씨가 말했습니다.

"W&B 팀 기능을 제대로 활용해야 할 때야."

W&B의 팀 협업 기능은 여러 사람이 함께 실험을 관리하고 공유할 수 있게 해줍니다. 마치 구글 독스에서 문서를 함께 편집하듯이, 팀원들의 모든 실험이 한 곳에 모이고, 코멘트를 달고, 인사이트를 공유할 수 있습니다.

다음 코드를 살펴봅시다.

import wandb

# 팀 프로젝트로 실험 시작
run = wandb.init(
    entity="our-team",           # 팀 이름
    project="shared-project",
    name="experiment-by-kim",
    notes="새로운 데이터 증강 기법 테스트",  # 실험 메모
    tags=["augmentation", "resnet"]          # 태그 추가
)

# 실험 중간에 알림 보내기
wandb.alert(
    title="학습 완료!",
    text=f"최종 정확도: {final_accuracy:.2%}",
    level=wandb.AlertLevel.INFO
)

# Report 생성 (코드 또는 UI에서)
# UI에서: Reports 탭 > Create Report
# 실험 그래프, 테이블, 마크다운 설명을 조합하여 문서 생성

김개발 씨의 팀은 혼란스러웠습니다. 박주니어 씨가 이미 해본 실험을 이대리 씨가 다시 하고 있었고, 좋은 결과가 나와도 다른 팀원이 모르는 경우가 많았습니다.

매주 하는 미팅에서 각자 엑셀 파일을 공유하는 것도 번거로웠습니다. 박시니어 씨가 팀 미팅에서 제안했습니다.

"W&B 팀 워크스페이스를 만들자. 모든 실험이 한 곳에 모이면 이런 문제가 해결돼." W&B에서 을 만들면 무엇이 달라질까요?

모든 팀원의 실험이 같은 대시보드에 표시됩니다. 누가 언제 어떤 실험을 했는지 한눈에 볼 수 있습니다.

다른 사람의 실험에 코멘트를 달 수도 있습니다. "이 부분 왜 이렇게 했어?"라고 직접 물어볼 수 있는 것입니다.

위의 코드에서 entity 파라미터가 핵심입니다. 개인 계정 대신 팀 이름을 entity로 지정하면, 해당 실험이 팀 워크스페이스에 기록됩니다.

팀원 모두가 이 실험을 보고, 비교하고, 분석할 수 있습니다. notes는 실험에 대한 메모입니다.

"새로운 데이터 증강 기법 테스트"처럼 이 실험의 목적을 적어두면 나중에 다른 팀원이 이해하기 쉽습니다. tags는 실험을 분류하는 라벨입니다.

"augmentation", "resnet"처럼 관련 키워드를 붙여두면 검색과 필터링에 유용합니다. **wandb.alert()**는 팀 채널로 알림을 보내는 기능입니다.

긴 학습이 끝났을 때, 혹은 성능이 목표치를 달성했을 때 자동으로 알림을 보낼 수 있습니다. Slack이나 이메일과 연동할 수도 있습니다.

Reports는 W&B의 숨은 보석입니다. 실험 그래프, 테이블, 이미지를 마크다운 설명과 함께 문서로 만들 수 있습니다.

주간 보고서, 실험 결과 정리, 모델 비교 분석 등을 Reports로 작성하면 팀원들과 쉽게 공유할 수 있습니다. 김개발 씨 팀은 W&B 팀 워크스페이스를 도입한 후 생산성이 크게 올랐습니다.

중복 실험이 사라졌고, 좋은 아이디어가 빠르게 공유되었습니다. 주간 미팅도 W&B 대시보드를 화면 공유하며 진행하니 훨씬 효율적이었습니다.

실전 팁

💡 - 실험 시작 전에 팀원들과 태그 컨벤션을 정해두면 나중에 검색이 편합니다

  • 중요한 실험은 별표로 표시해두면 눈에 잘 띕니다

7. Dashboard 커스터마이징

김개발 씨는 이제 W&B의 기본 기능을 잘 활용하고 있었습니다. 하지만 대시보드가 너무 복잡해 보였습니다.

필요한 정보만 한눈에 보고 싶었습니다. 박시니어 씨가 말했습니다.

"대시보드를 커스터마이징할 수 있어. 네 필요에 맞게 꾸며봐."

W&B Dashboard 커스터마이징은 자신만의 모니터링 화면을 만드는 기능입니다. 마치 자동차 계기판을 취향에 맞게 배치하듯이, 필요한 그래프와 지표만 선택해서 나만의 대시보드를 구성할 수 있습니다.

다음 코드를 살펴봅시다.

import wandb

# 커스텀 차트 정의 (Vega-Lite 스펙 사용)
wandb.init(project="custom-dashboard")

# 커스텀 메트릭 로깅
wandb.log({
    "custom/train_loss": train_loss,
    "custom/val_metrics": {
        "accuracy": val_acc,
        "precision": precision,
        "recall": recall
    }
})

# 히스토그램 로깅
wandb.log({
    "weight_distribution": wandb.Histogram(model.fc.weight.data)
})

# 커스텀 테이블
table = wandb.Table(columns=["image", "prediction", "ground_truth"])
table.add_data(wandb.Image(img), pred_label, true_label)
wandb.log({"predictions_table": table})

# 대시보드 설정은 웹 UI에서:
# Workspace > Add Panel > 원하는 시각화 선택

김개발 씨의 대시보드에는 그래프가 20개나 있었습니다. 스크롤을 내려야 원하는 정보를 찾을 수 있었고, 정작 중요한 지표는 눈에 잘 들어오지 않았습니다.

박시니어 씨가 화면을 보며 말했습니다. "이렇게 복잡하면 오히려 비효율적이야.

정말 필요한 정보만 보이도록 정리해봐." W&B 대시보드는 완전히 커스터마이징이 가능합니다. Workspace는 그래프들을 배치하는 공간입니다.

기본 Workspace 외에도 새로운 Workspace를 만들 수 있습니다. "학습 모니터링용", "성능 비교용"처럼 목적별로 다른 대시보드를 구성할 수 있습니다.

Panel은 개별 그래프나 시각화 요소입니다. Add Panel 버튼을 클릭하면 다양한 종류의 패널을 추가할 수 있습니다.

라인 차트, 막대 차트, 히스토그램, 테이블 등이 있습니다. 패널의 크기와 위치도 자유롭게 조절할 수 있습니다.

드래그 앤 드롭으로 원하는 대로 배치하세요. 중요한 지표는 크게, 참고용 지표는 작게 만들면 됩니다.

위의 코드에서 네임스페이스를 주목하세요. "custom/train_loss"처럼 슬래시로 구분하면 관련 지표들이 그룹화됩니다.

대시보드에서도 이 그룹별로 정리되어 표시됩니다. **wandb.Histogram()**은 분포를 시각화합니다.

가중치 분포, 그레이디언트 분포 등을 확인할 때 유용합니다. 학습이 진행되면서 분포가 어떻게 변하는지 추적할 수 있습니다.

**wandb.Table()**은 구조화된 데이터를 표로 보여줍니다. 예측 결과 샘플, 오류 케이스 분석 등에 활용합니다.

실제 현업에서 효과적인 대시보드 구성 팁을 알려드리겠습니다. 첫째, 가장 중요한 지표를 맨 위에 배치합니다.

보통 손실값과 주요 성능 지표가 여기에 해당합니다. 둘째, 관련 있는 그래프는 나란히 배치합니다.

train_loss와 val_loss는 함께 보는 것이 좋습니다. 셋째, 너무 많은 패널을 추가하지 않습니다.

정보 과부하는 오히려 판단을 흐리게 합니다. 김개발 씨는 대시보드를 정리했습니다.

핵심 지표 3개는 크게, 나머지는 탭으로 숨겼습니다. 한눈에 학습 상태를 파악할 수 있게 되었습니다.

"이제 진짜 프로 같아 보이네!" W&B 대시보드 커스터마이징을 마스터하면 실험 모니터링이 한결 편해집니다. 지금까지 배운 내용을 실제 프로젝트에 적용해보세요.

실전 팁

💡 - Section을 활용하면 패널들을 논리적으로 그룹화할 수 있습니다

  • 자주 사용하는 대시보드 구성은 템플릿으로 저장해두세요

이상으로 학습을 마칩니다. 위 내용을 직접 코드로 작성해보면서 익혀보세요!

#Python#WandB#MLOps#ExperimentTracking#Hyperparameter#ModelManagement#MLOps,WandB,Tracking

댓글 (0)

댓글을 작성하려면 로그인이 필요합니다.

함께 보면 좋은 카드 뉴스