Back to Mnn

编译宏介绍

docs/compile/cmake.md

3.5.010.6 KB
Original Source

编译宏介绍

MNN使用CMake构建项目,CMake中的宏定义列表如下:

宏名宏说明
MNN_USE_SYSTEM_LIB在使用openclvulkan时,使用系统库(ON)还是通过dlopen引入动态库(OFF),默认为OFF
MNN_BUILD_HARD是否使用-mfloat-abi=hard,默认为OFF
MNN_BUILD_SHARED_LIBS是否构建为动态库,默认为ON
MNN_WIN_RUNTIME_MT在Windows上构建dll时是否使用/MT,默认为OFF
MNN_FORBID_MULTI_THREAD是否禁止多线程,默认为OFF
MNN_OPENMP是否使用OpenMP的线程池,该选项在Mac/iOS平台无效,默认为OFF
MNN_USE_THREAD_POOL是否使用MNN内部线程池,默认为ON
MNN_BUILD_TRAIN是否构建MNN的训练框架,默认为OFF
MNN_BUILD_DEMO是否构建MNN的demo,默认为OFF
MNN_BUILD_TOOLS是否构建MNN的测试工具,默认为ON
MNN_BUILD_QUANTOOLS是否构建MNN的量化工具,默认为OFF
MNN_EVALUATION是否构建MNN的评估工具,默认为OFF
MNN_BUILD_CONVERTER是否构建MNN的转换工具,默认为OFF
MNN_SUPPORT_QUANT_EXTEND是否编译非核心算子(Binary/Unary/LayerNorm等)的量化版本,默认为ON
MNN_SUPPORT_DEPRECATED_OP是否支持Tflite的量化算子等已经废弃的算子,用于兼容历史模型(1.1.0版本之前),默认为OFF
MNN_SUPPORT_DEPRECATED_OPV2是否编译MNN更新到3.0之后已经废弃的算子,用于兼容历史模型(3.0.0版本之前),比如 Convolution3D / ConvTranspose3D,在3.0.0 版本之后改由模型转换器转化为对应2D算子,不再需要运行时支持,默认为ON
MNN_REDUCE_SIZE是否裁剪MNN库大小,去除求导相关算子,减少优化策略,默认为OFF ,开启时,MNN_SUPPORT_QUANT_EXTEND / MNN_SUPPORT_DEPRECATED_OP / MNN_SUPPORT_DEPRECATED_OPV2 / MNN_USE_SPARSE_COMPUTE 都会设成 OFF
MNN_DEBUG_MEMORY是否开启MNN内存调试,默认为OFF
MNN_DEBUG_TENSOR_SIZE是否开启MNN tensor size调试,默认为OFF
MNN_GPU_TRACE是否开启MNN GPU调试,默认为OFF
MNN_SEP_BUILD是否构建MNN的后端和表达式分离版本,只在MNN_BUILD_SHARED_LIBS=ON时生效,默认为ON
NATIVE_LIBRARY_OUTPUT如果构建为动态库,则指定动态库的输出路径,默认为OFF
NATIVE_INCLUDE_OUTPUT如果构建为动态库,则指定动态库的头文件路径,默认为OFF
MNN_AAPL_FMWK是否构建MNN.framework替代*.dylib,默认为OFF
MNN_WITH_PLUGIN是否支持Plugin算子,默认为OFF
MNN_SKIPBUILD_GEOMETRY是否跳过MNN的几何计算编译,若是,MNN引擎仅支持在模型转换工具时加上 --saveStaticModel 转换出来的固定输入形状的模型,默认为OFF
MNN_BUILD_MINI是否构建MNN的最小化版本,若是,开启 MNN_SKIPBUILD_GEOMETRYMNN_REDUCE_SIZE,默认为OFF
MNN_USE_SSE在x86上是否使用SSE指令集,默认为OFF
MNN_BUILD_CODEGEN是否构建MNN的代码生成部分,该功能提供了算子融合与代码生成能力,为实验性功能,默认为OFF
MNN_ENABLE_COVERAGE是否开启MNN的代码覆盖率,默认为OFF
MNN_BUILD_PROTOBUFFER是否使用MNN中的protobuffer,默认为ON
MNN_BUILD_OPENCV是否构建MNN的OpenCV功能,默认为OFF
MNN_BUILD_AUDIO是否构建MNN的Audio功能,默认为OFF
MNN_INTERNAL是否构建MNN的一些内部功能,如:日志;默认为OFF
MNN_JNI是否构建MNN的JNI支持,默认为OFF
MNN_METAL是否构建Metal后端,默认为OFF
MNN_METAL_TENSOR是否启用Metal Tensor接口,该宏仅在MNN_METAL=ON时生效,默认为ON
MNN_OPENCL是否构建OpenCL后端,默认为OFF
MNN_OPENGL是否构建OpenGL后端,默认为OFF
MNN_VULKAN是否构建Vulkan后端,默认为OFF
MNN_ARM82编译ARM架构时,是否构建Armv8.2后端,以支持FP16计算,默认为ON
MNN_SME2编译ARM架构时,是否构建ArmSme2后端,以支持使用sme2指令集计算,默认为ON
MNN_SUPPORT_FP16_ARMV7编译armeabi-v7a架构时,是否构建Armv8.2后端,以支持FP16计算,默认为OFF
MNN_ONEDNN是否使用oneDNN,默认为OFF
MNN_AVX2MNN_USE_SSE开启的基础上,是否增加AVX2指令的支持,默认为ON
MNN_AVX512MNN_USE_SSEMNN_AVX2开启的基础上,是否增加avx512指令集的支持,默认为OFF
MNN_CUDA是否构建Cuda后端,默认为OFF
MNN_CUDA_PROFILE是否打开CUDA profile工具,默认为OFF
MNN_CUDA_QUANT是否打开CUDA 量化文件编译,默认为OFF
MNN_CUDA_BF16是否打开CUDA Bf16文件编译,默认为OFF
MNN_CUDA_TUNE_PARAM是否打开CUDA TUNE相关文件编译,目前仅支持安培及以上架构,默认为OFF
MNN_TENSORRT是否构建TensorRT后端,默认为OFF
MNN_COREML是否构建CoreML后端,默认为OFF
MNN_NNAPI是否构建NNAPI后端,默认为OFF
MNN_QNN是否构建QNN后端,默认为OFF
MNN_QNN_ONLINE_FINALIZEMNN_QNN开启的基础上,是否构建在线编译模式的QNN后端,默认为ON
MNN_QNN_CONVERT_MODEMNN_QNN开启的基础上,是否构建Convert模式的QNN后端,默认为OFF
MNN_NEUROPILOT是否构建MLA的NPU离线转换后端或执行插件,默认为OFF
MNN_NPU是否构建HIAI的NPU后端,默认为OFF
MNN_USE_SPARSE_COMPUTE是否使用稀疏计算,默认为ON
MNN_BUILD_BENCHMARK是否构建MNN的性能测试,默认为OFF
MNN_BUILD_TEST是否构建MNN的单元测试,默认为OFF
MNN_BUILD_FOR_ANDROID_COMMAND是否使用命令行构建Android,默认为OFF
MNN_USE_LOGCAT是否使用logcat代替printf输出日志,默认为ON
MNN_USE_CPP11是否使用C++11编译MNN,默认为ON
MNN_SUPPORT_BF16是否支持BF16,默认为OFF
MNN_SSE_USE_FP16_INSTEAD在X86平台是否使用FP16替代BF16,默认为OFF
MNN_AVX512_VNNI是否使用avx512_vnni指令,该宏仅在MNN_AVX512=ON时生效,默认为OFF
MNN_OPENCL_SIZE_CUT是否为了降低OpenCL大小而关闭OpenCL Buffer实现,该宏仅在MNN_OPENCL=ON时生效,默认为OFF
MNN_GPU_TIME_PROFILE是否打开OpenCL后端及Vulkan后端的Kernel性能Profile,该宏仅在MNN_OPENCL=ONMNN_VULKAN=ON时生效,默认为OFF
MNN_METALLIB_SOURCE使用Metal时是否直接使用Metal源码,该宏仅在MNN_METAL=ON时生效,默认为ON
MNN_VULKAN_DEBUG是否打开Vulkan的DEBUG模式,该宏仅在MNN_VULKAN=ON时生效,默认为OFF
MNN_OPENGL_REGEN是否重新生成OpenGL Kenel,该宏仅在MNN_OPENGL=ON时生效,默认为OFF
MNN_TRT_DYNAMIC是否通过dlopen的方式引入TRT的动态库,该宏仅在MNN_TENSORRT=ON时生效,默认为OFF
MNN_BUILD_TORCH构建的MNNConvert是否支持TorchScript,该宏仅在MNN_BUILD_CONVERTER=ON时生效,默认为OFF
MNN_TRAIN_DEBUG构建的训练模块是否支持调试,该宏仅在MNN_BUILD_TRAIN=ON时生效,默认为OFF
MNN_USE_OPENCV构建的训练Demo是否使用OpenCV依赖,该宏仅在MNN_BUILD_TRAIN=ON时生效,默认为OFF
MNN_IMGPROC_COLOR构建MNN的OpenCV功能是否开启颜色空间转换,默认为ON
MNN_IMGPROC_GEOMETRIC构建MNN的OpenCV功能是否开启形变,默认为ON
MNN_IMGPROC_DRAW构建MNN的OpenCV功能是否开启画图,默认为ON
MNN_IMGPROC_FILTER构建MNN的OpenCV功能是否开启滤波,默认为ON
MNN_IMGPROC_MISCELLANEOUS构建MNN的OpenCV功能是否开启混合,默认为ON
MNN_IMGPROC_STRUCTRAL构建MNN的OpenCV功能是否开启结构,默认为ON
MNN_IMGPROC_HISTOGRAMS构建MNN的OpenCV功能是否开启直方图,默认为ON
MNN_CALIB3D构建MNN的OpenCV功能是否开启3d,默认为ON
MNN_IMGCODECS构建MNN的OpenCV功能是否开启图像编解码,默认为OFF
MNN_CVCORE构建MNN的OpenCV功能是否开启core功能,默认为ON
MNN_OPENCV_TEST构建MNN的OpenCV功能是否开启单元测试,默认为OFF
MNN_OPENCV_BENCH构建MNN的OpenCV功能是否开启性能benchmark,默认为OFF
MNN_AUDIO_TEST构建MNN的Audio功能是否开启单元测试,默认为OFF
MNN_VULKAN_IMAGE构建MNN的Vulkan后端时采用Image内存模式,以便支持FP16和部分移动端上GPU的加速,默认为ON
MNN_LOW_MEMORY是否支持低内存模式,支持低内存模式使用权值量化模型并设置low_memory则会使用计算时反量化,默认为OFF
MNN_CPU_WEIGHT_DEQUANT_GEMM是否编译CPU权重反量化的矩阵乘Kernel, 如果打开该编译宏并且在CPU推理时设置MNN::BackendConfig::MemoryMode=Memory_Normal,就会使用权重反量化算子进行权重量化模型的推理,默认为OFF
MNN_SUPPORT_RENDER是否支持图形渲染相关算子实现,默认为 OFF
MNN_SUPPORT_TRANSFORMER_FUSE是否支持Fuse Transformer相关OP实现,默认为 OFF
MNN_BUILD_LLM是否构建基于MNN的llm库和demo,默认为OFF ,打开时 MNN_LOW_MEMORY , MNN_SUPPORT_TRANSFORMER_FUSE 对应开启
MNN_BUILD_LLM_OMNI若构建基于MNN的llm库和demo,是否支持图像和音频输入功能,默认为OFF 。仅在MNN_BUILD_LLM 打开时生效。开启时 MNN_BUILD_OPENCV , MNN_IMGCODECS , MNN_BUILD_AUDIO 同时打开
MNN_BUILD_DIFFUSION是否构建基于MNN的diffusion demo,默认为OFF . 打开时MNN_BUILD_OPENCV , MNN_IMGCODECS, MNN_LOW_MEMORY, MNN_SUPPORT_TRANSFORMER_FUSE 同步开启
MNN_KLEIDIAI是否集成ARM的klediAI加速库,默认为ON
MNN_KLEIDIAI_DEFAULT_ON是否默认使用KLEIDIAI的Kernel, 默认为OFF
MNN_USE_RVV是否启用RISC-V向量扩展支持,默认为OFF