nya-a-cat/edgefit
GitHub: nya-a-cat/edgefit
EdgeFit 是一个静态 ONNX 模型部署预算验证器和 CI 门禁,用于在边缘设备部署前检查模型是否满足目标硬件的算子兼容性和内存预算约束。
Stars: 2 | Forks: 0
# EdgeFit
[](https://github.com/nya-a-cat/edgefit/actions/workflows/ci.yml)
EdgeFit 根据显式部署目标契约静态验证 ONNX 模型。它通过 CLI 和 GitHub Action 报告计算图兼容性、激活内存规划、策略违规以及回归证据。
```
model.onnx + target profile
↓
graph facts · memory plan · policy
↓
pass / fail + JSON · Markdown · SARIF
```
EdgeFit 不是推理运行时或设备基准测试工具。
## 范围
- 算子、域、dtype、opset、rank、shape、模型大小和激活内存检查由目标配置文件定义。
- 缺失的 dtype、无法解析的 tensor 大小、不支持的计算图结构以及无法验证的内存预算将直接判定为失败。
- 内存报告将逻辑上的活跃 tensor 字节与确定性的 arena 分配、对齐、workspace、内存碎片和安全就地复用区分开来。
- 稳定的诊断 ID、抑制规则、快照、差异对比、JSON、Markdown 和 SARIF 支持自动化审查。
## 快速开始 — Linux 和 macOS
包含的标准化测试夹具只需要稳定的 Rust 工具链:
```
cargo build -p edgefit-cli --release --locked
./target/release/edgefit check \
examples/models/good_tiny.edgefit.json \
--target targets/esp32s3.yaml
```
退出码是公共 CLI 契约的一部分:
| 代码 | 含义 |
| ---: | --- |
| `0` | 分析完成且模型符合目标契约。 |
| `1` | 分析完成并产生了阻断部署的决策。 |
| `2` | 输入、配置、适配器或调用失败。 |
### 检查真实的 ONNX 模型
直接输入 `.onnx` 会使用锁定的 Python 适配器。安装了
[uv](https://docs.astral.sh/uv/) 后:
```
uv venv .venv
uv pip install --python .venv/bin/python \
-r tools/onnx-normalize/requirements.txt
EDGEFIT_PYTHON="$PWD/.venv/bin/python" \
./target/release/edgefit check model.onnx \
--target targets/ort-mobile-cpu.yaml \
--format json \
--out edgefit-report.json
```
该适配器将模型验证和 shape 推断委托给锁定的官方 ONNX 包。它是可替换的;Rust 分析和策略核心不依赖于 Python 包。
## 将其用作 Pull Request 门禁
```
name: EdgeFit
on: [pull_request]
jobs:
deployment-budget:
runs-on: ubuntu-latest
permissions:
contents: read
security-events: write
steps:
- uses: actions/checkout@v4
- uses: nya-a-cat/edgefit@main
with:
model: models/model.onnx
target: targets/device.yaml
report: edgefit.sarif
summary: edgefit-summary.md
```
在发布第一个稳定标签之前,请将长期的工作流锁定到已审查的 commit SHA,而不是 `main` 分支。该 Action 会验证目标、运行检查、发布 Markdown 作业摘要,然后恢复 EdgeFit 的退出状态。
有关 SARIF 上传、抑制和 fork-PR 处理,请参见 [GitHub Action 用法](docs/GITHUB_ACTION_USAGE.md)。
## 验证内容
| 层级 | 生成的证据 |
| --- | --- |
| 模型完整性 | ONNX 验证、shape 推断状态、外部数据、opset 导入、计算图边界检查 |
| 目标兼容性 | 算子/域、dtype、rank、shape、模型文件和 runtime 策略诊断 |
| 激活内存 | 逻辑峰值、确定性 arena 规划、峰值节点、workspace、碎片化和分配追踪 |
| 量化 | QDQ/QOperator 覆盖率、int8 边界状态、dtype 分布和缺失的元数据 |
| 变更控制 | 稳定的诊断 ID、显式抑制、快照和跨运行回归差异 |
| 自动化 | 文本、JSON、Markdown、SARIF、GitHub 作业摘要和定义的退出码 |
签入的目标配置文件是**种子模板**,而不是经验证的硬件声明:
| 配置文件 | 预期起点 |
| --- | --- |
| `targets/esp32s3.yaml` | 严格的 MCU 风格预算审查 |
| `targets/tflm-micro.yaml` | 类似 TensorFlow Lite Micro 的审查 |
| `targets/ort-mobile-cpu.yaml` | 类似 ONNX Runtime Mobile CPU 的审查 |
特定于项目的配置文件应存放在使用它们的仓库中,并记录其来源、置信度和最后验证日期。请参见
[目标配置文件](docs/TARGET_PROFILES.md)。
## 托管证据
正常的 CI 门禁在 Linux、Windows 和 macOS 上运行 Rust 和 ONNX 适配器测试,外加复合 Action 冒烟测试以及必需的 10K 节点发布规划检查。
托管成熟度运行对确定性线性图分别进行了五次处理:
| 节点数 | 进程时间中位数 | 最大峰值 RSS | 确定性报告 |
| ---: | ---: | ---: | --- |
| 1,000 | 7 ms | 6,275,072 B | 5/5 哈希值一致 |
| 10,000 | 70 ms | 35,991,552 B | 5/5 哈希值一致 |
| 100,000 | 854 ms | 336,494,592 B | 5/5 哈希值一致 |
同一次运行使用 EdgeFit、ONNX Runtime Mobile Checker 和 onnx-tool 执行了一个固定的十模型矩阵:
| 工具 | 完成分析 | 显式拒绝 |
| --- | ---: | ---: |
| EdgeFit | 9/10 | 1/10 |
| ORT Mobile Checker | 9/10 | 1/10 |
| onnx-tool | 4/10 | 6/10 |
EdgeFit 为 onnx-tool 拒绝的五个模型产生了目标预算决策。
这些工具涵盖了不同的任务:EdgeFit 评估目标契约,onnx-tool 分析计算和模型结构,而 ORT Mobile Checker 估计 execution provider 的可用性。
这些数据是托管的端到端进程观察结果,而不是设备推理延迟、吞吐量、功耗、固件或真实硬件内存测量值。请参见
[成功的成熟度运行](https://github.com/nya-a-cat/edgefit/actions/runs/29103544134)
和[基准测试方法](docs/COMPETITIVE_BENCHMARK.md)。
## 命令接口
```
edgefit check verify a model against a target
edgefit target validate validate a target profile
edgefit snapshot freeze a reviewable result
edgefit diff block deployment regressions
```
兼容性策略、机器输出 schema 和退出行为定义在
[CLI 契约](docs/CLI_CONTRACT.md)中。
## 架构
- `crates/edgefit-*` — 轻依赖 Rust 核心,用于 IR、目标配置文件、分析、策略、报告、差异对比和 CLI 编排。
- `tools/onnx-normalize/` — 可替换的 Python 边界,用于官方 ONNX 检查和 shape 推断。
- `tools/competitive-benchmark/` — 固定语料库证据运行器,保留原始工具输出并将不同的指标区分开来。
- `action.yml` — 用于部署预算门禁的 Linux/bash 复合 Action。
Rust workspace 禁止使用 unsafe 代码,目前没有外部 crate 依赖。有关详细的实现边界,请参见[架构](docs/ARCHITECTURE.md)和
[MVP 范围](docs/MVP_SCOPE.md)。
## 限制
- 签入的目标是种子配置文件,需要特定于项目的验证。
- 托管的计时测量的是完整的 CLI 进程,而不是设备推理。
- 通过 CI 并不能证明固件、runtime、功耗或真实设备内存的兼容性。
- 直接的 ONNX 标准化会拒绝嵌套子图、局部函数和稀疏 initializer,而不是对其进行部分分析。
## 文档
- [CLI 契约](docs/CLI_CONTRACT.md)
- [GitHub Action 用法](docs/GITHUB_ACTION_USAGE.md)
- [目标配置文件](docs/TARGET_PROFILES.md)
- [真实世界 ONNX 语料库](docs/REAL_WORLD_CORPUS.md)
- [竞争性基准测试](docs/COMPETITIVE_BENCHMARK.md)
- [ESP-DL / ESP32-S3 模拟部署](docs/SIMULATED_DEPLOYMENT.md)
- [发布策略](docs/PUBLISHING.md)
## 许可证
MIT
标签:CNCF毕业项目, ONNX, Rust, SOC Prime, 人工智能, 可视化界面, 开发工具, 开源框架, 持续集成, 用户模式Hook绕过, 网络流量审计, 边缘计算, 逆向工具