[DPMSolverSinglestepScheduler] correct get_order_list for solver_order=2and lower_order_final=True #6953
[DPMSolverSinglestepScheduler] correct get_order_list for solver_order=2and lower_order_final=True #6953
get_order_list for solver_order=2and lower_order_final=True #6953Conversation
| if not self.config.lower_order_final and num_inference_steps % self.config.solver_order != 0: | ||
| logger.warn( | ||
| "Changing scheduler {self.config} to have `lower_order_final` set to True to handle uneven amount of inference steps. Please make sure to always use an even number of `num_inference steps when using `lower_order_final=True`." | ||
| "Changing scheduler {self.config} to have `lower_order_final` set to True to handle uneven amount of inference steps. Please make sure to always use an even number of `num_inference steps when using `lower_order_final=False`." |
There was a problem hiding this comment.
I think it's a typo here but let me know if it's not @patrickvonplaten
from this PR #3413
There was a problem hiding this comment.
Yes LGTM - thanks!
| elif order == 2: | ||
| if steps % 2 == 0: | ||
| orders = [1, 2] * (steps // 2) | ||
| orders = [1, 2] * (steps // 2 - 1) + [1, 1] |
There was a problem hiding this comment.
for order=2 and lower_order_final=True, currently it generate orders like 1,2,1,2...,1,2 so final order will be 2
changing it to have both of the last two final steps to be 1 here
There was a problem hiding this comment.
Is this only necessary for DPMSingleStepSolver? Not for the other ones?
|
The docs for this PR live here. All of your documentation changes will be reflected on that endpoint. The docs are available until 30 days after the last update. |
patrickvonplaten
left a comment
There was a problem hiding this comment.
This looks good to me! Can we quickly make sure that other schedulers (like multi-step, unipc and/or deis) are not affected by this bug?
I think this is unique to singlestep |
| algorithm_type: str = "dpmsolver++", | ||
| solver_type: str = "midpoint", | ||
| lower_order_final: bool = True, | ||
| lower_order_final: bool = False, |
There was a problem hiding this comment.
I changed the default value so that we keep the default behavior the same as before @patrickvonplaten
this way I don't have to update test
…rder=2`and `lower_order_final=True` (#6953) * add * change default --------- Co-authored-by: yiyixuxu <yixu310@gmail,com>
For
lower_order_final=Trueandsolver_order=2, we would expect the order for the last step to be1, currently inDPMSolverSinglestepSchedulerit does not work as expected for an even number of stepsthis is the
get_order_listmethod of DPMSolverSinglestepScheduler, (see my comments in code below)diffusers/src/diffusers/schedulers/scheduling_dpmsolver_singlestep.py
Line 216 in 0a1daad
currently
lower_order_final=Trueandlower_order_final=Falsehave exactly same resultanother option is just to not allow use even number of steps + solver_orde=2 + lower_final_order - I think it's more complicated that way, especially now we have the `last_sigmas_type='zero' argument that has to work with final_order ==1
related PR /issue
#6949
#1866
#3413
#6477