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 설치 경로를 지정합니다.

일반적인 워크플로우

  1. 내보내기: PyTorch 모델을 torchscript (.pt) 또는 ONNX (.onnx) 파일로 변환합니다.
  2. 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).
  3. 추론 실행: 생성된 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
    
  4. 검증: 출력이 원래 PyTorch 모델과 수치적으로 유사한지 확인합니다 (일치해야 함).

주요 옵션 (명령줄에서 전달)

  • fp16=1 – 가중치를 반정밀도로 저장하여 파일 크기를 줄입니다.
  • optlevel=0|1|2 – 그래프 최적화의 강도를 제어합니다 (0 = 최적화 없음, 2 = 최대).
  • device=cpu|gpu – torchscript 모델 추적에 사용할 장치를 선택합니다.
  • customop= – 사용자 정의 연산자용 컴파일된 Torch 확장 경로입니다.
  • moduleop= – 단일 병합 연산자로 유지할 모듈 목록입니다.

사용할 시기

  • 전체 PyTorch 스택 설치가 현실적이지 않은 모바일 또는 임베디드 플랫폼에 PyTorch 모델을 배포할 때.
  • 단일, 버전 안정 모델 파일이 필요하고 Netron 같은 도구에서 시각화할 수 있을 때.
  • 다른 프레임워크(ONNX를 통해)에서 모델을 변환하여 ncnn에서 효율적으로 실행할 수 있는 형식으로 만들고 싶을 때.

자료


위 모든 세부 정보는 프로젝트의 README에서 직접 인용되었습니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트