
OpenMed 边缘端落地实战Raspberry Pi 与 Jetson 上的 aarch64 离线推理基准与资源预算指南【免费下载链接】openmedLocal-first healthcare AI: clinical NER HIPAA PII de-identification that runs 100% on-device. 2,200 medical models, 21 languages, Apple MLX Python, no cloud, no patient data leaving your network. Apache-2.0项目地址: https://gitcode.com/GitHub_Trending/ope/openmed导读OpenMed 定位为 Local-first 的医疗 AI 套件——临床 NER 与 HIPAA PII 脱敏完全在本机执行、无需云端。本文基于仓库文档 docs/runtimes/edge-sbc.md聚焦其中定义的最小 CPU 版安装档案edge-sbc与可复现、禁网 socket 的 aarch64 单板机SBC基准你可以在 Raspberry Pi 5、NVIDIA Jetson Nano 等 64 位 ARM 设备上用一条命令复现冷启动、稳态吞吐、逐条延迟、峰值内存与安装体积五类指标并用硬性的 footprint 预算做回归把关。读完本文你将掌握 OpenMed 边缘部署的最小安装方式、基准命令的每个参数含义、预算文件的数据格式以及 CI 与隐私保障的底层实现逻辑。前置声明本文涉及的性能数字全部来自仓库内合成的 smoke fixture用于验证打包、架构、离线执行与结果序列化不是真实临床模型的吞吐声明也不是在目标开发板上采集的实测值。做部署决策前请在真机上用本地 INT8 OpenMed 模型运行同一命令复测。为什么需要一个边缘专用安装档案OpenMed 的常规安装会带入 ONNX 图构建、Torch、Transformers 等重量级依赖这对 x86 开发机无可厚非但放到 2~8 GB 内存的 ARM 单板机上既浪费存储也拖慢冷启动。为此项目在 pyproject.toml 中定义了最小档案# Minimal, local-artifact ONNX Runtime profile for aarch64 SBCs. It excludes # graph-building, Torch, and Transformers dependencies; use onnx-runtime when # the application also needs OpenMeds Hub download path. edge-sbc [ numpy1.26, onnxruntime1.16, tokenizers0.15, ]三个事实值得注意刻意精简edge-sbc只含 OpenMed 核心、NumPy、ONNX Runtime 与 tokenizer 运行时显式排除onnx图构建、torch、transformers。它面向模型已经下载好的本地目录 纯 CPU 执行场景。与onnx-runtime档案的分工同文件中的onnx-runtime档案pyproject.toml额外带上了huggingface-hub0.30用于需要 Hub 下载助手的联网暂存机。推荐工作流是在联网的暂存机上用openmed[onnx-runtime]固定并下载模型再把 pinned 的模型目录整体拷贝到 SBC之后全程离线。tokenizer wheel 的潜台词tokenizer 依赖可能传递引入 Hub 或打包工具但基准从不调用它们并在整个加载 推理窗口内屏蔽出站 socket见下文隐私保障一节。一、在 aarch64 上创建最小安装环境从源码 checkout 创建锁定安装UV_PROJECT_ENVIRONMENT.venv-edge \ uv sync --frozen --extra edge-sbc --no-dev --no-editable --python 3.11--frozen严格使用uv.lock锁定版本保证可复现--extra edge-sbc只装最小档案--no-dev不带开发依赖--no-editable以不可编辑wheel方式安装体积与行为更接近发布物环境目录固定为.venv-edge便于后续基准脚本引用。针对发布包PyPI wheel的等价做法python3.11 -m venv .venv-edge .venv-edge/bin/python -m pip install --no-compile openmed[edge-sbc]--no-compile跳过.pyc预编译进一步压缩安装体积——这也与后文安装体积统计口径排除字节码缓存保持一致。平台前提Raspberry Pi OS 或 Ubuntu必须是 64 位uname -m需报告aarch6432 位armv7l用户空间不受支持源码层面SUPPORTED_AARCH64_NAMES frozenset({aarch64, arm64})见 edge_benchmark.pyJetson 上固定使用CPUExecutionProviderCUDA 与 TensorRT 引擎有意不纳入本基准范围。二、运行可复现的 smoke 基准完整命令与参数拆解EDGE_PYTHON.venv-edge/bin/python EDGE_SITE_PACKAGES$($EDGE_PYTHON -c \ import sysconfig; print(sysconfig.get_paths()[purelib])) OPENMED_OFFLINE1 $EDGE_PYTHON -m openmed.eval.edge_benchmark \ --profile raspberry-pi-5 \ --repeat 20 \ --install-path $EDGE_SITE_PACKAGES \ --require-aarch64 \ --output edge-raspberry-pi-5.json $EDGE_PYTHON -m openmed.eval.footprint_gate \ --profile raspberry-pi-5 \ --report edge-raspberry-pi-5.json \ --output footprint-raspberry-pi-5.jsonopenmed.eval.edge_benchmark的 CLI 参数对应 main 实现参数默认值说明--profile必填二选一raspberry-pi-5或jetson-nano决定套用的预算档位--model无用内置 fixture指定已存在的本地 ONNX 模型目录/文件走真实模型路径--variantint8int8/fp32/fp16/auto本地模型的量化变体--corpus内置合成语料覆盖基准输入 JSON/JSONL 路径--repeat10稳态阶段完整语料循环次数--install-path当前解释器 purelib被测量的隔离安装目录--outputedge-benchmark-report.json结果 JSON 输出路径--require-aarch64关闭非aarch64/arm64机器直接失败--generated-at当前 UTC结果时间戳覆盖供测试确定化--profile换成jetson-nano即可套用更紧的内存预算。两条命令遇到非法输入都以非零退出码失败footprint_gate在任一必需测量缺失或超出包含上限时同样非零退出fail closed。五类指标的口径源码 run_edge_benchmark 明确定义冷启动cold start运行时/会话构建 首次推理的总时长吞吐与延迟后续repeat轮完整语料循环报告 Unicode 空白分隔的 tokens/s 与 per-note 的 p50/p95/p99 延迟安装体积--install-path下普通文件字节数之和排除 symlink 与解释器生成的字节码缓存measure_install_size中排除__pycache__、.pyc、.pyo见 edge_benchmark.py峰值 RSS进程 high-water mark_peak_rss_bytestoken 计数按 Unicode 空白分隔token 定义可复现、无需保留 tokenizer 输出。默认情况下基准通过edge_identity.onnx.b64位于 openmed/eval/fixtures/edge_identity.onnx.b64经真实 aarch64 ONNX Runtime CPU provider 加载一个极小的 identity 图并跑两篇合成笔记。加载逻辑在 load_synthetic_ort_runtimebase64 解码校验、确认CPUExecutionProvider可用、构造推理会话——全程不下载权重、不发起网络请求。三、在真机基准本地 INT8 模型smoke fixture 只验证管线跑得通要评估真实临床模型的部署表现按以下流程在联网暂存机 pin 并下载模型 revision把完整的本地模型目录拷到设备测量前断开网络加上--model重新运行OPENMED_OFFLINE1 $EDGE_PYTHON -m openmed.eval.edge_benchmark \ --profile raspberry-pi-5 \ --model /opt/openmed/model-int8 \ --variant int8 \ --repeat 20 \ --install-path $EDGE_SITE_PACKAGES \ --require-aarch64 \ --output edge-local-int8.json底层行为load_local_onnx_runtime路径必须已存在否则FileNotFoundError通过openmed.onnx.inference.OnnxModel.from_pretrained(local_path, variant..., local_files_onlyTrue, providers(CPUExecutionProvider,))加载local_files_onlyTrue杜绝 Hub 回退加载与推理全程处于 socket 守护范围内结果记录模型 ONNX 工件的SHA-256 摘要但永不记录本地路径、笔记文本、文档标识、预测 span 或检出文本——聚合结果本身不携带 PHI。四、Footprint 预算硬性上限的事实来源预算的权威数据源是 openmed/eval/budgets/edge_sbc.jsonschema_version: 1Profile目标设备设备档位安装上限峰值 RSS 上限raspberry-pi-5Raspberry Pi 5 8GBBase300 MiB900 MiBjetson-nanoNVIDIA Jetson Nano 4GBTiny300 MiB350 MiB换算成字节JSON 中实际值install_size_bytes_max均为 314572800peak_rss_bytes_max分别为 943718400 与 367001600。两条上限独立生效且口径不同安装上限只约束隔离的edge-sbc环境不含 Python 解释器与模型权重峰值 RSS 则包含解释器、OpenMed、ONNX Runtime 与所加载的基准/模型进程。因此一个真实模型完全可能过安装关、挂内存关或反之——这正是把两项拆开审计的意义。footprint_gate的校验逻辑footprint_gate.py会依次断言报告benchmark edge_sbc、schema_version 1、offline is True、network_guard socket-blocked、profile 与所选预算一致且install_size_bytes与peak_rss_bytes都存在并 ≤ 各自上限任一不满足即 fail closed。五、归档的合成代理结果仅供参考非硬件实测下表为首批存档记录采集条件为2026-08-18、冻结的 OpenMed 2.2.0 源码安装、Python 3.11.10、ONNX Runtime 1.23.2、内置 identity 图运行在Apple ARM64 开发机上。profile 列仅用于选择目标预算报告内嵌的machine对象才是权威机器信息——这些行不得被描述为 Raspberry Pi 或 Jetson 硬件结果。Profile budgetInstallPeak RSS冷启动Tokens/sGateraspberry-pi-5228.089 MiB143.094 MiB52.375 ms3,870,404.981Passjetson-nano228.089 MiB143.859 MiB54.692 ms3,837,770.239Pass聚合源记录归档于 2026-08-18-raspberry-pi-5-arm64-proxy.json 与 2026-08-18-jetson-nano-arm64-proxy.json。短时合成运行会受进程启动与调度状态影响比较回归请以硬性字节预算为准而不是这些参考速率。六、CI 与隐私保障基准是怎么上保险的CI 维度仓库工作流文档明确说明为.github/workflows/edge-benchmark.yml在 GitHub 原生ubuntu-24.04-arm运行器上执行两个 profile 的全流程校验uname -m为aarch64创建与上文完全一致的 frozenedge-sbc环境以OPENMED_OFFLINE1执行基准同时套用两条 footprint 上限聚合 JSON 证据保留 90 天。隐私维度fail closed 的输入校验默认运行器只接受提交进仓库的合成笔记每个文档必须声明metadata.source synthetic否则在运行时加载前就失败。对应源码校验 _validate_synthetic_documents语料非空、无重复document_id、文本非空白、source必须为synthetic。因此请遵守两条铁律不要把真实患者文本、受限制语料、模型路径或密钥写进基准元数据或文件名报告中的machine、workload.sha256、runtime.artifact_sha256都是聚合/哈希字段设计上就不携带原始输入。底层网络守护整个加载 推理窗口包裹在 network_blocked_if_offline(local_onlyTrue) 上下文内它会 patch 出站 socket且采用引用计数式嵌套守护——重叠/嵌套的 guard 共享一次进程级 patch直到最后一个活跃作用域退出才恢复原始 socket 函数避免单线程提前放行网络。这也是OPENMED_OFFLINE1与报告里network_guard: socket-blocked、offline: true字段能成立的原因。七、快速决策清单只想在 SBC 上验证打包与离线执行跑内置 fixture 版 smoke benchmark第二节命令要评估真实模型部署联网暂存机 pin 模型 → 拷贝目录 → 断网 → 加--model/--variant重测第三节做回归把关以 edge_sbc.json 的两条硬预算为准用footprint_gate自动判定跨档案对比参考 arm-latency.md 与 low-resource.md 等基准文档理解边缘档位与低资源场景的差异更广的边缘运行主题可继续阅读 edge-sbc 同目录下的 android-accelerators.md、low-ram-loading.md、cpu-fastpath.md 等运行时文档它们共同构成 OpenMed 端侧执行的全景。【免费下载链接】openmedLocal-first healthcare AI: clinical NER HIPAA PII de-identification that runs 100% on-device. 2,200 medical models, 21 languages, Apple MLX Python, no cloud, no patient data leaving your network. Apache-2.0项目地址: https://gitcode.com/GitHub_Trending/ope/openmed创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考