提交 359e79e5 编写于 作者: Y Yu Yang

Faster Python unittest

* Do not use `virtualenv` in Docker
* Split unittest into many target, make them parallel
上级 05af3908
...@@ -55,6 +55,7 @@ option(WITH_C_API "Compile PaddlePaddle with C-API(Prediction)" OFF) ...@@ -55,6 +55,7 @@ option(WITH_C_API "Compile PaddlePaddle with C-API(Prediction)" OFF)
option(WITH_GOLANG "Compile PaddlePaddle with GOLANG" OFF) option(WITH_GOLANG "Compile PaddlePaddle with GOLANG" OFF)
option(GLIDE_INSTALL "Download and install go dependencies " ON) option(GLIDE_INSTALL "Download and install go dependencies " ON)
option(USE_NNPACK "Compile PaddlePaddle with NNPACK library" OFF) option(USE_NNPACK "Compile PaddlePaddle with NNPACK library" OFF)
option(UNITTEST_USE_VIRTUALENV "Python unittest with virtualenv" ON)
# CMAKE_BUILD_TYPE # CMAKE_BUILD_TYPE
if(NOT CMAKE_BUILD_TYPE) if(NOT CMAKE_BUILD_TYPE)
......
...@@ -24,7 +24,6 @@ IF(WITH_PYTHON) ...@@ -24,7 +24,6 @@ IF(WITH_PYTHON)
ENDIF(WITH_PYTHON) ENDIF(WITH_PYTHON)
SET(py_env "") SET(py_env "")
SET(USE_VIRTUALENV_FOR_TEST 1)
IF(PYTHONINTERP_FOUND) IF(PYTHONINTERP_FOUND)
find_python_module(pip REQUIRED) find_python_module(pip REQUIRED)
find_python_module(numpy REQUIRED) find_python_module(numpy REQUIRED)
......
...@@ -150,9 +150,19 @@ endfunction() ...@@ -150,9 +150,19 @@ endfunction()
# Create a python unittest using run_python_tests.sh, # Create a python unittest using run_python_tests.sh,
# which takes care of making correct running environment # which takes care of making correct running environment
function(add_python_test TEST_NAME) function(add_python_test TEST_NAME)
add_test(NAME ${TEST_NAME} if (UNITTEST_USE_VIRTUALENV)
COMMAND env PADDLE_PACKAGE_DIR=${PADDLE_PYTHON_PACKAGE_DIR} add_test(NAME ${TEST_NAME}
bash ${PROJ_ROOT}/paddle/scripts/run_python_tests.sh COMMAND env PADDLE_PACKAGE_DIR=${PADDLE_PYTHON_PACKAGE_DIR}
${USE_VIRTUALENV_FOR_TEST} ${PYTHON_EXECUTABLE} ${ARGN} bash ${PROJ_ROOT}/paddle/scripts/run_python_tests.sh ${ARGN}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
else()
foreach(arg ${ARGN})
get_filename_component(py_fn ${arg} NAME_WE)
set(TRG_NAME ${TEST_NAME}_${py_fn})
add_test(NAME ${TRG_NAME}
COMMAND env PYTHONPATH=${PADDLE_PYTHON_PACKAGE_DIR}
python2 ${arg}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
endforeach()
endif()
endfunction() endfunction()
...@@ -49,29 +49,27 @@ cmake .. \ ...@@ -49,29 +49,27 @@ cmake .. \
-DCUDNN_ROOT=/usr/ \ -DCUDNN_ROOT=/usr/ \
-DWITH_STYLE_CHECK=${WITH_STYLE_CHECK:-OFF} \ -DWITH_STYLE_CHECK=${WITH_STYLE_CHECK:-OFF} \
-DWITH_TESTING=${WITH_TESTING:-OFF} \ -DWITH_TESTING=${WITH_TESTING:-OFF} \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-DUNITTEST_USE_VIRTUALENV=OFF
cat <<EOF cat <<EOF
======================================== ============================================
Building in /paddle/build ... Building and installing in /paddle/build ...
Build unit tests: ${WITH_TESTING:-OFF} Build unit tests: ${WITH_TESTING:-OFF}
======================================== ============================================
EOF EOF
make -j `nproc` make install -j `nproc`
if [ ${WITH_TESTING:-OFF} == "ON" ] && [ ${RUN_TEST:-OFF} == "ON" ] ; then pip install /usr/local/opt/paddle/share/wheels/*.whl
pip uninstall -y py-paddle paddle || true paddle version
ctest --output-on-failure
fi
if [ ${WITH_TESTING:-OFF} == "ON" ] && [ ${RUN_TEST:-OFF} == "ON" ] ; then
cat <<EOF cat <<EOF
======================================== ========================================
Installing ... Running unit tests ...
======================================== ========================================
EOF EOF
make install -j `nproc` ctest --output-on-failure
pip install /usr/local/opt/paddle/share/wheels/*.whl fi
paddle version
# To build documentation, we need to run cmake again after installing # To build documentation, we need to run cmake again after installing
......
...@@ -18,17 +18,12 @@ pushd `dirname $0` > /dev/null ...@@ -18,17 +18,12 @@ pushd `dirname $0` > /dev/null
SCRIPTPATH=$PWD SCRIPTPATH=$PWD
popd > /dev/null popd > /dev/null
USE_VIRTUALENV_FOR_TEST=$1; shift rm -rf .test_env
PYTHON=$1; shift virtualenv .test_env
unset PYTHONHOME
if [ $USE_VIRTUALENV_FOR_TEST -ne 0 ]; then unset PYTHONPATH
rm -rf .test_env source .test_env/bin/activate
virtualenv .test_env PYTHON=python
unset PYTHONHOME
unset PYTHONPATH
source .test_env/bin/activate
PYTHON=python
fi
$PYTHON -m pip install $SCRIPTPATH/../dist/*.whl $PYTHON -m pip install $SCRIPTPATH/../dist/*.whl
...@@ -49,7 +44,5 @@ do ...@@ -49,7 +44,5 @@ do
fi fi
done done
if [ $USE_VIRTUALENV_FOR_TEST -ne 0 ]; then deactivate
deactivate rm -rf .test_env
rm -rf .test_env
fi
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册