-
Notifications
You must be signed in to change notification settings - Fork 5.6k
paddle_ci_manual
当您提交一个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
进行简单介绍。
贡献者许可证协议Contributor License Agreements是指当您要给Paddle贡献代码的时候,需要签署的一个协议。如果不签署那么您贡献给 Paddle 项目的修改,即PR
会被 Github 标志为不可被接受,签署了之后,这个PR
就是可以在 review 之后被接受了。
该CI主要的功能是为了检测develop
分支与当前PR
分支的增量的API英文文档是否符合规范,以及当变更API或OP时需要TPM approval。
- CI平均耗时:15min
- 高峰期可能排队:20min
- 执行脚本:
paddle/scripts/paddle_build.sh build_and_check
此CI会经过以下步骤:
- 编译Develop分支
- 生成api_dev.spec(dev分支的API列表)
- 编译当前PR分支
- 验证单测
- 生成api_pr.spec(PR分支的API列表)
- 步骤4和步骤5做增量,做增量API的英文文档检测规范性
- API/OP修改需要TPM approval
该CI主要的功能是为了检测当前PR在Linux系统下python35版本的编译与单测是否通过。
- CI平均耗时:70min
- 高峰期可能排队:4h
- 执行脚本:
paddle/scripts/paddle_build.sh cicheck_py35
此CI会经过以下步骤:
- 编译当前PR的GPU python3版本
- 运行单测:单卡case;2卡case;4/8卡case
该CI主要的功能是为了检测当前PR对C++预测库与训练库的编译和单测是否通过。
- 执行脚本:
paddle/scripts/paddle_build.sh test_inference
此CI会经过以下步骤:
- 编译,生成预测库与训练库
- Testing fluid library for inference
- Testing fluid library for training
该CI主要的功能是检测当前PR在Linux系统下python27版本的编译与单测是否通过,同时增量代码需满足行覆盖率大于90%的要求。
- CI平均耗时:100min
- 高峰期可能排队:4h
- 执行脚本:
paddle/scripts/paddle_build.sh cicheck_coverage
此CI会经过以下步骤:
- 第一次对UT进行check approval
- 编译当前PR的GPU版本
- 运行单测:单卡case,2卡case
- 获取覆盖率:增量/全量
- 生成当前PR的UT列表
- 再次编译develop分支的GPU版本
- 生成dev分支的UT列表
- 步骤5和步骤7做diff,并做第二次的check approval
该CI主要的功能是PR中的修改是否会造成OP性能下降或者精度错误。
- CI平均耗时:40min
- 高峰期可能排队:4h
- 执行脚本:
paddle/scripts/paddle_build.sh test_op_benchmark
此CI会经过以下步骤:
- 从PR中获取在
paddle/fluid/operators
目录下修改的*_op.cu*
文件列表,对于头文件递归查询到被包含的*_op.cu*
文件,然后进行第2步,如果没有获取到任何满足要求的文件则按照CI运行成功状态退出CI执行- clone PaddlePaddle/benchmark代码库,匹配第1步中修改的文件,生成待测试的op列表,然后进行第3步,如果待测试op列表为空则进行第4步
- 依赖PaddlePaddle/benchmark提供的测试框架,分别编译develop分支与PR分支对应的whl包并运行测试脚本,得到各自对应的性能数据,然后对比性能差异并打印性能变化结果,性能/精度对比超过阈值时设置CI运行状态为失败,然后进行第4步
- 判断是否op在PaddlePaddle/benchmark下缺少测试脚本,如果缺少则给出提示并设置CI运行状态为失败,综合第3、4中的CI运行状态退出CI执行
关于CI失败解决方案等详细信息可查阅PR-CI-OP-benchmark Manual
该CI主要的功能是检测PR中的修改是否会导致模型性能下降或者运行报错。
- CI平均耗时:29min
- CI高峰期可能排队:4h
- 执行脚本:
paddle/scripts/paddle_build.sh test_model_benchmark
此CI会经过以下步骤:
- 根据PR的代码修改判断是否符合跳过条件。具体的跳过原则是:跳过inference,tests,tools,cmake文件夹下修改文件的PR_CI_Model_Benchmark运行,如果是op文件的修改,检查修改的op文件是否在模型对应的op列表中,如果没有则不再运行PR_CI_Model_Benchmark。
- 编译PR分支对应的wheel包,并clone PaddlePaddle/benchmark代码库,加载数据集,依次运行测试模型。
- 提取性能结果与benchmark标准值进行对比,如果波动在阈值范围内则返回成功;否则会更改develop分支的结果作为标准值,重新核验结果,如仍有性能下降问题则返回失败。
关于CI失败解决方案等详细信息可查阅PR-CI-Model-benchmark Manual
该CI主要的功能是检测PR中的修改能否在昆仑芯片上通过单测检查。
- CI平均耗时:5-10min
- CI高峰期可能排队:1h
- 执行脚本:
paddle/scripts/paddle_build.sh check_xpu_coverage
此CI会经过以下步骤:
- 编译当前PR的昆仑 python3版本
- 运行单测:单卡case;2卡case;4/8卡case
该CI主要的功能是检测PR中的修改能否在昆仑芯片上通过单测检查。
- CI平均耗时:5min
- CI高峰期可能排队:1h
- 执行脚本:
paddle/scripts/musl_build/build_paddle.sh
此CI会经过以下步骤:
编译当前PR在MUSL操作系统中的检查
该CI主要的功能是检测PR中的修改是否通过了审批。
- CI平均耗时:2min
- CI高峰期可能排队:30min
- 执行脚本:
paddle/scripts/paddle_build.sh assert_file_approvals
此CI会经过以下步骤:
检查PR是否有审核人APPROVAL
该CI是为了检测当前PR在MAC系统下python35版本的编译与单测是否通过,以及做develop与当前PR的单测增量检测,如有不同,提示需要approval。
- CI平均耗时:30min
- 高峰期可能排队:35min
- 执行脚本:
paddle/scripts/paddle_build.sh maccheck_py35
此CI会经过以下步骤:
- 编译当前PR的Mac版本
- 根据不同的python版本安装不同的paddle
- 运行单测
- 生成当前PR的UT列表
- 再次编译develop分支的Mac版本
- 生成dev分支的UT列表
- 步骤4和步骤6做diff,并做第二次的check approval
该CI是为了检测当前PR在Windows系统下MKL版本的GPU编译与单测是否通过,以及做develop与当前PR的单测增量检测,如有不同,提示需要approval。
- CI平均耗时:1h40min
- 高峰期可能排队:2h
此CI会经过以下步骤:
- 清理后台编辑进程环境,并配置编译环境
- 编译当前PR的Windows版本MKL+GPU
- whl包安装测试
- 运行单测
- Testing fluid library for inference
- 生成当前PR的UT列表
- 再次编译develop分支
- 生成dev分支的UT列表
- 步骤6和步骤8做diff,并做第二次的check approval
- 再次清理后台编译进程环境
该CI是为了检测当前PR在Windows系统下OPENBLAS版本的CPU编译与单测是否通过。
- CI平均耗时:35min
- 高峰期可能排队:2h
此CI会经过以下步骤:
- 清理后台编译进程环境,并配置编译环境
- 编译当前PR的Windows版本OPENBLAS+CPU
- whl包安装测试
- 运行单测
- Testing fluid library for inference
- 再次清理后台编译进程环境
检查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。