Skip to content

Commit f3471ac

Browse files
anhanhappdev
authored andcommitted
Add setting enforce_max_duration
1 parent 32b6d66 commit f3471ac

File tree

7 files changed

+38
-14
lines changed

7 files changed

+38
-14
lines changed

loadgen/bindings/python_api.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,8 @@ PYBIND11_MODULE(mlperf_loadgen, m) {
316316
.def_readwrite("max_duration_ms", &TestSettings::max_duration_ms)
317317
.def_readwrite("min_query_count", &TestSettings::min_query_count)
318318
.def_readwrite("max_query_count", &TestSettings::max_query_count)
319+
def_readwrite("enforce_max_duration",
320+
&TestSettings::enforce_max_duration)
319321
.def_readwrite("qsl_rng_seed", &TestSettings::qsl_rng_seed)
320322
.def_readwrite("sample_index_rng_seed",
321323
&TestSettings::sample_index_rng_seed)

loadgen/issue_query_controller.cc

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -515,19 +515,21 @@ void IssueQueryController::IssueQueriesInternal(size_t query_stride,
515515
// Checks if we have exceeded max_duration.
516516
if (settings.max_duration.count() != 0 &&
517517
duration > settings.max_duration) {
518-
LogDetail([thread_idx, duration](AsyncDetail& detail) {
518+
if (settings.enforce_max_duration) {
519+
LogDetail([thread_idx, duration](AsyncDetail& detail) {
519520
#if USE_NEW_LOGGING_FORMAT
520-
std::stringstream ss;
521-
ss << "IssueQueryThread " << thread_idx
522-
<< " Ending early: Max test duration reached." << " duration_ns "
523-
<< duration.count();
524-
MLPERF_LOG_ERROR(detail, "error_runtime", ss.str());
521+
std::stringstream ss;
522+
ss << "IssueQueryThread " << thread_idx
523+
<< " Ending early: Max test duration reached." << " duration_ns "
524+
<< duration.count();
525+
MLPERF_LOG_ERROR(detail, "error_runtime", ss.str());
525526
#else
526-
detail.Error("IssueQueryThread ", std::to_string(thread_idx),
527-
" Ending early: Max test duration reached.", "duration_ns",
528-
std::to_string(duration.count()));
527+
detail.Error("IssueQueryThread ", std::to_string(thread_idx),
528+
" Ending early: Max test duration reached.",
529+
"duration_ns", std::to_string(duration.count()));
529530
#endif
530-
});
531+
});
532+
}
531533
ran_out_of_generated_queries = false;
532534
break;
533535
}

loadgen/results.cc

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -506,15 +506,18 @@ void PerformanceSummary::LogSummary(AsyncSummary& summary) {
506506
}
507507
bool perf_constraints_met =
508508
PerfConstraintsMet(&perf_constraints_recommendation);
509-
bool all_constraints_met = min_duration_met && min_queries_met &&
509+
bool all_constraints_met = min_duration_met &&
510510
perf_constraints_met && early_stopping_met;
511+
if (!settings.enforce_max_duration){
512+
all_constraints_met = all_constraints_met && min_queries_met;
513+
}
511514
summary("Result is : ", all_constraints_met ? "VALID" : "INVALID");
512515
if (HasPerfConstraints()) {
513516
summary(" Performance constraints satisfied : ",
514517
perf_constraints_met ? "Yes" : "NO");
515518
}
516519
summary(" Min duration satisfied : ", min_duration_met ? "Yes" : "NO");
517-
summary(" Min queries satisfied : ", min_queries_met ? "Yes" : "NO");
520+
summary(" Min queries satisfied : ", min_queries_met ? "Yes" : settings.enforce_max_duration ? "Skipped" : "NO");
518521
summary(" Early stopping satisfied: ", early_stopping_met ? "Yes" : "NO");
519522

520523
if (!all_constraints_met) {
@@ -668,9 +671,11 @@ void PerformanceSummary::LogDetail(AsyncDetail& detail) {
668671
&pr.query_latencies,
669672
std::chrono::nanoseconds(settings.server_ttft_latency));
670673
}
671-
bool all_constraints_met = min_duration_met && min_queries_met &&
674+
bool all_constraints_met = min_duration_met &&
672675
perf_constraints_met && early_stopping_met;
673-
676+
if (!settings.enforce_max_duration) {
677+
all_constraints_met = all_constraints_met && min_queries_met;
678+
}
674679
MLPERF_LOG(detail, "result_validity",
675680
all_constraints_met ? "VALID" : "INVALID");
676681
if (HasPerfConstraints()) {

loadgen/test_settings.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@ struct TestSettings {
196196
/**@{*/
197197
uint64_t min_duration_ms = 10000;
198198
uint64_t max_duration_ms = 0; ///< 0: Infinity.
199+
bool enforce_max_duration = true;
199200
uint64_t min_query_count = 100;
200201
uint64_t max_query_count = 0; ///< 0: Infinity.
201202
/**@}*/

loadgen/test_settings_internal.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ TestSettingsInternal::TestSettingsInternal(
3535
target_duration(std::chrono::milliseconds(requested.min_duration_ms)),
3636
min_duration(std::chrono::milliseconds(requested.min_duration_ms)),
3737
max_duration(std::chrono::milliseconds(requested.max_duration_ms)),
38+
enforce_max_duration(requested.enforce_max_duration),
3839
min_query_count(requested.min_query_count),
3940
max_query_count(requested.max_query_count),
4041
min_sample_count(0),
@@ -428,6 +429,7 @@ void TestSettingsInternal::LogEffectiveSettings() const {
428429
s.target_duration.count());
429430
MLPERF_LOG(detail, "effective_min_duration_ms", s.min_duration.count());
430431
MLPERF_LOG(detail, "effective_max_duration_ms", s.max_duration.count());
432+
MLPERF_LOG(detail, "effective_enforce_max_duration", s.enforce_max_duration);
431433
MLPERF_LOG(detail, "effective_min_query_count", s.min_query_count);
432434
MLPERF_LOG(detail, "effective_max_query_count", s.max_query_count);
433435
MLPERF_LOG(detail, "effective_min_sample_count", s.min_sample_count);
@@ -775,6 +777,8 @@ int TestSettings::FromConfig(const std::string &path, const std::string &model,
775777

776778
lookupkv(model, scenario, "min_duration", &min_duration_ms, nullptr);
777779
lookupkv(model, scenario, "max_duration", &max_duration_ms, nullptr);
780+
if (lookupkv(model, scenario, "enforce_max_duration", &val, nullptr))
781+
enforce_max_duration = (val == 1) ? true : false;
778782
lookupkv(model, scenario, "min_query_count", &min_query_count, nullptr);
779783
lookupkv(model, scenario, "max_query_count", &max_query_count, nullptr);
780784
lookupkv(model, scenario, "performance_sample_count_override",

loadgen/test_settings_internal.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ struct TestSettingsInternal {
6565
// duration at the end of the run.
6666
std::chrono::milliseconds min_duration{0};
6767
std::chrono::milliseconds max_duration{0};
68+
bool enforce_max_duration;
6869
uint64_t min_query_count;
6970
uint64_t max_query_count;
7071
uint64_t min_sample_count; // Offline only.

tools/submission/submission_checker.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1598,6 +1598,8 @@ def check_performance_dir(
15981598
min_query_count = mlperf_log["effective_min_query_count"]
15991599
samples_per_query = mlperf_log["effective_samples_per_query"]
16001600
min_duration = mlperf_log["effective_min_duration_ms"]
1601+
enforce_max_duration = mlperf_log.get("effective_enforce_max_duration", True)
1602+
min_queries_met = mlperf_log["result_min_queries_met"]
16011603
equal_issue_used_check = (
16021604
mlperf_log["effective_sample_concatenate_permutation"] == True
16031605
)
@@ -1749,6 +1751,13 @@ def check_performance_dir(
17491751
)
17501752
is_valid = False
17511753

1754+
if not min_queries_met and not enforce_max_duration:
1755+
log.error(
1756+
"%s Loadgen needs to enforce max duration for official submissions. Enforced %s",
1757+
fname,
1758+
enforce_max_duration,
1759+
)
1760+
17521761
inferred = False
17531762
if scenario_fixed != scenario:
17541763
inferred, res, inferred_valid = get_inferred_result(

0 commit comments

Comments
 (0)