wandb 사용법

2024. 2. 8. 19:55·알쓸신잡

오늘은 wandb에 대해서 작성해보고자 한다. 

Wandb(Weight & Bias)는 딥러닝 실험 과정들을 쉽게 Tracking 하고 시각화할 수 있게 도와주는 tool이다. 

아래와 같이 다양한 framework와 기능들을 제공한다. 

 

아래는 좀 주저리주저리 써놓은 것이고 간단한 코드 사용법은 따로 작성하여 첨부하도록 하겠다

사실 wandb 사이트에서 자세한 설명도 제공하기 때문에 내가 실용적으로 사용하는 기능들에 대해서만 소개해보도록 할 것이다. 

1. wandb.init()

우선 wandb에 2개의 큰 틀이 `project`와 `run`이다. 말 그대로 특정 프로젝트별로 나눌 수 있으며, run은 해당 프로젝트 안에서 기록하는 하나하나를 의미한다. 

wandb를 이용하고자 한다면 아래 코드를 이용하여 프로젝트를 생성하고 init 하면 된다.

맨 처음 wandb를 init 하게 되면 아마 로그인을 하라고 뜰 텐데 요구하는 대로 사이트에서 인증코드를 입력하여 붙여 넣어주면 다음부터는 알아서 로그인된다.(인증코드를 복붙 해도 안 보이는 게 정상) 

import wandb
wandb.init(project="project name")

위와 같이 init안에 프로젝트 명을 작성해주면 웹에서도 해당 프로젝트가 생성된 것을 확인할 수 있다.

추가적으로 init안에 추가적인 파라미터들도 존재하는데, 너무 많기 때문에 필수적이고 중요한 것에 대해서만 알아보자.

전체 init에 대한 링크는 docs <-여기를 클릭하면 된다. 

1-1. entity

https://docs.wandb.ai/ref/python/init

wandb에는 개인, 팀 으로 프로젝트를 생성할 수 있는데 개인은 100GB 무료 제공이고, 팀은 아마 유료로 알고 있다.(처음 생성 시 무료 N시간 제공)

개인과 팀 두개를 다 가지고 있을 때 그냥 `init`을 사용하면 자기가 사용하던 것으로 자동으로 연결되기 때문에 이 `entity`파라미터를 이용하여 팀으로 할지 개인으로 할지 연결해줘야 한다. 팀명 혹은 유저명을 이용하여 연결하면 된다고 한다.

`wandb.init(project='project name', entity='entity name')`

1-2. wandb.config

config는 해당 run에 대한 세팅값을 작성해 놓는 칸이다. 보통 config에 파라미터들을 지정해 놓은 다음 각 모델을 학습할 기록할 때도 해당 config의 값을 가져와서 사용하는 방식을 주로 쓴다. config는 딕셔너리형태로 작성해야 한다. 

CONFIG={
 "model":model_s,
 "learning_rate": 1e-3,
 "epochs": 100,
 "image_size":image_s,
 "aug_img":AUG_BOOL,
 "batch_size":batch_s,
}
wandb.init(project=PROJECT_NAME,config=CONFIG)

보통 이렇게 정의하고 아래와 같이 모델에 파라미터를 넣어 사용하는 방식을 주로 쓴다.

딕셔너리의 형태로만 구성하면 되고 원하는 이름으로 지정해 주면 된다. 

w_config=wandb.config

w_config.lr
w_config.bathch_size 
..

이렇게 init에 지정해 줘도 되고 추후에 `wandb.config. 변수명 = 값` 이런 식을 통해서 추가해 줄 수도 있고 한 번에 update 하기 위해서는 `wandb.cofig.update(딕셔너리)` 이런 식으로 하면 된다. 

1-3. name

위에서 project와 run으로 구분된다고 했는데, 우선 하나의 run을 실행할 때마다 init을 해주고 마지막에 finish를 해주는데 해당 run의 이름을 지정해주지 않으면 랜덤으로 지정되어 헷갈린다. 

따라서 이것도 `name` 파라미터를 이용하여 지정해 주면 아래와 같이 각 run별로 어떤 실험이었는지 알아볼 수 있다. 

(따로 파라미터를 지정해주지 않고 추후에 웹에서 직접 바꿔줄 수도 있다.)

1-4. tag

tag도 마찬가지로 각 run별로 특징들을 tag 형식으로 간단하게 지정할 수 있는 방법이다. 

tag는 리스트형식으로 만들어주면 되고 name과 동일하게 웹에서 추후에 바꿔줄 수 있다. 

TAG=["batch=32",f"lr={w_config.lr}"]

1-4. id

wandb는 run마다 `wandb.init()`을 하고 `wandb.finish()`를 해야 한다고 했는데, finish 되어 종료된 run에 특정 로그나 파일을 추가하기 위해서는 웹에 들어가서 해당 run의 id를 확인하고 새로 `wandb.init()`을 할 때 name이 아닌 id를 확인한 id로 넣어주면 해당 run을 다시 불러올 수 있다. 저 맨뒤에 있는 `w5 qn60 tz`가 해당 run id이다. 

2. wandb.log

`wandb.log`이다. 말 그대로 특정 로그들을 기록해 주는 것으로,

monitoring_value = {
 'train_loss': train_loss, 'train_accuracy': train_accuracy, 'train_f1': train_f1, 
'valid_loss': valid_loss, 'valid_accuracy': valid_accuracy, 'valid_f1': valid_f1, 
}
wandb.log(monitoring_value, step=epoch)

위와 같이 로그명:로그 할 내용 이런 식으로 저장해 주고 log를 넣고 step도 지정해 줄 수 있다. 

그렇게 되면 아래와 같이 각 그래프는 각 run을 의미하며, 방금 전에 log에 작성해 준 것들이 epoch별로 기록되어 그래프로 나타나는 것을 볼 수 있다. 

3. wandb.Image()

다음으로 cv 프로젝트 등을 할 때 유용하게 사용되는 Image이다. 

images=[]
images.append(wandb.Image(data[0], caption="Pred: {} Truth: {}".format(pred[0].item(), target[0])))
wandb.log({"Image": images})

위와 같이 비어있는 리스트에 wandb.Image를 이용하여 이미지를 추가할 수 있고 옵션으로 caption 등을 달 수도 있다. 

이렇게 만들어진 리스트를 log로 찍어주면 아래와 같이 웹에서 이미지도 확인할 수 있다. 참고로 108개의 이미지가 최대이다.

4. model 저장

아래와 같이 해당 프로젝트에 모델을 저장하는 방법도 있다. 

 

PyTorch에서 모델을 저장하고 로드하는 방법

이 튜토리얼에서는 PyTorch에서 트레이닝 된 모델을 올바르게 저장하고 로드하는 방법을 배울 수 있습니다. Made by Dave Davies using Weights & Biases

wandb.ai

artifact = wandb.Artifact('model', type='model')
artifact.add_file(f"model/resnet50.pt")
wandb.log_artifact(artifact)

5. wandb.finish()

위에서도 계속 말했듯이 run이 끝날 때 finish()를 이용하여 정상적으로 해당 run을 끝내줘야 한다. 끝내지 않고 중단할 경우 다시 init을 할 때 자동으로 해당 run을 종료하고 시작한다. finish()를 해야 웹에 정상적으로 log들이 기록된다. 

6. command

6-1. sync

폐쇄망같은 경우에서는 바로 wandb 사이트에 올릴 수 없지만 offline 기능을 이용해서 wandb 폴더에 저장해 두고, 나중에 이 폴더를 이용하여 온라인에 업로드할 수 있다. 

한 번에 올리는 경우에는 아래 command를 이용하면 된다.

wandb sync -p {projcet} {options} {folder}
ex) wandb sync -p test --include-online run-*

 

7. 여담

특정 파라미터등을 변수로 설정해 두고 자동으로 돌아가게 해 두면 wandb에서 쉽게 확인할 수 있으며 깔끔하게 정리돼서 확인할 수도 있다. 

아래는 위의 것들을 이용하여 적용한 내 프로젝트의 기록 예시이다. 

https://wandb.ai/bae951753/Document%20 Image%20 Classification? workspace=user-bae951753

 

728x90

'알쓸신잡' 카테고리의 다른 글

연구실 안전교육 스킵  (0) 2024.02.14
리눅스 구글드라이브 파일 다운  (0) 2024.02.09
Windows-Ollama 사용  (0) 2023.12.27
Windows ssh 서버 세팅  (3) 2023.12.14
VSCODE 폰트 바꾸기  (0) 2023.12.08
'알쓸신잡' 카테고리의 다른 글
  • 연구실 안전교육 스킵
  • 리눅스 구글드라이브 파일 다운
  • Windows-Ollama 사용
  • Windows ssh 서버 세팅
창빵맨
창빵맨
  • 창빵맨
    Let's be Developers
    창빵맨
    로그인/로그아웃
  • 전체
    오늘
    어제
    • 분류 전체보기 (471)
      • 알쓸신잡 (79)
      • ML & DL (85)
        • Computer v.. (22)
        • NLP (22)
        • 파이썬 머신러닝 완.. (3)
        • 개념정리 (38)
      • 리눅스 (21)
      • 프로젝트 (29)
        • 산불 발생 예측 (6)
        • 음성비서 (12)
        • pdf 병합 프로그.. (0)
        • 수위 예측 (5)
        • 가짜 뉴스 분류 (5)
        • 전력사용량 예측 (1)
      • 코딩테스트 (217)
        • 프로그래머스[Pyt.. (17)
        • 프로그래머스[Fai.. (3)
        • 백준[Python] (160)
        • 이것이취업을위한코딩.. (18)
        • 파이썬 알고리즘 (19)
      • 데이터분석실습 (25)
        • 데이터 과학 기반의.. (18)
        • 헬로 데이터 과학 (7)
      • 메모장 (0)
      • 잡담 (4)
  • Personal

    GITHUB
    Instagram
  • 공지사항

  • 인기 글

  • 태그

    그리디
    DFS
    백준
    dp
    이분탐색
    나동빈
    파이썬
    이코테
    BFS
    이것이취업을위한코딩테스트다
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3

HOME

HOME

상단으로

티스토리툴바