딥러닝 모델 파일은 다양한 확장자로 저장되며, 각각의 파일은 목적과 사용 환경에 따라 다르게 활용된다.
이번 글에서는 .pt, .pth, .mar,.onnx 확장자 파일의 차이점과 용도에 대해 자세히 알아보자.
1. .pt 파일: PyTorch 모델의 범용적인 저장 형식
.pt는 PyTorch에서 학습된 모델의 범용적인 저장 형식으로 사용된다.
주로 모델의 전체 구조와 가중치, 또는 가중치만을 저장할 때 쓰이며, 파일 이름에서 바로 모델과 관련된 파일임을 직관적으로 알 수 있다.
주요 특징
- 직관적인 확장자
.pt는 "PyTorch Model"을 의미하며, 직관적으로 PyTorch 모델 파일임을 나타낸다. - 전체 모델 저장 가능
PyTorch 모델의 전체 구조(아키텍처)와 학습된 가중치를 함께 저장할 수 있다. - 범용성
모델 저장 외에도 학습된 파라미터나 다른 객체(예: 텐서, 체크포인트 등)를 저장하는 데도 자주 사용된다.
# 모델의 가중치만 저장
torch.save(model.state_dict(), "model_weights.pt")
# 전체 모델(구조 + 가중치) 저장
torch.save(model, "model.pt")
로드 방법은 아래와 같다.
# 가중치만 로드
model.load_state_dict(torch.load("model_weights.pt"))
# 전체 모델 로드
model = torch.load("model.pt")
2. .pth 파일: 체크포인트와 가중치 저장에 사용되는 파일
.pth는 체크포인트 또는 학습된 가중치를 저장할 때 주로 사용된다. PyTorch 커뮤니티에서는 .pth 확장자를 통해 학습 중간 결과나 최종 가중치를 저장하는 것이 관례이다.
주요 특징
- 체크포인트 파일의 관례적 확장자
.pth는 PyTorch 커뮤니티에서 학습된 가중치 또는 학습 체크포인트를 저장할 때 자주 사용되는 관례적인 확장자이다. - 가중치 중심의 사용
.pth 파일은 전체 모델보다는 가중치만 저장할 때 주로 사용된다. - 컨벤션
PyTorch 공식 문서와 튜토리얼에서도 .pth 확장자를 가중치 저장 시 주로 사용한다.
# 가중치만 저
torch.save(model.state_dict(), "model_weights.pth")
# 체크포인트 저장 : 학습 중단 시점의 상태를 저장할 수 있다.
checkpoint = {
"epoch": 10,
"model_state": model.state_dict(),
"optimizer_state": optimizer.state_dict()
}
torch.save(checkpoint, "checkpoint.pth")
로드 방법은 아래와 같다.
# 가중치 로드
model.load_state_dict(torch.load("model_weights.pth"))
# 체크포인트 로드 : 학습을 이어서 진행하려면 다음과 같이 로드한다.
checkpoint = torch.load("checkpoint.pth")
model.load_state_dict(checkpoint["model_state"])
optimizer.load_state_dict(checkpoint["optimizer_state"])
epoch = checkpoint["epoch"]
어떤 확장자를 선택해야 할까?
- 모델을 배포하거나, 다른 환경에서 추론만 수행하려는 경우:
.pt 확장자를 사용하는 것이 적합하다. 모델 전체 구조와 가중치를 함께 저장하면 배포 시 유리하다. - 학습된 가중치를 저장하거나 체크포인트를 저장하려는 경우:
.pth 확장자를 사용하는 것이 적합하다. 학습 도중에 중단했다가 이어서 진행하는 경우 체크포인트 저장에 용이하다.
.pt와 .pth는 PyTorch에서 모델 저장과 로드에 사용되며, 기능적으로 큰 차이는 없다. 그러나 .pt는 범용적인 모델 파일 저장에, .pth는 체크포인트나 가중치 저장에 더 자주 사용되는 관례가 있다. 프로젝트의 목적에 따라 적합한 확장자를 선택해 사용하는 것이 좋다.
3. .onnx 파일 : 표준을 사용하여 저장된 파일
ONNX는 다양한 딥러닝 프레임워크 간의 호환성을 위해 설계된 표준이다. .onnx 파일은 PyTorch, TensorFlow 등에서 학습된 모델을 다른 프레임워크로 변환하거나, 다른 플랫폼에서 추론할 수 있도록 한다.
생성 방법
PyTorch 모델을 ONNX 형식으로 변환하려면 torch.onnx.export를 사용한다
torch.onnx.export(model, dummy_input, "model.onnx", export_params=True)
ONNX 형식은 프레임워크 간 모델 호환성을 제공하며, 다양한 환경에서 추론을 실행하는 데 사용된다. 예를 들어, PyTorch에서 학습한 모델을 TensorRT, OpenVINO 등에서 사용할 때 유용하다.
4. .mar 파일 : TorchServe에서 모델을 배포하기 위해 사용하는 아카이브 파일
주요 특징
.mar 파일은 모델 파일, 핸들러 파일, 종속성 등을 하나의 파일로 압축한 형태이다. TorchServe가 모델을 로드하고 서빙할 때 사용한다.
생성 방법
PyTorch 모델 파일(.pt 또는 .pth)을 사용해 torch-model-archiver 명령어로 .mar 파일을 생성한다.
torch-model-archiver \
--model-name my_model \
--version 1.0 \
--serialized-file model.pt \
--handler handler.py \
--export-path model_store
아카이브 파일이란?
아카이브 파일(Archive File)은 여러 개의 파일이나 데이터가 하나의 파일로 압축 또는 결합된 형태를 말한다. 흔히 사용되는 .zip, .tar, .rar와 같은 파일도 아카이브 파일의 예시이다. 아카이브 파일은 파일이나 데이터의 관리, 배포, 저장을 편리하게 하기 위해 사용된다.
정리 : 파일 확장자별 차이점 비교
.pt | 모델 가중치 또는 전체 모델 | PyTorch | 모델 저장 및 로드 |
.pth | 모델 가중치 또는 체크 포인트 | PyTorch | 학습된 모델 가중치 또는 체크포인트 저장 |
.onnx | 모델 구조와 가중치 | 다중 프레임워크 호환 | ONNX 호환 모델로 변환, 다양한 플랫폼에서 추론 실행 |
.mar | 모델+핸들러+종속성 | TorchServe | 모델 배포 및 REST API 기반 서빙 |
이상입니다. 감사합니다.
끝!
'딥러닝 (Deep Learning) > [07] - Serving' 카테고리의 다른 글
TorchServe 모델 배포 방법! (1) | 2024.12.19 |
---|---|
Model Serving 패턴 종류 (3) | 2024.12.09 |
Model Serving 이란?? (2) | 2024.12.09 |