paddle_build.bat 27.0 KB
Newer Older
1
@ECHO OFF
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
rem Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved.
rem
rem Licensed under the Apache License, Version 2.0 (the "License");
rem you may not use this file except in compliance with the License.
rem You may obtain a copy of the License at
rem
rem     http://www.apache.org/licenses/LICENSE-2.0
rem
rem Unless required by applicable law or agreed to in writing, software
rem distributed under the License is distributed on an "AS IS" BASIS,
rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rem See the License for the specific language governing permissions and
rem limitations under the License.

rem =================================================
rem       Paddle CI Task On Windows Platform
rem =================================================

20
@ECHO ON
21
setlocal
22

23
rem -------clean up environment-----------
24
set work_dir=%cd%
Z
Zhou Wei 已提交
25
set cache_dir=%work_dir:Paddle=cache%
26 27 28
if not exist %cache_dir%\tools (
    git clone https://github.com/zhouwei25/tools.git %cache_dir%\tools
)
29 30
taskkill /f /im op_function_generator.exe
wmic process where name="op_function_generator.exe" call terminate
31
taskkill /f /im python.exe  2>NUL
32

33

34
rem ------initialize common variable------
35
if not defined GENERATOR set GENERATOR="Visual Studio 15 2017 Win64"
36
if not defined BRANCH set BRANCH=develop
37
if not defined WITH_TENSORRT set WITH_TENSORRT=ON 
38 39 40
if not defined TENSORRT_ROOT set TENSORRT_ROOT=D:/TensorRT
if not defined CUDA_ARCH_NAME set CUDA_ARCH_NAME=Auto
if not defined WITH_GPU set WITH_GPU=ON
41 42 43
if not defined WITH_MKL set WITH_MKL=ON
if not defined WITH_AVX set WITH_AVX=ON
if not defined WITH_TESTING set WITH_TESTING=ON
44
if not defined MSVC_STATIC_CRT set MSVC_STATIC_CRT=OFF
45 46 47
if not defined WITH_PYTHON set WITH_PYTHON=ON
if not defined ON_INFER set ON_INFER=ON
if not defined WITH_INFERENCE_API_TEST set WITH_INFERENCE_API_TEST=ON
48
if not defined WITH_STATIC_LIB set WITH_STATIC_LIB=ON
49
if not defined WITH_TPCACHE set WITH_TPCACHE=ON
50 51
if not defined WITH_CLCACHE set WITH_CLCACHE=OFF
if not defined WITH_CACHE set WITH_CACHE=OFF
52
if not defined WITH_UNITY_BUILD set WITH_UNITY_BUILD=OFF
53
if not defined INFERENCE_DEMO_INSTALL_DIR set INFERENCE_DEMO_INSTALL_DIR=%cache_dir:\=/%/inference_demo
54
if not defined LOG_LEVEL set LOG_LEVEL=normal
55 56
if not defined PRECISION_TEST set PRECISION_TEST=OFF
if not defined NIGHTLY_MODE set PRECISION_TEST=OFF
57

58
rem -------set cache build directory-----------
59
rmdir build\python /s/q
60 61
rmdir build\paddle_install_dir /s/q
rmdir build\paddle_inference_install_dir /s/q
62
rmdir build\paddle_inference_c_install_dir /s/q
63
del build\CMakeCache.txt
64 65 66 67

: set CI_SKIP_CPP_TEST if only *.py changed
git diff --name-only %BRANCH% | findstr /V "\.py" || set CI_SKIP_CPP_TEST=ON

68 69 70 71 72
if "%WITH_CACHE%"=="OFF" (
    rmdir build /s/q
    goto :mkbuild
)

Z
Zhou Wei 已提交
73 74
set error_code=0
type %cache_dir%\error_code.txt
75
: set /p error_code=< %cache_dir%\error_code.txt
Z
Zhou Wei 已提交
76 77 78 79 80
if %error_code% NEQ 0 (
    rmdir build /s/q
    goto :mkbuild
)

81
setlocal enabledelayedexpansion
Z
Zhou Wei 已提交
82 83 84
git show-ref --verify --quiet refs/heads/last_pr
if %ERRORLEVEL% EQU 0 (
    git diff HEAD last_pr --stat --name-only
85
    git diff HEAD last_pr --stat --name-only | findstr "setup.py.in"
86
    if !ERRORLEVEL! EQU 0 (
87 88
        rmdir build /s/q
    )
Z
Zhou Wei 已提交
89 90 91 92 93 94 95
    git branch -D last_pr
    git branch last_pr
) else (
    rmdir build /s/q
    git branch last_pr
)

Z
Zhou Wei 已提交
96
:: git diff HEAD origin/develop --stat --name-only
97
:: git diff HEAD origin/develop --stat --name-only | findstr ".cmake CMakeLists.txt paddle_build.bat"
Z
Zhou Wei 已提交
98 99 100
:: if %ERRORLEVEL% EQU 0 (
::     rmdir build /s/q
:: )
101 102 103

:mkbuild
if not exist build (
Z
Zhou Wei 已提交
104
    echo Windows build cache FALSE
Z
zhangchunle 已提交
105
    set Windows_Build_Cache=FALSE
106
    mkdir build
Z
Zhou Wei 已提交
107 108
) else (
    echo Windows build cache TRUE
Z
zhangchunle 已提交
109
    set Windows_Build_Cache=TRUE
110
)
Z
zhangchunle 已提交
111
echo ipipe_log_param_Windows_Build_Cache: %Windows_Build_Cache%
112
cd /d build
113
dir .
Z
Zhou Wei 已提交
114
dir %cache_dir%
115
dir paddle\fluid\pybind\Release
116

117
rem ------initialize the python environment------
118
if not defined PYTHON_ROOT set PYTHON_ROOT=C:\Python37
119
set PYTHON_EXECUTABLE=%PYTHON_ROOT%\python.exe
120 121
set PATH=%PYTHON_ROOT%;%PYTHON_ROOT%\Scripts;%PATH%

Z
Zhou Wei 已提交
122 123 124 125 126
rem ToDo: virtual environment can't be deleted safely, some process not exit when task is canceled
rem Now use system python environment temporarily
rem %PYTHON_EXECUTABLE% -m pip install virtualenv
rem %PYTHON_EXECUTABLE% -m virtualenv paddle_winci
rem call paddle_winci\Scripts\activate.bat
127

128
rem ------pre install python requirement----------
129 130
where python
where pip
Z
Zhou Wei 已提交
131
pip install wheel --user
Z
Zhou Wei 已提交
132 133
pip install -r %work_dir%\python\unittest_py\requirements.txt --user
pip install -r %work_dir%\python\requirements.txt --user
134

135
if %ERRORLEVEL% NEQ 0 (
Z
Zhou Wei 已提交
136 137
    echo pip install requirements.txt failed!
    exit /b 7
138
)
139

W
wanghuancoder 已提交
140
rem ------pre install clcache and init config----------
141 142
rem pip install clcache --user
pip uninstall -y clcache
W
wanghuancoder 已提交
143
:: set USE_CLCACHE to enable clcache
144
rem set USE_CLCACHE=1
W
wanghuancoder 已提交
145
:: In some scenarios, CLCACHE_HARDLINK can save one file copy.
146
rem set CLCACHE_HARDLINK=1
W
wanghuancoder 已提交
147
:: If it takes more than 1000s to obtain the right to use the cache, an error will be reported
148
rem set CLCACHE_OBJECT_CACHE_TIMEOUT_MS=1000000
W
wanghuancoder 已提交
149
:: set maximum cache size to 20G
150
rem clcache.exe -M 21474836480
W
wanghuancoder 已提交
151

152 153 154 155 156 157 158 159 160
:: install ninja if GENERATOR is Ninja
if %GENERATOR% == "Ninja" (
    pip install ninja
    if %errorlevel% NEQ 0 (
        echo pip install ninja failed!
        exit /b 7
    )
)

161
rem ------show summary of current environment----------
162
cmake --version
163 164 165 166 167
if "%WITH_GPU%"=="ON" (
    nvcc --version
    where nvidia-smi
    nvidia-smi
)
168 169
python %work_dir%\tools\summary_env.py
%cache_dir%\tools\busybox64.exe bash %work_dir%\tools\get_cpu_info.sh
170 171 172 173 174 175 176 177 178

goto :CASE_%1

echo "Usage: paddle_build.bat [OPTION]"
echo "OPTION:"
echo "wincheck_mkl: run Windows MKL/GPU/UnitTest CI tasks on Windows"
echo "wincheck_openbals: run Windows OPENBLAS/CPU CI tasks on Windows"
exit /b 1

179
rem ------PR CI windows check for MKL/GPU----------
180
:CASE_wincheck_mkl
181
set WITH_MKL=ON
182 183
set WITH_GPU=ON
set MSVC_STATIC_CRT=OFF
184

185 186 187
call :cmake || goto cmake_error
call :build || goto build_error
call :test_whl_pacakage || goto test_whl_pacakage_error
188
call :test_unit || goto test_unit_error
189
call :test_inference || goto test_inference_error
190
:: call :check_change_of_unittest || goto check_change_of_unittest_error
191 192
goto:success

193
rem ------PR CI windows check for OPENBLAS/CPU------
194
:CASE_wincheck_openblas
195
set WITH_MKL=ON
196 197
set WITH_GPU=OFF
set MSVC_STATIC_CRT=ON
198

199 200 201
call :cmake || goto cmake_error
call :build || goto build_error
call :test_whl_pacakage || goto test_whl_pacakage_error
202
call :test_unit || goto test_unit_error
Z
Zhou Wei 已提交
203
call :test_inference || goto test_inference_error
204
:: call :check_change_of_unittest || goto check_change_of_unittest_error
205 206
goto:success

207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238
rem ------Build windows avx whl package------
:CASE_build_avx_whl
set WITH_AVX=ON
set ON_INFER=OFF
set CUDA_ARCH_NAME=All

call :cmake || goto cmake_error
call :build || goto build_error
call :test_whl_pacakage || goto test_whl_pacakage_error
goto:success

rem ------Build windows no-avx whl package------
:CASE_build_no_avx_whl
set WITH_AVX=OFF
set ON_INFER=OFF
set CUDA_ARCH_NAME=All

call :cmake || goto cmake_error
call :build || goto build_error
call :test_whl_pacakage || goto test_whl_pacakage_error
goto:success

rem ------Build windows inference library------
:CASE_build_inference_lib
set WITH_PYTHON=OFF
set CUDA_ARCH_NAME=All

call :cmake || goto cmake_error
call :build || goto build_error
call :zip_file || goto zip_file_error
goto:success

239 240 241 242
rem "Other configurations are added here"
rem :CASE_wincheck_others
rem call ...

243 244 245 246 247
rem ---------------------------------------------------------------------------------------------
:cmake
echo    ========================================
echo    Step 1. Cmake ...
echo    ========================================
248

249 250 251
rem Configure the environment for 64-bit builds. 'DISTUTILS_USE_SDK' indicates that the user has selected the compiler.
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
set DISTUTILS_USE_SDK=1
252

253 254
for /F %%# in ('wmic os get localdatetime^|findstr 20') do set start=%%#
set start=%start:~4,10%
255 256 257

@ECHO ON
if not defined CUDA_TOOLKIT_ROOT_DIR set CUDA_TOOLKIT_ROOT_DIR=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0
258
set PATH=%TENSORRT_ROOT:/=\%\lib;%CUDA_TOOLKIT_ROOT_DIR%\bin;%CUDA_TOOLKIT_ROOT_DIR%\libnvvp;%PATH%
259 260 261

rem ------set third_party cache dir------

262 263 264 265 266 267 268 269
: clear third party cache every once in a while
for /F %%# in ('wmic os get localdatetime^|findstr 20') do set datetime=%%#
set day_now=%datetime:~6,2%
set day_before=-1
set /p day_before=< %cache_dir%\day.txt
if %day_now% NEQ %day_before% (
    echo %day_now% > %cache_dir%\day.txt
    type %cache_dir%\day.txt
270
    if %day_now% EQU 21 (
271 272
        rmdir %cache_dir%\third_party_GPU /s/q
        rmdir %cache_dir%\third_party /s/q
273 274
    )
    if %day_now% EQU 11 (
275 276
        rmdir %cache_dir%\third_party_GPU /s/q
        rmdir %cache_dir%\third_party /s/q
277
    )
278
    if %day_now% EQU 01 (
279 280
        rmdir %cache_dir%\third_party_GPU /s/q
        rmdir %cache_dir%\third_party /s/q
281 282 283
    )
)

284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303
if "%WITH_TPCACHE%"=="OFF" (
    set THIRD_PARTY_PATH=%work_dir:\=/%/build/third_party
    goto :cmake_impl
)

echo set -ex > cache.sh
echo md5_content=$(cat %work_dir:\=/%/cmake/external/*.cmake  ^|md5sum ^| awk '{print $1}') >> cache.sh
echo echo ${md5_content}^>md5.txt >> cache.sh

%cache_dir%\tools\busybox64.exe cat cache.sh
%cache_dir%\tools\busybox64.exe bash cache.sh

set /p md5=< md5.txt
if "%WITH_GPU%"=="ON" (
    set THIRD_PARTY_PATH=%cache_dir:\=/%/third_party_GPU/%md5%
) else (
    set THIRD_PARTY_PATH=%cache_dir:\=/%/third_party/%md5%
)

:cmake_impl
304
echo cmake .. -G %GENERATOR% -T host=x64 -DCMAKE_BUILD_TYPE=Release -DWITH_AVX=%WITH_AVX% -DWITH_GPU=%WITH_GPU% -DWITH_MKL=%WITH_MKL% ^
305
-DWITH_TESTING=%WITH_TESTING% -DWITH_PYTHON=%WITH_PYTHON% -DPYTHON_EXECUTABLE=%PYTHON_EXECUTABLE% -DON_INFER=%ON_INFER% ^
306
-DWITH_INFERENCE_API_TEST=%WITH_INFERENCE_API_TEST% -DTHIRD_PARTY_PATH=%THIRD_PARTY_PATH% ^
307
-DINFERENCE_DEMO_INSTALL_DIR=%INFERENCE_DEMO_INSTALL_DIR% -DWITH_STATIC_LIB=%WITH_STATIC_LIB% ^
308 309
-DWITH_TENSORRT=%WITH_TENSORRT% -DTENSORRT_ROOT="%TENSORRT_ROOT%" -DMSVC_STATIC_CRT=%MSVC_STATIC_CRT% ^
-DWITH_UNITY_BUILD=%WITH_UNITY_BUILD% -DCUDA_ARCH_NAME=%CUDA_ARCH_NAME%
310

311
cmake .. -G %GENERATOR% -DCMAKE_BUILD_TYPE=Release -T host=x64 -DWITH_AVX=%WITH_AVX% -DWITH_GPU=%WITH_GPU% -DWITH_MKL=%WITH_MKL% ^
312
-DWITH_TESTING=%WITH_TESTING% -DWITH_PYTHON=%WITH_PYTHON% -DPYTHON_EXECUTABLE=%PYTHON_EXECUTABLE% -DON_INFER=%ON_INFER% ^
313
-DWITH_INFERENCE_API_TEST=%WITH_INFERENCE_API_TEST% -DTHIRD_PARTY_PATH=%THIRD_PARTY_PATH% ^
314
-DINFERENCE_DEMO_INSTALL_DIR=%INFERENCE_DEMO_INSTALL_DIR% -DWITH_STATIC_LIB=%WITH_STATIC_LIB% ^
315 316
-DWITH_TENSORRT=%WITH_TENSORRT% -DTENSORRT_ROOT="%TENSORRT_ROOT%" -DMSVC_STATIC_CRT=%MSVC_STATIC_CRT% ^
-DWITH_UNITY_BUILD=%WITH_UNITY_BUILD% -DCUDA_ARCH_NAME=%CUDA_ARCH_NAME%
317 318 319
goto:eof

:cmake_error
Z
Zhou Wei 已提交
320
echo 7 > %cache_dir%\error_code.txt
321
type %cache_dir%\error_code.txt
322
echo Cmake failed, will exit!
Z
Zhou Wei 已提交
323
exit /b 7
324 325 326

rem ---------------------------------------------------------------------------------------------
:build
327
@ECHO OFF
328 329 330 331
echo    ========================================
echo    Step 2. Buile Paddle ...
echo    ========================================

332 333
for /F %%# in ('wmic cpu get NumberOfLogicalProcessors^|findstr [0-9]') do set /a PARALLEL_PROJECT_COUNT=%%#*4/5
echo "PARALLEL PROJECT COUNT is %PARALLEL_PROJECT_COUNT%"
334
set build_times=1
335
:build_tp
336
echo Build third_party the %build_times% time:
337

338 339 340
if %GENERATOR% == "Ninja" (
    ninja third_party
) else (
341
    MSBuild /m /p:PreferredToolArchitecture=x64 /p:Configuration=Release /verbosity:quiet third_party.vcxproj
342
)
343 344
if %ERRORLEVEL% NEQ 0 (
    set /a build_times=%build_times%+1  
345
    if %build_times% GTR 2 (
Z
Zhou Wei 已提交
346
        exit /b 7
347
    ) else (
348
        echo Build third_party failed, will retry!
349 350 351
        goto :build_tp
    )
)
352
echo Build third_party successfully!
353 354 355

set build_times=1
:build_paddle
L
LoveAn 已提交
356
:: reset clcache zero stats for collect PR's actual hit rate
357
rem clcache.exe -z
L
LoveAn 已提交
358

359
echo Build Paddle the %build_times% time:
360 361
if %GENERATOR% == "Ninja" (
    ninja -j %PARALLEL_PROJECT_COUNT%
362
) else (
363
    if "%WITH_CLCACHE%"=="OFF" (
364
        MSBuild /m:%PARALLEL_PROJECT_COUNT% /p:PreferredToolArchitecture=x64 /p:TrackFileAccess=false /p:Configuration=Release /verbosity:%LOG_LEVEL% ALL_BUILD.vcxproj
365
    ) else (
366
        MSBuild /m:%PARALLEL_PROJECT_COUNT% /p:PreferredToolArchitecture=x64 /p:TrackFileAccess=false /p:CLToolExe=clcache.exe /p:CLToolPath=%PYTHON_ROOT%\Scripts /p:Configuration=Release /verbosity:%LOG_LEVEL% ALL_BUILD.vcxproj
367
    )
368 369
)

370
if %ERRORLEVEL% NEQ 0 (
371
    set /a build_times=%build_times%+1
372
    if %build_times% GTR 1 (
Z
Zhou Wei 已提交
373
        exit /b 7
374
    ) else (
375
        echo Build Paddle failed, will retry!
376 377 378
        goto :build_paddle
    )
)
379

380
echo Build Paddle successfully!
Z
Zhou Wei 已提交
381 382
echo 0 > %cache_dir%\error_code.txt
type %cache_dir%\error_code.txt
383

384
:: ci will collect clcache hit rate
385
rem goto :collect_clcache_hits
386

387 388 389
goto:eof

:build_error
Z
Zhou Wei 已提交
390
echo 7 > %cache_dir%\error_code.txt
391
type %cache_dir%\error_code.txt
392
echo Build Paddle failed, will exit!
393
exit /b 7
394 395 396

rem ---------------------------------------------------------------------------------------------
:test_whl_pacakage
397
@ECHO OFF
398 399 400
echo    ========================================
echo    Step 3. Test pip install whl package ...
echo    ========================================
401

402 403
setlocal enabledelayedexpansion

404 405 406
for /F %%# in ('wmic os get localdatetime^|findstr 20') do set end=%%#
set end=%end:~4,10%
call :timestamp "%start%" "%end%" "Build"
407

408
tree /F %cd%\paddle_inference_install_dir\paddle
409
%cache_dir%\tools\busybox64.exe du -h -d 0 -k %cd%\paddle_inference_install_dir\paddle\lib > lib_size.txt
410
set /p libsize=< lib_size.txt
411 412 413
for /F %%i in ("%libsize%") do (
    set /a libsize_m=%%i/1024
    echo "Windows Paddle_Inference Size: !libsize_m!M"
Z
zhangchunle 已提交
414
    echo ipipe_log_param_Windows_Paddle_Inference_Size: !libsize_m!M
415
)
416

417 418 419
%cache_dir%\tools\busybox64.exe du -h -d 0 %cd%\python\dist > whl_size.txt
set /p whlsize=< whl_size.txt
for /F %%i in ("%whlsize%") do echo "Windows PR whl Size: %%i"
Z
zhangchunle 已提交
420
for /F %%i in ("%whlsize%") do echo ipipe_log_param_Windows_PR_whl_Size: %%i
421

422 423
dir /s /b python\dist\*.whl > whl_file.txt
set /p PADDLE_WHL_FILE_WIN=< whl_file.txt
424

Z
Zhou Wei 已提交
425
@ECHO ON
Z
Zhou Wei 已提交
426 427
pip uninstall -y paddlepaddle
pip uninstall -y paddlepaddle-gpu
428
pip install %PADDLE_WHL_FILE_WIN% --user
Z
Zhou Wei 已提交
429 430 431
if %ERRORLEVEL% NEQ 0 (
    call paddle_winci\Scripts\deactivate.bat 2>NUL
    echo pip install whl package failed!
Z
Zhou Wei 已提交
432
    exit /b 1
Z
Zhou Wei 已提交
433
)
434

435

436
set CUDA_VISIBLE_DEVICES=0
Z
Zhou Wei 已提交
437
python %work_dir%\paddle\scripts\installation_validate.py
438 439 440
goto:eof

:test_whl_pacakage_error
441 442
::echo 1 > %cache_dir%\error_code.txt
::type %cache_dir%\error_code.txt
Z
Zhou Wei 已提交
443
echo Test import paddle failed, will exit!
Z
Zhou Wei 已提交
444
exit /b 1
445 446

rem ---------------------------------------------------------------------------------------------
447
:test_unit
Z
Zhou Wei 已提交
448
@ECHO ON
449 450 451
echo    ========================================
echo    Step 4. Running unit tests ...
echo    ========================================
452

453 454
for /F %%# in ('wmic os get localdatetime^|findstr 20') do set start=%%#
set start=%start:~4,10%
Z
Zhou Wei 已提交
455

456
set FLAGS_call_stack_level=2
457 458 459 460 461 462 463
dir %THIRD_PARTY_PATH:/=\%\install\openblas\lib
dir %THIRD_PARTY_PATH:/=\%\install\openblas\bin
dir %THIRD_PARTY_PATH:/=\%\install\zlib\bin
dir %THIRD_PARTY_PATH:/=\%\install\mklml\lib
dir %THIRD_PARTY_PATH:/=\%\install\mkldnn\bin
dir %THIRD_PARTY_PATH:/=\%\install\warpctc\bin

Y
YUNSHEN XIE 已提交
464 465
pip install requests

466 467 468
set PATH=%THIRD_PARTY_PATH:/=\%\install\openblas\lib;%THIRD_PARTY_PATH:/=\%\install\openblas\bin;^
%THIRD_PARTY_PATH:/=\%\install\zlib\bin;%THIRD_PARTY_PATH:/=\%\install\mklml\lib;^
%THIRD_PARTY_PATH:/=\%\install\mkldnn\bin;%THIRD_PARTY_PATH:/=\%\install\warpctc\bin;%PATH%
469 470 471 472 473 474 475 476 477

if "%WITH_GPU%"=="ON" (
    goto:parallel_test_base_gpu
) else (
    goto:parallel_test_base_cpu
)

:parallel_test_base_gpu
echo    ========================================
478
echo    Running GPU unit tests in parallel way ...
479 480
echo    ========================================

Z
Zhou Wei 已提交
481 482 483 484 485 486 487
setlocal enabledelayedexpansion

:: set PATH=C:\Windows\System32;C:\Program Files\NVIDIA Corporation\NVSMI;%PATH%
:: cmd /C nvidia-smi -L
:: if %errorlevel% NEQ 0 exit /b 8
:: for /F %%# in ('cmd /C nvidia-smi -L ^|find "GPU" /C') do set CUDA_DEVICE_COUNT=%%#
set CUDA_DEVICE_COUNT=1
Y
YUNSHEN XIE 已提交
488 489 490 491 492 493 494

echo cmake .. -G %GENERATOR% -DCMAKE_BUILD_TYPE=Release -DWITH_AVX=%WITH_AVX% -DWITH_GPU=%WITH_GPU% -DWITH_MKL=%WITH_MKL% ^
-DWITH_TESTING=%WITH_TESTING% -DWITH_PYTHON=%WITH_PYTHON% -DON_INFER=%ON_INFER% ^
-DWITH_INFERENCE_API_TEST=%WITH_INFERENCE_API_TEST% -DTHIRD_PARTY_PATH=%THIRD_PARTY_PATH% ^
-DINFERENCE_DEMO_INSTALL_DIR=%INFERENCE_DEMO_INSTALL_DIR% -DWITH_STATIC_LIB=%WITH_STATIC_LIB% ^
-DWITH_TENSORRT=%WITH_TENSORRT% -DTENSORRT_ROOT="%TENSORRT_ROOT%" -DMSVC_STATIC_CRT=%MSVC_STATIC_CRT% ^
-DWITH_UNITY_BUILD=%WITH_UNITY_BUILD% -DCUDA_ARCH_NAME=%CUDA_ARCH_NAME% >> %work_dir%\win_cmake.sh
495
set FLAGS_fraction_of_gpu_memory_to_use=0.92
496

497
%cache_dir%\tools\busybox64.exe bash %work_dir%\tools\windows\run_unittests.sh %NIGHTLY_MODE% %PRECISION_TEST% %WITH_GPU%
Z
Zhou Wei 已提交
498

499 500 501 502 503 504
goto:eof

:parallel_test_base_cpu
echo    ========================================
echo    Running CPU unit tests in parallel way ...
echo    ========================================
505

506
%cache_dir%\tools\busybox64.exe bash %work_dir%\tools\windows\run_unittests.sh %NIGHTLY_MODE% %PRECISION_TEST% %WITH_GPU%
507

508 509
goto:eof

510
:test_unit_error
511 512
:: echo 8 > %cache_dir%\error_code.txt
:: type %cache_dir%\error_code.txt
Z
Zhou Wei 已提交
513 514
for /F %%# in ('wmic os get localdatetime^|findstr 20') do set end=%%#
set end=%end:~4,10%
515
call :timestamp "%start%" "%end%" "1 card TestCases Total"
Z
Zhou Wei 已提交
516
call :timestamp "%start%" "%end%" "TestCases Total"
517
echo Running unit tests failed, will exit!
518
exit /b 8
519 520 521

rem ---------------------------------------------------------------------------------------------
:test_inference
522
@ECHO OFF
523 524 525
echo    ========================================
echo    Step 5. Testing fluid library for inference ...
echo    ========================================
526

527 528
for /F %%# in ('wmic os get localdatetime^|findstr 20') do set end=%%#
set end=%end:~4,10%
529
call :timestamp "%start%" "%end%" "1 card TestCases Total"
530
call :timestamp "%start%" "%end%" "TestCases Total"
531

532
cd %work_dir%\paddle\fluid\inference\api\demo_ci
533
%cache_dir%\tools\busybox64.exe bash run.sh %work_dir:\=/% %WITH_MKL% %WITH_GPU% %cache_dir:\=/%/inference_demo %TENSORRT_ROOT%/include %TENSORRT_ROOT%/lib %MSVC_STATIC_CRT%
534 535 536
goto:eof

:test_inference_error
537 538
::echo 1 > %cache_dir%\error_code.txt
::type %cache_dir%\error_code.txt
539
echo Testing fluid library for inference failed!
Z
Zhou Wei 已提交
540
exit /b 1
541 542 543

rem ---------------------------------------------------------------------------------------------
:check_change_of_unittest
544
@ECHO OFF
545 546 547 548 549
echo    ========================================
echo    Step 6. Check whether deleting a unit test ...
echo    ========================================

cd /d %work_dir%\build
550 551
echo set -e>  check_change_of_unittest.sh
echo set +x>> check_change_of_unittest.sh
552 553 554 555 556 557
echo GITHUB_API_TOKEN=%GITHUB_API_TOKEN% >>  check_change_of_unittest.sh
echo GIT_PR_ID=%AGILE_PULL_ID% >>  check_change_of_unittest.sh
echo BRANCH=%BRANCH%>>  check_change_of_unittest.sh
echo if [ "${GITHUB_API_TOKEN}" == "" ] ^|^| [ "${GIT_PR_ID}" == "" ];then>> check_change_of_unittest.sh
echo     exit 0 >>  check_change_of_unittest.sh
echo fi>>  check_change_of_unittest.sh
558
echo set -x>> check_change_of_unittest.sh
559 560 561 562 563
echo cat ^<^<EOF>>  check_change_of_unittest.sh
echo     ============================================ >>  check_change_of_unittest.sh
echo     Generate unit tests.spec of this PR.         >>  check_change_of_unittest.sh
echo     ============================================ >>  check_change_of_unittest.sh
echo EOF>>  check_change_of_unittest.sh
564
echo spec_path=$(pwd)/UNITTEST_PR.spec>>  check_change_of_unittest.sh
565
echo ctest -N ^| awk -F ':' '{print $2}' ^| sed '/^^$/d' ^| sed '$d' ^> ${spec_path}>>  check_change_of_unittest.sh
566 567
echo num=$(awk 'END{print NR}' ${spec_path})>> check_change_of_unittest.sh
echo echo "Windows 1 card TestCases count is $num">> check_change_of_unittest.sh
Z
zhangchunle 已提交
568
echo echo ipipe_log_param_Windows_1_Card_TestCases_Count: $num>> check_change_of_unittest.sh
569 570 571 572
echo UPSTREAM_URL='https://github.com/PaddlePaddle/Paddle'>>  check_change_of_unittest.sh
echo origin_upstream_url=`git remote -v ^| awk '{print $1, $2}' ^| uniq ^| grep upstream ^| awk '{print $2}'`>>  check_change_of_unittest.sh
echo if [ "$origin_upstream_url" == "" ]; then>>  check_change_of_unittest.sh
echo     git remote add upstream $UPSTREAM_URL.git>>  check_change_of_unittest.sh
573 574
echo elif [ "$origin_upstream_url" ^!= "$UPSTREAM_URL" ] ^\>>  check_change_of_unittest.sh
echo         ^&^& [ "$origin_upstream_url" ^!= "$UPSTREAM_URL.git" ]; then>>  check_change_of_unittest.sh
575 576 577 578 579 580 581
echo     git remote remove upstream>>  check_change_of_unittest.sh
echo     git remote add upstream $UPSTREAM_URL.git>>  check_change_of_unittest.sh
echo fi>>  check_change_of_unittest.sh
echo if [ ! -e "$(pwd)/../.git/refs/remotes/upstream/$BRANCH" ]; then>>  check_change_of_unittest.sh
echo     git fetch upstream $BRANCH # develop is not fetched>>  check_change_of_unittest.sh
echo fi>>  check_change_of_unittest.sh
echo git checkout -b origin_pr >>  check_change_of_unittest.sh
582
echo git checkout -f $BRANCH >>  check_change_of_unittest.sh
583
echo cmake .. -G %GENERATOR% -T host=x64 -DWITH_AVX=%WITH_AVX% -DWITH_GPU=%WITH_GPU% -DWITH_MKL=%WITH_MKL% ^
584
-DWITH_TESTING=%WITH_TESTING% -DWITH_PYTHON=%WITH_PYTHON% -DPYTHON_EXECUTABLE=%PYTHON_EXECUTABLE% -DON_INFER=%ON_INFER% ^
585 586
-DWITH_INFERENCE_API_TEST=%WITH_INFERENCE_API_TEST% -DTHIRD_PARTY_PATH=%THIRD_PARTY_PATH% ^
-DINFERENCE_DEMO_INSTALL_DIR=%INFERENCE_DEMO_INSTALL_DIR% -DWITH_STATIC_LIB=%WITH_STATIC_LIB% ^
587 588
-DWITH_TENSORRT=%WITH_TENSORRT% -DTENSORRT_ROOT=%TENSORRT_ROOT% -DMSVC_STATIC_CRT=%MSVC_STATIC_CRT% ^
-DWITH_UNITY_BUILD=%WITH_UNITY_BUILD% >>  check_change_of_unittest.sh
589 590 591 592 593
echo cat ^<^<EOF>>  check_change_of_unittest.sh
echo     ============================================       >>  check_change_of_unittest.sh
echo     Generate unit tests.spec of develop.               >>  check_change_of_unittest.sh
echo     ============================================       >>  check_change_of_unittest.sh
echo EOF>>  check_change_of_unittest.sh
594
echo spec_path=$(pwd)/UNITTEST_DEV.spec>>  check_change_of_unittest.sh
595
echo ctest -N ^| awk -F ':' '{print $2}' ^| sed '/^^$/d' ^| sed '$d' ^> ${spec_path}>>  check_change_of_unittest.sh
596
echo unittest_spec_diff=`python $(pwd)/../tools/diff_unittest.py $(pwd)/UNITTEST_DEV.spec $(pwd)/UNITTEST_PR.spec`>>  check_change_of_unittest.sh
597 598
echo if [ "$unittest_spec_diff" ^!= "" ]; then>>  check_change_of_unittest.sh
echo     set +x>> check_change_of_unittest.sh
599
echo     approval_line=`curl -H "Authorization: token ${GITHUB_API_TOKEN}" https://api.github.com/repos/PaddlePaddle/Paddle/pulls/${GIT_PR_ID}/reviews?per_page=10000`>>  check_change_of_unittest.sh
600 601
echo     set -x>> check_change_of_unittest.sh
echo     if [ "$approval_line" ^!= "" ]; then>>  check_change_of_unittest.sh
602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617
echo         APPROVALS=`echo ${approval_line} ^|python $(pwd)/../tools/check_pr_approval.py 1 22165420 52485244 6836917`>>  check_change_of_unittest.sh
echo         echo "current pr ${GIT_PR_ID} got approvals: ${APPROVALS}">>  check_change_of_unittest.sh
echo         if [ "${APPROVALS}" == "FALSE" ]; then>>  check_change_of_unittest.sh
echo             echo "************************************"                >>  check_change_of_unittest.sh
echo             echo -e "It is forbidden to disable or delete the unit-test.\n"        >>  check_change_of_unittest.sh
echo             echo -e "If you must delete it temporarily, please add it to[https://github.com/PaddlePaddle/Paddle/wiki/Temporarily-disabled-Unit-Test]."     >>  check_change_of_unittest.sh
echo             echo -e "Then you must have one RD (kolinwei(recommended) or zhouwei25) approval for the deletion of unit-test. \n"                 >>  check_change_of_unittest.sh
echo             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"   >>  check_change_of_unittest.sh
echo             echo -e "Following unit-tests are deleted in this PR: \n ${unittest_spec_diff} \n"     >>  check_change_of_unittest.sh
echo             echo "************************************"                >>  check_change_of_unittest.sh
echo             exit 1 >>  check_change_of_unittest.sh
echo          fi>>  check_change_of_unittest.sh
echo     else>>  check_change_of_unittest.sh
echo          exit 1 >>  check_change_of_unittest.sh
echo     fi>>  check_change_of_unittest.sh
echo fi>>  check_change_of_unittest.sh
618
echo git checkout -f origin_pr >>  check_change_of_unittest.sh
619
%cache_dir%\tools\busybox64.exe bash check_change_of_unittest.sh
620 621 622
goto:eof

:check_change_of_unittest_error
Z
Zhou Wei 已提交
623
exit /b 1
624

625 626 627 628 629 630 631 632 633
rem ---------------------------------------------------------------------------------------------
:zip_file
tree /F %cd%\paddle_inference_install_dir\paddle
if exist paddle_inference.zip del paddle_inference.zip
python -c "import shutil;shutil.make_archive('paddle_inference', 'zip', root_dir='paddle_inference_install_dir')"
%cache_dir%\tools\busybox64.exe du -h -k paddle_inference.zip > lib_size.txt
set /p libsize=< lib_size.txt
for /F %%i in ("%libsize%") do (
    set /a libsize_m=%%i/1024
634
    echo "Windows Paddle_Inference ZIP Size: !libsize_m!M"
635 636 637 638 639 640
)
goto:eof

:zip_file_error
echo Tar inference library failed!
exit /b 1
641

642 643
:timestamp
setlocal enabledelayedexpansion
644
@ECHO OFF
645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675
set start=%~1
set dd=%start:~2,2%
set /a dd=100%dd%%%100
set hh=%start:~4,2%
set /a hh=100%hh%%%100
set nn=%start:~6,2%
set /a nn=100%nn%%%100
set ss=%start:~8,2%
set /a ss=100%ss%%%100
set /a start_sec=dd*86400+hh*3600+nn*60+ss
echo %start_sec%

set end=%~2
set dd=%end:~2,2%
set /a dd=100%dd%%%100
if %start:~0,2% NEQ %end:~0,2% (
    set month_day=0
    for %%i in (01 03 05 07 08 10 12) DO if %%i EQU %start:~0,2% set month_day=31
    for %%i in (04 06 09 11) DO if %%i EQU %start:~0,2% set month_day=30
    for %%i in (02) DO if %%i EQU %start:~0,2% set month_day=28
    set /a dd=%dd%+!month_day!
)
set hh=%end:~4,2%
set /a hh=100%hh%%%100
set nn=%end:~6,2%
set /a nn=100%nn%%%100
set ss=%end:~8,2%
set /a ss=100%ss%%%100
set /a end_secs=dd*86400+hh*3600+nn*60+ss
set /a cost_secs=end_secs-start_sec
echo "Windows %~3 Time: %cost_secs%s"
676
set tempTaskName=%~3
Z
zhangchunle 已提交
677
echo ipipe_log_param_Windows_%tempTaskName: =_%_Time: %cost_secs%s
678 679 680
goto:eof


L
LoveAn 已提交
681 682 683 684
:collect_clcache_hits
for /f "tokens=2,4" %%i in ('clcache.exe -s ^| findstr "entries hits"') do set %%i=%%j
if %hits% EQU 0 (
    echo "clcache hit rate: 0%%"
Z
zhangchunle 已提交
685
    echo ipipe_log_param_Clcache_Hit_Rate: 0%%
L
LoveAn 已提交
686 687 688
) else (
    set /a rate=%hits%*10000/%entries%
    echo "clcache hit rate: %rate:~0,-2%.%rate:~-2%%%"
Z
zhangchunle 已提交
689
    echo ipipe_log_param_Clcache_Hit_Hate: %rate:~0,-2%.%rate:~-2%%%
L
LoveAn 已提交
690 691 692 693
)
goto:eof


694 695 696 697 698 699
rem ---------------------------------------------------------------------------------------------
:success
echo    ========================================
echo    Clean up environment  at the end ...
echo    ========================================
taskkill /f /im cmake.exe  2>NUL
700
taskkill /f /im MSBuild.exe 2>NUL
701 702 703 704 705 706 707 708
taskkill /f /im git.exe 2>NUL
taskkill /f /im cl.exe 2>NUL
taskkill /f /im lib.exe 2>NUL
taskkill /f /im link.exe 2>NUL
taskkill /f /im git-remote-https.exe 2>NUL
taskkill /f /im vctip.exe 2>NUL
taskkill /f /im cvtres.exe 2>NUL
taskkill /f /im rc.exe 2>NUL
709
wmic process where name="op_function_generator.exe" call terminate 2>NUL
710
wmic process where name="python.exe" call terminate 2>NUL
Z
Zhou Wei 已提交
711
taskkill /f /im python.exe  2>NUL
712 713 714 715
echo Windows CI run successfully!
exit /b 0

ENDLOCAL