🤖 AI/ML

Weights & Biases

WandB / W&B

ML 실험 추적 및 시각화 플랫폼. 하이퍼파라미터 최적화, 모델 버전 관리 지원.

📖 상세 설명

Weights & Biases(W&B, WandB)는 2017년 설립된 MLOps 플랫폼으로, 머신러닝 실험 추적, 모델 버전 관리, 하이퍼파라미터 최적화를 제공합니다. 이름은 신경망의 핵심 구성요소인 '가중치(Weights)'와 '편향(Biases)'에서 유래했습니다. OpenAI, NVIDIA, DeepMind 등 수천 개 AI 연구팀이 사용하는 업계 표준 도구입니다.

W&B가 등장하기 전, ML 엔지니어들은 실험 결과를 스프레드시트나 텍스트 파일로 관리했습니다. 이는 재현성 문제와 팀 협업의 어려움을 야기했습니다. W&B는 코드 한 줄만 추가하면 모든 실험 메트릭, 하이퍼파라미터, 코드 버전, 시스템 정보를 자동으로 기록하고 시각화합니다.

핵심 기능은 4가지입니다. Experiments(실험 추적)로 학습 손실, 정확도 등 메트릭을 실시간 대시보드로 확인합니다. Sweeps(하이퍼파라미터 튜닝)로 베이지안 최적화, 그리드 서치를 자동화합니다. Artifacts로 데이터셋과 모델 버전을 관리하고, Tables로 예측 결과를 인터랙티브하게 분석합니다.

실무에서 W&B는 PyTorch, TensorFlow, Hugging Face, LangChain 등 주요 프레임워크와 네이티브 통합됩니다. 2025년에는 LLM 추적(Weave), 프롬프트 엔지니어링 도구, 오픈소스 LLM 추론 서비스(W&B Inference)를 추가하여 생성형 AI 시대에 맞게 진화하고 있습니다.

💻 코드 예제

import wandb
import torch
import torch.nn as nn

# 1. W&B 초기화
wandb.init(
    project="my-ml-project",
    config={
        "learning_rate": 0.001,
        "epochs": 10,
        "batch_size": 32,
        "architecture": "ResNet18"
    }
)
config = wandb.config

# 2. 모델 정의
model = nn.Sequential(
    nn.Linear(784, 256),
    nn.ReLU(),
    nn.Linear(256, 10)
)

# 3. 학습 루프 with W&B 로깅
optimizer = torch.optim.Adam(model.parameters(), lr=config.learning_rate)
criterion = nn.CrossEntropyLoss()

for epoch in range(config.epochs):
    # 더미 학습 (실제로는 DataLoader 사용)
    x = torch.randn(config.batch_size, 784)
    y = torch.randint(0, 10, (config.batch_size,))

    optimizer.zero_grad()
    output = model(x)
    loss = criterion(output, y)
    loss.backward()
    optimizer.step()

    accuracy = (output.argmax(dim=1) == y).float().mean()

    # 메트릭 로깅
    wandb.log({
        "epoch": epoch,
        "train_loss": loss.item(),
        "train_accuracy": accuracy.item(),
        "learning_rate": optimizer.param_groups[0]["lr"]
    })

    print(f"Epoch {epoch}: loss={loss.item():.4f}, acc={accuracy.item():.4f}")

# 4. 모델 저장 (Artifact)
artifact = wandb.Artifact("model", type="model")
torch.save(model.state_dict(), "model.pt")
artifact.add_file("model.pt")
wandb.log_artifact(artifact)

# 5. 하이퍼파라미터 스윕 설정 예시
sweep_config = {
    "method": "bayes",  # bayes, grid, random
    "metric": {"name": "val_loss", "goal": "minimize"},
    "parameters": {
        "learning_rate": {"min": 0.0001, "max": 0.1},
        "batch_size": {"values": [16, 32, 64]},
        "epochs": {"value": 10}
    }
}

# sweep_id = wandb.sweep(sweep_config, project="my-ml-project")
# wandb.agent(sweep_id, train_function, count=20)

# 6. Hugging Face Transformers 통합
# from transformers import Trainer, TrainingArguments
#
# training_args = TrainingArguments(
#     output_dir="./results",
#     report_to="wandb",  # W&B 자동 통합
#     run_name="bert-finetune"
# )

wandb.finish()

📊 성능 & 비용

2025년 1월 기준 Weights & Biases 요금제

플랜 가격 특징 저장소
Free (개인) $0 5 모델 시트, 개인 프로젝트 전용 5GB
Pro (Teams) $50/user/월 500 추적 시간, 팀 협업 100GB
Enterprise ~$315-400/seat/월 무제한 추적, SSO, HIPAA 커스텀

추가 과금 (Pro 플랜)

  • 추가 추적 시간: $1/시간 (500시간 초과 시)
  • 추가 저장소: $0.03/GB (100GB 초과 시)
  • 10인 팀 연간 예상 비용: ~$6,000 + 초과 사용량
  • 학술 기관: 무료 Pro 라이선스 제공

2025년 신규 기능

  • W&B Weave: LLM 애플리케이션 추적 및 평가
  • W&B Inference (CoreWeave): GPT OSS, Llama 4, Qwen3 등 오픈소스 LLM API
  • Free/Pro 사용자에게 제한된 추론 크레딧 제공

🗣️ 실무에서 이렇게 말하세요

💬 회의에서

"W&B로 실험 추적하면 좋을 것 같아요. 지금 학습 결과를 노션에 수기로 기록하는데, wandb.init() 한 줄이면 메트릭, 하이퍼파라미터, 코드 버전까지 자동으로 기록됩니다. 나중에 재현도 쉽고요."

💬 면접에서

"실험 관리 어떻게 하세요?" - "W&B를 주로 씁니다. Sweeps로 하이퍼파라미터 튜닝 자동화하고, Artifacts로 모델 버전 관리해요. 팀원들이 대시보드에서 실시간으로 학습 상황을 확인할 수 있어서 협업이 편합니다."

💬 기술 토론에서

"W&B Weave로 LLM 파이프라인 추적하면 프롬프트 버전, 토큰 사용량, 레이턴시까지 다 보여요. LangSmith랑 비슷한데 기존 W&B 사용자면 통합이 더 편합니다."

⚠️ 흔한 실수 & 주의사항

Free 플랜으로 회사 프로젝트 진행

Free 플랜은 개인 프로젝트 전용이며 기업 사용이 금지되어 있습니다. 회사에서 사용하려면 Pro 이상 플랜이 필요합니다. 학술 연구는 무료 Pro 라이선스를 신청할 수 있습니다.

민감 데이터 로깅

wandb.log()에 고객 데이터나 API 키를 포함하면 클라우드에 업로드됩니다. 민감 정보는 필터링하거나, 엔터프라이즈 플랜의 셀프호스팅을 고려하세요. config에 API 키를 넣지 마세요.

오프라인 모드 활용

인터넷 없이 학습할 때는 WANDB_MODE=offline으로 설정하면 로컬에 저장됩니다. 나중에 wandb sync 명령으로 업로드할 수 있어요. GPU 서버에서 유용합니다.

🔗 관련 용어

📚 더 배우기