sgl-project/sglang · error · ValueError
rollout_noise_level must be non-negative, got {noise!r}
Error message
rollout_noise_level must be non-negative, got {noise!r} What it means
rollout_noise_level represents noise magnitude and must be >= 0.0; negative values are rejected because negative noise variance is undefined in the rollout SDE.
Source
Thrown at python/sglang/multimodal_gen/configs/post_training/rl_rollout.py:34
@dataclass
class RLRolloutArgs:
"""Rollout (log-prob trajectory) options used by SamplingParams and APIs."""
rollout: bool = False
rollout_sde_type: str = "sde"
rollout_noise_level: float = 0.7
rollout_log_prob_no_const: bool = False
rollout_debug_mode: bool = False
def validate(self) -> None:
noise = self.rollout_noise_level
if isinstance(noise, bool) or not isinstance(noise, (int, float)):
raise ValueError(f"rollout_noise_level must be a number, got {noise!r}")
if not math.isfinite(float(noise)):
raise ValueError(f"rollout_noise_level must be finite, got {noise!r}")
if float(noise) < 0.0:
raise ValueError(f"rollout_noise_level must be non-negative, got {noise!r}")
if self.rollout_sde_type not in _VALID_ROLLOUT_SDE_TYPES:
raise ValueError(
f"rollout_sde_type must be one of {_VALID_ROLLOUT_SDE_TYPES}, "
f"got {self.rollout_sde_type!r}"
)
@classmethod
def validate_sampling_params(cls, params: Any) -> None:
"""Validate rollout fields on a duck-typed object (e.g. ``SamplingParams``).
Mirrors how ``ServerArgs`` runs ``NunchakuSVDQuantArgs.validate()`` from
``_adjust_quant_config`` instead of inlining checks in a large validator.
"""
cls(
rollout=params.rollout,
rollout_sde_type=params.rollout_sde_type,
rollout_noise_level=params.rollout_noise_level,View on GitHub (pinned to 0132848349)
Solutions
- Set a non-negative value: 0.0 disables the noise, larger values increase it
- In sweep code, clamp: max(0.0, computed_noise)
- Re-read the field's semantics: to reduce noise, lower the value toward 0 rather than below it
Example fix
# before params.rollout_noise_level = base - delta # can go negative # after params.rollout_noise_level = max(0.0, base - delta)
Defensive patterns
Strategy: validation
Validate before calling
assert params.rollout_noise_level >= 0.0, "rollout_noise_level must be >= 0"
Type guard
def is_nonneg_noise(v) -> bool:
return isinstance(v, (int, float)) and not isinstance(v, bool) and v >= 0 Prevention
- Clamp sweep-derived values with max(0.0, x)
- Remember 0.0 means 'no noise', not negative values
When it happens
Trigger: Setting rollout_noise_level to any negative number (e.g. -0.1, or a negated value from a sign error) in sampling params; validate() runs during validate_sampling_params and raises immediately.
Common situations: Sign flips in hyperparameter sweeps; configs generated from subtraction (base - delta) that dip below zero; mirroring a 'noise reduction' semantic that the field does not have.
Related errors
- rollout_noise_level must be a number, got {noise!r}
- rollout_noise_level must be finite, got {noise!r}
- H.264 encoder did not return MP4 decoder config
- Wrong type of stop in sampling parameters.
- rollout_sde_type must be one of {_VALID_ROLLOUT_SDE_TYPES},
AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28).
Data as JSON: /api/errors/898067bbd04e6a52.
Report an issue: GitHub.