Skip to content
tianshuo78520a edited this page Apr 20, 2021 · 55 revisions

整体介绍

当您提交一个PR(Pull_Request),您的PR需要经过一些CI(Continuous Integration),下表以触发develop分支的为例为您展示需要通过的CI流程。

平台/任务名称 CI名称 镜像信息
Linux PR-CI-CPU-Py2 Dockerfile.cuda10_cudnn7_gcc82_ubuntu16
PR-CI-Py3 Dockerfile.cuda9_cudnn7_gcc48_py35_centos6
PR-CI-Inference Dockerfile.cuda10_cudnn7_gcc82_ubuntu16
PR-CI-Coverage Dockerfile.cuda10_cudnn7_gcc82_ubuntu16
PR-CI-OP-benchmark Dockerfile.cuda10_cudnn7_gcc82_ubuntu16
PR-CI-Model-benchmark Dockerfile.cuda10_cudnn7_gcc82_ubuntu16
PR-CI-Kunlun hub.baidubce.com/paddlepaddle/paddle:latest-gpu-cuda10.1-cudnn7
PR-CI-APPROVAL
PR-CI-musl
Mac PR-CI-Mac-Python3
Windows PR-CI-Windows
PR-CI-Windows-OPENBLAS
Licese/CLA license/cla
CheckPRTemplate CheckPRTemplate

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

  • 签署CLA协议
  • 通过三个不同平台(Linux/Mac/Windows)的编译与单测
  • 通过代码风格检测。

需要注意的是:您需要在commit中添加说明(commit message)以触发CI,写法如下:

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

各流水线介绍

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

CLA

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

Linux

PR-CI-CPU-Py2

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

  • CI平均耗时:15min
  • 高峰期可能排队:20min
  • 执行脚本:paddle/scripts/paddle_build.sh build_and_check

此CI会经过以下步骤:

  1. 编译Develop分支
  2. 生成api_dev.spec(dev分支的API列表)
  3. 编译当前PR分支
  4. 验证单测
  5. 生成api_pr.spec(PR分支的API列表)
  6. 步骤4和步骤5做增量,做增量API的英文文档检测规范性
  7. API/OP修改需要TPM approval

PR-CI-Py3

该CI主要的功能是为了检测当前PR在Linux系统下python35版本的编译与单测是否通过。

  • CI平均耗时:70min
  • 高峰期可能排队:4h
  • 执行脚本:paddle/scripts/paddle_build.sh cicheck_py35

此CI会经过以下步骤:

  1. 编译当前PR的GPU python3版本
  2. 运行单测:单卡case;2卡case;4/8卡case

PR-CI-Inference

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

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

此CI会经过以下步骤:

  1. 编译,生成预测库与训练库
  2. Testing fluid library for inference
  3. Testing fluid library for training

PR-CI-Coverage

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

  • CI平均耗时:100min
  • 高峰期可能排队:4h
  • 执行脚本:paddle/scripts/paddle_build.sh cicheck_coverage

此CI会经过以下步骤:

  1. 第一次对UT进行check approval
  2. 编译当前PR的GPU版本
  3. 运行单测:单卡case,2卡case
  4. 获取覆盖率:增量/全量
  5. 生成当前PR的UT列表
  6. 再次编译develop分支的GPU版本
  7. 生成dev分支的UT列表
  8. 步骤5和步骤7做diff,并做第二次的check approval

PR-CI-OP-benchmark

该CI主要的功能是PR中的修改是否会造成OP性能下降或者精度错误。

  • CI平均耗时:40min
  • 高峰期可能排队:4h
  • 执行脚本:paddle/scripts/paddle_build.sh test_op_benchmark

此CI会经过以下步骤:

  1. 从PR中获取在paddle/fluid/operators目录下修改的*_op.cu*文件列表,对于头文件递归查询到被包含的*_op.cu*文件,然后进行第2步,如果没有获取到任何满足要求的文件则按照CI运行成功状态退出CI执行
  2. clone PaddlePaddle/benchmark代码库,匹配第1步中修改的文件,生成待测试的op列表,然后进行第3步,如果待测试op列表为空则进行第4步
  3. 依赖PaddlePaddle/benchmark提供的测试框架,分别编译develop分支与PR分支对应的whl包并运行测试脚本,得到各自对应的性能数据,然后对比性能差异并打印性能变化结果,性能/精度对比超过阈值时设置CI运行状态为失败,然后进行第4步
  4. 判断是否op在PaddlePaddle/benchmark下缺少测试脚本,如果缺少则给出提示并设置CI运行状态为失败,综合第3、4中的CI运行状态退出CI执行

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

PR-CI-Model-benchmark

该CI主要的功能是检测PR中的修改是否会导致模型性能下降或者运行报错。

  • CI平均耗时:29min
  • CI高峰期可能排队:4h
  • 执行脚本:paddle/scripts/paddle_build.sh test_model_benchmark

此CI会经过以下步骤:

  1. 根据PR的代码修改判断是否符合跳过条件。具体的跳过原则是:跳过inference,tests,tools,cmake文件夹下修改文件的PR_CI_Model_Benchmark运行,如果是op文件的修改,检查修改的op文件是否在模型对应的op列表中,如果没有则不再运行PR_CI_Model_Benchmark。
  2. 编译PR分支对应的wheel包,并clone PaddlePaddle/benchmark代码库,加载数据集,依次运行测试模型。
  3. 提取性能结果与benchmark标准值进行对比,如果波动在阈值范围内则返回成功;否则会更改develop分支的结果作为标准值,重新核验结果,如仍有性能下降问题则返回失败。

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

PR-CI-Kunlun

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

  • CI平均耗时:5-10min
  • CI高峰期可能排队:1h
  • 执行脚本:paddle/scripts/paddle_build.sh check_xpu_coverage

此CI会经过以下步骤:

  1. 编译当前PR的昆仑 python3版本
  2. 运行单测:单卡case;2卡case;4/8卡case

PR-CI-musl

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

  • CI平均耗时:5min
  • CI高峰期可能排队:1h
  • 执行脚本:paddle/scripts/musl_build/build_paddle.sh

此CI会经过以下步骤:

编译当前PR在MUSL操作系统中的检查

PR-CI-APPROVAL

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

  • CI平均耗时:2min
  • CI高峰期可能排队:30min
  • 执行脚本:paddle/scripts/paddle_build.sh assert_file_approvals

此CI会经过以下步骤:

检查PR是否有审核人APPROVAL

MAC

PR-CI-Mac-Python3

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

  • CI平均耗时:30min
  • 高峰期可能排队:35min
  • 执行脚本:paddle/scripts/paddle_build.sh maccheck_py35

此CI会经过以下步骤:

  1. 编译当前PR的Mac版本
  2. 根据不同的python版本安装不同的paddle
  3. 运行单测
  4. 生成当前PR的UT列表
  5. 再次编译develop分支的Mac版本
  6. 生成dev分支的UT列表
  7. 步骤4和步骤6做diff,并做第二次的check approval

Windows

PR-CI-Windows

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

  • CI平均耗时:1h40min
  • 高峰期可能排队:2h

此CI会经过以下步骤:

  1. 清理后台编辑进程环境,并配置编译环境
  2. 编译当前PR的Windows版本MKL+GPU
  3. whl包安装测试
  4. 运行单测
  5. Testing fluid library for inference
  6. 生成当前PR的UT列表
  7. 再次编译develop分支
  8. 生成dev分支的UT列表
  9. 步骤6和步骤8做diff,并做第二次的check approval
  10. 再次清理后台编译进程环境

PR-CI-Windows-OPENBLAS

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

  • CI平均耗时:35min
  • 高峰期可能排队:2h

此CI会经过以下步骤:

  1. 清理后台编译进程环境,并配置编译环境
  2. 编译当前PR的Windows版本OPENBLAS+CPU
  3. whl包安装测试
  4. 运行单测
  5. Testing fluid library for inference
  6. 再次清理后台编译进程环境

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的具体修改内容

常见FAQ

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

Clone this wiki locally