MOOC

PyTorch 프로젝트 구조 이해하기

ParkS2 2024. 6. 6. 17:46

프로젝트 구조

pytorch-template/
│
├── train.py - 훈련 시작 스크립트
├── test.py - 훈련된 모델 평가 스크립트
│
├── config.json - 훈련 설정 파일
├── parse_config.py - 설정 파일과 CLI 옵션을 처리하는 클래스
│
├── new_project.py - 템플릿 파일로 새 프로젝트 초기화
│
├── base/ - 추상 기본 클래스
│   ├── base_data_loader.py
│   ├── base_model.py
│   └── base_trainer.py
│
├── data_loader/ - 데이터 로딩 관련 파일
│   └── data_loaders.py
│
├── data/ - 입력 데이터를 저장하는 기본 디렉터리
│
├── model/ - 모델, 손실 함수, 평가 지표
│   ├── model.py
│   ├── metric.py
│   └── loss.py
│
├── saved/
│   ├── models/ - 훈련된 모델을 저장
│   └── log/ - TensorBoard 및 로깅 출력을 위한 기본 로그 디렉터리
│
├── trainer/ - 훈련 관련 파일
│   └── trainer.py
│
├── logger/ - TensorBoard 시각화 및 로깅 모듈
│   ├── visualization.py
│   ├── logger.py
│   └── logger_config.json
│  
└── utils/ - 유틸리티 함수
    ├── util.py
    └── ...

주요 구성 요소

  1. train.py:
    • 훈련 프로세스를 시작하는 메인 스크립트다. config.json 파일을 읽고 데이터 로더, 모델, 손실 함수, 옵티마이저를 초기화한 후 Trainer 클래스를 사용하여 훈련을 진행한다.
  2. test.py:
    • 훈련된 모델을 평가하는 스크립트다. config.json 파일과 훈련된 모델 체크포인트를 로드하고, 데이터 로더를 사용하여 모델 성능을 평가한다.
  3. config.json:
    • 훈련 설정을 저장하는 파일이다. 모델 아키텍처, 데이터 로더 설정, 옵티마이저 설정, 손실 함수, 평가 지표, 학습률 스케줄러, 훈련 설정(에포크 수, 체크포인트 저장 주기 등)을 정의한다.
  4. parse_config.py:
    • config.json 파일과 커맨드 라인 인자를 파싱하여 훈련 설정을 구성하는 클래스를 포함한다. 설정 파일의 파라미터를 읽고, 필요에 따라 커맨드 라인 인자를 덮어쓴다.
  5. base/:
    • 추상 기본 클래스들을 포함한다. 이를 상속하여 데이터 로더, 모델, 트레이너를 구현할 수 있다.
    • base_data_loader.py: 데이터 로더의 기본 기능을 제공.
    • base_model.py: 모델의 기본 기능을 제공.
    • base_trainer.py: 트레이너의 기본 기능을 제공.
  6. data_loader/:
    • 데이터 로딩 관련 파일들이 위치한다. 데이터셋을 불러오고, 배치를 생성하며, 데이터 셔플링과 검증 데이터 분할을 처리하는 로직을 포함한다.
  7. model/:
    • 모델, 손실 함수, 평가 지표를 정의하는 파일들이 위치한다.
    • model.py: 모델 정의.
    • metric.py: 평가 지표 정의.
    • loss.py: 손실 함수 정의.
  8. saved/:
    • 훈련된 모델과 로그 파일들을 저장하는 디렉터리다.
  9. trainer/:
    • 훈련 관련 파일들이 위치한다.
    • trainer.py: 훈련 로직을 정의하는 클래스가 포함된다.
  10. logger/:
    • TensorBoard 시각화 및 로깅 관련 파일들이 위치한다.
    • visualization.py: TensorBoard 시각화 관련 함수들.
    • logger.py: 로깅 관련 클래스와 함수들.
    • logger_config.json: 로깅 설정 파일.
  11. utils/:
    • 유틸리티 함수들이 위치한다.
    • util.py: 자주 사용되는 유틸리티 함수들.

프로젝트 실행 순서

 

  • 프로젝트 초기화:
    • new_project.py를 실행하여 새 프로젝트를 초기화한다.
     
  • 설정 파일 수정:
    • config.json 파일을 열어 필요한 설정(모델 아키텍처, 데이터 경로, 하이퍼파라미터 등)을 수정한다.
  • 모델 훈련:
    • train.py 파일을 실행하여 모델 훈련을 시작한다.
     
  • 모델 평가:
    • test.py 파일을 실행하여 훈련된 모델을 평가한다.

TensorBoard

TensorBoard는 TensorFlow에서 개발된 시각화 도구로, PyTorch에서도 사용 가능하다. 학습 그래프, metric, 학습 결과 등을 시각화하는데 매우 유용하다. 주요 기능으로는 다음과 같다:

  • Scalar: metric 등의 상수 값의 연속(epoch)을 표시한다.
  • Graph: 모델의 computational graph를 표시한다.
  • Histogram: weight 등의 값의 분포를 표현한다.
  • Image: 예측 값과 실제 값을 비교하여 표시한다.
  • Mesh: 3D 형태의 데이터를 표현한다.
import os
from torch.utils.tensorboard import SummaryWriter
import numpy as np

# 로그 디렉토리 생성
logs_base_dir = "logs"
os.makedirs(logs_base_dir, exist_ok=True)

# SummaryWriter 객체 생성
writer = SummaryWriter(logs_base_dir)

# 값 기록 예제
for n_iter in range(100):
    writer.add_scalar('Loss/train', np.random.random(), n_iter)
    writer.add_scalar('Loss/test', np.random.random(), n_iter)
    writer.add_scalar('Accuracy/train', np.random.random(), n_iter)
    writer.add_scalar('Accuracy/test', np.random.random(), n_iter)
    writer.flush()

# Jupyter Notebook에서 TensorBoard 실행
%load_ext tensorboard
%tensorboard --logdir {logs_base_dir}

 

  1.  

 

  •  

 

  1. 필요한 모듈 임포트
  2. 로그 디렉토리 생성
  3. SummaryWriter 객체 생성
  4. 값 기록 예제
  5. Jupyter Notebook에서 TensorBoard 실행

Weights & Biases (W&B)

W&B는 머신러닝 실험을 원활히 지원하기 위한 상용 도구로, 협업, 코드 버전 관리, 실험 결과 기록 등을 제공한다. MLOps의 대표적인 툴 중 하나로 널리 사용되고 있다.

!pip install wandb

import wandb

# 프로젝트 설정
config = {"epochs": EPOCHS, "batch_size": BATCH_SIZE, "learning_rate": LEARNING_RATE}
wandb.init(project="my-test-project", config=config)

for e in range(1, EPOCHS+1):
    epoch_loss = 0
    epoch_acc = 0
    for X_batch, y_batch in train_dataset:
        X_batch, y_batch = X_batch.to(device), y_batch.to(device).type(torch.cuda.FloatTensor)
        # 학습 코드...
        optimizer.step()
        # 결과 기록
        wandb.log({'accuracy': train_acc, 'loss': train_loss})

 

  1. W&B 설치
  2. 필요한 모듈 임포트
  3. 프로젝트 설정
  4. 학습 및 결과 기록