Skip to content

fix: add zero-guards for divisor/scale edge cases (#7838)#8133

Open
liuyun7345 wants to merge 1 commit into
deepspeedai:masterfrom
liuyun7345:fix/zero-guards-7838
Open

fix: add zero-guards for divisor/scale edge cases (#7838)#8133
liuyun7345 wants to merge 1 commit into
deepspeedai:masterfrom
liuyun7345:fix/zero-guards-7838

Conversation

@liuyun7345

Copy link
Copy Markdown

Summary

Fixes #7838 by adding explicit zero/non-finite guards at the four reported sites so DeepSpeed fails early with a clear error instead of raising raw ZeroDivisionError or silently propagating inf/nan.

This picks up the inactive draft #7855 (no updates since 2026-02-17).

Changes

  1. deepspeed/utils/groups.py_ensure_divisibility asserts denominator != 0 before modulo.
  2. deepspeed/utils/timer.pyThroughputTimer rejects non-positive steps_per_output in __init__, and _is_report_boundary re-checks if the attribute is later mutated.
  3. deepspeed/inference/v2/inference_utils.pyceil_div raises ValueError when b == 0.
  4. op_builder/hpu/fp_quantizer.pydequantize rejects zero / non-finite scales before computing 1.0 / scale.
  5. tests/unit/utils/test_zero_guards.py — regression tests for each failure mode (HPU builder tests skip if that module is unavailable).

Test plan

  • _ensure_divisibility(8, 0) raises clear AssertionError
  • valid _ensure_divisibility inputs still pass
  • ceil_div(10, 0) raises ValueError
  • ceil_div matches math.ceil for valid inputs
  • ThroughputTimer(..., steps_per_output=0/-1) raises ValueError
  • mutated steps_per_output=0 is caught in _is_report_boundary
  • HPU dequantize rejects zero / NaN / zero-scalar scales before HPU op

Fixes #7838

Prevent ZeroDivisionError and silent non-finite propagation at four
reported sites:

1. groups._ensure_divisibility: reject denominator == 0 before modulo
2. ThroughputTimer: reject non-positive steps_per_output at init and
   report-boundary time
3. inference_utils.ceil_div: reject divisor == 0
4. HPU FPQuantizer.dequantize: reject zero/non-finite scales before
   1/scale

Adds focused unit tests covering each failure mode.

Picks up the inactive draft deepspeedai#7855.

Fixes deepspeedai#7838

Signed-off-by: liuyun7345 <liuyun7345@sina.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] Multiple missing zero-guards cause ZeroDivisionError / non-finite values across DeepSpeed (4 locations)

1 participant