ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

ONNX Runtime 升级 ONNX 子模块完整指南:从依赖安装到文档与测试同步

ONNX Runtime 升级 ONNX 子模块完整指南:从依赖安装到文档与测试同步 ONNX Runtime 升级 ONNX 子模块完整指南从依赖安装到文档与测试同步【免费下载链接】onnxruntimeONNX Runtime: cross-platform, high performance ML inferencing and training accelerator项目地址: https://gitcode.com/GitHub_Trending/on/onnxruntime导读本文面向 ONNX Runtime 的开发者系统梳理在 ONNX Runtime 仓库中升级 ONNXONNX 规范与算子定义到新版本/新提交的完整操作流程。全文围绕三条主线展开C 依赖的两种安装路径cmake/deps.txt下载构建与 vcpkg 包管理的同步更新、自动生成文档算子内核表、WebGL 算子表与 Pythonrequirements.txt的再生成、以及升级后测试用例与优化器的配套更新。读完本文你将掌握一次可交付的 ONNX 版本升级从改代码到过 CI 的每一步实操细节。本文内容以 docs/How_To_Update_ONNX_Dev_Notes.md 为骨架并结合当前仓库中 cmake/deps.txt、cmake/vcpkg-ports/onnx/portfile.cmake、cmake/patches/onnx/onnx.patch、tools/python/gen_opkernel_doc.py、tools/python/find_optimizer_opset_version_updates_required.py 等文件进行源码级印证。一、升级前的总览ONNX 依赖的两条安装路径ONNX Runtime 目前支持两种方式安装 ONNX 的 C 依赖二者均受 CI 覆盖cmake/deps.txt下载构建路径在 cmake/deps.txt 中以名称;URL;SHA1的 CSV 行描述所有第三方依赖构建时由 CMake 下载源码包并编译。vcpkg 包管理路径通过 cmake/vcpkg-ports/onnx/portfile.cmake 等端口文件把 ONNX 作为 vcpkg 包安装。官方建议在 Windows 机器上测试 vcpkg 路径。以当前仓库为例cmake/deps.txt 中 ONNX 被固定为v1.22.0发布版onnx;https://github.com/onnx/onnx/archive/refs/tags/v1.22.0.zip;2b2cd58ac7a26df5371266149e0c76776330cdf1其注释还记录了一次典型的“纯版本升级”经验从 rc2 到最终版仅涉及 CI workflow 与VERSION_NUMBER的改动算子 schema、opset 与测试数据均无变化因此可直接升级。这说明升级前先比对目标版本与当前版本之间onnx/defs、opset 与 testdata 的差异可以显著降低后续工作量。二、更新 ONNX 子模块SubmoduleONNX Runtime 通过 git submodule 引用 ONNX 源码挂在cmake/external/onnx下。升级的第一步是把子模块切到目标提交。文档强调用 commit id 比用分支更精确可追溯、可复现。cd cmake/external/onnx git remote update git reset --hard commit_id cd .. git add onnx将commit_id替换为你的目标提交如果不确定具体提交可以使用origin/main例如git reset --hard origin/main。执行完成后父仓库记录下子模块的新指针git add onnx使该变更进入暂存区。三、更新 cmake/deps.txt 下载路径当采用 deps.txt 下载构建路径时需要同步更新下载源与校验值更新 cmake/deps.txt把 ONNX 行的 zip 下载链接与 SHA1 改为新版本对应的值。文件头部注释说明了校验值的生成方式Linux 下运行sha1sumPowerShell 下可用(Get-FileHash -Algorithm SHA1 filename).Hash.ToLower()。文档同时给出一个取巧技巧先用错误的 SHA 构建ORT 会在报错信息中直接告诉你期望的 SHA。检查 cmake/patches/onnx/onnx.patch确认 patch 中的 diff 是否已在最新的 ONNX 版本中被上游解决被解决的部分应移除。当前仓库的 patch 内容反映了两个典型的 ORT 侧需求为 ONNX 的CMakeLists.txt增加ONNX_MINIMAL_BUILD选项使 WebAssembly/最小化构建只需data_type_utils.cc与生成的 protobuf 源码跳过完整算子/schema 源码去掉GroupNormalization算子 ver18 schema 上的Deprecate()标记保证 ORT 对该算子的兼容性。 可见该 patch 是 ORT 与上游 ONNX 行为差异的“粘合层”每次升级都必须重新评估。从源码构建 ONNXRUNTIME 验证文档给出的示例构建命令CUDA 12.6 环境、构建 wheel、并行编译、跳过测试./build.sh --config RelWithDebInfo --use_cuda --cuda_home /usr/local/cuda-12.6/ --cudnn_home /usr/local/cuda-12.6/ --build_wheel --parallel --skip_tests如果构建失败属于 ONNX 自身的问题修改/补充onnx.patch属于 ORT 适配问题则直接修改 ORT 侧代码。四、更新 cmake/vcpkg-ports 端口采用 vcpkg 路径时需要维护 cmake/vcpkg-ports/onnx/ 目录下的端口文件步骤如下同步 cmake/vcpkg-ports/onnx/binskim.patch文档要求将其内容与 cmake/patches/onnx/onnx.patch 保持一致——即 deps.txt 路径的补丁与 vcpkg 路径的补丁同源同步避免两条安装路径行为分叉。重新 diff 其余 patchcmake/vcpkg-ports/onnx/ 下除 binskim.patch 外的其他补丁如fix-cmakelists.patch、fix-dependency-protobuf.patch是 vcpkg 仓库构建 ONNX 所必需/创建的升级后需要重新运行 diff 确认这些补丁仍能干净地应用到新版 ONNX 上。这一点可从 portfile.cmake 的PATCHES段得到印证vcpkg_from_github( OUT_SOURCE_PATH SOURCE_PATH REPO onnx/onnx REF v1.22.0 SHA512 13fafff073a8e0bcf67fd06195da979c3c6273b3f5fdd25f5e5c39ad6af20eefe107f13dc73d52b6021e986d87401e46121e00bba8fbd09f098334e34f78462f PATCHES fix-cmakelists.patch fix-dependency-protobuf.patch binskim.patch )更新 cmake/vcpkg-ports/onnx/portfile.cmake将REF改为新 commit id 或 tag将SHA512改为新源码包的校验值。同样可用“故意填错 SHA512 触发构建报错、ORT 提示期望值”的办法获取正确哈希。portfile.cmake中其余逻辑展示了 vcpkg 端口的关键约束可作为修改时的背景知识vcpkg_check_linkage(ONLY_STATIC_LIBRARY)仅支持静态库链接通过find_program(PROTOC ...)定位 protobuf 自带的protoc并分别透传ONNX_CUSTOM_PROTOC_EXECUTABLE与Protobuf_PROTOC_EXECUTABLE根据 protobuf 库文件名后缀判断ONNX_USE_PROTOBUF_SHARED_LIBS取值配置ONNX_MLON、关闭测试与 benchmark并清理安装目录中 ORT 不需要的include/onnx/defs/*、onnx/reference等子目录以缩减包体积。上传包按 vcpkg 仓库内部文档说明上传新包也可直接用 Terrapin 工具上传 ONNX 包需要 SHA512示例命令如下C:\local\Terrapin\TerrapinRetrievalTool.exe -b https://vcpkg.storage.devpackages.microsoft.io/artifacts/ -a true -u Environment -p onnx源码tar.gz地址 -s SHA512 -d 本地下载临时文件路径从源码构建验证与 deps.txt 路径类似文档给出的 vcpkg 构建示例仅多出--use_vcpkg开关./build.sh --config RelWithDebInfo --use_cuda --cuda_home /usr/local/cuda-12.6/ --cudnn_home /usr/local/cuda-12.6/ --build_wheel --parallel --skip_tests --use_vcpkg五、更新 ONNX 相关自动生成文档ONNX 版本升级会改变可用的算子集合因此需要重新生成两类自动文档并更新 Pythonrequirements.txt。5.1 重新生成 ONNX kernels 文档OperatorKernels.md推荐直接从 CIAzureDevOps 发布的 Artifacts下载 CI 生成好的 markdown 上传更新若希望本地生成则执行# 在 onnxruntime 仓库根目录下 python tools/python/gen_opkernel_doc.py --output_path docs/OperatorKernels.md从源码看tools/python/gen_opkernel_doc.py 实际调用 Python 绑定的rtpy.get_all_operator_schema()与rtpy.get_all_opkernel_def()遍历当前构建中注册的全部算子 schema 与内核定义按 Execution Provider 分组输出表格并支持--providers按 EP 名过滤大小写不敏感会自动补齐ExecutionProvider后缀与--plugin-ep按NAME:PATH注册插件 EP 并纳入其内核两个可选参数。因此该命令必须基于升级后重新构建的 ONNXRUNTIME运行才能反映新 ONNX 版本的实际算子支持情况。文档头部也明确标注了“由脚本自动生成、请勿手工修改”。5.2 重新生成 WebGL 算子文档webgl-operators.mdjs/web/docs/webgl-operators.md 由 js/web/script/generate-webgl-operator-md.ts 生成需要先在 JS 两级目录安装依赖再构建文档# 在父级 JS 目录安装依赖 cd /path/to/onnxruntime/js npm install # 在 web 目录安装依赖 cd /path/to/onnxruntime/js/web npm install # 构建文档 npm run build:doc5.3 更新 Python requirements.txt将以下文件中的 ONNX 版本号更新为新版本如onnx1.16.0若从源码构建则使用 commit hash 形式的 git 依赖如githttp://github.com/onnx/onnx.gittargetonnxcommithash#eggonnxonnxruntime/test/python/requirements.txttools/ci_build/github/linux/docker/scripts/requirements.txttools/ci_build/github/linux/docker/scripts/manylinux/requirements.txttools/ci_build/github/linux/python/requirements.txt当前仓库的实际状态可作参照上述文件均固定为onnx1.22.0另有 tools/ci_build/github/linux/docker/scripts/lort/requirements.txt 等 CI 辅助文件同样固定该版本。文档还提醒运行git grep -rn onnx1 .检查是否还有其他位置引用了旧的 ONNX 版本号发现后一并更新必要时同步更新本文档即 docs/How_To_Update_ONNX_Dev_Notes.md 本身。六、附加注意事项从代码到 CI 的全链路检查升级 ONNX 不止改依赖还需处理以下连锁影响重新生成 OnnxMl.cs如果cmake/external/onnx/onnx/*.in.proto有任何变更需要重新生成 C# 侧OnnxMl.cs——构建 NuGet 包--build_nuget相关流程会自动完成这一步。部署新测试数据若从发布 tag 升级到新 commit需要联系维护者文档中为 ChangmingGitHub 名snnn把新测试数据连同其他测试模型部署到 CI 构建机确保测试覆盖每一个 ONNX opset。提交 PR 并手动排队打包流水线PR 提交后需要手动为分支的每一个打包流水线排队构建。WebAssembly CI 的文档过期检查如果 WebAssembly CI 流水线在 “Check out of dated documents” 阶段失败说明 WebGL 算子支持文档过期需要确保已安装 Node.js参见 js/README.md 的 Prerequisites按 js/README.md 的 Build 章节安装依赖按 Generating Document 章节更新文档并将docs/operators.md的变更提交入库。处理新增测试的失败新版 ONNX 通常会带来新测试可能触发失败此时需要更新onnxruntime/test/onnx/main.cconnxruntime/test/providers/cpu/model_tests.cccsharp/test/Microsoft.ML.OnnxRuntime.Tests.NetCoreApp/InferenceTest.netcore.csonnxruntime/test/testdata/onnx_backend_test_series_filters.jsonconnxruntime/test/testdata/onnx_backend_test_series_overrides.jsonc其中两个 JSONC 文件是 ONNX backend 测试系列的过滤器决定哪些用例被跳过与覆盖项决定哪些用例的结果被覆盖新算子/新 opset 加入后往往需要在这里增删条目。检查涉及变更算子的优化器如果某个算子发生了变化涉及该算子的图优化器可能需要同步更新 opset 版本支持。运行python tools/python/find_optimizer_opset_version_updates_required.py -o onnxruntime仓库根目录从 tools/python/find_optimizer_opset_version_updates_required.py 源码看该脚本会从onnxruntime/core/optimizer下所有.cc/.h中解析graph_utils::IsSupportedOptypeVersionAndDomain调用解析出每个优化器声称支持的算子 opset 上限同时从 ORT 内核注册文件onnxruntime/contrib_ops/cpu/cpu_contrib_kernels.cc、onnxruntime/contrib_ops/cuda/cuda_contrib_kernels.cc与 ONNX 头文件cmake/external/onnx/onnx/defs/operator_sets.h、operator_sets_ml.h提取每个算子的最新 opset两者比对后输出Newer opset found for ...类警告。将该脚本输出与当前 main 分支的输出做对比检查是否出现新的警告若有新警告联系对应优化器的负责人通常看最近谁修改了相关文件或向 “ONNX Runtime Shared Core” 邮件列表求助。七、总结一次 ONNX 升级的完整清单将上述步骤收拢为可执行的检查清单阶段关键动作涉及仓库文件子模块切换到目标 commit 并提交指针cmake/external/onnxsubmoduledeps.txt 路径更新下载 URL SHA1评估 onnx.patch源码构建验证cmake/deps.txt、cmake/patches/onnx/onnx.patchvcpkg 路径同步 binskim.patch重跑其余 patch diff更新 REF SHA512上传包--use_vcpkg构建验证cmake/vcpkg-ports/onnx/、portfile.cmake自动文档重新生成 OperatorKernels.md、webgl-operators.mdtools/python/gen_opkernel_doc.py、js/web/script/generate-webgl-operator-md.tsPython 依赖统一更新各 requirements.txt 并git grep查漏onnxruntime/test/python/requirements.txt 等测试与优化器更新 backend 测试过滤器/覆盖项运行 optimizer 脚本排查onnx_backend_test_series_filters.jsonc、find_optimizer_opset_version_updates_required.py收尾重新生成 OnnxMl.csproto 变更时、部署测试数据、PR 后手动排队 CINuGet 构建流程、CI 打包流水线按照这份清单逐项推进即可保证 ONNX 升级在依赖一致性、文档时效性、测试覆盖性与优化器正确性四个维度同时达标顺利通过各条 CI 流水线。【免费下载链接】onnxruntimeONNX Runtime: cross-platform, high performance ML inferencing and training accelerator项目地址: https://gitcode.com/GitHub_Trending/on/onnxruntime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表