提交 0ba1d140 编写于 作者: S songyouwei 提交者: Tao Luo

Add CI check for sequence ops' unittests (#21615)

上级 c3a88118
...@@ -567,6 +567,10 @@ function check_change_of_unittest() { ...@@ -567,6 +567,10 @@ function check_change_of_unittest() {
check_approvals_of_unittest 2 check_approvals_of_unittest 2
} }
function check_sequence_op_unittest(){
/bin/bash ${PADDLE_ROOT}/tools/check_sequence_op.sh
}
function generate_unittest_spec() { function generate_unittest_spec() {
spec_kind=$1 spec_kind=$1
if [ "$spec_kind" == "DEV" ]; then if [ "$spec_kind" == "DEV" ]; then
...@@ -1122,6 +1126,7 @@ function main() { ...@@ -1122,6 +1126,7 @@ function main() {
cmake_gen ${PYTHON_ABI:-""} cmake_gen ${PYTHON_ABI:-""}
build ${parallel_number} build ${parallel_number}
example example
check_sequence_op_unittest
generate_api_spec ${PYTHON_ABI:-""} "PR" generate_api_spec ${PYTHON_ABI:-""} "PR"
assert_api_spec_approvals assert_api_spec_approvals
;; ;;
......
# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from __future__ import print_function
import sys
# For ops in this whitelist, the check of batch size = 1 input will be skipped.
# Ops in this whitelist need to be fixed later.
NEED_TO_FIX_OP_LIST = [
'sequence_concat',
'sequence_conv',
'sequence_enumerate',
'sequence_erase',
'sequence_expand_as',
'sequence_expand',
'sequence_mask',
'sequence_pad',
'sequence_reshape',
'sequence_reverse',
'sequence_scatter',
'sequence_slice',
'sequence_softmax',
'sequence_topk_avg_pooling',
'sequence_unpad',
]
op_name = sys.argv[1]
print(op_name in NEED_TO_FIX_OP_LIST)
...@@ -32,6 +32,7 @@ API_FILES=("CMakeLists.txt" ...@@ -32,6 +32,7 @@ API_FILES=("CMakeLists.txt"
"python/paddle/fluid/tests/unittests/white_list/compile_vs_runtime_white_list.py" "python/paddle/fluid/tests/unittests/white_list/compile_vs_runtime_white_list.py"
"python/paddle/fluid/tests/unittests/white_list/no_check_set_white_list.py" "python/paddle/fluid/tests/unittests/white_list/no_check_set_white_list.py"
"python/paddle/fluid/tests/unittests/white_list/op_threshold_white_list.py" "python/paddle/fluid/tests/unittests/white_list/op_threshold_white_list.py"
"python/paddle/fluid/tests/unittests/white_list/check_op_sequence_batch_1_input_white_list.py"
) )
approval_line=`curl -H "Authorization: token ${GITHUB_API_TOKEN}" https://api.github.com/repos/PaddlePaddle/Paddle/pulls/${GIT_PR_ID}/reviews?per_page=10000` approval_line=`curl -H "Authorization: token ${GITHUB_API_TOKEN}" https://api.github.com/repos/PaddlePaddle/Paddle/pulls/${GIT_PR_ID}/reviews?per_page=10000`
...@@ -126,6 +127,9 @@ for API_FILE in ${API_FILES[*]}; do ...@@ -126,6 +127,9 @@ for API_FILE in ${API_FILES[*]}; do
elif [ "${API_FILE}" == "python/paddle/fluid/tests/unittests/white_list/op_threshold_white_list.py" ];then elif [ "${API_FILE}" == "python/paddle/fluid/tests/unittests/white_list/op_threshold_white_list.py" ];then
echo_line="It is an Op accuracy problem, please take care of it. You must have one RD (juncaipeng (Recommend), zhangting2020 or luotao1) approval for the python/paddle/fluid/tests/unittests/white_list/op_threshold_white_list.py, which manages the white list of error threshold for op test with float64 precision. For more information, please refer to: https://github.com/PaddlePaddle/Paddle/wiki/Upgrade-OP-Precision-to-Float64. \n" echo_line="It is an Op accuracy problem, please take care of it. You must have one RD (juncaipeng (Recommend), zhangting2020 or luotao1) approval for the python/paddle/fluid/tests/unittests/white_list/op_threshold_white_list.py, which manages the white list of error threshold for op test with float64 precision. For more information, please refer to: https://github.com/PaddlePaddle/Paddle/wiki/Upgrade-OP-Precision-to-Float64. \n"
check_approval 1 52520497 26615455 6836917 check_approval 1 52520497 26615455 6836917
elif [ "${API_FILE}" == "python/paddle/fluid/tests/unittests/white_list/check_op_sequence_batch_1_input_white_list.py" ];then
echo_line="You must have one RD (songyouwei, luotao1 or phlrain) approval for ${API_FILE}, which manages the white list of batch size 1 input for sequence op test. For more information, please refer to [https://github.com/PaddlePaddle/Paddle/wiki/It-is-required-to-include-LoDTensor-input-with-batch_size=1-in-sequence-OP-test]. \n"
check_approval 1 2573291 6836917 43953930
else else
echo_line="It is an Op accuracy problem, please take care of it. You must have one RD (XiaoguangHu01,Xreki,luotao1,sneaxiy) approval for ${API_FILE}, which manages the underlying code for fluid.\n" echo_line="It is an Op accuracy problem, please take care of it. You must have one RD (XiaoguangHu01,Xreki,luotao1,sneaxiy) approval for ${API_FILE}, which manages the underlying code for fluid.\n"
check_approval 1 3048612 46782768 12538138 6836917 32832641 check_approval 1 3048612 46782768 12538138 6836917 32832641
......
#!/bin/bash
PADDLE_ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}")/../" && pwd )"
function check_sequnece_op_unitests(){
check_white_list_file=$1
function_grep=$2
INVALID_SEQUENCE_OP_UNITTEST=""
all_sequence_ops=`grep '(sequence_' ${PADDLE_ROOT}/build/paddle/fluid/pybind/pybind.h | grep -Ev '^$' | cut -d'(' -f 2 | cut -d')' -f 1`
for op_name in ${all_sequence_ops}; do
in_white_list=`python ${PADDLE_ROOT}/${check_white_list_file} ${op_name}`
if [ "${in_white_list}" == "True" ]; then
continue
fi
unittest_file="python/paddle/fluid/tests/unittests/sequence/test_${op_name}.py"
if [ ! -f "${PADDLE_ROOT}/${unittest_file}" ]; then
INVALID_SEQUENCE_OP_UNITTEST="${INVALID_SEQUENCE_OP_UNITTEST}${unittest_file} (unittest file does not exists)\n"
continue
fi
batch_size_1_funtion_calls=`grep ${function_grep} ${PADDLE_ROOT}/${unittest_file} || true`
if [ "${batch_size_1_funtion_calls}" == "" ]; then
INVALID_SEQUENCE_OP_UNITTEST="${INVALID_SEQUENCE_OP_UNITTEST}${unittest_file} (missing required function call)\n"
fi
done
echo ${INVALID_SEQUENCE_OP_UNITTEST}
}
check_white_list_file="python/paddle/fluid/tests/unittests/white_list/check_op_sequence_batch_1_input_white_list.py"
function_grep="self.get_sequence_batch_size_1_input("
INVALID_SEQUENCE_OP_UNITTEST=$(check_sequnece_op_unitests ${check_white_list_file} ${function_grep})
if [ "${INVALID_SEQUENCE_OP_UNITTEST}" != "" ]; then
echo "************************************"
echo -e "It is required to include batch size 1 LoDTensor input in sequence OP test, please use self.get_sequence_batch_size_1_input() method."
echo -e "For more information, please refer to [https://github.com/PaddlePaddle/Paddle/wiki/It-is-required-to-include-LoDTensor-input-with-batch_size=1-in-sequence-OP-test]."
echo -e "Please check the following unittest files:\n${INVALID_SEQUENCE_OP_UNITTEST}"
echo "************************************"
exit 1
fi
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册