Skip to content

reportgen and validate cannot populate result tables from submission logs #823

Description

@paglimo

Summary

mlpstorage reports reportgen and mlpstorage validate --csv currently do not reliably populate user-facing result tables from an existing submission tree.

In the observed case, the submission logs were discovered and validated, and reportgen produced workload-level rollup files. However, the final CSVs intended for reporting/summary use were either partially populated with internal metric fields or entirely blank, making it difficult to obtain the final benchmark result table from submission logs alone.

Observed Behavior

Running report generation on a canonical submission tree discovers the runs and writes result files:

mlpstorage reports reportgen --results-dir /path/to/submission

The tool reports that it found benchmark runs and writes files such as:

/path/to/submission/closed/<submitter>/results/<system>/training/<model>/run/results.csv
/path/to/submission/closed/<submitter>/results/<system>/training/<model>/run/results.json
/path/to/submission/closed/<submitter>/results/results.csv
/path/to/submission/closed/<submitter>/results/results.json

The top-level results.csv contains rows and non-empty metric values, but the schema is reportgen-internal, for example:

category,orgname,systemname,benchmark_type,model,accelerator,train_mean_of_au_percentage,train_mean_of_throughput_samples_per_second,...

Separately, running validation with CSV output:

mlpstorage validate /path/to/submission \
  --csv /path/to/submission/summary.csv

creates a public-summary-style CSV with headers such as:

Public ID,Organization,Submission Name,Description,Type,Access Protocol,Availability,RUs,Integrated Client Storage,Accelerator Type,# Client Nodes,...

but all data rows are empty strings. In the observed case, the CSV had multiple data rows, but zero non-empty data cells.

Why This Appears to Happen

The validator CSV exporter appears to be a placeholder.

In mlpstorage_py/submission_checker/results.py, ResultExporter.add_result() initializes an empty row and appends it without extracting any fields from the submission logs:

def add_result(self, submission_logs: SubmissionLogs):
    row = {key: "" for key in self.head}
    # TODO: extract values from submission logs
    self.rows.append(row.copy())

The validator main loop calls this exporter for valid workloads:

# TODO: Add results to summary
if valid:
    exporter.add_result(logs)

As a result, validate --csv can successfully validate the submission and still generate a CSV whose rows are entirely blank.

There also appears to be a schema mismatch between the report generator output and the validator summary output:

  • reportgen emits internal fields such as:

    • train_mean_of_au_percentage
    • train_mean_of_throughput_samples_per_second
    • kvcache_*
    • workload-specific flattened metric names
  • validate --csv expects public summary fields such as:

    • 3D-Unet - Read B/W (GiB/s)
    • 8B - Write B/W (GiB/s)
    • 70B - Read B/W (GiB/s)

There does not appear to be a completed mapping layer from submission logs / reportgen rollups into the public summary table.

Expected Behavior

Given a completed canonical submission tree, the tools should be able to populate the final result table from submission logs.

At minimum, one of the following should be true:

  1. reports reportgen should generate a final public-facing benchmark result table.
  2. validate --csv should populate its public summary CSV from submission logs and/or reportgen rollups.
  3. If the CSV summary path is not implemented yet, the tool should explicitly warn or fail rather than generating rows with all empty values.

Suggested Direction

A possible fix would be to implement a shared result-table extraction layer that:

  • reads validated SubmissionLogs
  • extracts system metadata from systems/<system>.yaml
  • extracts benchmark metrics from run summaries or reportgen rollups
  • maps internal metric fields to public result-table columns
  • is shared by reportgen and validate --csv, or clearly separates their schemas in documentation

This would avoid the current situation where reportgen and validate both process the submission successfully, but neither directly produces a fully populated final public result table from the submission logs.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions