본문 바로가기
Artificial Intelligence/21. PyTorch

[PYTORCH] .pth 파일과 .pt 파일의 차이 및 체크포인트 관리 방법 7가지 해결 전략

by Papa Martino V 2026. 4. 4.
728x90

.pth 파일과 .pt 파일의 차이
.pth 파일과 .pt 파일의 차이

 

딥러닝 프로젝트의 연속성을 보장하는 PyTorch 모델 직렬화(Serialization)의 모든 것


1. 도입: 왜 확장자 구분이 중요한가?

PyTorch를 활용하여 딥러닝 모델을 학습시키다 보면, 결과물을 저장할 때 .pt 혹은 .pth 확장자를 마주하게 됩니다. 단순히 파일 이름의 끝자리가 다른 것이라 생각할 수 있지만, 이는 협업 프로젝트나 배포 환경에서 버전 관리와 데이터 무결성을 결정짓는 중요한 요소입니다. 본 가이드에서는 두 확장자의 기술적 배경과 실무에서 직면하는 저장 방식의 차이를 심도 있게 다룹니다.

2. .pth vs .pt 핵심 차이 분석

결론부터 말씀드리면, PyTorch 내부 로직에서 .pt.pth 사이의 기술적인 기능 차이는 없습니다. 둘 다 torch.save() 함수를 통해 생성되는 피클(Pickle) 기반의 직렬화 파일입니다. 하지만 커뮤니티와 관례에 따른 용도는 다음과 같이 구분됩니다.

구분 .pt (PyTorch Tensor) .pth (PyTorch Hierarchical)
주요 용도 주로 단순 텐서(Tensor)나 모델 전체 저장 주로 state_dict(가중치) 저장 시 사용
인식률 공식 문서와 예제에서 범용적으로 사용 이전 버전의 PyTorch 라이브러리 관례
충돌 가능성 거의 없음 Python의 Path 관련 라이브러리와 혼동 가능성 존재
권장 사항 최신 프로젝트 및 공식 배포용 권장 레거시 코드 유지보수 시 주로 발견

3. 실무자를 위한 모델 저장 및 로드 매커니즘

단순히 확장자를 고르는 것보다 중요한 것은 '무엇을' 저장하느냐입니다. PyTorch에서는 두 가지 방식을 지원합니다.

  • 전체 모델 저장 (Full Model): 모델의 구조(Graph)와 가중치를 모두 저장합니다. 코드가 간결하지만, 모델 정의 클래스가 동일한 경로에 있어야 로드할 수 있다는 단점이 있습니다.
  • state_dict 저장 (Recommended): 모델의 파라미터(Weights, Biases)만 딕셔너리 형태로 저장합니다. 가장 유연하고 권장되는 방식입니다.

4. 실무 적용 가능한 구체적 Example 7가지

Example 1: 표준적인 state_dict 저장 및 불러오기

가장 안전하게 .pt 확장자를 사용하여 가중치만 관리하는 방법입니다.

# 저장하기
torch.save(model.state_dict(), 'model_weights.pt')

# 불러오기
model = MyModel()
model.load_state_dict(torch.load('model_weights.pt'))
model.eval()
        

Example 2: 학습 중단 방지를 위한 체크포인트(Checkpoint) 통합 관리

에폭(Epoch), 옵티마이저 상태를 함께 저장하여 학습을 재개하는 해결 방법입니다.

checkpoint = {
    'epoch': epoch,
    'model_state_dict': model.state_dict(),
    'optimizer_state_dict': optimizer.state_dict(),
    'loss': loss,
}
torch.save(checkpoint, 'checkpoint_epoch_10.pth')
        

Example 3: CPU 환경으로 모델 불러오기 (Device Mapping)

GPU에서 학습된 .pt 파일을 CPU 서버에서 서빙할 때 발생하는 오류 해결법입니다.

device = torch.device('cpu')
model.load_state_dict(torch.load('model.pt', map_location=device))
        

Example 4: 모델 전체 구조 저장하기 (Quick Prototype)

빠른 실험을 위해 클래스 구조까지 한 번에 저장하는 방법입니다.

# 주의: 이 방식은 클래스 정의 파일 위치가 바뀌면 에러가 발생함
torch.save(model, 'full_model.pt')
model = torch.load('full_model.pt')
        

Example 5: 가중치 파일에서 특정 레이어만 추출하기

전이 학습(Transfer Learning) 시 특정 레이어의 가중치만 재사용하는 기법입니다.

pretrained_dict = torch.load('pretrained.pt')
model_dict = model.state_dict()

# 매칭되는 키만 필터링
pretrained_dict = {k: v for k, v in pretrained_dict.items() if k in model_dict}
model_dict.update(pretrained_dict)
model.load_state_dict(model_dict)
        

Example 6: 대용량 모델을 위한 압축 저장 (Zipfile 기반)

PyTorch 1.6 버전 이후 기본 적용된 Zipfile 포맷을 활용한 효율적 관리 방법입니다.

# 최신 버전에서는 기본적으로 압축이 적용되나, 명시적으로 사용 가능
torch.save(model.state_dict(), 'model_compressed.pt', _use_new_zipfile_serialization=True)
        

Example 7: JIT Trace를 통한 TorchScript 변환 (.pt 사용)

Python 의존성을 제거하고 C++ 환경 등에서 실행하기 위한 직렬화 방법입니다.

example_input = torch.rand(1, 3, 224, 224)
traced_script_module = torch.jit.trace(model, example_input)
traced_script_module.save("model_jit.pt")
        

5. SEO 최적화를 위한 핵심 요약

딥러닝 모델의 배포와 유지보수를 위해서는 .pt 확장자를 사용하고 state_dict 방식으로 저장하는 것이 현대적인 표준입니다. .pth는 여전히 널리 쓰이지만, 특정 라이브러리와의 이름 충돌 가능성을 배제하기 위해 신규 프로젝트에서는 .pt를 권장합니다.

6. 출처 및 참고 문헌

  • PyTorch Official Documentation: Saving and Loading Models (pytorch.org)
  • Python Pickle Module Security Guidelines (docs.python.org)
  • Deep Learning Design Patterns by Andrew Ferlitsch
728x90