익명 사용자
로그인하지 않음
토론
기여
계정 만들기
로그인
IT 위키
검색
ONNX
편집하기
IT 위키
이름공간
문서
토론
더 보기
더 보기
문서 행위
읽기
편집
원본 편집
역사
경고:
로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다.
로그인
하거나
계정을 생성하면
편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.
스팸 방지 검사입니다. 이것을 입력하지
마세요
!
ONNX(Open Neural Network Exchange)은 다양한 머신러닝·딥러닝 프레임워크에서 학습된 모델을 프레임워크 간에 변환하고 배포할 수 있도록 설계된 오픈 표준 저장 포맷 및 중간 표현(IR, Intermediate Representation)이다. ==정의 및 개요== ONNX는 학습된 신경망 모델의 구조(그래프 형태), 연산자(operator) 정의, 가중치(weights), 메타데이터(metadata) 등을 하나의 파일로 기술하여, 다양한 학습 및 추론 환경에서 재사용할 수 있도록 만든 규격이다. 주요 목적은 다음과 같다. *프레임워크 간 상호운용성(interoperability) 확보 (예: PyTorch ↔ TensorFlow) *모바일, 엣지, 서버 등 다양한 환경에서의 추론(inference) 효율성 향상 *프레임워크 락인(lock-in) 최소화 및 모델 재사용성 제고 ==주요 구성 요소== ONNX 파일은 기본적으로 프로토콜 버퍼(Protobuf) 형식으로 직렬화되며, 다음과 같은 요소로 구성된다. *Graph(그래프): 입력(input) → 노드(node, 연산자) → 출력(output)의 계산 구조를 정의한다. *Operator(연산자): 각 노드의 연산 종류(MatMul, Add, ReLU 등)와 속성(attributes)을 포함한다. *Tensor 데이터 및 초기값(initializers): 텐서의 자료형, 차원, 초기값(가중치) 등을 저장한다. *Metadata: 모델 이름, 프레임워크 정보, ONNX 버전 등 추가 정보를 포함한다. *Opset: 모델에서 사용하는 연산자 집합의 버전을 명시한다. ==장점 및 활용 이점== *프레임워크 자유도 증가 – 학습은 PyTorch, 추론은 TensorFlow 등 다른 환경에서 사용 가능 *배포 및 최적화 용이 – 다양한 하드웨어 가속기(GPU, NPU, CPU 등)와 호환되는 런타임 제공 *생태계 확장성 – 여러 기업 및 커뮤니티의 지원, 모델 변환 도구와 ONNX Model Zoo 존재 *연구-배포 파이프라인 단순화 – 동일 모델을 여러 환경에서 손쉽게 배포 가능 ==제한사항 및 주의점== *모든 프레임워크의 연산이 ONNX 표준으로 완벽히 대응되지 않음 (커스텀 연산 변환 불가 사례 존재) *버전 불일치로 인한 호환성 문제 발생 가능 (ONNX, 런타임, 프레임워크 버전 불일치 등) *변환 후 모델의 성능이 약간 달라질 수 있으며, 최적화가 필요할 수 있음 *모델 구조 외 커스텀 코드가 필요한 경우 별도 구현이 필요함 ==적용 방법 및 워크플로우== ONNX를 활용하는 일반적인 절차는 다음과 같다. #학습: 기존 프레임워크(PyTorch, TensorFlow 등)에서 모델을 학습한다. #내보내기(Export): 모델을 ONNX 포맷(.onnx)으로 변환한다. #추론: ONNX Runtime 등 ONNX 호환 런타임을 사용하여 모델을 실행한다. #최적화(Optional): 그래프 최적화, 양자화(quantization) 등을 통해 성능을 향상시킨다. 예시: PyTorch 모델을 ONNX로 변환하는 코드<syntaxhighlight lang="python"> import torch model = MyModel() dummy_input = torch.randn(1, 3, 224, 224) torch.onnx.export(model, dummy_input, "model.onnx", input_names=["input"], output_names=["output"], opset_version=13) </syntaxhighlight> ==버전 및 역사== *ONNX는 2017년 9월 마이크로소프트와 페이스북이 공동 개발을 발표하며 공개되었다. *초기에는 “Toffee”라는 내부 프로젝트에서 시작되었으며, 이후 오픈소스로 발전하였다. *현재는 Linux Foundation 산하의 오픈 거버넌스 프로젝트로 관리되며, 새로운 연산자와 최적화 기능이 지속적으로 추가되고 있다. ==주요 사용 사례== *PyTorch에서 학습한 모델을 C++ 기반 애플리케이션에서 배포 *모바일 또는 엣지 디바이스에서 경량 추론을 위한 ONNX Runtime 활용 *다른 프레임워크를 사용하는 연구팀 간 모델 교환 및 협업 ==저장 구조 예시== {| class="wikitable" !구성 요소!!설명 |- |graph||모델의 연산 그래프 구조 정의 |- |node||각 연산자와 입력·출력 관계 |- |initializer||학습된 가중치와 상수 값 |- |metadata||모델 이름, 버전, 프레임워크 정보 |- |opset_import||사용된 연산자 버전 정의 |} ==결론== ONNX는 "한 번 학습하고 어디서나 사용한다"는 목표로 만들어진 프레임워크 중립적 신경망 저장 포맷이다. 모델의 상호운용성과 배포 효율성을 높이고, 다양한 환경에서 동일한 모델을 실행할 수 있게 해준다. 다만 변환 제약 및 버전 호환성 문제를 고려하여 사용하는 것이 바람직하다. ==같이 보기== *[[신경망 저장 포맷]] *[[GGUF 포맷]] *[[모델 배포]] *[[모델 최적화]] *[[ONNX Runtime]] ==참고 문헌== *“Understanding the ONNX Format” – Metric Coders (2024) *“What Every ML/AI Developer Should Know About ONNX” – DigitalOcean (2024) *“ONNX Concepts” – ONNX 공식 문서 ==각주== <references /> [[분류:인공지능]] [[분류:딥 러닝]]
요약:
IT 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는
IT 위키:저작권
문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다.
저작권이 있는 내용을 허가 없이 저장하지 마세요!
취소
편집 도움말
(새 창에서 열림)
둘러보기
둘러보기
대문
최근 바뀜
광고
위키 도구
위키 도구
특수 문서 목록
문서 도구
문서 도구
사용자 문서 도구
더 보기
여기를 가리키는 문서
가리키는 글의 최근 바뀜
문서 정보
문서 기록