blob: 21471902c35691e41871ccb764a65d1733a7defb [file]
#!/bin/bash
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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.
#
# build and install are separated so changes to build don't invalidate
# the whole docker cache for the image
set -ex
NOSE_COVERAGE_ARGUMENTS="--with-coverage --cover-inclusive --cover-xml --cover-branches --cover-package=mxnet"
clean_repo() {
set -ex
git clean -xfd
git submodule foreach --recursive git clean -xfd
git reset --hard
git submodule foreach --recursive git reset --hard
git submodule update --init --recursive
}
build_ccache_wrappers() {
set -ex
rm -f cc
rm -f cxx
touch cc
touch cxx
if [ -z ${CC+x} ]; then
echo "No \$CC set, defaulting to gcc";
export CC=gcc
fi
if [ -z ${CXX+x} ]; then
echo "No \$CXX set, defaulting to g++";
export CXX=g++
fi
# this function is nessesary for cuda enabled make based builds, since nvcc needs just an executable for -ccbin
echo -e "#!/bin/sh\n/usr/local/bin/ccache ${CC} \"\$@\"\n" >> cc
echo -e "#!/bin/sh\n/usr/local/bin/ccache ${CXX} \"\$@\"\n" >> cxx
chmod +x cc
chmod +x cxx
export CC=`pwd`/cc
export CXX=`pwd`/cxx
}
build_wheel() {
set -ex
pushd .
PYTHON_DIR=${1:-/work/mxnet/python}
BUILD_DIR=${2:-/work/build}
# build
export MXNET_LIBRARY_PATH=${BUILD_DIR}/libmxnet.so
cd ${PYTHON_DIR}
python setup.py bdist_wheel --universal
# repackage
# Fix pathing issues in the wheel. We need to move libmxnet.so from the data folder to the
# mxnet folder, then repackage the wheel.
WHEEL=`readlink -f dist/*.whl`
TMPDIR=`mktemp -d`
unzip -d ${TMPDIR} ${WHEEL}
rm ${WHEEL}
cd ${TMPDIR}
mv *.data/data/mxnet/libmxnet.so mxnet
zip -r ${WHEEL} .
cp ${WHEEL} ${BUILD_DIR}
rm -rf ${TMPDIR}
popd
}
# Build commands: Every platform in docker/Dockerfile.build.<platform> should have a corresponding
# function here with the same suffix:
build_jetson() {
set -ex
pushd .
cp make/crosscompile.jetson.mk ./config.mk
make -j$(nproc)
build_wheel /work/mxnet/python /work/mxnet/lib
popd
}
#
# ARM builds
#
build_armv6() {
set -ex
pushd .
cd /work/build
# Lapack functionality will be included and statically linked to openblas.
# But USE_LAPACK needs to be set to OFF, otherwise the main CMakeLists.txt
# file tries to add -llapack. Lapack functionality though, requires -lgfortran
# to be linked additionally.
# We do not need OpenMP, since most armv6 systems have only 1 core
cmake \
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DUSE_CUDA=OFF \
-DUSE_OPENCV=OFF \
-DUSE_OPENMP=OFF \
-DUSE_SIGNAL_HANDLER=ON \
-DCMAKE_BUILD_TYPE=Release \
-DUSE_MKL_IF_AVAILABLE=OFF \
-DUSE_LAPACK=OFF \
-DBUILD_CPP_EXAMPLES=OFF \
-Dmxnet_LINKER_LIBS=-lgfortran \
-G Ninja /work/mxnet
ninja -v
build_wheel
popd
}
build_armv7() {
set -ex
pushd .
cd /work/build
# Lapack functionality will be included and statically linked to openblas.
# But USE_LAPACK needs to be set to OFF, otherwise the main CMakeLists.txt
# file tries to add -llapack. Lapack functionality though, requires -lgfortran
# to be linked additionally.
cmake \
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} \
-DCMAKE_CROSSCOMPILING=ON \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DUSE_CUDA=OFF \
-DUSE_OPENCV=OFF \
-DUSE_OPENMP=ON \
-DUSE_SIGNAL_HANDLER=ON \
-DCMAKE_BUILD_TYPE=Release \
-DUSE_MKL_IF_AVAILABLE=OFF \
-DUSE_LAPACK=OFF \
-DBUILD_CPP_EXAMPLES=OFF \
-Dmxnet_LINKER_LIBS=-lgfortran \
-G Ninja /work/mxnet
ninja -v
build_wheel
popd
}
build_armv8() {
cmake \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DUSE_CUDA=OFF\
-DSUPPORT_F16C=OFF\
-DUSE_OPENCV=OFF\
-DUSE_OPENMP=OFF\
-DUSE_LAPACK=OFF\
-DUSE_SIGNAL_HANDLER=ON\
-DCMAKE_BUILD_TYPE=Release\
-DUSE_MKL_IF_AVAILABLE=OFF\
-G Ninja /work/mxnet
ninja -v
build_wheel
}
#
# ANDROID builds
#
build_android_armv7() {
set -ex
cd /work/build
cmake \
-DANDROID=ON\
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DUSE_CUDA=OFF\
-DUSE_SSE=OFF\
-DSUPPORT_F16C=OFF\
-DUSE_LAPACK=OFF\
-DUSE_OPENCV=OFF\
-DUSE_OPENMP=OFF\
-DUSE_SIGNAL_HANDLER=ON\
-DCMAKE_BUILD_TYPE=RelWithDebInfo\
-DUSE_MKL_IF_AVAILABLE=OFF\
-G Ninja /work/mxnet
ninja -v
}
build_android_armv8() {
set -ex
cd /work/build
cmake\
-DANDROID=ON \
-DUSE_CUDA=OFF\
-DUSE_SSE=OFF\
-DUSE_LAPACK=OFF\
-DUSE_OPENCV=OFF\
-DUSE_OPENMP=OFF\
-DUSE_SIGNAL_HANDLER=ON\
-DCMAKE_BUILD_TYPE=RelWithDebInfo\
-DUSE_MKL_IF_AVAILABLE=OFF\
-G Ninja /work/mxnet
ninja -v
}
build_centos7_cpu() {
set -ex
cd /work/mxnet
export CC="ccache gcc"
export CXX="ccache g++"
make \
DEV=1 \
USE_LAPACK=1 \
USE_LAPACK_PATH=/usr/lib64/liblapack.so \
USE_BLAS=openblas \
USE_DIST_KVSTORE=1 \
-j$(nproc)
}
build_amzn_linux_cpu() {
cd /work/build
cmake \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DUSE_CUDA=OFF\
-DUSE_OPENCV=ON\
-DUSE_OPENMP=ON\
-DUSE_SIGNAL_HANDLER=ON\
-DCMAKE_BUILD_TYPE=RelWithDebInfo\
-DUSE_MKL_IF_AVAILABLE=OFF\
-DUSE_LAPACK=OFF\
-DUSE_DIST_KVSTORE=ON\
-G Ninja /work/mxnet
ninja -v
}
build_centos7_mkldnn() {
set -ex
cd /work/mxnet
export CC="ccache gcc"
export CXX="ccache g++"
make \
DEV=1 \
USE_LAPACK=1 \
USE_LAPACK_PATH=/usr/lib64/liblapack.so \
USE_MKLDNN=1 \
USE_BLAS=openblas \
-j$(nproc)
}
build_centos7_gpu() {
set -ex
cd /work/mxnet
# unfortunately this build has problems in 3rdparty dependencies with ccache and make
# build_ccache_wrappers
make \
DEV=1 \
USE_LAPACK=1 \
USE_LAPACK_PATH=/usr/lib64/liblapack.so \
USE_BLAS=openblas \
USE_CUDA=1 \
USE_CUDA_PATH=/usr/local/cuda \
USE_CUDNN=1 \
USE_DIST_KVSTORE=1 \
-j$(nproc)
}
build_ubuntu_cpu() {
build_ubuntu_cpu_openblas
}
build_ubuntu_cpu_openblas() {
set -ex
export CC="ccache gcc"
export CXX="ccache g++"
make \
DEV=1 \
USE_CPP_PACKAGE=1 \
USE_BLAS=openblas \
USE_DIST_KVSTORE=1 \
-j$(nproc)
}
build_ubuntu_cpu_cmake_debug() {
set -ex
pushd .
cd /work/build
cmake \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DUSE_CUDA=OFF \
-DUSE_MKL_IF_AVAILABLE=OFF \
-DUSE_OPENMP=OFF \
-DUSE_OPENCV=ON \
-DCMAKE_BUILD_TYPE=Debug \
-G Ninja \
/work/mxnet
ninja -v
popd
}
build_ubuntu_cpu_clang39() {
set -ex
export CXX=clang++-3.9
export CC=clang-3.9
build_ccache_wrappers
make \
USE_CPP_PACKAGE=1 \
USE_BLAS=openblas \
USE_OPENMP=0 \
USE_DIST_KVSTORE=1 \
-j$(nproc)
}
build_ubuntu_cpu_clang50() {
set -ex
export CXX=clang++-5.0
export CC=clang-5.0
build_ccache_wrappers
make \
USE_CPP_PACKAGE=1 \
USE_BLAS=openblas \
USE_OPENMP=1 \
USE_DIST_KVSTORE=1 \
-j$(nproc)
}
build_ubuntu_cpu_clang39_mkldnn() {
set -ex
export CXX=clang++-3.9
export CC=clang-3.9
build_ccache_wrappers
make \
USE_CPP_PACKAGE=1 \
USE_BLAS=openblas \
USE_MKLDNN=1 \
USE_OPENMP=0 \
-j$(nproc)
}
build_ubuntu_cpu_clang50_mkldnn() {
set -ex
export CXX=clang++-5.0
export CC=clang-5.0
build_ccache_wrappers
make \
USE_CPP_PACKAGE=1 \
USE_BLAS=openblas \
USE_MKLDNN=1 \
USE_OPENMP=1 \
-j$(nproc)
}
build_ubuntu_cpu_mkldnn() {
set -ex
build_ccache_wrappers
make \
DEV=1 \
USE_CPP_PACKAGE=1 \
USE_BLAS=openblas \
USE_MKLDNN=1 \
-j$(nproc)
}
build_ubuntu_gpu() {
build_ubuntu_gpu_cuda91_cudnn7
}
build_ubuntu_gpu_mkldnn() {
set -ex
build_ccache_wrappers
make \
DEV=1 \
USE_CPP_PACKAGE=1 \
USE_BLAS=openblas \
USE_MKLDNN=1 \
USE_CUDA=1 \
USE_CUDA_PATH=/usr/local/cuda \
USE_CUDNN=1 \
-j$(nproc)
}
build_ubuntu_gpu_mkldnn_nocudnn() {
set -ex
build_ccache_wrappers
make \
DEV=1 \
USE_BLAS=openblas \
USE_MKLDNN=1 \
USE_CUDA=1 \
USE_CUDA_PATH=/usr/local/cuda \
USE_CUDNN=0 \
-j$(nproc)
}
build_ubuntu_gpu_cuda91_cudnn7() {
set -ex
# unfortunately this build has problems in 3rdparty dependencies with ccache and make
# build_ccache_wrappers
make \
DEV=1 \
USE_BLAS=openblas \
USE_CUDA=1 \
USE_CUDA_PATH=/usr/local/cuda \
USE_CUDNN=1 \
USE_CPP_PACKAGE=1 \
USE_DIST_KVSTORE=1 \
-j$(nproc)
}
build_ubuntu_amalgamation() {
set -ex
# Amalgamation can not be run with -j nproc
make -C amalgamation/ clean
make -C amalgamation/ USE_BLAS=openblas
}
build_ubuntu_amalgamation_min() {
set -ex
# Amalgamation can not be run with -j nproc
make -C amalgamation/ clean
make -C amalgamation/ USE_BLAS=openblas MIN=1
}
build_ubuntu_gpu_cmake_mkldnn() {
set -ex
cd /work/build
cmake \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DUSE_CUDA=1 \
-DUSE_CUDNN=1 \
-DUSE_MKLML_MKL=1 \
-DUSE_MKLDNN=1 \
-DCMAKE_BUILD_TYPE=Release \
-G Ninja \
/work/mxnet
ninja -v
# libmkldnn.so.0 is a link file. We need an actual binary file named libmkldnn.so.0.
cp 3rdparty/mkldnn/src/libmkldnn.so.0 3rdparty/mkldnn/src/libmkldnn.so.0.tmp
mv 3rdparty/mkldnn/src/libmkldnn.so.0.tmp 3rdparty/mkldnn/src/libmkldnn.so.0
}
build_ubuntu_gpu_cmake() {
set -ex
cd /work/build
cmake \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DUSE_CUDA=1 \
-DUSE_CUDNN=1 \
-DUSE_MKLML_MKL=0 \
-DUSE_MKLDNN=0 \
-DUSE_DIST_KVSTORE=1 \
-DCMAKE_BUILD_TYPE=Release \
-G Ninja \
/work/mxnet
ninja -v
}
# Testing
sanity_check() {
set -ex
tools/license_header.py check
make cpplint rcpplint jnilint
make pylint
nosetests-3.4 tests/tutorials/test_sanity_tutorials.py
}
unittest_ubuntu_python2_cpu() {
set -ex
export PYTHONPATH=./python/
# MXNET_MKLDNN_DEBUG is buggy and produces false positives
# https://github.com/apache/incubator-mxnet/issues/10026
#export MXNET_MKLDNN_DEBUG=1 # Ignored if not present
export MXNET_STORAGE_FALLBACK_LOG_VERBOSE=0
nosetests-2.7 $NOSE_COVERAGE_ARGUMENTS --with-xunit --xunit-file nosetests_unittest.xml --verbose tests/python/unittest
nosetests-2.7 $NOSE_COVERAGE_ARGUMENTS --with-xunit --xunit-file nosetests_train.xml --verbose tests/python/train
nosetests-2.7 $NOSE_COVERAGE_ARGUMENTS --with-xunit --xunit-file nosetests_quantization.xml --verbose tests/python/quantization
}
unittest_ubuntu_python3_cpu() {
set -ex
export PYTHONPATH=./python/
# MXNET_MKLDNN_DEBUG is buggy and produces false positives
# https://github.com/apache/incubator-mxnet/issues/10026
#export MXNET_MKLDNN_DEBUG=1 # Ignored if not present
export MXNET_STORAGE_FALLBACK_LOG_VERBOSE=0
nosetests-3.4 $NOSE_COVERAGE_ARGUMENTS --with-xunit --xunit-file nosetests_unittest.xml --verbose tests/python/unittest
nosetests-3.4 $NOSE_COVERAGE_ARGUMENTS --with-xunit --xunit-file nosetests_quantization.xml --verbose tests/python/quantization
}
unittest_ubuntu_python3_cpu_mkldnn() {
set -ex
export PYTHONPATH=./python/
# MXNET_MKLDNN_DEBUG is buggy and produces false positives
# https://github.com/apache/incubator-mxnet/issues/10026
#export MXNET_MKLDNN_DEBUG=1 # Ignored if not present
export MXNET_STORAGE_FALLBACK_LOG_VERBOSE=0
nosetests-3.4 $NOSE_COVERAGE_ARGUMENTS --with-xunit --xunit-file nosetests_unittest.xml --verbose tests/python/unittest
nosetests-3.4 $NOSE_COVERAGE_ARGUMENTS --with-xunit --xunit-file nosetests_mkl.xml --verbose tests/python/mkl
}
unittest_ubuntu_python2_gpu() {
set -ex
export PYTHONPATH=./python/
# MXNET_MKLDNN_DEBUG is buggy and produces false positives
# https://github.com/apache/incubator-mxnet/issues/10026
#export MXNET_MKLDNN_DEBUG=1 # Ignored if not present
export MXNET_STORAGE_FALLBACK_LOG_VERBOSE=0
nosetests-2.7 $NOSE_COVERAGE_ARGUMENTS --with-xunit --xunit-file nosetests_gpu.xml --verbose tests/python/gpu
}
tutorialtest_ubuntu_python3_gpu() {
set -ex
cd /work/mxnet/docs
export MXNET_DOCS_BUILD_MXNET=0
make html
export MXNET_STORAGE_FALLBACK_LOG_VERBOSE=0
export PYTHONPATH=/work/mxnet/python/
export MXNET_TUTORIAL_TEST_KERNEL=python3
cd /work/mxnet/tests/tutorials
nosetests-3.4 $NOSE_COVERAGE_ARGUMENTS --with-xunit --xunit-file nosetests_tutorials.xml test_tutorials.py --nologcapture
}
tutorialtest_ubuntu_python2_gpu() {
set -ex
cd /work/mxnet/docs
export MXNET_DOCS_BUILD_MXNET=0
make html
export MXNET_STORAGE_FALLBACK_LOG_VERBOSE=0
export PYTHONPATH=/work/mxnet/python/
export MXNET_TUTORIAL_TEST_KERNEL=python2
cd /work/mxnet/tests/tutorials
nosetests-3.4 $NOSE_COVERAGE_ARGUMENTS --with-xunit --xunit-file nosetests_tutorials.xml test_tutorials.py --nologcapture
}
unittest_ubuntu_python3_gpu() {
set -ex
export PYTHONPATH=./python/
# MXNET_MKLDNN_DEBUG is buggy and produces false positives
# https://github.com/apache/incubator-mxnet/issues/10026
#export MXNET_MKLDNN_DEBUG=1 # Ignored if not present
export MXNET_STORAGE_FALLBACK_LOG_VERBOSE=0
nosetests-3.4 $NOSE_COVERAGE_ARGUMENTS --with-xunit --xunit-file nosetests_gpu.xml --verbose tests/python/gpu
}
unittest_ubuntu_python3_gpu_nocudnn() {
set -ex
export PYTHONPATH=./python/
export MXNET_STORAGE_FALLBACK_LOG_VERBOSE=0
export CUDNN_OFF_TEST_ONLY=true
nosetests-3.4 $NOSE_COVERAGE_ARGUMENTS --with-xunit --xunit-file nosetests_gpu.xml --verbose tests/python/gpu
}
# quantization gpu currently only runs on P3 instances
# need to separte it from unittest_ubuntu_python2_gpu()
unittest_ubuntu_python2_quantization_gpu() {
set -ex
export PYTHONPATH=./python/
# MXNET_MKLDNN_DEBUG is buggy and produces false positives
# https://github.com/apache/incubator-mxnet/issues/10026
#export MXNET_MKLDNN_DEBUG=1 # Ignored if not present
export MXNET_STORAGE_FALLBACK_LOG_VERBOSE=0
nosetests-2.7 $NOSE_COVERAGE_ARGUMENTS --with-xunit --xunit-file nosetests_quantization_gpu.xml --verbose tests/python/quantization_gpu
}
# quantization gpu currently only runs on P3 instances
# need to separte it from unittest_ubuntu_python3_gpu()
unittest_ubuntu_python3_quantization_gpu() {
set -ex
export PYTHONPATH=./python/
# MXNET_MKLDNN_DEBUG is buggy and produces false positives
# https://github.com/apache/incubator-mxnet/issues/10026
#export MXNET_MKLDNN_DEBUG=1 # Ignored if not present
export MXNET_STORAGE_FALLBACK_LOG_VERBOSE=0
nosetests-3.4 $NOSE_COVERAGE_ARGUMENTS --with-xunit --xunit-file nosetests_quantization_gpu.xml --verbose tests/python/quantization_gpu
}
unittest_ubuntu_cpu_scala() {
set -ex
make scalapkg USE_BLAS=openblas USE_DIST_KVSTORE=1
make scalaunittest USE_BLAS=openblas USE_DIST_KVSTORE=1
}
unittest_ubuntu_cpu_clojure() {
set -ex
make scalapkg USE_OPENCV=1 USE_BLAS=openblas USE_DIST_KVSTORE=1
make scalainstall USE_OPENCV=1 USE_BLAS=openblas USE_DIST_KVSTORE=1
./contrib/clojure-package/ci-test.sh
}
unittest_ubuntu_cpugpu_perl() {
set -ex
./perl-package/test.sh
}
unittest_ubuntu_gpu_cpp() {
set -ex
build/tests/mxnet_unit_tests
}
unittest_ubuntu_cpu_R() {
set -ex
mkdir -p /tmp/r-site-library
# make -j not supported
make rpkg USE_BLAS=openblas R_LIBS=/tmp/r-site-library
R CMD INSTALL --library=/tmp/r-site-library R-package
make rpkgtest R_LIBS=/tmp/r-site-library
}
unittest_ubuntu_gpu_R() {
set -ex
mkdir -p /tmp/r-site-library
# make -j not supported
make rpkg USE_BLAS=openblas R_LIBS=/tmp/r-site-library
R CMD INSTALL --library=/tmp/r-site-library R-package
make rpkgtest R_LIBS=/tmp/r-site-library R_GPU_ENABLE=1
}
unittest_centos7_cpu() {
set -ex
cd /work/mxnet
python3.6 -m "nose" $NOSE_COVERAGE_ARGUMENTS --with-xunit --xunit-file nosetests_unittest.xml --verbose tests/python/unittest
python3.6 -m "nose" $NOSE_COVERAGE_ARGUMENTS --with-xunit --xunit-file nosetests_train.xml --verbose tests/python/train
}
unittest_centos7_gpu() {
set -ex
cd /work/mxnet
python3.6 -m "nose" $NOSE_COVERAGE_ARGUMENTS --with-xunit --xunit-file nosetests_gpu.xml --verbose tests/python/gpu
}
integrationtest_ubuntu_cpu_onnx() {
set -ex
export PYTHONPATH=./python/
python example/onnx/super_resolution.py
pytest tests/python-pytest/onnx/import/mxnet_backend_test.py
pytest tests/python-pytest/onnx/import/onnx_import_test.py
pytest tests/python-pytest/onnx/import/gluon_backend_test.py
pytest tests/python-pytest/onnx/export/onnx_backend_test.py
python tests/python-pytest/onnx/export/mxnet_export_test.py
}
integrationtest_ubuntu_gpu_python() {
set -ex
export PYTHONPATH=./python/
export MXNET_STORAGE_FALLBACK_LOG_VERBOSE=0
python example/image-classification/test_score.py
}
integrationtest_ubuntu_gpu_caffe() {
set -ex
export PYTHONPATH=/work/deps/caffe/python:./python
python tools/caffe_converter/test_converter.py
}
integrationtest_ubuntu_gpu_cpp_package() {
set -ex
cpp-package/tests/ci_test.sh
}
integrationtest_ubuntu_cpu_dist_kvstore() {
set -ex
export PYTHONPATH=./python/
export MXNET_STORAGE_FALLBACK_LOG_VERBOSE=0
export MXNET_USE_OPERATOR_TUNING=0
cd tests/nightly/
../../tools/launch.py -n 7 --launcher local python dist_sync_kvstore.py --type=gluon_step_cpu
../../tools/launch.py -n 7 --launcher local python dist_sync_kvstore.py --type=gluon_sparse_step_cpu
../../tools/launch.py -n 7 --launcher local python dist_sync_kvstore.py --type=invalid_cpu
../../tools/launch.py -n 7 --launcher local python dist_sync_kvstore.py --type=gluon_type_cpu
../../tools/launch.py -n 7 --launcher local python dist_sync_kvstore.py
../../tools/launch.py -n 7 --launcher local python dist_sync_kvstore.py --no-multiprecision
../../tools/launch.py -n 7 --launcher local python dist_sync_kvstore.py --type=compressed_cpu
../../tools/launch.py -n 7 --launcher local python dist_sync_kvstore.py --type=compressed_cpu --no-multiprecision
}
integrationtest_ubuntu_gpu_scala() {
set -ex
make scalapkg USE_OPENCV=1 USE_BLAS=openblas USE_CUDA=1 USE_CUDA_PATH=/usr/local/cuda USE_CUDNN=1 USE_DIST_KVSTORE=1 SCALA_ON_GPU=1
make scalaintegrationtest USE_OPENCV=1 USE_BLAS=openblas USE_CUDA=1 USE_CUDA_PATH=/usr/local/cuda USE_CUDNN=1 SCALA_TEST_ON_GPU=1 USE_DIST_KVSTORE=1
}
integrationtest_ubuntu_gpu_dist_kvstore() {
set -ex
export PYTHONPATH=./python/
export MXNET_STORAGE_FALLBACK_LOG_VERBOSE=0
cd tests/nightly/
../../tools/launch.py -n 7 --launcher local python dist_device_sync_kvstore.py
../../tools/launch.py -n 7 --launcher local python dist_sync_kvstore.py --type=init_gpu
}
test_ubuntu_cpu_python2() {
set -ex
pushd .
export MXNET_LIBRARY_PATH=/work/build/libmxnet.so
VENV=mxnet_py2_venv
virtualenv -p `which python2` $VENV
source $VENV/bin/activate
pip install nose nose-timer
cd /work/mxnet/python
pip install -e .
cd /work/mxnet
python -m "nose" $NOSE_COVERAGE_ARGUMENTS --with-timer --verbose tests/python/unittest
popd
}
test_ubuntu_cpu_python3() {
set -ex
pushd .
export MXNET_LIBRARY_PATH=/work/build/libmxnet.so
VENV=mxnet_py3_venv
virtualenv -p `which python3` $VENV
source $VENV/bin/activate
cd /work/mxnet/python
pip3 install nose nose-timer
pip3 install -e .
cd /work/mxnet
python3 -m "nose" $NOSE_COVERAGE_ARGUMENTS --with-timer --verbose tests/python/unittest
popd
}
build_docs() {
set -ex
pushd .
cd /work/mxnet/docs/build_version_doc
# Parameters are set in the Jenkins pipeline: restricted-website-build
# $1 is the list of branches to build; $2 is the list of tags to display
# So you can build from the 1.2.0 branch, but display 1.2.1 on the site
./build_all_version.sh $1 $2
# $3 is the default version tag for the website; $4 is the base URL
./update_all_version.sh $2 $3 $4
cd VersionedWeb
tar -zcvf ../artifacts.tgz .
popd
}
# Functions that run the nightly Tests:
#Runs Apache RAT Check on MXNet Source for License Headers
nightly_test_rat_check() {
set -e
pushd .
cd /work/deps/trunk/apache-rat/target
# Use shell number 5 to duplicate the log output. It get sprinted and stored in $OUTPUT at the same time https://stackoverflow.com/a/12451419
exec 5>&1
OUTPUT=$(java -jar apache-rat-0.13-SNAPSHOT.jar -E /work/mxnet/tests/nightly/apache_rat_license_check/rat-excludes -d /work/mxnet|tee >(cat - >&5))
ERROR_MESSAGE="Printing headers for text files without a valid license header"
echo "-------Process The Output-------"
if [[ $OUTPUT =~ $ERROR_MESSAGE ]]; then
echo "ERROR: RAT Check detected files with unknown licenses. Please fix and run test again!";
exit 1
else
echo "SUCCESS: There are no files with an Unknown License.";
fi
popd
}
#Checks MXNet for Compilation Warnings
nightly_test_compilation_warning() {
set -ex
export PYTHONPATH=./python/
./tests/nightly/compilation_warnings/compilation_warnings.sh
}
#Checks the MXNet Installation Guide - currently checks pip, build from source and virtual env on cpu and gpu
nightly_test_installation() {
set -ex
# The run_test_installation_docs.sh expects the path to index.md and the first and last line numbers of the index.md file
# First execute the test script and then call the method specified by the Jenkinsfile - ${1}
source ./tests/jenkins/run_test_installation_docs.sh docs/install/index.md 1 1686; ${1}
}
#Runs a simple MNIST training example
nightly_test_image_classification() {
set -ex
./tests/nightly/test_image_classification.sh
}
#Single Node KVStore Test
nightly_test_KVStore_singleNode() {
set -ex
export PYTHONPATH=./python/
python tests/nightly/test_kvstore.py
}
#Tests Amalgamation Build with 5 different sets of flags
nightly_test_amalgamation() {
set -ex
# Amalgamation can not be run with -j nproc
make -C amalgamation/ clean
make -C amalgamation/ ${1} ${2}
}
#Tests Amalgamation Build for Javascript
nightly_test_javascript() {
set -ex
export LLVM=/work/deps/emscripten-fastcomp/build/bin
# This part is needed to run emcc correctly
cd /work/deps/emscripten
./emcc
touch ~/.emscripten
make -C /work/mxnet/amalgamation libmxnet_predict.js MIN=1 EMCC=/work/deps/emscripten/emcc
}
#Tests Model backwards compatibility on MXNet
nightly_model_backwards_compat_test() {
set -ex
export PYTHONPATH=/work/mxnet/python/
./tests/nightly/model_backwards_compatibility_check/model_backward_compat_checker.sh
}
#Backfills S3 bucket with models trained on earlier versions of mxnet
nightly_model_backwards_compat_train() {
set -ex
export PYTHONPATH=./python/
./tests/nightly/model_backwards_compatibility_check/train_mxnet_legacy_models.sh
}
# Nightly 'MXNet: The Straight Dope' Single-GPU Tests
nightly_straight_dope_python2_single_gpu_tests() {
set -ex
cd /work/mxnet/tests/nightly/straight_dope
export PYTHONPATH=/work/mxnet/python/
export MXNET_TEST_KERNEL=python2
nosetests-2.7 --with-xunit --xunit-file nosetests_straight_dope_python2_single_gpu.xml \
test_notebooks_single_gpu.py --nologcapture
}
nightly_straight_dope_python3_single_gpu_tests() {
set -ex
cd /work/mxnet/tests/nightly/straight_dope
export PYTHONPATH=/work/mxnet/python/
export MXNET_TEST_KERNEL=python3
nosetests-3.4 --with-xunit --xunit-file nosetests_straight_dope_python3_single_gpu.xml \
test_notebooks_single_gpu.py --nologcapture
}
# Nightly 'MXNet: The Straight Dope' Multi-GPU Tests
nightly_straight_dope_python2_multi_gpu_tests() {
set -ex
cd /work/mxnet/tests/nightly/straight_dope
export PYTHONPATH=/work/mxnet/python/
export MXNET_TEST_KERNEL=python2
nosetests-2.7 --with-xunit --xunit-file nosetests_straight_dope_python2_multi_gpu.xml \
test_notebooks_multi_gpu.py --nologcapture
}
nightly_straight_dope_python3_multi_gpu_tests() {
set -ex
cd /work/mxnet/tests/nightly/straight_dope
export PYTHONPATH=/work/mxnet/python/
export MXNET_TEST_KERNEL=python3
nosetests-3.4 --with-xunit --xunit-file nosetests_straight_dope_python3_multi_gpu.xml \
test_notebooks_multi_gpu.py --nologcapture
}
# Deploy
deploy_docs() {
set -ex
pushd .
make docs
popd
}
# broken_link_checker
broken_link_checker() {
set -ex
./tests/nightly/broken_link_checker_test/broken_link_checker.sh
}
##############################################################
# MAIN
#
# Run function passed as argument
set +x
if [ $# -gt 0 ]
then
$@
else
cat<<EOF
$0: Execute a function by passing it as an argument to the script:
Possible commands:
EOF
declare -F | cut -d' ' -f3
echo
fi