|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- # pnnx
- python wrapper of pnnx, only support python 3.7+ now.
-
- Install from pip
- ==================
-
- pnnx is available as wheel packages for macOS, Windows and Linux distributions, you can install with pip:
-
- ```
- pip install pnnx
- ```
-
- # Build & Install from source
-
- ## Prerequisites
-
- **On Unix (Linux, OS X)**
-
- * A compiler with C++14 support
- * CMake >= 3.4
-
- **On Mac**
-
- * A compiler with C++14 support
- * CMake >= 3.4
-
- **On Windows**
-
- * Visual Studio 2015 or higher
- * CMake >= 3.4
-
- ## Build & install
- 1. clone ncnn.
- ```bash
- git clone https://github.com/Tencent/ncnn.git
- ```
- 2. install pytorch
-
- install pytorch according to https://pytorch.org/ . Anaconda is strongly recommended for example:
- ```bash
- conda install pytorch
- ```
- 3. install
- ```bash
- cd /pathto/ncnntools/pnnx/python
- python setup.py install
- ```
-
- > **Note:**
- > If torchvision and pnnx2onnx are needed, you can set the following environment variables before 'python setup.py install' to enable them. e.g. on ubuntu:
- >
- > ```
- > export TORCHVISION_INSTALL_DIR="/project/torchvision"
- > export PROTOBUF_INCLUDE_DIR="/project/protobuf/include"
- > export PROTOBUF_LIBRARIES="/project/protobuf/lib64/libprotobuf.a"
- > export PROTOBUF_PROTOC_EXECUTABLE="/project/protobuf/bin/protoc"
- > ```
- >
- > To do these, you must install Torchvision and Protobuf first.
-
-
- ## Tests
- ```bash
- cd /pathto/ncnn/tools/pnnx/python
- pytest tests
- ```
-
- ## Usage
- 1. export model to pnnx
- ```python
- import torch
- import torchvision.models as models
- import pnnx
-
- net = models.resnet18(pretrained=True)
- x = torch.rand(1, 3, 224, 224)
-
- # You could try disabling checking when torch tracing raises error
- # opt_net = pnnx.export(net, "resnet18.pt", x, check_trace=False)
- opt_net = pnnx.export(net, "resnet18.pt", x)
- ```
-
- 2. convert existing model to pnnx
- ```python
- import torch
- import pnnx
-
- x = torch.rand(1, 3, 224, 224)
- opt_net = pnnx.convert("resnet18.pt", x)
- ```
-
- ## API Reference
- 1. pnnx.export
-
- `model` (torch.nn.Model): model to be exported.
-
- `ptpath` (str): the torchscript name.
-
- `inputs` (torch.Tensor of list of torch.Tensor) expected inputs of the model.
-
- `inputs2` (torch.Tensor of list of torch.Tensor) alternative inputs of the model. Usually, it is used with input_shapes to resolve dynamic shape.
-
- `input_shapes` (Optional, list of int or list of list with int type inside) shapes of model inputs.
- It is used to resolve tensor shapes in model graph. for example, [1,3,224,224] for the model with only
- 1 input, [[1,3,224,224],[1,3,224,224]] for the model that have 2 inputs.
-
- `input_types` (Optional, str or list of str) types of model inputs, it should have the same length with `input_shapes`.
- for example, "f32" for the model with only 1 input, ["f32", "f32"] for the model that have 2 inputs.
-
- | typename | torch type |
- |:--------:|:--------------------------------|
- | f32 | torch.float32 or torch.float |
- | f64 | torch.float64 or torch.double |
- | f16 | torch.float16 or torch.half |
- | u8 | torch.uint8 |
- | i8 | torch.int8 |
- | i16 | torch.int16 or torch.short |
- | i32 | torch.int32 or torch.int |
- | i64 | torch.int64 or torch.long |
- | c32 | torch.complex32 |
- | c64 | torch.complex64 |
- | c128 | torch.complex128 |
-
- `input_shapes2` (Optional, list of int or list of list with int type inside) shapes of alternative model inputs,
- the format is identical to `input_shapes`. Usually, it is used with input_shapes to resolve dynamic shape (-1)
- in model graph.
-
- `input_types2` (Optional, str or list of str) types of alternative model inputs.
-
- `device` (Optional, str, default="cpu") device type for the input in TorchScript model, cpu or gpu.
-
- `customop` (Optional, str or list of str) list of Torch extensions (dynamic library) for custom operators.
- For example, "/home/nihui/.cache/torch_extensions/fused/fused.so" or
- ["/home/nihui/.cache/torch_extensions/fused/fused.so",...].
-
- `moduleop` (Optional, str or list of str) list of modules to keep as one big operator.
- for example, "models.common.Focus" or ["models.common.Focus","models.yolo.Detect"].
-
- `optlevel` (Optional, int, default=2) graph optimization level
-
- | option | optimization level |
- |:--------:|:----------------------------------|
- | 0 | do not apply optimization |
- | 1 | do not apply optimization |
- | 2 | optimization more for inference |
-
- `pnnxparam` (Optional, str, default="*.pnnx.param", * is the model name): PNNX graph definition file.
-
- `pnnxbin` (Optional, str, default="*.pnnx.bin"): PNNX model weight.
-
- `pnnxpy` (Optional, str, default="*_pnnx.py"): PyTorch script for inference, including model construction
- and weight initialization code.
-
- `pnnxonnx` (Optional, str, default="*.pnnx.onnx"): PNNX model in onnx format.
-
- `ncnnparam` (Optional, str, default="*.ncnn.param"): ncnn graph definition.
-
- `ncnnbin` (Optional, str, default="*.ncnn.bin"): ncnn model weight.
-
- `ncnnpy` (Optional, str, default="*_ncnn.py"): pyncnn script for inference.
-
- 2. pnnx.convert
-
- `ptpath` (str): torchscript model to be converted.
-
- Other parameters are consistent with `pnnx.export`
|