관리 메뉴

Bull

pth 파일의 매직 바이트와 ZIP 포맷 본문

AI programming/pytorch

pth 파일의 매직 바이트와 ZIP 포맷

Bull_ 2026. 3. 3. 20:44
  • pytorch는 1.6버전 이후부터 load를 통한 Zip-based format으로 변경되었다.
  • 이전에는 pickle (python 패키지)를 통해 압축했다고 한다.
  • 그래서 .pth, .pt 여도 upzip 명령어나 zipfile 라이브러리로 열면 내부 구조가 보인다고 한다.
  • 해킹 관점에서, pth를 바이트로 뜯으면 파일 맨 앞에 위치하는 매직 바이트를 알 수 있는데, 이 때 pth의 매직 바이트는 zip 매직 바이트인 PK (50 4B)라고 한다. (ZIP 포맷을 만든 Phil Katz의 앞글자를 딴 것)

최근 해킹 게임 사이트인 Dreamhack에 딥러닝과 포너블을 결합한 문제를 출제했는데, 나의 문제를 푼 풀이자 분께서 풀이를 작성해주셨다. 문제의 일부 중 pth 만으로 모델을 역설계를 해야하는데, pth 바이너리 스트림을 파일로 저장하지 않고, 바이너리 스트림 그대로 해석하여 모델을 유추하였다. 나는 문제를 검토할 때, 당연히 load_weights()로 불러오고 pytorch로 복원했는데, 이를 직접 numpy 부터 구현하고 가중치 정보도 기본 문법으로 불러오는 방식을 보고 놀라웠다.

이 글은 그냥 간단한 잡지식이지만, "pth가 그냥 딥러닝 model 저장하는 확장잔가 보다.." 하고 지내다가 이런 사실에 놀라서 작성했다.

'AI programming > pytorch' 카테고리의 다른 글

[PyTorch] Object Detection IoU 병렬 구현  (0) 2026.02.12
[pytorch] Tensor 정리 | study book  (0) 2024.08.09
[pytorch] einops.rearrange()  (0) 2024.04.13