ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

TVM MicroTVM 与 Arduino 集成测试指南:从 `pytest --board` 到真机串口验证

TVM MicroTVM 与 Arduino 集成测试指南:从 `pytest --board` 到真机串口验证 编译器深度学习模型优化【免费下载链接】tvmOpen deep learning compiler stack for cpu, gpu and specialized accelerators项目地址https://gitcode.com/gh_mirrors/tvm7/tvm点击查看免费下载本指南围绕 Apache TVM 仓库中 tests/micro/arduino/README.md 所定义的 Arduino 集成测试套件展开系统讲解 MicroTVM 在 Arduino 平台上的测试运行方式、pytest 命令行参数、受支持的开发板清单以及底层测试用例是如何完成模型生成 → 项目编译 → 板卡烧录 → 串口推理验证全流程的。读完本文你将能够独立运行 Arduino 相关的 MicroTVM 测试、选择构建专用模式与真机模式、理解各测试文件的职责划分并能结合源码定位测试背后实际调用的项目生成与运行接口。一、这套测试是什么MicroTVM × Arduino 的端到端验证MicroTVM 是 TVM 面向裸机与嵌入式微控制器MCU场景的编译栈它把 Relay / TIR 编译产物与一个极小的 C 运行时CRT打包成可由平台工具链编译、烧录的固件项目。tests/micro/arduino/目录正是用来验证 MicroTVM 与 Arduino 平台集成正确性的测试集合它既要验证项目生成与编译这条离线链路也要在有真实硬件时验证烧录、串口通信、板上推理这条在线链路。README 开门见山给出了测试的定位与运行方式需要在一个安装了完整 TVM 依赖的 Python 环境中执行并通过pytest驱动例如$ cd tvm/tests/micro/arduino $ pytest --boardspresense其中--board指定目标开发板上例为索尼 Spresense。README 同时强调了两点运行约束大多数测试需要连接一块受支持的 Arduino 开发板只有真机上才能完成烧录与推理验证如果只是想验证项目生成和编译链路可以通过--test-build-only跳过所有依赖硬件的用例。这就是整套测试的两级结构无硬件可跑的构建级测试与必须有板子的硬件级测试。二、运行环境与前置条件2.1 Python 环境与 TVM 依赖README 明确要求running in a Python environment with all of the appropriate TVM dependencies installed。也就是说测试直接 import 已安装的tvmPython 包见 test_utils.py 中的import tvm.micro、from tvm import relay因此运行前需要完成 TVM 的构建与 Python 包装入参考 docs/install/from_source.rst。此外测试还依赖requests、numpy、onnx、Pillow等第三方库由 test_utils.py 与 test_arduino_rpc_server.py 的导入可见。2.2 Arduino 平台支持测试所需的 Arduino 项目模板由 MicroTVM 提供。test_utils.py中通过tvm.micro.get_microtvm_template_projects(arduino)定位模板目录板卡描述文件则位于 apps/microtvm/arduino/template_project/boards.json。这意味着目标板的 Arduino 核心Core、工具链以及对应的板卡包需要预先通过 Arduino 生态安装好boards.json中的package/architecture/board字段正是供 Arduino CLI 定位板卡包使用的。三、pytest 命令行参数全解析README 给出的参数只是冰山一角。实际的参数定义位于 MicroTVM 官方 pytest 插件 python/tvm/micro/testing/pytest_plugin.py通过 conftest.py 中的pytest_plugins [tvm.micro.testing.pytest_plugin]自动挂载到本套测试。完整参数如下参数类型默认值作用--platformchoices无microTVM 测试平台本目录场景为arduino另有zephyr等--boardchoices无目标开发板取值来自各平台boards.json的键--test-build-onlystore_trueFalse只运行不依赖物理硬件的用例项目生成 编译--microtvm-debugstore_trueFalse保留项目目录用于调试并在项目生成时开启 debug 级日志--serial-numberstrNone板卡串口号用于在同一型号有多块板卡时精确指定目标设备其中 README 重点说明的两点是查看支持的--board取值$ pytest --help插件会在--help中列出--board的合法 choices——它们由get_supported_boards(zephyr)与get_supported_boards(arduino)的键合并而成。多块相同板卡时指定串口号$ pytest --boarddue --serial-number4873ce--serial-number会透传给项目生成参数见 test_utils.py 中generate_project的 options 字典最终由 Arduino 上传工具用于在多个相同 VID/PID 的设备中锁定目标板。3.1 硬件测试是如何被跳过的--test-build-only的实现同样在 python/tvm/micro/testing/pytest_plugin.py当该选项被置位时插件会给所有带requires_hardware标记的用例统一打上pytest.mark.skip该标记则由 conftest.py 的pytest_configure注册。换句话说构建级与硬件级的区分不是散落在各测试函数里的 if 判断而是由插件统一管理的一条标记机制。四、受支持的 Arduino 板卡清单README 提到可用pytest --help查看板卡列表而列表的实际来源是 apps/microtvm/arduino/template_project/boards.json。当前仓库中登记的板卡共 11 款板卡键--board取值芯片型号model包 / 架构备注noteduesam3x8earduino / sam—feathers2esp32esp32 / esp32因 Feather S2 引导加载器机制可正常编译但无法自动上传metrom4atsamd51adafruit / samd—spresensecxd5602ggSPRESENSE / spresense仅从 v2.3.0 SDK 起可用nano33blenrf52840arduino / mbed_nano—portentah7stm32h7xxarduino / mbed_portenta—pybadgeatsamd51adafruit / samd—rpipicorp2040rp2040 / rp2040—teensy40imxrt10xxteensy / avr—teensy41imxrt10xxteensy / avr—wioterminalatsamd51Seeeduino / samd—注意boards.json中的board字段是 Arduino 生态内部的板卡名如arduino_due_x_dbg与 pytest 的--board短键不同vid_hex/pid_hex则用于设备识别部分板卡留空说明其上传流程不依赖 VID/PID 匹配。这些字段共同决定了项目生成时的目标配置。五、测试套件结构四个测试文件各司其职目录下除 README 外共有 4 个测试文件与 1 个测试数据目录conftest.py加载 MicroTVM 官方 pytest 插件并注册requires_hardware标记test_utils.py公共工具——板卡加载、工作区创建、KWS 关键词识别项目生成test_arduino_workflow.py模拟用户完整工作流test_arduino_rpc_server.py模拟 RPChost-driven调优工作流test_arduino_error_detection.py验证编译错误能被正确上报testdata/project.ino用户自定义的 Arduino 主程序样例。六、工作流测试模拟真实用户从生成到串口验证test_arduino_workflow.py 的模块 docstring 完整描述了它所模拟的用户流程使用一个简单的音频模型生成基础 Arduino sketch像真实用户那样修改.ino文件为目标板编译 sketch若存在物理硬件则烧录到已连接板卡打开串口连接通过串口输出确认模型行为正确。6.1 测试中的项目结构断言test_project_folder_structure断言生成项目顶层应包含microtvm_api_server.py、project.ino、srcsrc下应为model、standalone_crt、platform.c、platform.h。这印证了 MicroTVM 项目生成的核心产物C 源码模型、独立 CRT 运行时、平台适配层。test_project_model_integrity进一步检查src/model下应有default_lib0.c、default_lib1.c、default_lib2.c与model.tar——即模型被切分为多个 C 文件并由model.tar统一打包。test_model_platform_templating验证platform.c中的TVM_WORKSPACE_SIZE_BYTES宏被正确模板化且其取值被约束在 9000 ~ 30000 字节之间——这是 CRT 工作区大小的配置点。test_import_rerouting则确认 CRT 源文件src/standalone_crt/src/runtime/crt/common/crt_backend_api.c中的#include已被重路由到项目内嵌的 CRT 头文件include/tvm/runtime/crt/platform.h保证固件构建不依赖主机 TVM 安装目录。6.2 用户如何改项目替换 .ino 与注入数据modified_projectfixture 把testdata/project.ino复制为项目顶层project.ino并把yes.c、no.c、silence.c、unknown.c四个关键词音频样本拷贝进src/data/。查看 testdata/project.ino 可以理解板上程序的行为setup()中调用TVMPlatformInitialize()并开启 115200 波特率串口loop()中依次对四个样本执行performInference用micros()计时并将category,runtime,yes,no,silence,unknown的 CSV 行通过串口打印出来其中TVMExecute即模型执行入口。6.3 编译与烧录compiled_projectfixture 调用project.build()随后test_compile_yes_no_project断言build/目录存在且非空。只有构建成功才轮到硬件阶段uploaded_projectfixture 调用project.flash()完成烧录。6.4 硬件级串口读取与推理正确性serial_outputfixture 通过project.transport()打开串口传输通道读取 2048 字节并解析出 4 行推理结果。随后的两个pytest.mark.requires_hardware用例是硬件级验证的核心test_project_inference_correctness把板上输出与TENSORFLOW_EVALUATIONS中的参考值对比允许的最大偏差为 2。测试注释说明由于舍入差异板上结果与 TensorFlow 原始输出不会逐位相同但非常接近——这正是嵌入式 int8 推理的典型现象test_project_inference_runtime断言单次推理不超过 200 ms且多次推理耗时的波动小于 1000 µs。测试注释给出一个关键参照在 156 MHz 的索尼 Spresense 上单次推理约 60 ms同时提醒连接扩展板等外设可能导致耗时波动检查失败。七、RPC Server 测试面向调优的 host_driven 项目test_arduino_rpc_server.py 模拟的是另一条工作流实例化 Arduino RPC Server 项目 → 编译 → 烧录之后在主机侧通过 RPC 会话驱动板上执行。它与工作流测试的关键差异在project_type_make_session使用host_driven而 KWS 工作流使用example_project并配合Runtime(crt, {system-lib: True})把算子注册进板上系统库从而支持按名调用。该文件覆盖的能力包括基础算子执行test_compile_runtime构造int8的A BTE 计算图经tvm.build后通过sess.get_system_lib().get_function(add)在板上执行并校验[6, 7]结果性能计时test_platform_timer用time_evaluator(add, sess.device, number20, repeat3, min_repeat_ms40)在板上做计时测量验证微基准能力Relay 图执行test_relay构建x*x 1的 Relay 图用tvm.micro.create_local_graph_executor加载并在板上运行ONNX 前端链路test_onnx加载mnist-8.onnx经relay.frontend.from_onnx转 Relay 后编译在板上对 digit-2 / digit-9 图片做分类并断言argmax正确BYOC 能力test_byoc_microtvm把计算图的一部分用 C 编译器算子分区byoc.CcompilerAnnotatorPartitionGraph验证外来代码 TVM混合执行大数组 RPC 传输test_rpc_large_array参数化 1 KiB / 4 KiB / 16 KiB 的int8数组往返传输校验覆盖 RPC 缓冲边界。八、错误检测测试编译失败要被接住test_arduino_error_detection.py 验证了 MicroTVM 项目 API 的错误上报机制test_blank_project_compiles未修改的生成项目应当能成功编译test_bugged_project_compile_fails向project.ino追加一个多余的花括号}制造语法错误然后断言project.build()抛出tvm.micro.project_api.server.ServerError。它证明项目构建是可失败且可检测的MicroTVM 通过 Project API Server 与板卡工具链交互编译错误会被包装为结构化异常而非静默失败这正是自动化测试与 CI 能够依赖该链路的前提。九、源码视角一个测试项目是如何被造出来的test_utils.make_kws_project见 test_utils.py是整套测试的核心工厂它完整复现了 MicroTVM 的离线编译流程从boards.json按--board查得目标芯片模型ARDUINO_BOARDS[board]通过fetch_model_from_url下载 TensorFlow 官方 micro_speech 的 TFLite 模型固定 URL 与 SHA-256 校验保证可复现用tvm.target.target.micro(model)构造裸机 targetRuntime(crt)选择 CRT 运行时Executor(aot, {unpacked-api: True})选择 AOT 执行器在opt_level3且关闭向量化的 PassContext 下执行relay.build调用tvm.micro.generate_project(template_dir, mod, output_dir, options)生成 Arduino 工程options 中包含board、project_type、verbose、serial_number。这套调用链也正是 MicroTVM 用户在自己项目中落地 Arduino 部署的标准姿势下载/转换模型 → Relay 编译到 CRT AOT → generate_project 产出可编译的 Arduino 工程。十、无硬件时怎么跑构建专用模式小结如果手头没有开发板又希望快速验证链路推荐做法是$ cd tvm/tests/micro/arduino $ pytest --boardspresense --test-build-only该命令会执行全部项目生成、结构完整性、模板化与编译类用例对应test_arduino_workflow.py中compiled_project之前的阶段、test_arduino_error_detection.py的全部用例等而所有带requires_hardware标记的串口与推理用例将被插件自动跳过。如需保留生成的项目目录以人工检查产物可叠加--microtvm-debug。有了真机后再移除--test-build-only并可选指定--serial-number即可切换到完整端到端验证。这套构建可离线、推理需真机的两级设计让 Arduino 集成测试既能进入纯软件 CI也能服务于真实的硬件回归。赞分享编译器深度学习模型优化【免费下载链接】tvmOpen deep learning compiler stack for cpu, gpu and specialized accelerators项目地址https://gitcode.com/gh_mirrors/tvm7/tvm点击查看免费下载相关推荐Apache TVM MicroTVM 与 Zephyr 集成测试指南从 QEMU 仿真到真实板卡的完整实战Apache TVM MicroTVM 与 Zephyr 集成测试指南从 QEMU 仿真到真实板卡的完整实战 MicroTVM 是 Apache TVM 面向编译器深度学习模型优化TVM microTVM 的 Zephyr MLPerf Tiny 基准测试工程EEMBC Runner 集成指南TVM microTVM 的 Zephyr MLPerf Tiny 基准测试工程EEMBC Runner 集成指南 导读 MLPerf Tiny 是面向微控制编译器深度学习模型优化Kaneo API 集成测试实践基于 Hono 与真实 PostgreSQL 的端到端接口验证指南Kaneo API 集成测试实践基于 Hono 与真实 PostgreSQL 的端到端接口验证指南 导读 本文面向需要在真实数据库环境下验证 Kaneo AP企业应用后端前端上一篇LinkSwift 免费网盘直链获取完整指南5 分钟安装八大网盘直链下载下一篇Google Indexing Script与AI智能预测索引效果的尝试创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表