sgl-project/sglang · error · NotImplementedError

Scheduler type '{self.config.scheduler_type}' not implemente

Error message

Scheduler type '{self.config.scheduler_type}' not implemented

What it means

HeliusScheduler.step() dispatches on self.config.scheduler_type and only implements specific solver types (e.g. the UniPC branch above); any other string hits the NotImplementedError. The scheduler_type string in the config does not match a compiled-in branch.

Source

Thrown at python/sglang/multimodal_gen/runtime/models/schedulers/scheduling_helios.py:718

                return_dict=return_dict,
            )
        elif self.config.scheduler_type == "unipc":
            return self.step_unipc(
                model_output=model_output,
                timestep=timestep,
                sample=sample,
                return_dict=return_dict,
            )
        elif self.config.scheduler_type == "dmd":
            return self.step_dmd(
                model_output=model_output,
                timestep=timestep,
                sample=sample,
                return_dict=return_dict,
                **kwargs,
            )
        else:
            raise NotImplementedError(
                f"Scheduler type '{self.config.scheduler_type}' not implemented"
            )

    def reset_scheduler_history(self):
        self.model_outputs = [None] * self.config.solver_order
        self.timestep_list = [None] * self.config.solver_order
        self.lower_order_nums = 0
        self.disable_corrector = self.config.disable_corrector
        self.solver_p = None
        self.last_sample = None
        self._step_index = None
        self._begin_index = None

    def set_shift(self, shift: float):
        """Update the shift parameter (called by SchedulerLoader after loading)."""
        self.config.shift = shift
        self.shift = shift

View on GitHub (pinned to 0132848349)

Solutions

  1. Check the exact value of config.scheduler_type in your model config and align it with one of the types handled in step() (read the if/elif chain just above the raise)
  2. If you intended a standard diffusers scheduler, use that scheduler class directly instead of HeliosScheduler
  3. If the type should be supported, add an elif branch or fix the config string (watch for trailing spaces / case)

Example fix

# before
scheduler = HeliosScheduler.from_config({"scheduler_type": "euler"})
scheduler.step(...)  # NotImplementedError

# after
scheduler = HeliosScheduler.from_config({"scheduler_type": "unipc"})  # a supported type
scheduler.set_timesteps(50)
scheduler.step(...)
Defensive patterns

Strategy: type-guard

Validate before calling

supported = {b.comparators[0].value for ...}  # or hard-code from step()
assert config.scheduler_type in SUPPORTED_TYPES, f"unsupported scheduler_type {config.scheduler_type!r}"

Type guard

SUPPORTED_SCHEDULER_TYPES = {"unipc"}  # keep in sync with step()
def is_supported_scheduler_type(name: str) -> bool:
    return name.strip().lower() in SUPPORTED_SCHEDULER_TYPES

Try / catch

try:
    scheduler.step(...)
except NotImplementedError as e:
    raise RuntimeError(f"Config uses unsupported scheduler {config.scheduler_type!r}; switch to a supported type") from e

Prevention

When it happens

Trigger: Loading a model/pipeline whose config.json sets scheduler_type to a value with no branch in step() (e.g. 'euler', 'ddim', or a typo like 'unipcmultistepscheduler ').

Common situations: Swapping scheduler configs between diffusion models; version upgrades that rename scheduler types; typos or wrong-casing in a custom config.

Related errors


AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28). Data as JSON: /api/errors/db795cd939e3e6a1. Report an issue: GitHub.