Compare commits

...

2 Commits

Author SHA1 Message Date
Jules f147542c92
Merge c6336fa6b0 into 80a917a1b0 2025-07-21 10:28:46 +00:00
Jules c6336fa6b0 update some docs 2025-07-21 10:28:04 +00:00
9 changed files with 57 additions and 12 deletions

View File

@ -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` |

View File

@ -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
```
- 编译产物

View File

@ -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包

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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`

3
docs/pymnn/audio.md Normal file
View File

@ -0,0 +1,3 @@
# audio
This document is a placeholder.

3
docs/pymnn/llm.md Normal file
View File

@ -0,0 +1,3 @@
# llm
This document is a placeholder.