Mobilint NPU评估
2025-12-11
| 2025-12-11
字数 6055阅读时长 16 分钟
type
status
date
slug
summary
tags
category
icon
password

Mobilint NPU 评估

此次评估包括Mobilint公司的MLA100 PCIE卡、MLA100 MXM卡REGULUS款产品

1. MLA100 PCIE评估

产品规格如下:
项目
规格 / 特性
AI 加速性能
80 TOPS
主机接口 (Host Interface)
PCI Express Gen4, 8-lane
内存容量 (Memory Capacity)
16 GB LPDDR4 (可选 32 GB)
内存带宽 (Memory Bandwidth)
66.7 GB/s
功耗 (TDP / Power)
25 W
AI 推理性能指标
- MobileNetV2: 11,551 FPS - ResNet-50: 3,082 FPS - YOLOv9-S: 627 FPS - YOLOv9-C: 254 FPS
应用场景 / 特性
支持主流 ML 框架 (TensorFlow, PyTorch, ONNX 等),兼容 300+ AI 模型,高性价比、低功耗、适合边缘计算 / On-device AI / Edge AI 应用。
NPU的多核结构如下:
notion image
NPU中有8个Local Core,Local Core是能独立推理模型的最小单元。4个Local Core和1 个Gloal Core组成一个集群,NPU中有两个这样的集群。Global Core负责任务调度、条件操作和通讯。

1.1. 驱动安装

本次测试基于Ubuntu 24.04.2 LTS, Mobilint提供了通过APT包管理器的方式安装驱动。

1. 安装系统依赖

2. 添加Mobilint官方apt源

3. 安装驱动

注意:确保SecureBoot是关闭的,如果是开启的,请参考Mobilint官方安装方法: Installation on Secure Boot. 一旦安装完成请重启系统。

4. 验证是否安装成功

系统重启后请运行以下命令来验证驱动是否安装成功。
如果NPU被成功识别,你运行以上命令将看到/dev/aries0设备。
Driver check
如果没有找到,请检查NPU设备是否存在。
如果NPU设备被PCIE Root正常识别,你应该可以看到以下输出。
Device check

1.2. 安装运行库

1. 安装Mobilint官方源

如果你在安装驱动时添加了Mobilint官方源,此步骤可以省略。

2. 安装运行库包

3. 验证安装

4. 安装Python虚拟环境

5. 安装Python运行库

请根据你系统的python版本和官方的最新版本替换 {version} and {python_version} 找到合适的包。
根据我的系统,我这里采用的是:maccel-0.30.1-cp312-cp312-manylinux_2_39_x86_64.whl

6. 验证python运行库

如果正常,此命令将不输出任何内容,如果不正常则会报错,例如:

1.3 推理环境验证

1. 从Mobilint的Download Center下载runtime包

notion image
根据自己的硬件架构和系统版本,选择对应的安装包,我的系统是Intel x86-64的,所以我选择下图红框中的版本。
notion image

2. 解压runtime包,找到resnet50目录

你应该看到以下文件:

3. 运行样例代码

  • C++ code (resnet50.cc)
    • 编译代码
      执行代码
  • Python (resnet50.py)
    • 进入你的python虚拟环境,安装opencv-python.
      运行代码

1.4 多模型多实例推理

修改官方demo中的配置文件,利用多个视频来进行多模型推理。

1. 修改FeederSetting.yaml

按以下内容修改FeederSetting.yaml文件,将feeder_type改为VIDEO,并指向对应的视频

2. 修改ModelSetting.yaml

修改ModelSetting.yaml文件将模型分配到哪个NPU设备(如果有多个NPU设备)中的某个Cluster中Core上执行

3. 编译运行demo

运行程序,将出现以下界面
notion image
鼠标点击每栏下的空白区将开启对应的模型推理,每栏有6路视频对应着我们在FeederSetting.yaml中设置的视频,全部开启后界面如下,按下键盘“D”或者“d“能显示推理性能。
notion image
将推理全部开启后,CPU、Memory、NPU的利用率如下:
notion image
 

1.5. 纯推理性能测试

利用官方的benchmark工具进行yolov8-pose模型的纯推理测试,启用16线程,8 cores同时推理,性能如下:每个线程平均每次推理耗时:21.43,总共每秒能推理746.73次。
notion image

1.6 模型转换

Mobilint提供Docker环境来进行模型转换,这里测试采用Resnet50的ONNX模型转换成Mobilint的MXQ模型。

1. 安装Docker环境

采用以下命令在系统中安装Docker环境,并重启生效。

2. 拉取Mobilint的Compiler Docker Image

由于dockerhub有时候被墙,无法正常下载Docker image,这里通过添加/etc/docker/daemon.json来添加一些镜像源地址。
登陆到https://hub.docker.com/r/mobilint/qbcompiler/tags 拉取最新版本的Docker Image, 根据版本号来替换{QUBEE_VERSION_NUMBER}
创建一个Docker启动脚本:run_docker.sh来启动docker, 注意根据下载的docker image版本替换{QUBEE_VERSION_NUMBER}

3. 安装qb Compiler到你的容器中

通过Mobilint的官网地址下载qb compiler包。
通过一下命令将qb compiler包拷贝到容器中并安装

4. 下载Resnet50 ONNX模型

我这里直接从Huggingface下载现存的ONNX模型

5. 转换模型

根据Mobilint的官方文档,创建以下文件来进行模型转换
a. 由于Mobilint的qb compiler会将模型直接转换成Int8的量化模型,所以需要一部分数据来做精度校验。所以需要创建resnet50.yaml文件来设置怎样预处理这些校验数据。 Resnet50.yaml文件内容如下。
b. 从ImageNet官网或者第三方网站下载ImageNet数据集,这里我只是下载了验证数据集,因为我只需要100多张图片来对模型进行校验。从下载的数据集中提取100张,放在calibration/cali_1000/目录下。
c. 创建prepare_calib.py 来对校验数据进行预处理。
执行预处理脚本
d. 创建模型转换脚本model_convert.py 内容如下
执行模型转换脚本, 你将得到一个mxq模型

6. 验证模型

将生成的模型替换前文中“运行样例代码”中的resnet50.mxq模型,如果输出的结果和先前的模型输出的结果一致,则证明模型转换成功。

1.7. YOLO切片推理

由于MLA100的硬件架构是多NPU Core,刚好我们有客户对大尺寸的原始图推理有需求。为了尽可能的发挥多NPU Core的优势,我测试利用SAHI进行YOLO的分片推理。
SAHI(Slicing Aided Hyper Inference) 是一个创新的库,旨在优化用于大规模和高分辨率图像的对象检测算法。它的核心功能在于将图像划分为可管理的切片,在每个切片上运行对象检测,然后将结果缝合在一起。SAHI 与包括 YOLO 系列在内的一系列对象检测模型兼容,从而在确保优化利用计算资源的同时提供灵活性。
我们对1920x1080的图片进行如下切片,总共切8个片,每片大小640x640。
notion image
根据Yolo_SHAI项目中的Readme文件进行Yolov8s INT8的模型转换。测试性能如下:
notion image
notion image
检测结果如下:
notion image
如果是采用原始的对图片进行Resize,然后推理的结果如下,明显在Resize模式下很多目标没有检测出来。
notion image

2 Regulus 评估

REGULUS 是一款紧凑型人工智能系统级芯片(SoC),其计算能力达 10 TOPS,功耗低于 3 瓦,专为在无人机和安全系统等功率及空间受限的应用中实现更高性能的设备端人工智能用例而优化。
规格参数:

2.1. 安装交叉编译环境

在 REGULUS 上运行的程序必须在交叉编译环境中构建,这样它们才能在 REGULUS 内部的 ARM CPU 上执行。构建完成后,编译好的程序应上传到 REGULUS 进行执行。
  1. 下载Mobilint官网下载最新的regulus-release_vX.X.X.tar.gz 文件。
  1. 解压缩文件, 然后运行install-regulus-toolchain.sh 脚本安装交叉编译链工具。
    1. NOTE: 运行上述命令,会创建一个 “/opt/crosstools/mobilint/Y.Y.Y/X.X.X”目录。

2.2. 编译运行Resnet50 demo

  1. 用下面的命令来使能交叉编译环境:
    1. 下载 ResNet50推理代码并编译:
      1. 将生成的二进制文件、模型文件和图片文件上传到 REGULUS设备并运行:

        2.3. 利用官方的Benchmark工具测试纯推理性能

        由于我手里的这个Regulus的固件较老,默认不带Benchmark工具,根据Mobilint提供的指令来升级固件。
        1. 从上文中下载的regulus-release_vX.X.X.tar.gz中解压初rootfs.tar.gz并上传到Regulus设备,运行以下命令升级固件。
          1. 运行benchmark工具来测试Resnet50 INT8模型的推理性能。
            1. ResNet50 INT8模型的推理性能为:316fps,NPU的利用率99%

          2.4. 模型转换

          2.5. 性能对比

          这里我们将Regulus的推理性能和RK3588的推理性能做对比。RK3588的规格参数如下:
          对比结果:

          3. 安装qb Compiler到你的容器中

          通过Mobilint的官网地址下载qb compiler包。
          image-20251204112559875
          通过一下命令将qb compiler包拷贝到容器中并安装

          4. 下载Resnet50 ONNX模型

          我这里直接从Huggingface下载现存的ONNX模型

          5. 转换模型

          根据Mobilint的官方文档,创建以下文件来进行模型转换
          a. 由于Mobilint的qb compiler会将模型直接转换成Int8的量化模型,所以需要一部分数据来做精度校验。所以需要创建resnet50.yaml文件来设置怎样预处理这些校验数据。 Resnet50.yaml文件内容如下。
          b. 从ImageNet官网或者第三方网站下载ImageNet数据集,这里我只是下载了验证数据集,因为我只需要100多张图片来对模型进行校验。从下载的数据集中提取100张,放在calibration/cali_1000/目录下。
          c. 创建prepare_calib.py 来对校验数据进行预处理。
          执行预处理脚本
          d. 创建模型转换脚本model_convert.py 内容如下
          执行模型转换脚本, 你将得到一个mxq模型

          6. 验证模型

          将生成的模型替换前文中“运行样例代码”中的resnet50.mxq模型,如果输出的结果和先前的模型输出的结果一致,则证明模型转换成功。

          1.7. YOLO切片推理

          由于MLA100的硬件架构是多NPU Core,刚好我们有客户对大尺寸的原始图推理有需求。为了尽可能的发挥多NPU Core的优势,我测试利用SAHI进行YOLO的分片推理。
          SAHI(Slicing Aided Hyper Inference) 是一个创新的库,旨在优化用于大规模和高分辨率图像的对象检测算法。它的核心功能在于将图像划分为可管理的切片,在每个切片上运行对象检测,然后将结果缝合在一起。SAHI 与包括 YOLO 系列在内的一系列对象检测模型兼容,从而在确保优化利用计算资源的同时提供灵活性。
          我们对1920x1080的图片进行如下切片,总共切8个片,每片大小640x640。
          notion image
          根据Yolo_SHAI项目中的Readme文件进行Yolov8s INT8的模型转换。测试性能如下:
          notion image
          notion image
          检测结果如下:
          notion image
          如果是采用原始的对图片进行Resize,然后推理的结果如下,明显在Resize模式下很多目标没有检测出来。
          notion image

          2 Regulus 评估

          REGULUS 是一款紧凑型人工智能系统级芯片(SoC),其计算能力达 10 TOPS,功耗低于 3 瓦,专为在无人机和安全系统等功率及空间受限的应用中实现更高性能的设备端人工智能用例而优化。
          规格参数:
          notion image

          2.1. 安装交叉编译环境

          在 REGULUS 上运行的程序必须在交叉编译环境中构建,这样它们才能在 REGULUS 内部的 ARM CPU 上执行。构建完成后,编译好的程序应上传到 REGULUS 进行执行。
          1. 下载Mobilint官网下载最新的regulus-release_vX.X.X.tar.gz 文件。
          1. 解压缩文件, 然后运行install-regulus-toolchain.sh 脚本安装交叉编译链工具。
            1. NOTE: 运行上述命令,会创建一个 “/opt/crosstools/mobilint/Y.Y.Y/X.X.X”目录。

          2.2. 编译运行Resnet50 demo

          1. 用下面的命令来使能交叉编译环境:
            1. 下载 ResNet50推理代码并编译:
              1. 将生成的二进制文件、模型文件和图片文件上传到 REGULUS设备并运行:

                2.3. 利用官方的Benchmark工具测试纯推理性能

                由于我手里的这个Regulus的固件较老,默认不带Benchmark工具,根据Mobilint提供的指令来升级固件。
                1. 从上文中下载的regulus-release_vX.X.X.tar.gz中解压初rootfs.tar.gz并上传到Regulus设备,运行以下命令升级固件。
                  1. 运行benchmark工具来测试Resnet50 INT8模型的推理性能。
                  notion image
                  notion image

                  2.4. 模型转换

                  2.5. 性能对比

                  这里我们将Regulus的推理性能和RK3588的推理性能做对比。RK3588的规格参数如下:
                  对比结果:
                  设备
                  ResNet50
                  Yolov8s
                  Regulus
                  316fps
                  RK3588
                  110.1fps@single core
                  38.0fps@single core

                  3. MLA100 MXM卡评估

                  将MLA100 MXM卡搭配Adlink的MVP-5102设备进行测试,但是发现在MVP-5102上无法找到设备。在BIOS中也发现不到设备,导致无法测试。
                  notion image
                  notion image
                  notion image
                  notion image
                  notion image
                2. 开发
                3. CentOS7 下驱动I226-V 网卡RK3588_Opencv4.7编译
                  Loading...