From 22cc11f07e29f41df6606c965eca6b0541361bda Mon Sep 17 00:00:00 2001 From: ShriyaRishab Date: Thu, 20 Aug 2026 14:07:27 -0700 Subject: [PATCH 1/2] Make lowest precision and parallelism mandatory for v6.1 Require the linear/attn/comm precision and TP/PP/CP/EP keys in every training 6.1 result log so the checker can enforce issue #878. Signed-off-by: ShriyaRishab --- .../training_6.1.0/common.yaml | 25 ++++++++++--------- mlperf_logging/mllog/constants.py | 5 ++++ mlperf_logging/mllog/examples/parallelism.py | 9 +++++-- 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/mlperf_logging/compliance_checker/training_6.1.0/common.yaml b/mlperf_logging/compliance_checker/training_6.1.0/common.yaml index 5be1088..2b07560 100755 --- a/mlperf_logging/compliance_checker/training_6.1.0/common.yaml +++ b/mlperf_logging/compliance_checker/training_6.1.0/common.yaml @@ -144,42 +144,43 @@ REQ: EXACTLY_ONE CHECK: " v['value'] != '' " -# Optional keys +# Mandatory precision and parallelism disclosure (v6.1+) - KEY: NAME: lowest_numerical_precision_in_linear - REQ: OPTIONAL + REQ: EXACTLY_ONE CHECK: " v['value'] in ['fp64', 'fp32', 'tf32', 'fp16', 'fp8', 'nvfp4', 'mxfp4', 'bfloat16', 'Graphcore FLOAT 16.16', 'int8', 'uint8', 'int4', 'uint4'] " - KEY: NAME: lowest_numerical_precision_in_attn - REQ: OPTIONAL + REQ: EXACTLY_ONE CHECK: " v['value'] in ['fp64', 'fp32', 'tf32', 'fp16', 'fp8', 'nvfp4', 'mxfp4', 'bfloat16', 'Graphcore FLOAT 16.16', 'int8', 'uint8', 'int4', 'uint4'] " - KEY: NAME: lowest_numerical_precision_in_comm - REQ: OPTIONAL + REQ: EXACTLY_ONE CHECK: " v['value'] in ['fp64', 'fp32', 'tf32', 'fp16', 'fp8', 'nvfp4', 'mxfp4', 'bfloat16', 'Graphcore FLOAT 16.16', 'int8', 'uint8', 'int4', 'uint4'] " - KEY: NAME: tensor_parallelism - REQ: OPTIONAL - CHECK: " is_integer(v['value']) " + REQ: EXACTLY_ONE + CHECK: " is_integer(v['value']) and v['value'] >= 1 " - KEY: NAME: pipeline_parallelism - REQ: OPTIONAL - CHECK: " is_integer(v['value']) " + REQ: EXACTLY_ONE + CHECK: " is_integer(v['value']) and v['value'] >= 1 " - KEY: NAME: context_parallelism - REQ: OPTIONAL - CHECK: " is_integer(v['value']) " + REQ: EXACTLY_ONE + CHECK: " is_integer(v['value']) and v['value'] >= 1 " - KEY: NAME: expert_parallelism - REQ: OPTIONAL - CHECK: " is_integer(v['value']) " + REQ: EXACTLY_ONE + CHECK: " is_integer(v['value']) and v['value'] >= 1 " +# Optional keys - KEY: NAME: micro_batch_size REQ: OPTIONAL diff --git a/mlperf_logging/mllog/constants.py b/mlperf_logging/mllog/constants.py index 8fa0e03..75e1387 100644 --- a/mlperf_logging/mllog/constants.py +++ b/mlperf_logging/mllog/constants.py @@ -209,6 +209,11 @@ CONVERTION_EFF = "conversion_eff" INTERCONNECT_POWER_EST = "interconnect_power_est" +# Precision constants +LOWEST_NUMERICAL_PRECISION_IN_ATTN = "lowest_numerical_precision_in_attn" +LOWEST_NUMERICAL_PRECISION_IN_COMM = "lowest_numerical_precision_in_comm" +LOWEST_NUMERICAL_PRECISION_IN_LINEAR = "lowest_numerical_precision_in_linear" + # Parallelism constants TENSOR_PARALLELISM = "tensor_parallelism" PIPELINE_PARALLELISM = "pipeline_parallelism" diff --git a/mlperf_logging/mllog/examples/parallelism.py b/mlperf_logging/mllog/examples/parallelism.py index dac016b..97e0707 100644 --- a/mlperf_logging/mllog/examples/parallelism.py +++ b/mlperf_logging/mllog/examples/parallelism.py @@ -19,7 +19,7 @@ def parallelism_example(): - """Example usage of mllog with parallelism and config keys""" + """Example usage of mllog with mandatory precision, parallelism, and config keys""" mllogger = mllog.get_mllogger() @@ -36,7 +36,12 @@ def parallelism_example(): # Log the model config file used for this run mllogger.event(key=mllog.constants.CONFIG_FILENAME, value="llama31_405b_config.yaml") - # Log parallelism strategy + # Log lowest numerical precision used in linear, attention, and communication + mllogger.event(key=mllog.constants.LOWEST_NUMERICAL_PRECISION_IN_LINEAR, value="fp8") + mllogger.event(key=mllog.constants.LOWEST_NUMERICAL_PRECISION_IN_ATTN, value="bfloat16") + mllogger.event(key=mllog.constants.LOWEST_NUMERICAL_PRECISION_IN_COMM, value="fp8") + + # Log parallelism strategy. Unused dimensions must still be logged as 1. mllogger.event(key=mllog.constants.TENSOR_PARALLELISM, value=8) mllogger.event(key=mllog.constants.PIPELINE_PARALLELISM, value=4) mllogger.event(key=mllog.constants.CONTEXT_PARALLELISM, value=2) From cb9a472fe184f4dc7f24192666897e742977ba5f Mon Sep 17 00:00:00 2001 From: ShriyaRishab Date: Thu, 20 Aug 2026 14:11:25 -0700 Subject: [PATCH 2/2] Also require micro_batch_size and config_filename in v6.1 logs These disclosure keys were still optional; make them EXACTLY_ONE so every result log identifies the micro-batch size and matching config. Signed-off-by: ShriyaRishab --- .../compliance_checker/training_6.1.0/common.yaml | 10 +++++----- mlperf_logging/mllog/examples/parallelism.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/mlperf_logging/compliance_checker/training_6.1.0/common.yaml b/mlperf_logging/compliance_checker/training_6.1.0/common.yaml index 2b07560..7543fda 100755 --- a/mlperf_logging/compliance_checker/training_6.1.0/common.yaml +++ b/mlperf_logging/compliance_checker/training_6.1.0/common.yaml @@ -144,7 +144,7 @@ REQ: EXACTLY_ONE CHECK: " v['value'] != '' " -# Mandatory precision and parallelism disclosure (v6.1+) +# Mandatory precision, parallelism, and run-config disclosure (v6.1+) - KEY: NAME: lowest_numerical_precision_in_linear REQ: EXACTLY_ONE @@ -180,13 +180,13 @@ REQ: EXACTLY_ONE CHECK: " is_integer(v['value']) and v['value'] >= 1 " -# Optional keys - KEY: NAME: micro_batch_size - REQ: OPTIONAL - CHECK: " is_integer(v['value']) " + REQ: EXACTLY_ONE + CHECK: " is_integer(v['value']) and v['value'] >= 1 " - KEY: NAME: config_filename - REQ: OPTIONAL + REQ: EXACTLY_ONE + CHECK: " v['value'] != '' " diff --git a/mlperf_logging/mllog/examples/parallelism.py b/mlperf_logging/mllog/examples/parallelism.py index 97e0707..3262c6d 100644 --- a/mlperf_logging/mllog/examples/parallelism.py +++ b/mlperf_logging/mllog/examples/parallelism.py @@ -33,7 +33,7 @@ def parallelism_example(): mllogger.start(key=mllog.constants.RUN_START) - # Log the model config file used for this run + # Log the model config file used for this run. The name must match the submitted config. mllogger.event(key=mllog.constants.CONFIG_FILENAME, value="llama31_405b_config.yaml") # Log lowest numerical precision used in linear, attention, and communication