[MLPerf 6.1] Adding DLRMv4 MLPerf Logging Compliance Checker - #470
Open
chriscai-amd wants to merge 4 commits into
Open
[MLPerf 6.1] Adding DLRMv4 MLPerf Logging Compliance Checker#470chriscai-amd wants to merge 4 commits into
chriscai-amd wants to merge 4 commits into
Conversation
dlrmv4 is the HSTU recommendation benchmark on Yambda-5B, joining 6.1 in the slot dlrm_dcnv2 occupied through 6.0. Convergence is keyed on samples_count rather than epoch_num, so dlrmv4 joins the allow-set in read_submission_file; runs converge at roughly 0.027 to 0.056 of an epoch, which rounding to three decimals would collapse onto identical values. The closed rules pin everything the benchmark fixes. Only the target learning rate and the global batch size may be tuned. Two constraints are computed from the logged global batch size rather than hardcoded: - eval_interval_samples, because convergence is reported on a grid of round(eval_every_data_pct * total_train_steps) steps and is comparable against the RCPs only when the grid matches. - skip_eval_epoch_pct, which is batch-size dependent and easy to leave at the default for the smallest batch size, silently shifting where measurement starts. RCPs come from a 60-run sweep, 20 seeds at each of global batch 8192, 16384 and 32768, on MI355X in BF16. Each entry is the samples_count of the first eval reaching AUC 0.75, which is what a compliant run reports because it stops at the first crossing. Co-authored-by: Cursor <cursoragent@cursor.com>
Five log keys have no existing constant. Three describe the sparse embedding optimizer and the absolute learning rate a warmup ramp starts from, which is distinct from the warmup step count. The other two describe the eval grid, which for this benchmark is a correctness concern rather than bookkeeping, since samples to converge is quantized to it. The open rules keep the task-defining constants and the quality target and drop the hyperparameter value checks. Co-authored-by: Cursor <cursoragent@cursor.com>
|
MLCommons CLA bot All contributors have signed the MLCommons CLA ✍️ ✅ |
The ruleset checked that the configured skip fraction matched the formula, which a run could satisfy while still beginning measurement elsewhere. Follow the deepseekv3_671b pattern instead: derive the start point from the logged global batch size and require the first eval_accuracy to land on it. The threshold is resolved against the eval grid, as the reference does when it converts the fraction to a step, giving block 25, 31 and 41 at global batch 8192, 16384 and 32768. skip_eval_epoch_pct is then redundant as a checked key, so it and its constant are dropped; the cadence stays pinned by eval_every_data_pct and the grid divisibility check. Co-authored-by: Cursor <cursoragent@cursor.com>
The Platform fields said MI355X while all 60 reference logs record submission_platform=MI350, which a reviewer comparing the RCPs against those logs would flag. Co-authored-by: Cursor <cursoragent@cursor.com>
chriscai-amd
marked this pull request as ready for review
August 10, 2026 17:45
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Registers
dlrmv4as a Training 6.1 benchmark: closed and open rulesets, reference convergence points, log constants, and the result summarizer row. dlrmv4 is the HSTU recommendation benchmark on Yambda-5B, taking the recommendation slot thatdlrm_dcnv2occupied through 6.0.The three commits split cleanly if you'd prefer them reviewed separately: the closed ruleset and RCPs, then the constants and open ruleset, then the eval-start rule reworked to follow
deepseekv3_671b.Changes
'dlrmv4': 10in training result counts;'dlrmv4'in the'6.1'allowed list'dlrmv4': 10in submission_runs; dlrmv4 added to the samples_count allow-set in read_submission_fileDLRMV4plus four log keysdlrmv4: ["Benchmark results (minutes)", "Recommendation", "Yambda-5B", "DLRMv4 (HSTU)"]Convergence is keyed on
samples_countdlrmv4 converges at roughly 0.027 to 0.056 of an epoch. Rounding that to three decimals, as the
epoch_numbranch does, would collapse distinct seeds onto identical values, so dlrmv4 joinsllama31_8b,flux1,qwen35_397b_grpoand the others in readingmetadata['samples_count'].New log keys
Four keys have no existing constant. Three describe parts of the model no current benchmark has:
opt_sparse_name,opt_sparse_base_learning_rate— the embedding-table optimizer, separate from the dense one.opt_learning_rate_warmup_start_lr— the absolute LR the ramp begins from, distinct from the existing warmup step count.The fourth,
eval_every_data_pct, describes the eval grid, which here is a correctness concern rather than bookkeeping, since samples-to-converge is quantized to it.The remaining fixed hyperparameters map onto existing constants (
OPT_ADAM_BETA_1/2,OPT_ADAM_EPSILON,OPT_WEIGHT_DECAY,OPT_GRADIENT_CLIP_NORM,OPT_LR_WARMUP_STEPS,MAX_SEQUENCE_LENGTH).What the closed rules pin
Only the target learning rate and the global batch size may be tuned. Everything else is fixed: optimizer names (
Adamdense,RowWiseAdagradsparse), Adam betas 0.95 / 0.999, epsilon 1e-8, weight decay 0, gradient clip norm 1.0, warmup of 24000 steps starting from LR 0, max sequence length 4096, andtrain_samples/eval_samples.Two constraints are computed from the logged global batch size rather than hardcoded, because a single pinned value would be wrong at two of the three reference batch sizes:
eval_interval_samples=max(1, round(0.001 * (train_samples // GBS))) * GBS. Convergence is reported on this grid, so samples-to-converge is quantized to it and is only comparable against the RCPs when the grid matches. Everyeval_accuracymust land on it.floor((4480 * GBS + 135331840) / 3)samples, a batch-size-dependent threshold that is easy to leave at the smallest batch size's default, silently shifting where measurement begins. Following thedeepseekv3_671bpattern, this is enforced on the log rather than on a self-reported config value: aFIRST_CHECKoneval_accuracyrequires the run's first eval to land on the grid point at or after that threshold — block 25, 31 and 41 at global batch 8192, 16384 and 32768. An earlier revision of this PR compared the loggedskip_eval_epoch_pctagainst the formula instead, which a run could satisfy while still evaluating somewhere else; that key and its constant are now dropped.The open ruleset keeps the task-defining constants and the AUC 0.75 target and drops the hyperparameter value checks, following the open/closed split used by
qwen35_397b_grpoandgpt_oss_20b.RCP provenance
A 60-run sweep, 20 seeds at each of three batch sizes, on MI350X in BF16.
Each entry is the first eval reaching AUC 0.75, which is exactly what a compliant run reports, since the reference stops at the first crossing and emits
run_stopwithstatus="success".Note for reviewers: the reference sweep deliberately ran full convergence curves without early stopping, which is the normal way to generate RCPs, so those logs carry no
run_stopand their eval grid starts at block 1 rather than at the skip threshold. The extraction rule above is stated explicitly so every number is reproducible from them.Validation
run_stopappended) — pass the compliance checker with--werror, in both closed and open division.FIRST_CHECK; an eval one sample off the grid fails the divisibility check; and wrong Adam beta, a doubled eval cadence, and a sparse LR diverging from the dense one fail their respective checks.