run.sh 8.9 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
#!/bin/bash

# Copyright (c) 2021 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.

set -x
PADDLE_ROOT=$1
TURN_ON_MKL=$2 # use MKL or Openblas
TEST_GPU_CPU=$3 # test both GPU/CPU mode or only CPU mode
DATA_DIR=$4 # dataset
TENSORRT_ROOT_DIR=$5 # TensorRT ROOT dir, default to /usr/local/TensorRT
MSVC_STATIC_CRT=$6
inference_install_dir=${PADDLE_ROOT}/build/paddle_inference_install_dir
EXIT_CODE=0 # init default exit code
26
WIN_DETECT=$(echo `uname` | grep "Win") # detect current platform
27
test_suite_list="cpu_tester*" # init test suite list, pass to --gtest_filter
28

29 30 31 32
export RED='\033[0;31m' # red color
export NC='\033[0m' # no color
export YELLOW='\033[33m' # yellow color

33 34
cd `dirname $0`
current_dir=`pwd`
35 36
build_dir=${current_dir}/build
log_dir=${current_dir}/log
37 38

# check mkldnn installation
39 40 41 42
if [ $2 == ON ]; then
  # You can export yourself if move the install path
  MKL_LIB=${inference_install_dir}/third_party/install/mklml/lib
  export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${MKL_LIB}
43
  test_suite_list="${test_suite_list}:mkldnn_tester*"
44
fi
45

46 47
if [ $3 == ON ]; then
  use_gpu_list='true false'
48
  test_suite_list="${test_suite_list}:gpu_tester*"
49 50 51 52
else
  use_gpu_list='false'
fi

53 54
# check tensorrt installation
TENSORRT_COMPILED=$(cat "${inference_install_dir}/version.txt" | grep "WITH_TENSORRT")
55
USE_TENSORRT=OFF
56
if [ -d "$TENSORRT_ROOT_DIR" ] && [ ! -z "$TENSORRT_COMPILED" ]  ; then
57
  USE_TENSORRT=ON
58
  test_suite_list="${test_suite_list}:tensorrt_tester*"
59 60 61 62 63 64 65 66 67 68
fi

function download() {
  url_prefix=$1
  model_name=$2
  mkdir -p $model_name
  cd $model_name
  if [[ -e "${model_name}.tgz" ]]; then
    echo "${model_name}.tgz has been downloaded."
  else
69 70 71 72 73 74 75
      if [ $WIN_DETECT != "" ]; then
        wget -q -Y off ${url_prefix}/${model_name}.tgz
        tar xzf *.tgz
      else
        wget -q --no-proxy ${url_prefix}/${model_name}.tgz
        tar xzf *.tgz
      fi
76 77 78 79 80 81 82 83 84 85 86 87
  fi
  cd ..
}

mkdir -p $DATA_DIR
cd $DATA_DIR
download_list='resnet50'
for model_name in $download_list; do
    url_prefix="https://paddle-inference-dist.bj.bcebos.com/Paddle-Inference-Demo"
    download $url_prefix $model_name
done

88 89 90 91 92 93 94 95 96 97 98 99
ocr_download_list='ocr_det_mv3_db'
for model_name in $ocr_download_list; do
    url_prefix="https://paddle-qa.bj.bcebos.com/inference_model/2.1.1/ocr"
    download $url_prefix $model_name
done

clas_download_list='LeViT'
for model_name in $clas_download_list; do
    url_prefix="https://paddle-qa.bj.bcebos.com/inference_model/2.1.1/class"
    download $url_prefix $model_name
done

100 101 102 103 104 105
nlp_download_list='ernie_text_cls'
for model_name in $nlp_download_list; do
    url_prefix="https://paddle-qa.bj.bcebos.com/inference_model/2.1.1/nlp"
    download $url_prefix $model_name
done

106 107 108 109 110 111
det_download_list='yolov3 ppyolo_mbv3 ppyolov2_r50vd'
for model_name in $det_download_list; do
    url_prefix="https://paddle-qa.bj.bcebos.com/inference_model/2.1.1/detection"
    download $url_prefix $model_name
done

112 113 114 115 116 117
unknown_download_list='resnet50_quant'
for model_name in $unknown_download_list; do
    url_prefix="https://paddle-qa.bj.bcebos.com/inference_model/unknown"
    download $url_prefix $model_name
done

118 119 120 121
function compile_test() {
    mkdir -p ${build_dir}
    cd ${build_dir}
    TEST_NAME=$1
122 123
    if [ $WIN_DETECT != "" ]; then
        cmake .. -G "Visual Studio 15 2017" -A x64 -T host=x64 -DPADDLE_LIB=${inference_install_dir} \
124 125 126 127 128 129
             -DWITH_MKL=$TURN_ON_MKL \
             -DDEMO_NAME=${TEST_NAME} \
             -DWITH_GPU=$TEST_GPU_CPU \
             -DWITH_STATIC_LIB=OFF \
             -DUSE_TENSORRT=$USE_TENSORRT \
             -DTENSORRT_ROOT=$TENSORRT_ROOT_DIR \
130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
             -DMSVC_STATIC_CRT=$MSVC_STATIC_CRT \
             -DWITH_GTEST=ON \
             -DCMAKE_CXX_FLAGS='/std:c++17' \
             -DCMAKE_BUILD_TYPE=Release
        msbuild /maxcpucount /property:Configuration=Release ALL_BUILD.vcxproj
    else
        cmake .. -DPADDLE_LIB=${inference_install_dir} \
                 -DWITH_MKL=$TURN_ON_MKL \
                 -DDEMO_NAME=${TEST_NAME} \
                 -DWITH_GPU=$TEST_GPU_CPU \
                 -DWITH_STATIC_LIB=OFF \
                 -DUSE_TENSORRT=$USE_TENSORRT \
                 -DTENSORRT_ROOT=$TENSORRT_ROOT_DIR \
                 -DWITH_GTEST=ON
        make -j$(nproc)
    fi;
146 147 148 149
    cd -
}


150 151
# compile and run test
cd $current_dir
152 153 154
mkdir -p ${build_dir}
mkdir -p ${log_dir}
cd ${build_dir}
155 156
rm -rf *

157 158 159 160 161
if [ $WIN_DETECT != "" ]; then
    exe_dir=${build_dir}/Release
else
    exe_dir=${build_dir}
fi;
162

163 164 165 166 167 168 169 170 171 172
printf "${YELLOW} start test_resnet50 ${NC} \n";
compile_test "test_resnet50"
${exe_dir}/test_resnet50 \
    --modeldir=$DATA_DIR/resnet50/resnet50 \
    --gtest_filter=${test_suite_list} \
    --gtest_output=xml:${log_dir}/test_resnet50.xml
if [ $? -ne 0 ]; then
    echo "${RED} test_resnet50 runs failed ${NC}" >> ${exe_dir}/test_summary.txt
    EXIT_CODE=8
fi
173

174 175 176 177 178 179 180 181 182 183
printf "${YELLOW} start test_det_mv3_db ${NC} \n";
compile_test "test_det_mv3_db"
${exe_dir}/test_det_mv3_db \
    --modeldir=$DATA_DIR/ocr_det_mv3_db/ocr_det_mv3_db \
    --gtest_filter=${test_suite_list} \
    --gtest_output=xml:${log_dir}/test_det_mv3_db.xml
if [ $? -ne 0 ]; then
    echo "${RED} test_det_mv3_db runs failed ${NC}" >> ${exe_dir}/test_summary.txt
    EXIT_CODE=8
fi
184

185 186 187 188 189 190 191 192 193 194
printf "${YELLOW} start test_LeViT ${NC} \n";
compile_test "test_LeViT"
${exe_dir}/test_LeViT \
    --modeldir=$DATA_DIR/LeViT/LeViT \
    --gtest_filter=${test_suite_list} \
    --gtest_output=xml:${log_dir}/test_LeViT.xml
if [ $? -ne 0 ]; then
    echo "${RED} test_LeViT runs failed ${NC}" >> ${exe_dir}/test_summary.txt
    EXIT_CODE=8
fi
195

196 197 198 199 200 201 202 203 204 205
if [ $WIN_DETECT != "" ]; then
    #TODO(OliverLPH): enable test_ernie_text_cls on windows after fix compile issue
    echo "  skip test_ernie_text_cls  "
else
    printf "${YELLOW} start test_ernie_text_cls ${NC} \n";
    compile_test "test_ernie_text_cls"
    ${exe_dir}/test_ernie_text_cls \
        --modeldir=$DATA_DIR/ernie_text_cls/ernie_text_cls \
        --gtest_filter=${test_suite_list} \
        --gtest_output=xml:${log_dir}/test_ernie_text_cls.xml
206
    if [ $? -ne 0 ]; then
207
        echo "${RED} test_ernie_text_cls runs failed ${NC}" >> ${exe_dir}/test_summary.txt
208
        EXIT_CODE=8
209
    fi
210
fi;
211

212 213 214 215 216 217 218 219 220 221
printf "${YELLOW} start test_yolov3 ${NC} \n";
compile_test "test_yolov3"
${exe_dir}/test_yolov3 \
    --modeldir=$DATA_DIR/yolov3/yolov3 \
    --gtest_filter=${test_suite_list} \
    --gtest_output=xml:${log_dir}/test_yolov3.xml
if [ $? -ne 0 ]; then
    echo "${RED} test_yolov3 runs failed ${NC}" >> ${exe_dir}/test_summary.txt
    EXIT_CODE=8
fi
222

223 224 225 226 227 228 229 230 231 232
printf "${YELLOW} start test_ppyolo_mbv3 ${NC} \n";
compile_test "test_ppyolo_mbv3"
${exe_dir}/test_ppyolo_mbv3 \
    --modeldir=$DATA_DIR/ppyolo_mbv3/ppyolo_mbv3 \
    --gtest_filter=${test_suite_list} \
    --gtest_output=xml:${log_dir}/test_ppyolo_mbv3.xml
if [ $? -ne 0 ]; then
    echo "${RED} test_ppyolo_mbv3 runs failed ${NC}" >> ${exe_dir}/test_summary.txt
    EXIT_CODE=8
fi
233

234 235 236 237 238 239 240 241 242 243
printf "${YELLOW} start test_ppyolov2_r50vd ${NC} \n";
compile_test "test_ppyolov2_r50vd"
${exe_dir}/test_ppyolov2_r50vd \
    --modeldir=$DATA_DIR/ppyolov2_r50vd/ppyolov2_r50vd \
    --gtest_filter=${test_suite_list} \
    --gtest_output=xml:${log_dir}/test_ppyolov2_r50vd.xml
if [ $? -ne 0 ]; then
    echo "${RED} test_ppyolov2_r50vd runs failed ${NC}" >> ${exe_dir}/test_summary.txt
    EXIT_CODE=8
fi
244

245 246 247 248 249 250 251 252 253 254 255
printf "${YELLOW} start test_resnet50_quant ${NC} \n";
compile_test "test_resnet50_quant"
${exe_dir}/test_resnet50_quant \
    --int8dir=$DATA_DIR/resnet50_quant/resnet50_quant/resnet50_quant \
    --modeldir=$DATA_DIR/resnet50/resnet50 \
    --datadir=$DATA_DIR/resnet50_quant/resnet50_quant/imagenet-eval-binary/9.data \
    --gtest_filter=${test_suite_list} \
    --gtest_output=xml:${log_dir}/test_resnet50_quant.xml
if [ $? -ne 0 ]; then
    echo "${RED} test_resnet50_quant runs failed ${NC}" >> ${exe_dir}/test_summary.txt
    EXIT_CODE=8
256 257
fi

258
set +x
259 260 261 262 263 264 265 266 267 268 269

test_suites=$(echo ${test_suite_list} | sed 's/:/ /g')
echo " "
echo "CI Tested Following Patterns: "
echo "=====================test patterns======================"
for test_suite in ${test_suites}; do
  echo "  ${test_suite}"
done
echo "========================================================"
echo " "

270
if [[ -f ${exe_dir}/test_summary.txt ]];then
271 272
  echo " "
  echo "Summary Failed Tests ..."
273
  echo "=====================test summary======================"
274
  echo "The following tests Failed: "
275
  cat ${exe_dir}/test_summary.txt
276
  echo "========================================================"
277
  echo " "
278
fi
279
set -x
280 281 282 283

# tar Gtest output report
tar -zcvf infer_ut_log.tgz ${log_dir}

284 285
echo "infer_ut script finished"
exit ${EXIT_CODE}