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
└── ...
주요 구성 요소
- train.py:
- 훈련 프로세스를 시작하는 메인 스크립트다. config.json 파일을 읽고 데이터 로더, 모델, 손실 함수, 옵티마이저를 초기화한 후 Trainer 클래스를 사용하여 훈련을 진행한다.
- test.py:
- 훈련된 모델을 평가하는 스크립트다. config.json 파일과 훈련된 모델 체크포인트를 로드하고, 데이터 로더를 사용하여 모델 성능을 평가한다.
- config.json:
- 훈련 설정을 저장하는 파일이다. 모델 아키텍처, 데이터 로더 설정, 옵티마이저 설정, 손실 함수, 평가 지표, 학습률 스케줄러, 훈련 설정(에포크 수, 체크포인트 저장 주기 등)을 정의한다.
- parse_config.py:
- config.json 파일과 커맨드 라인 인자를 파싱하여 훈련 설정을 구성하는 클래스를 포함한다. 설정 파일의 파라미터를 읽고, 필요에 따라 커맨드 라인 인자를 덮어쓴다.
- base/:
- 추상 기본 클래스들을 포함한다. 이를 상속하여 데이터 로더, 모델, 트레이너를 구현할 수 있다.
- base_data_loader.py: 데이터 로더의 기본 기능을 제공.
- base_model.py: 모델의 기본 기능을 제공.
- base_trainer.py: 트레이너의 기본 기능을 제공.
- data_loader/:
- 데이터 로딩 관련 파일들이 위치한다. 데이터셋을 불러오고, 배치를 생성하며, 데이터 셔플링과 검증 데이터 분할을 처리하는 로직을 포함한다.
- model/:
- 모델, 손실 함수, 평가 지표를 정의하는 파일들이 위치한다.
- model.py: 모델 정의.
- metric.py: 평가 지표 정의.
- loss.py: 손실 함수 정의.
- saved/:
- 훈련된 모델과 로그 파일들을 저장하는 디렉터리다.
- trainer/:
- 훈련 관련 파일들이 위치한다.
- trainer.py: 훈련 로직을 정의하는 클래스가 포함된다.
- logger/:
- TensorBoard 시각화 및 로깅 관련 파일들이 위치한다.
- visualization.py: TensorBoard 시각화 관련 함수들.
- logger.py: 로깅 관련 클래스와 함수들.
- logger_config.json: 로깅 설정 파일.
- 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}
- 필요한 모듈 임포트
- 로그 디렉토리 생성
- SummaryWriter 객체 생성
- 값 기록 예제
- 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})
- W&B 설치
- 필요한 모듈 임포트
- 프로젝트 설정
- 학습 및 결과 기록