paddle_build.bat 26.8 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
rem -------set cache build directory-----------
57
rmdir build\python /s/q
58 59
rmdir build\paddle_install_dir /s/q
rmdir build\paddle_inference_install_dir /s/q
60
rmdir build\paddle_inference_c_install_dir /s/q
61
del build\CMakeCache.txt
62 63 64 65

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

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

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

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

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

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

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

Z
Zhou Wei 已提交
120 121 122 123 124
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
125

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

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

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

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

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

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

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

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

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

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

205 206 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
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

237 238 239 240
rem "Other configurations are added here"
rem :CASE_wincheck_others
rem call ...

241 242 243 244 245
rem ---------------------------------------------------------------------------------------------
:cmake
echo    ========================================
echo    Step 1. Cmake ...
echo    ========================================
246

247 248 249
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
250

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

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

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

260 261 262 263 264 265 266 267
: 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
268
    if %day_now% EQU 21 (
269 270
        rmdir %cache_dir%\third_party_GPU /s/q
        rmdir %cache_dir%\third_party /s/q
271 272
    )
    if %day_now% EQU 11 (
273 274
        rmdir %cache_dir%\third_party_GPU /s/q
        rmdir %cache_dir%\third_party /s/q
275
    )
276
    if %day_now% EQU 01 (
277 278
        rmdir %cache_dir%\third_party_GPU /s/q
        rmdir %cache_dir%\third_party /s/q
279 280 281
    )
)

282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301
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
302
echo cmake .. -G %GENERATOR% -T host=x64 -DCMAKE_BUILD_TYPE=Release -DWITH_AVX=%WITH_AVX% -DWITH_GPU=%WITH_GPU% -DWITH_MKL=%WITH_MKL% ^
303
-DWITH_TESTING=%WITH_TESTING% -DWITH_PYTHON=%WITH_PYTHON% -DPYTHON_EXECUTABLE=%PYTHON_EXECUTABLE% -DON_INFER=%ON_INFER% ^
304
-DWITH_INFERENCE_API_TEST=%WITH_INFERENCE_API_TEST% -DTHIRD_PARTY_PATH=%THIRD_PARTY_PATH% ^
305
-DINFERENCE_DEMO_INSTALL_DIR=%INFERENCE_DEMO_INSTALL_DIR% -DWITH_STATIC_LIB=%WITH_STATIC_LIB% ^
306 307
-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%
308

309
cmake .. -G %GENERATOR% -DCMAKE_BUILD_TYPE=Release -T host=x64 -DWITH_AVX=%WITH_AVX% -DWITH_GPU=%WITH_GPU% -DWITH_MKL=%WITH_MKL% ^
310
-DWITH_TESTING=%WITH_TESTING% -DWITH_PYTHON=%WITH_PYTHON% -DPYTHON_EXECUTABLE=%PYTHON_EXECUTABLE% -DON_INFER=%ON_INFER% ^
311
-DWITH_INFERENCE_API_TEST=%WITH_INFERENCE_API_TEST% -DTHIRD_PARTY_PATH=%THIRD_PARTY_PATH% ^
312
-DINFERENCE_DEMO_INSTALL_DIR=%INFERENCE_DEMO_INSTALL_DIR% -DWITH_STATIC_LIB=%WITH_STATIC_LIB% ^
313 314
-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%
315 316 317
goto:eof

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

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

330 331
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%"
332
set build_times=1
333
:build_tp
334
echo Build third_party the %build_times% time:
335

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

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

357
echo Build Paddle the %build_times% time:
358 359
if %GENERATOR% == "Ninja" (
    ninja -j %PARALLEL_PROJECT_COUNT%
360
) else (
361
    if "%WITH_CLCACHE%"=="OFF" (
362
        MSBuild /m:%PARALLEL_PROJECT_COUNT% /p:PreferredToolArchitecture=x64 /p:Configuration=Release /verbosity:%LOG_LEVEL% ALL_BUILD.vcxproj
363
    ) else (
364
        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% paddle.sln
365
    )
366 367
)

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

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

382
:: ci will collect clcache hit rate
383
rem goto :collect_clcache_hits
384

385 386 387
goto:eof

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

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

400 401
setlocal enabledelayedexpansion

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

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

415 416 417
%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 已提交
418
for /F %%i in ("%whlsize%") do echo ipipe_log_param_Windows_PR_whl_Size: %%i
419

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

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

433

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

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

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

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

454
set FLAGS_call_stack_level=2
455 456 457 458 459 460 461
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 已提交
462 463 464 465 466 467 468 469 470
pip install requests
python %work_dir%\tools\get_quick_disable_lt.py > Output
if %errorlevel%==0 (
    set /p disable_ut_quickly=<Output
    DEL Output
    ) else (
    set disable_ut_quickly=''
)

471 472 473
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%
474

475 476 477 478 479 480 481 482 483
if "%NIGHTLY_MODE%"=="ON" (
    set nightly_label="()"
    ) else (
    set 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    ========================================
)

484 485 486 487 488 489 490 491
if "%WITH_GPU%"=="ON" (
    goto:parallel_test_base_gpu
) else (
    goto:parallel_test_base_cpu
)

:parallel_test_base_gpu
echo    ========================================
492
echo    Running GPU unit tests in parallel way ...
493 494
echo    ========================================

Z
Zhou Wei 已提交
495 496 497 498 499 500 501
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
502
set FLAGS_fraction_of_gpu_memory_to_use=0.92
503

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

506 507 508 509 510 511
goto:eof

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

513
ctest.exe -E "(%disable_ut_quickly%)" -LE %nightly_label% --output-on-failure -C Release -j 8 --repeat until-pass:4 after-timeout:4
514

515 516
goto:eof

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

rem ---------------------------------------------------------------------------------------------
:test_inference
529
@ECHO OFF
530 531 532
echo    ========================================
echo    Step 5. Testing fluid library for inference ...
echo    ========================================
533

534 535
for /F %%# in ('wmic os get localdatetime^|findstr 20') do set end=%%#
set end=%end:~4,10%
536
call :timestamp "%start%" "%end%" "1 card TestCases Total"
537
call :timestamp "%start%" "%end%" "TestCases Total"
538

539
cd %work_dir%\paddle\fluid\inference\api\demo_ci
540
%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%
541 542 543
goto:eof

:test_inference_error
544 545
::echo 1 > %cache_dir%\error_code.txt
::type %cache_dir%\error_code.txt
546
echo Testing fluid library for inference failed!
Z
Zhou Wei 已提交
547
exit /b 1
548 549 550

rem ---------------------------------------------------------------------------------------------
:check_change_of_unittest
551
@ECHO OFF
552 553 554 555 556
echo    ========================================
echo    Step 6. Check whether deleting a unit test ...
echo    ========================================

cd /d %work_dir%\build
557 558
echo set -e>  check_change_of_unittest.sh
echo set +x>> check_change_of_unittest.sh
559 560 561 562 563 564
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
565
echo set -x>> check_change_of_unittest.sh
566 567 568 569 570
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
571
echo spec_path=$(pwd)/UNITTEST_PR.spec>>  check_change_of_unittest.sh
572
echo ctest -N ^| awk -F ':' '{print $2}' ^| sed '/^^$/d' ^| sed '$d' ^> ${spec_path}>>  check_change_of_unittest.sh
573 574
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 已提交
575
echo echo ipipe_log_param_Windows_1_Card_TestCases_Count: $num>> check_change_of_unittest.sh
576 577 578 579
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
580 581
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
582 583 584 585 586 587 588
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
589
echo git checkout -f $BRANCH >>  check_change_of_unittest.sh
590
echo cmake .. -G %GENERATOR% -T host=x64 -DWITH_AVX=%WITH_AVX% -DWITH_GPU=%WITH_GPU% -DWITH_MKL=%WITH_MKL% ^
591
-DWITH_TESTING=%WITH_TESTING% -DWITH_PYTHON=%WITH_PYTHON% -DPYTHON_EXECUTABLE=%PYTHON_EXECUTABLE% -DON_INFER=%ON_INFER% ^
592 593
-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% ^
594 595
-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
596 597 598 599 600
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
601
echo spec_path=$(pwd)/UNITTEST_DEV.spec>>  check_change_of_unittest.sh
602
echo ctest -N ^| awk -F ':' '{print $2}' ^| sed '/^^$/d' ^| sed '$d' ^> ${spec_path}>>  check_change_of_unittest.sh
603
echo unittest_spec_diff=`python $(pwd)/../tools/diff_unittest.py $(pwd)/UNITTEST_DEV.spec $(pwd)/UNITTEST_PR.spec`>>  check_change_of_unittest.sh
604 605
echo if [ "$unittest_spec_diff" ^!= "" ]; then>>  check_change_of_unittest.sh
echo     set +x>> check_change_of_unittest.sh
606
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
607 608
echo     set -x>> check_change_of_unittest.sh
echo     if [ "$approval_line" ^!= "" ]; then>>  check_change_of_unittest.sh
609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624
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
625
echo git checkout -f origin_pr >>  check_change_of_unittest.sh
626
%cache_dir%\tools\busybox64.exe bash check_change_of_unittest.sh
627 628 629
goto:eof

:check_change_of_unittest_error
Z
Zhou Wei 已提交
630
exit /b 1
631

632 633 634 635 636 637 638 639 640
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
641
    echo "Windows Paddle_Inference ZIP Size: !libsize_m!M"
642 643 644 645 646 647
)
goto:eof

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

649 650
:timestamp
setlocal enabledelayedexpansion
651
@ECHO OFF
652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682
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"
683
set tempTaskName=%~3
Z
zhangchunle 已提交
684
echo ipipe_log_param_Windows_%tempTaskName: =_%_Time: %cost_secs%s
685 686 687
goto:eof


L
LoveAn 已提交
688 689 690 691
: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 已提交
692
    echo ipipe_log_param_Clcache_Hit_Rate: 0%%
L
LoveAn 已提交
693 694 695
) else (
    set /a rate=%hits%*10000/%entries%
    echo "clcache hit rate: %rate:~0,-2%.%rate:~-2%%%"
Z
zhangchunle 已提交
696
    echo ipipe_log_param_Clcache_Hit_Hate: %rate:~0,-2%.%rate:~-2%%%
L
LoveAn 已提交
697 698 699 700
)
goto:eof


701 702 703 704 705 706
rem ---------------------------------------------------------------------------------------------
:success
echo    ========================================
echo    Clean up environment  at the end ...
echo    ========================================
taskkill /f /im cmake.exe  2>NUL
707
taskkill /f /im MSBuild.exe 2>NUL
708 709 710 711 712 713 714 715
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
716
wmic process where name="op_function_generator.exe" call terminate 2>NUL
717
wmic process where name="python.exe" call terminate 2>NUL
Z
Zhou Wei 已提交
718
taskkill /f /im python.exe  2>NUL
719 720 721 722
echo Windows CI run successfully!
exit /b 0

ENDLOCAL