pnnx/pnnx
PyTorch Neural Network eXchange
pnnx – PyTorch Neural Network eXchange
무엇인가요
- PyTorch 모델을 불러와 계산 그래프를 최적화하고, 가벼운 ncnn 추론 엔진에서 실행할 수 있는 포터블 형식이나, 의존성 감소된 PyTorch 스크립트로 내보낼 수 있는 오픈소스 도구입니다.
- PyTorch 연산자를 반영하는 표준적인 "PNNX" 모델 표현을 정의하여, torchscript, ONNX, tnn, 그리고 네이티브 PNNX 형식 간에 손실 없이 변환할 수 있습니다.
왜 주목해야 할까요
- 속도와 크기 – 불필요한 연산을 제거하고 레이어를 병합하여 에지 디바이스용으로 더 작고 빠른 모델을 생성할 수 있습니다.
- 의존성 감소 – 생성된 PNNX 모델은 전체 PyTorch 설치(또는 CUDA) 없이도 실행 가능하여, 모바일, 임베디드, 또는 서버리스 배포에 유용합니다.
- 상호운용성 – 단일 명령어로 모델을 ONNX-zero 또는 ncnn 형식으로 변환할 수 있어 프레임워크 간 이동이 쉬워집니다.
설치 방법
| 방법 | 지원 플랫폼 | 설치 방법 |
|---|---|---|
| Python 패키지 (권장) | Windows / Linux / macOS (64비트) | pip3 install pnnx |
| 포터블 바이너리 | 동일 플랫폼 (Python 필요 없음) | 최신 GitHub 릴리스에서 zip을 다운로드하고 압축을 해제합니다. 바이너리는 즉시 사용 가능하며 CUDA나 PyTorch 런타임이 필요하지 않습니다. |
| 소스에서 빌드 | C++ 툴체인을 갖춘 모든 플랫폼 | Tencent/ncnn 리포지토리를 클론한 후, CMake로 tools/pnnx 폴더를 빌드하고 libtorch/libtorchvision 설치 경로를 지정합니다. |
일반적인 워크플로우
- 내보내기: PyTorch 모델을 torchscript (
.pt) 또는 ONNX (.onnx) 파일로 변환합니다. - pnnx 실행: 입력 형태를 지정하여 해당 파일을 처리합니다. 예시:
이 명령어는 다음과 같은 아티팩트를 생성합니다:pnnx resnet18.pt inputshape=[1,3,224,224]resnet18.pnnx.param및resnet18.pnnx.bin– PNNX 그래프와 가중치.resnet18_pnnx.py– 원본 소스 코드 없이 모델을 재구성할 수 있는 순수 Python 스크립트.resnet18.ncnn.param및resnet18.ncnn.bin– ncnn 엔진에서 바로 실행 가능한 파일.- 선택 사항: ONNX-zero 파일 (
resnet18.pnnx.onnx).
- 추론 실행: 생성된 Python 스크립트 또는 ncnn 런타임을 사용합니다:
또는import torch, pnnx model = pnnx.load('resnet18.pnnx.param', 'resnet18.pnnx.bin') out = model(torch.rand(1,3,224,224))python resnet18_ncnn.py - 검증: 출력이 원래 PyTorch 모델과 수치적으로 유사한지 확인합니다 (일치해야 함).
주요 옵션 (명령줄에서 전달)
fp16=1– 가중치를 반정밀도로 저장하여 파일 크기를 줄입니다.optlevel=0|1|2– 그래프 최적화의 강도를 제어합니다 (0 = 최적화 없음, 2 = 최대).device=cpu|gpu– torchscript 모델 추적에 사용할 장치를 선택합니다.customop=– 사용자 정의 연산자용 컴파일된 Torch 확장 경로입니다.moduleop=– 단일 병합 연산자로 유지할 모듈 목록입니다.
사용할 시기
- 전체 PyTorch 스택 설치가 현실적이지 않은 모바일 또는 임베디드 플랫폼에 PyTorch 모델을 배포할 때.
- 단일, 버전 안정 모델 파일이 필요하고 Netron 같은 도구에서 시각화할 수 있을 때.
- 다른 프레임워크(ONNX를 통해)에서 모델을 변환하여 ncnn에서 효율적으로 실행할 수 있는 형식으로 만들고 싶을 때.
자료
- GitHub 리포지토리: https://github.com/pnnx/pnnx
- 바이너리 릴리스: https://github.com/pnnx/pnnx/releases
- 시각화: 생성된
.pnnx.param또는.pnnx.onnx파일을 https://netron.app/ 에 드래그 앤 드롭하여 그래프를 탐색하세요.
위 모든 세부 정보는 프로젝트의 README에서 직접 인용되었습니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트