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

4890 lines
218 KiB
Bash

#!/usr/bin/env bash
# Copyright (c) 2018 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.
#=================================================
# Utils
#=================================================
# nothing to modify
set -ex
if [ -z ${BRANCH} ]; then
BRANCH="develop"
fi
function print_usage() {
echo -e "\n${RED}Usage${NONE}:
${BOLD}${SCRIPT_NAME}${NONE} [OPTION]"
echo -e "\n${RED}Options${NONE}:
${BLUE}build${NONE}: run build for x86 platform
${BLUE}test${NONE}: run all unit tests
${BLUE}single_test${NONE}: run a single unit test
${BLUE}bind_test${NONE}: parallel tests bind to different GPU
${BLUE}doc${NONE}: generate paddle documents
${BLUE}gen_doc_lib${NONE}: generate paddle documents library
${BLUE}html${NONE}: convert C++ source code into HTML
${BLUE}dockerfile${NONE}: generate paddle release dockerfile
${BLUE}fluid_inference_lib${NONE}: deploy fluid inference library
${BLUE}check_style${NONE}: run code style check
${BLUE}cicheck${NONE}: run CI tasks on Linux
${BLUE}maccheck${NONE}: run CI tasks on Mac
"
}
function init() {
RED='\033[0;31m'
BLUE='\033[0;34m'
BOLD='\033[1m'
NONE='\033[0m'
PADDLE_ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}")/../../" && pwd )"
export PADDLE_ROOT
if [ -z "${SCRIPT_NAME}" ]; then
SCRIPT_NAME=$0
fi
ENABLE_MAKE_CLEAN=${ENABLE_MAKE_CLEAN:-ON}
# NOTE(chenweihang): For easy debugging, CI displays the C++ error stacktrace by default
export FLAGS_call_stack_level=2
}
function cmake_base() {
# Build script will not fail if *.deb does not exist
rm *.deb 2>/dev/null || true
# Delete previous built whl packages
rm -rf python/dist 2>/dev/null || true
# Delete previous built paddle cache
rm -rf python/paddle 2>/dev/null || true
# Support build for all python3 versions
PYTHON_FLAGS=""
SYSTEM=`uname -s`
if [ "$SYSTEM" == "Darwin" ]; then
echo "Using python abi: $1"
if [ "$1" == "cp310-cp310" ]; then
if [ -d "/Library/Frameworks/Python.framework/Versions/3.10" ]; then
export LD_LIBRARY_PATH=/Library/Frameworks/Python.framework/Versions/3.10/lib/
export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}:/Library/Frameworks/Python.framework/Versions/3.10/lib/
export PATH=/Library/Frameworks/Python.framework/Versions/3.10/bin/:${PATH}
PYTHON_FLAGS="-DPYTHON_EXECUTABLE:FILEPATH=/Library/Frameworks/Python.framework/Versions/3.10/bin/python3
-DPYTHON_INCLUDE_DIR:PATH=/Library/Frameworks/Python.framework/Versions/3.10/include/python3.10/
-DPYTHON_LIBRARY:FILEPATH=/Library/Frameworks/Python.framework/Versions/3.10/lib/libpython3.10.dylib"
pip3.10 install --user -r ${PADDLE_ROOT}/python/requirements.txt
else
exit 1
fi
elif [ "$1" == "cp311-cp311" ]; then
if [ -d "/Library/Frameworks/Python.framework/Versions/3.11" ]; then
export LD_LIBRARY_PATH=/Library/Frameworks/Python.framework/Versions/3.11/lib/
export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}:/Library/Frameworks/Python.framework/Versions/3.11/lib/
export PATH=/Library/Frameworks/Python.framework/Versions/3.11/bin/:${PATH}
PYTHON_FLAGS="-DPYTHON_EXECUTABLE:FILEPATH=/Library/Frameworks/Python.framework/Versions/3.11/bin/python3
-DPYTHON_INCLUDE_DIR:PATH=/Library/Frameworks/Python.framework/Versions/3.11/include/python3.11/
-DPYTHON_LIBRARY:FILEPATH=/Library/Frameworks/Python.framework/Versions/3.11/lib/libpython3.11.dylib"
pip3.11 install --user -r ${PADDLE_ROOT}/python/requirements.txt
else
exit 1
fi
elif [ "$1" == "cp312-cp312" ]; then
if [ -d "/Library/Frameworks/Python.framework/Versions/3.12" ]; then
export LD_LIBRARY_PATH=/Library/Frameworks/Python.framework/Versions/3.12/lib/
export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}:/Library/Frameworks/Python.framework/Versions/3.12/lib/
export PATH=/Library/Frameworks/Python.framework/Versions/3.12/bin/:${PATH}
PYTHON_FLAGS="-DPYTHON_EXECUTABLE:FILEPATH=/Library/Frameworks/Python.framework/Versions/3.12/bin/python3
-DPYTHON_INCLUDE_DIR:PATH=/Library/Frameworks/Python.framework/Versions/3.12/include/python3.12/
-DPYTHON_LIBRARY:FILEPATH=/Library/Frameworks/Python.framework/Versions/3.12/lib/libpython3.12.dylib"
pip3.12 install --user -r ${PADDLE_ROOT}/python/requirements.txt
else
exit 1
fi
elif [ "$1" == "cp313-cp313" ]; then
if [ -d "/Library/Frameworks/Python.framework/Versions/3.13" ]; then
export LD_LIBRARY_PATH=/Library/Frameworks/Python.framework/Versions/3.13/lib/
export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}:/Library/Frameworks/Python.framework/Versions/3.13/lib/
export PATH=/Library/Frameworks/Python.framework/Versions/3.13/bin/:${PATH}
PYTHON_FLAGS="-DPYTHON_EXECUTABLE:FILEPATH=/Library/Frameworks/Python.framework/Versions/3.13/bin/python3
-DPYTHON_INCLUDE_DIR:PATH=/Library/Frameworks/Python.framework/Versions/3.13/include/python3.13/
-DPYTHON_LIBRARY:FILEPATH=/Library/Frameworks/Python.framework/Versions/3.13/lib/libpython3.13.dylib"
pip3.13 install --user -r ${PADDLE_ROOT}/python/requirements.txt
else
exit 1
fi
elif [ "$1" == "cp314-cp314" ]; then
if [ -d "/Library/Frameworks/Python.framework/Versions/3.14" ]; then
export LD_LIBRARY_PATH=/Library/Frameworks/Python.framework/Versions/3.14/lib/
export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}:/Library/Frameworks/Python.framework/Versions/3.14/lib/
export PATH=/Library/Frameworks/Python.framework/Versions/3.14/bin/:${PATH}
PYTHON_FLAGS="-DPYTHON_EXECUTABLE:FILEPATH=/Library/Frameworks/Python.framework/Versions/3.14/bin/python3
-DPYTHON_INCLUDE_DIR:PATH=/Library/Frameworks/Python.framework/Versions/3.14/include/python3.14/
-DPYTHON_LIBRARY:FILEPATH=/Library/Frameworks/Python.framework/Versions/3.14/lib/libpython3.14.dylib"
pip3.14 install --user -r ${PADDLE_ROOT}/python/requirements.txt
else
exit 1
fi
fi
else
if [ "$1" != "" ]; then
echo "using python abi: $1"
if [ "$1" == "cp310-cp310" ]; then
export LD_LIBRARY_PATH=/opt/_internal/cpython-3.10.0/lib/:${LD_LIBRARY_PATH}
export PATH=/opt/_internal/cpython-3.10.0/bin/:${PATH}
export PYTHON_FLAGS="-DPYTHON_EXECUTABLE:FILEPATH=/opt/_internal/cpython-3.10.0/bin/python3.10
-DPYTHON_INCLUDE_DIR:PATH=/opt/_internal/cpython-3.10.0/include/python3.10
-DPYTHON_LIBRARIES:FILEPATH=/opt/_internal/cpython-3.10.0/lib/libpython3.so"
pip3.10 install -r ${PADDLE_ROOT}/python/requirements.txt
pip3.10 install -r ${PADDLE_ROOT}/paddle/scripts/compile_requirements.txt
elif [ "$1" == "cp311-cp311" ]; then
export LD_LIBRARY_PATH=/opt/_internal/cpython-3.11.0/lib/:${LD_LIBRARY_PATH}
export PATH=/opt/_internal/cpython-3.11.0/bin/:${PATH}
export PYTHON_FLAGS="-DPYTHON_EXECUTABLE:FILEPATH=/opt/_internal/cpython-3.11.0/bin/python3.11
-DPYTHON_INCLUDE_DIR:PATH=/opt/_internal/cpython-3.11.0/include/python3.11
-DPYTHON_LIBRARIES:FILEPATH=/opt/_internal/cpython-3.11.0/lib/libpython3.so"
pip3.11 install -r ${PADDLE_ROOT}/python/requirements.txt
pip3.11 install -r ${PADDLE_ROOT}/paddle/scripts/compile_requirements.txt
elif [ "$1" == "cp312-cp312" ]; then
export LD_LIBRARY_PATH=/opt/_internal/cpython-3.12.0/lib/:${LD_LIBRARY_PATH}
export PATH=/opt/_internal/cpython-3.12.0/bin/:${PATH}
export PYTHON_FLAGS="-DPYTHON_EXECUTABLE:FILEPATH=/opt/_internal/cpython-3.12.0/bin/python3.12
-DPYTHON_INCLUDE_DIR:PATH=/opt/_internal/cpython-3.12.0/include/python3.12
-DPYTHON_LIBRARIES:FILEPATH=/opt/_internal/cpython-3.12.0/lib/libpython3.so"
pip3.12 install -r ${PADDLE_ROOT}/python/requirements.txt
pip3.12 install -r ${PADDLE_ROOT}/paddle/scripts/compile_requirements.txt
elif [ "$1" == "cp313-cp313" ]; then
export LD_LIBRARY_PATH=/opt/_internal/cpython-3.13.0/lib/:${LD_LIBRARY_PATH}
export PATH=/opt/_internal/cpython-3.13.0/bin/:${PATH}
export PYTHON_FLAGS="-DPYTHON_EXECUTABLE:FILEPATH=/opt/_internal/cpython-3.13.0/bin/python3.13
-DPYTHON_INCLUDE_DIR:PATH=/opt/_internal/cpython-3.13.0/include/python3.13
-DPYTHON_LIBRARIES:FILEPATH=/opt/_internal/cpython-3.13.0/lib/libpython3.so"
pip3.13 install -r ${PADDLE_ROOT}/python/requirements.txt
pip3.13 install -r ${PADDLE_ROOT}/paddle/scripts/compile_requirements.txt
elif [ "$1" == "cp314-cp314" ]; then
export LD_LIBRARY_PATH=/opt/_internal/cpython-3.14.0/lib/:${LD_LIBRARY_PATH}
export PATH=/opt/_internal/cpython-3.14.0/bin/:${PATH}
export PYTHON_FLAGS="-DPYTHON_EXECUTABLE:FILEPATH=/opt/_internal/cpython-3.14.0/bin/python3.14
-DPYTHON_INCLUDE_DIR:PATH=/opt/_internal/cpython-3.14.0/include/python3.14
-DPYTHON_LIBRARIES:FILEPATH=/opt/_internal/cpython-3.14.0/lib/libpython3.so"
pip3.14 install -r ${PADDLE_ROOT}/python/requirements.txt
pip3.14 install -r ${PADDLE_ROOT}/paddle/scripts/compile_requirements.txt
fi
# for CINN, to find libcuda.so.1
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda-11.2/compat/
else
pip install -r ${PADDLE_ROOT}/python/requirements.txt
fi
fi
if [ "$SYSTEM" == "Darwin" ]; then
WITH_DISTRIBUTE="OFF"
WITH_AVX=${WITH_AVX:-ON}
WITH_ARM=${WITH_ARM:-OFF}
INFERENCE_DEMO_INSTALL_DIR=${INFERENCE_DEMO_INSTALL_DIR:-~/.cache/inference_demo}
else
INFERENCE_DEMO_INSTALL_DIR=${INFERENCE_DEMO_INSTALL_DIR:-/root/.cache/inference_demo}
fi
distributed_flag=${WITH_DISTRIBUTE:-OFF}
gloo_flag=${distributed_flag}
pscore_flag=${distributed_flag}
if [ "$CMD" != "assert_file_approvals" ];then
which python
python -V
python -m pip install distro
python ${PADDLE_ROOT}/tools/summary_env.py
bash ${PADDLE_ROOT}/tools/get_cpu_info.sh
fi
cat <<EOF
========================================
Configuring cmake in /paddle/build ...
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE:-Release}
${PYTHON_FLAGS}
-DWITH_GPU=${WITH_GPU:-OFF}
-DWITH_TENSORRT=${WITH_TENSORRT:-ON}
-DWITH_OPENVINO=${WITH_OPENVINO:-OFF}
-DWITH_ROCM=${WITH_ROCM:-OFF}
-DWITH_CINN=${WITH_CINN:-OFF}
-DWITH_DISTRIBUTE=${distributed_flag}
-DWITH_MKL=${WITH_MKL:-ON}
-DWITH_AVX=${WITH_AVX:-OFF}
-DCUDA_ARCH_NAME=${CUDA_ARCH_NAME:-All}
-DNEW_RELEASE_PYPI=${NEW_RELEASE_PYPI:-OFF}
-DNEW_RELEASE_ALL=${NEW_RELEASE_ALL:-OFF}
-DNEW_RELEASE_JIT=${NEW_RELEASE_JIT:-OFF}
-DWITH_PYTHON=${WITH_PYTHON:-ON}
-DCUDNN_ROOT=/usr/
-DWITH_TESTING=${WITH_TESTING:-ON}
-DWITH_CPP_TEST=${WITH_CPP_TEST:-ON}
-DWITH_COVERAGE=${WITH_COVERAGE:-OFF}
-DWITH_INCREMENTAL_COVERAGE=${WITH_INCREMENTAL_COVERAGE:-OFF}
-DCMAKE_MODULE_PATH=/opt/rocm/hip/cmake
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
-DWITH_INFERENCE_API_TEST=${WITH_INFERENCE_API_TEST:-ON}
-DINFERENCE_DEMO_INSTALL_DIR=${INFERENCE_DEMO_INSTALL_DIR}
-DPY_VERSION=${PY_VERSION:-3.10}
-DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX:-/paddle/build}
-DWITH_PSLIB=${pslib_flag}
-DWITH_GLOO=${gloo_flag}
-DWITH_XPU=${WITH_XPU:-OFF}
-DWITH_IPU=${WITH_IPU:-OFF}
-DWITH_UNITY_BUILD=${WITH_UNITY_BUILD:-OFF}
-DWITH_XPU_BKCL=${WITH_XPU_BKCL:-OFF}
-DWITH_XPU_XHPC=${WITH_XPU_XHPC:-OFF}
-DWITH_XPU_XFT=${WITH_XPU_XFT:-OFF}
-DWITH_XPU_XRE5=${WITH_XPU_XRE5:-OFF}
-DWITH_XPU_FFT=${WITH_XPU_FFT:-OFF}
-DWITH_ARM=${WITH_ARM:-OFF}
-DWITH_STRIP=${WITH_STRIP:-ON}
-DON_INFER=${ON_INFER:-OFF}
-DWITH_RECORD_BUILDTIME=${WITH_RECORD_BUILDTIME:-OFF}
-DCUDA_ARCH_BIN="${CUDA_ARCH_BIN}"
-DWITH_ONNXRUNTIME=${WITH_ONNXRUNTIME:-OFF}
-DWITH_NVCC_LAZY=${WITH_NVCC_LAZY:-ON}
-DWITH_CUDNN_FRONTEND=${WITH_CUDNN_FRONTEND:-OFF}
-DWITH_FA_BUILD_WITH_CACHE=${WITH_FA_BUILD_WITH_CACHE:ON}
========================================
EOF
# Disable UNITTEST_USE_VIRTUALENV in docker because
# docker environment is fully controlled by this script.
# See /Paddle/CMakeLists.txt, UNITTEST_USE_VIRTUALENV option.
set +e
cmake .. \
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE:-Release} \
${PYTHON_FLAGS} \
-DWITH_GPU=${WITH_GPU:-OFF} \
-DWITH_TENSORRT=${WITH_TENSORRT:-ON} \
-DWITH_OPENVINO=${WITH_OPENVINO:-OFF} \
-DWITH_ROCM=${WITH_ROCM:-OFF} \
-DWITH_CINN=${WITH_CINN:-OFF} \
-DWITH_DISTRIBUTE=${distributed_flag} \
-DWITH_MKL=${WITH_MKL:-ON} \
-DWITH_AVX=${WITH_AVX:-OFF} \
-DCUDA_ARCH_NAME=${CUDA_ARCH_NAME:-All} \
-DNEW_RELEASE_PYPI=${NEW_RELEASE_PYPI:-OFF} \
-DNEW_RELEASE_ALL=${NEW_RELEASE_ALL:-OFF} \
-DNEW_RELEASE_JIT=${NEW_RELEASE_JIT:-OFF} \
-DWITH_PYTHON=${WITH_PYTHON:-ON} \
-DCUDNN_ROOT=/usr/ \
-DWITH_TESTING=${WITH_TESTING:-ON} \
-DWITH_CPP_TEST=${WITH_CPP_TEST:-ON} \
-DWITH_COVERAGE=${WITH_COVERAGE:-OFF} \
-DWITH_INCREMENTAL_COVERAGE=${WITH_INCREMENTAL_COVERAGE:-OFF} \
-DCMAKE_MODULE_PATH=/opt/rocm/hip/cmake \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-DWITH_INFERENCE_API_TEST=${WITH_INFERENCE_API_TEST:-ON} \
-DINFERENCE_DEMO_INSTALL_DIR=${INFERENCE_DEMO_INSTALL_DIR} \
-DPY_VERSION=${PY_VERSION:-3.10} \
-DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX:-/paddle/build} \
-DWITH_PSLIB=${pslib_flag} \
-DWITH_GLOO=${gloo_flag} \
-DWITH_XPU=${WITH_XPU:-OFF} \
-DWITH_XPU_XRE5=${WITH_XPU_XRE5:-OFF} \
-DWITH_IPU=${WITH_IPU:-OFF} \
-DXPU_SDK_ROOT=${XPU_SDK_ROOT:-""} \
-DWITH_XPU_BKCL=${WITH_XPU_BKCL:-OFF} \
-DWITH_XPU_XHPC=${WITH_XPU_XHPC:-OFF} \
-DWITH_XPU_XFT=${WITH_XPU_XFT:-OFF} \
-DWITH_XPU_FFT=${WITH_XPU_FFT:-OFF} \
-DWITH_ARM=${WITH_ARM:-OFF} \
-DWITH_STRIP=${WITH_STRIP:-ON} \
-DON_INFER=${ON_INFER:-OFF} \
-DCUDA_ARCH_BIN="${CUDA_ARCH_BIN}" \
-DWITH_RECORD_BUILDTIME=${WITH_RECORD_BUILDTIME:-OFF} \
-DWITH_UNITY_BUILD=${WITH_UNITY_BUILD:-OFF} \
-DWITH_ONNXRUNTIME=${WITH_ONNXRUNTIME:-OFF} \
-DWITH_NVCC_LAZY=${WITH_NVCC_LAZY:-ON} \
-DWITH_FA_BUILD_WITH_CACHE=${WITH_FA_BUILD_WITH_CACHE:ON} \
-DWITH_CUDNN_FRONTEND=${WITH_CUDNN_FRONTEND:-OFF};build_error=$?
if [ "$build_error" != 0 ];then
exit 7;
fi
}
function clean_build_files() {
clean_files=("paddle/fluid/pybind/libpaddle.so" "third_party/flashattn/src/extern_flashattn-build/libflashattn.so" "third_party/install/flashattn/lib/libflashattn.so")
for file in "${clean_files[@]}"; do
file=`echo "${PADDLE_ROOT}/build/${file}"`
if [ -f "$file" ]; then
rm -rf "$file"
fi
done
}
function cmake_gen() {
mkdir -p ${PADDLE_ROOT}/build
cd ${PADDLE_ROOT}/build
cmake_base $1
}
function cmake_gen_in_current_dir() {
cmake_base $1
}
function abort(){
echo "Your change doesn't follow PaddlePaddle's code style." 1>&2
echo "Please use pre-commit to check what is wrong." 1>&2
exit 4
}
function check_style() {
set +x
trap 'abort' 0
set -e
if [ -x "$(command -v gimme)" ]; then
eval "$(GIMME_GO_VERSION=1.8.3 gimme)"
fi
# set up go environment for running gometalinter
mkdir -p $GOPATH/src/github.com/PaddlePaddle/
ln -sf ${PADDLE_ROOT} $GOPATH/src/github.com/PaddlePaddle/Paddle
# pre-commit use python3.8.0
OLD_PATH=$PATH
export PATH=/usr/local/python3.8.0/bin:/usr/local/python3.8.0/include:/usr/local/bin:${PATH}
if ! [[ $(pre-commit --version) == *"2.17.0"* ]]; then
pip install pre-commit==2.17.0
fi
pre-commit install
clang-format --version
commit_files=on
for file_name in `git diff --numstat ${BRANCH} |awk '{print $NF}'`;do
if ! pre-commit run --files $file_name ; then
commit_files=off
fi
done
export PATH=${OLD_PATH}
if [ $commit_files == 'off' ];then
echo "code format error"
git diff 2>&1
exit 4
fi
trap : 0
set -x
}
#=================================================
# Build
#=================================================
function build_base() {
set +e
if [ "$SYSTEM" == "Linux" ];then
if [ `nproc` -gt 16 ];then
parallel_number=$(expr `nproc` - 8)
else
parallel_number=`nproc`
fi
else
parallel_number=8
fi
if [ "$1" != "" ]; then
parallel_number=$1
fi
if [[ "$ENABLE_MAKE_CLEAN" != "OFF" ]]; then
make clean
fi
# reset ccache zero stats for collect PR's actual hit rate
ccache -z
if [ "$WITH_ARM" == "ON" ];then
make TARGET=ARMV8 -j ${parallel_number};build_error=$?
else
make install -j ${parallel_number};build_error=$?
fi
# ci will collect ccache hit rate
collect_ccache_hits
if [ "$build_error" != 0 ];then
exit 7;
fi
}
function build_size() {
cat <<EOF
============================================
Calculate /paddle/build size and PR whl size
============================================
EOF
if [ "$1" == "paddle_inference" ]; then
cd ${PADDLE_ROOT}/build
cp -r paddle_inference_install_dir paddle_inference
tar -czf paddle_inference.tgz paddle_inference
buildSize=$(du -h --max-depth=0 ${PADDLE_ROOT}/build/paddle_inference.tgz |awk '{print $1}')
soLibSize=$(du -h --max-depth=0 ${PADDLE_ROOT}/build/paddle_inference_install_dir/paddle/lib/libpaddle_inference.so |awk '{print $1}')
echo "Paddle_Inference Size: $buildSize"
echo "Paddle_Inference Dynamic Library Size: $soLibSize"
echo "ipipe_log_param_Paddle_Inference_Size: $buildSize" >> ${PADDLE_ROOT}/build/build_summary.txt
echo "ipipe_log_param_Paddle_Inference_So_Size: $soLibSize" >> ${PADDLE_ROOT}/build/build_summary.txt
elif [ "$1" == "paddle_inference_c" ]; then
cd ${PADDLE_ROOT}/build
cp -r paddle_inference_c_install_dir paddle_inference_c
tar -czf paddle_inference_c.tgz paddle_inference_c
buildSize=$(du -h --max-depth=0 ${PADDLE_ROOT}/build/paddle_inference_c.tgz |awk '{print $1}')
echo "Paddle_Inference Capi Size: $buildSize"
echo "ipipe_log_param_Paddle_Inference_capi_Size: $buildSize" >> ${PADDLE_ROOT}/build/build_summary.txt
else
SYSTEM=`uname -s`
if [ "$SYSTEM" == "Darwin" ]; then
com='du -h -d 0'
else
com='du -h --max-depth=0'
fi
buildSize=$($com ${PADDLE_ROOT}/build |awk '{print $1}')
echo "Build Size: $buildSize"
echo "ipipe_log_param_Build_Size: $buildSize" >> ${PADDLE_ROOT}/build/build_summary.txt
if ls ${PADDLE_ROOT}/build/python/dist/*whl >/dev/null 2>&1; then
PR_whlSize=$($com ${PADDLE_ROOT}/build/python/dist |awk '{print $1}')
elif ls ${PADDLE_ROOT}/dist/*whl >/dev/null 2>&1; then
PR_whlSize=$($com ${PADDLE_ROOT}/dist |awk '{print $1}')
fi
echo "PR whl Size: $PR_whlSize"
echo "ipipe_log_param_PR_whl_Size: $PR_whlSize" >> ${PADDLE_ROOT}/build/build_summary.txt
PR_soSize=$($com ${PADDLE_ROOT}/build/python/paddle/base/libpaddle.so |awk '{print $1}')
echo "PR so Size: $PR_soSize"
echo "ipipe_log_param_PR_so_Size: $PR_soSize" >> ${PADDLE_ROOT}/build/build_summary.txt
fi
}
function build() {
mkdir -p ${PADDLE_ROOT}/build
cd ${PADDLE_ROOT}/build
cat <<EOF
============================================
Building in /paddle/build ...
============================================
EOF
build_base $@
current_branch=`git branch | grep \* | cut -d ' ' -f2`
if [ "$current_branch" != "develop_base_pr" ];then
build_size
fi
}
function cmake_gen_and_build() {
startTime_s=`date +%s`
cmake_gen $1
build $2
endTime_s=`date +%s`
[ -n "$startTime_firstBuild" ] && startTime_s=$startTime_firstBuild
echo "Build Time: $[ $endTime_s - $startTime_s ]s"
echo "ipipe_log_param_Build_Time: $[ $endTime_s - $startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
}
function get_build_time_file() {
python ${PADDLE_ROOT}/tools/analysis_build_time.py
cat ${PADDLE_ROOT}/tools/buildTime.txt
today=$(date "+%Y-%m-%d")
mkdir -p /paddle_targets_buildtime_record
cp ${PADDLE_ROOT}/tools/buildTime.txt /paddle_targets_buildtime_record/${today}-buildTime.txt
}
function build_mac() {
set +e
mkdir -p ${PADDLE_ROOT}/build
cd ${PADDLE_ROOT}/build
cat <<EOF
============================================
Building in /paddle/build ...
============================================
EOF
if [[ "$ENABLE_MAKE_CLEAN" != "OFF" ]]; then
make clean
fi
# reset ccache zero stats for collect PR's actual hit rate
ccache -z
make install -j 8;build_error=$?
# ci will collect ccache hit rate
collect_ccache_hits
if [ "$build_error" != 0 ];then
exit 7;
fi
set -e
build_size
}
function cmake_gen_and_build_mac() {
startTime_s=`date +%s`
cmake_gen $1
build_mac
endTime_s=`date +%s`
echo "Build Time: $[ $endTime_s - $startTime_s ]s"
echo "ipipe_log_param_Build_Time: $[ $endTime_s - $startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
}
function run_test() {
mkdir -p ${PADDLE_ROOT}/build
cd ${PADDLE_ROOT}/build
if [ ${WITH_TESTING:-ON} == "ON" ] ; then
cat <<EOF
========================================
Running unit tests ...
========================================
EOF
if [ ${TESTING_DEBUG_MODE:-OFF} == "ON" ] ; then
ctest -V
else
ctest --output-on-failure
fi
fi
}
function avx_build() {
mkdir -p ${PADDLE_ROOT}/build
cd ${PADDLE_ROOT}/build
WITH_AVX=ON
cmake_base ${PYTHON_ABI:-""}
build_base
}
function noavx_build() {
mkdir -p ${PADDLE_ROOT}/build
cd ${PADDLE_ROOT}/build
WITH_AVX=OFF
cmake_base ${PYTHON_ABI:-""}
build_base
}
function mac_m1_arm_build() {
mkdir -p ${PADDLE_ROOT}/build
cd ${PADDLE_ROOT}/build
WITH_AVX=OFF
WITH_ARM=ON
cmake_base ${PYTHON_ABI:-""}
build_base
}
function run_brpc_test() {
mkdir -p ${PADDLE_ROOT}/build
cd ${PADDLE_ROOT}/build
if [[ ${WITH_TESTING:-ON} == "ON" \
&& ${WITH_DISTRIBUTE:-OFF} == "ON" ]] ; then
cat <<EOF
========================================
Running brpc unit tests ...
========================================
EOF
set +x
declare -a other_tests=("test_listen_and_serv_op" "system_allocator_test" \
"rpc_server_test" "varhandle_test" "collective_server_test" "brpc_serde_test")
all_tests=`ctest -N`
for t in "${other_tests[@]}"
do
if [[ ${all_tests} != *$t* ]]; then
continue
fi
if [[ ${TESTING_DEBUG_MODE:-OFF} == "ON" ]] ; then
ctest -V -R $t
else
ctest --output-on-failure -R $t
fi
done
set -x
if [[ ${TESTING_DEBUG_MODE:-OFF} == "ON" ]] ; then
ctest -V -R test_dist_*
else
ctest --output-on-failure -R test_dist_*
fi
fi
}
function run_mac_test() {
export FLAGS_PIR_OPTEST=True
export FLAGS_CI_PIPELINE=mac
mkdir -p ${PADDLE_ROOT}/build
cd ${PADDLE_ROOT}/build
if [ ${WITH_TESTING:-ON} == "ON" ] ; then
cat <<EOF
========================================
Running unit tests ...
========================================
EOF
#remove proxy here to fix dist ut 'test_fl_listen_and_serv_op' error on mac.
#see details: https://github.com/PaddlePaddle/Paddle/issues/24738
set +x
my_proxy=$http_proxy
export http_proxy=
export https_proxy=
set -x
set +ex
if [ "$1" == "cp310-cp310" ]; then
pip3.10 uninstall -y paddlepaddle
elif [ "$1" == "cp311-cp311" ]; then
pip3.11 uninstall -y paddlepaddle
elif [ "$1" == "cp312-cp312" ]; then
pip3.12 uninstall -y paddlepaddle
fi
set -ex
if [ "$1" == "cp310-cp310" ]; then
pip3.10 install --user ${PADDLE_ROOT}/dist/*.whl
pip3.10 install --user hypothesis
elif [ "$1" == "cp311-cp311" ]; then
pip3.11 install --user ${PADDLE_ROOT}/dist/*.whl
pip3.11 install --user hypothesis
elif [ "$1" == "cp312-cp312" ]; then
pip3.12 install --user ${PADDLE_ROOT}/dist/*.whl
pip3.12 install --user hypothesis
fi
tmpfile_rand=`date +%s%N`
tmpfile=$tmp_dir/$tmpfile_rand
set +ex
ut_startTime_s=`date +%s`
get_quickly_disable_ut||disable_ut_quickly='disable_ut' # indicate whether the case was in quickly disable list
if [ ${NIGHTLY_MODE:-OFF} == "ON" ]; then
nightly_label="(NIGHTLY_LABEL)"
else
nightly_label="(RUN_TYPE=NIGHTLY|RUN_TYPE=DIST:NIGHTLY|RUN_TYPE=EXCLUSIVE:NIGHTLY)"
echo "========================================="
echo "Unittests with nightly labels are only run at night"
echo "========================================="
fi
check_approvals_of_unittest 2
# serial_list: Some single tests need to reduce concurrency
single_list="^test_cdist$|^test_resnet$|^test_concat_op$|^test_transformer$|^test_bert_with_stride$|^test_paddle_save_load$"
get_precision_ut_mac
if [[ "$on_precision" == "0" ]];then
ctest -E "($disable_ut_quickly|$single_list)" -LE ${nightly_label} --output-on-failure -j $2 | tee $tmpfile
ctest -R "${single_list}" -E "($disable_ut_quickly)" --output-on-failure -j 1 --timeout 15 | tee -a $tmpfile
else
ctest -R "($UT_list_prec)" -E "($disable_ut_quickly)" -LE ${nightly_label} --output-on-failure -j $2 --timeout 15 | tee $tmpfile
tmpfile_rand=`date +%s%N`
tmpfile=$tmp_dir/$tmpfile_rand
ctest -R "($UT_list_prec_1)" -E "(${disable_ut_quickly}|${single_list})" -LE ${nightly_label} --output-on-failure -j $2 --timeout 15 | tee -a $tmpfile
ctest -R "($single_list)" -E "(${disable_ut_quickly})" --output-on-failure -j 1 --timeout 15 | tee -a $tmpfile
fi
failed_test_lists=''
collect_failed_tests
mactest_error=0
retry_unittests_record=''
retry_time=3
exec_times=0
exec_time_array=('first' 'second' 'third')
exec_retry_threshold=10
is_retry_execute=0
if [ -n "$failed_test_lists" ];then
mactest_error=1
need_retry_ut_str=$(echo "$failed_test_lists" | grep -oEi "\-.+\(" | sed 's/(//' | sed 's/- //' )
need_retry_ut_arr=(${need_retry_ut_str})
need_retry_ut_count=${#need_retry_ut_arr[@]}
retry_unittests=$(echo "$failed_test_lists" | grep -oEi "\-.+\(" | sed 's/(//' | sed 's/- //' )
if [ $need_retry_ut_count -lt $exec_retry_threshold ];then
while ( [ $exec_times -lt $retry_time ] )
do
set +e
retry_unittests_record="$retry_unittests_record$failed_test_lists"
failed_test_lists_ult=`echo "${failed_test_lists}"`
set -e
if [[ "${exec_times}" == "1" ]];then
if [[ "${failed_test_lists}" == "" ]];then
break
else
retry_unittests=$(echo "$failed_test_lists" | grep -oEi "\-.+\(" | sed 's/(//' | sed 's/- //' )
fi
fi
echo "========================================="
echo "This is the ${exec_time_array[$exec_times]} time to re-run"
echo "========================================="
echo "The following unittest will be re-run:"
echo "${retry_unittests}"
echo "========================================="
retry_unittests_regular=''
for line in ${retry_unittests[@]} ;
do
if [[ "$retry_unittests_regular" == "" ]];then
retry_unittests_regular="^$line$"
else
retry_unittests_regular="$retry_unittests_regular|^$line$"
fi
done
rm -f $tmp_dir/*
failed_test_lists=''
ctest -R "($retry_unittests_regular)" --output-on-failure -j 4 | tee $tmpfile
collect_failed_tests
exec_times=$[$exec_times+1]
done
else
# There are more than 10 failed unit tests, so no unit test retry
is_retry_execute=1
fi
fi
#mactest_error=$?
ut_endTime_s=`date +%s`
echo "Mac testCase Time: $[ $ut_endTime_s - $ut_startTime_s ]s"
echo "ipipe_log_param_Mac_TestCases_Time: $[ $ut_endTime_s - $ut_startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
paddle version
# Recovery proxy to avoid failure in later steps
set +x
export http_proxy=$my_proxy
export https_proxy=$my_proxy
set -x
if [ "$mactest_error" != 0 ];then
show_ut_retry_result
fi
fi
}
function run_linux_cpu_test() {
export FLAGS_PIR_OPTEST=True
export FLAGS_CI_PIPELINE=py3
mkdir -p ${PADDLE_ROOT}/build
cd ${PADDLE_ROOT}/build
pip install hypothesis
if [ -d "${PADDLE_ROOT}/dist/" ]; then
pip install ${PADDLE_ROOT}/dist/*whl
fi
cp ${PADDLE_ROOT}/build/test/legacy_test/op_test.py ${PADDLE_ROOT}/build/python
cp ${PADDLE_ROOT}/build/test/legacy_test/testsuite.py ${PADDLE_ROOT}/build/python
cp -r ${PADDLE_ROOT}/build/test/white_list ${PADDLE_ROOT}/build/python
ut_total_startTime_s=`date +%s`
if [ ${WITH_TESTING:-ON} == "ON" ] ; then
cat <<EOF
========================================
Running unit tests ...
========================================
EOF
set -x
export TEST_NUM_PERCENT_CASES=0.15
if [ -a "$PADDLE_ROOT/duplicate_ut" ];then
duplicate_uts=$(cat $PADDLE_ROOT/duplicate_ut|sed -e 's/\r//g')
if [[ "$duplicate_uts" != "" ]];then
set +x
echo "========================================"
echo "The new unit test has the same name as the existing unit test"
cat "$PADDLE_ROOT/duplicate_ut"
echo "========================================"
exit 102;
set -x
fi
fi
if [ -a "$PADDLE_ROOT/added_ut" ];then
added_uts=^$(awk BEGIN{RS=EOF}'{gsub(/\n/,"$|^");print}' $PADDLE_ROOT/added_ut)$
ctest -R "(${added_uts})" -LE "RUN_TYPE=DIST|RUN_TYPE=EXCLUSIVE|RUN_TYPE=HYBRID" --output-on-failure --repeat-until-fail 3 --timeout 15;added_ut_error=$?
ctest -R "(${added_uts})" -L "RUN_TYPE=DIST|RUN_TYPE=EXCLUSIVE" --output-on-failure --repeat-until-fail 3 --timeout 15;added_ut_error_1=$?
if [ "$added_ut_error" != 0 ] && [ "$added_ut_error_1" != 0 ];then
echo "========================================"
echo "Added UT should not exceed 15 seconds"
echo "========================================"
exit 8;
fi
fi
set +x
EXIT_CODE=0;
tmpfile_rand=`date +%s%N`
tmpfile=$tmp_dir/$tmpfile_rand
get_quickly_disable_ut||disable_ut_quickly='disable_ut' # indicate whether the case was in quickly disable list
if [ ${NIGHTLY_MODE:-OFF} == "ON" ]; then
nightly_label="NIGHTLY_LABEL"
else
nightly_label="RUN_TYPE=NIGHTLY|RUN_TYPE=DIST:NIGHTLY|RUN_TYPE=EXCLUSIVE:NIGHTLY"
echo "========================================="
echo "Unittests with nightly labels are only run at night"
echo "========================================="
fi
get_precision_ut_mac
ut_actual_total_startTime_s=`date +%s`
if [[ "$on_precision" == "0" ]];then
ctest -E "$disable_ut_quickly" -LE ${nightly_label} --timeout 120 --output-on-failure -j $2 | tee $tmpfile
else
ctest -R "$UT_list_prec" -E "$disable_ut_quickly" -LE ${nightly_label} --timeout 120 --output-on-failure -j $2 | tee $tmpfile
tmpfile_rand=`date +%s%N`
tmpfile=$tmp_dir/$tmpfile_rand
ctest -R "$UT_list_prec_1" -E "$disable_ut_quickly" -LE ${nightly_label} --timeout 120 --output-on-failure -j $2 | tee -a $tmpfile
fi
ut_total_endTime_s=`date +%s`
echo "TestCases Total Time: $[ $ut_total_endTime_s - $ut_actual_total_startTime_s ]s"
collect_failed_tests
rm -f $tmp_dir/*
exec_times=0
retry_unittests_record=''
retry_time=4
exec_time_array=('first' 'second' 'third' 'fourth')
parallel_failed_tests_exec_retry_threshold=120
exec_retry_threshold=30
is_retry_execute=0
rerun_ut_startTime_s=`date +%s`
if [ -n "$failed_test_lists" ];then
EXIT_CODE=1
if [ ${TIMEOUT_DEBUG_HELP:-OFF} == "ON" ];then
bash $PADDLE_ROOT/tools/timeout_debug_help.sh "$failed_test_lists" # cat logs for timeout uts which killed by ctest
fi
need_retry_ut_str=$(echo "$failed_test_lists" | grep -oEi "\-.+\(.+\)" | sed 's/(.\+)//' | sed 's/- //' )
need_retry_ut_arr=(${need_retry_ut_str})
need_retry_ut_count=${#need_retry_ut_arr[@]}
retry_unittests=$(echo "$failed_test_lists" | grep -oEi "\-.+\(.+\)" | sed 's/(.\+)//' | sed 's/- //' )
while ( [ $exec_times -lt $retry_time ] )
do
if [[ "${exec_times}" == "0" ]] ;then
if [ $need_retry_ut_count -lt $parallel_failed_tests_exec_retry_threshold ];then
is_retry_execute=0
else
is_retry_execute=1
fi
elif [[ "${exec_times}" == "1" ]] ;then
need_retry_ut_str=$(echo "$failed_test_lists" | grep -oEi "\-.+\(.+\)" | sed 's/(.\+)//' | sed 's/- //' )
need_retry_ut_arr=(${need_retry_ut_str})
need_retry_ut_count=${#need_retry_ut_arr[@]}
if [ $need_retry_ut_count -lt $exec_retry_threshold ];then
is_retry_execute=0
else
is_retry_execute=1
fi
fi
if [[ "$is_retry_execute" == "0" ]];then
set +e
retry_unittests_record="$retry_unittests_record$failed_test_lists"
failed_test_lists_ult=`echo "${failed_test_lists}" |grep -Po '[^ ].*$'`
set -e
if [[ "${exec_times}" == "1" ]] || [[ "${exec_times}" == "2" ]];then
if [[ "${failed_test_lists}" == "" ]];then
break
else
retry_unittests=$(echo "$failed_test_lists" | grep -oEi "\-.+\(.+\)" | sed 's/(.\+)//' | sed 's/- //' )
fi
fi
echo "========================================="
echo "This is the ${exec_time_array[$exec_times]} time to re-run"
echo "========================================="
echo "The following unittest will be re-run:"
echo "${retry_unittests}"
retry_unittests_regular=''
for line in ${retry_unittests[@]} ;
do
if [[ "$retry_unittests_regular" == "" ]];then
retry_unittests_regular="^$line$"
else
retry_unittests_regular="$retry_unittests_regular|^$line$"
fi
done
failed_test_lists=''
ctest -R "$retry_unittests_regular" --timeout 120 --output-on-failure -j 2 | tee $tmpfile
collect_failed_tests
rm -f $tmp_dir/*
exec_times=$[$exec_times+1]
else
break
fi
done
retry_unittests_record="$retry_unittests_record$failed_test_lists"
fi
rerun_ut_endTime_s=`date +%s`
echo "ipipe_log_param_Rerun_TestCases_Total_Time: $[ $rerun_ut_endTime_s - $rerun_ut_startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
ut_actual_total_endTime_s=`date +%s`
echo "ipipe_log_param_actual_TestCases_Total_Time: $[ $ut_actual_total_endTime_s - $ut_actual_total_startTime_s ]s"
echo "ipipe_log_param_actual_TestCases_Total_Time: $[ $ut_actual_total_endTime_s - $ut_actual_total_startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
if [[ "$EXIT_CODE" != "0" ]]; then
show_ut_retry_result
fi
set -ex
fi
}
function check_run_sot_ci() {
set +x
# use "git commit -m 'message, test=sot'" to force ci to run
COMMIT_RUN_CI=$(git log -10 --pretty=format:"%s" | grep -w "test=sot" || true)
# check pr title
TITLE_RUN_CI=$(curl -s https://github.com/PaddlePaddle/Paddle/pull/${GIT_PR_ID} | grep "<title>" | grep -i "sot" || true)
if [[ ${COMMIT_RUN_CI} || ${TITLE_RUN_CI} ]]; then
set -x
return
fi
# git diff
SOT_FILE_LIST=(
paddle/pir
paddle/phi
paddle/scripts
paddle/fluid/eager/to_static
paddle/fluid/pybind/
python/
test/sot
)
run_sot_ut="OFF"
for change_file in $(git diff --name-only upstream/develop);
do
for sot_file in ${SOT_FILE_LIST[@]};
do
if [[ ${change_file} =~ ^"${sot_file}".* ]]; then
echo "Detect change about SOT: "
echo "Changes related to the sot code were detected: " ${change_file}
run_sot_ut="ON"
break
fi
done
if [[ "ON" == ${run_sot_ut} ]]; then
break
fi
done
if [[ "OFF" == ${run_sot_ut} ]]; then
echo "No SOT-related changes were found"
echo "Skip SOT UT CI"
exit 0
fi
set -x
}
function run_sot_test() {
PY_VERSION=$1
PYTHON_WITH_SPECIFY_VERSION=python$PY_VERSION
PY_VERSION_NO_DOT=$(echo $PY_VERSION | sed 's/\.//g')
export STRICT_MODE=1
export MIN_GRAPH_SIZE=0
export SOT_LOG_LEVEL=0
export FLAGS_cudnn_deterministic=True
export SOT_ENABLE_STRICT_GUARD_CHECK=True
# Install PaddlePaddle
$PYTHON_WITH_SPECIFY_VERSION -m pip install ${PADDLE_ROOT}/dist/paddlepaddle-0.0.0-cp${PY_VERSION_NO_DOT}-cp${PY_VERSION_NO_DOT}-linux_x86_64.whl
# cd to sot test dir
cd $PADDLE_ROOT/test/sot/
# Run unittest
failed_tests=()
# Skip single tests that are currently not supported
declare -a skip_files
skiplist_filename="./skip_files_py$PY_VERSION_NO_DOT"
if [ -f "$skiplist_filename" ];then
# Prevent missing lines
echo "" >> "$skiplist_filename"
while IFS= read -r line; do
skip_files+=("$line")
echo "$line"
done < "$skiplist_filename"
else
skip_files=()
fi
for file in ./test_*.py; do
# check file is python file
if [ -f "$file" ]; then
if [[ "${skip_files[*]}" =~ "${file}" ]]; then
echo "skip ${PY_VERSION_NO_DOT} ${file}"
continue
fi
echo Running:" STRICT_MODE=1 MIN_GRAPH_SIZE=0 SOT_LOG_LEVEL=0 FLAGS_cudnn_deterministic=True SOT_ENABLE_STRICT_GUARD_CHECK=True python " $file
# run unittests
python_output=$($PYTHON_WITH_SPECIFY_VERSION $file 2>&1)
if [ $? -ne 0 ]; then
echo "run $file failed"
failed_tests+=("$file")
echo -e "$python_output"
fi
fi
done
if [ ${#failed_tests[@]} -ne 0 ]; then
echo "failed tests file:"
for failed_test in "${failed_tests[@]}"; do
echo "$failed_test"
done
exit 1
fi
}
function get_precision_ut_mac() {
on_precision=0
UT_list=$(ctest -N | awk -F ': ' '{print $2}' | sed '/^$/d' | sed '$d')
precision_cases=""
if [ ${PRECISION_TEST:-OFF} == "ON" ]; then
python $PADDLE_ROOT/tools/get_pr_ut.py
if [[ -f "ut_list" ]]; then
echo "PREC length: "`wc -l ut_list`
precision_cases=`cat ut_list`
fi
fi
if [ ${PRECISION_TEST:-OFF} == "ON" ] && [[ "$precision_cases" != "" ]];then
UT_list_re=''
on_precision=1
re=$(cat ut_list|awk -F ' ' '{print }' | awk 'BEGIN{ all_str=""}{if (all_str==""){all_str=$1}else{all_str=all_str"$|^"$1}} END{print "^"all_str"$"}')
UT_list_prec_1='ut_list_prec2'
for ut_case in $UT_list; do
flag=$(echo $ut_case|grep -oE $re)
if [ -n "$flag" ];then
if [ -z "$UT_list_prec" ];then
UT_list_prec="^$ut_case$"
elif [[ "${#UT_list_prec}" -gt 10000 ]];then
UT_list_prec_1="$UT_list_prec_1|^$ut_case$"
else
UT_list_prec="$UT_list_prec|^$ut_case$"
fi
else
echo ${ut_case} "won't run in PRECISION_TEST mode."
fi
done
fi
}
function fetch_upstream_develop_if_not_exist() {
UPSTREAM_URL='https://github.com/PaddlePaddle/Paddle'
origin_upstream_url=`git remote -v | awk '{print $1, $2}' | uniq | grep upstream | awk '{print $2}'`
if [ "$origin_upstream_url" == "" ]; then
git remote add upstream $UPSTREAM_URL.git
elif [ "$origin_upstream_url" != "$UPSTREAM_URL" ] \
&& [ "$origin_upstream_url" != "$UPSTREAM_URL.git" ]; then
git remote remove upstream
git remote add upstream $UPSTREAM_URL.git
fi
if [ ! -e "$PADDLE_ROOT/.git/refs/remotes/upstream/$BRANCH" ]; then
git fetch upstream # develop is not fetched
fi
}
function check_whl_size() {
if [ ${BRANCH} != 'develop' ];then
return
fi
set +x
pr_whl_size=`du -m ${PADDLE_ROOT}/build/pr_whl/paddle*.whl|awk '{print $1}'`
echo "pr_whl_size: ${pr_whl_size}"
dev_whl_size=`du -m ${PADDLE_ROOT}/build/python/dist/paddle*.whl|awk '{print $1}'`
echo "dev_whl_size: ${dev_whl_size}"
whldiffSize=`echo $(($pr_whl_size - $dev_whl_size))`
if [ ${whldiffSize} -gt 10 ]; then
approval_line=`curl -H "Authorization: token ${GITHUB_API_TOKEN}" https://api.github.com/repos/PaddlePaddle/Paddle/pulls/${GIT_PR_ID}/reviews?per_page=10000`
APPROVALS=`echo ${approval_line}|python ${PADDLE_ROOT}/tools/check_pr_approval.py 1 risemeup1 swgu98`
echo "current pr ${GIT_PR_ID} got approvals: ${APPROVALS}"
if [ "${APPROVALS}" == "FALSE" ]; then
echo "=========================================================================================="
echo "This PR make the release paddlepaddle whl size growth exceeds 10 M."
echo "Then you must have one RD (risemeup1 or swgu98) approval for this PR\n"
echo "=========================================================================================="
exit 6
fi
fi
set -x
}
function generate_upstream_develop_api_spec() {
set -x
# Temporarily save some scripts from PR branch
cp ${PADDLE_ROOT}/python/requirements.txt /tmp
cp ${PADDLE_ROOT}/tools/print_signatures.py /tmp
mkdir -p ${PADDLE_ROOT}/build/pr_whl && mv ${PADDLE_ROOT}/build/python/dist/*.whl ${PADDLE_ROOT}/build/pr_whl/
pr_whl_size=`du -m ${PADDLE_ROOT}/build/python/dist/*.whl|awk '{print $1}'`
echo "pr_whl_size: ${pr_whl_size}"
rm -rf ${PADDLE_ROOT}/build/Makefile ${PADDLE_ROOT}/build/CMakeCache.txt ${PADDLE_ROOT}/build/python
cmake_change=`git diff --name-only upstream/$BRANCH | grep "cmake/external" || true`
cd ${PADDLE_ROOT}
git checkout -b develop_base_pr -t upstream/$BRANCH
echo "develop git log: "
git log --pretty=oneline -10
dev_commit=`git log -2|grep -w 'commit'|awk '{print $2}'`
for commit_id in $dev_commit
do
dev_url="https://xly-devops.bj.bcebos.com/PR/build_whl/0/${commit_id}/paddlepaddle_gpu-0.0.0-cp310-cp310-linux_x86_64.whl"
url_return=`curl -s -m 5 -IL ${dev_url} |awk 'NR==1{print $2}'`
if [ "$url_return" == '200' ];then
break
fi
done
if [ "$url_return" == '200' ];then
echo "wget develop whl from bos! "
mkdir -p ${PADDLE_ROOT}/build/python/dist && wget -q -P ${PADDLE_ROOT}/build/python/dist ${dev_url}
else
echo "compile develop whl locally! "
if [[ ${cmake_change} ]];then
rm -rf ${PADDLE_ROOT}/build/third_party
fi
cmake_gen $1
build $2
fi
generate_api_spec "$1" "DEV"
endTime_s=`date +%s`
echo "Build Time: $[ $endTime_s - $startTime_s ]s"
echo "ipipe_log_param_Build_Time: $[ $endTime_s - $startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
set +x
}
function generate_api_spec() {
set -e
spec_kind=$2
if [ "$spec_kind" != "PR" ] && [ "$spec_kind" != "DEV" ]; then
echo "Not supported $2"
exit 1
fi
if [ "$spec_kind" == "DEV" ]; then
REQUIREMENTS_PATH=/tmp/requirements.txt
PRINT_SIGNATURES_SCRIPT_PATH=/tmp/print_signatures.py
else
REQUIREMENTS_PATH=${PADDLE_ROOT}/python/requirements.txt
PRINT_SIGNATURES_SCRIPT_PATH=${PADDLE_ROOT}/tools/print_signatures.py
fi
mkdir -p ${PADDLE_ROOT}/build/.check_api_workspace
cd ${PADDLE_ROOT}/build/.check_api_workspace
virtualenv -p `which python` .${spec_kind}_env
source .${spec_kind}_env/bin/activate
pip install -r $REQUIREMENTS_PATH
if [ -d "${PADDLE_ROOT}/build/python/dist/" ]; then
pip install ${PADDLE_ROOT}/build/python/dist/*whl --no-index --no-deps
elif [ -d "${PADDLE_ROOT}/dist/" ];then
pip install ${PADDLE_ROOT}/dist/*whl --no-index --no-deps
mkdir ${PADDLE_ROOT}/build/python/dist/ && mv ${PADDLE_ROOT}/dist/*whl ${PADDLE_ROOT}/build/python/dist/
fi
spec_path=${PADDLE_ROOT}/paddle/fluid/API_${spec_kind}.spec
python ${PRINT_SIGNATURES_SCRIPT_PATH} paddle > $spec_path
python ${PRINT_SIGNATURES_SCRIPT_PATH} --show-fields="args,varargs,varkw,defaults,kwonlyargs,kwonlydefaults" paddle > ${spec_path}.api
python ${PRINT_SIGNATURES_SCRIPT_PATH} --show-fields="annotations" paddle > ${spec_path}.annotations
python ${PRINT_SIGNATURES_SCRIPT_PATH} --show-fields="document" paddle > ${spec_path}.doc
# used to log op_register data_type
op_type_path=${PADDLE_ROOT}/paddle/fluid/OP_TYPE_${spec_kind}.spec
python ${PADDLE_ROOT}/tools/check_op_register_type.py > $op_type_path
# used to log op_register data_type
op_type_path=${PADDLE_ROOT}/paddle/fluid/OP_KERNEL_DTYPE_${spec_kind}.spec
python ${PADDLE_ROOT}/tools/check_op_kernel_same_dtypes.py > $op_type_path
# print all ops desc in dict to op_desc_path
op_desc_path=${PADDLE_ROOT}/paddle/fluid/OP_DESC_${spec_kind}.spec
python ${PADDLE_ROOT}/tools/print_op_desc.py > $op_desc_path
# print api and the md5 of source code of the api.
api_source_md5_path=${PADDLE_ROOT}/paddle/fluid/API_${spec_kind}.source.md5
python ${PADDLE_ROOT}/tools/count_api_without_core_ops.py -p paddle > $api_source_md5_path
python ${PADDLE_ROOT}/tools/diff_use_default_grad_op_maker.py \
${PADDLE_ROOT}/paddle/fluid/op_use_default_grad_maker_${spec_kind}.spec
deactivate
cd ${PADDLE_ROOT}/build
rm -rf ${PADDLE_ROOT}/build/.check_api_workspace
}
function check_approvals_of_unittest() {
set +x
if [ "$GITHUB_API_TOKEN" == "" ] || [ "$GIT_PR_ID" == "" ]; then
return 0
fi
# approval_user_list: XiaoguangHu01 46782768,luotao1 6836917,lanxianghit 47554610, zhouwei25 52485244, kolinwei 22165420
check_times=$1
if [ $check_times == 1 ]; then
approval_line=`curl -H "Authorization: token ${GITHUB_API_TOKEN}" https://api.github.com/repos/PaddlePaddle/Paddle/pulls/${GIT_PR_ID}/reviews?per_page=10000`
if [ "${approval_line}" != "" ]; then
APPROVALS=`echo ${approval_line}|python ${PADDLE_ROOT}/tools/check_pr_approval.py 1 22165420 52485244`
echo "current pr ${GIT_PR_ID} got approvals: ${APPROVALS}"
if [ "${APPROVALS}" == "TRUE" ]; then
echo "==================================="
echo -e "\n current pr ${GIT_PR_ID} has got approvals. So, Pass CI directly!\n"
echo "==================================="
exit 0
fi
fi
elif [ $check_times == 2 ]; then
unittest_spec_diff=`python ${PADDLE_ROOT}/tools/diff_unittest.py ${PADDLE_ROOT}/paddle/fluid/UNITTEST_DEV.spec ${PADDLE_ROOT}/paddle/fluid/UNITTEST_PR.spec`
if [ "$unittest_spec_diff" != "" ]; then
approval_line=`curl -H "Authorization: token ${GITHUB_API_TOKEN}" https://api.github.com/repos/PaddlePaddle/Paddle/pulls/${GIT_PR_ID}/reviews?per_page=10000`
APPROVALS=`echo ${approval_line}|python ${PADDLE_ROOT}/tools/check_pr_approval.py 1 22165420 52485244 32428676 45041955`
echo "current pr ${GIT_PR_ID} got approvals: ${APPROVALS}"
if [ "${APPROVALS}" == "FALSE" ]; then
echo "************************************"
echo -e "It is forbidden to disable or delete the unit-test.\n"
echo -e "If you must delete it temporarily, please add it to[https://github.com/PaddlePaddle/Paddle/wiki/Temporarily-disabled-Unit-Test]."
echo -e "Then you must have one RD (kolinwei(recommended), chalsliu, XieYunshen or zhouwei25) approval for the deletion of unit-test. \n"
echo -e "If you have any problems about deleting unit-test, please read the specification [https://github.com/PaddlePaddle/Paddle/wiki/Deleting-unit-test-is-forbidden]. \n"
echo -e "Following unit-tests are deleted in this PR: \n ${unittest_spec_diff} \n"
echo "************************************"
exit 6
fi
fi
elif [ $check_times == 3 ]; then
if [ ${BRANCH} != 'develop' ];then
return
fi
rm -f fluidInference_so_size
curl -O https://paddle-docker-tar.bj.bcebos.com/paddle_ci_index/fluidInference_so_size
oriBuildSize=`cat fluidInference_so_size`
curBuildSize=$(du -m --max-depth=0 ${PADDLE_ROOT}/build/paddle_inference_install_dir/paddle/lib/libpaddle_inference.so |awk '{print $1}')
diffSize=$(awk "BEGIN{print $curBuildSize-$oriBuildSize}")
AllDiffSize=$(awk "BEGIN{print $diffSize * 4}")
cat <<EOF
========================================
Original libpaddle_inference.so Size is ${oriBuildSize}M.
Current libpaddle_inference.so Size is ${curBuildSize}M.
In single gpu architecture, Growing size of libpaddle_inference.so is ${diffSize}M.
In release version, The gpu architecture parameter is "All", The library size is four times to single gpu architecture.
It means the release version library size growth is about ${AllDiffSize}M.
========================================
EOF
if [ $(awk "BEGIN{print 20<$AllDiffSize}") -eq 1 ] ; then
approval_line=`curl -H "Authorization: token ${GITHUB_API_TOKEN}" https://api.github.com/repos/PaddlePaddle/Paddle/pulls/${GIT_PR_ID}/reviews?per_page=10000`
APPROVALS=`echo ${approval_line}|python ${PADDLE_ROOT}/tools/check_pr_approval.py 1 vivienfanghuagood Aurelius84 qingqing01 yuanlehome`
echo "current pr ${GIT_PR_ID} got approvals: ${APPROVALS}"
if [ "${APPROVALS}" == "FALSE" ]; then
echo "=========================================================================================="
echo "This PR make the release inference library size growth exceeds 20 M."
echo "Then you must have one RD (vivienfanghuagood (Recommend), Aurelius84 (ForPir) qingqing01 or yuanlehome) approval for this PR.\n"
echo "=========================================================================================="
exit 6
fi
fi
fi
set -x
}
function check_diff_file_for_coverage() {
diff_h_file=$(git diff --name-status test -- | awk '$1 != "D" {print $2}' | grep '\.h$' | awk -F "/" '{printf "%s,",$NF}')
diff_cc_file=$(git diff --name-status test -- | awk '$1 != "D" {print $2}' | grep -E '\.(cc|c)$' | awk -F "/" '{printf "%s,",$NF}')
diff_py_file=$(git diff --name-status test -- | grep '\.py$' | awk '$1 != "D" {printf "%s,",$2}')
export PADDLE_GIT_DIFF_H_FILE=${diff_h_file%*,}
export PADDLE_GIT_DIFF_CC_FILE=${diff_cc_file%*,}
export PADDLE_GIT_DIFF_PY_FILE=${diff_py_file%*,}
}
function check_sequence_op_unittest(){
/bin/bash ${PADDLE_ROOT}/tools/check_sequence_op.sh
}
function check_cinn_file_diff() {
CINN_FILE_LIST=(
CMakeLists.txt
cmake
paddle/cinn
python/CMakeLists.txt
test/CMakeLists.txt
test/cinn
test/cpp/cinn
)
run_cinn_ut="OFF"
for change_fie in $(git diff --name-only upstream/develop);
do
for cinn_file in ${CINN_FILE_LIST[@]};
do
if [[ ${change_fie} =~ ^"${cinn_file}".* ]]; then
run_cinn_ut="ON"
break
fi
done
if [[ "ON" == ${run_cinn_ut} ]]; then
break
fi
done
echo $run_cinn_ut
}
function assert_api_spec_approvals() {
/bin/bash ${PADDLE_ROOT}/tools/check_api_approvals.sh;approval_error=$?
if [ "$approval_error" != 0 ];then
exit 6
fi
}
function assert_file_diff_approvals() {
/bin/bash ${PADDLE_ROOT}/tools/check_file_diff_approvals.sh;file_approval_error=$?
if [ "$file_approval_error" != 0 ];then
exit 6
fi
}
function check_coverage() {
if [ ${WITH_COVERAGE:-ON} == "ON" ] ; then
/bin/bash ${PADDLE_ROOT}/tools/coverage/paddle_coverage.sh
else
echo "WARNING: check_coverage need to compile with WITH_COVERAGE=ON, but got WITH_COVERAGE=OFF"
fi
}
function single_test() {
TEST_NAME=$1
if [ -z "${TEST_NAME}" ]; then
echo -e "${RED}Usage:${NONE}"
echo -e "${BOLD}${SCRIPT_NAME}${NONE} ${BLUE}single_test${NONE} [test_name]"
exit 1
fi
mkdir -p ${PADDLE_ROOT}/build
cd ${PADDLE_ROOT}/build
if [ ${WITH_TESTING:-ON} == "ON" ] ; then
cat <<EOF
========================================
Running ${TEST_NAME} ...
========================================
EOF
ctest --output-on-failure -R ${TEST_NAME}
fi
}
function bind_test() {
# the number of process to run tests
NUM_PROC=6
# calculate and set the memory usage for each process
MEM_USAGE=$(awk "BEGIN{scale=5; print 1.0/$NUM_PROC}")
export FLAGS_fraction_of_gpu_memory_to_use=$MEM_USAGE
# get the CUDA device count
CUDA_DEVICE_COUNT=$(nvidia-smi -L | wc -l)
for (( i = 0; i < $NUM_PROC; i++ )); do
cuda_list=()
for (( j = 0; j < $CUDA_DEVICE_COUNT; j++ )); do
s=$[i+j]
n=$[s%CUDA_DEVICE_COUNT]
if [ $j -eq 0 ]; then
cuda_list=("$n")
else
cuda_list="$cuda_list,$n"
fi
done
echo $cuda_list
# CUDA_VISIBLE_DEVICES http://acceleware.com/blog/cudavisibledevices-masking-gpus
# ctest -I https://cmake.org/cmake/help/v3.0/manual/ctest.1.html?highlight=ctest
env CUDA_VISIBLE_DEVICES=$cuda_list ctest -I $i,,$NUM_PROC --output-on-failure &
done
wait
}
EXIT_CODE=0;
function caught_error() {
for job in `jobs -p`; do
# echo "PID => ${job}"
if ! wait ${job} ; then
echo "At least one test failed with exit code => $?" ;
EXIT_CODE=1;
fi
done
}
function case_count(){
cat <<EOF
============================================
Generating TestCases Count ...
============================================
EOF
testcases=$1
num=$(echo $testcases|grep -o '\^'|wc -l)
if (( $2 == -1 )); then
echo "exclusive TestCases count is $num"
echo "ipipe_log_param_Exclusive_TestCases_Count: $num" >> ${PADDLE_ROOT}/build/build_summary.txt
else
echo "$2 card TestCases count is $num"
echo "ipipe_log_param_${2}_Cards_TestCases_Count: $num" >> ${PADDLE_ROOT}/build/build_summary.txt
fi
}
failed_test_lists=''
tmp_dir=`mktemp -d`
function collect_failed_tests() {
for file in `ls $tmp_dir`; do
exit_code=0
grep -q 'The following tests FAILED:' $tmp_dir/$file||exit_code=$?
if [ $exit_code -ne 0 ]; then
failuretest=''
else
failuretest=`grep -A 10000 'The following tests FAILED:' $tmp_dir/$file | sed 's/The following tests FAILED://g'|sed '/^$/d'`
failed_test_lists="${failed_test_lists}
${failuretest}"
fi
done
}
# getting quick disable ut list
function get_quickly_disable_ut() {
python -m pip install httpx
if disable_ut_quickly=$(python ${PADDLE_ROOT}/tools/get_quick_disable_lt.py); then
echo "========================================="
echo "The following unittests have been disabled:"
echo ${disable_ut_quickly}
echo "========================================="
else
exit 102
disable_ut_quickly='disable_ut'
fi
}
# getting multi card uts for xpu
function get_multi_card_ut_list_for_xpu() {
input_file="${PADDLE_ROOT}/tools/xpu/multi_card_ut_xpu_kl3.local"
if [ ! -f "$input_file" ]; then
echo "input file not exist: $input_file"
exit 102
fi
multi_card_ut_list_for_xpu=$(sed 's/^/^/; s/$/$/' "$input_file" | paste -sd'|' -)
echo "========================================="
echo "The following unittests are for xpu multi card:"
echo ${multi_card_ut_list_for_xpu}
echo "========================================="
}
function card_test() {
set -m
case_count $1 $2
ut_startTime_s=`date +%s`
testcases=$1
cardnumber=$2
parallel_level_base=${CTEST_PARALLEL_LEVEL:-1}
# run ut based on the label
if [[ "${UT_RUN_TYPE_SETTING}" == "INFER" ]];then
run_label_mode="-L (RUN_TYPE=INFER)"
elif [[ "${UT_RUN_TYPE_SETTING}" == "DIST" ]];then
run_label_mode="-L (RUN_TYPE=DIST|RUN_TYPE=EXCLUSIVE)"
elif [[ "${UT_RUN_TYPE_SETTING}" == "WITHOUT_INFER" ]];then
run_label_mode="-LE (RUN_TYPE=INFER)"
elif [[ "${UT_RUN_TYPE_SETTING}" == "WITHOUT_HYBRID" ]];then
run_label_mode="-LE (RUN_TYPE=HYBRID)"
elif [[ "${UT_RUN_TYPE_SETTING}" == "OTHER" ]];then
run_label_mode="-LE (RUN_TYPE=INFER|RUN_TYPE=DIST|RUN_TYPE=EXCLUSIVE)"
fi
# get the CUDA device count
if [[ "${WITH_XPU}" == "ON" ]]; then
# 2 card for P800 ci
CUDA_DEVICE_COUNT=2
elif [[ "${WITH_ROCM}" == "ON" ]]; then
CUDA_DEVICE_COUNT=$(rocm-smi -i | grep DCU | wc -l)
elif [[ "${WITH_IPU}" == "ON" ]]; then
CUDA_DEVICE_COUNT=1
else
CUDA_DEVICE_COUNT=$(nvidia-smi -L | wc -l)
fi
if (( $cardnumber == -1 ));then
cardnumber=$CUDA_DEVICE_COUNT
fi
if (( $# > 2 )); then
parallel_job=`expr $3 \* $parallel_level_base`
else
parallel_job=$parallel_level_base
fi
if [[ "$testcases" == "" ]]; then
return 0
fi
# for XPU, split XPU_VISIBLE_DEVICES
if [[ "$WITH_XPU" == "ON" ]]; then
IFS=',' read -ra XPU_DEVICE_ARRAY <<< "$XPU_VISIBLE_DEVICES"
fi
trap 'caught_error' CHLD
tmpfile_rand=`date +%s%N`
NUM_PROC=$[CUDA_DEVICE_COUNT/$cardnumber]
echo "****************************************************************"
echo "***These unittests run $parallel_job job each time with $cardnumber GPU***"
echo "****************************************************************"
for (( i = 0; i < $NUM_PROC; i++ )); do
# CUDA_VISIBLE_DEVICES http://acceleware.com/blog/cudavisibledevices-masking-gpus
# ctest -I https://cmake.org/cmake/help/v3.0/manual/ctest.1.html?highlight=ctest
cuda_list=()
for (( j = 0; j < cardnumber; j++ )); do
if [ $j -eq 0 ]; then
cuda_list=("$[i*cardnumber]")
else
cuda_list="$cuda_list,$[i*cardnumber+j]"
fi
done
# for XPU, split XPU_VISIBLE_DEVICES
if [[ "$WITH_XPU" == "ON" ]]; then
cuda_list=()
for (( j = 0; j < cardnumber; j++ )); do
index=$((i * cardnumber + j))
cuda_list+=("${XPU_DEVICE_ARRAY[index]}")
done
cuda_list_str=$(IFS=,; echo "${cuda_list[*]}")
fi
tmpfile=$tmp_dir/$tmpfile_rand"_"$i
if [ ${TESTING_DEBUG_MODE:-OFF} == "ON" ] ; then
if [[ $cardnumber == $CUDA_DEVICE_COUNT ]]; then
(ctest -I $i,,$NUM_PROC -R "($testcases)" -E "($disable_ut_quickly)" ${run_label_mode} -V --timeout 120 -j $parallel_job | tee $tmpfile; test ${PIPESTATUS[0]} -eq 0) &
else
if [[ "$WITH_ROCM" == "ON" ]]; then
(env HIP_VISIBLE_DEVICES=$cuda_list ctest -I $i,,$NUM_PROC -R "($testcases)" -E "($disable_ut_quickly)" ${run_label_mode} --timeout 120 -V -j $parallel_job | tee $tmpfile; test ${PIPESTATUS[0]} -eq 0) &
elif [[ "$WITH_XPU" == "ON" ]]; then
(env XPU_VISIBLE_DEVICES=$cuda_list_str ctest -I $i,,$NUM_PROC -R "($testcases)" -E "($disable_ut_quickly)" ${run_label_mode} --timeout 120 -V -j $parallel_job | tee $tmpfile; test ${PIPESTATUS[0]} -eq 0) &
else
(env CUDA_VISIBLE_DEVICES=$cuda_list ctest -I $i,,$NUM_PROC -R "($testcases)" -E "($disable_ut_quickly)" ${run_label_mode} --timeout 120 -V -j $parallel_job | tee $tmpfile; test ${PIPESTATUS[0]} -eq 0) &
fi
fi
else
if [[ $cardnumber == $CUDA_DEVICE_COUNT ]]; then
(ctest -I $i,,$NUM_PROC -R "($testcases)" -E "($disable_ut_quickly)" ${run_label_mode} --timeout 120 --output-on-failure -j $parallel_job | tee $tmpfile; test ${PIPESTATUS[0]} -eq 0) &
else
if [[ "$WITH_ROCM" == "ON" ]]; then
(env HIP_VISIBLE_DEVICES=$cuda_list ctest -I $i,,$NUM_PROC -R "($testcases)" -E "($disable_ut_quickly)" ${run_label_mode} --timeout 120 --output-on-failure -j $parallel_job | tee $tmpfile; test ${PIPESTATUS[0]} -eq 0) &
elif [[ "$WITH_XPU" == "ON" ]]; then
(env XPU_VISIBLE_DEVICES=$cuda_list_str ctest -I $i,,$NUM_PROC -R "($testcases)" -E "($disable_ut_quickly)" ${run_label_mode} --timeout 120 --output-on-failure -j $parallel_job | tee $tmpfile; test ${PIPESTATUS[0]} -eq 0) &
else
(env CUDA_VISIBLE_DEVICES=$cuda_list ctest -I $i,,$NUM_PROC -R "($testcases)" -E "($disable_ut_quickly)" ${run_label_mode} --timeout 120 --output-on-failure -j $parallel_job | tee $tmpfile; test ${PIPESTATUS[0]} -eq 0) &
fi
fi
fi
done
wait; # wait for all subshells to finish
trap - CHLD
ut_endTime_s=`date +%s`
if (( $2 == -1 )); then
echo "exclusive TestCases Total Time: $[ $ut_endTime_s - $ut_startTime_s ]s"
else
echo "$2 card TestCases Total Time: $[ $ut_endTime_s - $ut_startTime_s ]s"
fi
echo "$2 card TestCases finished!!!! "
set +m
}
function parallel_test_base_gpu() {
if [ ${WITH_TESTING:-ON} == "ON" ] ; then
cat <<EOF
========================================
Running unit tests in parallel way ...
========================================
EOF
set -x
# set trt_convert ut to run 15% cases.
export TEST_NUM_PERCENT_CASES=0.15
export FLAGS_trt_ibuilder_cache=1
precision_cases=""
bash $PADDLE_ROOT/tools/check_added_ut.sh
if [ ${PRECISION_TEST:-OFF} == "ON" ]; then
python $PADDLE_ROOT/tools/get_pr_ut.py
if [[ -f "ut_list" ]]; then
set +x
echo "PREC length: "`wc -l ut_list`
precision_cases=`cat ut_list`
set -x
fi
fi
if [ -a "$PADDLE_ROOT/duplicate_ut" ];then
duplicate_uts=$(cat $PADDLE_ROOT/duplicate_ut|sed -e 's/\r//g')
if [[ "$duplicate_uts" != "" ]];then
set +x
echo "========================================"
echo "The new unit test has the same name as the existing unit test"
cat "$PADDLE_ROOT/duplicate_ut"
echo "========================================"
exit 102;
set -x
fi
fi
if [ -a "$PADDLE_ROOT/added_ut" ];then
added_uts=^$(awk BEGIN{RS=EOF}'{gsub(/\n/,"$|^");print}' $PADDLE_ROOT/added_ut)$
env CUDA_VISIBLE_DEVICES=0 ctest -R "(${added_uts})" -LE "RUN_TYPE=DIST|RUN_TYPE=EXCLUSIVE|RUN_TYPE=HYBRID" --output-on-failure --repeat-until-fail 3 --timeout 15;added_ut_error=$?
ctest -R "(${added_uts})" -L "RUN_TYPE=DIST|RUN_TYPE=EXCLUSIVE" --output-on-failure --repeat-until-fail 3 --timeout 15;added_ut_error_1=$?
if [ "$added_ut_error" != 0 ] && [ "$added_ut_error_1" != 0 ];then
echo "========================================"
echo "Added UT should not exceed 15 seconds"
echo "========================================"
exit 8;
fi
fi
set +x
EXIT_CODE=0;
test_cases=$(ctest -N -V) # get all test cases
# Note(zhouwei): Parallel runs are relative to 'CTEST_PARALLEL_LEVEL', e.g: '4 job each time' means 4*CTEST_PARALLEL_LEVEL
single_card_tests_high_parallel='^job$' # cases list which would run 24 job each time with single GPU
single_card_tests_secondary_high_parallel='^job$' # cases list which would run 15 job each time with single GPU
single_card_tests_third_high_parallel='^job$' # cases list which would run 12 job each time with single GPU
single_card_tests_forth_high_parallel='^job$' # cases list which would run 7 job each time with single GPU
single_card_tests_fifth_high_parallel='^job$' # cases list which would run 4 job each time with single GPU
single_card_tests_lowest_parallel='^job$' # cases list which would run 2 job each time with single GPU
single_card_tests_non_parallel='^job$' # cases list which would run 4 job each time with single GPU
single_card_tests='^job$' # all cases list which would take single GPU
multiple_card_tests_medium_parallel='^job$' # cases list which would run 4 job each time with multiple GPUs, most cases would be two GPUs
multiple_card_tests_non_parallel='^job$' # cases list which would run 3 job each time with multiple GPUs, most cases would be two GPUs
exclusive_tests_high_parallel='^job$' # cases list which would run 7 job exclusively(with all GPUs)
exclusive_tests_medium_parallel='^job$' # cases list which would run 4 job exclusively(with all GPUs)
exclusive_tests_non_parallel='^job$' # cases list which would run 2 job exclusively(with all GPUs)
is_exclusive='' # indicate whether the case is exclusive type
is_multicard='' # indicate whether the case is multiple GPUs type
is_nightly='' # indicate whether the case will only run at night
get_quickly_disable_ut||disable_ut_quickly='disable_ut' # indicate whether the case was in quickly disable list
ctest -N | awk -F ': ' '{print $2}' | sed '/^$/d' | sed '$d' > all_ut_list
output=$(python ${PADDLE_ROOT}/tools/parallel_UT_rule.py)
high_parallel_job=$(echo $output | cut -d ";" -f 1)
secondary_high_parallel_job=$(echo $output | cut -d ";" -f 2)
third_high_parallel_job=$(echo $output | cut -d ";" -f 3)
fourth_high_parallel_job=$(echo $output | cut -d ";" -f 4)
fifth_high_parallel_job=$(echo $output | cut -d ";" -f 5)
sixth_high_parallel_job=$(echo $output | cut -d ";" -f 6)
lowest_high_parallel_job=$(echo $output | cut -d ";" -f 7)
non_parallel_job=$(echo $output | cut -d ";" -f 8)
while read -r line; do
if [[ "$line" == "" ]]; then
continue
fi
matchstr=$(echo $line|grep -oEi 'Test[ \t]+#') || true
if [[ "$matchstr" == "" ]]; then
# Any test case with LABELS property would be parse here
# RUN_TYPE=EXCLUSIVE mean the case would run exclusively
# RUN_TYPE=DIST mean the case would take two graph GPUs during runtime
# RUN_TYPE=NIGHTLY or RUN_TYPE=DIST:NIGHTLY or RUN_TYPE=EXCLUSIVE:NIGHTLY means the case will ONLY run at night
is_exclusive=$(echo "$line"|grep -oEi "RUN_TYPE=EXCLUSIVE") || true
is_multicard=$(echo "$line"|grep -oEi "RUN_TYPE=DIST") || true
is_nightly=$(echo "$line"|grep -oEi "RUN_TYPE=NIGHTLY|RUN_TYPE=DIST:NIGHTLY|RUN_TYPE=EXCLUSIVE:NIGHTLY") || true
continue
fi
testcase=$(echo "$line"|grep -oEi "\w+$")
if [[ "$is_nightly" != "" ]] && [ ${NIGHTLY_MODE:-OFF} == "OFF" ]; then
echo $testcase" will only run at night."
continue
fi
if [ ${PRECISION_TEST:-OFF} == "ON" ] && [[ "$precision_cases" != "" ]]; then
will_test="false"
for case in $precision_cases; do
if [[ $testcase == $case ]]; then
will_test="true"
break
fi
done
if [[ $will_test == "false" ]]; then
echo $testcase" won't run in PRECISION_TEST mode."
continue
fi
fi
if [[ "$is_multicard" == "" ]]; then
# trick: treat all test case with prefix "test_dist" as dist case, and would run on 2 GPUs
is_multicard=$(echo "$testcase"|grep -oEi "test_dist_")
fi
if [[ "$is_exclusive" != "" ]]; then
if [[ $(echo $high_parallel_job | grep -o "\^$testcase\\$") != "" ]]; then
exclusive_tests_high_parallel="$exclusive_tests_high_parallel|^$testcase$"
elif [[ $(echo $fourth_high_parallel_job$fifth_high_parallel_job | grep -o "\^$testcase\\$") != "" ]]; then
exclusive_tests_medium_parallel="$exclusive_tests_medium_parallel|^$testcase$"
else
exclusive_tests_non_parallel="$exclusive_tests_non_parallel|^$testcase$"
fi
elif [[ "$is_multicard" != "" ]]; then
if [[ $(echo $high_parallel_job$fourth_high_parallel_job | grep -o "\^$testcase\\$") != "" ]]; then
multiple_card_tests_medium_parallel="$multiple_card_tests_medium_parallel|^$testcase$"
else
multiple_card_tests_non_parallel="$multiple_card_tests_non_parallel|^$testcase$"
fi
else
if [[ $(echo $high_parallel_job | grep -o "\^$testcase\\$") != "" ]]; then
single_card_tests_high_parallel="$single_card_tests_high_parallel|^$testcase$"
elif [[ $(echo $secondary_high_parallel_job | grep -o "\^$testcase\\$") != "" ]]; then
single_card_tests_secondary_high_parallel="$single_card_tests_secondary_high_parallel|^$testcase$"
elif [[ $(echo $third_high_parallel_job | grep -o "\^$testcase\\$") != "" ]]; then
single_card_tests_third_high_parallel="$single_card_tests_third_high_parallel|^$testcase$"
elif [[ $(echo $fourth_high_parallel_job$fifth_high_parallel_job | grep -o "\^$testcase\\$") != "" ]]; then
single_card_tests_forth_high_parallel="$single_card_tests_forth_high_parallel|^$testcase$"
elif [[ $(echo $sixth_high_parallel_job | grep -o "\^$testcase\\$") != "" ]]; then
single_card_tests_fifth_high_parallel="$single_card_tests_fifth_high_parallel|^$testcase$"
elif [[ $(echo $lowest_high_parallel_job| grep -o "\^$testcase\\$") != "" ]]; then
single_card_tests_lowest_parallel="$single_card_tests_lowest_parallel|^$testcase$"
else
single_card_tests_non_parallel="$single_card_tests_non_parallel|^$testcase$"
fi
single_card_tests="$single_card_tests|^$testcase$"
fi
is_exclusive=''
is_multicard=''
is_nightly=''
matchstr=''
testcase=''
done <<< "$test_cases";
ut_actual_total_startTime_s=`date +%s`
single_ut_startTime_s=`date +%s`
card_test "$single_card_tests_high_parallel" 1 24 # run cases 24 job each time with single GPU
card_test "$single_card_tests_secondary_high_parallel" 1 15 # run cases 15 job each time with single GPU
card_test "$single_card_tests_third_high_parallel" 1 12 # run cases 12 job each time with single GPU
card_test "$single_card_tests_forth_high_parallel" 1 5 # run cases 5 job each time with single GPU
card_test "$single_card_tests_fifth_high_parallel" 1 4 # run cases 4 job each time with single GPU
card_test "$single_card_tests_lowest_parallel" 1 2 # run cases 2 job each time with single GPU
card_test "$single_card_tests_non_parallel" 1 4 # run cases 4 job each time with single GPU
single_ut_endTime_s=`date +%s`
multi_ut_startTime_s=`date +%s`
card_test "$multiple_card_tests_medium_parallel" 2 4 # run cases 2 job each time with two GPUs
card_test "$multiple_card_tests_non_parallel" 2 3 # run cases 1 job each time with two GPUs
multi_ut_endTime_s=`date +%s`
exclu_ut_startTime_s=`date +%s`
card_test "$exclusive_tests_high_parallel" -1 7 # run cases exclusively, in this cases would be run with 2/4/8 GPUs
card_test "$exclusive_tests_medium_parallel" -1 4 # run cases exclusively, in this cases would be run with 2/4/8 GPUs
card_test "$exclusive_tests_non_parallel" -1 2 # run cases exclusively, in this cases would be run with 2/4/8 GPUs
exclu_ut_endTime_s=`date +%s`
echo "ipipe_log_param_1_TestCases_Total_Time: $[ $single_ut_endTime_s - $single_ut_startTime_s ]s"
echo "ipipe_log_param_2_TestCases_Total_Time: $[ $multi_ut_endTime_s - $multi_ut_startTime_s ]s"
echo "ipipe_log_param_Exclusive_TestCases_Total_Time: $[ $exclu_ut_endTime_s - $exclu_ut_startTime_s ]s"
echo "ipipe_log_param_1_TestCases_Total_Time: $[ $single_ut_endTime_s - $single_ut_startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
echo "ipipe_log_param_2_TestCases_Total_Time: $[ $multi_ut_endTime_s - $multi_ut_startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
echo "ipipe_log_param_Exclusive_TestCases_Total_Time: $[ $exclu_ut_endTime_s - $exclu_ut_startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
collect_failed_tests
rm -f $tmp_dir/*
exec_times=0
retry_unittests_record=''
retry_time=4
exec_time_array=('first' 'second' 'third' 'fourth')
parallel_failed_tests_exec_retry_threshold=120
exec_retry_threshold=30
is_retry_execute=0
rerun_ut_startTime_s=`date +%s`
if [ -n "$failed_test_lists" ];then
if [ ${TIMEOUT_DEBUG_HELP:-OFF} == "ON" ];then
bash $PADDLE_ROOT/tools/timeout_debug_help.sh "$failed_test_lists" # cat logs for timeout uts which killed by ctest
fi
need_retry_ut_str=$(echo "$failed_test_lists" | grep -oEi "\-.+\(.+\)" | sed 's/(.\+)//' | sed 's/- //' )
need_retry_ut_arr=(${need_retry_ut_str})
need_retry_ut_count=${#need_retry_ut_arr[@]}
retry_unittests=$(echo "$failed_test_lists" | grep -oEi "\-.+\(.+\)" | sed 's/(.\+)//' | sed 's/- //' )
while ( [ $exec_times -lt $retry_time ] )
do
if [[ "${exec_times}" == "0" ]] ;then
if [ $need_retry_ut_count -lt $parallel_failed_tests_exec_retry_threshold ];then
is_retry_execute=0
else
is_retry_execute=1
fi
elif [[ "${exec_times}" == "1" ]] ;then
need_retry_ut_str=$(echo "$failed_test_lists" | grep -oEi "\-.+\(.+\)" | sed 's/(.\+)//' | sed 's/- //' )
need_retry_ut_arr=(${need_retry_ut_str})
need_retry_ut_count=${#need_retry_ut_arr[@]}
if [ $need_retry_ut_count -lt $exec_retry_threshold ];then
is_retry_execute=0
else
is_retry_execute=1
fi
fi
if [[ "$is_retry_execute" == "0" ]];then
set +e
retry_unittests_record="$retry_unittests_record$failed_test_lists"
failed_test_lists_ult=`echo "${failed_test_lists}" |grep -Po '[^ ].*$'`
set -e
if [[ "${exec_times}" == "1" ]] || [[ "${exec_times}" == "2" ]];then
if [[ "${failed_test_lists}" == "" ]];then
break
else
retry_unittests=$(echo "$failed_test_lists" | grep -oEi "\-.+\(.+\)" | sed 's/(.\+)//' | sed 's/- //' )
fi
fi
echo "========================================="
echo "This is the ${exec_time_array[$exec_times]} time to re-run"
echo "========================================="
echo "The following unittest will be re-run:"
echo "${retry_unittests}"
for line in ${retry_unittests[@]} ;
do
tmp_one_tmp="$( echo $single_card_tests | grep -oEi $line )"
tmp_mul_tmp="$( echo $multiple_card_tests | grep -oEi $line )"
exclusive_tmp="$( echo $exclusive_tests | grep -oEi $line )"
if [[ "$tmp_one_tmp" != "" ]]; then
if [[ "$one_card_retry" == "" ]]; then
one_card_retry="^$line$"
else
one_card_retry="$one_card_retry|^$line$"
fi
elif [[ "$tmp_mul_tmp" != "" ]]; then
if [[ "$multiple_card_retry" == "" ]]; then
multiple_card_retry="^$line$"
else
multiple_card_retry="$multiple_card_retry|^$line$"
fi
else
if [[ "$exclusive_retry" == "" ]];then
exclusive_retry="^$line$"
else
exclusive_retry="$exclusive_retry|^$line$"
fi
fi
done
if [[ "$one_card_retry" != "" ]]; then
card_test "$one_card_retry" 1 4
fi
if [[ "$multiple_card_retry" != "" ]]; then
card_test "$multiple_card_retry" 2
fi
if [[ "$exclusive_retry" != "" ]]; then
card_test "$exclusive_retry" -1
fi
echo "exec_times: $exec_times"
exec_times=$[$exec_times+1]
failed_test_lists=''
collect_failed_tests
echo "failed_test_lists: $failed_test_lists"
rm -f $tmp_dir/*
one_card_retry=''
multiple_card_retry=''
exclusive_retry=''
else
break
fi
done
retry_unittests_record="$retry_unittests_record$failed_test_lists"
fi
rerun_ut_endTime_s=`date +%s`
echo "ipipe_log_param_Rerun_TestCases_Total_Time: $[ $rerun_ut_endTime_s - $rerun_ut_startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
ut_actual_total_endTime_s=`date +%s`
echo "ipipe_log_param_actual_TestCases_Total_Time: $[ $ut_actual_total_endTime_s - $ut_actual_total_startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
if [[ "$EXIT_CODE" != "0" ]]; then
show_ut_retry_result
fi
set -ex
fi
}
function classify_case_by_cardNum() {
cd ${PADDLE_ROOT}/build
test_cases=$(ctest -N -V) # get all test cases
single_card_tests='^job$' # all cases list which would take single GPU
multiple_card_tests='^job$'
exclusive_card_tests='^job$'
nightly_tests='^job$'
is_exclusive='' # indicate whether the case is exclusive type
is_multicard='' # indicate whether the case is multiple GPUs type
is_nightly='' # indicate whether the case will only run at night
set +x
while read -r line; do
if [[ "$line" == "" ]]; then
continue
fi
matchstr="$(echo $line|grep -oEi 'Test[ \t]+#')" || true
if [[ "$matchstr" == "" ]]; then
# Any test case with LABELS property would be parse here
# RUN_TYPE=EXCLUSIVE mean the case would run exclusively
# RUN_TYPE=DIST mean the case would take two graph GPUs during runtime
# RUN_TYPE=NIGHTLY or RUN_TYPE=DIST:NIGHTLY or RUN_TYPE=EXCLUSIVE:NIGHTLY means the case will ONLY run at night
is_exclusive=$(echo "$line"|grep -oEi "RUN_TYPE=EXCLUSIVE")
is_multicard=$(echo "$line"|grep -oEi "RUN_TYPE=DIST")
is_nightly=$(echo "$line"|grep -oEi "RUN_TYPE=NIGHTLY|RUN_TYPE=DIST:NIGHTLY|RUN_TYPE=EXCLUSIVE:NIGHTLY")
continue
fi
testcase=$(echo "$line"|grep -oEi "\w+$")
if [[ "$is_nightly" != "" ]] && [ ${NIGHTLY_MODE:-OFF} == "OFF" ]; then
echo $testcase" will only run at night."
nightly_tests="$nightly_tests|^$testcase$"
echo "$testcase" >> ${PADDLE_ROOT}/build/nightly_case
continue
fi
if [[ "$is_multicard" == "" ]]; then
# trick: treat all test case with prefix "test_dist" as dist case, and would run on 2 GPUs
is_multicard=$(echo "$testcase"|grep -oEi "test_dist_")
fi
if [[ "$is_exclusive" != "" ]]; then
exclusive_card_tests="$exclusive_card_tests|^$testcase$"
elif [[ "$is_multicard" != "" ]]; then
multiple_card_tests="$multiple_card_tests|^$testcase$"
else
single_card_tests="$single_card_tests|^$testcase$"
fi
is_exclusive=''
is_multicard=''
is_nightly=''
matchstr=''
testcase=''
done <<< "$test_cases";
set -x
rm -rf ${PADDLE_ROOT}/build/classify_case_by_cardNum.txt
touch ${PADDLE_ROOT}/build/classify_case_by_cardNum.txt
echo 'single_card_tests: '$single_card_tests >> ${PADDLE_ROOT}/build/classify_case_by_cardNum.txt
echo 'multiple_card_tests: '$multiple_card_tests >> ${PADDLE_ROOT}/build/classify_case_by_cardNum.txt
echo 'exclusive_card_tests: '$exclusive_card_tests >> ${PADDLE_ROOT}/build/classify_case_by_cardNum.txt
echo 'nightly_tests: '$nightly_tests >> ${PADDLE_ROOT}/build/classify_case_by_cardNum.txt
}
function show_ut_retry_result() {
if [ "$SYSTEM" == "Darwin" ]; then
exec_retry_threshold_count=10
else
exec_retry_threshold_count=80
fi
if [[ "$is_retry_execute" != "0" ]] && [[ "${exec_times}" == "0" ]] ;then
failed_test_lists_ult=`echo "${failed_test_lists}" | grep -Po '[^ ].*$'`
echo "========================================="
echo "There are more than ${exec_retry_threshold_count} failed unit tests in parallel test, so no unit test retry!!!"
echo "========================================="
echo "The following tests FAILED: "
echo "${failed_test_lists_ult}"
exit 8;
elif [[ "$is_retry_execute" != "0" ]] && [[ "${exec_times}" == "1" ]];then
failed_test_lists_ult=`echo "${failed_test_lists}" | grep -Po '[^ ].*$'`
echo "========================================="
echo "There are more than 10 failed unit tests, so no unit test retry!!!"
echo "========================================="
echo "The following tests FAILED: "
echo "${failed_test_lists_ult}"
exit 8;
else
retry_unittests_ut_name=$(echo "$retry_unittests_record" | grep -oEi "\-.+\(" | sed 's/(//' | sed 's/- //' )
if [ "$SYSTEM" == "Darwin" ]; then
retry_unittests_record_judge=$(echo ${retry_unittests_ut_name}| tr ' ' '\n' | sort | uniq -c | awk '{if ($1 >=3) {print $2}}')
else
retry_unittests_record_judge=$(echo ${retry_unittests_ut_name}| tr ' ' '\n' | sort | uniq -c | awk '{if ($1 >=4) {print $2}}')
fi
if [ -z "${retry_unittests_record_judge}" ];then
echo "========================================"
echo "There are failed tests, which have been successful after re-run:"
echo "========================================"
echo "The following tests have been re-ran:"
echo "${retry_unittests_record}"
else
failed_ut_re=$(echo "${retry_unittests_record_judge}" | awk BEGIN{RS=EOF}'{gsub(/\n/,"|");print}')
echo "========================================"
echo "There are failed tests, which have been executed re-run,but success rate is less than 50%:"
echo "Summary Failed Tests... "
echo "========================================"
echo "The following tests FAILED: "
echo "${retry_unittests_record}" | sort -u | grep -E "$failed_ut_re"
exit 8;
fi
fi
}
function parallel_test_base_cpu() {
mkdir -p ${PADDLE_ROOT}/build
cd ${PADDLE_ROOT}/build
if [ ${WITH_TESTING:-ON} == "ON" ] ; then
cat <<EOF
========================================
Running unit cpu tests ...
========================================
EOF
ut_startTime_s=`date +%s`
ctest --output-on-failure -j $1
ut_endTime_s=`date +%s`
echo "CPU testCase Time: $[ $ut_endTime_s - $ut_startTime_s ]s"
if [[ "$EXIT_CODE" != "0" ]]; then
exit 8;
fi
fi
}
function insert_pile_to_h_cu_diff {
# get all .cu files of develop branch
cd ${PADDLE_ROOT}
find ${PADDLE_ROOT} -name '*.cu'| grep -v ${PADDLE_ROOT}/build >> ${PADDLE_ROOT}/tools/h_cu_files.log
#insert pile to all .cu files
python ${PADDLE_ROOT}/tools/handle_h_cu_file.py 'insert_pile_to_h_file' ${PADDLE_ROOT}
}
function precise_card_test_single {
set +e
set +x
testcases=$1
num=$2
for case in $(echo $testcases | tr "$|^" "\n" | awk '!/^$/')
do
cd ${PADDLE_ROOT}/build
find paddle/fluid -name *.gcda | xargs rm -f
find paddle/phi -name *.gcda | xargs rm -f
find paddle/utils -name *.gcda | xargs rm -f
precise_card_test "^${case}$" $num
#if test failed,continue,if test succeed ,go on
if_test_failed=$(cat $tmp_dir/^${case}$.log| grep "The following tests FAILED:")
if [[ "$if_test_failed" == "The following tests FAILED:" ]];then
echo "$testcases has failed,put it into prec_delta"
continue
else
echo "$testcases succeed"
fi
# c++
if [ ! -d "${PADDLE_ROOT}/build/ut_map/$case" ];then
mkdir ${PADDLE_ROOT}/build/ut_map/$case
fi
set -x
find paddle/fluid -name '*.gcda'|xargs -I {} cp --parents {} ut_map/$case
find paddle/phi -name '*.gcda'|xargs -I {} cp --parents {} ut_map/$case
find paddle/utils -name '*.gcda'|xargs -I {} cp --parents {} ut_map/$case
find paddle/phi -name '*.gcno'|xargs -I {} cp --parents {} ut_map/$case
find paddle/utils -name '*.gcno'|xargs -I {} cp --parents {} ut_map/$case
find paddle/fluid -name '*.gcno'|xargs -I {} cp --parents {} ut_map/$case
wait;
python ${PADDLE_ROOT}/tools/get_single_test_cov.py ${PADDLE_ROOT} $case &
# python
ls python-coverage.data.*
if [[ $? == 0 ]]
then
if [ ! -d "${PADDLE_ROOT}/build/pytest/$case" ];then
mkdir -p ${PADDLE_ROOT}/build/pytest/$case
fi
mv python-coverage.data.* ${PADDLE_ROOT}/build/pytest/$case
fi
done
}
function parallel_card_test_single {
set +e
set +x
testcases=$1
num=$2
for case in $(echo $testcases | tr "$|^" "\n")
do
cd ${PADDLE_ROOT}/build
parallel_card_test "^${case}$" $num
done
}
function parallel_card_test() {
set -m
testcases=$1
if (( $# > 1 )); then
cardnumber=$2
cuda_list="0"
if [ $cardnumber -eq 2 ]; then
cuda_list=${CUDA_VISIBLE_DEVICES}
else
cuda_list="0"
fi
else
cardnumber=2
cuda_list=${CUDA_VISIBLE_DEVICES}
fi
if [[ "$testcases" == "" ]]; then
return 0
fi
echo "****************************************************************"
echo "***Running ut: $testcases***"
echo "****************************************************************"
tmpfile=$tmp_dir/$testcases".log"
tmpfile1=$tmp_dir/$testcases"-gpu.log"
nvidia-smi --id=0 --query-compute-apps=used_memory --format=csv -lms 10 > $tmpfile1 2>&1 &
gpu_memory_pid=$!
env CUDA_VISIBLE_DEVICES=$cuda_list ctest -I 0,,1 -R "($testcases)" --timeout 500 --output-on-failure -V -j 1 > $tmpfile
kill ${gpu_memory_pid}
cat $tmpfile1 | tr -d ' MiB' | awk 'BEGIN {max = 0} {if(NR>1){if ($1 > max) max=$1}} END {print "MAX_GPU_MEMORY_USE=", max}' >> $tmpfile
cat $tmpfile1 | tr -d ' MiB' | awk 'BEGIN {sum = 0} {if(NR>1){sum = sum + $1 }} END {print "AVG_GPU_MEMORY_USE=", sum / (NR-2)}' >> $tmpfile
rm -rf $tmpfile1
set +m
}
function precise_card_test() {
set -m
testcases=$1
if (( $# > 1 )); then
cardnumber=$2
cuda_list="0"
if [ $cardnumber -eq 2 ]; then
cuda_list=${CUDA_VISIBLE_DEVICES}
else
cuda_list="0"
fi
else
cardnumber=2
cuda_list=${CUDA_VISIBLE_DEVICES}
fi
if [[ "$testcases" == "" ]]; then
return 0
fi
echo "****************************************************************"
echo "***Running ut: $testcases***"
echo "****************************************************************"
tmpfile=$tmp_dir/$testcases".log"
env CUDA_VISIBLE_DEVICES=$cuda_list ctest -I 0,,1 -R "($testcases)" -E "($disable_ut_quickly)" --timeout 500 --output-on-failure -V -j 1 > $tmpfile
set +m
}
function get_precise_tests_map_file {
cd ${PADDLE_ROOT}/build
pip install ${PADDLE_ROOT}/build/python/dist/*whl
ut_total_startTime_s=`date +%s`
EXIT_CODE=0;
test_cases=$(ctest -N -V) # get all test cases
single_card_tests='' # all cases list which would take one graph card
exclusive_tests='' # cases list which would be run exclusively
multiple_card_tests='' # cases list which would take multiple GPUs, most cases would be two GPUs
is_exclusive='' # indicate whether the case is exclusive type
is_multicard='' # indicate whether the case is multiple GPUs type
single_card_test_num=0
set +x
while read -r line; do
if [[ "$line" == "" ]]; then
continue
fi
matchstr="$(echo $line|grep -oEi 'Test[ \t]+#')" || true
if [[ "$matchstr" == "" ]]; then
# Any test case with LABELS property would be parse here
# RUN_TYPE=EXCLUSIVE mean the case would run exclusively
# RUN_TYPE=DIST mean the case would take two graph GPUs during runtime
is_exclusive=$(echo "$line"|grep -oEi "RUN_TYPE=EXCLUSIVE")
is_multicard=$(echo "$line"|grep -oEi "RUN_TYPE=DIST")
continue
fi
testcase=$(echo "$line"|grep -oEi "\w+$")
if [[ "$testcase" == "simple_precision_test" ]]; then
continue
fi
if [[ "$is_multicard" == "" ]]; then
# trick: treat all test case with prefix "test_dist" as dist case, and would run on 2 GPUs
is_multicard=$(echo "$testcase"|grep -oEi "test_dist_")
fi
if [[ "$is_exclusive" != "" ]]; then
if [[ "$exclusive_tests" == "" ]]; then
exclusive_tests="^$testcase$"
else
exclusive_tests="$exclusive_tests|^$testcase$"
fi
elif [[ "$is_multicard" != "" ]]; then
if [[ "$multiple_card_tests" == "" ]]; then
multiple_card_tests="^$testcase$"
else
multiple_card_tests="$multiple_card_tests|^$testcase$"
fi
else
single_card_test_num=$(($single_card_test_num+1))
if [[ $single_card_test_num -gt 1000 ]];then
if [[ "$single_card_tests_1" == "" ]]; then
single_card_tests_1="^$testcase$"
else
single_card_tests_1="$single_card_tests_1|^$testcase$"
fi
continue
fi
if [[ "$single_card_tests" == "" ]]; then
single_card_tests="^$testcase$"
else
single_card_tests="$single_card_tests|^$testcase$"
fi
fi
is_exclusive=''
is_multicard=''
is_nightly=''
matchstr=''
testcase=''
done <<< "$test_cases";
set -x
mkdir -p ${PADDLE_ROOT}/build/ut_map
mkdir -p ${PADDLE_ROOT}/build/pytest
#get disabled tests,not run these disabled ut
get_quickly_disable_ut||disable_ut_quickly='disable_ut'
# run all unittest to get the coverage information of .c and .h files
precise_card_test_single "^simple_precision_test$" 1
wait;
precise_card_test_single "$single_card_tests" 1
wait;
precise_card_test_single "$single_card_tests_1" 1
precise_card_test_single "$multiple_card_tests" 2
precise_card_test_single "$exclusive_tests"
wait;
#get notSuccessut including the failed uniitests and not executed unittests
python ${PADDLE_ROOT}/tools/get_ut_file_map.py 'get_not_success_ut' ${PADDLE_ROOT}
#rerun the notSuccessut and get the mapping between notSuccessut and .cu files
get_failedUts_precise_map_file
#analyze the mapping between unit tests and .cu files
python ${PADDLE_ROOT}/tools/handle_h_cu_file.py 'analy_h_cu_file' $tmp_dir ${PADDLE_ROOT}
wait;
#generate python coverage and generate python file to tests_map_file
python ${PADDLE_ROOT}/tools/pyCov_multithreading.py ${PADDLE_ROOT}
wait;
#generate ut file map
python ${PADDLE_ROOT}/tools/get_ut_file_map.py 'get_ut_map' ${PADDLE_ROOT}
}
function get_parallel_tests_map_file {
cd ${PADDLE_ROOT}/build
pip install ${PADDLE_ROOT}/build/python/dist/*whl
ut_total_startTime_s=`date +%s`
EXIT_CODE=0;
test_cases=$(ctest -N -V) # get all test cases
single_card_tests='' # all cases list which would take one graph card
exclusive_tests='' # cases list which would be run exclusively
multiple_card_tests='' # cases list which would take multiple GPUs, most cases would be two GPUs
is_exclusive='' # indicate whether the case is exclusive type
is_multicard='' # indicate whether the case is multiple GPUs type
single_card_test_num=0
set +x
while read -r line; do
if [[ "$line" == "" ]]; then
continue
fi
matchstr="$(echo $line|grep -oEi 'Test[ \t]+#')" || true
if [[ "$matchstr" == "" ]]; then
# Any test case with LABELS property would be parse here
# RUN_TYPE=EXCLUSIVE mean the case would run exclusively
# RUN_TYPE=DIST mean the case would take two graph GPUs during runtime
is_exclusive=$(echo "$line"|grep -oEi "RUN_TYPE=EXCLUSIVE")
is_multicard=$(echo "$line"|grep -oEi "RUN_TYPE=DIST")
continue
fi
testcase=$(echo "$line"|grep -oEi "\w+$")
if [[ "$is_multicard" == "" ]]; then
# trick: treat all test case with prefix "test_dist" as dist case, and would run on 2 GPUs
is_multicard=$(echo "$testcase"|grep -oEi "test_dist_")
fi
if [[ "$is_exclusive" != "" ]]; then
if [[ "$exclusive_tests" == "" ]]; then
exclusive_tests="^$testcase$"
else
exclusive_tests="$exclusive_tests|^$testcase$"
fi
elif [[ "$is_multicard" != "" ]]; then
if [[ "$multiple_card_tests" == "" ]]; then
multiple_card_tests="^$testcase$"
else
multiple_card_tests="$multiple_card_tests|^$testcase$"
fi
else
single_card_test_num=$(($single_card_test_num+1))
if [[ $single_card_test_num -gt 3000 ]];then
if [[ "$single_card_tests_1" == "" ]]; then
single_card_tests_1="^$testcase$"
else
single_card_tests_1="$single_card_tests_1|^$testcase$"
fi
continue
fi
if [[ "$single_card_tests" == "" ]]; then
single_card_tests="^$testcase$"
else
single_card_tests="$single_card_tests|^$testcase$"
fi
fi
is_exclusive=''
is_multicard=''
is_nightly=''
matchstr=''
testcase=''
done <<< "$test_cases";
set -x
mkdir -p ${PADDLE_ROOT}/build/ut_map
mkdir -p ${PADDLE_ROOT}/build/pytest
parallel_card_test_single "$single_card_tests" 1
parallel_card_test_single "$single_card_tests_1" 1
parallel_card_test_single "$multiple_card_tests" 2
parallel_card_test_single "$exclusive_tests"
wait;
#classify_case_by_cardNum
classify_case_by_cardNum
#generate ut mem map
python ${PADDLE_ROOT}/tools/get_ut_mem_map.py $tmp_dir
python ${PADDLE_ROOT}/tools/final_ut_parallel_rule.py ${PADDLE_ROOT}
}
function get_failedUts_precise_map_file {
if [[ -f "${PADDLE_ROOT}/build/utNotSuccess" ]]; then
rerun_tests=`cat ${PADDLE_ROOT}/build/utNotSuccess`
#remove pile to full h/cu file
precise_card_test_single "$rerun_tests"
wait;
fi
}
function parallel_test_base_gpups() {
mkdir -p ${PADDLE_ROOT}/build
cd ${PADDLE_ROOT}/build
if [ ${WITH_TESTING:-ON} == "ON" ] ; then
cat <<EOF
========================================
Running unit GpuPS tests ...
========================================
EOF
ut_startTime_s=`date +%s`
set +e
bash ${PADDLE_ROOT}/tools/gpups_test.sh
EXIT_CODE=$?
set -e
ut_endTime_s=`date +%s`
echo "GPUPS testCase Time: $[ $ut_endTime_s - $ut_startTime_s ]s"
if [[ "$EXIT_CODE" != "0" ]]; then
exit 8;
fi
fi
}
function parallel_test_base_xpu() {
mkdir -p ${PADDLE_ROOT}/build
cd ${PADDLE_ROOT}/build
if [ ${WITH_TESTING:-ON} == "ON" ] ; then
cat <<EOF
========================================
Running unit xpu tests ...
========================================
EOF
set +x
echo "Starting running xpu tests"
export XPU_OP_LIST_DIR=$tmp_dir
ut_startTime_s=`date +%s`
get_quickly_disable_ut||disable_ut_quickly='disable_ut' # indicate whether the case was in quickly disable list
get_multi_card_ut_list_for_xpu
test_cases=$(ctest -N -V -E "$disable_ut_quickly|$multi_card_ut_list_for_xpu") # cases list which would be run exclusively
echo "========================================="
echo "RAW test cases for XPU, already EXCLUDED disable_ut and multi_card:"
echo ${test_cases}
echo "========================================="
single_card_test_num=0
while read -r line; do
if [[ "$line" == "" ]]; then
continue
fi
matchstr=$(echo $line|grep -oEi 'Test[ \t]+#') || true
if [[ "$matchstr" == "" ]]; then
continue
fi
testcase=$(echo "$line"|grep -oEi "\w+$")
single_card_test_num=$(($single_card_test_num+1))
if [[ $single_card_test_num -gt 1200 ]]; then
# too many test cases in single set will lead to ctest "RegularExpression::compile(): Expression too big." error
# therefore use a new test set
if [[ "$single_card_tests_1" == "" ]]; then
single_card_tests_1="^$testcase$"
else
single_card_tests_1="$single_card_tests_1|^$testcase$"
fi
continue
fi
if [[ "$single_card_tests" == "" ]]; then
single_card_tests="^$testcase$"
else
single_card_tests="$single_card_tests|^$testcase$"
fi
done <<< "$test_cases";
echo "========================================="
echo "start to run XPU ut using single card, part 1:"
echo ${single_card_tests}
echo "========================================="
card_test "${single_card_tests}" 1 4
echo "========================================="
echo "start to run XPU ut using single card, part 2:"
echo ${single_card_tests_1}
echo "========================================="
card_test "${single_card_tests_1}" 1 4
echo "========================================="
echo "start to run XPU ut using multiple cards:"
echo ${multi_card_ut_list_for_xpu}
echo "========================================="
card_test "${multi_card_ut_list_for_xpu}" 2 1
failed_test_lists=''
collect_failed_tests
xputest_error=0
retry_unittests_record=''
retry_time=4
exec_times=0
exec_time_array=('first' 'second' 'third' 'fourth')
exec_retry_threshold=10
is_retry_execute=0
if [ -n "$failed_test_lists" ];then
xputest_error=1
need_retry_ut_str=$(echo "$failed_test_lists" | grep -oEi "\-.+\(" | sed 's/(//' | sed 's/- //' )
need_retry_ut_arr=(${need_retry_ut_str})
need_retry_ut_count=${#need_retry_ut_arr[@]}
retry_unittests=$(echo "$failed_test_lists" | grep -oEi "\-.+\(" | sed 's/(//' | sed 's/- //' )
if [ $need_retry_ut_count -lt $exec_retry_threshold ];then
while ( [ $exec_times -lt $retry_time ] )
do
set +e
retry_unittests_record="$retry_unittests_record$failed_test_lists"
failed_test_lists_ult=`echo "${failed_test_lists}"`
set -e
if [[ "${exec_times}" == "1" ]];then
if [[ "${failed_test_lists}" == "" ]];then
break
else
retry_unittests=$(echo "$failed_test_lists" | grep -oEi "\-.+\(" | sed 's/(//' | sed 's/- //' )
fi
fi
echo "========================================="
echo "This is the ${exec_time_array[$exec_times]} time to re-run"
echo "========================================="
echo "The following unittest will be re-run:"
echo "${retry_unittests}"
echo "========================================="
retry_unittests_regular=''
for line in ${retry_unittests[@]} ;
do
if [[ "$retry_unittests_regular" == "" ]];then
retry_unittests_regular="^$line$"
else
retry_unittests_regular="$retry_unittests_regular|^$line$"
fi
done
rm -f $tmp_dir/*
failed_test_lists=''
ctest -R "($retry_unittests_regular)" --output-on-failure -j $2 | tee $tmpfile
collect_failed_tests
exec_times=$[$exec_times+1]
done
else
# There are more than 10 failed unit tests, so no unit test retry
is_retry_execute=1
fi
fi
if [[ "$IF_KUNLUN3" == "ON" ]]; then
export FLAGS_enable_pir_api=0
#install paddlex
git clone --depth 1000 https://gitee.com/paddlepaddle/PaddleX.git
cd PaddleX
pip install -e .[base]
#install paddle x dependency
paddlex --install PaddleClas
#download paddle dataset
wget -q https://paddle-model-ecology.bj.bcebos.com/paddlex/data/cls_flowers_examples.tar -P ./dataset
tar -xf ./dataset/cls_flowers_examples.tar -C ./dataset/
#train Reset50
echo "Starting to train ResNet50 model..."
python main.py -c paddlex/configs/modules/image_classification/ResNet50.yaml \
-o Global.mode=train \
-o Global.dataset_dir=./dataset/cls_flowers_examples \
-o Global.output=resnet50_output \
-o Global.device="xpu:${CUDA_VISIBLE_DEVICES}"
echo "Training Resnet50 completed!"
#inference Reset50
echo "Starting to predict ResNet50 model..."
python main.py -c paddlex/configs/modules/image_classification/ResNet50.yaml \
-o Global.mode=predict \
-o Predict.model_dir="./resnet50_output/best_model/inference" \
-o Predict.input="https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_image_classification_001.jpg" \
-o Global.device="xpu:0"
echo "Predicting Resnet50 completed!"
cd ..
export FLAGS_enable_pir_api=1
fi
set -x
ut_endTime_s=`date +%s`
echo "XPU testCase Time: $[ $ut_endTime_s - $ut_startTime_s ]s"
python ${PADDLE_ROOT}/build/test/xpu/get_test_cover_info.py
unset XPU_OP_LIST_DIR
if [ "$xputest_error" != 0 ];then
show_ut_retry_result
fi
fi
}
function parallel_test_base_cinn() {
if [ ${WITH_TESTING:-ON} == "ON" ] ; then
cat <<EOF
========================================
Running unit cinn tests ...
========================================
EOF
set +x
ut_startTime_s=`date +%s`
test_cases=$(ctest -N -V) # get all test cases
get_quickly_disable_ut||disable_ut_quickly='disable_ut' # indicate whether the case was in quickly disable list
while read -r line; do
if [[ "$line" == "" ]]; then
continue
fi
matchstr=$(echo $line|grep -oEi 'Test[ \t]+#') || true
if [[ "$matchstr" == "" ]]; then
# Any test case with LABELS property would be parse here
# RUN_TYPE=CINN mean the case would run in CINN CI.
is_cinn=$(echo "$line"|grep -oEi "RUN_TYPE=CINN") || true
continue
fi
testcase=$(echo "$line"|grep -oEi "\w+$")
if [[ "$is_cinn" != "" ]]; then
if [[ "$single_card_tests" == "" ]]; then
single_card_tests="^$testcase$"
else
single_card_tests="$single_card_tests|^$testcase$"
fi
fi
is_cinn=''
matchstr=''
testcase=''
done <<< "$test_cases";
ut_actual_total_startTime_s=`date +%s`
card_test "$single_card_tests" 1
collect_failed_tests
# add unit test retry for CINN
rm -f $tmp_dir/*
exec_times=0
retry_unittests_record=''
retry_time=4
exec_time_array=('first' 'second' 'third' 'fourth')
parallel_failed_tests_exec_retry_threshold=120
exec_retry_threshold=30
is_retry_execute=0
rerun_ut_startTime_s=`date +%s`
if [ -n "$failed_test_lists" ];then
need_retry_ut_str=$(echo "$failed_test_lists" | grep -oEi "\-.+\(.+\)" | sed 's/(.\+)//' | sed 's/- //' )
need_retry_ut_arr=(${need_retry_ut_str})
need_retry_ut_count=${#need_retry_ut_arr[@]}
retry_unittests=$(echo "$failed_test_lists" | grep -oEi "\-.+\(.+\)" | sed 's/(.\+)//' | sed 's/- //' )
while ( [ $exec_times -lt $retry_time ] )
do
if [[ "${exec_times}" == "0" ]] ;then
if [ $need_retry_ut_count -lt $parallel_failed_tests_exec_retry_threshold ];then
is_retry_execute=0
else
is_retry_execute=1
fi
elif [[ "${exec_times}" == "1" ]] ;then
need_retry_ut_str=$(echo "$failed_test_lists" | grep -oEi "\-.+\(.+\)" | sed 's/(.\+)//' | sed 's/- //' )
need_retry_ut_arr=(${need_retry_ut_str})
need_retry_ut_count=${#need_retry_ut_arr[@]}
if [ $need_retry_ut_count -lt $exec_retry_threshold ];then
is_retry_execute=0
else
is_retry_execute=1
fi
fi
if [[ "$is_retry_execute" == "0" ]];then
set +e
retry_unittests_record="$retry_unittests_record$failed_test_lists"
failed_test_lists_ult=`echo "${failed_test_lists}" |grep -Po '[^ ].*$'`
set -e
if [[ "${exec_times}" == "1" ]] || [[ "${exec_times}" == "3" ]];then
if [[ "${failed_test_lists}" == "" ]];then
break
else
retry_unittests=$(echo "$failed_test_lists" | grep -oEi "\-.+\(.+\)" | sed 's/(.\+)//' | sed 's/- //' )
fi
fi
echo "========================================="
echo "This is the ${exec_time_array[$exec_times]} time to re-run"
echo "========================================="
echo "The following unittest will be re-run:"
echo "${retry_unittests}"
for line in ${retry_unittests[@]} ;
do
tmp_one_tmp="$( echo $single_card_tests | grep -oEi $line )"
if [[ "$tmp_one_tmp" != "" ]]; then
if [[ "$one_card_retry" == "" ]]; then
one_card_retry="^$line$"
else
one_card_retry="$one_card_retry|^$line$"
fi
fi
done
if [[ "$one_card_retry" != "" ]]; then
card_test "$one_card_retry" 1 # run cases 1 job each time with single GPU
fi
exec_times=$[$exec_times+1]
failed_test_lists=''
collect_failed_tests
rm -f $tmp_dir/*
one_card_retry=''
else
break
fi
done
fi
rerun_ut_endTime_s=`date +%s`
echo "ipipe_log_param_Rerun_TestCases_Total_Time: $[ $rerun_ut_endTime_s - $rerun_ut_startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
ut_actual_total_endTime_s=`date +%s`
echo "ipipe_log_param_actual_TestCases_Total_Time: $[ $ut_actual_total_endTime_s - $ut_actual_total_startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
if [[ "$EXIT_CODE" != "0" ]]; then
show_ut_retry_result
fi
fi
}
function parallel_test_base_hybrid() {
if [ ${WITH_TESTING:-ON} == "ON" ] ; then
cat <<EOF
========================================
Running unit hybrid tests ...
========================================
EOF
set +x
ut_startTime_s=`date +%s`
test_cases=$(ctest -N -V) # get all test cases
get_quickly_disable_ut||disable_ut_quickly='disable_ut' # indicate whether the case was in quickly disable list
while read -r line; do
if [[ "$line" == "" ]]; then
continue
fi
matchstr=$(echo $line|grep -oEi 'Test[ \t]+#') || true
if [[ "$matchstr" == "" ]]; then
# Any test case with LABELS property would be parse here
# RUN_TYPE=HYBRID mean the case would run in HYBRID CI.
is_hybrid=$(echo "$line"|grep -oEi "RUN_TYPE=HYBRID") || true
continue
fi
testcase=$(echo "$line"|grep -oEi "\w+$")
if [[ "$is_hybrid" != "" ]]; then
if [[ "$eight_cards_tests" == "" ]]; then
eight_cards_tests="^$testcase$"
else
eight_cards_tests="$eight_cards_tests|^$testcase$"
fi
fi
is_hybrid=''
matchstr=''
testcase=''
done <<< "$test_cases";
card_test "$eight_cards_tests" -1 1
set -x
ut_endTime_s=`date +%s`
echo "HYBRID testCase Time: $[ $ut_endTime_s - $ut_startTime_s ]s"
if [[ "$EXIT_CODE" != "0" ]]; then
rm -f $tmp_dir/*
echo "Summary Failed Tests... "
echo "========================================"
echo "The following tests FAILED: "
echo "${failuretest}" | sort -u
exit 8;
fi
fi
}
function hybrid_paddlex() {
# PaddleX test
export DEVICE=($(echo $HIP_VISIBLE_DEVICES | tr "," "\n"))
export DCU_DEVICES=`echo $HIP_VISIBLE_DEVICES`
unset HIP_VISIBLE_DEVICES
git clone --depth=1000 https://gitee.com/paddlepaddle/PaddleX.git
cd PaddleX
pip install -e .[base]
paddlex --install PaddleClas
paddlex --install PaddleSeg
wget -q https://paddle-model-ecology.bj.bcebos.com/paddlex/data/cls_flowers_examples.tar -P ./dataset
tar -xf ./dataset/cls_flowers_examples.tar -C ./dataset/
wget https://paddle-model-ecology.bj.bcebos.com/paddlex/data/seg_optic_examples.tar -P ./dataset
tar -xf ./dataset/seg_optic_examples.tar -C ./dataset/
# train Reset50
echo "Start Reset50"
python main.py -c paddlex/configs/modules/image_classification/ResNet50.yaml \
-o Global.mode=train \
-o Global.dataset_dir=./dataset/cls_flowers_examples \
-o Global.output=resnet50_output \
-o Global.device="dcu:${DCU_DEVICES}" \
-o Train.epochs_iters=2
# inference Reset50
python main.py -c paddlex/configs/modules/image_classification/ResNet50.yaml \
-o Global.mode=predict \
-o Predict.model_dir="./resnet50_output/best_model/inference" \
-o Global.device="dcu:${DEVICE[0]}"
echo "End Reset50"
echo "Start DeepLabv3+"
# train DeepLabv3+
python main.py -c paddlex/configs/modules/semantic_segmentation/Deeplabv3_Plus-R50.yaml \
-o Global.mode=train \
-o Global.dataset_dir=./dataset/seg_optic_examples \
-o Global.output=deeplabv3p_output \
-o Global.device="dcu:${DCU_DEVICES}" \
-o Train.epochs_iters=2
# inference DeepLabv3+
python main.py -c paddlex/configs/modules/semantic_segmentation/Deeplabv3_Plus-R50.yaml \
-o Global.mode=predict \
-o Predict.model_dir="./deeplabv3p_output/best_model/inference" \
-o Global.device="dcu:${DEVICE[0]}"
echo "End DeepLabv3+"
}
function parallel_fa_unit() {
if [ ${WITH_TESTING:-ON} == "ON" ] ; then
cat <<EOF
========================================
Running FA unit tests in parallel way ...
========================================
EOF
fi
local parallel_list
parallel_list="^test_block_multihead_attention$|\
^test_fused_weight_only_linear_pass$|\
^test_block_multihead_attention_gqa$|\
^test_fused_flash_attn_pass$|\
^test_fused_multi_transformer_op$|\
^test_fused_multi_transformer_int8_op$|\
^test_flash_attention$|\
^test_flash_attention_deterministic$|\
^test_flashmask$|\
^test_fused_gate_attention_op$"
get_quickly_disable_ut||disable_ut_quickly='disable_ut'
card_test "${parallel_list}" 1
collect_failed_tests
rm -f $tmp_dir/*
if [ -n "$failed_test_lists" ];then
echo "Sorry, some FA tests failed."
collect_failed_tests
echo "Summary Failed Tests... "
echo "========================================"
echo "The following tests FAILED: "
echo "${failed_test_lists}"| sort -u
exit 8
fi
}
function parallel_test_base_gpu_test() {
if [ ${WITH_TESTING:-ON} == "ON" ] ; then
cat <<EOF
========================================
Running unit tests in parallel way ...
========================================
EOF
set -x
# set trt_convert ut to run 15% cases.
export TEST_NUM_PERCENT_CASES=0.15
export FLAGS_trt_ibuilder_cache=1
precision_cases=""
#check change of pr_unittests and dev_unittests
check_approvals_of_unittest 2
ctest -N | awk -F ': ' '{print $2}' | sed '/^$/d' | sed '$d' > ${PADDLE_ROOT}/build/all_ut_list
if [ ${PRECISION_TEST:-OFF} == "ON" ]; then
python $PADDLE_ROOT/tools/get_pr_ut.py
fi
if [ -a "$PADDLE_ROOT/duplicate_ut" ];then
duplicate_uts=$(cat $PADDLE_ROOT/duplicate_ut|sed -e 's/\r//g')
if [[ "$duplicate_uts" != "" ]];then
set +x
echo "========================================"
echo "The new unit test has the same name as the existing unit test"
cat "$PADDLE_ROOT/duplicate_ut"
echo "========================================"
exit 102;
set -x
fi
fi
if [ -a "$PADDLE_ROOT/added_ut" ];then
added_uts=^$(awk BEGIN{RS=EOF}'{gsub(/\n/,"$|^");print}' $PADDLE_ROOT/added_ut)$
if [ "$WITH_ROCM" == "ON" ];then
env HIP_VISIBLE_DEVICES=0 ctest -R "(${added_uts})" -LE "RUN_TYPE=DIST|RUN_TYPE=EXCLUSIVE|RUN_TYPE=HYBRID" --output-on-failure --repeat-until-fail 3 --timeout 20;added_ut_error=$?
else
env CUDA_VISIBLE_DEVICES=0 ctest -R "(${added_uts})" -LE "RUN_TYPE=DIST|RUN_TYPE=EXCLUSIVE|RUN_TYPE=HYBRID" --output-on-failure --repeat-until-fail 3 --timeout 20;added_ut_error=$?
fi
ctest -R "(${added_uts})" -L "RUN_TYPE=DIST|RUN_TYPE=EXCLUSIVE" --output-on-failure --repeat-until-fail 3 --timeout 20;added_ut_error_1=$?
if [ "$added_ut_error" != 0 ] && [ "$added_ut_error_1" != 0 ];then
echo "========================================"
echo "Added UT should not exceed 20 seconds"
echo "========================================"
exit 8;
fi
fi
set +x
EXIT_CODE=0;
wget --no-proxy https://paddle-docker-tar.bj.bcebos.com/pre_test/CTestCostData.txt --no-check-certificate
mkdir -p ${PADDLE_ROOT}/build/Testing/Temporary/
cp -r ${PADDLE_ROOT}/build/CTestCostData.txt ${PADDLE_ROOT}/build/Testing/Temporary/
get_quickly_disable_ut||disable_ut_quickly='disable_ut' # indicate whether the case was in quickly disable list
test_cases=$(ctest -N -V) # get all test cases
if [ ${WITH_CINN:-OFF} == "ON" ]; then
pushd ${PADDLE_ROOT}/build/paddle/cinn
ctest -N -E "test_frontend_interpreter" | awk -F ': ' '{print $2}' | sed '/^$/d' | sed '$d' > ${PADDLE_ROOT}/build/pr_ci_cinn_gpu_ut_list
popd
pushd ${PADDLE_ROOT}/build/test/cpp/cinn # Note: Some tests have been moved to test/cpp/cinn.
ctest -N -E "test_frontend_interpreter" | awk -F ': ' '{print $2}' | sed '/^$/d' | sed '$d' >> ${PADDLE_ROOT}/build/pr_ci_cinn_gpu_ut_list
popd
ctest -N -L "RUN_TYPE=CINN" | awk -F ': ' '{print $2}' | sed '/^$/d' | sed '$d' > ${PADDLE_ROOT}/build/pr_ci_cinn_ut_list
echo "========================================"
echo "pr_ci_cinn_ut_list: "
cat ${PADDLE_ROOT}/build/pr_ci_cinn_ut_list
echo "========================================"
echo "pr_ci_cinn_gpu_ut_list: "
cat ${PADDLE_ROOT}/build/pr_ci_cinn_gpu_ut_list
echo "========================================"
fi
python ${PADDLE_ROOT}/tools/group_case_for_parallel.py ${PADDLE_ROOT}
if [ ${WITH_CINN=-OFF} == "ON" ]; then
run_cinn_ut=`check_cinn_file_diff`
if [[ "OFF" == ${run_cinn_ut} ]]; then
echo "No CINN-related changes were found"
echo "Skip PR-CI-CINN-GPU UT CI"
else
# run pr-ci-cinn-gpu ut
cinn_gpu_ut_startTime_s=`date +%s`
while read line
do
card_test "$line" 1
done < $PADDLE_ROOT/tools/new_pr_ci_cinn_gpu_ut_list
cinn_gpu_ut_endTime_s=`date +%s`
echo "ipipe_log_param_cinn_gpu_TestCases_Total_Time: $[ $cinn_gpu_ut_endTime_s - $cinn_gpu_ut_startTime_s ]s"
echo "ipipe_log_param_cinn_gpu_TestCases_Total_Time: $[ $cinn_gpu_ut_endTime_s - $cinn_gpu_ut_startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
fi
# run pr-ci-cinn ut
cinn_ut_startTime_s=`date +%s`
while read line
do
card_test "$line" 1
done < $PADDLE_ROOT/tools/new_pr_ci_cinn_ut_list
cinn_ut_endTime_s=`date +%s`
echo "ipipe_log_param_cinn_TestCases_Total_Time: $[ $cinn_ut_endTime_s - $cinn_ut_startTime_s ]s"
echo "ipipe_log_param_cinn_TestCases_Total_Time: $[ $cinn_ut_endTime_s - $cinn_ut_startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
fi
single_ut_mem_0_startTime_s=`date +%s`
while read line
do
card_test "$line" 1 4
done < $PADDLE_ROOT/tools/single_card_tests_mem0_new
single_ut_mem_0_endTime_s=`date +%s`
echo "ipipe_log_param_1_mem_0_TestCases_Total_Time: $[ $single_ut_mem_0_endTime_s - $single_ut_mem_0_startTime_s ]s"
echo "ipipe_log_param_1_mem_0_TestCases_Total_Time: $[ $single_ut_mem_0_endTime_s - $single_ut_mem_0_startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
single_ut_startTime_s=`date +%s`
while read line
do
num=$[(`echo $line | awk -F"$" '{print NF-1}'`-1)/6]
if [ $num -eq 0 ]; then
num=1
fi
card_test "$line" 1 $num
done < $PADDLE_ROOT/tools/single_card_tests_new
single_ut_endTime_s=`date +%s`
echo "ipipe_log_param_1_TestCases_Total_Time: $[ $single_ut_endTime_s - $single_ut_startTime_s ]s"
echo "ipipe_log_param_1_TestCases_Total_Time: $[ $single_ut_endTime_s - $single_ut_startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
multiple_ut_mem_0_startTime_s=`date +%s`
while read line
do
card_test "$line" 2 4
done < $PADDLE_ROOT/tools/multiple_card_tests_mem0_new
multiple_ut_mem_0_endTime_s=`date +%s`
echo "ipipe_log_param_2_mem0_TestCases_Total_Time: $[ $multiple_ut_mem_0_endTime_s - $multiple_ut_mem_0_startTime_s ]s"
echo "ipipe_log_param_2_mem0_TestCases_Total_Time: $[ $multiple_ut_mem_0_endTime_s - $multiple_ut_mem_0_startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
multiple_ut_startTime_s=`date +%s`
while read line
do
num=$[(`echo $line | awk -F"$" '{print NF-1}'`-1)/6]
if [ $num -eq 0 ]; then
num=1
fi
card_test "$line" 2 $num
done < $PADDLE_ROOT/tools/multiple_card_tests_new
multiple_ut_endTime_s=`date +%s`
echo "ipipe_log_param_2_TestCases_Total_Time: $[ $multiple_ut_endTime_s - $multiple_ut_startTime_s ]s"
echo "ipipe_log_param_2_TestCases_Total_Time: $[ $multiple_ut_endTime_s - $multiple_ut_startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
exclusive_ut_mem_0_startTime_s=`date +%s`
while read line
do
card_test "$line" -1 4
done < $PADDLE_ROOT/tools/exclusive_card_tests_mem0_new
exclusive_ut_mem_0_endTime_s=`date +%s`
echo "ipipe_log_param_-1_mem0_TestCases_Total_Time: $[ $exclusive_ut_mem_0_endTime_s - $exclusive_ut_mem_0_startTime_s ]s"
echo "ipipe_log_param_-1_mem0_TestCases_Total_Time: $[ $exclusive_ut_mem_0_endTime_s - $exclusive_ut_mem_0_startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
exclusive_ut_startTime_s=`date +%s`
while read line
do
num=$[(`echo $line | awk -F"$" '{print NF-1}'`-1)/6]
if [ $num -eq 0 ]; then
num=1
fi
card_test "$line" -1 $num
done < $PADDLE_ROOT/tools/exclusive_card_tests_new
exclusive_ut_endTime_s=`date +%s`
echo "ipipe_log_param_-1_TestCases_Total_Time: $[ $exclusive_ut_endTime_s - $exclusive_ut_startTime_s ]s"
echo "ipipe_log_param_-1_TestCases_Total_Time: $[ $exclusive_ut_endTime_s - $exclusive_ut_startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
noparallel_ut_startTime_s=`date +%s`
while read line
do
card_test "$line" -1 4
done < $PADDLE_ROOT/tools/no_parallel_case_file
noparallel_ut_endTime_s=`date +%s`
echo "ipipe_log_param_noparallel_TestCases_Total_Time: $[ $noparallel_ut_endTime_s - $noparallel_ut_startTime_s ]s"
echo "ipipe_log_param_noparallel_TestCases_Total_Time: $[ $noparallel_ut_endTime_s - $noparallel_ut_startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
###retry
collect_failed_tests
rm -f $tmp_dir/*
exec_times=0
retry_unittests_record=''
retry_time=4
exec_time_array=('first' 'second' 'third' 'fourth')
parallel_failed_tests_exec_retry_threshold=120
exec_retry_threshold=30
is_retry_execute=0
rerun_ut_startTime_s=`date +%s`
if [ -n "$failed_test_lists" ];then
if [ ${TIMEOUT_DEBUG_HELP:-OFF} == "ON" ];then
bash $PADDLE_ROOT/tools/timeout_debug_help.sh "$failed_test_lists" # cat logs for timeout uts which killed by ctest
fi
need_retry_ut_str=$(echo "$failed_test_lists" | grep -oEi "\-.+\(.+\)" | sed 's/(.\+)//' | sed 's/- //' )
need_retry_ut_arr=(${need_retry_ut_str})
need_retry_ut_count=${#need_retry_ut_arr[@]}
retry_unittests=$(echo "$failed_test_lists" | grep -oEi "\-.+\(.+\)" | sed 's/(.\+)//' | sed 's/- //' )
while ( [ $exec_times -lt $retry_time ] )
do
if [[ "${exec_times}" == "0" ]] ;then
if [ $need_retry_ut_count -lt $parallel_failed_tests_exec_retry_threshold ];then
is_retry_execute=0
else
is_retry_execute=1
fi
elif [[ "${exec_times}" == "1" ]] ;then
need_retry_ut_str=$(echo "$failed_test_lists" | grep -oEi "\-.+\(.+\)" | sed 's/(.\+)//' | sed 's/- //' )
need_retry_ut_arr=(${need_retry_ut_str})
need_retry_ut_count=${#need_retry_ut_arr[@]}
if [ $need_retry_ut_count -lt $exec_retry_threshold ];then
is_retry_execute=0
else
is_retry_execute=1
fi
fi
if [[ "$is_retry_execute" == "0" ]];then
set +e
retry_unittests_record="$retry_unittests_record$failed_test_lists"
failed_test_lists_ult=`echo "${failed_test_lists}" |grep -Po '[^ ].*$'`
set -e
if [[ "${exec_times}" == "1" ]] || [[ "${exec_times}" == "2" ]];then
if [[ "${failed_test_lists}" == "" ]];then
break
else
retry_unittests=$(echo "$failed_test_lists" | grep -oEi "\-.+\(.+\)" | sed 's/(.\+)//' | sed 's/- //' )
fi
fi
echo "========================================="
echo "This is the ${exec_time_array[$exec_times]} time to re-run"
echo "========================================="
echo "The following unittest will be re-run:"
echo "${retry_unittests}"
for line in ${retry_unittests[@]} ;
do
if [[ "$retry_cases" == "" ]]; then
retry_cases="^$line$"
else
retry_cases="$retry_cases|^$line$"
fi
done
if [[ "$retry_cases" != "" ]]; then
# re-run test run 1 job
export CTEST_PARALLEL_LEVEL=1
card_test "$retry_cases" -1 1
fi
exec_times=$[$exec_times+1]
failed_test_lists=''
collect_failed_tests
rm -f $tmp_dir/*
retry_cases=''
else
break
fi
done
retry_unittests_record="$retry_unittests_record$failed_test_lists"
fi
rerun_ut_endTime_s=`date +%s`
echo "ipipe_log_param_Rerun_TestCases_Total_Time: $[ $rerun_ut_endTime_s - $rerun_ut_startTime_s ]s"
echo "ipipe_log_param_Rerun_TestCases_Total_Time: $[ $rerun_ut_endTime_s - $rerun_ut_startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
if [ "$WITH_ROCM" != "ON" ];then
cp $PADDLE_ROOT/build/Testing/Temporary/CTestCostData.txt ${cfs_dir}/coverage/${AGILE_PULL_ID}/${AGILE_REVISION}/
fi
if [[ "$EXIT_CODE" != "0" ]]; then
show_ut_retry_result
fi
set -ex
fi
}
function parallel_test_base_ipu() {
mkdir -p ${PADDLE_ROOT}/build
cd ${PADDLE_ROOT}/build/python/paddle/base/tests/unittests/ipu
if [ ${WITH_TESTING:-ON} == "ON" ] ; then
cat <<EOF
========================================
Running unit ipu tests ...
========================================
EOF
set +x
test_cases=$(ctest -N -V) # get all test cases
get_quickly_disable_ut||disable_ut_quickly='disable_ut' # indicate whether the case was in quickly disable list
while read -r line; do
if [[ "$line" == "" ]]; then
continue
fi
testcase=$(echo "$line"|grep -oEi "\w+$")
if [[ "$single_card_tests" == "" ]]; then
single_card_tests="^$testcase$"
else
single_card_tests="$single_card_tests|^$testcase$"
fi
done <<< "$test_cases";
ut_actual_total_startTime_s=`date +%s`
card_test "$single_card_tests" 1 # run cases 1 job each time with single IPU
collect_failed_tests
# add unit test retry for IPU
rm -f $tmp_dir/*
exec_times=0
retry_unittests_record=''
retry_time=4
exec_time_array=('first' 'second' 'third' 'fourth')
parallel_failed_tests_exec_retry_threshold=120
exec_retry_threshold=30
is_retry_execute=0
rerun_ut_startTime_s=`date +%s`
if [ -n "$failed_test_lists" ];then
if [ ${TIMEOUT_DEBUG_HELP:-OFF} == "ON" ];then
bash $PADDLE_ROOT/tools/timeout_debug_help.sh "$failed_test_lists" # cat logs for timeout uts which killed by ctest
fi
need_retry_ut_str=$(echo "$failed_test_lists" | grep -oEi "\-.+\(.+\)" | sed 's/(.\+)//' | sed 's/- //' )
need_retry_ut_arr=(${need_retry_ut_str})
need_retry_ut_count=${#need_retry_ut_arr[@]}
retry_unittests=$(echo "$failed_test_lists" | grep -oEi "\-.+\(.+\)" | sed 's/(.\+)//' | sed 's/- //' )
while ( [ $exec_times -lt $retry_time ] )
do
if [[ "${exec_times}" == "0" ]] ;then
if [ $need_retry_ut_count -lt $parallel_failed_tests_exec_retry_threshold ];then
is_retry_execute=0
else
is_retry_execute=1
fi
elif [[ "${exec_times}" == "1" ]] ;then
need_retry_ut_str=$(echo "$failed_test_lists" | grep -oEi "\-.+\(.+\)" | sed 's/(.\+)//' | sed 's/- //' )
need_retry_ut_arr=(${need_retry_ut_str})
need_retry_ut_count=${#need_retry_ut_arr[@]}
if [ $need_retry_ut_count -lt $exec_retry_threshold ];then
is_retry_execute=0
else
is_retry_execute=1
fi
fi
if [[ "$is_retry_execute" == "0" ]];then
set +e
retry_unittests_record="$retry_unittests_record$failed_test_lists"
failed_test_lists_ult=`echo "${failed_test_lists}" |grep -Po '[^ ].*$'`
set -e
if [[ "${exec_times}" == "1" ]] || [[ "${exec_times}" == "3" ]];then
if [[ "${failed_test_lists}" == "" ]];then
break
else
retry_unittests=$(echo "$failed_test_lists" | grep -oEi "\-.+\(.+\)" | sed 's/(.\+)//' | sed 's/- //' )
fi
fi
echo "========================================="
echo "This is the ${exec_time_array[$exec_times]} time to re-run"
echo "========================================="
echo "The following unittest will be re-run:"
echo "${retry_unittests}"
for line in ${retry_unittests[@]} ;
do
tmp_one_tmp="$( echo $single_card_tests | grep -oEi $line )"
if [[ "$tmp_one_tmp" != "" ]]; then
if [[ "$one_card_retry" == "" ]]; then
one_card_retry="^$line$"
else
one_card_retry="$one_card_retry|^$line$"
fi
fi
done
if [[ "$one_card_retry" != "" ]]; then
card_test "$one_card_retry" 1 # run cases 1 job each time with single GPU
fi
exec_times=$[$exec_times+1]
failed_test_lists=''
collect_failed_tests
rm -f $tmp_dir/*
one_card_retry=''
else
break
fi
done
fi
rerun_ut_endTime_s=`date +%s`
echo "ipipe_log_param_Rerun_TestCases_Total_Time: $[ $rerun_ut_endTime_s - $rerun_ut_startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
ut_actual_total_endTime_s=`date +%s`
echo "ipipe_log_param_actual_TestCases_Total_Time: $[ $ut_actual_total_endTime_s - $ut_actual_total_startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
if [[ "$EXIT_CODE" != "0" ]]; then
show_ut_retry_result
fi
set -ex
fi
}
function is_run_distribute_in_op_test() {
DISTRIBUTE_FILES=("python/paddle/distributed"
"python/phi/infermeta/spmd_rules"
"paddle/phi/core/distributed")
cd ${PADDLE_ROOT}
for DISTRIBUTE_FILE in ${DISTRIBUTE_FILES[*]}; do
DISTRIBUTE_CHANGE=`git diff --name-only upstream/$BRANCH | grep -F "${DISTRIBUTE_FILE}"|| true`
if [ "${DISTRIBUTE_CHANGE}" ] && [ "${GIT_PR_ID}" != "" ]; then
export FLAGS_COVERAGE_RUN_AUTO_PARALLEL_IN_OP_TEST=1
fi
done
ALL_CHANGE_FILES=$(git diff --name-only upstream/$BRANCH | grep ".py"|| true)
echo ${ALL_CHANGE_FILES}
for CHANGE_FILE in ${ALL_CHANGE_FILES}; do
TARGET_FILE="${PADDLE_ROOT}/${CHANGE_FILE}"
if [ ! -f "$TARGET_FILE" ]; then
continue
fi
ALL_OPTEST_BAN_AUTO_PARALLEL_TEST=`git diff -U0 upstream/$BRANCH -- "$TARGET_FILE" | grep "+" | grep "check_auto_parallel=" || true`
if [ "${ALL_OPTEST_BAN_AUTO_PARALLEL_TEST}" != "" ] && [ "${GIT_PR_ID}" != "" ]; then
export FLAGS_COVERAGE_RUN_AUTO_PARALLEL_IN_OP_TEST=1
fi
done
}
function parallel_test() {
mkdir -p ${PADDLE_ROOT}/build
cd ${PADDLE_ROOT}/build
pip install hypothesis
if ls ${PADDLE_ROOT}/build/python/dist/*whl >/dev/null 2>&1; then
pip install ${PADDLE_ROOT}/build/python/dist/*whl
fi
if ls ${PADDLE_ROOT}/dist/*whl >/dev/null 2>&1; then
pip install ${PADDLE_ROOT}/dist/*whl
fi
cp ${PADDLE_ROOT}/build/test/legacy_test/testsuite.py ${PADDLE_ROOT}/build/python
cp -r ${PADDLE_ROOT}/build/test/white_list ${PADDLE_ROOT}/build/python
run_hybrid_ci=${1:-"false"}
ut_total_startTime_s=`date +%s`
if [ "$run_hybrid_ci" == "true" ] && [ "$WITH_DISTRIBUTE" == "ON" ];then
if [ "$WITH_GPU" == "ON" ] || [ "$WITH_ROCM" == "ON" ];then
parallel_test_base_hybrid
else
echo "skip parallel_test_base_hybrid when compiling PaddlePaddle without NVIDIA GPU or ROCM platform"
fi
elif [ "$WITH_GPU" == "ON" ] || [ "$WITH_ROCM" == "ON" ];then
if [[ $CACHE_DIR =~ "cinn" ]];then
parallel_test_base_cinn
else
parallel_test_base_gpu_test
fi
elif [ "$WITH_XPU" == "ON" ];then
parallel_test_base_xpu
elif [ "$WITH_IPU" == "ON" ];then
parallel_test_base_ipu
else
parallel_test_base_cpu ${PROC_RUN:-1}
fi
ut_total_endTime_s=`date +%s`
echo "TestCases Total Time: $[ $ut_total_endTime_s - $ut_total_startTime_s ]s"
echo "ipipe_log_param_TestCases_Total_Time: $[ $ut_total_endTime_s - $ut_total_startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
}
function nv_test() {
export FLAGS_enable_cudnn_frontend=1
ctest -R "conv" --output-on-failure --timeout 150
}
function check_coverage_added_ut() {
# NOTE(risemeup1):The step of checking added test can be placed on the cpu machine to save gpu resources
bash $PADDLE_ROOT/tools/check_added_ut.sh
}
function gen_doc_lib() {
mkdir -p ${PADDLE_ROOT}/build
cd ${PADDLE_ROOT}/build
cat <<EOF
========================================
Building documentation library ...
In /paddle/build
========================================
EOF
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DWITH_GPU=OFF \
-DWITH_MKL=OFF \
local LIB_TYPE=$1
case $LIB_TYPE in
full)
# Build full Paddle Python module. Will timeout without caching 'copy_libpaddle' first
make -j `nproc` framework_py_proto copy_libpaddle paddle_python
;;
pybind)
# Build paddle pybind library. Takes 49 minutes to build. Might timeout
make -j `nproc` copy_libpaddle
;;
proto)
# Even smaller library.
make -j `nproc` framework_py_proto
;;
*)
exit 0
;;
esac
}
function gen_dockerfile() {
# Set BASE_IMAGE according to env variables
CUDA_MAJOR="$(echo $CUDA_VERSION | cut -d '.' -f 1).$(echo $CUDA_VERSION | cut -d '.' -f 2)"
CUDNN_MAJOR=$(echo $CUDNN_VERSION | cut -d '.' -f 1)
if [[ ${WITH_GPU} == "ON" ]]; then
BASE_IMAGE="nvidia/cuda:${CUDA_MAJOR}-cudnn${CUDNN_MAJOR}-devel-ubuntu16.04"
else
BASE_IMAGE="ubuntu:16.04"
fi
DOCKERFILE_GPU_ENV=""
DOCKERFILE_CUDNN_DSO=""
DOCKERFILE_CUBLAS_DSO=""
DOCKERFILE_CUBLASLT_DSO=""
if [[ ${WITH_GPU:-OFF} == 'ON' ]]; then
DOCKERFILE_GPU_ENV="ENV LD_LIBRARY_PATH /usr/lib/x86_64-linux-gnu:\${LD_LIBRARY_PATH}"
DOCKERFILE_CUDNN_DSO="RUN ln -sf /usr/lib/x86_64-linux-gnu/libcudnn.so.${CUDNN_MAJOR} /usr/lib/x86_64-linux-gnu/libcudnn.so"
DOCKERFILE_CUBLAS_DSO="RUN ln -sf /usr/local/cuda/targets/x86_64-linux/lib/libcublas.so.${CUDA_MAJOR} /usr/lib/x86_64-linux-gnu/libcublas.so"
DOCKERFILE_CUBLASLT_DSO="RUN ln -sf /usr/local/cuda/targets/x86_64-linux/lib/libcublasLt.so /usr/lib/x86_64-linux-gnu/libcublasLt.so"
fi
cat <<EOF
========================================
Generate ${PADDLE_ROOT}/build/Dockerfile ...
========================================
EOF
ref_CUDA_MAJOR="$(echo $CUDA_VERSION | cut -d '.' -f 1)"
if [[ ${WITH_GPU} == "ON" ]]; then
ref_gpu=gpu-cuda${ref_CUDA_MAJOR}-cudnn${CUDNN_MAJOR}
else
ref_gpu=cpu
fi
if [[ ${WITH_GPU} == "ON" ]]; then
install_gpu="_gpu"
else
install_gpu=""
fi
if [[ ${WITH_MKL} == "ON" ]]; then
ref_mkl=mkl
else
ref_mkl=openblas
fi
ref_web=https://paddle-wheel.bj.bcebos.com/${PADDLE_BRANCH}-${ref_gpu}-${ref_mkl}
ref_paddle38=paddlepaddle${install_gpu}-${PADDLE_BRANCH}-cp38-cp38-linux_x86_64.whl
ref_paddle39=paddlepaddle${install_gpu}-${PADDLE_BRANCH}-cp39-cp39-linux_x86_64.whl
ref_paddle310=paddlepaddle${install_gpu}-${PADDLE_BRANCH}-cp310-cp310-linux_x86_64.whl
ref_paddle311=paddlepaddle${install_gpu}-${PADDLE_BRANCH}-cp311-cp311-linux_x86_64.whl
ref_paddle312=paddlepaddle${install_gpu}-${PADDLE_BRANCH}-cp312-cp312-linux_x86_64.whl
ref_paddle38_whl=paddlepaddle${install_gpu}-${PADDLE_BRANCH}-cp38-cp38-linux_x86_64.whl
ref_paddle39_whl=paddlepaddle${install_gpu}-${PADDLE_BRANCH}-cp39-cp39-linux_x86_64.whl
ref_paddle310_whl=paddlepaddle${install_gpu}-${PADDLE_BRANCH}-cp310-cp310-linux_x86_64.whl
ref_paddle311_whl=paddlepaddle${install_gpu}-${PADDLE_BRANCH}-cp311-cp311-linux_x86_64.whl
ref_paddle312_whl=paddlepaddle${install_gpu}-${PADDLE_BRANCH}-cp312-cp312-linux_x86_64.whl
if [[ ${PADDLE_BRANCH} != "0.0.0" && ${WITH_MKL} == "ON" && ${WITH_GPU} == "ON" ]]; then
ref_paddle38=paddlepaddle${install_gpu}-${PADDLE_BRANCH}.post${ref_CUDA_MAJOR}${CUDNN_MAJOR}-cp38-cp38-linux_x86_64.whl
ref_paddle39=paddlepaddle${install_gpu}-${PADDLE_BRANCH}.post${ref_CUDA_MAJOR}${CUDNN_MAJOR}-cp39-cp39-linux_x86_64.whl
ref_paddle310=paddlepaddle${install_gpu}-${PADDLE_BRANCH}.post${ref_CUDA_MAJOR}${CUDNN_MAJOR}-cp310-cp310-linux_x86_64.whl
ref_paddle311=paddlepaddle${install_gpu}-${PADDLE_BRANCH}.post${ref_CUDA_MAJOR}${CUDNN_MAJOR}-cp311-cp311-linux_x86_64.whl
ref_paddle312=paddlepaddle${install_gpu}-${PADDLE_BRANCH}.post${ref_CUDA_MAJOR}${CUDNN_MAJOR}-cp312-cp312-linux_x86_64.whl
ref_paddle38_whl=paddlepaddle${install_gpu}-${PADDLE_BRANCH}.post${ref_CUDA_MAJOR}${CUDNN_MAJOR}-cp38-cp38-linux_x86_64.whl
ref_paddle39_whl=paddlepaddle${install_gpu}-${PADDLE_BRANCH}.post${ref_CUDA_MAJOR}${CUDNN_MAJOR}-cp39-cp39-linux_x86_64.whl
ref_paddle310_whl=paddlepaddle${install_gpu}-${PADDLE_BRANCH}.post${ref_CUDA_MAJOR}${CUDNN_MAJOR}-cp310-cp310-linux_x86_64.whl
ref_paddle311_whl=paddlepaddle${install_gpu}-${PADDLE_BRANCH}.post${ref_CUDA_MAJOR}${CUDNN_MAJOR}-cp311-cp311-linux_x86_64.whl
ref_paddle312_whl=paddlepaddle${install_gpu}-${PADDLE_BRANCH}.post${ref_CUDA_MAJOR}${CUDNN_MAJOR}-cp312-cp312-linux_x86_64.whl
fi
cat > ${PADDLE_ROOT}/build/Dockerfile <<EOF
FROM ${BASE_IMAGE}
MAINTAINER PaddlePaddle Authors <paddle-dev@baidu.com>
ENV HOME /root
EOF
if [[ ${WITH_GPU} == "ON" ]]; then
NCCL_DEPS="apt-get install -y --allow-downgrades --allow-change-held-packages libnccl2=2.4.7-1+cuda${CUDA_MAJOR} libnccl-dev=2.4.7-1+cuda${CUDA_MAJOR} || true"
else
NCCL_DEPS="true"
fi
if [[ ${WITH_GPU} == "ON" && ${CUDA_MAJOR} = "8.0" ]]; then
NCCL_DEPS="apt-get install -y --allow-downgrades --allow-change-held-packages libnccl2=2.2.13-1+cuda8.0 libnccl-dev=2.2.13-1+cuda8.0"
fi
PADDLE_VERSION="paddle version"
CMD='"paddle", "version"'
cat >> ${PADDLE_ROOT}/build/Dockerfile <<EOF
# run paddle version to install python packages first
RUN apt-get update && ${NCCL_DEPS}
RUN apt-get install -y wget libgtk2.0-dev dmidecode && \
apt-get install -f -y && \
apt-get clean -y && \
ldconfig
${DOCKERFILE_CUDNN_DSO}
${DOCKERFILE_CUBLAS_DSO}
${DOCKERFILE_CUBLASLT_DSO}
${DOCKERFILE_GPU_ENV}
EOF
cat >> ${PADDLE_ROOT}/build/Dockerfile <<EOF
# run paddle version to install python packages first
RUN apt-get update && ${NCCL_DEPS}
RUN apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev
RUN wget -q https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgz && \
tar -xzf Python-3.8.0.tgz && cd Python-3.8.0 && \
CFLAGS="-Wformat" ./configure --prefix=/usr/local/ --enable-shared > /dev/null && \
make -j8 > /dev/null && make altinstall > /dev/null && cd ../ && rm Python-3.8.0.tgz
RUN apt-get install -y libgtk2.0-dev dmidecode python3-tk && ldconfig && \
wget ${ref_web}/${ref_paddle38} && pip3.8 install ${ref_paddle38_whl}; apt-get install -f -y && \
apt-get clean -y && \
rm -f ${ref_paddle38} && \
ldconfig
EOF
cat >> ${PADDLE_ROOT}/build/Dockerfile <<EOF
# run paddle version to install python packages first
RUN apt-get update && ${NCCL_DEPS}
RUN apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev
RUN wget -q https://www.python.org/ftp/python/3.9.0/Python-3.9.0.tgz && \
tar -xzf Python-3.9.0.tgz && cd Python-3.9.0 && \
CFLAGS="-Wformat" ./configure --prefix=/usr/local/ --enable-shared > /dev/null && \
make -j8 > /dev/null && make altinstall > /dev/null && cd ../ && rm Python-3.9.0.tgz
RUN apt-get install -y libgtk2.0-dev dmidecode python3-tk && ldconfig && \
wget ${ref_web}/${ref_paddle39} && pip3.9 install ${ref_paddle39_whl}; apt-get install -f -y && \
apt-get clean -y && \
rm -f ${ref_paddle39} && \
ldconfig
EOF
cat >> ${PADDLE_ROOT}/build/Dockerfile <<EOF
# run paddle version to install python packages first
RUN apt-get update && ${NCCL_DEPS}
RUN apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev
RUN wget -q https://www.python.org/ftp/python/3.10.0/Python-3.10.0.tgz && \
tar -xzf Python-3.10.0.tgz && cd Python-3.10.0 && \
CFLAGS="-Wformat" ./configure --prefix=/usr/local/ --enable-shared > /dev/null && \
make -j8 > /dev/null && make altinstall > /dev/null && cd ../ && rm Python-3.10.0.tgz
RUN apt-get install -y libgtk2.0-dev dmidecode python3-tk && ldconfig && \
wget ${ref_web}/${ref_paddle310} && pip3.10 install ${ref_paddle310_whl}; apt-get install -f -y && \
apt-get clean -y && \
rm -f ${ref_paddle310} && \
ldconfig
EOF
cat >> ${PADDLE_ROOT}/build/Dockerfile <<EOF
# run paddle version to install python packages first
RUN apt-get update && ${NCCL_DEPS}
RUN apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev
RUN wget -q https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tgz && \
tar -xzf Python-3.11.0.tgz && cd Python-3.11.0 && \
CFLAGS="-Wformat" ./configure --prefix=/usr/local/ --enable-shared > /dev/null && \
make -j8 > /dev/null && make altinstall > /dev/null && cd ../ && rm Python-3.11.0.tgz
RUN apt-get install -y libgtk2.0-dev dmidecode python3-tk && ldconfig && \
wget ${ref_web}/${ref_paddle311} && pip3.11 install ${ref_paddle311_whl}; apt-get install -f -y && \
apt-get clean -y && \
rm -f ${ref_paddle311} && \
ldconfig
EOF
cat >> ${PADDLE_ROOT}/build/Dockerfile <<EOF
# run paddle version to install python packages first
RUN apt-get update && ${NCCL_DEPS}
RUN apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev
RUN wget -q https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz && \
tar -xzf Python-3.12.0.tgz && cd Python-3.12.0 && \
CFLAGS="-Wformat" ./configure --prefix=/usr/local/ --enable-shared > /dev/null && \
make -j8 > /dev/null && make altinstall > /dev/null && cd ../ && rm Python-3.12.0.tgz
RUN apt-get install -y libgtk2.0-dev dmidecode python3-tk && ldconfig && \
wget ${ref_web}/${ref_paddle312} && pip3.12 install ${ref_paddle312_whl}; apt-get install -f -y && \
apt-get clean -y && \
rm -f ${ref_paddle312} && \
ldconfig
EOF
cat >> ${PADDLE_ROOT}/build/Dockerfile <<EOF
# run paddle version to install python packages first
RUN apt-get update && ${NCCL_DEPS}
RUN apt-get install -y wget python-pip python-opencv libgtk2.0-dev dmidecode python-tk && easy_install -U pip && \
wget ${ref_web}/${ref_paddle2} && pip install ${ref_paddle2_whl}; apt-get install -f -y && \
apt-get clean -y && \
rm -f ${ref_paddle2} && \
${PADDLE_VERSION} && \
ldconfig
EOF
cat >> ${PADDLE_ROOT}/build/Dockerfile <<EOF
# default command shows the paddle version and exit
CMD [${CMD}]
EOF
}
function gen_fluid_lib_by_setup(){
mkdir -p ${PADDLE_ROOT}/build
cd ${PADDLE_ROOT}/build
cat <<EOF
========================================
Generating fluid library for train and inference ...
========================================
EOF
parallel_number=`nproc`
if [[ "$1" != "" ]]; then
parallel_number=$1
fi
startTime_s=`date +%s`
set +e
export MAX_JOBS=${parallel_number}
export WITH_DISTRIBUTE=OFF ON_INFER=ON WITH_TENSORRT=ON CUDA_ARCH_NAME=${CUDA_ARCH_NAME:-Auto} WITH_PYTHON=${WITH_PYTHON:-ON} WITH_ONNXRUNTIME=${WITH_ONNXRUNTIME:-OFF} WITH_SHARED_PHI=${WITH_SHARED_PHI:-ON}
echo "if you use setup.py to compile,please export envs as following in /paddle ..."
cat << EOF
========================================
export CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE:-Release} WITH_GPU=${WITH_GPU:-OFF} WITH_SHARED_PHI=${WITH_SHARED_PHI:-ON} WITH_TENSORRT=${WITH_TENSORRT:-ON} WITH_ROCM=${WITH_ROCM:-OFF} WITH_CINN=${WITH_CINN:-OFF} WITH_DISTRIBUTE=${distributed_flag} WITH_MKL=${WITH_MKL:-ON} WITH_AVX=${WITH_AVX:-OFF} CUDA_ARCH_NAME=${CUDA_ARCH_NAME:-All} NEW_RELEASE_PYPI=${NEW_RELEASE_PYPI:-OFF} NEW_RELEASE_ALL=${NEW_RELEASE_ALL:-OFF} NEW_RELEASE_JIT=${NEW_RELEASE_JIT:-OFF} WITH_PYTHON=${WITH_PYTHON:-ON} CUDNN_ROOT=/usr/ WITH_TESTING=${WITH_TESTING:-ON} WITH_COVERAGE=${WITH_COVERAGE:-OFF} WITH_INCREMENTAL_COVERAGE=${WITH_INCREMENTAL_COVERAGE:-OFF} CMAKE_MODULE_PATH=/opt/rocm/hip/cmake CMAKE_EXPORT_COMPILE_COMMANDS=ON WITH_INFERENCE_API_TEST=${WITH_INFERENCE_API_TEST:-ON} INFERENCE_DEMO_INSTALL_DIR=${INFERENCE_DEMO_INSTALL_DIR} PY_VERSION=${PY_VERSION:-3.10} CMAKE_INSTALL_PREFIX=${INSTALL_PREFIX:-/paddle/build} WITH_GLOO=${gloo_flag} WITH_XPU=${WITH_XPU:-OFF} WITH_IPU=${WITH_IPU:-OFF} XPU_SDK_ROOT=${XPU_SDK_ROOT:-""} WITH_XPU_BKCL=${WITH_XPU_BKCL:-OFF} WITH_XPU_XHPC=${WITH_XPU_XHPC:-OFF} WITH_XPU_XFT=${WITH_XPU_XFT:-OFF} WITH_ARM=${WITH_ARM:-OFF} WITH_STRIP=${WITH_STRIP:-ON} ON_INFER=${ON_INFER:-OFF} CUDA_ARCH_BIN=${CUDA_ARCH_BIN} WITH_RECORD_BUILDTIME=${WITH_RECORD_BUILDTIME:-OFF} WITH_UNITY_BUILD=${WITH_UNITY_BUILD:-OFF} WITH_ONNXRUNTIME=${WITH_ONNXRUNTIME:-OFF} WITH_CUDNN_FRONTEND=${WITH_CUDNN_FRONTEND:-OFF}
========================================
EOF
echo "if you use cmake to compile,please Configuring cmake in /paddle/build ..."
cat <<EOF
========================================
cmake .. -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE:-Release} -DWITH_GPU=${WITH_GPU:-OFF} -DWITH_SHARED_PHI=${WITH_SHARED_PHI:-ON} -DWITH_TENSORRT=${WITH_TENSORRT:-ON} -DWITH_ROCM=${WITH_ROCM:-OFF} -DWITH_CINN=${WITH_CINN:-OFF} -DWITH_DISTRIBUTE=${distributed_flag} -DWITH_MKL=${WITH_MKL:-ON} -DWITH_AVX=${WITH_AVX:-OFF} -DCUDA_ARCH_NAME=${CUDA_ARCH_NAME:-All} -DNEW_RELEASE_PYPI=${NEW_RELEASE_PYPI:-OFF} -DNEW_RELEASE_ALL=${NEW_RELEASE_ALL:-OFF} -DNEW_RELEASE_JIT=${NEW_RELEASE_JIT:-OFF} -DWITH_PYTHON=${WITH_PYTHON:-ON} -DCUDNN_ROOT=/usr/ -DWITH_TESTING=${WITH_TESTING:-ON} -DWITH_COVERAGE=${WITH_COVERAGE:-OFF} -DWITH_INCREMENTAL_COVERAGE=${WITH_INCREMENTAL_COVERAGE:-OFF} -DCMAKE_MODULE_PATH=/opt/rocm/hip/cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DWITH_INFERENCE_API_TEST=${WITH_INFERENCE_API_TEST:-ON} -DINFERENCE_DEMO_INSTALL_DIR=${INFERENCE_DEMO_INSTALL_DIR} -DPY_VERSION=${PY_VERSION:-3.10} -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX:-/paddle/build} -DWITH_PSLIB=${pslib_flag} -DWITH_GLOO=${gloo_flag} -DWITH_XPU=${WITH_XPU:-OFF} -DWITH_IPU=${WITH_IPU:-OFF} -DXPU_SDK_ROOT=${XPU_SDK_ROOT:-""} -DWITH_XPU_BKCL=${WITH_XPU_BKCL:-OFF} -DWITH_XPU_XHPC=${WITH_XPU_XHPC:-OFF} -DWITH_XPU_XFT=${WITH_XPU_XFT:-OFF} -DWITH_ARM=${WITH_ARM:-OFF} -DWITH_STRIP=${WITH_STRIP:-ON} -DON_INFER=${ON_INFER:-OFF} -DCUDA_ARCH_BIN=${CUDA_ARCH_BIN} -DWITH_RECORD_BUILDTIME=${WITH_RECORD_BUILDTIME:-OFF} -DWITH_UNITY_BUILD=${WITH_UNITY_BUILD:-OFF} -DWITH_ONNXRUNTIME=${WITH_ONNXRUNTIME:-OFF} -DWITH_CUDNN_FRONTEND=${WITH_CUDNN_FRONTEND:-OFF}
========================================
EOF
# reset ccache zero stats for collect PR's actual hit rate
ccache -z
cd ..
if [ "${PYTHON_EXECUTABLE}" != "" ];then
${PYTHON_EXECUTABLE} setup.py bdist_wheel;build_error=$?
else
python setup.py bdist_wheel;build_error=$?
fi
# ci will collect ccache hit rate
collect_ccache_hits
if [ "$build_error" != 0 ];then
exit 7;
fi
endTime_s=`date +%s`
echo "Build Time: $[ $endTime_s - $startTime_s ]s"
echo "ipipe_log_param_Build_Time: $[ $endTime_s - $startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
build_size "paddle_inference"
build_size "paddle_inference_c"
}
function gen_fluid_lib() {
mkdir -p ${PADDLE_ROOT}/build
cd ${PADDLE_ROOT}/build
cat <<EOF
========================================
Generating fluid library for train and inference ...
========================================
EOF
parallel_number=`nproc`
if [[ "$1" != "" ]]; then
parallel_number=$1
fi
startTime_s=`date +%s`
set +e
cmake .. -DWITH_DISTRIBUTE=OFF -DON_INFER=ON -DWITH_TENSORRT=ON -DCUDA_ARCH_NAME=${CUDA_ARCH_NAME:-Auto} -DWITH_PYTHON=${WITH_PYTHON:-ON} -DWITH_ONNXRUNTIME=${WITH_ONNXRUNTIME:-OFF} -DWITH_MKL=${WITH_MKL:-ON} -DWITH_ONEDNN=${WITH_ONEDNN:-ON} ;build_error=$?
# reset ccache zero stats for collect PR's actual hit rate
ccache -z
make -j ${parallel_number} fluid_lib_dist;build_error=$?
make -j ${parallel_number} inference_lib_dist;build_error=$?
# ci will collect ccache hit rate
collect_ccache_hits
if [ "$build_error" != 0 ];then
exit 7;
fi
endTime_s=`date +%s`
echo "Build Time: $[ $endTime_s - $startTime_s ]s"
echo "ipipe_log_param_Build_Time: $[ $endTime_s - $startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
build_size "paddle_inference"
build_size "paddle_inference_c"
}
function tar_fluid_lib() {
cat <<EOF
========================================
Taring fluid library for train and inference ...
========================================
EOF
cd ${PADDLE_ROOT}/build
cp -r paddle_install_dir fluid
tar -czf fluid.tgz fluid
cp -r paddle_inference_install_dir paddle_inference
tar -czf paddle_inference.tgz paddle_inference
}
function test_fluid_lib() {
cat <<EOF
========================================
Testing fluid library for inference ...
========================================
EOF
demo_ci_startTime_s=`date +%s`
cd ${PADDLE_ROOT}/paddle/fluid/inference/api/demo_ci
./run.sh ${PADDLE_ROOT} ${WITH_MKL:-ON} ${WITH_GPU:-OFF} ${INFERENCE_DEMO_INSTALL_DIR} \
${WITH_TENSORRT:-ON} ${TENSORRT_ROOT_DIR:-/usr} ${WITH_ONNXRUNTIME:-ON}
DEMO_EXIT_CODE=$?
./clean.sh
demo_ci_endTime_s=`date +%s`
echo "demo_ci tests Total time: $[ $demo_ci_endTime_s - $demo_ci_startTime_s ]s"
echo "ipipe_log_param_Demo_Ci_Tests_Total_Time: $[ $demo_ci_endTime_s - $demo_ci_startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
infer_ut_startTime_s=`date +%s`
cd ${PADDLE_ROOT}/test/cpp/inference/infer_ut
./run.sh ${PADDLE_ROOT} ${WITH_MKL:-ON} ${WITH_GPU:-OFF} ${INFERENCE_DEMO_INSTALL_DIR} \
${TENSORRT_ROOT_DIR:-/usr} ${WITH_ONNXRUNTIME:-ON}
TEST_EXIT_CODE=$?
infer_ut_endTime_s=`date +%s`
echo "infer_ut tests Total time: $[ $infer_ut_endTime_s - $infer_ut_startTime_s ]s"
echo "ipipe_log_param_Infer_Ut_Tests_Total_Time: $[ $infer_ut_endTime_s - $infer_ut_startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
if [[ "$DEMO_EXIT_CODE" != "0" || "$TEST_EXIT_CODE" != "0" ]]; then
exit 8;
fi
}
function test_go_inference_api() {
cat <<EOF
========================================
Testing go inference api ...
========================================
EOF
# ln paddle_inference_c lib
cd ${PADDLE_ROOT}/build
ln -s ${PADDLE_ROOT}/build/paddle_inference_c_install_dir/ ${PADDLE_ROOT}/paddle/fluid/inference/goapi/paddle_inference_c
# run go test
cd ${PADDLE_ROOT}/paddle/fluid/inference/goapi
bash test.sh
EXIT_CODE=$?
if [[ "$EXIT_CODE" != "0" ]]; then
exit 8;
fi
}
function distribute_test() {
python ${PADDLE_ROOT}/tools/get_pr_title.py skip_distribute_test && CINN_OR_BUAA_PR=1
if [[ "${CINN_OR_BUAA_PR}" = "1" ]];then
echo "PR's title with 'CINN' or 'BUAA', skip the run distribute ci test !"
exit 0
fi
echo "Start gpups tests"
parallel_test_base_gpups
echo "End gpups tests"
echo "Start FA tests"
parallel_fa_unit
echo "End FA tests"
echo "Downloading ...."
cd ${work_dir}
wget https://paddlenlp.bj.bcebos.com/wheels/PaddleNLP_stable_paddle.tar.gz --no-proxy
tar -zvxf PaddleNLP_stable_paddle.tar.gz
cd PaddleNLP
sed -i '/lac/d' scripts/regression/requirements_ci.txt
pip install -r requirements.txt
pip install -r scripts/regression/requirements_ci.txt
pip install -r ./csrc/requirements.txt
python setup.py install
python -m pip install pytest-timeout
cd csrc && python setup_cuda.py install
cd ${work_dir}
wget -q --no-proxy https://paddle-qa.bj.bcebos.com/paddlenlp/Bos.zip --no-check-certificate
unzip -P'41maLgwWnCLaFTCehlwQ6n4l3oZpS/r5gPq4K4VLj5M1024' Bos.zip
mkdir paddlenlp && mv Bos/* ./paddlenlp/
rm -rf ./paddlenlp/upload/*
rm -rf ./paddlenlp/models/bigscience/*
echo "Start LLM Test"
cd ${work_dir}/PaddleNLP
# Disable Test: test_gradio
rm tests/llm/test_gradio.py
# python -m pytest -s -v tests/llm --timeout=3600
echo "End LLM Test"
echo "Start auto_parallel Test"
cd ${work_dir}
timeout 50m bash tools/auto_parallel/ci_distributed_stable.sh
EXIT_CODE=$?
echo "End auto_parallel Test"
if [[ "$EXIT_CODE" != "0" ]]; then
exit 8;
fi
}
function test_fluid_lib_train() {
cat <<EOF
========================================
Testing fluid library for training ...
========================================
EOF
fluid_train_startTime_s=`date +%s`
cd ${PADDLE_ROOT}/paddle/fluid/train/demo
./run.sh ${PADDLE_ROOT} ${WITH_MKL:-ON}
EXIT_CODE=$?
fluid_train_endTime_s=`date +%s`
echo "test_fluid_lib_train Total Time: $[ $fluid_train_endTime_s - $fluid_train_startTime_s ]s"
echo "ipipe_log_param_Test_Fluid_Lib_Train_Total_Time: $[ $fluid_train_endTime_s - $fluid_train_startTime_s ]s"
./clean.sh
if [[ "$EXIT_CODE" != "0" ]]; then
exit 8;
fi
}
function build_document_preview() {
sh /paddle/tools/document_preview.sh ${PORT}
}
# origin name: example
function exec_samplecode_test() {
if [ -d "${PADDLE_ROOT}/build/pr_whl" ];then
pip install ${PADDLE_ROOT}/build/pr_whl/*.whl
else
echo "WARNING: PR wheel is not found. Use develop wheel !!!"
pip install ${PADDLE_ROOT}/build/python/dist/*.whl
fi
python -c "import paddle;print(paddle.__version__);paddle.version.show()"
cd ${PADDLE_ROOT}/tools
if [ "$1" = "cpu" ] ; then
python sampcd_processor.py --mode cpu; example_error=$?
elif [ "$1" = "gpu" ] ; then
SAMPLE_CODE_EXEC_THREADS=${SAMPLE_CODE_EXEC_THREADS:-2}
python sampcd_processor.py --threads=${SAMPLE_CODE_EXEC_THREADS} --mode gpu; example_error=$?
fi
if [ "$example_error" != "0" ];then
echo "Code instance execution failed" >&2
exit 5
fi
}
function exec_type_checking() {
if [ -d "${PADDLE_ROOT}/build/pr_whl" ];then
pip install ${PADDLE_ROOT}/build/pr_whl/*.whl
else
echo "WARNING: PR wheel is not found. Use develop wheel !!!"
pip install ${PADDLE_ROOT}/build/python/dist/*.whl
fi
python -c "import paddle;print(paddle.__version__);paddle.version.show()"
cd ${PADDLE_ROOT}/tools
# check all sample code
DEBUG_MODE=`curl -s https://github.com/PaddlePaddle/Paddle/pull/${GIT_PR_ID} | grep "<title>" | grep -i "\[debug\]" || true`
if [[ ${DEBUG_MODE} ]]; then
python type_checking.py --debug --full-test; type_checking_error=$?
else
python type_checking.py --full-test; type_checking_error=$?
fi
if [ "$type_checking_error" != "0" ];then
echo "Example code type checking failed" >&2
exit 5
fi
}
function exec_samplecode_checking() {
# check sample code with doctest
example_info_gpu=""
example_code_gpu=0
if [ "${WITH_GPU}" == "ON" ] ; then
{ example_info_gpu=$(exec_samplecode_test gpu 2>&1 1>&3 3>/dev/null); } 3>&1
example_code_gpu=$?
fi
{ example_info=$(exec_samplecode_test cpu 2>&1 1>&3 3>/dev/null); } 3>&1
example_code=$?
# check sample typing with mypy
{ type_checking_info=$(exec_type_checking 2>&1 1>&3 3>/dev/null); } 3>&1
type_checking_code=$?
# summary
summary_check_example_code_problems $[${example_code_gpu} + ${example_code}] "${example_info_gpu}\n${example_info}"
summary_type_checking_problems $type_checking_code "$type_checking_info"
# exit with error code
if [ $example_code -ne 0 ];then
exit $example_code
fi
if [ $type_checking_code -ne 0 ];then
exit $type_checking_code
fi
}
function collect_ccache_hits() {
ccache -s
ccache_version=$(ccache -V | grep "ccache version" | awk '{print $3}')
echo "$ccache_version"
if [[ $ccache_version == 4* ]] ; then
rate=$(ccache -s | grep "Hits" | awk 'NR==1 {print $5}' | cut -d '(' -f2 | cut -d ')' -f1)
echo "ccache hit rate: ${rate}%"
else
rate=$(ccache -s | grep 'cache hit rate' | awk '{print $4}')
echo "ccache hit rate: ${rate}"
fi
echo "ipipe_log_param_Ccache_Hit_Rate: ${rate}%" >> ${PADDLE_ROOT}/build/build_summary.txt
}
function test_op_benchmark() {
# The PR will pass quickly when get approval from specific person.
# Xreki 12538138, luotao1 6836917, ZzSean 32410583, JamesLim-sy 61349199
set +x
approval_line=$(curl -H "Authorization: token ${GITHUB_API_TOKEN}" https://api.github.com/repos/PaddlePaddle/Paddle/pulls/${GIT_PR_ID}/reviews?per_page=10000)
if [ "${approval_line}" != "" ]; then
APPROVALS=$(echo ${approval_line} | python ${PADDLE_ROOT}/tools/check_pr_approval.py 1 zhangting2020 Xreki)
echo "current pr ${GIT_PR_ID} got approvals: ${APPROVALS}"
if [ "${APPROVALS}" == "TRUE" ]; then
echo "==================================="
echo -e "\n current pr ${GIT_PR_ID} has got approvals. So, Pass CI directly!\n"
echo "==================================="
exit 0
fi
fi
set -x
bash ${PADDLE_ROOT}/tools/test_op_benchmark.sh
}
function test_model_benchmark() {
bash ${PADDLE_ROOT}/tools/test_model_benchmark.sh
}
function summary_check_example_code_problems() {
set +x
local example_code=$1
local example_info=$2
if [ $example_code -ne 0 ];then
echo "==============================================================================="
echo "*****Example code error***** Please fix the error listed in the information:"
echo "==============================================================================="
echo "$example_info"
echo "==============================================================================="
echo "*****Example code FAIL*****"
echo "==============================================================================="
else
echo "==============================================================================="
echo "*****Example code info*****"
echo "==============================================================================="
echo "$example_info"
echo "==============================================================================="
echo "*****Example code PASS*****"
echo "==============================================================================="
fi
set -x
}
function summary_type_checking_problems() {
set +x
local type_checking_code=$1
local type_checking_info=$2
if [ $type_checking_code -ne 0 ];then
echo "==============================================================================="
echo "*****Example code type checking error***** Please fix the error listed in the information:"
echo "==============================================================================="
echo "$type_checking_info"
echo "==============================================================================="
echo "*****Example code type checking FAIL*****"
echo "==============================================================================="
else
echo "==============================================================================="
echo "*****Example code type checking info*****"
echo "==============================================================================="
echo "$type_checking_info"
echo "==============================================================================="
echo "*****Example code type checking PASS*****"
echo "==============================================================================="
fi
set -x
}
function reuse_so_cache() {
get_html="https://api.github.com/repos/PaddlePaddle/Paddle"
curl -X GET ${get_html}/commits -H "authorization: token ${GITHUB_API_TOKEN}" >tmp.txt
merge_commit=`grep "sha" tmp.txt| awk -F \" 'NR==1{print $(NF-1)}'| sed 's# ##g'`
curl -X GET ${get_html}/commits/${merge_commit} -H "authorization: token ${GITHUB_API_TOKEN}" >tmp.txt
merge_pr=`grep -oP -m 1 '(#[0-9]*)' tmp.txt| sed 's/#//g'`
curl -X GET ${get_html}/pulls/${merge_pr}/commits -H "authorization: token ${GITHUB_API_TOKEN}" >tmp.txt
pr_commit=`grep "sha" tmp.txt |tail -3|head -1|awk -F : '{print $NF}'|sed 's#"##g'|sed 's#,##g'| sed 's# ##g'`
set +e
wget -q https://xly-devops.bj.bcebos.com/PR/Paddle/${merge_pr}/${pr_commit}/workspace/Paddle/build/proto_so.tar.gz
down_proto_so=`echo $?`
set -e
if [ "${down_proto_so}" -eq 0 ];then
cd build && mv ../proto_so.tar.gz .
tar --use-compress-program=pigz -xpf proto_so.tar.gz
cmake_gen ${PYTHON_ABI:-""} ${parallel_number}
cd python
touch stub.cc
alias cp=cp
cp -r ../../python/paddle .
python setup.py bdist_wheel
else
cmake_gen_and_build ${PYTHON_ABI:-""} ${parallel_number}
fi
}
function trt_convert_test() {
set +e
cd ${PADDLE_ROOT}
result_num=0
export PYTHONPATH=$PYTHONPATH:${PADDLE_ROOT}/build/python
for file_name in `find python/ -name 'test_trt_convert*'`;do
echo "----- test trt ut: $file_name -----"
python $file_name
res=$?
if [ "$res" != "0" ];then
echo "$file_name convert test failed " >&2
result_num=11
fi
done
if [ "$result_num" != "0" ];then
exit 11
fi
}
function build_pr_and_develop() {
run_setup ${PYTHON_ABI:-""} bdist_wheel ${parallel_number}
if [ ! -d "${PADDLE_ROOT}/build/python/dist/" ]; then
mkdir ${PADDLE_ROOT}/build/python/dist/
fi
mv ${PADDLE_ROOT}/dist/*.whl ${PADDLE_ROOT}/build/python/dist/
cmake_change=`git diff --name-only upstream/$BRANCH | grep "cmake/external" || true`
# Temporarily save some scripts from PR branch
cp ${PADDLE_ROOT}/python/requirements.txt /tmp
cp ${PADDLE_ROOT}/tools/print_signatures.py /tmp
generate_api_spec "$1" "PR"
mkdir ${PADDLE_ROOT}/build/pr_whl && cp ${PADDLE_ROOT}/build/python/dist/*.whl ${PADDLE_ROOT}/build/pr_whl
rm -f ${PADDLE_ROOT}/build/python/dist/*.whl && rm -f ${PADDLE_ROOT}/build/python/build/.timestamp
git checkout $BRANCH
dev_commit=`git log -2|grep -w 'commit'|awk '{print $2}'`
for commit_id in $dev_commit
do
dev_url="https://xly-devops.bj.bcebos.com/PR/build_whl/0/${commit_id}/paddlepaddle_gpu-0.0.0-cp310-cp310-linux_x86_64.whl"
url_return=`curl -s -m 5 -IL ${dev_url} |awk 'NR==1{print $2}'`
if [ "$url_return" == '200' ];then
break
fi
done
if [ "$url_return" == '200' ];then
mkdir ${PADDLE_ROOT}/build/dev_whl && wget -q -P ${PADDLE_ROOT}/build/dev_whl ${dev_url}
cp ${PADDLE_ROOT}/build/dev_whl/paddlepaddle_gpu-0.0.0-cp310-cp310-linux_x86_64.whl ${PADDLE_ROOT}/build/python/dist
else
cp -r ${PADDLE_ROOT}/build /tmp/
if [[ ${cmake_change} ]];then
rm -rf ${PADDLE_ROOT}/build/Makefile ${PADDLE_ROOT}/build/CMakeCache.txt ${PADDLE_ROOT}/build/build.ninja
rm -rf ${PADDLE_ROOT}/build/third_party
fi
git checkout -b develop_base_pr upstream/$BRANCH
git submodule update --init
run_setup ${PYTHON_ABI:-""} "rerun-cmake bdist_wheel" ${parallel_number}
rm -rf ${PADDLE_ROOT}/build
mv /tmp/build ${PADDLE_ROOT}
if [ ! -d "${PADDLE_ROOT}/build/python/dist/" ]; then
mkdir ${PADDLE_ROOT}/build/python/dist/
fi
mv ${PADDLE_ROOT}/dist/*.whl ${PADDLE_ROOT}/build/python/dist/
mkdir ${PADDLE_ROOT}/build/dev_whl && cp ${PADDLE_ROOT}/build/python/dist/*.whl ${PADDLE_ROOT}/build/dev_whl
fi
generate_api_spec "$1" "DEV"
}
function build_develop() {
#git checkout -b develop_base_pr upstream/$BRANCH
cmake_gen_and_build ${PYTHON_ABI:-""} ${parallel_number}
}
function check_coverage_build() {
if [ ${BRANCH} != 'develop' ];then
return
fi
rm -f build_size
curl -O https://paddle-docker-tar.bj.bcebos.com/paddle_ci_index/build_size
#curl -O https://xly-devops.bj.bcebos.com/PR/build_whl/${AGILE_PULL_ID}/${AGILE_REVISION}/coverage_build_size
#pr_coverage_build_size=`cat coverage_build_size|sed 's#G##g'`
dev_coverage_build_size=`cat build_size|sed 's#G##g'`
pr_coverage_build_size=`echo $buildSize|sed 's#G##g'`
diff_coverage_build_size=`echo $(($pr_coverage_build_size - $dev_coverage_build_size))`
set +x
if [ ${diff_coverage_build_size} -gt 3 ]; then
approval_line=`curl -H "Authorization: token ${GITHUB_API_TOKEN}" https://api.github.com/repos/PaddlePaddle/Paddle/pulls/${GIT_PR_ID}/reviews?per_page=10000`
APPROVALS=`echo ${approval_line}|python ${PADDLE_ROOT}/tools/check_pr_approval.py 1 swgu98 luotao1 risemeup1`
echo "current pr ${GIT_PR_ID} got approvals: ${APPROVALS}"
if [ "${APPROVALS}" == "FALSE" ]; then
echo "=========================================================================================="
echo "This PR make the release paddlepaddle coverage build size growth exceeds 3 G, please explain why your PR exceeds 3G to ext_ppee@baidu.com and in PR description."
echo "Then you must have one RD (swgu98 (Recommend) or luotao1 or risemeup1) approval for this PR\n"
echo "=========================================================================================="
exit 6
fi
fi
set -x
}
function run_setup(){
startTime_s=`date +%s`
mkdir -p ${PADDLE_ROOT}/build
cd ${PADDLE_ROOT}/build
# Build script will not fail if *.deb does not exist
rm *.deb 2>/dev/null || true
# Delete previous built egg packages
rm -rf ${PADDLE_ROOT}/dist 2>/dev/null || true
# Delete previous built paddle cache
rm -rf ${PADDLE_ROOT}/build/python/paddle 2>/dev/null || true
SYSTEM=`uname -s`
if [ "$SYSTEM" == "Darwin" ]; then
echo "Using python abi: $1"
if [ "$1" == "cp310-cp310" ]; then
if [ -d "/Library/Frameworks/Python.framework/Versions/3.10" ]; then
export LD_LIBRARY_PATH=/Library/Frameworks/Python.framework/Versions/3.10/lib/
export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}:/Library/Frameworks/Python.framework/Versions/3.10/lib/
export PATH=/Library/Frameworks/Python.framework/Versions/3.10/bin/:${PATH}
#after changing "PYTHON_LIBRARY:FILEPATH" to "PYTHON_LIBRARY" ,we can use export
export PYTHON_EXECUTABLE=/Library/Frameworks/Python.framework/Versions/3.10/bin/python3
export PYTHON_INCLUDE_DIR=/Library/Frameworks/Python.framework/Versions/3.10/include/python3.10/
export PYTHON_LIBRARY=/Library/Frameworks/Python.framework/Versions/3.10/lib/libpython3.10.dylib
pip3.10 install --user -r ${PADDLE_ROOT}/python/requirements.txt
else
exit 1
fi
elif [ "$1" == "cp311-cp311" ]; then
if [ -d "/Library/Frameworks/Python.framework/Versions/3.11" ]; then
export LD_LIBRARY_PATH=/Library/Frameworks/Python.framework/Versions/3.11/lib/
export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}:/Library/Frameworks/Python.framework/Versions/3.11/lib/
export PATH=/Library/Frameworks/Python.framework/Versions/3.11/bin/:${PATH}
#after changing "PYTHON_LIBRARY:FILEPATH" to "PYTHON_LIBRARY" ,we can use export
export PYTHON_EXECUTABLE=/Library/Frameworks/Python.framework/Versions/3.11/bin/python3
export PYTHON_INCLUDE_DIR=/Library/Frameworks/Python.framework/Versions/3.11/include/python3.11/
export PYTHON_LIBRARY=/Library/Frameworks/Python.framework/Versions/3.11/lib/libpython3.11.dylib
pip3.11 install --user -r ${PADDLE_ROOT}/python/requirements.txt
else
exit 1
fi
elif [ "$1" == "cp312-cp312" ]; then
if [ -d "/Library/Frameworks/Python.framework/Versions/3.12" ]; then
export LD_LIBRARY_PATH=/Library/Frameworks/Python.framework/Versions/3.12/lib/
export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}:/Library/Frameworks/Python.framework/Versions/3.12/lib/
export PATH=/Library/Frameworks/Python.framework/Versions/3.12/bin/:${PATH}
#after changing "PYTHON_LIBRARY:FILEPATH" to "PYTHON_LIBRARY" ,we can use export
export PYTHON_EXECUTABLE=/Library/Frameworks/Python.framework/Versions/3.12/bin/python3
export PYTHON_INCLUDE_DIR=/Library/Frameworks/Python.framework/Versions/3.12/include/python3.12/
export PYTHON_LIBRARY=/Library/Frameworks/Python.framework/Versions/3.12/lib/libpython3.12.dylib
pip3.12 install --user -r ${PADDLE_ROOT}/python/requirements.txt
else
exit 1
fi
elif [ "$1" == "cp313-cp313" ]; then
if [ -d "/Library/Frameworks/Python.framework/Versions/3.13" ]; then
export LD_LIBRARY_PATH=/Library/Frameworks/Python.framework/Versions/3.13/lib/
export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}:/Library/Frameworks/Python.framework/Versions/3.13/lib/
export PATH=/Library/Frameworks/Python.framework/Versions/3.13/bin/:${PATH}
#after changing "PYTHON_LIBRARY:FILEPATH" to "PYTHON_LIBRARY" ,we can use export
export PYTHON_EXECUTABLE=/Library/Frameworks/Python.framework/Versions/3.13/bin/python3
export PYTHON_INCLUDE_DIR=/Library/Frameworks/Python.framework/Versions/3.13/include/python3.13/
export PYTHON_LIBRARY=/Library/Frameworks/Python.framework/Versions/3.13/lib/libpython3.13.dylib
pip3.13 install --user -r ${PADDLE_ROOT}/python/requirements.txt
else
exit 1
fi
elif [ "$1" == "cp314-cp314" ]; then
if [ -d "/Library/Frameworks/Python.framework/Versions/3.14" ]; then
export LD_LIBRARY_PATH=/Library/Frameworks/Python.framework/Versions/3.14/lib/
export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}:/Library/Frameworks/Python.framework/Versions/3.14/lib/
export PATH=/Library/Frameworks/Python.framework/Versions/3.14/bin/:${PATH}
#after changing "PYTHON_LIBRARY:FILEPATH" to "PYTHON_LIBRARY" ,we can use export
export PYTHON_EXECUTABLE=/Library/Frameworks/Python.framework/Versions/3.14/bin/python3
export PYTHON_INCLUDE_DIR=/Library/Frameworks/Python.framework/Versions/3.14/include/python3.14/
export PYTHON_LIBRARY=/Library/Frameworks/Python.framework/Versions/3.14/lib/libpython3.14.dylib
pip3.14 install --user -r ${PADDLE_ROOT}/python/requirements.txt
else
exit 1
fi
fi
else
if [ "$1" != "" ]; then
echo "using python abi: $1"
if [ "$1" == "cp310-cp310" ]; then
export LD_LIBRARY_PATH=/opt/_internal/cpython-3.10.0/lib/:${LD_LIBRARY_PATH}
export PATH=/opt/_internal/cpython-3.10.0/bin/:${PATH}
#after changing "PYTHON_LIBRARY:FILEPATH" to "PYTHON_LIBRARY" ,we can use export
export PYTHON_EXECUTABLE=/opt/_internal/cpython-3.10.0/bin/python3.10
export PYTHON_INCLUDE_DIR=/opt/_internal/cpython-3.10.0/include/python3.10
export PYTHON_LIBRARIES=/opt/_internal/cpython-3.10.0/lib/libpython3.so
pip3.10 install -r ${PADDLE_ROOT}/python/requirements.txt
pip3.10 install -r ${PADDLE_ROOT}/paddle/scripts/compile_requirements.txt
elif [ "$1" == "cp311-cp311" ]; then
export LD_LIBRARY_PATH=/opt/_internal/cpython-3.11.0/lib/:${LD_LIBRARY_PATH}
export PATH=/opt/_internal/cpython-3.11.0/bin/:${PATH}
#after changing "PYTHON_LIBRARY:FILEPATH" to "PYTHON_LIBRARY" ,we can use export
export PYTHON_EXECUTABLE=/opt/_internal/cpython-3.11.0/bin/python3.11
export PYTHON_INCLUDE_DIR=/opt/_internal/cpython-3.11.0/include/python3.11
export PYTHON_LIBRARIES=/opt/_internal/cpython-3.11.0/lib/libpython3.so
pip3.11 install -r ${PADDLE_ROOT}/python/requirements.txt
pip3.11 install -r ${PADDLE_ROOT}/paddle/scripts/compile_requirements.txt
elif [ "$1" == "cp312-cp312" ]; then
export LD_LIBRARY_PATH=/opt/_internal/cpython-3.12.0/lib/:${LD_LIBRARY_PATH}
export PATH=/opt/_internal/cpython-3.12.0/bin/:${PATH}
#after changing "PYTHON_LIBRARY:FILEPATH" to "PYTHON_LIBRARY" ,we can use export
export PYTHON_EXECUTABLE=/opt/_internal/cpython-3.12.0/bin/python3.12
export PYTHON_INCLUDE_DIR=/opt/_internal/cpython-3.12.0/include/python3.12
export PYTHON_LIBRARIES=/opt/_internal/cpython-3.12.0/lib/libpython3.so
pip3.12 install -r ${PADDLE_ROOT}/python/requirements.txt
pip3.12 install -r ${PADDLE_ROOT}/paddle/scripts/compile_requirements.txt
elif [ "$1" == "cp313-cp313" ]; then
export LD_LIBRARY_PATH=/opt/_internal/cpython-3.13.0/lib/:${LD_LIBRARY_PATH}
export PATH=/opt/_internal/cpython-3.13.0/bin/:${PATH}
#after changing "PYTHON_LIBRARY:FILEPATH" to "PYTHON_LIBRARY" ,we can use export
export PYTHON_EXECUTABLE=/opt/_internal/cpython-3.13.0/bin/python3.13
export PYTHON_INCLUDE_DIR=/opt/_internal/cpython-3.13.0/include/python3.13
export PYTHON_LIBRARIES=/opt/_internal/cpython-3.13.0/lib/libpython3.so
pip3.13 install -r ${PADDLE_ROOT}/python/requirements.txt
pip3.13 install -r ${PADDLE_ROOT}/paddle/scripts/compile_requirements.txt
elif [ "$1" == "cp314-cp314" ]; then
export LD_LIBRARY_PATH=/opt/_internal/cpython-3.14.0/lib/:${LD_LIBRARY_PATH}
export PATH=/opt/_internal/cpython-3.14.0/bin/:${PATH}
#after changing "PYTHON_LIBRARY:FILEPATH" to "PYTHON_LIBRARY" ,we can use export
export PYTHON_EXECUTABLE=/opt/_internal/cpython-3.14.0/bin/python3.14
export PYTHON_INCLUDE_DIR=/opt/_internal/cpython-3.14.0/include/python3.14
export PYTHON_LIBRARIES=/opt/_internal/cpython-3.14.0/lib/libpython3.so
pip3.14 install -r ${PADDLE_ROOT}/python/requirements.txt
pip3.14 install -r ${PADDLE_ROOT}/paddle/scripts/compile_requirements.txt
fi
else
pip install -r ${PADDLE_ROOT}/python/requirements.txt
fi
fi
if [ "$SYSTEM" == "Darwin" ]; then
WITH_DISTRIBUTE="OFF"
WITH_AVX=${WITH_AVX:-ON}
WITH_ARM=${WITH_ARM:-OFF}
INFERENCE_DEMO_INSTALL_DIR=${INFERENCE_DEMO_INSTALL_DIR:-~/.cache/inference_demo}
else
INFERENCE_DEMO_INSTALL_DIR=${INFERENCE_DEMO_INSTALL_DIR:-/root/.cache/inference_demo}
fi
if [ -z "${WITH_CPP_TEST}" ] && [ "${WITH_TESTING}" == "ON" ];then
pip install PyGithub
python ${PADDLE_ROOT}/tools/check_only_change_python_files.py
if [ -f "${PADDLE_ROOT}/build/only_change_python_file.txt" ];then
export WITH_CPP_TEST=OFF
else
export WITH_CPP_TEST=ON
fi
fi
distributed_flag=${WITH_DISTRIBUTE:-OFF}
gloo_flag=${distributed_flag}
pscore_flag=${distributed_flag}
if [ "$CMD" != "assert_file_approvals" ];then
which python
python -V
python -m pip install distro
python ${PADDLE_ROOT}/tools/summary_env.py
bash ${PADDLE_ROOT}/tools/get_cpu_info.sh
fi
echo "if you use setup.py to compile,please export envs as following in /paddle ..."
cat << EOF
========================================
export CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE:-Release} WITH_GPU=${WITH_GPU:-OFF} WITH_SHARED_PHI=${WITH_SHARED_PHI:-OFF} WITH_TENSORRT=${WITH_TENSORRT:-ON} WITH_OPENVINO=${WITH_OPENVINO:-OFF} WITH_ROCM=${WITH_ROCM:-OFF} WITH_CINN=${WITH_CINN:-OFF} WITH_DISTRIBUTE=${distributed_flag} WITH_MKL=${WITH_MKL:-ON} WITH_AVX=${WITH_AVX:-OFF} CUDA_ARCH_NAME=${CUDA_ARCH_NAME:-All} NEW_RELEASE_PYPI=${NEW_RELEASE_PYPI:-OFF} NEW_RELEASE_ALL=${NEW_RELEASE_ALL:-OFF} NEW_RELEASE_JIT=${NEW_RELEASE_JIT:-OFF} WITH_PYTHON=${WITH_PYTHON:-ON} CUDNN_ROOT=/usr/ WITH_TESTING=${WITH_TESTING:-ON} WITH_COVERAGE=${WITH_COVERAGE:-OFF} WITH_INCREMENTAL_COVERAGE=${WITH_INCREMENTAL_COVERAGE:-OFF} CMAKE_MODULE_PATH=/opt/rocm/hip/cmake CMAKE_EXPORT_COMPILE_COMMANDS=ON WITH_INFERENCE_API_TEST=${WITH_INFERENCE_API_TEST:-ON} INFERENCE_DEMO_INSTALL_DIR=${INFERENCE_DEMO_INSTALL_DIR} PY_VERSION=${PY_VERSION:-3.10} CMAKE_INSTALL_PREFIX=${INSTALL_PREFIX:-/paddle/build} WITH_GLOO=${gloo_flag} WITH_XPU=${WITH_XPU:-OFF} WITH_IPU=${WITH_IPU:-OFF} XPU_SDK_ROOT=${XPU_SDK_ROOT:-""} WITH_XPU_BKCL=${WITH_XPU_BKCL:-OFF} WITH_XPU_XHPC=${WITH_XPU_XHPC:-OFF} WITH_XPU_XFT=${WITH_XPU_XFT:-OFF} WITH_XPU_XRE5=${WITH_XPU_XRE5:-OFF} WITH_XPU_FFT=${WITH_XPU_FFT:-OFF} WITH_ARM=${WITH_ARM:-OFF} WITH_STRIP=${WITH_STRIP:-ON} ON_INFER=${ON_INFER:-OFF} CUDA_ARCH_BIN=${CUDA_ARCH_BIN} WITH_RECORD_BUILDTIME=${WITH_RECORD_BUILDTIME:-OFF} WITH_UNITY_BUILD=${WITH_UNITY_BUILD:-OFF} WITH_ONNXRUNTIME=${WITH_ONNXRUNTIME:-OFF} WITH_CUDNN_FRONTEND=${WITH_CUDNN_FRONTEND:-OFF} WITH_CPP_TEST=${WITH_CPP_TEST:-OFF} WITH_FA_BUILD_WITH_CACHE=${WITH_FA_BUILD_WITH_CACHE:-ON}
========================================
EOF
echo "if you use cmake to compile,please Configuring cmake in /paddle/build ..."
cat <<EOF
========================================
cmake .. -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE:-Release} -DWITH_GPU=${WITH_GPU:-OFF} -DWITH_SHARED_PHI=${WITH_SHARED_PHI:-OFF} -DWITH_TENSORRT=${WITH_TENSORRT:-ON} -DWITH_OPENVINO=${WITH_OPENVINO:-OFF} -DWITH_ROCM=${WITH_ROCM:-OFF} -DWITH_CINN=${WITH_CINN:-OFF} -DWITH_DISTRIBUTE=${distributed_flag} -DWITH_MKL=${WITH_MKL:-ON} -DWITH_AVX=${WITH_AVX:-OFF} -DCUDA_ARCH_NAME=${CUDA_ARCH_NAME:-All} -DNEW_RELEASE_PYPI=${NEW_RELEASE_PYPI:-OFF} -DNEW_RELEASE_ALL=${NEW_RELEASE_ALL:-OFF} -DNEW_RELEASE_JIT=${NEW_RELEASE_JIT:-OFF} -DWITH_PYTHON=${WITH_PYTHON:-ON} -DCUDNN_ROOT=/usr/ -DWITH_TESTING=${WITH_TESTING:-ON} -DWITH_COVERAGE=${WITH_COVERAGE:-OFF} -DWITH_INCREMENTAL_COVERAGE=${WITH_INCREMENTAL_COVERAGE:-OFF} -DCMAKE_MODULE_PATH=/opt/rocm/hip/cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DWITH_INFERENCE_API_TEST=${WITH_INFERENCE_API_TEST:-ON} -DINFERENCE_DEMO_INSTALL_DIR=${INFERENCE_DEMO_INSTALL_DIR} -DPY_VERSION=${PY_VERSION:-3.10} -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX:-/paddle/build} -DWITH_PSLIB=${pslib_flag} -DWITH_GLOO=${gloo_flag} -DWITH_XPU=${WITH_XPU:-OFF} -DWITH_IPU=${WITH_IPU:-OFF} -DXPU_SDK_ROOT=${XPU_SDK_ROOT:-""} -DWITH_XPU_BKCL=${WITH_XPU_BKCL:-OFF} -DWITH_XPU_XHPC=${WITH_XPU_XHPC:-OFF} -DWITH_XPU_XFT=${WITH_XPU_XFT:-OFF} -DWITH_XPU_XRE5=${WITH_XPU_XRE5:-OFF} -DWITH_XPU_FFT=${WITH_XPU_FFT:-OFF} -DWITH_ARM=${WITH_ARM:-OFF} -DWITH_STRIP=${WITH_STRIP:-ON} -DON_INFER=${ON_INFER:-OFF} -DCUDA_ARCH_BIN=${CUDA_ARCH_BIN} -DWITH_RECORD_BUILDTIME=${WITH_RECORD_BUILDTIME:-OFF} -DWITH_UNITY_BUILD=${WITH_UNITY_BUILD:-OFF} -DWITH_ONNXRUNTIME=${WITH_ONNXRUNTIME:-OFF} -DWITH_CUDNN_FRONTEND=${WITH_CUDNN_FRONTEND:-OFF} -DWITH_CPP_TEST=${WITH_CPP_TEST:-OFF} -DWITH_FA_BUILD_WITH_CACHE=${WITH_FA_BUILD_WITH_CACHE:-ON}
========================================
EOF
export CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE:-Release}
export WITH_GPU=${WITH_GPU:-OFF}
export WITH_TENSORRT=${WITH_TENSORRT:-ON}
export WITH_OPENVINO=${WITH_OPENVINO:-OFF}
export WITH_ROCM=${WITH_ROCM:-OFF}
export WITH_CINN=${WITH_CINN:-OFF}
export WITH_DISTRIBUTE=${distributed_flag}
export WITH_MKL=${WITH_MKL:-ON}
export WITH_AVX=${WITH_AVX:-OFF}
export CUDA_ARCH_NAME=${CUDA_ARCH_NAME:-All}
export NEW_RELEASE_PYPI=${NEW_RELEASE_PYPI:-OFF}
export NEW_RELEASE_ALL=${NEW_RELEASE_ALL:-OFF}
export NEW_RELEASE_JIT=${NEW_RELEASE_JIT:-OFF}
export WITH_PYTHON=${WITH_PYTHON:-ON}
export CUDNN_ROOT=/usr/
export WITH_TESTING=${WITH_TESTING:-ON}
export WITH_COVERAGE=${WITH_COVERAGE:-OFF}
export WITH_INCREMENTAL_COVERAGE=${WITH_INCREMENTAL_COVERAGE:-OFF}
export CMAKE_MODULE_PATH=/opt/rocm/hip/cmake
export CMAKE_EXPORT_COMPILE_COMMANDS=ON
export WITH_INFERENCE_API_TEST=${WITH_INFERENCE_API_TEST:-ON}
export INFERENCE_DEMO_INSTALL_DIR=${INFERENCE_DEMO_INSTALL_DIR}
export PY_VERSION=${PY_VERSION:-3.10}
export CMAKE_INSTALL_PREFIX=${INSTALL_PREFIX:-/paddle/build}
export WITH_GLOO=${gloo_flag}
export WITH_XPU=${WITH_XPU:-OFF}
export WITH_IPU=${WITH_IPU:-OFF}
export XPU_SDK_ROOT=${XPU_SDK_ROOT:-""}
export WITH_XPU_BKCL=${WITH_XPU_BKCL:-OFF}
export WITH_XPU_XHPC=${WITH_XPU_XHPC:-OFF}
export WITH_XPU_XFT=${WITH_XPU_XFT:-OFF}
export WITH_XPU_XRE5=${WITH_XPU_XRE5:-OFF}
export WITH_XPU_FFT=${WITH_XPU_FFT:-OFF}
export WITH_ARM=${WITH_ARM:-OFF}
export WITH_STRIP=${WITH_STRIP:-ON}
export ON_INFER=${ON_INFER:-OFF}
export CUDA_ARCH_BIN=${CUDA_ARCH_BIN}
export WITH_RECORD_BUILDTIME=${WITH_RECORD_BUILDTIME:-OFF}
export WITH_UNITY_BUILD=${WITH_UNITY_BUILD:-OFF}
export WITH_ONNXRUNTIME=${WITH_ONNXRUNTIME:-OFF}
export WITH_CUDNN_FRONTEND=${WITH_CUDNN_FRONTEND:-OFF}
export WITH_SHARED_PHI=${WITH_SHARED_PHI:-OFF}
export WITH_NVCC_LAZY=${WITH_NVCC_LAZY:-ON}
export WITH_CPP_TEST=${WITH_CPP_TEST:-ON}
export WITH_FA_BUILD_WITH_CACHE=${WITH_FA_BUILD_WITH_CACHE:-ON}
if [ "$SYSTEM" == "Linux" ];then
if [ `nproc` -gt 16 ];then
parallel_number=$(expr `nproc` - 8)
else
parallel_number=`nproc`
fi
else
parallel_number=8
fi
if [ "$3" != "" ]; then
parallel_number=$3
fi
# reset ccache zero stats for collect PR's actual hit rate
if [ "${MAX_JOBS}" == "" ]; then
export MAX_JOBS=${parallel_number}
fi
ccache -z
cd ..
if [ "${PYTHON_EXECUTABLE}" != "" ];then
if [ "$SYSTEM" == "Darwin" ]; then
${PYTHON_EXECUTABLE} setup.py $2 --plat-name=macosx_10_9_x86_64;build_error=$?
else
${PYTHON_EXECUTABLE} setup.py $2;build_error=$?
fi
else
if [ "$SYSTEM" == "Darwin" ]; then
python setup.py $2 --plat-name=macosx_10_9_x86_64;build_error=$?
else
python setup.py $2;build_error=$?
fi
fi
# ci will collect ccache hit rate
collect_ccache_hits
if [ "$build_error" != 0 ];then
exit 7;
fi
build_size
endTime_s=`date +%s`
[ -n "$startTime_firstBuild" ] && startTime_s=$startTime_firstBuild
echo "Build Time: $[ $endTime_s - $startTime_s ]s"
echo "ipipe_log_param_Build_Time: $[ $endTime_s - $startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
}
function run_setup_mac(){
startTime_s=`date +%s`
mkdir -p ${PADDLE_ROOT}/build
cd ${PADDLE_ROOT}/build
# Build script will not fail if *.deb does not exist
rm *.deb 2>/dev/null || true
# Delete previous built egg packages
rm -rf ${PADDLE_ROOT}/dist 2>/dev/null || true
# Delete previous built paddle cache
rm -rf ${PADDLE_ROOT}/build/python/paddle 2>/dev/null || true
SYSTEM=`uname -s`
if [ "$SYSTEM" == "Darwin" ]; then
echo "Using python abi: $1"
if [ "$1" == "cp310-cp310" ]; then
if [ -d "/Library/Frameworks/Python.framework/Versions/3.10" ]; then
export LD_LIBRARY_PATH=/Library/Frameworks/Python.framework/Versions/3.10/lib/
export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}:/Library/Frameworks/Python.framework/Versions/3.10/lib/
export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}:${PADDLE_ROOT}/build/third_party/install/lapack/lib
export PATH=/Library/Frameworks/Python.framework/Versions/3.10/bin/:${PATH}
#after changing "PYTHON_LIBRARY:FILEPATH" to "PYTHON_LIBRARY" ,we can use export
export PYTHON_EXECUTABLE=/Library/Frameworks/Python.framework/Versions/3.10/bin/python3
export PYTHON_INCLUDE_DIR=/Library/Frameworks/Python.framework/Versions/3.10/include/python3.10/
export PYTHON_LIBRARY=/Library/Frameworks/Python.framework/Versions/3.10/lib/libpython3.10.dylib
pip3.10 install --user -r ${PADDLE_ROOT}/python/requirements.txt
else
exit 1
fi
elif [ "$1" == "cp311-cp311" ]; then
if [ -d "/Library/Frameworks/Python.framework/Versions/3.11" ]; then
export LD_LIBRARY_PATH=/Library/Frameworks/Python.framework/Versions/3.11/lib/
export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}:/Library/Frameworks/Python.framework/Versions/3.11/lib/
export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}:${PADDLE_ROOT}/build/third_party/install/lapack/lib
export PATH=/Library/Frameworks/Python.framework/Versions/3.11/bin/:${PATH}
#after changing "PYTHON_LIBRARY:FILEPATH" to "PYTHON_LIBRARY" ,we can use export
export PYTHON_EXECUTABLE=/Library/Frameworks/Python.framework/Versions/3.11/bin/python3
export PYTHON_INCLUDE_DIR=/Library/Frameworks/Python.framework/Versions/3.11/include/python3.11/
export PYTHON_LIBRARY=/Library/Frameworks/Python.framework/Versions/3.11/lib/libpython3.11.dylib
pip3.11 install --user -r ${PADDLE_ROOT}/python/requirements.txt
else
exit 1
fi
elif [ "$1" == "cp312-cp312" ]; then
if [ -d "/Library/Frameworks/Python.framework/Versions/3.12" ]; then
export LD_LIBRARY_PATH=/Library/Frameworks/Python.framework/Versions/3.12/lib/
export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}:/Library/Frameworks/Python.framework/Versions/3.12/lib/
export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}:${PADDLE_ROOT}/build/third_party/install/lapack/lib
export PATH=/Library/Frameworks/Python.framework/Versions/3.12/bin/:${PATH}
#after changing "PYTHON_LIBRARY:FILEPATH" to "PYTHON_LIBRARY" ,we can use export
export PYTHON_EXECUTABLE=/Library/Frameworks/Python.framework/Versions/3.12/bin/python3
export PYTHON_INCLUDE_DIR=/Library/Frameworks/Python.framework/Versions/3.12/include/python3.12/
export PYTHON_LIBRARY=/Library/Frameworks/Python.framework/Versions/3.12/lib/libpython3.12.dylib
pip3.12 install --user -r ${PADDLE_ROOT}/python/requirements.txt
else
exit 1
fi
elif [ "$1" == "cp313-cp313" ]; then
if [ -d "/Library/Frameworks/Python.framework/Versions/3.13" ]; then
export LD_LIBRARY_PATH=/Library/Frameworks/Python.framework/Versions/3.13/lib/
export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}:/Library/Frameworks/Python.framework/Versions/3.13/lib/
export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}:${PADDLE_ROOT}/build/third_party/install/lapack/lib
export PATH=/Library/Frameworks/Python.framework/Versions/3.13/bin/:${PATH}
#after changing "PYTHON_LIBRARY:FILEPATH" to "PYTHON_LIBRARY" ,we can use export
export PYTHON_EXECUTABLE=/Library/Frameworks/Python.framework/Versions/3.13/bin/python3
export PYTHON_INCLUDE_DIR=/Library/Frameworks/Python.framework/Versions/3.13/include/python3.13/
export PYTHON_LIBRARY=/Library/Frameworks/Python.framework/Versions/3.13/lib/libpython3.13.dylib
pip3.13 install --user -r ${PADDLE_ROOT}/python/requirements.txt
else
exit 1
fi
elif [ "$1" == "cp314-cp314" ]; then
if [ -d "/Library/Frameworks/Python.framework/Versions/3.14" ]; then
export LD_LIBRARY_PATH=/Library/Frameworks/Python.framework/Versions/3.14/lib/
export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}:/Library/Frameworks/Python.framework/Versions/3.14/lib/
export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}:${PADDLE_ROOT}/build/third_party/install/lapack/lib
export PATH=/Library/Frameworks/Python.framework/Versions/3.14/bin/:${PATH}
#after changing "PYTHON_LIBRARY:FILEPATH" to "PYTHON_LIBRARY" ,we can use export
export PYTHON_EXECUTABLE=/Library/Frameworks/Python.framework/Versions/3.14/bin/python3
export PYTHON_INCLUDE_DIR=/Library/Frameworks/Python.framework/Versions/3.14/include/python3.14/
export PYTHON_LIBRARY=/Library/Frameworks/Python.framework/Versions/3.14/lib/libpython3.14.dylib
pip3.14 install --user -r ${PADDLE_ROOT}/python/requirements.txt
else
exit 1
fi
fi
else
if [ "$1" != "" ]; then
echo "using python abi: $1"
if [ "$1" == "cp310-cp310" ]; then
export LD_LIBRARY_PATH=/opt/_internal/cpython-3.10.0/lib/:${LD_LIBRARY_PATH}
export PATH=/opt/_internal/cpython-3.10.0/bin/:${PATH}
#after changing "PYTHON_LIBRARY:FILEPATH" to "PYTHON_LIBRARY" ,we can use export
export PYTHON_EXECUTABLE=/opt/_internal/cpython-3.10.0/bin/python3.10
export PYTHON_INCLUDE_DIR=/opt/_internal/cpython-3.10.0/include/python3.10
export PYTHON_LIBRARIES=/opt/_internal/cpython-3.10.0/lib/libpython3.so
pip3.10 install -r ${PADDLE_ROOT}/python/requirements.txt
elif [ "$1" == "cp311-cp311" ]; then
export LD_LIBRARY_PATH=/opt/_internal/cpython-3.11.0/lib/:${LD_LIBRARY_PATH}
export PATH=/opt/_internal/cpython-3.11.0/bin/:${PATH}
#after changing "PYTHON_LIBRARY:FILEPATH" to "PYTHON_LIBRARY" ,we can use export
export PYTHON_EXECUTABLE=/opt/_internal/cpython-3.11.0/bin/python3.11
export PYTHON_INCLUDE_DIR=/opt/_internal/cpython-3.11.0/include/python3.11
export PYTHON_LIBRARIES=/opt/_internal/cpython-3.11.0/lib/libpython3.so
pip3.11 install -r ${PADDLE_ROOT}/python/requirements.txt
elif [ "$1" == "cp312-cp312" ]; then
export LD_LIBRARY_PATH=/opt/_internal/cpython-3.12.0/lib/:${LD_LIBRARY_PATH}
export PATH=/opt/_internal/cpython-3.12.0/bin/:${PATH}
#after changing "PYTHON_LIBRARY:FILEPATH" to "PYTHON_LIBRARY" ,we can use export
export PYTHON_EXECUTABLE=/opt/_internal/cpython-3.12.0/bin/python3.12
export PYTHON_INCLUDE_DIR=/opt/_internal/cpython-3.12.0/include/python3.12
export PYTHON_LIBRARIES=/opt/_internal/cpython-3.12.0/lib/libpython3.so
pip3.12 install -r ${PADDLE_ROOT}/python/requirements.txt
elif [ "$1" == "cp313-cp313" ]; then
export LD_LIBRARY_PATH=/opt/_internal/cpython-3.13.0/lib/:${LD_LIBRARY_PATH}
export PATH=/opt/_internal/cpython-3.13.0/bin/:${PATH}
#after changing "PYTHON_LIBRARY:FILEPATH" to "PYTHON_LIBRARY" ,we can use export
export PYTHON_EXECUTABLE=/opt/_internal/cpython-3.13.0/bin/python3.13
export PYTHON_INCLUDE_DIR=/opt/_internal/cpython-3.13.0/include/python3.13
export PYTHON_LIBRARIES=/opt/_internal/cpython-3.13.0/lib/libpython3.so
pip3.13 install -r ${PADDLE_ROOT}/python/requirements.txt
elif [ "$1" == "cp314-cp314" ]; then
export LD_LIBRARY_PATH=/opt/_internal/cpython-3.14.0/lib/:${LD_LIBRARY_PATH}
export PATH=/opt/_internal/cpython-3.14.0/bin/:${PATH}
#after changing "PYTHON_LIBRARY:FILEPATH" to "PYTHON_LIBRARY" ,we can use export
export PYTHON_EXECUTABLE=/opt/_internal/cpython-3.14.0/bin/python3.14
export PYTHON_INCLUDE_DIR=/opt/_internal/cpython-3.14.0/include/python3.14
export PYTHON_LIBRARIES=/opt/_internal/cpython-3.14.0/lib/libpython3.so
pip3.14 install -r ${PADDLE_ROOT}/python/requirements.txt
fi
else
pip install -r ${PADDLE_ROOT}/python/requirements.txt
fi
fi
if [ "$SYSTEM" == "Darwin" ]; then
WITH_DISTRIBUTE="OFF"
WITH_AVX=${WITH_AVX:-ON}
WITH_ARM=${WITH_ARM:-OFF}
INFERENCE_DEMO_INSTALL_DIR=${INFERENCE_DEMO_INSTALL_DIR:-~/.cache/inference_demo}
else
INFERENCE_DEMO_INSTALL_DIR=${INFERENCE_DEMO_INSTALL_DIR:-/root/.cache/inference_demo}
fi
distributed_flag=${WITH_DISTRIBUTE:-OFF}
gloo_flag=${distributed_flag}
pscore_flag=${distributed_flag}
if [ "$CMD" != "assert_file_approvals" ];then
which python
python -V
python -m pip install distro
python ${PADDLE_ROOT}/tools/summary_env.py
bash ${PADDLE_ROOT}/tools/get_cpu_info.sh
fi
echo "if you use setup.py to compile,please export envs as following in /paddle ..."
cat << EOF
========================================
export CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE:-Release} WITH_GPU=${WITH_GPU:-OFF} WITH_TENSORRT=${WITH_TENSORRT:-ON} WITH_ROCM=${WITH_ROCM:-OFF} WITH_CINN=${WITH_CINN:-OFF} WITH_DISTRIBUTE=${distributed_flag} WITH_MKL=${WITH_MKL:-ON} WITH_AVX=${WITH_AVX:-OFF} CUDA_ARCH_NAME=${CUDA_ARCH_NAME:-All} NEW_RELEASE_PYPI=${NEW_RELEASE_PYPI:-OFF} NEW_RELEASE_ALL=${NEW_RELEASE_ALL:-OFF} NEW_RELEASE_JIT=${NEW_RELEASE_JIT:-OFF} WITH_PYTHON=${WITH_PYTHON:-ON} CUDNN_ROOT=/usr/ WITH_TESTING=${WITH_TESTING:-ON} WITH_COVERAGE=${WITH_COVERAGE:-OFF} WITH_INCREMENTAL_COVERAGE=${WITH_INCREMENTAL_COVERAGE:-OFF} CMAKE_MODULE_PATH=/opt/rocm/hip/cmake CMAKE_EXPORT_COMPILE_COMMANDS=ON WITH_INFERENCE_API_TEST=${WITH_INFERENCE_API_TEST:-ON} INFERENCE_DEMO_INSTALL_DIR=${INFERENCE_DEMO_INSTALL_DIR} PY_VERSION=${PY_VERSION:-3.10} CMAKE_INSTALL_PREFIX=${INSTALL_PREFIX:-/paddle/build} WITH_GLOO=${gloo_flag} WITH_XPU=${WITH_XPU:-OFF} WITH_IPU=${WITH_IPU:-OFF} XPU_SDK_ROOT=${XPU_SDK_ROOT:-""} WITH_XPU_BKCL=${WITH_XPU_BKCL:-OFF} WITH_XPU_XHPC=${WITH_XPU_XHPC:-OFF} WITH_XPU_XFT=${WITH_XPU_XFT:-OFF} WITH_ARM=${WITH_ARM:-OFF} WITH_STRIP=${WITH_STRIP:-ON} ON_INFER=${ON_INFER:-OFF} CUDA_ARCH_BIN=${CUDA_ARCH_BIN} WITH_RECORD_BUILDTIME=${WITH_RECORD_BUILDTIME:-OFF} WITH_UNITY_BUILD=${WITH_UNITY_BUILD:-OFF} WITH_ONNXRUNTIME=${WITH_ONNXRUNTIME:-OFF} WITH_CUDNN_FRONTEND=${WITH_CUDNN_FRONTEND:-OFF} WITH_SHARED_PHI=${WITH_SHARED_PHI:-OFF}
========================================
EOF
echo "if you use cmake to compile,please Configuring cmake in /paddle/build ..."
cat <<EOF
========================================
cmake .. -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE:-Release} -DWITH_GPU=${WITH_GPU:-OFF} -DWITH_TENSORRT=${WITH_TENSORRT:-ON} -DWITH_ROCM=${WITH_ROCM:-OFF} -DWITH_CINN=${WITH_CINN:-OFF} -DWITH_DISTRIBUTE=${distributed_flag} -DWITH_MKL=${WITH_MKL:-ON} -DWITH_AVX=${WITH_AVX:-OFF} -DCUDA_ARCH_NAME=${CUDA_ARCH_NAME:-All} -DNEW_RELEASE_PYPI=${NEW_RELEASE_PYPI:-OFF} -DNEW_RELEASE_ALL=${NEW_RELEASE_ALL:-OFF} -DNEW_RELEASE_JIT=${NEW_RELEASE_JIT:-OFF} -DWITH_PYTHON=${WITH_PYTHON:-ON} -DCUDNN_ROOT=/usr/ -DWITH_TESTING=${WITH_TESTING:-ON} -DWITH_COVERAGE=${WITH_COVERAGE:-OFF} -DWITH_INCREMENTAL_COVERAGE=${WITH_INCREMENTAL_COVERAGE:-OFF} -DCMAKE_MODULE_PATH=/opt/rocm/hip/cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DWITH_INFERENCE_API_TEST=${WITH_INFERENCE_API_TEST:-ON} -DINFERENCE_DEMO_INSTALL_DIR=${INFERENCE_DEMO_INSTALL_DIR} -DPY_VERSION=${PY_VERSION:-3.10} -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX:-/paddle/build} -DWITH_PSLIB=${pslib_flag} -DWITH_GLOO=${gloo_flag} -DWITH_XPU=${WITH_XPU:-OFF} -DWITH_IPU=${WITH_IPU:-OFF} -DXPU_SDK_ROOT=${XPU_SDK_ROOT:-""} -DWITH_XPU_BKCL=${WITH_XPU_BKCL:-OFF} -DWITH_XPU_XHPC=${WITH_XPU_XHPC:-OFF} -DWITH_XPU_XFT=${WITH_XPU_XFT:-OFF} -DWITH_ARM=${WITH_ARM:-OFF} -DWITH_STRIP=${WITH_STRIP:-ON} -DON_INFER=${ON_INFER:-OFF} -DCUDA_ARCH_BIN=${CUDA_ARCH_BIN} -DWITH_RECORD_BUILDTIME=${WITH_RECORD_BUILDTIME:-OFF} -DWITH_UNITY_BUILD=${WITH_UNITY_BUILD:-OFF} -DWITH_ONNXRUNTIME=${WITH_ONNXRUNTIME:-OFF} -DWITH_CUDNN_FRONTEND=${WITH_CUDNN_FRONTEND:-OFF} -DWITH_SHARED_PHI=${WITH_SHARED_PHI:-OFF}
========================================
EOF
export CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE:-Release}
export WITH_GPU=${WITH_GPU:-OFF}
export WITH_TENSORRT=${WITH_TENSORRT:-ON}
export WITH_ROCM=${WITH_ROCM:-OFF}
export WITH_CINN=${WITH_CINN:-OFF}
export WITH_DISTRIBUTE=${distributed_flag}
export WITH_MKL=${WITH_MKL:-ON}
export WITH_AVX=${WITH_AVX:-OFF}
export CUDA_ARCH_NAME=${CUDA_ARCH_NAME:-All}
export NEW_RELEASE_PYPI=${NEW_RELEASE_PYPI:-OFF}
export NEW_RELEASE_ALL=${NEW_RELEASE_ALL:-OFF}
export NEW_RELEASE_JIT=${NEW_RELEASE_JIT:-OFF}
export WITH_PYTHON=${WITH_PYTHON:-ON}
export CUDNN_ROOT=/usr/
export WITH_TESTING=${WITH_TESTING:-ON}
export WITH_COVERAGE=${WITH_COVERAGE:-OFF}
export WITH_INCREMENTAL_COVERAGE=${WITH_INCREMENTAL_COVERAGE:-OFF}
export CMAKE_MODULE_PATH=/opt/rocm/hip/cmake
export CMAKE_EXPORT_COMPILE_COMMANDS=ON
export WITH_INFERENCE_API_TEST=${WITH_INFERENCE_API_TEST:-ON}
export INFERENCE_DEMO_INSTALL_DIR=${INFERENCE_DEMO_INSTALL_DIR}
export PY_VERSION=${PY_VERSION:-3.10}
export CMAKE_INSTALL_PREFIX=${INSTALL_PREFIX:-/paddle/build}
export WITH_GLOO=${gloo_flag}
export WITH_XPU=${WITH_XPU:-OFF}
export WITH_IPU=${WITH_IPU:-OFF}
export XPU_SDK_ROOT=${XPU_SDK_ROOT:-""}
export WITH_XPU_BKCL=${WITH_XPU_BKCL:-OFF}
export WITH_XPU_XHPC=${WITH_XPU_XHPC:-OFF}
export WITH_XPU_XFT=${WITH_XPU_XFT:-OFF}
export WITH_ARM=${WITH_ARM:-OFF}
export WITH_STRIP=${WITH_STRIP:-ON}
export ON_INFER=${ON_INFER:-OFF}
export CUDA_ARCH_BIN=${CUDA_ARCH_BIN}
export WITH_RECORD_BUILDTIME=${WITH_RECORD_BUILDTIME:-OFF}
export WITH_UNITY_BUILD=${WITH_UNITY_BUILD:-OFF}
export WITH_ONNXRUNTIME=${WITH_ONNXRUNTIME:-OFF}
export WITH_CUDNN_FRONTEND=${WITH_CUDNN_FRONTEND:-OFF}
export WITH_SHARED_PHI=${WITH_SHARED_PHI:-OFF}
export MAX_JOBS=8
# reset ccache zero stats for collect PR's actual hit rate
ccache -z
cd ..
if [ "${PYTHON_EXECUTABLE}" != "" ];then
if [ "$SYSTEM" == "Darwin" ]; then
${PYTHON_EXECUTABLE} setup.py $2 --plat-name=macosx_10_9_x86_64;build_error=$?
else
${PYTHON_EXECUTABLE} setup.py $2;build_error=$?
fi
else
if [ "$SYSTEM" == "Darwin" ]; then
python setup.py $2 --plat-name=macosx_10_9_x86_64;build_error=$?
else
python setup.py $2;build_error=$?
fi
fi
# ci will collect ccache hit rate
collect_ccache_hits
if [ "$build_error" != 0 ];then
exit 7;
fi
build_size
endTime_s=`date +%s`
[ -n "$startTime_firstBuild" ] && startTime_s=$startTime_firstBuild
echo "Build Time: $[ $endTime_s - $startTime_s ]s"
echo "ipipe_log_param_Build_Time: $[ $endTime_s - $startTime_s ]s" >> ${PADDLE_ROOT}/build/build_summary.txt
}
function main() {
local CMD=$1
local parallel_number=$2
init
case $CMD in
build_only)
if [ "$WITH_CINN" == "ON" ];then
export PADDLE_CUDA_INSTALL_REQUIREMENTS=${PADDLE_CUDA_INSTALL_REQUIREMENTS:-ON}
fi
run_setup ${PYTHON_ABI:-""} bdist_wheel ${parallel_number}
;;
cicheck_build)
if [ "$WITH_CINN" == "ON" ];then
export PADDLE_CUDA_INSTALL_REQUIREMENTS=${PADDLE_CUDA_INSTALL_REQUIREMENTS:-ON}
fi
run_setup ${PYTHON_ABI:-""} bdist_wheel ${parallel_number}
clean_build_files
;;
build_pr_dev)
export PADDLE_CUDA_INSTALL_REQUIREMENTS=ON
build_pr_and_develop
check_sequence_op_unittest
clean_build_files
;;
build_dev_test)
cmake_gen_and_build ${PYTHON_ABI:-""} ${parallel_number}
get_build_time_file
;;
build_and_check)
set +e
generate_upstream_develop_api_spec ${PYTHON_ABI:-""} ${parallel_number}
cmake_gen_and_build ${PYTHON_ABI:-""} ${parallel_number}
check_sequence_op_unittest
generate_api_spec ${PYTHON_ABI:-""} "PR"
set +e
exec_samplecode_checking
assert_api_spec_approvals
;;
build_and_check_cpu)
set +e
run_setup ${PYTHON_ABI:-""} bdist_wheel ${parallel_number}
generate_api_spec ${PYTHON_ABI:-""} "PR"
generate_upstream_develop_api_spec ${PYTHON_ABI:-""} ${parallel_number}
check_sequence_op_unittest
;;
build_and_check_gpu)
set +e
exec_samplecode_checking
assert_api_spec_approvals
;;
check_whl_size)
check_whl_size
;;
build)
cmake_gen ${PYTHON_ABI:-""}
build ${parallel_number}
gen_dockerfile ${PYTHON_ABI:-""}
assert_api_spec_approvals
;;
avx_build)
avx_build
gen_dockerfile ${PYTHON_ABI:-""}
;;
noavx_build)
noavx_build
gen_dockerfile ${PYTHON_ABI:-""}
;;
mac_m1_arm)
mac_m1_arm_build
gen_dockerfile ${PYTHON_ABI:-""}
;;
avx_build_and_test)
avx_build
gen_dockerfile ${PYTHON_ABI:-""}
parallel_test_base
;;
noavx_build_and_test)
noavx_build
gen_dockerfile ${PYTHON_ABI:-""}
parallel_test_base
;;
test)
parallel_test
if [ "${WITH_CINN}" == "ON" ] ; then
check_coverage
fi
;;
single_test)
single_test $2
;;
bind_test)
bind_test
;;
distribute_test)
distribute_test
;;
gen_doc_lib)
gen_doc_lib $2
;;
dockerfile)
gen_dockerfile ${PYTHON_ABI:-""}
;;
fluid_inference_lib)
cmake_gen ${PYTHON_ABI:-""}
gen_fluid_lib ${parallel_number}
tar_fluid_lib
test_fluid_lib
;;
build_inference_lib)
if [ "${WITH_PYTHON}" == "OFF" ] ; then
python ${PADDLE_ROOT}/tools/remove_grad_op_and_kernel.py
fi
cmake_gen ${PYTHON_ABI:-""}
gen_fluid_lib ${parallel_number}
;;
check_style)
check_style
;;
cicheck)
cmake_gen ${PYTHON_ABI:-""}
build ${parallel_number}
parallel_test
;;
cicheck_coverage)
check_diff_file_for_coverage
run_setup ${PYTHON_ABI:-""} install ${parallel_number}
parallel_test
check_coverage
;;
cpu_cicheck_coverage)
check_diff_file_for_coverage
export ON_INFER=ON PADDLE_CUDA_INSTALL_REQUIREMENTS=ON
run_setup ${PYTHON_ABI:-""} bdist_wheel ${parallel_number}
check_coverage_added_ut
check_coverage_build
clean_build_files
;;
gpu_cicheck_coverage)
export FLAGS_PIR_OPTEST=True
export ON_INFER=ON
export COVERAGE_FILE=${PADDLE_ROOT}/build/python-coverage.data
is_run_distribute_in_op_test
parallel_test
check_coverage
;;
gpu_cicheck_hybrid)
export FLAGS_PIR_OPTEST=True
parallel_test true
;;
hyg_dcu_test)
parallel_test
if [[ "$IF_DCU" == "ON" ]]; then
hybrid_paddlex
fi
;;
nv_cicheck_coverage)
parallel_test
nv_test
check_coverage
;;
check_coverage_build)
check_coverage_build
;;
ci_preciseTest)
insert_pile_to_h_cu_diff
cmake_gen_and_build ${PYTHON_ABI:-""} ${parallel_number}
get_precise_tests_map_file
;;
ci_parallelTest)
get_parallel_tests_map_file
;;
cicheck_brpc)
cmake_gen ${PYTHON_ABI:-""}
build ${parallel_number}
run_brpc_test
;;
test_inference)
PADDLE_ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}")/../../" && pwd )"
if [ "${WITH_PYTHON}" == "OFF" ] ; then
python ${PADDLE_ROOT}/tools/remove_grad_op_and_kernel.py
fi
gen_fluid_lib ${parallel_number}
test_fluid_lib
#test_fluid_lib_train
#go inference test
test_go_inference_api
check_approvals_of_unittest 3
;;
build_inference)
PADDLE_ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}")/../../" && pwd )"
if [ "${WITH_PYTHON}" == "OFF" ] ; then
python ${PADDLE_ROOT}/tools/remove_grad_op_and_kernel.py
fi
export PADDLE_CUDA_INSTALL_REQUIREMENTS=ON
gen_fluid_lib_by_setup ${parallel_number}
;;
gpu_inference)
test_fluid_lib
test_go_inference_api
check_approvals_of_unittest 3
;;
test_train)
gen_fluid_lib ${parallel_number}
test_fluid_lib_train
;;
assert_file_approvals)
assert_file_diff_approvals
;;
maccheck)
cmake_gen_and_build_mac ${PYTHON_ABI:-""}
run_mac_test ${PYTHON_ABI:-""} ${PROC_RUN:-1}
;;
maccheck_py3)
run_setup_mac ${PYTHON_ABI:-""} bdist_wheel
run_mac_test ${PYTHON_ABI:-""} ${PROC_RUN:-1}
;;
macbuild)
cmake_gen ${PYTHON_ABI:-""}
build_mac
;;
cicheck_py37)
export WITH_SHARED_PHI=ON
run_setup ${PYTHON_ABI:-""} bdist_wheel ${parallel_number}
run_linux_cpu_test ${PYTHON_ABI:-""} ${PROC_RUN:-1}
clean_build_files
;;
test_cicheck_py37)
run_linux_cpu_test ${PYTHON_ABI:-""} ${PROC_RUN:-1}
;;
cicheck_sot)
check_run_sot_ci
export WITH_SHARED_PHI=ON
PYTHON_VERSIONS=(3.10 3.11 3.12 3.13 3.14)
for PY_VERSION in ${PYTHON_VERSIONS[@]}; do
ln -sf $(which python${PY_VERSION}) /usr/local/bin/python
ln -sf $(which pip${PY_VERSION}) /usr/local/bin/pip
run_setup ${PYTHON_ABI:-""} bdist_wheel ${parallel_number}
run_sot_test $PY_VERSION
rm -rf ${PADDLE_ROOT}/build/CMakeCache.txt
done
;;
build_gpubox)
run_setup ${PYTHON_ABI:-""} install ${parallel_number}
;;
check_xpu)
cmake_gen_and_build ${PYTHON_ABI:-""} ${parallel_number}
parallel_test
;;
check_xpu_coverage)
cmake_gen_and_build ${PYTHON_ABI:-""} ${parallel_number}
parallel_test
check_coverage
;;
check_rocm_coverage)
cmake_gen_and_build ${PYTHON_ABI:-""} ${parallel_number}
parallel_test
check_coverage
;;
check_ipu_coverage)
cmake_gen_and_build ${PYTHON_ABI:-""} ${parallel_number}
parallel_test
check_coverage
;;
cmake_gen)
cmake_gen ${PYTHON_ABI:-""}
;;
cmake_gen_in_current_dir)
cmake_gen_in_current_dir ${PYTHON_ABI:-""}
;;
gen_fluid_lib)
gen_fluid_lib ${parallel_number}
;;
test_fluid_lib)
test_fluid_lib
;;
document)
cmake_gen ${PYTHON_ABI:-""}
build ${parallel_number}
build_document_preview
;;
test_op_benchmark)
test_op_benchmark
;;
test_model_benchmark)
test_model_benchmark
;;
trt_convert_test)
# only test trt convert.
trt_convert_test
;;
classify_case_by_cardNum)
# only class case by card num
classify_case_by_cardNum
;;
*)
print_usage
exit 1
;;
esac
set +x
if [[ -f ${PADDLE_ROOT}/build/build_summary.txt ]];then
echo "=====================build summary======================"
cat ${PADDLE_ROOT}/build/build_summary.txt
echo "========================================================"
fi
echo "paddle_build script finished as expected"
}
main $@