From b9c46bda51743d7188d4712af80a8156a322e5b5 Mon Sep 17 00:00:00 2001 From: Nicki Skafte Date: Fri, 15 Aug 2025 06:34:29 +0200 Subject: [PATCH 1/3] use mlflow variable for truncation --- src/lightning/pytorch/loggers/mlflow.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/lightning/pytorch/loggers/mlflow.py b/src/lightning/pytorch/loggers/mlflow.py index ff9b2b0d7e542..7f5c95b58c48c 100644 --- a/src/lightning/pytorch/loggers/mlflow.py +++ b/src/lightning/pytorch/loggers/mlflow.py @@ -233,10 +233,9 @@ def log_hyperparams(self, params: Union[dict[str, Any], Namespace]) -> None: params = _flatten_dict(params) from mlflow.entities import Param + from mlflow.utils.validation import MAX_PARAM_VAL_LENGTH - # Truncate parameter values to 250 characters. - # TODO: MLflow 1.28 allows up to 500 characters: https://github.com/mlflow/mlflow/releases/tag/v1.28.0 - params_list = [Param(key=k, value=str(v)[:250]) for k, v in params.items()] + params_list = [Param(key=k, value=str(v)[:MAX_PARAM_VAL_LENGTH]) for k, v in params.items()] # Log in chunks of 100 parameters (the maximum allowed by MLflow). for idx in range(0, len(params_list), 100): From 8466ff8bcf8157b5a7b4affbe567f44b1a11068f Mon Sep 17 00:00:00 2001 From: Nicki Skafte Date: Fri, 15 Aug 2025 06:34:51 +0200 Subject: [PATCH 2/3] fix testing --- tests/tests_pytorch/loggers/test_mlflow.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/tests_pytorch/loggers/test_mlflow.py b/tests/tests_pytorch/loggers/test_mlflow.py index c7f9dbe1fe2c6..2908ebf6a09b8 100644 --- a/tests/tests_pytorch/loggers/test_mlflow.py +++ b/tests/tests_pytorch/loggers/test_mlflow.py @@ -317,16 +317,17 @@ def test_mlflow_logger_no_synchronous_support(mlflow_mock, tmp_path): @mock.patch("lightning.pytorch.loggers.mlflow._get_resolve_tags", Mock()) def test_mlflow_logger_with_long_param_value(mlflow_mock, tmp_path): - """Test that long parameter values are truncated to 250 characters.""" + """Test that long parameter values are truncated using MLflow's MAX_PARAM_VAL_LENGTH.""" + from mlflow.utils.validation import MAX_PARAM_VAL_LENGTH def _check_value_length(value, *args, **kwargs): - assert len(value) <= 250 + assert len(value) <= MAX_PARAM_VAL_LENGTH mlflow_mock.entities.Param.side_effect = _check_value_length logger = MLFlowLogger("test", save_dir=str(tmp_path)) - params = {"test": "test_param" * 50} + params = {"test": "test_param" * 1000} logger.log_hyperparams(params) # assert_called_once_with() won't properly check the parameter value. From bad99871d4cfd50881527192ac1c01b6a3221ff4 Mon Sep 17 00:00:00 2001 From: Nicki Skafte Date: Fri, 15 Aug 2025 10:15:48 +0200 Subject: [PATCH 3/3] add mlflow as test requirement --- requirements/pytorch/test.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements/pytorch/test.txt b/requirements/pytorch/test.txt index a1fbdec222c7f..8be6d949354fa 100644 --- a/requirements/pytorch/test.txt +++ b/requirements/pytorch/test.txt @@ -18,3 +18,4 @@ fastapi # for `ServableModuleValidator` # not setting version as re-defined in uvicorn # for `ServableModuleValidator` # not setting version as re-defined in App tensorboard >=2.9.1, <2.21.0 # for `TensorBoardLogger` +mlflow >=3.0.0, <4.0.0 # for `MLFlowLogger`