Skip to content

Commit 152e2fb

Browse files
authored
Unify test helpers for creating ctx. (dmlc#9274)
1 parent ea0deec commit 152e2fb

36 files changed

+161
-169
lines changed

tests/cpp/common/test_algorithm.cu

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
#include "../../../src/common/algorithm.cuh"
1313
#include "../../../src/common/device_helpers.cuh"
14-
#include "../helpers.h" // CreateEmptyGenericParam
14+
#include "../helpers.h" // MakeCUDACtx
1515

1616
namespace xgboost {
1717
namespace common {
@@ -83,7 +83,7 @@ TEST(Algorithm, GpuArgSort) {
8383
TEST(Algorithm, SegmentedSequence) {
8484
dh::device_vector<std::size_t> idx(16);
8585
dh::device_vector<std::size_t> ptr(3);
86-
Context ctx = CreateEmptyGenericParam(0);
86+
Context ctx = MakeCUDACtx(0);
8787
ptr[0] = 0;
8888
ptr[1] = 4;
8989
ptr[2] = idx.size();

tests/cpp/common/test_column_matrix.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ TEST(DenseColumn, Test) {
1414
int32_t max_num_bins[] = {static_cast<int32_t>(std::numeric_limits<uint8_t>::max()) + 1,
1515
static_cast<int32_t>(std::numeric_limits<uint16_t>::max()) + 1,
1616
static_cast<int32_t>(std::numeric_limits<uint16_t>::max()) + 2};
17-
auto ctx = CreateEmptyGenericParam(Context::kCpuId);
17+
Context ctx;
1818
BinTypeSize last{kUint8BinsTypeSize};
1919
for (int32_t max_num_bin : max_num_bins) {
2020
auto dmat = RandomDataGenerator(100, 10, 0.0).GenerateDMatrix();
@@ -63,7 +63,7 @@ TEST(SparseColumn, Test) {
6363
int32_t max_num_bins[] = {static_cast<int32_t>(std::numeric_limits<uint8_t>::max()) + 1,
6464
static_cast<int32_t>(std::numeric_limits<uint16_t>::max()) + 1,
6565
static_cast<int32_t>(std::numeric_limits<uint16_t>::max()) + 2};
66-
auto ctx = CreateEmptyGenericParam(Context::kCpuId);
66+
Context ctx;
6767
for (int32_t max_num_bin : max_num_bins) {
6868
auto dmat = RandomDataGenerator(100, 1, 0.85).GenerateDMatrix();
6969
GHistIndexMatrix gmat{&ctx, dmat.get(), max_num_bin, 0.5f, false};
@@ -92,7 +92,7 @@ TEST(DenseColumnWithMissing, Test) {
9292
int32_t max_num_bins[] = {static_cast<int32_t>(std::numeric_limits<uint8_t>::max()) + 1,
9393
static_cast<int32_t>(std::numeric_limits<uint16_t>::max()) + 1,
9494
static_cast<int32_t>(std::numeric_limits<uint16_t>::max()) + 2};
95-
auto ctx = CreateEmptyGenericParam(Context::kCpuId);
95+
Context ctx;
9696
for (int32_t max_num_bin : max_num_bins) {
9797
auto dmat = RandomDataGenerator(100, 1, 0.5).GenerateDMatrix();
9898
GHistIndexMatrix gmat(&ctx, dmat.get(), max_num_bin, 0.2, false);

tests/cpp/common/test_hist_util.cc

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -156,28 +156,28 @@ TEST(CutsBuilder, SearchGroupInd) {
156156
}
157157

158158
TEST(HistUtil, DenseCutsCategorical) {
159-
auto ctx = CreateEmptyGenericParam(Context::kCpuId);
160-
int categorical_sizes[] = {2, 6, 8, 12};
161-
int num_bins = 256;
162-
int sizes[] = {25, 100, 1000};
163-
for (auto n : sizes) {
164-
for (auto num_categories : categorical_sizes) {
165-
auto x = GenerateRandomCategoricalSingleColumn(n, num_categories);
166-
std::vector<float> x_sorted(x);
167-
std::sort(x_sorted.begin(), x_sorted.end());
168-
auto dmat = GetDMatrixFromData(x, n, 1);
169-
HistogramCuts cuts = SketchOnDMatrix(&ctx, dmat.get(), num_bins);
170-
auto cuts_from_sketch = cuts.Values();
171-
EXPECT_LT(cuts.MinValues()[0], x_sorted.front());
172-
EXPECT_GT(cuts_from_sketch.front(), x_sorted.front());
173-
EXPECT_GE(cuts_from_sketch.back(), x_sorted.back());
174-
EXPECT_EQ(cuts_from_sketch.size(), static_cast<size_t>(num_categories));
175-
}
176-
}
159+
Context ctx;
160+
int categorical_sizes[] = {2, 6, 8, 12};
161+
int num_bins = 256;
162+
int sizes[] = {25, 100, 1000};
163+
for (auto n : sizes) {
164+
for (auto num_categories : categorical_sizes) {
165+
auto x = GenerateRandomCategoricalSingleColumn(n, num_categories);
166+
std::vector<float> x_sorted(x);
167+
std::sort(x_sorted.begin(), x_sorted.end());
168+
auto dmat = GetDMatrixFromData(x, n, 1);
169+
HistogramCuts cuts = SketchOnDMatrix(&ctx, dmat.get(), num_bins);
170+
auto cuts_from_sketch = cuts.Values();
171+
EXPECT_LT(cuts.MinValues()[0], x_sorted.front());
172+
EXPECT_GT(cuts_from_sketch.front(), x_sorted.front());
173+
EXPECT_GE(cuts_from_sketch.back(), x_sorted.back());
174+
EXPECT_EQ(cuts_from_sketch.size(), static_cast<size_t>(num_categories));
175+
}
176+
}
177177
}
178178

179179
TEST(HistUtil, DenseCutsAccuracyTest) {
180-
auto ctx = CreateEmptyGenericParam(Context::kCpuId);
180+
Context ctx;
181181
int bin_sizes[] = {2, 16, 256, 512};
182182
int sizes[] = {100};
183183
int num_columns = 5;
@@ -195,7 +195,7 @@ TEST(HistUtil, DenseCutsAccuracyTestWeights) {
195195
int bin_sizes[] = {2, 16, 256, 512};
196196
int sizes[] = {100, 1000, 1500};
197197
int num_columns = 5;
198-
auto ctx = CreateEmptyGenericParam(Context::kCpuId);
198+
Context ctx;
199199
for (auto num_rows : sizes) {
200200
auto x = GenerateRandom(num_rows, num_columns);
201201
auto dmat = GetDMatrixFromData(x, num_rows, num_columns);
@@ -218,7 +218,7 @@ void TestQuantileWithHessian(bool use_sorted) {
218218
int bin_sizes[] = {2, 16, 256, 512};
219219
int sizes[] = {1000, 1500};
220220
int num_columns = 5;
221-
auto ctx = CreateEmptyGenericParam(Context::kCpuId);
221+
Context ctx;
222222
for (auto num_rows : sizes) {
223223
auto x = GenerateRandom(num_rows, num_columns);
224224
auto dmat = GetDMatrixFromData(x, num_rows, num_columns);
@@ -257,7 +257,7 @@ TEST(HistUtil, DenseCutsExternalMemory) {
257257
int bin_sizes[] = {2, 16, 256, 512};
258258
int sizes[] = {100, 1000, 1500};
259259
int num_columns = 5;
260-
auto ctx = CreateEmptyGenericParam(Context::kCpuId);
260+
Context ctx;
261261
for (auto num_rows : sizes) {
262262
auto x = GenerateRandom(num_rows, num_columns);
263263
dmlc::TemporaryDirectory tmpdir;
@@ -278,7 +278,7 @@ TEST(HistUtil, IndexBinBound) {
278278
kUint32BinsTypeSize};
279279
size_t constexpr kRows = 100;
280280
size_t constexpr kCols = 10;
281-
auto ctx = CreateEmptyGenericParam(Context::kCpuId);
281+
Context ctx;
282282
size_t bin_id = 0;
283283
for (auto max_bin : bin_sizes) {
284284
auto p_fmat = RandomDataGenerator(kRows, kCols, 0).GenerateDMatrix();
@@ -303,7 +303,7 @@ TEST(HistUtil, IndexBinData) {
303303
static_cast<uint64_t>(std::numeric_limits<uint16_t>::max()) + 2 };
304304
size_t constexpr kRows = 100;
305305
size_t constexpr kCols = 10;
306-
auto ctx = CreateEmptyGenericParam(Context::kCpuId);
306+
Context ctx;
307307

308308
for (auto max_bin : kBinSizes) {
309309
auto p_fmat = RandomDataGenerator(kRows, kCols, 0).GenerateDMatrix();
@@ -331,7 +331,7 @@ void TestSketchFromWeights(bool with_group) {
331331
size_t constexpr kRows = 300, kCols = 20, kBins = 256;
332332
size_t constexpr kGroups = 10;
333333
auto m = RandomDataGenerator{kRows, kCols, 0}.Device(0).GenerateDMatrix();
334-
auto ctx = CreateEmptyGenericParam(Context::kCpuId);
334+
Context ctx;
335335
common::HistogramCuts cuts = SketchOnDMatrix(&ctx, m.get(), kBins);
336336

337337
MetaInfo info;
@@ -397,7 +397,7 @@ TEST(HistUtil, SketchFromWeights) {
397397
}
398398

399399
TEST(HistUtil, SketchCategoricalFeatures) {
400-
auto ctx = CreateEmptyGenericParam(Context::kCpuId);
400+
Context ctx;
401401
TestCategoricalSketch(1000, 256, 32, false, [&ctx](DMatrix* p_fmat, int32_t num_bins) {
402402
return SketchOnDMatrix(&ctx, p_fmat, num_bins);
403403
});

tests/cpp/common/test_hist_util.cu

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ TEST(HistUtil, AdapterDeviceSketch) {
310310
data::CupyAdapter adapter(str);
311311

312312
auto device_cuts = MakeUnweightedCutsForTest(adapter, num_bins, missing);
313-
auto ctx = CreateEmptyGenericParam(Context::kCpuId);
313+
Context ctx;
314314
auto host_cuts = GetHostCuts(&ctx, &adapter, num_bins, missing);
315315

316316
EXPECT_EQ(device_cuts.Values(), host_cuts.Values());

tests/cpp/common/test_quantile.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ namespace {
302302
void TestSameOnAllWorkers() {
303303
auto const world = collective::GetWorldSize();
304304
constexpr size_t kRows = 1000, kCols = 100;
305-
auto ctx = CreateEmptyGenericParam(Context::kCpuId);
305+
Context ctx;
306306

307307
RunWithSeedsAndBins(
308308
kRows, [=, &ctx](int32_t seed, size_t n_bins, MetaInfo const&) {

tests/cpp/data/test_gradient_index.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,15 @@
2121
#include "../../../src/data/adapter.h" // for SparsePageAdapterBatch
2222
#include "../../../src/data/gradient_index.h" // for GHistIndexMatrix
2323
#include "../../../src/tree/param.h" // for TrainParam
24-
#include "../helpers.h" // for CreateEmptyGenericParam, GenerateRandomCa...
24+
#include "../helpers.h" // for GenerateRandomCategoricalSingleColumn...
2525
#include "xgboost/base.h" // for bst_bin_t
2626
#include "xgboost/context.h" // for Context
2727
#include "xgboost/host_device_vector.h" // for HostDeviceVector
2828

2929
namespace xgboost {
3030
namespace data {
3131
TEST(GradientIndex, ExternalMemory) {
32-
auto ctx = CreateEmptyGenericParam(Context::kCpuId);
32+
Context ctx;
3333
std::unique_ptr<DMatrix> dmat = CreateSparsePageDMatrix(10000);
3434
std::vector<size_t> base_rowids;
3535
std::vector<float> hessian(dmat->Info().num_row_, 1);
@@ -58,7 +58,7 @@ TEST(GradientIndex, FromCategoricalBasic) {
5858
size_t max_bins = 8;
5959
auto x = GenerateRandomCategoricalSingleColumn(kRows, kCats);
6060
auto m = GetDMatrixFromData(x, kRows, 1);
61-
auto ctx = CreateEmptyGenericParam(Context::kCpuId);
61+
Context ctx;
6262

6363
auto &h_ft = m->Info().feature_types.HostVector();
6464
h_ft.resize(kCols, FeatureType::kCategorical);

tests/cpp/data/test_sparse_page_dmatrix.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ void TestSparseDMatrixLoadFile(Context const* ctx) {
6767
}
6868

6969
TEST(SparsePageDMatrix, LoadFile) {
70-
auto ctx = CreateEmptyGenericParam(Context::kCpuId);
70+
Context ctx;
7171
TestSparseDMatrixLoadFile<SparsePage>(&ctx);
7272
TestSparseDMatrixLoadFile<CSCPage>(&ctx);
7373
TestSparseDMatrixLoadFile<SortedCSCPage>(&ctx);
@@ -77,7 +77,7 @@ TEST(SparsePageDMatrix, LoadFile) {
7777
template <typename Page>
7878
void TestRetainPage() {
7979
auto m = CreateSparsePageDMatrix(10000);
80-
auto ctx = CreateEmptyGenericParam(Context::kCpuId);
80+
Context ctx;
8181
auto batches = m->GetBatches<Page>(&ctx);
8282
auto begin = batches.begin();
8383
auto end = batches.end();
@@ -145,7 +145,7 @@ TEST(SparsePageDMatrix, ColAccess) {
145145
const std::string tmp_file = tempdir.path + "/simple.libsvm";
146146
CreateSimpleTestData(tmp_file);
147147
xgboost::DMatrix *dmat = xgboost::DMatrix::Load(UriSVM(tmp_file, tmp_file));
148-
auto ctx = CreateEmptyGenericParam(Context::kCpuId);
148+
Context ctx;
149149

150150
// Loop over the batches and assert the data is as expected
151151
size_t iter = 0;
@@ -224,7 +224,7 @@ TEST(SparsePageDMatrix, ColAccessBatches) {
224224
// Create multiple sparse pages
225225
std::unique_ptr<xgboost::DMatrix> dmat{xgboost::CreateSparsePageDMatrix(kEntries)};
226226
ASSERT_EQ(dmat->Ctx()->Threads(), AllThreadsForTest());
227-
auto ctx = CreateEmptyGenericParam(Context::kCpuId);
227+
Context ctx;
228228
for (auto const &page : dmat->GetBatches<xgboost::CSCPage>(&ctx)) {
229229
ASSERT_EQ(dmat->Info().num_col_, page.Size());
230230
}

tests/cpp/data/test_sparse_page_dmatrix.cu

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ TEST(SparsePageDMatrix, RetainEllpackPage) {
108108
}
109109

110110
TEST(SparsePageDMatrix, EllpackPageContent) {
111-
auto ctx = CreateEmptyGenericParam(0);
111+
auto ctx = MakeCUDACtx(0);
112112
constexpr size_t kRows = 6;
113113
constexpr size_t kCols = 2;
114114
constexpr size_t kPageSize = 1;

tests/cpp/helpers.h

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -382,13 +382,6 @@ std::unique_ptr<GradientBooster> CreateTrainedGBM(std::string name, Args kwargs,
382382
LearnerModelParam const* learner_model_param,
383383
Context const* generic_param);
384384

385-
inline Context CreateEmptyGenericParam(int gpu_id) {
386-
xgboost::Context tparam;
387-
std::vector<std::pair<std::string, std::string>> args{{"gpu_id", std::to_string(gpu_id)}};
388-
tparam.Init(args);
389-
return tparam;
390-
}
391-
392385
inline std::unique_ptr<HostDeviceVector<GradientPair>> GenerateGradients(
393386
std::size_t rows, bst_target_t n_targets = 1) {
394387
auto p_gradients = std::make_unique<HostDeviceVector<GradientPair>>(rows * n_targets);
@@ -407,9 +400,14 @@ inline std::unique_ptr<HostDeviceVector<GradientPair>> GenerateGradients(
407400
}
408401

409402
/**
410-
* \brief Make a context that uses CUDA.
403+
* \brief Make a context that uses CUDA if device >= 0.
411404
*/
412-
inline Context MakeCUDACtx(std::int32_t device) { return Context{}.MakeCUDA(device); }
405+
inline Context MakeCUDACtx(std::int32_t device) {
406+
if (device == Context::kCpuId) {
407+
return Context{};
408+
}
409+
return Context{}.MakeCUDA(device);
410+
}
413411

414412
inline HostDeviceVector<GradientPair> GenerateRandomGradients(const size_t n_rows,
415413
float lower= 0.0f, float upper = 1.0f) {

tests/cpp/linear/test_json_io.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,19 @@
1212

1313
namespace xgboost {
1414
inline void TestUpdaterJsonIO(std::string updater_str) {
15-
auto runtime = xgboost::CreateEmptyGenericParam(GPUIDX);
15+
Context ctx{MakeCUDACtx(GPUIDX)};
1616
Json config_0 {Object() };
1717

1818
{
19-
auto updater = std::unique_ptr<xgboost::LinearUpdater>(
20-
xgboost::LinearUpdater::Create(updater_str, &runtime));
19+
auto updater =
20+
std::unique_ptr<xgboost::LinearUpdater>(xgboost::LinearUpdater::Create(updater_str, &ctx));
2121
updater->Configure({{"eta", std::to_string(3.14)}});
2222
updater->SaveConfig(&config_0);
2323
}
2424

2525
{
26-
auto updater = std::unique_ptr<xgboost::LinearUpdater>(
27-
xgboost::LinearUpdater::Create(updater_str, &runtime));
26+
auto updater =
27+
std::unique_ptr<xgboost::LinearUpdater>(xgboost::LinearUpdater::Create(updater_str, &ctx));
2828
updater->LoadConfig(config_0);
2929
Json config_1 { Object() };
3030
updater->SaveConfig(&config_1);

tests/cpp/linear/test_linear.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ TEST(Linear, Shotgun) {
1717

1818
auto p_fmat = xgboost::RandomDataGenerator(kRows, kCols, 0).GenerateDMatrix();
1919

20-
auto ctx = xgboost::CreateEmptyGenericParam(GPUIDX);
20+
auto ctx = MakeCUDACtx(GPUIDX);
2121
LearnerModelParam mparam{MakeMP(kCols, .5, 1)};
2222

2323
{
@@ -49,7 +49,7 @@ TEST(Linear, coordinate) {
4949

5050
auto p_fmat = xgboost::RandomDataGenerator(kRows, kCols, 0).GenerateDMatrix();
5151

52-
auto ctx = xgboost::CreateEmptyGenericParam(GPUIDX);
52+
auto ctx = MakeCUDACtx(GPUIDX);
5353
LearnerModelParam mparam{MakeMP(kCols, .5, 1)};
5454

5555
auto updater = std::unique_ptr<xgboost::LinearUpdater>(

tests/cpp/linear/test_linear.cu

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ TEST(Linear, GPUCoordinate) {
1313
size_t constexpr kCols = 10;
1414

1515
auto mat = xgboost::RandomDataGenerator(kRows, kCols, 0).GenerateDMatrix();
16-
auto ctx = CreateEmptyGenericParam(GPUIDX);
16+
auto ctx = MakeCUDACtx(0);
1717

1818
LearnerModelParam mparam{MakeMP(kCols, .5, 1)};
1919
auto updater = std::unique_ptr<xgboost::LinearUpdater>(

tests/cpp/metric/test_auc.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ namespace xgboost {
1111
namespace metric {
1212

1313
inline void VerifyBinaryAUC(DataSplitMode data_split_mode = DataSplitMode::kRow) {
14-
auto ctx = xgboost::CreateEmptyGenericParam(GPUIDX);
14+
auto ctx = MakeCUDACtx(GPUIDX);
1515
std::unique_ptr<Metric> uni_ptr{Metric::Create("auc", &ctx)};
1616
Metric* metric = uni_ptr.get();
1717
ASSERT_STREQ(metric->Name(), "auc");
@@ -54,7 +54,7 @@ inline void VerifyBinaryAUC(DataSplitMode data_split_mode = DataSplitMode::kRow)
5454
}
5555

5656
inline void VerifyMultiClassAUC(DataSplitMode data_split_mode = DataSplitMode::kRow) {
57-
auto ctx = CreateEmptyGenericParam(GPUIDX);
57+
auto ctx = MakeCUDACtx(GPUIDX);
5858
std::unique_ptr<Metric> uni_ptr{Metric::Create("auc", &ctx)};
5959
auto metric = uni_ptr.get();
6060

@@ -115,7 +115,7 @@ inline void VerifyMultiClassAUC(DataSplitMode data_split_mode = DataSplitMode::k
115115
}
116116

117117
inline void VerifyRankingAUC(DataSplitMode data_split_mode = DataSplitMode::kRow) {
118-
auto ctx = CreateEmptyGenericParam(GPUIDX);
118+
auto ctx = MakeCUDACtx(GPUIDX);
119119
std::unique_ptr<Metric> metric{Metric::Create("auc", &ctx)};
120120

121121
// single group
@@ -149,7 +149,7 @@ inline void VerifyRankingAUC(DataSplitMode data_split_mode = DataSplitMode::kRow
149149
}
150150

151151
inline void VerifyPRAUC(DataSplitMode data_split_mode = DataSplitMode::kRow) {
152-
auto ctx = xgboost::CreateEmptyGenericParam(GPUIDX);
152+
auto ctx = MakeCUDACtx(GPUIDX);
153153

154154
xgboost::Metric* metric = xgboost::Metric::Create("aucpr", &ctx);
155155
ASSERT_STREQ(metric->Name(), "aucpr");
@@ -186,7 +186,7 @@ inline void VerifyPRAUC(DataSplitMode data_split_mode = DataSplitMode::kRow) {
186186
}
187187

188188
inline void VerifyMultiClassPRAUC(DataSplitMode data_split_mode = DataSplitMode::kRow) {
189-
auto ctx = xgboost::CreateEmptyGenericParam(GPUIDX);
189+
auto ctx = MakeCUDACtx(GPUIDX);
190190

191191
std::unique_ptr<Metric> metric{Metric::Create("aucpr", &ctx)};
192192

@@ -210,7 +210,7 @@ inline void VerifyMultiClassPRAUC(DataSplitMode data_split_mode = DataSplitMode:
210210
}
211211

212212
inline void VerifyRankingPRAUC(DataSplitMode data_split_mode = DataSplitMode::kRow) {
213-
auto ctx = xgboost::CreateEmptyGenericParam(GPUIDX);
213+
auto ctx = MakeCUDACtx(GPUIDX);
214214

215215
std::unique_ptr<Metric> metric{Metric::Create("aucpr", &ctx)};
216216

0 commit comments

Comments
 (0)