Skip to content
zhangchunle edited this page Mar 3, 2022 · 55 revisions

整体介绍

当您提交一个PR(Pull_Request),您的PR需要经过一些CI(Continuous Integration),以触发develop分支的为例为您展示CI执行的顺序:

如上图所示,提交一个PR,您需要:

  • 签署CLA协议
  • PR描述需要符合规范
  • 通过不同平台(Linux/Mac/Windows/XPU/NPU等)的编译与单测
  • 通过静态代码扫描工具的检测

需要注意的是:如果您的PR只修改文档部分,您可以在commit中添加说明(commit message)以只触发文档相关的CI,写法如下:

# PR仅修改文档等内容,只触发PR-CI-Static-Check
git commit -m 'test=document_fix'

各流水线介绍

下面以触发develop分支为例,分平台对每条CI进行简单介绍。

CLA

贡献者许可证协议Contributor License Agreements是指当您要给Paddle贡献代码的时候,需要签署的一个协议。如果不签署那么您贡献给 Paddle 项目的修改,即PR会被 Github 标志为不可被接受,签署了之后,这个PR就是可以在 review 之后被接受了。

CheckPRTemplate

检查PR描述信息是否按照模板填写。

  • 通常10秒内检查完成,如遇长时间未更新状态,请re-edit一下PR描述重新触发该CI。
### PR types
<!-- One of [ New features | Bug fixes | Function optimization | Performance optimization | Breaking changes | Others ] -->
(必填)从上述选项中,选择并填写PR类型
### PR changes
<!-- One of [ OPs | APIs | Docs | Others ] -->
(必填)从上述选项中,选择并填写PR所修改的内容
### Describe
<!-- Describe what this PR does -->
(必填)请填写PR的具体修改内容

Linux平台

PR-CI-Clone

该CI主要是将当前PR的代码从GitHub clone到CI机器,方便后续的CI直接使用。

PR-CI-APPROVAL

该CI主要的功能是检测PR中的修改是否通过了审批。

  • 执行脚本:paddle/scripts/paddle_build.sh assert_file_approvals

PR-CI-Build

该CI主要是编译出当前PR与develop分支的两个编译产物,并且将编译产物上传到BOS(百度智能云对象存储)中,方便后续的CI可以直接复用该编译产物。

  • 执行脚本:paddle/scripts/paddle_build.sh build_pr_dev

PR-CI-Py3

该CI主要的功能是为了检测当前PR在CPU、Python3版本的编译与单测是否通过。

  • 执行脚本:paddle/scripts/paddle_build.sh cicheck_py37

PR-CI-Coverage

该CI主要的功能是检测当前PR在GPU、Python3版本的编译与单测是否通过,同时增量代码需满足行覆盖率大于90%的要求。

  • 编译脚本:paddle/scripts/paddle_build.sh cpu_cicheck_coverage
  • 测试脚本:paddle/scripts/paddle_build.sh gpu_cicheck_coverage

PR-CE-Framework

该CI主要是为了测试P0级框架API与预测API的功能是否通过。此CI使用PR-CI-Build的编译产物,无需单独编译。

PR-CI-ScienceTest

该CI主要是为了科学计算相关的单测是否通过。此CI使用PR-CI-Build的编译产物,无需单独编译。

PR-CI-OP-benchmark

该CI主要的功能是PR中的修改是否会造成OP性能下降或者精度错误。此CI使用PR-CI-Build的编译产物,无需单独编译。

  • 执行脚本:tools/ci_op_benchmark.sh run_op_benchmark

关于CI失败解决方案等详细信息可查阅PR-CI-Model-benchmark Manual

PR-CI-Model-benchmark

该CI主要的功能是检测PR中的修改是否会导致模型性能下降或者运行报错。此CI使用PR-CI-Build的编译产物,无需单独编译。

  • 执行脚本:tools/ci_model_benchmark.sh run_all

关于CI失败解决方案等详细信息可查阅PR-CI-Model-benchmark Manual

PR-CI-Static-Check

该CI主要的功能是检查代码风格是否符合规范,检测develop分支与当前PR分支的增量的API英文文档是否符合规范,以及当变更API或OP时需要TPM approval。

  • 编译脚本:paddle/scripts/paddle_build.sh build_and_check_cpu
  • 示例文档检测脚本:paddle/scripts/paddle_build.sh build_and_check_gpu

PR-CI-infrt

该CI主要是为了检测infrt是否编译与单测通过

  • 编译脚本:paddle/scripts/infrt_build.sh build_only
  • 测试脚本:paddle/scripts/infrt_build.sh test_only

PR-CI-CINN

该CI主要是为了编译含CINN的Paddle,并运行Paddle-CINN对接的单测,保证训练框架进行CINN相关开发的正确性。

  • 编译脚本:paddle/scripts/paddle_build.sh build_only
  • 测试脚本:paddle/scripts/paddle_build.sh test

PR-CI-Inference

该CI主要的功能是为了检测当前PR对C++预测库与训练库的编译和单测是否通过。

  • 编译脚本:paddle/scripts/paddle_build.sh build_inference
  • 测试脚本:paddle/scripts/paddle_build.sh gpu_inference

PR-CI-GpuPS

该CI主要是为了保证GPUBOX相关代码合入后编译可以通过。

  • 编译脚本:paddle/scripts/paddle_build.sh build_gpubox

MAC

PR-CI-Mac-Python3

该CI是为了检测当前PR在MAC系统下python35版本的编译与单测是否通过,以及做develop与当前PR的单测增量检测,如有不同,提示需要approval。

  • 执行脚本:paddle/scripts/paddle_build.sh maccheck_py35

Windows

PR-CI-Windows

该CI是为了检测当前PR在Windows系统下MKL版本的GPU编译与单测是否通过,以及做develop与当前PR的单测增量检测,如有不同,提示需要approval。

  • 执行脚本:paddle/scripts/paddle_build.bat wincheck_mkl

PR-CI-Windows-OPENBLAS

该CI是为了检测当前PR在Windows系统下OPENBLAS版本的CPU编译与单测是否通过。

  • 执行脚本:paddle/scripts/paddle_build.bat wincheck_openblas

PR-CI-Windows-Inference

该CI是为了检测当前PR在Windows系统下预测模块的编译与单测是否通过。

  • 执行脚本:paddle/scripts/paddle_build.bat wincheck_inference

XPU机器

PR-CI-Kunlun

该CI主要的功能是检测PR中的修改能否在昆仑芯片上编译与单测通过。

  • 执行脚本:paddle/scripts/paddle_build.sh check_xpu_coverage

NPU机器

PR-CI-NPU

该CI主要是为了检测当前PR对NPU代码编译跟测试是否通过。

  • 编译脚本:paddle/scripts/paddle_build.sh build_only
  • 测试脚本:paddle/scripts/paddle_build.sh gpu_cicheck_py35

Sugon-DCU机器

PR-CI-ROCM-Compile

该CI主要的功能是检测PR中的修改能否在曙光芯片上编译通过。

  • 执行脚本:paddle/scripts/musl_build/build_paddle.sh build_only

静态代码扫描

PR-CI-iScan-C

该CI是为了检测当前PR的C++代码是否可以通过静态代码扫描。

PR-CI-iScan- Python

该CI是为了检测当前PR的Python代码是否可以通过静态代码扫描。

CI失败如何处理

当您的PR的CI失败时,paddle-bot会在您的PR页面发出一条评论,同时此评论GitHub会同步到您的邮箱,让您第一时间感知到PR的状态变化(注意:只有第一条CI失败的时候会发邮件,之后失败的CI只会更新PR页面的评论。)

您可以通过点击paddle-bot评论中的CI名字,也可通过点击CI列表中的Details来查看CI的运行日志,如上图。通常运行日志的末尾会告诉您CI失败的原因。

由于网络代理、机器不稳定等原因,有时候CI的失败也并不是您的PR自身的原因,这时候您只需要rerun此CI即可。

如果CI失败您无法判断原因,可进【CI and CE值班群】咨询,群号请联系 @lelelelelez

常见FAQ

若遇到其他问题,请联系 @lelelelelez

Clone this wiki locally