[EM] Make page concatenation optional. (#10826)
This PR introduces a new parameter `extmem_concat_pages` to make the page concatenation optional for GPU hist. In addition, the document is updated for the new GPU-based external memory.
This commit is contained in:
@@ -3,6 +3,8 @@ import sys
|
||||
import pytest
|
||||
from hypothesis import given, settings, strategies
|
||||
|
||||
import xgboost as xgb
|
||||
from xgboost import testing as tm
|
||||
from xgboost.testing import no_cupy
|
||||
from xgboost.testing.updater import check_extmem_qdm, check_quantile_loss_extmem
|
||||
|
||||
@@ -72,6 +74,22 @@ def test_extmem_qdm(
|
||||
check_extmem_qdm(n_samples_per_batch, n_features, n_batches, "cuda", on_host)
|
||||
|
||||
|
||||
def test_concat_pages() -> None:
|
||||
it = tm.IteratorForTest(*tm.make_batches(64, 16, 4, use_cupy=True), cache=None)
|
||||
Xy = xgb.ExtMemQuantileDMatrix(it)
|
||||
with pytest.raises(ValueError, match="can not be used with concatenated pages"):
|
||||
booster = xgb.train(
|
||||
{
|
||||
"device": "cuda",
|
||||
"subsample": 0.5,
|
||||
"sampling_method": "gradient_based",
|
||||
"extmem_concat_pages": True,
|
||||
"objective": "reg:absoluteerror",
|
||||
},
|
||||
Xy,
|
||||
)
|
||||
|
||||
|
||||
@given(
|
||||
strategies.integers(1, 64),
|
||||
strategies.integers(1, 8),
|
||||
|
||||
@@ -6,24 +6,32 @@ import pytest
|
||||
|
||||
from xgboost import testing as tm
|
||||
|
||||
sys.path.append("tests/python")
|
||||
import test_demos as td # noqa
|
||||
DEMO_DIR = tm.demo_dir(__file__)
|
||||
PYTHON_DEMO_DIR = os.path.join(DEMO_DIR, "guide-python")
|
||||
|
||||
|
||||
@pytest.mark.skipif(**tm.no_cupy())
|
||||
def test_data_iterator():
|
||||
script = os.path.join(td.PYTHON_DEMO_DIR, "quantile_data_iterator.py")
|
||||
script = os.path.join(PYTHON_DEMO_DIR, "quantile_data_iterator.py")
|
||||
cmd = ["python", script]
|
||||
subprocess.check_call(cmd)
|
||||
|
||||
|
||||
def test_update_process_demo():
|
||||
script = os.path.join(td.PYTHON_DEMO_DIR, "update_process.py")
|
||||
script = os.path.join(PYTHON_DEMO_DIR, "update_process.py")
|
||||
cmd = ["python", script]
|
||||
subprocess.check_call(cmd)
|
||||
|
||||
|
||||
def test_categorical_demo():
|
||||
script = os.path.join(td.PYTHON_DEMO_DIR, "categorical.py")
|
||||
script = os.path.join(PYTHON_DEMO_DIR, "categorical.py")
|
||||
cmd = ["python", script]
|
||||
subprocess.check_call(cmd)
|
||||
|
||||
|
||||
@pytest.mark.skipif(**tm.no_rmm())
|
||||
@pytest.mark.skipif(**tm.no_cupy())
|
||||
def test_external_memory_demo():
|
||||
script = os.path.join(PYTHON_DEMO_DIR, "external_memory.py")
|
||||
cmd = ["python", script]
|
||||
subprocess.check_call(cmd)
|
||||
|
||||
Reference in New Issue
Block a user