microsoft/VibeVoice · error · NotImplementedError

{beta_schedule} is not implemented for {self.__class__}

Error message

{beta_schedule} is not implemented for {self.__class__}

What it means

The DPM-Solver multistep scheduler constructor accepts only these beta_schedule values: `linear`, `scaled_linear`, `squaredcos_cap_v2` (alias `cosine`), `cauchy`, and `laplace` (dpm_solver.py:~238-247). Anything else raises NotImplementedError. This is a vendored copy of diffusers' DPMSolverMultistepScheduler, so configs written for other diffusers versions (e.g. `sigmoid`, which newer diffusers added) will fail here.

Source

Thrown at vibevoice/schedule/dpm_solver.py:247

            deprecation_message = f"algorithm_type {algorithm_type} is deprecated and will be removed in a future version. Choose from `dpmsolver++` or `sde-dpmsolver++` instead"
            deprecate("algorithm_types dpmsolver and sde-dpmsolver", "1.0.0", deprecation_message)

        if trained_betas is not None:
            self.betas = torch.tensor(trained_betas, dtype=torch.float32)
        elif beta_schedule == "linear":
            self.betas = torch.linspace(beta_start, beta_end, num_train_timesteps, dtype=torch.float32)
        elif beta_schedule == "scaled_linear":
            # this schedule is very specific to the latent diffusion model.
            self.betas = torch.linspace(beta_start**0.5, beta_end**0.5, num_train_timesteps, dtype=torch.float32) ** 2
        elif beta_schedule == "squaredcos_cap_v2" or beta_schedule == "cosine":
            # Glide cosine schedule
            self.betas = betas_for_alpha_bar(num_train_timesteps, alpha_transform_type="cosine")
        elif beta_schedule == "cauchy":
            self.betas = betas_for_alpha_bar(num_train_timesteps, alpha_transform_type="cauchy")
        elif beta_schedule == "laplace":
            self.betas = betas_for_alpha_bar(num_train_timesteps, alpha_transform_type="laplace")
        else:
            raise NotImplementedError(f"{beta_schedule} is not implemented for {self.__class__}")

        if rescale_betas_zero_snr:
            self.betas = rescale_zero_terminal_snr(self.betas)

        self.alphas = 1.0 - self.betas
        self.alphas_cumprod = torch.cumprod(self.alphas, dim=0)

        if rescale_betas_zero_snr:
            # Close to 0 without being 0 so first sigma is not inf
            # FP16 smallest positive subnormal works well here
            self.alphas_cumprod[-1] = 2**-24

        # Currently we only support VP-type noise schedule
        self.alpha_t = torch.sqrt(self.alphas_cumprod)
        self.sigma_t = torch.sqrt(1 - self.alphas_cumprod)
        self.lambda_t = torch.log(self.alpha_t) - torch.log(self.sigma_t)
        self.sigmas = ((1 - self.alphas_cumprod) / self.alphas_cumprod) ** 0.5

View on GitHub (pinned to 94da20d98b)

Solutions

  1. Change beta_schedule to a supported value: "linear", "scaled_linear", "squaredcos_cap_v2" (or "cosine"), "cauchy", "laplace".
  2. If the checkpoint genuinely needs `sigmoid`, port that branch from upstream diffusers `scheduling_dpmsolver.py` into this local copy.
  3. Validate/normalize scheduler config keys before constructing the scheduler.

Example fix

# before
sched = DPMSolverMultistepScheduler(..., beta_schedule="sigmoid")

# after
sched = DPMSolverMultistepScheduler(..., beta_schedule="scaled_linear")
Defensive patterns

Strategy: validation

Validate before calling

SUPPORTED_BETA = {"linear", "scaled_linear", "squaredcos_cap_v2", "cosine", "cauchy", "laplace"}
if beta_schedule not in SUPPORTED_BETA:
    raise ValueError(f"beta_schedule {beta_schedule!r} unsupported; choose from {sorted(SUPPORTED_BETA)}")
sched = DPMSolverMultistepScheduler(..., beta_schedule=beta_schedule)

Type guard

def is_supported_beta_schedule(v) -> bool:
    return isinstance(v, str) and v in {
        "linear", "scaled_linear", "squaredcos_cap_v2", "cosine", "cauchy", "laplace"
    }

Prevention

When it happens

Trigger: Constructing the scheduler with `beta_schedule="sigmoid"` (or any unsupported string), typically from a pipeline config dict / model card JSON that was authored against a different diffusers release.

Common situations: Loading a diffusers model config saved by a newer diffusers (sigmoid schedule exists there but not in this vendored copy); hand-written config with typos; porting pipelines between repos.

Related errors


AI-assisted analysis of microsoft/VibeVoice@94da20d98b (2026-08-15). Data as JSON: /api/errors/1c17bbfd2114bc58. Report an issue: GitHub.