general:
cmake >= 3.1
gcc >= 4.8
NDK >= r14b
模型转换:
python >= 3.5
onnxruntime>=1.1
onnx-simplifier>=0.2.4
protobuf >= 3.0
若要支持ARMv8.2编译,ndk版本版本至少为r18b
- cuda 10.2 可能存在与 Visual Studio 安装不完整的问题,如出现 cuda_toolset not found ,请重新安装或升级 CUDA 及 Visual Studio。
- 如安装多版本cuda,可以在使用 cmake -T 选项指定 cuda 版本,如
cmake -Tcuda=10.2
- windows CUDA 10.2 报错:C:\source\rtSafe\cublas\cublasLtWrapper.cpp (279) - Assertion Error in nvinfer1::CublasLtWrapper::getCublasLtHeuristic: 0 (cublasStatus == CUBLAS_STATUS_SUCCESS) 解决方案:在 NVIDIA 官网下载 patch 并安装
- 我们统一通过onnx中间格式支持各大训练框架,开源社区维护有很好的各大框架转换为onnx的工具
- tensorflow2onnx: typical usage: python -m tf2onnx.convert --inputs-as-nchw [输入tensor]:0 --graphdef [输入文件].pb --inputs [输入tensor]:0 --outputs [输出tensor]:0 --opset 11 --output [输出文件].onnx
- caffe2onnx
- Mxnet: export onnx model
- Pytorch: EXPORTING A MODEL FROM PYTORCH TO ONNX
TNN支持在linux和windows上编译和运行
TNNTest的运行参数-pr设为LOW
cv::Mat cv_mat;
MatType mat_type = N8UC4; // if cv_mat.channels() == 3, then mat_type = N8UC3.
DimsVector dims = {1, cv_mat.channels(), cv_mat.rows, cv_mat.cols};
auto tnn_mat = new TNN::Mat(DeviceType, mat_type, dims, (void *)cv_mat.ptr);
Status调用description()接口可获取更多错误信息描述。
0x1002(4098): 模型解析错误。检查确保ModelConfig配置的为文件内容而非文件路径。
0x6005(24581): 模型weights信息缺失。TNN的benchmark可以只用proto文件,是因为开启了TNN_BENCHMARK_MODE,weights自动生成,仅用来评估速度。
0x2000(8192): 错误信息not support model type。检查Android静态库集成链接需添加-Wl,--whole-archive tnn -Wl,--no-whole-archive,iOS库集成链接需要添加force_load。
0x9000(36864): device type类型不支持。(1)确保相关device type编译选项已开启 (2)Android静态库集成链接需添加-Wl,--whole-archive tnn -Wl,--no-whole-archive,iOS库集成链接需要添加force_load。
选项1: 在 <TNN_PROJECT>/thrid_party/huawei_npu/ 下运行 ./download_ddk.sh 脚本下载最新版的ddk。
选项2:
- 到华为开发者联盟下载DDK[https://developer.huawei.com/consumer/cn/doc/overview/HUAWEI_HiAI]
- 解压缩
- 进入到下载文件夹下的
ddk/ai_ddk_lib
目录 - 在
<path_to_tnn>/third_party/huawei_npu/hiai_ddk_latest/
下创建armeabi-v7a
文件夹, 并将ai_ddk_lib目录下的lib文件夹中所有文件复制到<path_to_tnn>/third_party/huawei_npu/hiai_ddk_latest/armeabi-v7a
- 在
<path_to_tnn>/third_party/huawei_npu/hiai_ddk_latest/
下创建arm64-v8a
文件夹,并将ai_ddk_lib目录下的lib64文件夹中所有文件复制到<path_to_tnn>/third_party/huawei_npu/hiai_ddk_latest/arm64-v8a
- 将ai_ddk_lib目录下include
文件夹
复制到<path_to_tnn>/third_party/huawei_npu/hiai_ddk_latest/
目录下
<path_to_tnn>/third_party/huawei_npu/hiai_ddk_latest/
文件结构应该如下:
hiai_ddk_latest
├── arm64-v8a
│ ├── libcpucl.so
│ ├── libhcl.so
│ ├── libhiai.so
│ ├── libhiai_ir.so
│ └── libhiai_ir_build.so
├── armeabi-v7a
│ ├── libcpucl.so
│ ├── libhcl.so
│ ├── libhiai.so
│ ├── libhiai_ir.so
│ └── libhiai_ir_build.so
└── include
├── HiAiAippPara.h
├── HiAiModelManagerService.h
├── HiAiModelManagerType.h
├── graph
│ ├── attr_value.h
│ ├── buffer.h
│ ├── common
│ │ └── secures\tl.h
│ ├── debug
│ │ └── ge_error_codes.h
│ ├── detail
│ │ └── attributes_holder.h
│ ├── graph.h
│ ├── model.h
│ ├── op
│ │ ├── all_ops.h
│ │ ├── array_defs.h
│ │ ├── const_defs.h
│ │ ├── detection_defs.h
│ │ ├── image_defs.h
│ │ ├── math_defs.h
│ │ ├── nn_defs.h
│ │ └── random_defs.h
│ ├── operator.h
│ ├── operator_reg.h
│ ├── tensor.h
│ └── types.h
└── hiai_ir_build.h
- 如果获取手机的ROM在100.320.xxx.xxx以下 报错 ERROR: npu is installed but is below 100.320.xxx.xxx
- 如果没有npu或是非华为手机 : 报错 ERROR: GetRomVersion(ROM): npu is not installed or rom version is too low
- 到 设置 >> 系统和更新 >> 软件更新中检查最新的ROM版本并更新。
- 在
<path_to_tnn>/third_party
下创建rknpu文件夹并进入,然后执行:git clone https://github.com/airockchip/rknpu_ddk.git
。 - 在
<path_to_tnn>/scripts/build_aarch64_linux.sh
文件中加入-DTNN_RK_NPU_ENABLE:BOOL=ON
选项并编译即可。
- 修改项目目录下 /source/tnn/utils/blob_dump_utils.h 中
- #define DUMP_INPUT_BLOB 0 --> #define DUMP_INPUT_BLOB 1,获取每层输入
- #define DUMP_OUTPUT_BLOB 0 --> #define DUMP_OUTPUT_BLOB 1,获取每层输出
- 仅作为调试使用
- 参考profiling文档性能测试
//mac下homebrew安装
//https://zhuanlan.zhihu.com/p/59805070
//https://brew.sh/index_zh-cn
//替换国内镜像的安装脚本