MLOps

상태: Done 설명: + WandB 시작일: 2025/01/21

MLOps (머신러닝 운영)

Design

머신러닝을 구축하기 위한 여러 구성요소 (configuration)

  • Dataset : 머신러닝 모델을 학습 시키기 위한 데이터.
  • Metric : 모델의 성능을 측정을 위한 평가 지표.
  • Model : 해결하고자 하는 Task의 종류와 Data의 특성에 맞는 알고리즘.
  • Hyper-parameter : 모델링 성능을 높이기 위해 사용자가 직접 세팅해주는 값.

Model development

원하는 결과를 얻기 위해서는 여러가지 hyper-parameter 값을 변경하며 다양한 실험을 해야함

→ 여러 실험 결과를 비교하기 위해 정리하는 과정이 번거로울 수 있음

WandB

W and B (Weights & Biases)

→ 딥러닝 실험 과정을 손쉽게 Tracking하고, 시각화할 수 있는 Tool

  • hyperparameter별 결과 비교
  • 학습 과정 visualization
  • system 모니터링
  • 협업
  • 과거 실험 parameter 복제

우선 wandb 회원가입 진행 ([https://wandb.ai/site](https://wandb.ai/site))

wandb install

pip install wandb
pip3 install wandb  # pip가 없다고 뜨면 이걸로
wandb login

그 후 API Key를 입력하라고 함

→  [https://wandb.ai/authorize](https://wandb.ai/authorize) 에서 복사해서 붙여넣으면 됨

# 내 API Key
e60e3a61bebeec0beccabf93a087ef2fd3e8786f

Test

uailab-unist_ 이름의 팀에서 내 Project를 만들어보고 test 해보기

Create new project로 내 프로젝트를 만들어보자.

그럼 위 화면처럼 친절하게 첫 시작 방법을 알려준다.

로그인은 아까 했으니, 다음 코드를 바탕으로 코드를 짜보자.

wandb.init 이 중요하므로 다른 옵션도 추가해봤다.

import wandb
import random

wandb.login()

# start a new wandb run to track this script
wandb.init(
    # 프로젝트 이름
    project="tinyllm_hoon",

    # 팀 또는 사용자 이름
    # 이거 왜 안되는거지?
    # entity="hoonably",

    # 실험 이름
    name="test1",

    # 실행에 대한 설명
    notes="trainging test",

    # 실험을 그룹화하는 태그
    tags=["tag1", "tag2"],

    # offline mode로 실행하려면 mode="offline"으로 설정
    # mode="online",

    # hyperparameter 설정값
    config={
    "learning_rate": 0.02,
    "architecture": "CNN",
    "dataset": "CIFAR-100",
    "epochs": 10,
    }
)

# simulate training
epochs = 10
offset = random.random() / 5
for epoch in range(2, epochs):
    acc = 1 - 2 ** -epoch - random.random() / epoch - offset
    loss = 2 ** -epoch + random.random() / epoch + offset

    # log metrics to wandb
    wandb.log({"acc": acc, "loss": loss})

# [optional] finish the wandb run, necessary in notebooks
wandb.finish()

다음과 같이 성공하면, wandb 라는 폴더가 같은 디렉토리에 생성되며 로그가 남는다.

또한 동시에 wandb 페이지에 온라인으로도 결과가 전송되어 저장된다.

결과

다음과 같이 여러 결과를 비교할 수 있다.

💡

각 데이터가 10개만 보이는데,

톱니바퀴 누르고 Max runs to show를 올려주면 더 많은 데이터를 그래프로 비교할 수 있다.

Tag에 정보를 넣자

다음과 같이 정보를 넣으면 Tag를 눌러 비교하기 좋다.

# Device 설정
device = 'cuda' if torch.cuda.is_available() else 'cpu'

# GPU 모델명 확인
gpu_name = torch.cuda.get_device_name(0)

...

    run = wandb.init(
        project="TinyLLM",
        name=f"{model_name} in {dataset_name}",
        notes="",
        tags=[gpu_name, model_name, dataset_name],
        mode="online"
    )