1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
// Copyright (c) Meta Platforms, Inc. and its affiliates.
// All rights reserved.
//
// This source code is licensed under the BSD-style license found in the
// LICENSE file in the root directory of this source tree.
#include <torch/csrc/distributed/c10d/debug.h>
#include <algorithm>
#include <cctype>
#include <cstdlib>
#include <string>
#include <torch/csrc/distributed/c10d/exception.h>
#include <torch/csrc/distributed/c10d/logging.h>
namespace c10d {
namespace detail {
namespace {
DebugLevel loadDebugLevelFromEnvironment() {
char* env_value = std::getenv("TORCH_DISTRIBUTED_DEBUG");
if (env_value == nullptr) {
return DebugLevel::Off;
}
DebugLevel level{};
std::string level_str{env_value};
std::transform(
level_str.begin(),
level_str.end(),
level_str.begin(),
[](unsigned char c) { return toupper(c); });
if (level_str == "OFF") {
level = DebugLevel::Off;
} else if (level_str == "INFO") {
level = DebugLevel::Info;
} else if (level_str == "DETAIL") {
level = DebugLevel::Detail;
} else {
throw C10dError{
"The value of TORCH_DISTRIBUTED_DEBUG must be OFF, INFO, or DETAIL."};
}
C10D_INFO("The debug level is set to {}.", level_str);
return level;
}
} // namespace
} // namespace detail
namespace {
DebugLevel g_debug_level = DebugLevel::Off;
} // namespace
void setDebugLevel(DebugLevel level) {
g_debug_level = level;
}
void setDebugLevelFromEnvironment() {
g_debug_level = detail::loadDebugLevelFromEnvironment();
}
DebugLevel debug_level() noexcept {
return g_debug_level;
}
} // namespace c10d
|