From 96f8843694eb367da137a5e3b28180e5d68f798f Mon Sep 17 00:00:00 2001 From: Jiaming Yuan Date: Mon, 3 May 2021 21:30:26 +0800 Subject: [PATCH] [backport] CI fixes (#6933) * Relax shotgun test. (#6900) It's non-deterministic algorithm, the test is flaky. * Disable pylint error. (#6911) * [CI] Skip external memory gtest on osx. (#6901) * [CI] Fix custom metric test with empty dataset. (#6917) * Reduce Travis environment setup time. (#6912) * Remove unused r from travis. * Don't update homebrew. * Don't install indirect/unused dependencies like libgit2, wget, openssl. * Move graphviz installation to conda. * Relax shotgun test. (#6918) * Relax test for decision stump in distributed environment. (#6919) * Backport cupy fix. --- .github/workflows/main.yml | 5 ++++- .travis.yml | 12 ++---------- python-package/xgboost/core.py | 6 ++++-- tests/ci_build/conda_env/macos_cpu_test.yml | 1 + tests/python/test_linear.py | 10 ++++------ tests/python/test_with_dask.py | 12 +++++++++++- tests/python/testing.py | 2 ++ tests/travis/run_test.sh | 2 -- tests/travis/setup.sh | 4 ++++ 9 files changed, 32 insertions(+), 22 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 605c64cf1..90b11c680 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -31,7 +31,10 @@ jobs: - name: Run gtest binary run: | cd build - ctest --exclude-regex AllTestsInDMLCUnitTests --extra-verbose + # libomp internal error: + # OMP: Error #131: Thread identifier invalid. + ./testxgboost --gtest_filter="-HistIndexCreationWithExternalMemory.Test" + ctest -R TestXGBoostCLI --extra-verbose gtest-cpu-nonomp: name: Test Google C++ unittest (CPU Non-OMP) diff --git a/.travis.yml b/.travis.yml index 83bfe07c8..b073fd29d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,18 +19,10 @@ jobs: env: TASK=java_test # dependent brew packages +# the dependencies from homebrew is installed manually from setup script due to outdated image from travis. addons: homebrew: - packages: - - cmake - - libomp - - graphviz - - openssl - - libgit2 - - lz4 - - wget - - r - update: true + update: false apt: packages: - snapd diff --git a/python-package/xgboost/core.py b/python-package/xgboost/core.py index 4176dcfa9..97a0bf99b 100644 --- a/python-package/xgboost/core.py +++ b/python-package/xgboost/core.py @@ -1872,7 +1872,9 @@ class Booster(object): ) ) return _prediction_output(shape, dims, preds, False) - if lazy_isinstance(data, "cupy.core.core", "ndarray"): + if lazy_isinstance(data, "cupy.core.core", "ndarray") or lazy_isinstance( + data, "cupy._core.core", "ndarray" + ): from .data import _transform_cupy_array data = _transform_cupy_array(data) interface = data.__cuda_array_interface__ @@ -2027,7 +2029,7 @@ class Booster(object): """ if isinstance(fout, (STRING_TYPES, os.PathLike)): fout = os.fspath(os.path.expanduser(fout)) - fout = open(fout, 'w') + fout = open(fout, 'w') # pylint: disable=consider-using-with need_close = True else: need_close = False diff --git a/tests/ci_build/conda_env/macos_cpu_test.yml b/tests/ci_build/conda_env/macos_cpu_test.yml index feb102ec2..6a9092b2b 100644 --- a/tests/ci_build/conda_env/macos_cpu_test.yml +++ b/tests/ci_build/conda_env/macos_cpu_test.yml @@ -15,6 +15,7 @@ dependencies: - matplotlib - dask - distributed +- graphviz - python-graphviz - hypothesis - astroid diff --git a/tests/python/test_linear.py b/tests/python/test_linear.py index eaf0e86a1..5e1f6b8e9 100644 --- a/tests/python/test_linear.py +++ b/tests/python/test_linear.py @@ -57,15 +57,13 @@ class TestLinear: param['updater'] = 'shotgun' param = dataset.set_params(param) result = train_result(param, dataset.get_dmat(), num_rounds)['train'][dataset.metric] - # shotgun is non-deterministic, so we relax the test by sampling - # result. + # shotgun is non-deterministic, so we relax the test by only using first and last + # iteration. if len(result) > 2: - sampled_result = [score for i, score in enumerate(result) - if i % 2 == 0] - sampled_result[-1] = result[-1] # make sure the last one is used + sampled_result = (result[0], result[-1]) else: sampled_result = result - assert tm.non_increasing(sampled_result, 1e-3) + assert tm.non_increasing(sampled_result) @given(parameter_strategy, strategies.integers(10, 50), tm.dataset_strategy, strategies.floats(1e-5, 2.0), diff --git a/tests/python/test_with_dask.py b/tests/python/test_with_dask.py index f8403cdf0..eae0f54b1 100644 --- a/tests/python/test_with_dask.py +++ b/tests/python/test_with_dask.py @@ -1023,7 +1023,17 @@ class TestWithDask: evals=[(m, 'train')])['history'] note(history) history = history['train'][dataset.metric] - assert tm.non_increasing(history) + + def is_stump(): + return params["max_depth"] == 1 or params["max_leaves"] == 1 + + def minimum_bin(): + return "max_bin" in params and params["max_bin"] == 2 + + if minimum_bin() and is_stump(): + assert tm.non_increasing(history, tolerance=1e-3) + else: + assert tm.non_increasing(history) # Make sure that it's decreasing assert history[-1] < history[0] diff --git a/tests/python/testing.py b/tests/python/testing.py index 6294964dc..4b2b31e09 100644 --- a/tests/python/testing.py +++ b/tests/python/testing.py @@ -272,6 +272,8 @@ def eval_error_metric(predt, dtrain: xgb.DMatrix): label = dtrain.get_label() r = np.zeros(predt.shape) gt = predt > 0.5 + if predt.size == 0: + return "CustomErr", 0 r[gt] = 1 - label[gt] le = predt <= 0.5 r[le] = label[le] diff --git a/tests/travis/run_test.sh b/tests/travis/run_test.sh index ee38061a1..3c100e99b 100755 --- a/tests/travis/run_test.sh +++ b/tests/travis/run_test.sh @@ -1,7 +1,5 @@ #!/bin/bash -make -f dmlc-core/scripts/packages.mk lz4 - source $HOME/miniconda/bin/activate if [ ${TASK} == "python_sdist_test" ]; then diff --git a/tests/travis/setup.sh b/tests/travis/setup.sh index 5d5929d4b..3ce285ed2 100755 --- a/tests/travis/setup.sh +++ b/tests/travis/setup.sh @@ -1,5 +1,9 @@ #!/bin/bash +# https://travis-ci.community/t/macos-build-fails-because-of-homebrew-bundle-unknown-command/7296/27 +brew install cmake libomp lz4 + + if [ ${TASK} == "python_test" ] || [ ${TASK} == "python_sdist_test" ]; then if [ ${TRAVIS_OS_NAME} == "osx" ]; then wget --no-verbose -O conda.sh https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh