Fix ValueError in pad function when tensors list is empty #4043
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.
Description
Fixes #4035 - CI fails with
ValueError: zero-size array to reduction operation maximum which has no identitywhen usinguse_transformers_paged=Truein OnlineDPOTrainer.Root Cause
The bug occurred in the
padfunction intrl/trainer/utils.pywhengenerate_batchreturns empty results, leading to an emptycompletion_idslist. When this empty list is passed to thepadfunction,numpy.max([t.shape for t in tensors], 0)fails because numpy cannot compute the maximum of an empty array.The issue affects three trainers:
OnlineDPOTrainerGRPOTrainerRLOOTrainerSolution
Implemented a two-layer fix:
1. Fixed the
padfunction to handle empty lists gracefully2. Added defensive checks in affected trainers
Added checks to handle cases where no completions are generated, returning appropriate empty tensors instead of calling
padwith empty lists.3. Added comprehensive unit tests
Added three new test cases in
tests/test_utils.pyto ensure thepadfunction handles empty lists correctly with different parameters.