Add global configuration (#6414)

* Add management functions for global configuration: XGBSetGlobalConfig(), XGBGetGlobalConfig().
* Add Python interface: set_config(), get_config(), and config_context().
* Add unit tests for Python
* Add R interface: xgb.set.config(), xgb.get.config()
* Add unit tests for R

Co-authored-by: Jiaming Yuan <jm.yuan@outlook.com>
This commit is contained in:
Philip Hyunsu Cho
2020-12-03 00:05:18 -08:00
committed by GitHub
parent c2ba4fb957
commit fb56da5e8b
29 changed files with 637 additions and 86 deletions

View File

@@ -11,12 +11,13 @@
#include "xgboost/parameter.h"
#include "xgboost/logging.h"
#include "xgboost/json.h"
#if !defined(XGBOOST_STRICT_R_MODE) || XGBOOST_STRICT_R_MODE == 0
// Override logging mechanism for non-R interfaces
void dmlc::CustomLogMessage::Log(const std::string& msg) {
const xgboost::LogCallbackRegistry* registry
= xgboost::LogCallbackRegistryStore::Get();
const xgboost::LogCallbackRegistry *registry =
xgboost::LogCallbackRegistryStore::Get();
auto callback = registry->Get();
callback(msg.c_str());
}
@@ -40,35 +41,15 @@ TrackerLogger::~TrackerLogger() {
namespace xgboost {
DMLC_REGISTER_PARAMETER(ConsoleLoggerParam);
ConsoleLogger::LogVerbosity ConsoleLogger::global_verbosity_ =
ConsoleLogger::DefaultVerbosity();
ConsoleLoggerParam ConsoleLogger::param_ = ConsoleLoggerParam();
bool ConsoleLogger::ShouldLog(LogVerbosity verbosity) {
return verbosity <= global_verbosity_ || verbosity == LV::kIgnore;
return static_cast<int>(verbosity) <=
(GlobalConfigThreadLocalStore::Get()->verbosity) ||
verbosity == LV::kIgnore;
}
void ConsoleLogger::Configure(Args const& args) {
param_.UpdateAllowUnknown(args);
switch (param_.verbosity) {
case 0:
global_verbosity_ = LogVerbosity::kSilent;
break;
case 1:
global_verbosity_ = LogVerbosity::kWarning;
break;
case 2:
global_verbosity_ = LogVerbosity::kInfo;
break;
case 3:
global_verbosity_ = LogVerbosity::kDebug;
default:
// global verbosity doesn't require kIgnore
break;
}
auto& param = *GlobalConfigThreadLocalStore::Get();
param.UpdateAllowUnknown(args);
}
ConsoleLogger::LogVerbosity ConsoleLogger::DefaultVerbosity() {
@@ -76,7 +57,25 @@ ConsoleLogger::LogVerbosity ConsoleLogger::DefaultVerbosity() {
}
ConsoleLogger::LogVerbosity ConsoleLogger::GlobalVerbosity() {
return global_verbosity_;
LogVerbosity global_verbosity { LogVerbosity::kWarning };
switch (GlobalConfigThreadLocalStore::Get()->verbosity) {
case 0:
global_verbosity = LogVerbosity::kSilent;
break;
case 1:
global_verbosity = LogVerbosity::kWarning;
break;
case 2:
global_verbosity = LogVerbosity::kInfo;
break;
case 3:
global_verbosity = LogVerbosity::kDebug;
default:
// global verbosity doesn't require kIgnore
break;
}
return global_verbosity;
}
ConsoleLogger::ConsoleLogger(LogVerbosity cur_verb) :