mirror of https://github.com/alibaba/MNN.git
Compare commits
2 Commits
2b09147865
...
f147542c92
| Author | SHA1 | Date |
|---|---|---|
|
|
f147542c92 | |
|
|
c6336fa6b0 |
|
|
@ -16,10 +16,10 @@ MNN使用CMake构建项目,CMake中的宏定义列表如下:
|
|||
| MNN_BUILD_QUANTOOLS | 是否构建MNN的量化工具,默认为`OFF` |
|
||||
| MNN_EVALUATION | 是否构建MNN的评估工具,默认为`OFF` |
|
||||
| MNN_BUILD_CONVERTER | 是否构建MNN的转换工具,默认为`OFF` |
|
||||
| MNN_SUPPORT_QUNAT_EXTEND | 是否编译非核心算子的量化版本,默认为`ON` |
|
||||
| MNN_SUPPORT_QUANT_EXTEND | 是否编译非核心算子的量化版本,默认为`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_QUNAT_EXTEND / MNN_SUPPORT_DEPRECATED_OP / MNN_SUPPORT_DEPRECATED_OPV2 都会设成 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` |
|
||||
|
|
@ -29,7 +29,7 @@ MNN使用CMake构建项目,CMake中的宏定义列表如下:
|
|||
| 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_GEOMETRY 和 MNN_REDUCE_SIZE,默认为`OFF` |
|
||||
| MNN_BUILD_MINI | 是否构建MNN的最小化版本,若是,开启 `MNN_SKIPBUILD_GEOMETRY` 和 `MNN_REDUCE_SIZE`,默认为`OFF` |
|
||||
| MNN_USE_SSE | 在x86上是否使用SSE指令集,默认为`OFF` |
|
||||
| MNN_BUILD_CODEGEN | 是否构建MNN的代码生成部分,该功能提供了算子融合与代码生成能力,为实验性功能,默认为`OFF` |
|
||||
| MNN_ENABLE_COVERAGE | 是否开启MNN的代码覆盖率,默认为`OFF` |
|
||||
|
|
@ -55,10 +55,13 @@ MNN使用CMake构建项目,CMake中的宏定义列表如下:
|
|||
| MNN_TENSORRT | 是否构建`TensorRT`后端,默认为`OFF` |
|
||||
| MNN_COREML | 是否构建`CoreML`后端,默认为`OFF` |
|
||||
| MNN_NNAPI | 是否构建`NNAPI`后端,默认为`OFF` |
|
||||
| MNN_QNN | 是否构建`QNN`后端,默认为`OFF` |
|
||||
| MNN_NPU | 是否构建`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`输出日志,默认为`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` |
|
||||
|
|
@ -68,7 +71,7 @@ MNN使用CMake构建项目,CMake中的宏定义列表如下:
|
|||
| 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_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` |
|
||||
|
|
|
|||
|
|
@ -56,11 +56,11 @@
|
|||
- `llm_bench` 大语言模型测评工具
|
||||
## 测试工具
|
||||
- 相关编译选项
|
||||
- `MNN_BUILD_TOOL` 是否编译测试工具
|
||||
- `MNN_BUILD_TOOLS` 是否编译测试工具
|
||||
- 编译命令
|
||||
```bash
|
||||
mkdir build && cd build
|
||||
cmake .. -DMNN_BUILD_TOOL=ON
|
||||
cmake .. -DMNN_BUILD_TOOLS=ON
|
||||
make -j4
|
||||
```
|
||||
- 编译产物
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
## 本地安装
|
||||
```bash
|
||||
cd /path/to/MNN/pymnn/pip_package
|
||||
python build_deps.py {MNN依赖包组合} #internal,cuda,trt,cuda_tune,opencl,vulkan,render,no_sse,torch这几个字符串的任意组合,例如字符串可为:"cuda,reder,no_sse"
|
||||
python build_deps.py {MNN依赖包组合} #internal,cuda,trt,cuda_tune,opencl,vulkan,render,no_sse,torch,openmp,llm这几个字符串的任意组合,例如字符串可为:"cuda,reder,no_sse"
|
||||
python setup.py install --version {MNN版本} --deps {MNN依赖包组合}
|
||||
```
|
||||
## 构建Python Wheel包
|
||||
|
|
|
|||
|
|
@ -92,7 +92,8 @@ rtmgr->setMode(Interpreter::Session_Debug);
|
|||
|
||||
- Interpreter::HintMode::WINOGRAD_MEMORY_LEVEL :使用 Winograd 算法优化卷积时,内存占用倾向,默认为 3 ,若希望降低内存占用可设为 0
|
||||
- Interpreter::HintMode::GEOMETRY_COMPUTE_MASK :几何计算相关优化开关,1为区域合并,2为复合区域合并,4为使用loop算子,8为支持几何计算重计算,需要多个功能开启时把对应值叠加。默认为功能全开。
|
||||
- Interpreter::HintMode::CPU_LITTLECORE_DECREASE_RATE :对于 Android 设备存在大中小核的情况,大核算力到中核算力的衰减比例。默认为50(中核算力为大核的50%)
|
||||
- Interpreter::HintMode::CPU_LITTLECORE_DECREASE_RATE :对于 Android 设备存在大中小核的情况,设置大核与小核之间的算力衰减比例,用于任务调度。默认值为50,表示小核的算力是大核的50%。MNN会根据这个比例来决定在大小核上分配的计算任务量。这个参数**并不直接绑定**线程到特定核心,而是影响任务分配策略。
|
||||
- Interpreter::HintMode::CPU_CORE_IDS :直接将MNN的计算任务绑定到指定的CPU核心上。这是一个更强力的控制方式,可以精确控制MNN使用的CPU资源。详细用法请参考 [Session API使用 - CPU 核心绑定](../inference/session.md#cpu-核心绑定)。
|
||||
|
||||
|
||||
#### ExternalPath
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ import MNN.cv as cv
|
|||
import MNN.numpy as np
|
||||
import MNN.expr as expr
|
||||
|
||||
# 配置执行后端,线程数,精度等信息;key-vlaue请查看API介绍
|
||||
# 配置执行后端,线程数,精度等信息;key-value请查看API介绍
|
||||
config = {}
|
||||
config['precision'] = 'low' # 当硬件支持(armv8.2)时使用fp16推理
|
||||
config['backend'] = 0 # CPU
|
||||
|
|
|
|||
|
|
@ -200,6 +200,39 @@ struct BackendConfig {
|
|||
|
||||
`sharedContext`用于自定义后端,用户可以根据自身需要赋值。
|
||||
|
||||
#### CPU 核心绑定
|
||||
MNN 支持将计算任务绑定到指定的 CPU 核心上执行。这对于需要精细控制 CPU 资源,避免线程在不同核心之间切换,或者希望将 MNN 的计算任务限制在特定核心上,以减少对其他应用干扰的场景非常有用。
|
||||
|
||||
通过 `Interpreter::setSessionHint` 方法,并使用 `HintMode::CPU_CORE_IDS`,可以指定一个或多个 CPU 核心的 ID。
|
||||
|
||||
```cpp
|
||||
#include <MNN/Interpreter.hpp>
|
||||
|
||||
// ...
|
||||
|
||||
// 创建 Interpreter
|
||||
auto interpreter = std::shared_ptr<MNN::Interpreter>(MNN::Interpreter::createFromFile("your_model.mnn"));
|
||||
|
||||
// 设置 CPU 核心绑定
|
||||
// 假设我们希望将计算任务绑定到 0 号和 1 号 CPU 核心
|
||||
std::vector<int> cpu_ids = {0, 1};
|
||||
interpreter->setSessionHint(MNN::Interpreter::HintMode::CPU_CORE_IDS, cpu_ids.data(), cpu_ids.size());
|
||||
|
||||
// 创建 Session
|
||||
MNN::ScheduleConfig config;
|
||||
config.type = MNN_FORWARD_CPU;
|
||||
config.numThread = 2; // 线程数最好和绑定的核心数一致
|
||||
auto session = interpreter->createSession(config);
|
||||
|
||||
// ... 运行推理
|
||||
```
|
||||
|
||||
**注意事项:**
|
||||
|
||||
* `CPU_CORE_IDS` 的设置必须在 `createSession` 之前完成。
|
||||
* `numThread` 的数量最好设置为与绑定的 CPU 核心数量一致,以达到最佳的性能。
|
||||
* 如果指定的 CPU 核心 ID 不存在或无效,MNN 将会忽略该配置,并使用默认的线程调度策略。
|
||||
|
||||
### 创建多段路径Session
|
||||
需要对推理路径做出更为复杂的配置时,可以通过调度配置组来实现:
|
||||
```cpp
|
||||
|
|
|
|||
|
|
@ -11,9 +11,11 @@ MNN是Pymnn中最基础的Module,其中包含了V2 API所需要数据结构与
|
|||
- [expr](expr.md)
|
||||
- [numpy](numpy.md)
|
||||
- [cv](cv.md)
|
||||
- [nn](nn.md)
|
||||
- [nn](nn.md): 包含 `loss` 和 `compress` 子模块
|
||||
- [optim](optim.md)
|
||||
- [data](data.md)
|
||||
- [audio](audio.md)
|
||||
- [llm](llm.md)
|
||||
|
||||
---
|
||||
### `MNN Types`
|
||||
|
|
|
|||
|
|
@ -0,0 +1,3 @@
|
|||
# audio
|
||||
|
||||
This document is a placeholder.
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
# llm
|
||||
|
||||
This document is a placeholder.
|
||||
Loading…
Reference in New Issue