Skip to content

Commit c6bda57

Browse files
authored
Fix bug in logger when log_to_console is set to false (#538)
Prior to this PR, some logging info relating to solver parameters was shown in stdout. This is because we initialize the logger to stdout and we do not have apriori information whether the corresponding parameter would be set or not. In this PR, I am using the callback logger along with a log buffer to store all the logging info until the appropriate parameters and the loggers are initialized. ## Issue Closes #187 Authors: - Rajesh Gandham (https://github.com/rg20) Approvers: - Alice Boucher (https://github.com/aliceb-nv) - Akif ÇÖRDÜK (https://github.com/akifcorduk) - Trevor McKay (https://github.com/tmckayus) URL: #538
1 parent 43c00e5 commit c6bda57

File tree

22 files changed

+172
-103
lines changed

22 files changed

+172
-103
lines changed

benchmarks/linear_programming/cuopt/run_mip.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222
#include <cuopt/linear_programming/mip/solver_solution.hpp>
2323
#include <cuopt/linear_programming/optimization_problem.hpp>
2424
#include <cuopt/linear_programming/solve.hpp>
25-
#include <cuopt/logger.hpp>
2625
#include <mps_parser/parser.hpp>
26+
#include <utilities/logger.hpp>
2727

2828
#include <raft/core/handle.hpp>
2929

cpp/cuopt_cli.cpp

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
#include <cuopt/linear_programming/mip/solver_settings.hpp>
1919
#include <cuopt/linear_programming/optimization_problem.hpp>
2020
#include <cuopt/linear_programming/solve.hpp>
21-
#include <cuopt/logger.hpp>
2221
#include <mps_parser/parser.hpp>
22+
#include <utilities/logger.hpp>
2323

2424
#include <raft/core/handle.hpp>
2525

@@ -75,6 +75,18 @@ static char cuda_module_loading_env[] = "CUDA_MODULE_LOADING=EAGER";
7575
*/
7676
inline auto make_async() { return std::make_shared<rmm::mr::cuda_async_memory_resource>(); }
7777

78+
/**
79+
* @brief Handle logger when error happens before logger is initialized
80+
* @param settings Solver settings
81+
* @return cuopt::init_logger_t
82+
*/
83+
inline cuopt::init_logger_t dummy_logger(
84+
const cuopt::linear_programming::solver_settings_t<int, double>& settings)
85+
{
86+
return cuopt::init_logger_t(settings.get_parameter<std::string>(CUOPT_LOG_FILE),
87+
settings.get_parameter<bool>(CUOPT_LOG_TO_CONSOLE));
88+
}
89+
7890
/**
7991
* @brief Run a single file
8092
* @param file_path Path to the MPS format input file containing the optimization problem
@@ -94,6 +106,7 @@ int run_single_file(const std::string& file_path,
94106
settings.set_parameter_from_string(key, val);
95107
}
96108
} catch (const std::exception& e) {
109+
auto log = dummy_logger(settings);
97110
CUOPT_LOG_ERROR("Error: %s", e.what());
98111
return -1;
99112
}
@@ -113,6 +126,7 @@ int run_single_file(const std::string& file_path,
113126
}
114127
}
115128
if (parsing_failed) {
129+
auto log = dummy_logger(settings);
116130
CUOPT_LOG_ERROR("Parsing MPS failed. Exiting!");
117131
return -1;
118132
}
@@ -122,7 +136,8 @@ int run_single_file(const std::string& file_path,
122136

123137
const bool is_mip =
124138
(op_problem.get_problem_category() == cuopt::linear_programming::problem_category_t::MIP ||
125-
op_problem.get_problem_category() == cuopt::linear_programming::problem_category_t::IP);
139+
op_problem.get_problem_category() == cuopt::linear_programming::problem_category_t::IP) &&
140+
!solve_relaxation;
126141

127142
try {
128143
auto initial_solution =
@@ -131,23 +146,36 @@ int run_single_file(const std::string& file_path,
131146
: cuopt::linear_programming::solution_reader_t::get_variable_values_from_sol_file(
132147
initial_solution_file, mps_data_model.get_variable_names());
133148

134-
if (is_mip && !solve_relaxation) {
149+
if (is_mip) {
135150
auto& mip_settings = settings.get_mip_settings();
136151
if (initial_solution.size() > 0) {
137152
mip_settings.add_initial_solution(initial_solution.data(), initial_solution.size());
138153
}
139-
auto solution = cuopt::linear_programming::solve_mip(op_problem, mip_settings);
140154
} else {
141155
auto& lp_settings = settings.get_pdlp_settings();
142156
if (initial_solution.size() > 0) {
143157
lp_settings.set_initial_primal_solution(initial_solution.data(), initial_solution.size());
144158
}
145-
auto solution = cuopt::linear_programming::solve_lp(op_problem, lp_settings);
159+
}
160+
} catch (const std::exception& e) {
161+
auto log = dummy_logger(settings);
162+
CUOPT_LOG_ERROR("Error: %s", e.what());
163+
return -1;
164+
}
165+
166+
try {
167+
if (is_mip) {
168+
auto& mip_settings = settings.get_mip_settings();
169+
auto solution = cuopt::linear_programming::solve_mip(op_problem, mip_settings);
170+
} else {
171+
auto& lp_settings = settings.get_pdlp_settings();
172+
auto solution = cuopt::linear_programming::solve_lp(op_problem, lp_settings);
146173
}
147174
} catch (const std::exception& e) {
148175
CUOPT_LOG_ERROR("Error: %s", e.what());
149176
return -1;
150177
}
178+
151179
return 0;
152180
}
153181

cpp/src/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
# limitations under the License.
1515

1616
set(UTIL_SRC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/utilities/seed_generator.cu
17-
${CMAKE_CURRENT_SOURCE_DIR}/utilities/logger_helper.cpp
17+
${CMAKE_CURRENT_SOURCE_DIR}/utilities/logger.cpp
1818
${CMAKE_CURRENT_SOURCE_DIR}/utilities/version_info.cpp
1919
${CMAKE_CURRENT_SOURCE_DIR}/utilities/timestamp_utils.cpp)
2020

cpp/src/dual_simplex/logger.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
#pragma once
1919

2020
#ifdef CUOPT_LOG_ACTIVE_LEVEL
21-
#include <cuopt/logger.hpp>
21+
#include <utilities/logger.hpp>
2222
#endif
2323

2424
#include <string>

cpp/src/linear_programming/cuopt_c.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
#include <cuopt/linear_programming/optimization_problem.hpp>
2121
#include <cuopt/linear_programming/solve.hpp>
2222
#include <cuopt/linear_programming/solver_settings.hpp>
23-
#include <cuopt/logger.hpp>
2423
#include <cuopt/utilities/timestamp_utils.hpp>
24+
#include <utilities/logger.hpp>
2525

2626
#include <mps_parser/parser.hpp>
2727

cpp/src/linear_programming/optimization_problem.cu

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
*/
1717

1818
#include <cuopt/error.hpp>
19-
#include <cuopt/logger.hpp>
2019
#include <mps_parser/writer.hpp>
20+
#include <utilities/logger.hpp>
2121

2222
#include <cuopt/linear_programming/optimization_problem.hpp>
2323
#include <mip/mip_constants.hpp>

cpp/src/linear_programming/solve.cu

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020
#include <linear_programming/restart_strategy/pdlp_restart_strategy.cuh>
2121
#include <linear_programming/step_size_strategy/adaptive_step_size_strategy.hpp>
2222
#include <linear_programming/translate.hpp>
23-
#include <linear_programming/utilities/logger_init.hpp>
2423
#include <linear_programming/utilities/problem_checking.cuh>
2524
#include <linear_programming/utils.cuh>
25+
#include <utilities/logger.hpp>
2626

2727
#include <mip/mip_constants.hpp>
2828
#include <mip/presolve/third_party_presolve.hpp>

cpp/src/linear_programming/solver_settings.cu

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@
1818
#include <cuopt/error.hpp>
1919
#include <cuopt/linear_programming/pdlp/pdlp_warm_start_data.hpp>
2020
#include <cuopt/linear_programming/pdlp/solver_settings.hpp>
21-
#include <cuopt/logger.hpp>
2221
#include <math_optimization/solution_writer.hpp>
2322
#include <mip/mip_constants.hpp>
2423
#include <mps_parser/utilities/span.hpp>
24+
#include <utilities/logger.hpp>
2525

2626
#include <raft/util/cudart_utils.hpp>
2727

cpp/src/linear_programming/solver_solution.cu

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@
1616
*/
1717

1818
#include <cuopt/linear_programming/pdlp/solver_solution.hpp>
19-
#include <cuopt/logger.hpp>
2019
#include <math_optimization/solution_writer.hpp>
2120
#include <mip/mip_constants.hpp>
21+
#include <utilities/logger.hpp>
2222

2323
#include <raft/common/nvtx.hpp>
2424
#include <raft/util/cudart_utils.hpp>

cpp/src/linear_programming/utilities/logger_init.hpp

Lines changed: 0 additions & 54 deletions
This file was deleted.

0 commit comments

Comments
 (0)