구글 클라우드 플랫폼 페이지에 가셔서 좌측 상단 메뉴바를 눌러보시면 API 및 서비스가 있습니다. 그 다음 사용자 인증 정보를 누릅니다.
그리고 중앙 상단에 보시면 사용자 인증 정보 만들기를 누르셔서 새로운 서비스 계정을 만듭니다.
편한 이름 설정하시고 확인버튼 누르시면 새롭게 서비스 계정이 생성됩니다.
방금 만드신 계정을 누르셔서 다음과 같은 화면으로 만들어 줍니다.
키를 누르시고 키추가를 누르시면 JSON형태로 저장할지 P12 형태로 저장할지 화면이 나오는데 여기서 JSON으로 저장하시고 작업하시는 폴더에 upload 합니다.
mlflow를 사용하는 방법입니다.
설치한 mlflow를 baseline 코드의 맨 윗단에 import 시킵니다.
import os
import json
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import torch
import timm
import cv2
import torch.nn as nn
import torch.optim as optim
import torchvision.transforms as transforms
import albumentations as A
from albumentations.pytorch import ToTensorV2
from torch.utils.data import Dataset, DataLoader
import mlflow
import mlflow.sklearn
바로 그 아래에 다음 코드들을 작성합니다.
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = '/opt/ml/input/artlab/premium-bearing-350511-1d17b9b89c55.json' # 인증용 JSON 파일 경로로 본인 파일명,경로 등을 수정해 주셔야 합니다.
from google.cloud import storage
client = storage.Client()
다음으로 train 코드에 다음과 같이 추가적인 부분들을 작성해주시면 됩니다.
import copy
train_loss_list = [] # 이후 학습 그래프를 그리기 위해 선언한 리스트 들이다. loss값과 accuracy값을 각각 저장한다.
train_acc_list = []
val_loss_list = []
val_acc_list = []
total_train_image = len(train_dataset) # 총 학습 이미지의 개수를 의미한다.
total_train_batch = len(train_loader) # 각 에포크 당 미니 배치 개수를 의미한다.
total_val_image = len(valid_dataset)
total_val_batch = len(valid_loader)
experiment_name = 'resnet18' # 본인이 실험명을 정할 수 있습니다. 이 실험명에 따라서 아래에 있는 experiment_id가 정해지게 됩니다.
if not mlflow.get_experiment_by_name(experiment_name): # 추가
mlflow.create_experiment(name=experiment_name)
experiment = mlflow.get_experiment_by_name(experiment_name)
mlflow.set_tracking_uri('http://34.64.140.177:5000/') # 제 GCP 서버 주소입니다.
best_accuracy = 0
with mlflow.start_run(experiment_id=experiment.experiment_id): # 추가
for epoch in range(total_epoch): # total_epoch 값 만큼 epoch 실행한다.
model.train() # model 학습 모드로 변경한다.
train_accuracy = 0 # 해당 epoch의 accuracy와 loss를 저장할 변수 선언한다.
train_loss = 0
for images, labels in train_loader:
images = images.to(device)
labels = labels.to(device)
hypothesis = model(images)
loss = criterion(hypothesis, labels)
optimizer.zero_grad()
loss.backward()
optimizer.step()
prediction = torch.argmax(hypothesis, 1) # 학습 이미지에 대해 모델이 예측한 label을 저장한다.
correct = (prediction == labels) # 정답 label들과 비교한다.
train_accuracy += correct.sum().item() / total_train_image # accuracy 값을 갱신한다.
train_loss += loss.item() / total_train_batch # loss 값을 갱신한다.
model.eval()
val_accuracy = 0
val_loss = 0
for images, labels in valid_loader:
images = images.to(device)
labels = labels.to(device)
prediction = model(images)
loss = criterion(prediction, labels)
correct = (torch.argmax(prediction, 1) == labels)
val_accuracy += correct.sum().item() / total_val_image
val_loss += loss.item() / total_val_batch
print(f'epoch: {epoch}/{total_epoch} train_loss: {train_loss:.5} train_accuracy: {train_accuracy:.5} val_loss: {val_loss:.5} val_accuracy: {val_accuracy:.5}')
train_acc_list.append(train_accuracy)
train_loss_list.append(train_loss)
val_acc_list.append(val_accuracy)
val_loss_list.append(val_loss)
mlflow.log_param('learning-rate',learning_rate) # log_param은 파라미터를 기록하는 함수입니다.
mlflow.log_param('epoch',total_epoch)
mlflow.log_param('batch_size',batch_size)
mlflow.log_param('seed',seed)
mlflow.log_metric('train_accuracy',train_accuracy) # log_metric은 metric을 기록하는 함수입니다.
mlflow.log_metric('train_loss',train_loss)
mlflow.log_metric('val_accuracy',val_accuracy)
mlflow.log_metric('val_loss',val_loss)
mlflow.sklearn.log_model(model,'model') # model을 기록하여 저장합니다.
artifact_uri = mlflow.get_artifact_uri() #여기까지 추가하시면 됩니다.
if best_accuracy < val_accuracy:
torch.save(model.state_dict(), 'model.pt')
best_accuracy = val_accuracy
best_epoch = epoch
best_model_wts = copy.deepcopy(model.state_dict())
print(f"Save Model(Epoch: {epoch}, Accuracy: {best_accuracy:.5})")
print(f'Best Accuracy: {best_accuracy:.5}')
우선 필요한 라이브러리들을 설치합니다.
인증용 JSON파일을 받는 방법입니다.
구글 클라우드 플랫폼 페이지에 가셔서 좌측 상단 메뉴바를 눌러보시면 API 및 서비스가 있습니다. 그 다음 사용자 인증 정보를 누릅니다.
그리고 중앙 상단에 보시면 사용자 인증 정보 만들기를 누르셔서 새로운 서비스 계정을 만듭니다.
편한 이름 설정하시고 확인버튼 누르시면 새롭게 서비스 계정이 생성됩니다.
방금 만드신 계정을 누르셔서 다음과 같은 화면으로 만들어 줍니다.
키를 누르시고 키추가를 누르시면 JSON형태로 저장할지 P12 형태로 저장할지 화면이 나오는데 여기서 JSON으로 저장하시고 작업하시는 폴더에 upload 합니다.
mlflow를 사용하는 방법입니다.
설치한 mlflow를 baseline 코드의 맨 윗단에 import 시킵니다.
바로 그 아래에 다음 코드들을 작성합니다.
다음으로 train 코드에 다음과 같이 추가적인 부분들을 작성해주시면 됩니다.
MLflow 모델 확인하는방법
http://34.64.140.177:5000/ 로 들어가서 본인이 설정한 실험 이름을 찾아 들어갑니다.
그리고 네모 친 부분을 누르면 다음과 같은 화면으로 이동하게 됩니다.
parameter, metric 등 정보를 확인할 수 있습니다.
그래프 등으로 시각적으로 표현도 해줍니다.