nn-Meter

nn-Meter

准确预测深度神经网络边缘设备推理延迟的系统

nn-Meter是一个用于预测深度神经网络模型在边缘设备上推理延迟的系统。其核心是将模型推理分解为内核级别进行预测。系统在26000个模型的数据集上评估了4个主流平台,在移动CPU、GPU和VPU上达到较高预测精度。无需部署即可预测延迟,可用于硬件感知的神经架构搜索,并支持构建自定义设备的延迟预测器。

nn-Meter深度学习边缘计算神经网络延迟预测Github开源项目

nn-Meter是一个新颖高效的系统,可以准确预测各种边缘设备上DNN模型的推理延迟。其核心思想是将整个模型推理分解为内核,即设备上融合算子的执行单元,并进行内核级预测。我们目前在包含26000个模型的大型数据集上评估了四个流行平台。它在移动CPU、移动Adreno 640 GPU、移动Adreno 630 GPU和Intel VPU上分别实现了99.0%、99.1%、99.0%和83.4%的预测准确率。

当前支持的硬件和推理框架:

设备框架处理器±10%准确率硬件名称
Pixel4TFLite v2.1CortexA76 CPU99.0%cortexA76cpu_tflite21
Mi9TFLite v2.1Adreno 640 GPU99.1%adreno640gpu_tflite21
Pixel3XLTFLite v2.1Adreno 630 GPU99.0%adreno630gpu_tflite21
Intel Movidius NCS2OpenVINO2019R2Myriad VPU83.4%myriadvpu_openvino2019r2

*nn-Meter获得了**Mobisys 21最佳论文奖!*更多详情,请查看论文:

nn-Meter:准确预测多样化边缘设备上深度学习模型推理延迟

谁应该考虑使用nn-Meter

  • 想要获取移动和边缘设备上DNN推理延迟,但无需在实际设备上部署的人。
  • 想要使用NNI进行硬件感知NAS的人。
  • 想要为自己的设备构建延迟预测器的人(nn-Meter构建器文档)。
  • 想要使用26000个延迟基准数据集的人。

安装

目前nn-Meter已在Linux和Windows系统上进行测试。Windows 10、Ubuntu 16.04和20.04与Python 3.6.10已经过测试并受支持。请在安装nn-Meter之前先安装python3。然后可以通过运行以下命令安装nn-Meter:

pip install nn-meter

nn-meter==2.0现已发布。

如果您想尝试最新代码,请从源代码安装nn-Meter。首先将nn-Meter包克隆到本地:

git clone git@github.com:microsoft/nn-Meter.git cd nn-Meter

然后在python >= 3.6的环境中运行以下pip安装命令。该命令将自动完成所有必要依赖项和nn-Meter的安装。

pip install .

nn-Meter是Tensorflow、PyTorch、Onnx、nn-meter IR图和NNI IR图类型模型的延迟预测器。要使用nn-Meter预测特定类型的模型,您还需要安装相应的必需包。经过充分测试的版本如下所示:

测试模型类型要求
Tensorflowtensorflow==2.6.0
Torchtorch==1.9.0, torchvision==0.10.0, (替代方案)[onnx>=1.9.0, onnx-simplifier==0.3.6] 或 [nni>=2.4][1]
Onnxonnx==1.9.0
nn-Meter IR图---
NNI IR图nni>=2.4

[1] 请参阅nn-Meter用法以获取更多信息。

请同时检查numpyscikit_learn的版本。不同版本可能会改变内核预测器的预测准确性。

稳定版本的wheel二进制包将很快发布。

用法

为了进行硬件延迟预测,nn-Meter提供了两种接口类型:

  • 安装nn-meter后的命令行nn-meter
  • 由模块nn_meter提供的Python绑定

以下是两种方法支持的输入类型概述。

测试模型类型命令支持Python绑定
Tensorflowtf.saved_model()导出并以.pb结尾的检查点文件tf.saved_model导出并以.pb结尾的检查点文件
Torchtorchvision.models中的模型torch.nn.Module对象
Onnxtorch.onnx.export()onnx.save()导出并以.onnx结尾的检查点文件onnx.save()导出或通过onnx.load()加载的模型
nn-Meter IR图nn-Meter IR图格式的JSON文件符合nn-Meter IR图格式的dict对象
NNI IR图-NNI IR图对象

在这两种方法中,用户可以指定预测器名称和版本以针对特定的硬件平台(设备)。目前,nn-Meter支持以下四种配置的预测:

预测器(设备_推理框架)处理器类别版本
cortexA76cpu_tflite21CPU1.0
adreno640gpu_tflite21GPU1.0
adreno630gpu_tflite21GPU1.0
myriadvpu_openvino2019r2VPU1.0

用户可以通过运行以下命令获取所有预定义的预测器和版本

# 列出所有预定义的预测器 nn-meter --list-predictors

预测保存的CNN模型的延迟

安装后,将启用名为nn-meter的命令。要在命令行中使用预定义的预测器预测CNN模型的延迟,用户可以运行以下命令(样本模型可以在这里下载)

# 对于Tensorflow (*.pb) 文件 nn-meter predict --predictor <硬件> [--predictor-version <版本>] --tensorflow <pb文件或文件夹> # 使用示例 nn-meter predict --predictor cortexA76cpu_tflite21 --predictor-version 1.0 --tensorflow mobilenetv3small_0.pb # 对于ONNX (*.onnx) 文件 nn-meter predict --predictor <硬件> [--predictor-version <版本>] --onnx <onnx文件或文件夹> # 使用示例 nn-meter predict --predictor cortexA76cpu_tflite21 --predictor-version 1.0 --onnx mobilenetv3small_0.onnx # 对于来自torchvision模型库的torch模型(字符串) nn-meter predict --predictor <硬件> [--predictor-version <版本>] --torchvision <模型名称> <模型名称>... # 使用示例 nn-meter predict --predictor cortexA76cpu_tflite21 --predictor-version 1.0 --torchvision mobilenet_v2 # 对于nn-Meter IR (*.json) 文件 nn-meter predict --predictor <硬件> [--predictor-version <版本>] --nn-meter-ir <json文件或文件夹> # 使用示例 nn-meter predict --predictor cortexA76cpu_tflite21 --predictor-version 1.0 --nn-meter-ir mobilenetv3small_0.json

--predictor-version <版本>参数是可选的。当用户未指定预测器版本时,nn-meter将使用该预测器的最新版本。

nn-Meter可以支持批量预测。要一次性预测同一模型类型的多个模型的延迟,用户应将所有模型收集在一个文件夹中,并在--[模型类型]类参数后声明该文件夹。

还需注意的是,对于PyTorch模型,nn-meter只能支持torchvision模型库中现有的模型。--torchvision后面的字符串应该正好是一个或多个表示某些现有torchvision模型名称的字符串。要在命令行中对torchvision模型应用延迟预测,需要onnxonnx-simplifier包。

转换为nn-Meter IR图

此外,用户可能对将tensorflow pb文件或onnx文件转换为nn-Meter IR图感兴趣。用户可以通过运行以下命令将nn-Meter IR图转换并保存为.json文件

# 对于Tensorflow (*.pb) 文件 nn-meter get_ir --tensorflow <pb文件> [--output <输出名称>] # 对于ONNX (*.onnx) 文件 nn-meter get_ir --onnx <onnx文件> [--output <输出名称>]

如果用户未指定,输出名称默认为/path/to/input/file/<输入文件名>_<模型类型>_ir.json

在Python代码中使用nn-Meter

安装后,用户可以在Python代码中导入nn-Meter

from nn_meter import load_latency_predictor predictor = load_latency_predictor(hardware_name, hardware_predictor_version) # 后端对大小写不敏感

构建你的模型(例如,torch.nn.Module的模型实例)

model = ...

lat = predictor.predict(model, model_type) # 得到的延迟结果单位为毫秒


通过调用`load_latency_predictor`,用户选择目标硬件并加载相应的预测器。nn-Meter会尝试在`~/.nn_meter/data`中找到正确的预测器文件。如果预测器文件不存在,它将从Github发布中下载。

在`predictor.predict()`中,参数`model_type`允许的项包括`["pb", "torch", "onnx", "nnmeter-ir", "nni-ir"]`,分别代表tensorflow、torch、onnx、nn-meter IR图和NNI IR图的模型类型。

对于Torch模型,仅基于给定的网络结构无法知道特征图的形状,而这是延迟预测中的重要参数。因此,torch模型需要一个输入张量的形状作为`predictor.predict()`的输入进行推理。根据给定的输入形状,将生成并使用一个相应形状的随机张量。Torch模型预测的另一个方面是,用户可以安装`onnx`和`onnx-simplifier`包进行延迟预测(称为基于Onnx的torch模型延迟预测),或者安装`nni`包(称为基于NNI的torch模型延迟预测)。请注意,`nni`选项不支持命令行调用。此外,如果用户使用`nni`进行延迟预测,PyTorch模块应该使用NNI的`nn`接口定义`import nni.retiarii.nn.pytorch as nn`(更多信息参见[NNI文档](https://nni.readthedocs.io/en/stable/NAS/QuickStart.html#define-base-model)),并且在`predictor.predict()`函数中应将参数`apply_nni`设置为`True`。以下是基于NNI的Torch模型延迟预测示例:

```python
import nni.retiarii.nn.pytorch as nn
from nn_meter import load_latency_predictor

predictor = load_latency_predictor(...)

# 使用nni.retiarii.nn.pytorch作为nn构建你的模型
model = nn.Module ...

input_shape = (1, 3, 224, 224)
lat = predictor.predict(model, model_type='torch', input_shape=input_shape, apply_nni=True) 

基于Onnx的torch模型延迟预测稳定但较慢,而基于NNI的torch模型延迟预测不稳定,可能在某些情况下失败,但速度比基于Onnx的模型快得多。在nn-Meter中,基于Onnx的模型被设置为Torch模型延迟预测的默认选项。用户可以根据自己的需求选择使用哪一个。

用户可以通过list_latency_predictors查看所有内置预测器的信息,或查看nn_meter/configs/predictors.yaml中的配置文件。

用户可以通过调用模型名称或模型对象并指定模型类型,使用model_file_to_graphmodel_to_graph获取nn-Meter IR图。model_file_to_graph支持的模型类型包括"onnx"、"pb"、"torch"、"nnmeter-ir"和"nni-ir",而model_to_graph支持的模型类型包括"onnx"、"torch"和"nni-ir"。

nn-Meter构建器

nn-Meter构建器是一个开源工具,用于用户在自己的设备上构建延迟预测器。nn-Meter构建器主要包含三个部分:

backend:连接后端的模块;

backend_meta:与后端相关的元工具。这里我们提供了融合规则测试器,用于检测用户后端的融合规则;

kernel_predictor_builder:用于构建不同内核延迟预测器的工具。

用户可以通过调用nn_meter.builder来访问nn-Meter构建器。有关使用nn-Meter构建器的更多详细信息,请查看nn-Meter构建器文档

使用nn-Meter和NNI进行硬件感知NAS

为了在边缘和移动设备上实现可负担的DNN,硬件感知NAS同时搜索高精度和低延迟的模型。特别是,搜索算法在搜索过程中只考虑目标延迟约束内的模型。

目前我们提供了两个硬件感知NAS的示例,包括端到端的多试验NAS,这是一个在SPOS NAS搜索空间上的随机搜索算法,以及流行的ProxylessNAS,这是一个具有硬件高效损失函数的一次性NAS算法。更多其他广泛使用的硬件感知NAS和模型压缩算法的示例即将推出。

多试验SPOS演示

要运行多试验SPOS演示,需要按照NNI文档通过源代码安装NNI

python setup.py develop

然后运行多试验SPOS演示:

python ${NNI_ROOT}/examples/nas/oneshot/spos/multi_trial.py

演示如何工作

参考NNI文档了解如何使用NNI执行神经网络架构搜索(NAS)。

为了支持硬件感知的NAS,你首先需要一个支持根据延迟过滤模型的Strategy。我们在NNI中提供了一个名为LatencyFilter的过滤器,并用该过滤器初始化一个Random策略:

simple_strategy = strategy.Random(model_filter=LatencyFilter(threshold=100, predictor=base_predictor))

LatencyFilter将使用nn-Meter预测模型的延迟,并过滤掉使用给定预测器的延迟大于阈值的模型(在本例中为100)。 你也可以构建自己的策略和过滤器,以支持更灵活的NAS,例如根据延迟对模型进行排序。

然后,将这个策略传递给RetiariiExperiment:

exp = RetiariiExperiment(base_model, trainer, strategy=simple_strategy) exp_config = RetiariiExeConfig('local') ... exp_config.dummy_input = [1, 3, 32, 32] exp.run(exp_config, port)

exp_config中,需要dummy_input来追踪形状信息。

ProxylessNAS演示

要运行一次性ProxylessNAS演示,用户可以运行NNI ProxylessNAS训练演示:

python ${NNI_ROOT}/examples/nas/oneshot/proxylessnas/main.py --applied_hardware <hardware> --reference_latency <reference latency (ms)>

演示如何工作

参考NNI文档了解如何使用NNI执行NAS。

ProxylessNAS目前构建了一个查找表,存储搜索空间中每个候选构建块的测量延迟。候选模型中所有构建块的延迟总和将被视为模型推理延迟。通过在NNI中利用nn-Meter,用户可以将ProxylessNAS应用于更多类型的边缘设备上搜索高效的DNN模型。在NNI实现中,HardwareLatencyEstimator基于ProxylessLayerChoice的路径权重预测混合操作的预期延迟。要在NNI ProxylessNAS中调用nn-Meter,用户可以在示例中添加参数"--applied_hardware <hardware> --reference_latency <reference latency (ms)>"。

基准数据集

为了评估预测模型在任意DNN模型上的有效性,我们需要一个具有代表性的数据集,涵盖大范围的预测范围。nn-Meter收集并生成了26k个CNN模型。(请参阅论文了解数据集生成方法。)

我们发布了该数据集,并提供nn_meter.dataset接口供用户访问数据集。用户也可以从下载链接自行下载数据。

贡献

本项目欢迎贡献和建议。大多数贡献需要你同意贡献者许可协议(CLA),声明你有权并确实授予我们使用你的贡献的权利。详情请访问https://cla.opensource.microsoft.com。

当你提交拉取请求时,CLA机器人会自动确定你是否需要提供CLA,并适当地修饰PR(例如,状态检查、评论)。只需按照机器人提供的说明操作即可。你只需在所有使用我们CLA的仓库中执行一次此操作。

本项目已采用Microsoft开源行为准则。 有关更多信息,请参阅行为准则常见问题解答或联系opencode@microsoft.com提出任何其他问题或意见。

许可证

整个代码库使用MIT许可证

数据集使用开放数据使用协议

引用

如果你发现nn-Meter对你的研究有帮助,请考虑引用它:

@inproceedings{nnmeter,
    author = {Zhang, Li Lyna and Han, Shihao and Wei, Jianyu and Zheng, Ningxin and Cao, Ting and Yang, Yuqing and Liu, Yunxin},
    title = {nn-Meter: Towards Accurate Latency Prediction of Deep-Learning Model Inference on Diverse Edge Devices},
    year = {2021},
    publisher = {ACM},
    address = {New York, NY, USA},
    url = {https://doi.org/10.1145/3458864.3467882},
    doi = {10.1145/3458864.3467882},
    booktitle = {Proceedings of the 19th Annual International Conference on Mobile Systems, Applications, and Services},
    pages = {81–93},
}

@misc{nnmetercode, 作者 = {微软研究院 nn-Meter 团队}, 标题 = {nn-Meter:面向各种边缘设备上深度学习模型推理的准确延迟预测}, 年份 = {2021}, 网址 = {https://github.com/microsoft/nn-Meter}, }

编辑推荐精选

问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

下拉加载更多