ONNX 版本发布¶
ONNX项目未来计划大约每四个月发布一次。我们遵循Semver版本控制方法,并将作为一个社区在每次发布时决定是进行主要版本还是次要版本的发布。
准备¶
确定新版本的版本号 (X.Y.Z)
在Slack的发布频道中讨论 (https://lfaifoundation.slack.com/archives/C018VGGJUGK)
对于 (v.X.Y.Z),如果发布版本为 1.16.0,
X=1, Y=16, Z=0
新分支将是
rel-1.16.0分支保护规则会自动应用于遵循此格式的分支。
新标签将是
v1.16.0
在发布物流维基中为发布创建新页面
创建发布分支¶
在
main分支中,创建发布分支之前:在version.h中更新
LAST_RELEASE_VERSION。设置为X.Y.Z,与您当前创建的分支版本相同。
在发布分支被切割后,
main中的VERSION_NUMBER将会增加到下一个未来版本。
确保新版本的发布版本、IR版本、ai.onnx操作集版本、ai.onnx.ml操作集版本和ai.onnx.training操作集版本在ONNX proto文件、Versioning.md、schema.h、helper.py和helper_test.py中是正确的。
创建一个发布分支
点击branches中的“New branch”,并选择
main作为源。确保所有测试在新分支上通过。
在切割发布分支后:
创建PR以将
main中的VERSION_NUMBER文件设置为下一个未来版本,X.Y+1.0。创建PR以将新发布分支中的
VERSION_NUMBER文件设置为X.Y.Zrc1。例如,1.16.0 的第一个候选版本将是
1.16.0rc1
在
onnx/defs/operator_sets.h和onnx/defs/schema.h中提升ai.onnx域的操作集版本,以供未来操作符的添加和更改使用。例如,这个演示PR。
上传发布候选版本到TestPyPI¶
重要
等待 PR 设置发布分支的
VERSION_NUMBER以合并并构建后再继续。要将文件推送到TestPyPI或PyPI,如果尚未安装
twine,请安装它:pip install twine当
twine命令提示输入密码时,请使用API令牌。您的密码将无法使用。注意:TestPyPI 和 PyPI 是独立的账户,因此请确保根据您上传的位置使用正确的账户。
与PyPI类似,一个发布版本只能一次推送到TestPyPI。
要更新已经推送的文件,您必须增加
VERSION_NUMBER,重新构建,并推送一个新的X.Y.Zrc2等。要测试推送命令,您可以使用docker或podman创建一个本地pypi服务器
启动服务器
docker run --rm -it --platform linux/amd64 -p 80:8080 pypiserver/pypiserver:latest run -a . -P .这将启动一个本地pypiserver,不需要身份验证(任何用户/密码都可以使用)。
容器不保存状态。停止并再次启动它将允许您多次推送相同的版本。
推送文件:
轮子:
twine upload --repository-url http://127.0.0.1:80 --verbose -u fake -p fake *.whl来源:
twine upload --repository-url http://127.0.0.1:80 --verbose -u fake -p fake dist/*
从您的测试服务器拉取并安装:
pip uninstall -y onnx && pip install --index-url http://127.0.0.1:80/simple/ --pre onnx
推动轮子
从ONNX Github Actions中收集候选版本的wheel文件。
对于每个ONNX GitHub Action:
ONNX GitHub 操作
查找发布分支的运行
或者通过点击“运行工作流程”来启动运行,选择发布分支,点击“运行工作流程”
点击已完成的任务,滚动到“Artifacts”部分(底部),然后点击“wheels”以下载文件
提取wheels.zip文件并将它们的内容合并到一个文件夹中
手动将生成的轮子上传到TestPyPI:
twine upload --repository testpypi --verbose -u。/*.whl 在您能够推送文件之前,ONNX项目的当前所有者需要授予您访问该项目的权限。
构建到文件中的项目名称和版本。
源文件分发
确保所有git子模块都已更新
git submodule update --init
确保 git checkout 是干净的 –
运行
git clean -nxd确保不存在以下自动生成的头文件。
onnx/onnx-operators.pb.cc
onnx/onnx-operator.pb.h
onnx/onnx.pb.cc
onnx/onnx.pb.h
如果它们存在,请运行
git clean -ixd并从您的本地分支中删除这些文件
生成源代码分发文件:
python -m build --sdist如果你还没有
build包,请运行pip install build。
上传源分发文件到TestPyPI:
twine upload --repository testpypi --verbose -udist/* 备注:
在您能够推送文件之前,ONNX项目的当前所有者需要授予您访问该项目的权限。
构建到文件中的项目名称和版本。
确认可以安装TestPyPI包:
Wheel 安装:
pip uninstall -y onnx && pip install -i https://test.pypi.org/simple/ --pre onnx假设预构建的while适用于您的环境,如果没有,将开始源代码安装。
源码安装:
pip uninstall -y onnx && pip install -i https://test.pypi.org/simple --no-binary onnx --pre onnx
包验证¶
测试ONNX本身
使用不同版本的Python、Protobuf版本和平台的各种组合测试PyPI包的安装。
安装TestPyPI包后,在发布分支中运行
pytest。Python 版本:适用于发布的 Python 版本。
Protobuf 版本:发布时的最新 protobuf 版本 + 用于之前发布的 protobuf 版本
合作伙伴验证
使用onnxruntime包进行测试:
使用已安装的onnxruntime包从test_with_ort.py运行测试脚本。
脚本测试了ONNX函数,如
load、checker.check_model和shape_inference.infer_shapes,以及onnxruntime函数,如InferenceSession和InferenceSession.run,在特定的ONNX模型示例上。
外部仓库的开放问题:
在转换器的仓库中创建GitHub问题,为他们提供包链接和在发布前测试版本的机会。
https://github.com/microsoft/onnxruntime
注意:How_To_Update_ONNX_Dev_Notes 存在于他们的仓库中,记录了如何拉取新的ONNX版本。
如果发现问题,应在onnx的
main分支中修复错误,然后将其精选到发布分支中。跟进报告者以确保问题得到解决(并在新的rc中验证)或推迟到新版本。
正式发布¶
验证步骤必须在此之前完成!这是新返回的点。
git标签一旦发布就不应更改
一旦推送到PyPI,就无法更新发布。必须创建一个新的发布来代替。
设置最终版本号¶
创建PR以从新发布分支中的
VERSION_NUMBER文件中删除“rcX”后缀。
创建发布标签¶
Draft a release 基于发布分支:
在确定不需要更多更改之前,请勿点击
Publish release。如果需要稍后保存和更新,请使用
Save Draft。发布将创建新的git标签
标签:请参见Preparation顶部以创建标签。
目标:刚刚切出的发布分支
上一个标签:选择上一个发布版本。
编写:
.tar.gz 和 .zip 文件将在发布后自动生成。
上传到官方PyPI¶
注意事项:¶
一旦包上传到PyPI,你不能在同一个PyPI实例上覆盖它。
请确保在上传到PyPI之前,TestPyPI上的所有内容都正常**
PyPI 有独立的登录、密码和 API 令牌,与 TestPyPI 不同,但流程是相同的。ONNX PyPI 的所有者需要授予访问权限等。
按照上面Upload release candidate toTestPyPI中的Wheels和Source Distribution步骤,进行以下更改:
在您的PyPI账户中创建一个新的onnx范围的API令牌,用于上传onnx wheel(API令牌部分)。
在推送发布版的轮子和源代码后,移除创建的令牌。
上传时,从twine命令中移除
--repository testpypi。在验证上传时,从pip命令中移除
-i https://test.pypi.org/simple/和--pre。
PyPI 发布后¶
公告
Slack:
在onnx-release和onnx-general频道中发布。
通过电子邮件列表通知ONNX合作伙伴:
ONNX News 帖子
更新 news.json,请参阅 示例 news.json PR
使用新的ONNX版本更新conda-forge包
ONNX 的 Conda 构建是通过 conda-forge/onnx-feedstock 完成的,该仓库运行基础设施以构建包并将其上传到 conda-forge。
在发布版本在https://github.com/onnx/onnx/releases上可用后的几个小时内,
regro-cf-autototick-bot应自动创建一个PR。如果自动PR有构建失败:
创建 conda-forge/onnx-feedstock 的个人分支
基于自动化PR分支创建个人分支
解决构建问题
基于你的分支提交一个替换的PR
如果自动PR没有创建,您需要手动提交一个PR
注意:使用发布版本的tar.gz文件的sha256哈希值(
sha256sum onnx-X.Y.Z.tar.gz),该文件可从https://github.com/onnx/onnx/releases获取。
合并到主分支
如果紧急更改直接提交到发布分支,请将发布分支合并回主分支。
如果所有合并到发布分支(在它被切出之后)的PR都是从主分支挑选的,那么合并PR将显示为空,这一步就不需要了。
移除PyPI上的旧onnx-weekly包
从PyPI中删除所有onnx-weekly包,以节省刚刚发布版本的空间。
步骤:
-
这是一个与onnx发布版本分开的项目,因此您可能需要向所有者请求访问权限
点击目标包 -> 选项 -> 删除。
-