신경망 저장 포맷
IT 위키
신경망 저장 포맷(Neural Network Storage Format)은 인공신경망이 학습된 모델의 구조(architecture), 가중치(weights), 옵티마이저 상태(optimizer state) 등을 디스크에 저장하고 나중에 불러와 재사용하거나 배포할 수 있도록 설계된 파일 형식 또는 규격이다.
개요[편집 | 원본 편집]
신경망 모델을 저장하고 불러오는 과정은 머신러닝·딥러닝 워크플로우에서 매우 중요한 부분으로, 학습이 완료된 뒤 예측(inference)이나 추가 학습(finetune)을 위해 모델을 디스크에 저장하고 재사용하는 방식이 일반적이다. 저장 방식은 단순히 가중치만 담는 것부터, 모델 구조까지 포괄하는 것, 여러 프레임워크 간 호환을 고려한 교환형 포맷까지 다양하다. 저장 포맷을 선택할 때 고려해야 할 요소로는 다음과 같다.
- 저장되는 내용: 모델 구조, 가중치, 옵티마이저 상태, 메타데이터 등
- 포맷의 범용성 또는 특정 프레임워크 종속성
- 크기 및 로딩 속도(예: 대형 언어모델의 경우 메모리 매핑 가능성)
- 보안 및 불러올 때 실행코드가 없는 안전성 여부
- 하드웨어 배포 또는 모바일·엣지 환경에 적합한지
주요 저장 포맷[편집 | 원본 편집]
아래에 대표적인 저장 포맷들을 정리한다.
ONNX (Open Neural Network Exchange)[편집 | 원본 편집]
- 마이크로소프트와 페이스북이 공동 개발한, 다양한 딥러닝 프레임워크 간 모델 상호운용성을 목표로 한 개방형 포맷이다.[1]
- 모델 구조와 연산자(operator), 가중치를 프로토콜버퍼(Protobuf) 형식으로 기술한다.
- 프레임워크 종속성이 낮아 다른 라이브러리나 배포환경으로 모델을 옮기기 쉬운 장점이 있다.
- 다만 커스텀 연산(custom op)이나 프레임워크 고유 구조가 많을 경우 변환이 어렵거나 지원이 미흡할 수 있다.
NNEF (Neural Network Exchange Format)[편집 | 원본 편집]
- Khronos Group이 제정한 신경망 데이터 교환 포맷으로, 학습된 신경망을 하나의 독립된 포맷으로 기술하여 다양한 플랫폼에서 추론(inference)을 가능하게 한다.[2]
- 네트워크 구조, 연산, 파라미터(가중치)를 기술하며, 다양한 툴 및 라이브러리 상호 변환(conversion) 기능이 존재한다.
- 아직 ONNX에 비해 사용 범위가 상대적으로 적지만, 하드웨어·기기 독립적 모델 배포 측면에서 의미 있는 선택지다.
프레임워크 고유 저장 형식[편집 | 원본 편집]
다음은 특정 프레임워크에서 사용되는 대표적 저장 포맷이다.
- TensorFlow 체크포인트(.ckpt)
- TensorFlow에서는 학습 중간 또는 완료 상태를 저장하기 위해 체크포인트 방식(.ckpt)으로 저장한다. 이 방식은 여러 파일(.data, .index, .meta 등)로 구성될 수 있다.
- 배포용으로는 구조와 가중치를 포함한 SavedModel 형태로 변환하여 사용한다.
- Keras HDF5(.h5)
- Keras 모델은 구조, 가중치, 옵티마이저 상태를 하나의 HDF5 파일(.h5)로 저장한다.
- 과거에는 표준적인 방법이었으나, 대형 모델에서는 다른 포맷이 더 효율적일 수 있다.
- PyTorch .pt / .pth
- PyTorch는 모델의 상태 딕셔너리(state_dict)를 `.pt` 또는 `.pth` 확장자로 저장한다.
- 파이썬 `pickle` 직렬화를 사용하기 때문에 외부 파일 로딩 시 보안상 주의가 필요하다.
최근 등장 및 특수 목적 포맷[편집 | 원본 편집]
- safetensors – Hugging Face에서 제안한 포맷으로, pickle 기반의 위험성을 제거하고 텐서만을 빠르게 로딩할 수 있도록 설계되었다. 모델 구조는 별도로 정의해야 한다.
- GGUF – 대형 언어모델용 포맷으로, 메타데이터·토크나이저·텐서 등을 한 파일에 담는다. LLaMA 등 여러 언어모델에서 채택되고 있다.
저장 포맷 선택 시 고려사항[편집 | 원본 편집]
모델 저장 포맷을 선택할 때 고려할 점은 다음과 같다.
- 목적: 연구용인가, 배포용(모바일·엣지·서버)인가.
- 프레임워크 호환성: 학습 및 배포 프레임워크가 동일한가.
- 포맷이 담는 내용: 구조+가중치+옵티마이저 상태인지, 가중치만 저장하는지.
- 파일 크기 및 로딩 속도: 대형 모델에서는 mmap 지원, 정밀도(16비트/32비트) 등을 고려해야 함.
- 안전성 및 보안: 외부 파일 로딩 시 코드 실행 위험이 있는지.
- 변환 및 유지보수 가능성: 프레임워크 버전 변경 시 호환성 유지 여부.
저장 포맷의 기술적 특징 및 비교[편집 | 원본 편집]
| 포맷명 | 주요 특징 | 장점 | 단점 |
|---|---|---|---|
| ONNX | 프레임워크 독립형, 구조+가중치 포함 | 이동성 높음, 다양한 런타임 지원 | 커스텀 연산 지원이 제한될 수 있음 |
| NNEF | Khronos 표준, 구조·연산·파라미터 포함 | 하드웨어·플랫폼 독립적 | 생태계가 ONNX보다 제한적 |
| HDF5(.h5) | 구조+가중치+옵티마이저 저장 | 사용이 간단함 | 대형 모델에서는 비효율적일 수 있음 |
| .pt/.pth (PyTorch) | PyTorch 전용, state_dict 저장 | 연구용에 적합, 직관적 | 보안 취약, 프레임워크 간 이동 어려움 |
| safetensors | 텐서만 저장, 안전한 이진 포맷 | 빠른 로딩, 보안성 우수 | 구조 정보 별도 정의 필요 |
| GGUF | 언어모델 특화, 메타데이터 포함 | LLM 배포에 적합 | 일반 모델에는 부적합 |
활용 예시[편집 | 원본 편집]
- PyTorch로 학습된 모델을 ONNX로 변환하여 모바일 추론 엔진에서 사용.
- 산업용 하드웨어 가속기(FPGA, NPU) 환경에서는 NNEF 또는 ONNX를 이용해 동일 모델을 여러 기기에서 재사용.
- 공개 모델 공유 시 safetensors를 사용하여 빠르고 안전한 로딩 지원.
한계 및 주의점[편집 | 원본 편집]
- 저장된 모델만으로 동일한 결과를 보장할 수는 없다. 프레임워크 버전과 의존성 차이에 따라 출력이 달라질 수 있다.
- 커스텀 연산(custom op)을 사용하는 모델은 포맷 변환 시 호환성 문제가 발생할 수 있다.
- pickle 기반 저장은 외부 파일 로딩 시 코드 실행 위험이 있으므로 신뢰할 수 있는 출처만 사용해야 한다.[3]
결론[편집 | 원본 편집]
신경망 저장 포맷은 모델의 재사용성과 배포 효율성을 결정하는 핵심 요소이다. 연구 단계에서는 프레임워크 고유 포맷을 사용하는 것이 편리하지만, 배포나 호환성을 고려한다면 ONNX나 NNEF와 같은 교환형 포맷이 적합하다. 최근에는 로딩 속도와 보안성을 개선한 safetensors, GGUF 등의 신규 포맷도 등장하고 있다.
같이 보기[편집 | 원본 편집]
참고 문헌[편집 | 원본 편집]
- Common AI Model Formats – Hugging Face (2025)
- Model Weights File Formats in Machine Learning – LearnOpenCV
- Is there a common format for neural networks – Stack Overflow