Wandb란?
- wandb는 ML/AI 모델 학습 시, 학습 상황을 tracking(추적) 하여 진행이 잘 되고 있는지 확인할 수 있는 툴
- 또한, 여러 하이퍼파라미터 조합으로 학습을 시도하여 최적의 하이퍼파라미터를 찾아내도록 돕는 툴
- 학습 결과를 기록하고 관리하여 성능 개선을 돕는 툴
wandb와 yolov8 (ultralytics) 모델 함께 사용하기
import wandb
wandb.login()
from ultralytics import YOLO
import ultralytics
from wandb.integration.ultralytics import add_wandb_callback
- wandb.login() -> wandb 사이트에서 API 확인 -> 입력
wandb.init(project='sample_project', job_type='training')
- wandb.init() 으로 어떤 프로젝트인지, 어떤 작업으로 wandb를 동작하게 할건지 설정
sweep_config = {
'method': 'random',
'metric': {'goal': 'maximize', 'name': 'metrics/mAP50(B)'},
'parameters': {
'batch_size': {
'values': [16, 32, 64]
},
'learning_rate': {
'distribution': 'uniform',
'min':0.0001,
'max':0.001
}
}
}
- 내가 하고 싶은 건 'sweep' 이므로 sweep_config를 설정
- sweep은 한 모델만의 학습을 wandb로 모니터링하는 게아니라, 여러 하이퍼파라미터들을 바꿔가며 알아서 여러번 학습하고, 그 결과를 저장/비교할 수 있도록 한 것
- learning rate decay, category, learning rate 라는 초매개 변수들의 여러 조합을 변화시키면서 학습할 때,
- 각 학습의 결과 Accuracy가 가장 높은 조합은 무엇인지 찾아낼 수 있음
- 내 config 에서는 batch_size와 learning_rate만 조절
sweep_id = wandb.sweep(sweep=sweep_config, project='sds')
def yolo_train():
with wandb.init() as run:
config = wandb.config
# 모델 정의 및 하이퍼파라미터 사용
model = YOLO('yolov8n.pt')
add_wandb_callback(model, enable_model_checkpointing=True)
results = model.train(data='/data/sds/datasets/version_1/data.yaml', name='version_1_',
plots=True, batch=config.batch_size, epochs=10, imgsz=640,
cos_lr=True, lrf=0.01, lr0=config.learning_rate)
wandb.log({
'epoch': epoch,
'val_loss': val/dfl_loss
})
- 자동으로 매번 학습을 시도할 함수를 정의해줌
- batch=config.batch_size 처럼 변화를 주면서 학습시킬 변수를 설정해놓음
- 나중에 학습 과정에서 로그를 남기고 싶은 값은 wandb.log로 설정해놓음
wandb.agent(sweep_id, function=yolo_train)
- 이제 wandb.agent로 알아서 yolo_train이라는 함수를 사용해서 학습을 시켜라 라고 지정해놓으면 끝
왼쪽 탭에 sweep들 (파라미터 조합을 여러가지로 시도해서 학습하고 있는 각 모델 경우의 수)로
알아서 agent가 잘 학습하고 있는 것을 보여준다. 이제 학습이 끝나고 가장 mAP가 높았던 파라미터를 최적으로 선정하면 끝!
'AI 인공지능 > MLOps' 카테고리의 다른 글
[CI/CD] CI/CD 기초 개념 (0) | 2024.04.09 |
---|---|
[Docker] Docker란 무엇이고 왜 쓸까? (0) | 2024.04.02 |