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分支中,创建发布分支之前:

    1. version.h中更新LAST_RELEASE_VERSION

      • 设置为X.Y.Z,与您当前创建的分支版本相同。

      • 在发布分支被切割后,main中的VERSION_NUMBER将会增加到下一个未来版本。

    2. 确保新版本的发布版本、IR版本、ai.onnx操作集版本、ai.onnx.ml操作集版本和ai.onnx.training操作集版本在ONNX proto文件Versioning.mdschema.hhelper.pyhelper_test.py中是正确的。

  • 创建一个发布分支

    1. 点击branches中的“New branch”,并选择main作为源。

    2. 确保所有测试在新分支上通过。

  • 在切割发布分支后:

    1. 创建PR以将main中的VERSION_NUMBER文件设置为下一个未来版本,X.Y+1.0

    2. 创建PR以将新发布分支中的VERSION_NUMBER文件设置为X.Y.Zrc1

      • 例如,1.16.0 的第一个候选版本将是 1.16.0rc1

    3. onnx/defs/operator_sets.honnx/defs/schema.h中提升ai.onnx域的操作集版本,以供未来操作符的添加和更改使用。

上传发布候选版本到TestPyPI

重要

  • 等待 PR 设置发布分支的 VERSION_NUMBER 以合并并构建后再继续。

  • 要将文件推送到TestPyPI或PyPI,如果尚未安装twine,请安装它:pip install twine

  • 与PyPI类似,一个发布版本只能一次推送到TestPyPI。

    • 要更新已经推送的文件,您必须增加VERSION_NUMBER,重新构建,并推送一个新的X.Y.Zrc2等。

    • 要测试推送命令,您可以使用docker或podman创建一个本地pypi服务器

      1. 启动服务器 docker run --rm -it --platform linux/amd64 -p 80:8080 pypiserver/pypiserver:latest run -a . -P .

        • 这将启动一个本地pypiserver,不需要身份验证(任何用户/密码都可以使用)。

        • 容器不保存状态。停止并再次启动它将允许您多次推送相同的版本。

      2. 推送文件:

        • 轮子: 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/*

      3. 从您的测试服务器拉取并安装:

        • pip uninstall -y onnx && pip install --index-url http://127.0.0.1:80/simple/ --pre onnx

推动轮子

  1. 从ONNX Github Actions中收集候选版本的wheel文件。

    • 对于每个ONNX GitHub Action:

      • ONNX GitHub 操作

      • 查找发布分支的运行

        • 或者通过点击“运行工作流程”来启动运行,选择发布分支,点击“运行工作流程”

      • 点击已完成的任务,滚动到“Artifacts”部分(底部),然后点击“wheels”以下载文件

      • 提取wheels.zip文件并将它们的内容合并到一个文件夹中

  2. 手动将生成的轮子上传到TestPyPI:twine upload --repository testpypi --verbose -u /*.whl

    • 在您能够推送文件之前,ONNX项目的当前所有者需要授予您访问该项目的权限。

    • 构建到文件中的项目名称和版本。

源文件分发

  1. 确保所有git子模块都已更新

    • git submodule update --init

  2. 确保 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 并从您的本地分支中删除这些文件

  3. 生成源代码分发文件:python -m build --sdist

    • 如果你还没有build包,请运行pip install build

  4. 上传源分发文件到TestPyPI:twine upload --repository testpypi --verbose -u dist/*

    • 备注:

      • 在您能够推送文件之前,ONNX项目的当前所有者需要授予您访问该项目的权限。

      • 构建到文件中的项目名称和版本。

  5. 确认可以安装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 版本

合作伙伴验证

正式发布

验证步骤必须在此之前完成!这是新返回的点。

  • git标签一旦发布就不应更改

  • 一旦推送到PyPI,就无法更新发布。必须创建一个新的发布来代替。

设置最终版本号

  • 创建PR以从新发布分支中的VERSION_NUMBER文件中删除“rcX”后缀。

创建发布标签

  • Draft a release 基于发布分支:

    • 在确定不需要更多更改之前,请勿点击 Publish release

      • 如果需要稍后保存和更新,请使用Save Draft

      • 发布将创建新的git标签

    • 标签:请参见Preparation顶部以创建标签。

    • 目标:刚刚切出的发布分支

    • 上一个标签:选择上一个发布版本。

    • 编写:

      • 使用以前的版本作为模板

      • 使用来自发布物流维基的信息,该信息应在分支切割之前创建。

      • 添加自wiki编写以来合并到发布中的任何额外提交。

    • .tar.gz 和 .zip 文件将在发布后自动生成。

上传到官方PyPI

注意事项:

  • 一旦包上传到PyPI,你不能在同一个PyPI实例上覆盖它

    • 请确保在上传到PyPI之前,TestPyPI上的所有内容都正常**

  • PyPI 有独立的登录、密码和 API 令牌,与 TestPyPI 不同,但流程是相同的。ONNX PyPI 的所有者需要授予访问权限等。

按照上面Upload release candidate toTestPyPI中的WheelsSource Distribution步骤,进行以下更改:

  • 在您的PyPI账户中创建一个新的onnx范围的API令牌,用于上传onnx wheel(API令牌部分)。

    • 在推送发布版的轮子和源代码后,移除创建的令牌。

  • 上传时,从twine命令中移除--repository testpypi

  • 在验证上传时,从pip命令中移除-i https://test.pypi.org/simple/--pre

PyPI 发布后

公告

使用新的ONNX版本更新conda-forge包

ONNX 的 Conda 构建是通过 conda-forge/onnx-feedstock 完成的,该仓库运行基础设施以构建包并将其上传到 conda-forge。

合并到主分支

  • 如果紧急更改直接提交到发布分支,请将发布分支合并回主分支。

  • 如果所有合并到发布分支(在它被切出之后)的PR都是从主分支挑选的,那么合并PR将显示为空,这一步就不需要了。

移除PyPI上的旧onnx-weekly包

  • 从PyPI中删除所有onnx-weekly包,以节省刚刚发布版本的空间。

  • 步骤:

    • 前往 PyPI onnx-weekly/releases

      • 这是一个与onnx发布版本分开的项目,因此您可能需要向所有者请求访问权限

    • 点击目标包 -> 选项 -> 删除。