Files
2026-07-13 12:40:42 +08:00

172 lines
6.7 KiB
Bash

#!/usr/bin/env bash
# Copyright (c) 2023 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.
source ${work_dir}/ci/auto_parallel/target_path_lists.sh
export paddle=$1
export paddle_dir=${work_dir}
mkdir -p ${work_dir}/../case_logs
export log_path=${work_dir}/../case_logs
export case_list=()
install_paddle(){
echo -e "\033[31m ---- Install paddlepaddle-gpu \033"
if [ -n "$paddle" ];then
python -m pip install --user ${paddle} --no-dependencies;
fi
python -c "import paddle; print('paddle version:',paddle.__version__,'\npaddle commit:',paddle.version.commit)";
}
get_diff_TO_case(){
cd ${paddle_dir}
# get the location of "test/auto_parallel" in target_lists_for_semi_auto_ci
count=0
for element in "${target_lists_for_semi_auto_ci[@]}";do
if [[ "$element" == "test/auto_parallel" ]]; then
test_auto_num=$count
break
fi
count=$((count+1))
done
# get the location of "test/collective/hybrid_strategy" in target_lists_for_dygraph_ci
count=0
for element in "${target_lists_for_dygraph_ci[@]}";do
if [[ "$element" == "test/collective/hybrid_strategy" ]]; then
test_dygraph_num=$count
break
fi
count=$((count+1))
done
for file_name in `git diff --numstat upstream/${AGILE_COMPILE_BRANCH} |awk '{print $NF}'`;do
arr_file_name=(${file_name//// })
dir1=${arr_file_name[0]}
dir2=${arr_file_name[1]}
dir3=${arr_file_name[2]}
dir4=${arr_file_name[3]}
dir5=${arr_file_name[4]}
dir6=${arr_file_name[5]}
file_item=$dir1/$dir2/$dir3/$dir4/$dir5/$dir6
echo "file_name:"${file_name}, "path:"${file_item}
if [ ! -f ${file_name} ];then # deleting files for PR
continue
elif [[ ${file_name##*.} == "md" ]] || [[ ${file_name##*.} == "rst" ]] || [[ ${dir1} == "docs" ]];then
continue
else
# The most auto unittests have been monitored in PR-CI-Distribute-stable,
# while the other tests of llama model will be executed in PR-CI-Auto-Parallel.
for ((i=0; i<${#target_lists_for_semi_auto_ci[@]}; i++)); do
if [[ ${file_item} == *${target_lists_for_semi_auto_ci[i]}* ]];then
case_list[${#case_list[*]}]="auto_unit_test"
break
else
continue
fi
done
# The dynamic unittests have been monitored in PR-CI-Distribute-stable
# and will be no longer redundantly executed in PR-CI-Auto-Parallel.
for ((i=0; i<${#target_lists_for_dygraph_ci[@]}; i++)); do
if [[ ${file_item} == *${target_lists_for_dygraph_ci[i]}* ]];then
case_list[${#case_list[*]}]="dygraph_unit_test"
break
else
continue
fi
done
fi
done
}
print_info(){
#解决异常退出-6的问题,CI中的偶现问题,无法发现
if [[ $1 -ne 0 ]] && [[ $1 -ne 250 ]];then
EXCODE=2
if [ ! -f ${log_path}/$2 ];then
echo -e "\033[31m run $2 CI FAIL \033"
else
mv ${log_path}/$2 ${log_path}/$2_FAIL.log
echo -e "\033[31m ${log_path}/$2_FAIL \033"
tail -70 ${log_path}/$2_FAIL.log
fi
exit $EXCODE
else
echo -e "\033[32m run $3 CI SUCCESS \033"
fi
}
# Get the list of pending cases
get_diff_TO_case
# Remove duplicates and store the results back to the original list
####################
case_list=($(awk -v RS=' ' '!a[$1]++' <<< ${case_list[*]}))
if [[ ${#case_list[*]} -ne 0 ]];then
echo -e "\033[31m =======CI Check case========= \033"
echo -e "\033[31m ---- case_list length: ${#case_list[*]}, cases: ${case_list[*]} \033"
echo -e "\033[31m ============================= \033"
set +e
# Install paddle
install_paddle
case_num=1
export FLAGS_install_deps=0
for case in ${case_list[*]};do
echo -e "\033[31m ---- running case $case_num/${#case_list[*]}: ${case} \033"
if [[ ${case} == "llama_auto" ]];then
# The docker container mount path is changed from /workspace/Paddle to /paddle
# The original writing is /workspace/PaddleNLP, and it is changed to /paddle/../PaddleNLP to be consistent with the action. However, in the distribute_test function, the PaddleNLP repository is downloaded to the Paddle (/paddle/Paddle) directory. This is just to keep the original state, but it should be wrong.
bash ${work_dir}/../PaddleNLP/scripts/distribute/ci_case_auto.sh llama_case_list_auto $FLAGS_install_deps $FLAGS_download_data
print_info $? `ls -lt ${log_path} | grep "llama" | head -n 1 | awk '{print $9}'` ${case}
export FLAGS_install_deps=1
export FLAGS_download_data="llama ""$FLAGS_download_data"
let case_num++
elif [[ ${case} == "auto_unit_test" ]];then
bash ${work_dir}/ci/auto_parallel/ci_case_unit.sh auto_unit_test
print_info $? `ls -lt ${log_path} | grep "test" | head -n 1 | awk '{print $9}'` ${case}
let case_num++
elif [[ ${case} == "gpt-3_dygraph" ]];then
bash ${work_dir}/../PaddleNLP/scripts/distribute/ci_case_dy.sh llm_gpt_case_list_dygraph $FLAGS_install_deps $FLAGS_download_data
print_info $? `ls -lt ${log_path} | grep "llm_gpt" | head -n 1 | awk '{print $9}'` ${case}
let case_num++
elif [[ ${case} == "dygraph_unit_test" ]];then
bash ${work_dir}/ci/auto_parallel/ci_case_unit.sh dygraph_unit_test
print_info $? `ls -lt ${log_path} | grep "test" | head -n 1 | awk '{print $9}'` ${case}
let case_num++
elif [[ ${case} == "llama_auto_unit_test" ]];then
bash ${work_dir}/ci/auto_parallel/ci_case_unit.sh llama_auto_unit_test
print_info $? `ls -lt ${log_path} | grep "test" | head -n 1 | awk '{print $9}'` ${case}
let case_num++
else
echo -e "\033[31m ---- no ${case} \033"
let case_num++
fi
done
echo -e "\033[31m ---- end run case \033"
cd ${log_path}
if [ ! -f *FAIL* ];then
FF=0
EXCODE=0
echo -e "\033[32m ---- all case Success \033"
else
FF=`ls *FAIL*|wc -l`
EXCODE=2
echo -e "\033[31m ---- case Failed number: ${FF} \033"
ls *_FAIL*
fi
else
echo -e "\033[32m Changed Not CI case, Skips \033"
EXCODE=0
fi
exit $EXCODE