在构建使用Diffuser的UI时,尽早停止扩散过程非常有用,因为它允许用户在对中间结果不满意时停止生成过程。可以通过回调将其合并到管道中。
此回调函数应采用以下参数:pipeline、i、t和callback_kwargs(必须返回)。将管道的_interrupt属性设置为True,以在一定数量的步骤后停止扩散过程。还可以在回调中自由地实现自己的自定义停止逻辑。
在该示例中,即使num_inference_steps被设置为50,扩散过程也在10个步骤之后停止。
from diffusers import StableDiffusionPipeline pipeline = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5") pipeline.enable_model_cpu_offload() num_inference_steps = 50 def interrupt_callback(pipeline, i, t, callback_kwargs): stop_idx = 10 if i == stop_idx: pipeline._interrupt = True return callback_kwargs out = pipeline( "A photo of a cat", num_inference_steps=num_inference_steps, callback_on_step_end=interrupt_callback, )
因为提前结束,所以没有输出图像。