diffusers 0.32.1__py3-none-any.whl → 0.33.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- diffusers/__init__.py +186 -3
- diffusers/configuration_utils.py +40 -12
- diffusers/dependency_versions_table.py +9 -2
- diffusers/hooks/__init__.py +9 -0
- diffusers/hooks/faster_cache.py +653 -0
- diffusers/hooks/group_offloading.py +793 -0
- diffusers/hooks/hooks.py +236 -0
- diffusers/hooks/layerwise_casting.py +245 -0
- diffusers/hooks/pyramid_attention_broadcast.py +311 -0
- diffusers/loaders/__init__.py +6 -0
- diffusers/loaders/ip_adapter.py +38 -30
- diffusers/loaders/lora_base.py +198 -28
- diffusers/loaders/lora_conversion_utils.py +679 -44
- diffusers/loaders/lora_pipeline.py +1963 -801
- diffusers/loaders/peft.py +169 -84
- diffusers/loaders/single_file.py +17 -2
- diffusers/loaders/single_file_model.py +53 -5
- diffusers/loaders/single_file_utils.py +653 -75
- diffusers/loaders/textual_inversion.py +9 -9
- diffusers/loaders/transformer_flux.py +8 -9
- diffusers/loaders/transformer_sd3.py +120 -39
- diffusers/loaders/unet.py +22 -32
- diffusers/models/__init__.py +22 -0
- diffusers/models/activations.py +9 -9
- diffusers/models/attention.py +0 -1
- diffusers/models/attention_processor.py +163 -25
- diffusers/models/auto_model.py +169 -0
- diffusers/models/autoencoders/__init__.py +2 -0
- diffusers/models/autoencoders/autoencoder_asym_kl.py +2 -0
- diffusers/models/autoencoders/autoencoder_dc.py +106 -4
- diffusers/models/autoencoders/autoencoder_kl.py +0 -4
- diffusers/models/autoencoders/autoencoder_kl_allegro.py +5 -23
- diffusers/models/autoencoders/autoencoder_kl_cogvideox.py +17 -55
- diffusers/models/autoencoders/autoencoder_kl_hunyuan_video.py +17 -97
- diffusers/models/autoencoders/autoencoder_kl_ltx.py +326 -107
- diffusers/models/autoencoders/autoencoder_kl_magvit.py +1094 -0
- diffusers/models/autoencoders/autoencoder_kl_mochi.py +21 -56
- diffusers/models/autoencoders/autoencoder_kl_temporal_decoder.py +11 -42
- diffusers/models/autoencoders/autoencoder_kl_wan.py +855 -0
- diffusers/models/autoencoders/autoencoder_oobleck.py +1 -0
- diffusers/models/autoencoders/autoencoder_tiny.py +0 -4
- diffusers/models/autoencoders/consistency_decoder_vae.py +3 -1
- diffusers/models/autoencoders/vae.py +31 -141
- diffusers/models/autoencoders/vq_model.py +3 -0
- diffusers/models/cache_utils.py +108 -0
- diffusers/models/controlnets/__init__.py +1 -0
- diffusers/models/controlnets/controlnet.py +3 -8
- diffusers/models/controlnets/controlnet_flux.py +14 -42
- diffusers/models/controlnets/controlnet_sd3.py +58 -34
- diffusers/models/controlnets/controlnet_sparsectrl.py +4 -7
- diffusers/models/controlnets/controlnet_union.py +27 -18
- diffusers/models/controlnets/controlnet_xs.py +7 -46
- diffusers/models/controlnets/multicontrolnet_union.py +196 -0
- diffusers/models/embeddings.py +18 -7
- diffusers/models/model_loading_utils.py +122 -80
- diffusers/models/modeling_flax_pytorch_utils.py +1 -1
- diffusers/models/modeling_flax_utils.py +1 -1
- diffusers/models/modeling_pytorch_flax_utils.py +1 -1
- diffusers/models/modeling_utils.py +617 -272
- diffusers/models/normalization.py +67 -14
- diffusers/models/resnet.py +1 -1
- diffusers/models/transformers/__init__.py +6 -0
- diffusers/models/transformers/auraflow_transformer_2d.py +9 -35
- diffusers/models/transformers/cogvideox_transformer_3d.py +13 -24
- diffusers/models/transformers/consisid_transformer_3d.py +789 -0
- diffusers/models/transformers/dit_transformer_2d.py +5 -19
- diffusers/models/transformers/hunyuan_transformer_2d.py +4 -3
- diffusers/models/transformers/latte_transformer_3d.py +20 -15
- diffusers/models/transformers/lumina_nextdit2d.py +3 -1
- diffusers/models/transformers/pixart_transformer_2d.py +4 -19
- diffusers/models/transformers/prior_transformer.py +5 -1
- diffusers/models/transformers/sana_transformer.py +144 -40
- diffusers/models/transformers/stable_audio_transformer.py +5 -20
- diffusers/models/transformers/transformer_2d.py +7 -22
- diffusers/models/transformers/transformer_allegro.py +9 -17
- diffusers/models/transformers/transformer_cogview3plus.py +6 -17
- diffusers/models/transformers/transformer_cogview4.py +462 -0
- diffusers/models/transformers/transformer_easyanimate.py +527 -0
- diffusers/models/transformers/transformer_flux.py +68 -110
- diffusers/models/transformers/transformer_hunyuan_video.py +409 -49
- diffusers/models/transformers/transformer_ltx.py +53 -35
- diffusers/models/transformers/transformer_lumina2.py +548 -0
- diffusers/models/transformers/transformer_mochi.py +6 -17
- diffusers/models/transformers/transformer_omnigen.py +469 -0
- diffusers/models/transformers/transformer_sd3.py +56 -86
- diffusers/models/transformers/transformer_temporal.py +5 -11
- diffusers/models/transformers/transformer_wan.py +469 -0
- diffusers/models/unets/unet_1d.py +3 -1
- diffusers/models/unets/unet_2d.py +21 -20
- diffusers/models/unets/unet_2d_blocks.py +19 -243
- diffusers/models/unets/unet_2d_condition.py +4 -6
- diffusers/models/unets/unet_3d_blocks.py +14 -127
- diffusers/models/unets/unet_3d_condition.py +8 -12
- diffusers/models/unets/unet_i2vgen_xl.py +5 -13
- diffusers/models/unets/unet_kandinsky3.py +0 -4
- diffusers/models/unets/unet_motion_model.py +20 -114
- diffusers/models/unets/unet_spatio_temporal_condition.py +7 -8
- diffusers/models/unets/unet_stable_cascade.py +8 -35
- diffusers/models/unets/uvit_2d.py +1 -4
- diffusers/optimization.py +2 -2
- diffusers/pipelines/__init__.py +57 -8
- diffusers/pipelines/allegro/pipeline_allegro.py +22 -2
- diffusers/pipelines/amused/pipeline_amused.py +15 -2
- diffusers/pipelines/amused/pipeline_amused_img2img.py +15 -2
- diffusers/pipelines/amused/pipeline_amused_inpaint.py +15 -2
- diffusers/pipelines/animatediff/pipeline_animatediff.py +15 -2
- diffusers/pipelines/animatediff/pipeline_animatediff_controlnet.py +15 -3
- diffusers/pipelines/animatediff/pipeline_animatediff_sdxl.py +24 -4
- diffusers/pipelines/animatediff/pipeline_animatediff_sparsectrl.py +15 -2
- diffusers/pipelines/animatediff/pipeline_animatediff_video2video.py +16 -4
- diffusers/pipelines/animatediff/pipeline_animatediff_video2video_controlnet.py +16 -4
- diffusers/pipelines/audioldm/pipeline_audioldm.py +13 -2
- diffusers/pipelines/audioldm2/modeling_audioldm2.py +13 -68
- diffusers/pipelines/audioldm2/pipeline_audioldm2.py +39 -9
- diffusers/pipelines/aura_flow/pipeline_aura_flow.py +63 -7
- diffusers/pipelines/auto_pipeline.py +35 -14
- diffusers/pipelines/blip_diffusion/blip_image_processing.py +1 -1
- diffusers/pipelines/blip_diffusion/modeling_blip2.py +5 -8
- diffusers/pipelines/blip_diffusion/pipeline_blip_diffusion.py +12 -0
- diffusers/pipelines/cogvideo/pipeline_cogvideox.py +22 -6
- diffusers/pipelines/cogvideo/pipeline_cogvideox_fun_control.py +22 -6
- diffusers/pipelines/cogvideo/pipeline_cogvideox_image2video.py +22 -5
- diffusers/pipelines/cogvideo/pipeline_cogvideox_video2video.py +22 -6
- diffusers/pipelines/cogview3/pipeline_cogview3plus.py +12 -4
- diffusers/pipelines/cogview4/__init__.py +49 -0
- diffusers/pipelines/cogview4/pipeline_cogview4.py +684 -0
- diffusers/pipelines/cogview4/pipeline_cogview4_control.py +732 -0
- diffusers/pipelines/cogview4/pipeline_output.py +21 -0
- diffusers/pipelines/consisid/__init__.py +49 -0
- diffusers/pipelines/consisid/consisid_utils.py +357 -0
- diffusers/pipelines/consisid/pipeline_consisid.py +974 -0
- diffusers/pipelines/consisid/pipeline_output.py +20 -0
- diffusers/pipelines/consistency_models/pipeline_consistency_models.py +11 -0
- diffusers/pipelines/controlnet/pipeline_controlnet.py +6 -5
- diffusers/pipelines/controlnet/pipeline_controlnet_blip_diffusion.py +13 -0
- diffusers/pipelines/controlnet/pipeline_controlnet_img2img.py +17 -5
- diffusers/pipelines/controlnet/pipeline_controlnet_inpaint.py +31 -12
- diffusers/pipelines/controlnet/pipeline_controlnet_inpaint_sd_xl.py +26 -7
- diffusers/pipelines/controlnet/pipeline_controlnet_sd_xl.py +20 -3
- diffusers/pipelines/controlnet/pipeline_controlnet_sd_xl_img2img.py +22 -3
- diffusers/pipelines/controlnet/pipeline_controlnet_union_inpaint_sd_xl.py +26 -25
- diffusers/pipelines/controlnet/pipeline_controlnet_union_sd_xl.py +224 -109
- diffusers/pipelines/controlnet/pipeline_controlnet_union_sd_xl_img2img.py +25 -29
- diffusers/pipelines/controlnet/pipeline_flax_controlnet.py +7 -4
- diffusers/pipelines/controlnet_hunyuandit/pipeline_hunyuandit_controlnet.py +3 -5
- diffusers/pipelines/controlnet_sd3/pipeline_stable_diffusion_3_controlnet.py +121 -10
- diffusers/pipelines/controlnet_sd3/pipeline_stable_diffusion_3_controlnet_inpainting.py +122 -11
- diffusers/pipelines/controlnet_xs/pipeline_controlnet_xs.py +12 -1
- diffusers/pipelines/controlnet_xs/pipeline_controlnet_xs_sd_xl.py +20 -3
- diffusers/pipelines/dance_diffusion/pipeline_dance_diffusion.py +14 -2
- diffusers/pipelines/ddim/pipeline_ddim.py +14 -1
- diffusers/pipelines/ddpm/pipeline_ddpm.py +15 -1
- diffusers/pipelines/deepfloyd_if/pipeline_if.py +12 -0
- diffusers/pipelines/deepfloyd_if/pipeline_if_img2img.py +12 -0
- diffusers/pipelines/deepfloyd_if/pipeline_if_img2img_superresolution.py +14 -1
- diffusers/pipelines/deepfloyd_if/pipeline_if_inpainting.py +12 -0
- diffusers/pipelines/deepfloyd_if/pipeline_if_inpainting_superresolution.py +14 -1
- diffusers/pipelines/deepfloyd_if/pipeline_if_superresolution.py +14 -1
- diffusers/pipelines/deprecated/alt_diffusion/pipeline_alt_diffusion.py +11 -7
- diffusers/pipelines/deprecated/alt_diffusion/pipeline_alt_diffusion_img2img.py +11 -7
- diffusers/pipelines/deprecated/repaint/pipeline_repaint.py +1 -1
- diffusers/pipelines/deprecated/stable_diffusion_variants/pipeline_cycle_diffusion.py +10 -6
- diffusers/pipelines/deprecated/stable_diffusion_variants/pipeline_onnx_stable_diffusion_inpaint_legacy.py +2 -2
- diffusers/pipelines/deprecated/stable_diffusion_variants/pipeline_stable_diffusion_inpaint_legacy.py +11 -7
- diffusers/pipelines/deprecated/stable_diffusion_variants/pipeline_stable_diffusion_model_editing.py +1 -1
- diffusers/pipelines/deprecated/stable_diffusion_variants/pipeline_stable_diffusion_paradigms.py +1 -1
- diffusers/pipelines/deprecated/stable_diffusion_variants/pipeline_stable_diffusion_pix2pix_zero.py +1 -1
- diffusers/pipelines/deprecated/versatile_diffusion/modeling_text_unet.py +10 -105
- diffusers/pipelines/deprecated/versatile_diffusion/pipeline_versatile_diffusion.py +1 -1
- diffusers/pipelines/deprecated/versatile_diffusion/pipeline_versatile_diffusion_dual_guided.py +1 -1
- diffusers/pipelines/deprecated/versatile_diffusion/pipeline_versatile_diffusion_image_variation.py +1 -1
- diffusers/pipelines/deprecated/versatile_diffusion/pipeline_versatile_diffusion_text_to_image.py +1 -1
- diffusers/pipelines/dit/pipeline_dit.py +15 -2
- diffusers/pipelines/easyanimate/__init__.py +52 -0
- diffusers/pipelines/easyanimate/pipeline_easyanimate.py +770 -0
- diffusers/pipelines/easyanimate/pipeline_easyanimate_control.py +994 -0
- diffusers/pipelines/easyanimate/pipeline_easyanimate_inpaint.py +1234 -0
- diffusers/pipelines/easyanimate/pipeline_output.py +20 -0
- diffusers/pipelines/flux/pipeline_flux.py +53 -21
- diffusers/pipelines/flux/pipeline_flux_control.py +9 -12
- diffusers/pipelines/flux/pipeline_flux_control_img2img.py +6 -10
- diffusers/pipelines/flux/pipeline_flux_control_inpaint.py +8 -10
- diffusers/pipelines/flux/pipeline_flux_controlnet.py +185 -13
- diffusers/pipelines/flux/pipeline_flux_controlnet_image_to_image.py +8 -10
- diffusers/pipelines/flux/pipeline_flux_controlnet_inpainting.py +16 -16
- diffusers/pipelines/flux/pipeline_flux_fill.py +107 -39
- diffusers/pipelines/flux/pipeline_flux_img2img.py +193 -15
- diffusers/pipelines/flux/pipeline_flux_inpaint.py +199 -19
- diffusers/pipelines/free_noise_utils.py +3 -3
- diffusers/pipelines/hunyuan_video/__init__.py +4 -0
- diffusers/pipelines/hunyuan_video/pipeline_hunyuan_skyreels_image2video.py +804 -0
- diffusers/pipelines/hunyuan_video/pipeline_hunyuan_video.py +90 -23
- diffusers/pipelines/hunyuan_video/pipeline_hunyuan_video_image2video.py +924 -0
- diffusers/pipelines/hunyuandit/pipeline_hunyuandit.py +3 -5
- diffusers/pipelines/i2vgen_xl/pipeline_i2vgen_xl.py +13 -1
- diffusers/pipelines/kandinsky/pipeline_kandinsky.py +12 -0
- diffusers/pipelines/kandinsky/pipeline_kandinsky_combined.py +1 -1
- diffusers/pipelines/kandinsky/pipeline_kandinsky_img2img.py +12 -0
- diffusers/pipelines/kandinsky/pipeline_kandinsky_inpaint.py +13 -1
- diffusers/pipelines/kandinsky/pipeline_kandinsky_prior.py +12 -0
- diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2.py +12 -1
- diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_controlnet.py +13 -0
- diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_controlnet_img2img.py +12 -0
- diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_img2img.py +12 -1
- diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_inpainting.py +12 -1
- diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_prior.py +12 -0
- diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_prior_emb2emb.py +12 -0
- diffusers/pipelines/kandinsky3/pipeline_kandinsky3.py +12 -0
- diffusers/pipelines/kandinsky3/pipeline_kandinsky3_img2img.py +12 -0
- diffusers/pipelines/kolors/pipeline_kolors.py +10 -8
- diffusers/pipelines/kolors/pipeline_kolors_img2img.py +6 -4
- diffusers/pipelines/kolors/text_encoder.py +7 -34
- diffusers/pipelines/latent_consistency_models/pipeline_latent_consistency_img2img.py +12 -1
- diffusers/pipelines/latent_consistency_models/pipeline_latent_consistency_text2img.py +13 -1
- diffusers/pipelines/latent_diffusion/pipeline_latent_diffusion.py +14 -13
- diffusers/pipelines/latent_diffusion/pipeline_latent_diffusion_superresolution.py +12 -1
- diffusers/pipelines/latte/pipeline_latte.py +36 -7
- diffusers/pipelines/ledits_pp/pipeline_leditspp_stable_diffusion.py +67 -13
- diffusers/pipelines/ledits_pp/pipeline_leditspp_stable_diffusion_xl.py +60 -15
- diffusers/pipelines/ltx/__init__.py +2 -0
- diffusers/pipelines/ltx/pipeline_ltx.py +25 -13
- diffusers/pipelines/ltx/pipeline_ltx_condition.py +1194 -0
- diffusers/pipelines/ltx/pipeline_ltx_image2video.py +31 -17
- diffusers/pipelines/lumina/__init__.py +2 -2
- diffusers/pipelines/lumina/pipeline_lumina.py +83 -20
- diffusers/pipelines/lumina2/__init__.py +48 -0
- diffusers/pipelines/lumina2/pipeline_lumina2.py +790 -0
- diffusers/pipelines/marigold/__init__.py +2 -0
- diffusers/pipelines/marigold/marigold_image_processing.py +127 -14
- diffusers/pipelines/marigold/pipeline_marigold_depth.py +31 -16
- diffusers/pipelines/marigold/pipeline_marigold_intrinsics.py +721 -0
- diffusers/pipelines/marigold/pipeline_marigold_normals.py +31 -16
- diffusers/pipelines/mochi/pipeline_mochi.py +14 -18
- diffusers/pipelines/musicldm/pipeline_musicldm.py +16 -1
- diffusers/pipelines/omnigen/__init__.py +50 -0
- diffusers/pipelines/omnigen/pipeline_omnigen.py +512 -0
- diffusers/pipelines/omnigen/processor_omnigen.py +327 -0
- diffusers/pipelines/onnx_utils.py +5 -3
- diffusers/pipelines/pag/pag_utils.py +1 -1
- diffusers/pipelines/pag/pipeline_pag_controlnet_sd.py +12 -1
- diffusers/pipelines/pag/pipeline_pag_controlnet_sd_inpaint.py +15 -4
- diffusers/pipelines/pag/pipeline_pag_controlnet_sd_xl.py +20 -3
- diffusers/pipelines/pag/pipeline_pag_controlnet_sd_xl_img2img.py +20 -3
- diffusers/pipelines/pag/pipeline_pag_hunyuandit.py +1 -3
- diffusers/pipelines/pag/pipeline_pag_kolors.py +6 -4
- diffusers/pipelines/pag/pipeline_pag_pixart_sigma.py +16 -3
- diffusers/pipelines/pag/pipeline_pag_sana.py +65 -8
- diffusers/pipelines/pag/pipeline_pag_sd.py +23 -7
- diffusers/pipelines/pag/pipeline_pag_sd_3.py +3 -5
- diffusers/pipelines/pag/pipeline_pag_sd_3_img2img.py +3 -5
- diffusers/pipelines/pag/pipeline_pag_sd_animatediff.py +13 -1
- diffusers/pipelines/pag/pipeline_pag_sd_img2img.py +23 -7
- diffusers/pipelines/pag/pipeline_pag_sd_inpaint.py +26 -10
- diffusers/pipelines/pag/pipeline_pag_sd_xl.py +12 -4
- diffusers/pipelines/pag/pipeline_pag_sd_xl_img2img.py +7 -3
- diffusers/pipelines/pag/pipeline_pag_sd_xl_inpaint.py +10 -6
- diffusers/pipelines/paint_by_example/pipeline_paint_by_example.py +13 -3
- diffusers/pipelines/pia/pipeline_pia.py +13 -1
- diffusers/pipelines/pipeline_flax_utils.py +7 -7
- diffusers/pipelines/pipeline_loading_utils.py +193 -83
- diffusers/pipelines/pipeline_utils.py +221 -106
- diffusers/pipelines/pixart_alpha/pipeline_pixart_alpha.py +17 -5
- diffusers/pipelines/pixart_alpha/pipeline_pixart_sigma.py +17 -4
- diffusers/pipelines/sana/__init__.py +2 -0
- diffusers/pipelines/sana/pipeline_sana.py +183 -58
- diffusers/pipelines/sana/pipeline_sana_sprint.py +889 -0
- diffusers/pipelines/semantic_stable_diffusion/pipeline_semantic_stable_diffusion.py +12 -2
- diffusers/pipelines/shap_e/pipeline_shap_e.py +12 -0
- diffusers/pipelines/shap_e/pipeline_shap_e_img2img.py +12 -0
- diffusers/pipelines/shap_e/renderer.py +6 -6
- diffusers/pipelines/stable_audio/pipeline_stable_audio.py +1 -1
- diffusers/pipelines/stable_cascade/pipeline_stable_cascade.py +15 -4
- diffusers/pipelines/stable_cascade/pipeline_stable_cascade_combined.py +12 -8
- diffusers/pipelines/stable_cascade/pipeline_stable_cascade_prior.py +12 -1
- diffusers/pipelines/stable_diffusion/convert_from_ckpt.py +3 -2
- diffusers/pipelines/stable_diffusion/pipeline_flax_stable_diffusion.py +14 -10
- diffusers/pipelines/stable_diffusion/pipeline_flax_stable_diffusion_img2img.py +3 -3
- diffusers/pipelines/stable_diffusion/pipeline_flax_stable_diffusion_inpaint.py +14 -10
- diffusers/pipelines/stable_diffusion/pipeline_onnx_stable_diffusion.py +2 -2
- diffusers/pipelines/stable_diffusion/pipeline_onnx_stable_diffusion_img2img.py +4 -3
- diffusers/pipelines/stable_diffusion/pipeline_onnx_stable_diffusion_inpaint.py +5 -4
- diffusers/pipelines/stable_diffusion/pipeline_onnx_stable_diffusion_upscale.py +2 -2
- diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion.py +18 -13
- diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_depth2img.py +30 -8
- diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_image_variation.py +24 -10
- diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_img2img.py +28 -12
- diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_inpaint.py +39 -18
- diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_instruct_pix2pix.py +17 -6
- diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_latent_upscale.py +13 -3
- diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_upscale.py +20 -3
- diffusers/pipelines/stable_diffusion/pipeline_stable_unclip.py +14 -2
- diffusers/pipelines/stable_diffusion/pipeline_stable_unclip_img2img.py +13 -1
- diffusers/pipelines/stable_diffusion_3/pipeline_stable_diffusion_3.py +16 -17
- diffusers/pipelines/stable_diffusion_3/pipeline_stable_diffusion_3_img2img.py +136 -18
- diffusers/pipelines/stable_diffusion_3/pipeline_stable_diffusion_3_inpaint.py +150 -21
- diffusers/pipelines/stable_diffusion_attend_and_excite/pipeline_stable_diffusion_attend_and_excite.py +15 -3
- diffusers/pipelines/stable_diffusion_diffedit/pipeline_stable_diffusion_diffedit.py +26 -11
- diffusers/pipelines/stable_diffusion_gligen/pipeline_stable_diffusion_gligen.py +15 -3
- diffusers/pipelines/stable_diffusion_gligen/pipeline_stable_diffusion_gligen_text_image.py +22 -4
- diffusers/pipelines/stable_diffusion_k_diffusion/pipeline_stable_diffusion_k_diffusion.py +30 -13
- diffusers/pipelines/stable_diffusion_k_diffusion/pipeline_stable_diffusion_xl_k_diffusion.py +12 -4
- diffusers/pipelines/stable_diffusion_ldm3d/pipeline_stable_diffusion_ldm3d.py +15 -3
- diffusers/pipelines/stable_diffusion_panorama/pipeline_stable_diffusion_panorama.py +15 -3
- diffusers/pipelines/stable_diffusion_safe/pipeline_stable_diffusion_safe.py +26 -12
- diffusers/pipelines/stable_diffusion_sag/pipeline_stable_diffusion_sag.py +16 -4
- diffusers/pipelines/stable_diffusion_xl/pipeline_flax_stable_diffusion_xl.py +1 -1
- diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl.py +12 -4
- diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_img2img.py +7 -3
- diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_inpaint.py +10 -6
- diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_instruct_pix2pix.py +11 -4
- diffusers/pipelines/stable_video_diffusion/pipeline_stable_video_diffusion.py +13 -2
- diffusers/pipelines/t2i_adapter/pipeline_stable_diffusion_adapter.py +18 -4
- diffusers/pipelines/t2i_adapter/pipeline_stable_diffusion_xl_adapter.py +26 -5
- diffusers/pipelines/text_to_video_synthesis/pipeline_text_to_video_synth.py +13 -1
- diffusers/pipelines/text_to_video_synthesis/pipeline_text_to_video_synth_img2img.py +13 -1
- diffusers/pipelines/text_to_video_synthesis/pipeline_text_to_video_zero.py +28 -6
- diffusers/pipelines/text_to_video_synthesis/pipeline_text_to_video_zero_sdxl.py +26 -4
- diffusers/pipelines/transformers_loading_utils.py +121 -0
- diffusers/pipelines/unclip/pipeline_unclip.py +11 -1
- diffusers/pipelines/unclip/pipeline_unclip_image_variation.py +11 -1
- diffusers/pipelines/unidiffuser/pipeline_unidiffuser.py +19 -2
- diffusers/pipelines/wan/__init__.py +51 -0
- diffusers/pipelines/wan/pipeline_output.py +20 -0
- diffusers/pipelines/wan/pipeline_wan.py +593 -0
- diffusers/pipelines/wan/pipeline_wan_i2v.py +722 -0
- diffusers/pipelines/wan/pipeline_wan_video2video.py +725 -0
- diffusers/pipelines/wuerstchen/modeling_wuerstchen_prior.py +7 -31
- diffusers/pipelines/wuerstchen/pipeline_wuerstchen.py +12 -1
- diffusers/pipelines/wuerstchen/pipeline_wuerstchen_prior.py +12 -1
- diffusers/quantizers/auto.py +5 -1
- diffusers/quantizers/base.py +5 -9
- diffusers/quantizers/bitsandbytes/bnb_quantizer.py +41 -29
- diffusers/quantizers/bitsandbytes/utils.py +30 -20
- diffusers/quantizers/gguf/gguf_quantizer.py +1 -0
- diffusers/quantizers/gguf/utils.py +4 -2
- diffusers/quantizers/quantization_config.py +59 -4
- diffusers/quantizers/quanto/__init__.py +1 -0
- diffusers/quantizers/quanto/quanto_quantizer.py +177 -0
- diffusers/quantizers/quanto/utils.py +60 -0
- diffusers/quantizers/torchao/__init__.py +1 -1
- diffusers/quantizers/torchao/torchao_quantizer.py +47 -2
- diffusers/schedulers/__init__.py +2 -1
- diffusers/schedulers/scheduling_consistency_models.py +1 -2
- diffusers/schedulers/scheduling_ddim_inverse.py +1 -1
- diffusers/schedulers/scheduling_ddpm.py +2 -3
- diffusers/schedulers/scheduling_ddpm_parallel.py +1 -2
- diffusers/schedulers/scheduling_dpmsolver_multistep.py +12 -4
- diffusers/schedulers/scheduling_edm_euler.py +45 -10
- diffusers/schedulers/scheduling_flow_match_euler_discrete.py +116 -28
- diffusers/schedulers/scheduling_flow_match_heun_discrete.py +7 -6
- diffusers/schedulers/scheduling_heun_discrete.py +1 -1
- diffusers/schedulers/scheduling_lcm.py +1 -2
- diffusers/schedulers/scheduling_lms_discrete.py +1 -1
- diffusers/schedulers/scheduling_repaint.py +5 -1
- diffusers/schedulers/scheduling_scm.py +265 -0
- diffusers/schedulers/scheduling_tcd.py +1 -2
- diffusers/schedulers/scheduling_utils.py +2 -1
- diffusers/training_utils.py +14 -7
- diffusers/utils/__init__.py +10 -2
- diffusers/utils/constants.py +13 -1
- diffusers/utils/deprecation_utils.py +1 -1
- diffusers/utils/dummy_bitsandbytes_objects.py +17 -0
- diffusers/utils/dummy_gguf_objects.py +17 -0
- diffusers/utils/dummy_optimum_quanto_objects.py +17 -0
- diffusers/utils/dummy_pt_objects.py +233 -0
- diffusers/utils/dummy_torch_and_transformers_and_opencv_objects.py +17 -0
- diffusers/utils/dummy_torch_and_transformers_objects.py +270 -0
- diffusers/utils/dummy_torchao_objects.py +17 -0
- diffusers/utils/dynamic_modules_utils.py +1 -1
- diffusers/utils/export_utils.py +28 -3
- diffusers/utils/hub_utils.py +52 -102
- diffusers/utils/import_utils.py +121 -221
- diffusers/utils/loading_utils.py +14 -1
- diffusers/utils/logging.py +1 -2
- diffusers/utils/peft_utils.py +6 -14
- diffusers/utils/remote_utils.py +425 -0
- diffusers/utils/source_code_parsing_utils.py +52 -0
- diffusers/utils/state_dict_utils.py +15 -1
- diffusers/utils/testing_utils.py +243 -13
- diffusers/utils/torch_utils.py +10 -0
- diffusers/utils/typing_utils.py +91 -0
- diffusers/video_processor.py +1 -1
- {diffusers-0.32.1.dist-info → diffusers-0.33.0.dist-info}/METADATA +76 -44
- diffusers-0.33.0.dist-info/RECORD +608 -0
- {diffusers-0.32.1.dist-info → diffusers-0.33.0.dist-info}/WHEEL +1 -1
- diffusers-0.32.1.dist-info/RECORD +0 -550
- {diffusers-0.32.1.dist-info → diffusers-0.33.0.dist-info}/LICENSE +0 -0
- {diffusers-0.32.1.dist-info → diffusers-0.33.0.dist-info}/entry_points.txt +0 -0
- {diffusers-0.32.1.dist-info → diffusers-0.33.0.dist-info}/top_level.txt +0 -0
diffusers/utils/import_utils.py
CHANGED
@@ -25,7 +25,6 @@ from types import ModuleType
|
|
25
25
|
from typing import Any, Union
|
26
26
|
|
27
27
|
from huggingface_hub.utils import is_jinja_available # noqa: F401
|
28
|
-
from packaging import version
|
29
28
|
from packaging.version import Version, parse
|
30
29
|
|
31
30
|
from . import logging
|
@@ -52,36 +51,30 @@ DIFFUSERS_SLOW_IMPORT = DIFFUSERS_SLOW_IMPORT in ENV_VARS_TRUE_VALUES
|
|
52
51
|
|
53
52
|
STR_OPERATION_TO_FUNC = {">": op.gt, ">=": op.ge, "==": op.eq, "!=": op.ne, "<=": op.le, "<": op.lt}
|
54
53
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
54
|
+
_is_google_colab = "google.colab" in sys.modules or any(k.startswith("COLAB_") for k in os.environ)
|
55
|
+
|
56
|
+
|
57
|
+
def _is_package_available(pkg_name: str):
|
58
|
+
pkg_exists = importlib.util.find_spec(pkg_name) is not None
|
59
|
+
pkg_version = "N/A"
|
60
|
+
|
61
|
+
if pkg_exists:
|
59
62
|
try:
|
60
|
-
|
61
|
-
logger.
|
62
|
-
except importlib_metadata.PackageNotFoundError:
|
63
|
-
|
63
|
+
pkg_version = importlib_metadata.version(pkg_name)
|
64
|
+
logger.debug(f"Successfully imported {pkg_name} version {pkg_version}")
|
65
|
+
except (ImportError, importlib_metadata.PackageNotFoundError):
|
66
|
+
pkg_exists = False
|
67
|
+
|
68
|
+
return pkg_exists, pkg_version
|
69
|
+
|
70
|
+
|
71
|
+
if USE_TORCH in ENV_VARS_TRUE_AND_AUTO_VALUES and USE_TF not in ENV_VARS_TRUE_VALUES:
|
72
|
+
_torch_available, _torch_version = _is_package_available("torch")
|
73
|
+
|
64
74
|
else:
|
65
75
|
logger.info("Disabling PyTorch because USE_TORCH is set")
|
66
76
|
_torch_available = False
|
67
77
|
|
68
|
-
_torch_xla_available = importlib.util.find_spec("torch_xla") is not None
|
69
|
-
if _torch_xla_available:
|
70
|
-
try:
|
71
|
-
_torch_xla_version = importlib_metadata.version("torch_xla")
|
72
|
-
logger.info(f"PyTorch XLA version {_torch_xla_version} available.")
|
73
|
-
except ImportError:
|
74
|
-
_torch_xla_available = False
|
75
|
-
|
76
|
-
# check whether torch_npu is available
|
77
|
-
_torch_npu_available = importlib.util.find_spec("torch_npu") is not None
|
78
|
-
if _torch_npu_available:
|
79
|
-
try:
|
80
|
-
_torch_npu_version = importlib_metadata.version("torch_npu")
|
81
|
-
logger.info(f"torch_npu version {_torch_npu_version} available.")
|
82
|
-
except ImportError:
|
83
|
-
_torch_npu_available = False
|
84
|
-
|
85
78
|
_jax_version = "N/A"
|
86
79
|
_flax_version = "N/A"
|
87
80
|
if USE_JAX in ENV_VARS_TRUE_AND_AUTO_VALUES:
|
@@ -97,40 +90,12 @@ else:
|
|
97
90
|
_flax_available = False
|
98
91
|
|
99
92
|
if USE_SAFETENSORS in ENV_VARS_TRUE_AND_AUTO_VALUES:
|
100
|
-
_safetensors_available =
|
101
|
-
|
102
|
-
try:
|
103
|
-
_safetensors_version = importlib_metadata.version("safetensors")
|
104
|
-
logger.info(f"Safetensors version {_safetensors_version} available.")
|
105
|
-
except importlib_metadata.PackageNotFoundError:
|
106
|
-
_safetensors_available = False
|
93
|
+
_safetensors_available, _safetensors_version = _is_package_available("safetensors")
|
94
|
+
|
107
95
|
else:
|
108
96
|
logger.info("Disabling Safetensors because USE_TF is set")
|
109
97
|
_safetensors_available = False
|
110
98
|
|
111
|
-
_transformers_available = importlib.util.find_spec("transformers") is not None
|
112
|
-
try:
|
113
|
-
_transformers_version = importlib_metadata.version("transformers")
|
114
|
-
logger.debug(f"Successfully imported transformers version {_transformers_version}")
|
115
|
-
except importlib_metadata.PackageNotFoundError:
|
116
|
-
_transformers_available = False
|
117
|
-
|
118
|
-
|
119
|
-
_inflect_available = importlib.util.find_spec("inflect") is not None
|
120
|
-
try:
|
121
|
-
_inflect_version = importlib_metadata.version("inflect")
|
122
|
-
logger.debug(f"Successfully imported inflect version {_inflect_version}")
|
123
|
-
except importlib_metadata.PackageNotFoundError:
|
124
|
-
_inflect_available = False
|
125
|
-
|
126
|
-
|
127
|
-
_unidecode_available = importlib.util.find_spec("unidecode") is not None
|
128
|
-
try:
|
129
|
-
_unidecode_version = importlib_metadata.version("unidecode")
|
130
|
-
logger.debug(f"Successfully imported unidecode version {_unidecode_version}")
|
131
|
-
except importlib_metadata.PackageNotFoundError:
|
132
|
-
_unidecode_available = False
|
133
|
-
|
134
99
|
_onnxruntime_version = "N/A"
|
135
100
|
_onnx_available = importlib.util.find_spec("onnxruntime") is not None
|
136
101
|
if _onnx_available:
|
@@ -142,7 +107,9 @@ if _onnx_available:
|
|
142
107
|
"onnxruntime-openvino",
|
143
108
|
"ort_nightly_directml",
|
144
109
|
"onnxruntime-rocm",
|
110
|
+
"onnxruntime-migraphx",
|
145
111
|
"onnxruntime-training",
|
112
|
+
"onnxruntime-vitisai",
|
146
113
|
)
|
147
114
|
_onnxruntime_version = None
|
148
115
|
# For the metadata, we have to look for both onnxruntime and onnxruntime-gpu
|
@@ -178,85 +145,6 @@ try:
|
|
178
145
|
except importlib_metadata.PackageNotFoundError:
|
179
146
|
_opencv_available = False
|
180
147
|
|
181
|
-
_scipy_available = importlib.util.find_spec("scipy") is not None
|
182
|
-
try:
|
183
|
-
_scipy_version = importlib_metadata.version("scipy")
|
184
|
-
logger.debug(f"Successfully imported scipy version {_scipy_version}")
|
185
|
-
except importlib_metadata.PackageNotFoundError:
|
186
|
-
_scipy_available = False
|
187
|
-
|
188
|
-
_librosa_available = importlib.util.find_spec("librosa") is not None
|
189
|
-
try:
|
190
|
-
_librosa_version = importlib_metadata.version("librosa")
|
191
|
-
logger.debug(f"Successfully imported librosa version {_librosa_version}")
|
192
|
-
except importlib_metadata.PackageNotFoundError:
|
193
|
-
_librosa_available = False
|
194
|
-
|
195
|
-
_accelerate_available = importlib.util.find_spec("accelerate") is not None
|
196
|
-
try:
|
197
|
-
_accelerate_version = importlib_metadata.version("accelerate")
|
198
|
-
logger.debug(f"Successfully imported accelerate version {_accelerate_version}")
|
199
|
-
except importlib_metadata.PackageNotFoundError:
|
200
|
-
_accelerate_available = False
|
201
|
-
|
202
|
-
_xformers_available = importlib.util.find_spec("xformers") is not None
|
203
|
-
try:
|
204
|
-
_xformers_version = importlib_metadata.version("xformers")
|
205
|
-
if _torch_available:
|
206
|
-
_torch_version = importlib_metadata.version("torch")
|
207
|
-
if version.Version(_torch_version) < version.Version("1.12"):
|
208
|
-
raise ValueError("xformers is installed in your environment and requires PyTorch >= 1.12")
|
209
|
-
|
210
|
-
logger.debug(f"Successfully imported xformers version {_xformers_version}")
|
211
|
-
except importlib_metadata.PackageNotFoundError:
|
212
|
-
_xformers_available = False
|
213
|
-
|
214
|
-
_k_diffusion_available = importlib.util.find_spec("k_diffusion") is not None
|
215
|
-
try:
|
216
|
-
_k_diffusion_version = importlib_metadata.version("k_diffusion")
|
217
|
-
logger.debug(f"Successfully imported k-diffusion version {_k_diffusion_version}")
|
218
|
-
except importlib_metadata.PackageNotFoundError:
|
219
|
-
_k_diffusion_available = False
|
220
|
-
|
221
|
-
_note_seq_available = importlib.util.find_spec("note_seq") is not None
|
222
|
-
try:
|
223
|
-
_note_seq_version = importlib_metadata.version("note_seq")
|
224
|
-
logger.debug(f"Successfully imported note-seq version {_note_seq_version}")
|
225
|
-
except importlib_metadata.PackageNotFoundError:
|
226
|
-
_note_seq_available = False
|
227
|
-
|
228
|
-
_wandb_available = importlib.util.find_spec("wandb") is not None
|
229
|
-
try:
|
230
|
-
_wandb_version = importlib_metadata.version("wandb")
|
231
|
-
logger.debug(f"Successfully imported wandb version {_wandb_version }")
|
232
|
-
except importlib_metadata.PackageNotFoundError:
|
233
|
-
_wandb_available = False
|
234
|
-
|
235
|
-
|
236
|
-
_tensorboard_available = importlib.util.find_spec("tensorboard")
|
237
|
-
try:
|
238
|
-
_tensorboard_version = importlib_metadata.version("tensorboard")
|
239
|
-
logger.debug(f"Successfully imported tensorboard version {_tensorboard_version}")
|
240
|
-
except importlib_metadata.PackageNotFoundError:
|
241
|
-
_tensorboard_available = False
|
242
|
-
|
243
|
-
|
244
|
-
_compel_available = importlib.util.find_spec("compel")
|
245
|
-
try:
|
246
|
-
_compel_version = importlib_metadata.version("compel")
|
247
|
-
logger.debug(f"Successfully imported compel version {_compel_version}")
|
248
|
-
except importlib_metadata.PackageNotFoundError:
|
249
|
-
_compel_available = False
|
250
|
-
|
251
|
-
|
252
|
-
_ftfy_available = importlib.util.find_spec("ftfy") is not None
|
253
|
-
try:
|
254
|
-
_ftfy_version = importlib_metadata.version("ftfy")
|
255
|
-
logger.debug(f"Successfully imported ftfy version {_ftfy_version}")
|
256
|
-
except importlib_metadata.PackageNotFoundError:
|
257
|
-
_ftfy_available = False
|
258
|
-
|
259
|
-
|
260
148
|
_bs4_available = importlib.util.find_spec("bs4") is not None
|
261
149
|
try:
|
262
150
|
# importlib metadata under different name
|
@@ -265,13 +153,6 @@ try:
|
|
265
153
|
except importlib_metadata.PackageNotFoundError:
|
266
154
|
_bs4_available = False
|
267
155
|
|
268
|
-
_torchsde_available = importlib.util.find_spec("torchsde") is not None
|
269
|
-
try:
|
270
|
-
_torchsde_version = importlib_metadata.version("torchsde")
|
271
|
-
logger.debug(f"Successfully imported torchsde version {_torchsde_version}")
|
272
|
-
except importlib_metadata.PackageNotFoundError:
|
273
|
-
_torchsde_available = False
|
274
|
-
|
275
156
|
_invisible_watermark_available = importlib.util.find_spec("imwatermark") is not None
|
276
157
|
try:
|
277
158
|
_invisible_watermark_version = importlib_metadata.version("invisible-watermark")
|
@@ -279,82 +160,42 @@ try:
|
|
279
160
|
except importlib_metadata.PackageNotFoundError:
|
280
161
|
_invisible_watermark_available = False
|
281
162
|
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
if
|
313
|
-
try:
|
314
|
-
_timm_version = importlib_metadata.version("timm")
|
315
|
-
logger.info(f"Timm version {_timm_version} available.")
|
316
|
-
except importlib_metadata.PackageNotFoundError:
|
317
|
-
_timm_available = False
|
318
|
-
|
319
|
-
|
320
|
-
def is_timm_available():
|
321
|
-
return _timm_available
|
322
|
-
|
323
|
-
|
324
|
-
_bitsandbytes_available = importlib.util.find_spec("bitsandbytes") is not None
|
325
|
-
try:
|
326
|
-
_bitsandbytes_version = importlib_metadata.version("bitsandbytes")
|
327
|
-
logger.debug(f"Successfully imported bitsandbytes version {_bitsandbytes_version}")
|
328
|
-
except importlib_metadata.PackageNotFoundError:
|
329
|
-
_bitsandbytes_available = False
|
330
|
-
|
331
|
-
_is_google_colab = "google.colab" in sys.modules or any(k.startswith("COLAB_") for k in os.environ)
|
332
|
-
|
333
|
-
_imageio_available = importlib.util.find_spec("imageio") is not None
|
334
|
-
if _imageio_available:
|
335
|
-
try:
|
336
|
-
_imageio_version = importlib_metadata.version("imageio")
|
337
|
-
logger.debug(f"Successfully imported imageio version {_imageio_version}")
|
338
|
-
|
339
|
-
except importlib_metadata.PackageNotFoundError:
|
340
|
-
_imageio_available = False
|
341
|
-
|
342
|
-
_is_gguf_available = importlib.util.find_spec("gguf") is not None
|
343
|
-
if _is_gguf_available:
|
344
|
-
try:
|
345
|
-
_gguf_version = importlib_metadata.version("gguf")
|
346
|
-
logger.debug(f"Successfully import gguf version {_gguf_version}")
|
347
|
-
except importlib_metadata.PackageNotFoundError:
|
348
|
-
_is_gguf_available = False
|
349
|
-
|
350
|
-
|
351
|
-
_is_torchao_available = importlib.util.find_spec("torchao") is not None
|
352
|
-
if _is_torchao_available:
|
163
|
+
_torch_xla_available, _torch_xla_version = _is_package_available("torch_xla")
|
164
|
+
_torch_npu_available, _torch_npu_version = _is_package_available("torch_npu")
|
165
|
+
_transformers_available, _transformers_version = _is_package_available("transformers")
|
166
|
+
_hf_hub_available, _hf_hub_version = _is_package_available("huggingface_hub")
|
167
|
+
_inflect_available, _inflect_version = _is_package_available("inflect")
|
168
|
+
_unidecode_available, _unidecode_version = _is_package_available("unidecode")
|
169
|
+
_k_diffusion_available, _k_diffusion_version = _is_package_available("k_diffusion")
|
170
|
+
_note_seq_available, _note_seq_version = _is_package_available("note_seq")
|
171
|
+
_wandb_available, _wandb_version = _is_package_available("wandb")
|
172
|
+
_tensorboard_available, _tensorboard_version = _is_package_available("tensorboard")
|
173
|
+
_compel_available, _compel_version = _is_package_available("compel")
|
174
|
+
_sentencepiece_available, _sentencepiece_version = _is_package_available("sentencepiece")
|
175
|
+
_torchsde_available, _torchsde_version = _is_package_available("torchsde")
|
176
|
+
_peft_available, _peft_version = _is_package_available("peft")
|
177
|
+
_torchvision_available, _torchvision_version = _is_package_available("torchvision")
|
178
|
+
_matplotlib_available, _matplotlib_version = _is_package_available("matplotlib")
|
179
|
+
_timm_available, _timm_version = _is_package_available("timm")
|
180
|
+
_bitsandbytes_available, _bitsandbytes_version = _is_package_available("bitsandbytes")
|
181
|
+
_imageio_available, _imageio_version = _is_package_available("imageio")
|
182
|
+
_ftfy_available, _ftfy_version = _is_package_available("ftfy")
|
183
|
+
_scipy_available, _scipy_version = _is_package_available("scipy")
|
184
|
+
_librosa_available, _librosa_version = _is_package_available("librosa")
|
185
|
+
_accelerate_available, _accelerate_version = _is_package_available("accelerate")
|
186
|
+
_xformers_available, _xformers_version = _is_package_available("xformers")
|
187
|
+
_gguf_available, _gguf_version = _is_package_available("gguf")
|
188
|
+
_torchao_available, _torchao_version = _is_package_available("torchao")
|
189
|
+
_bitsandbytes_available, _bitsandbytes_version = _is_package_available("bitsandbytes")
|
190
|
+
_torchao_available, _torchao_version = _is_package_available("torchao")
|
191
|
+
|
192
|
+
_optimum_quanto_available = importlib.util.find_spec("optimum") is not None
|
193
|
+
if _optimum_quanto_available:
|
353
194
|
try:
|
354
|
-
|
355
|
-
logger.debug(f"Successfully import
|
195
|
+
_optimum_quanto_version = importlib_metadata.version("optimum_quanto")
|
196
|
+
logger.debug(f"Successfully import optimum-quanto version {_optimum_quanto_version}")
|
356
197
|
except importlib_metadata.PackageNotFoundError:
|
357
|
-
|
198
|
+
_optimum_quanto_available = False
|
358
199
|
|
359
200
|
|
360
201
|
def is_torch_available():
|
@@ -478,11 +319,19 @@ def is_imageio_available():
|
|
478
319
|
|
479
320
|
|
480
321
|
def is_gguf_available():
|
481
|
-
return
|
322
|
+
return _gguf_available
|
482
323
|
|
483
324
|
|
484
325
|
def is_torchao_available():
|
485
|
-
return
|
326
|
+
return _torchao_available
|
327
|
+
|
328
|
+
|
329
|
+
def is_optimum_quanto_available():
|
330
|
+
return _optimum_quanto_available
|
331
|
+
|
332
|
+
|
333
|
+
def is_timm_available():
|
334
|
+
return _timm_available
|
486
335
|
|
487
336
|
|
488
337
|
# docstyle-ignore
|
@@ -628,6 +477,11 @@ TORCHAO_IMPORT_ERROR = """
|
|
628
477
|
torchao`
|
629
478
|
"""
|
630
479
|
|
480
|
+
QUANTO_IMPORT_ERROR = """
|
481
|
+
{0} requires the optimum-quanto library but it was not found in your environment. You can install it with pip: `pip
|
482
|
+
install optimum-quanto`
|
483
|
+
"""
|
484
|
+
|
631
485
|
BACKENDS_MAPPING = OrderedDict(
|
632
486
|
[
|
633
487
|
("bs4", (is_bs4_available, BS4_IMPORT_ERROR)),
|
@@ -655,6 +509,7 @@ BACKENDS_MAPPING = OrderedDict(
|
|
655
509
|
("imageio", (is_imageio_available, IMAGEIO_IMPORT_ERROR)),
|
656
510
|
("gguf", (is_gguf_available, GGUF_IMPORT_ERROR)),
|
657
511
|
("torchao", (is_torchao_available, TORCHAO_IMPORT_ERROR)),
|
512
|
+
("quanto", (is_optimum_quanto_available, QUANTO_IMPORT_ERROR)),
|
658
513
|
]
|
659
514
|
)
|
660
515
|
|
@@ -767,6 +622,21 @@ def is_transformers_version(operation: str, version: str):
|
|
767
622
|
return compare_versions(parse(_transformers_version), operation, version)
|
768
623
|
|
769
624
|
|
625
|
+
def is_hf_hub_version(operation: str, version: str):
|
626
|
+
"""
|
627
|
+
Compares the current Hugging Face Hub version to a given reference with an operation.
|
628
|
+
|
629
|
+
Args:
|
630
|
+
operation (`str`):
|
631
|
+
A string representation of an operator, such as `">"` or `"<="`
|
632
|
+
version (`str`):
|
633
|
+
A version string
|
634
|
+
"""
|
635
|
+
if not _hf_hub_available:
|
636
|
+
return False
|
637
|
+
return compare_versions(parse(_hf_hub_version), operation, version)
|
638
|
+
|
639
|
+
|
770
640
|
def is_accelerate_version(operation: str, version: str):
|
771
641
|
"""
|
772
642
|
Compares the current Accelerate version to a given reference with an operation.
|
@@ -792,7 +662,7 @@ def is_peft_version(operation: str, version: str):
|
|
792
662
|
version (`str`):
|
793
663
|
A version string
|
794
664
|
"""
|
795
|
-
if not
|
665
|
+
if not _peft_available:
|
796
666
|
return False
|
797
667
|
return compare_versions(parse(_peft_version), operation, version)
|
798
668
|
|
@@ -806,7 +676,7 @@ def is_bitsandbytes_version(operation: str, version: str):
|
|
806
676
|
version (`str`):
|
807
677
|
A version string
|
808
678
|
"""
|
809
|
-
if not
|
679
|
+
if not _bitsandbytes_available:
|
810
680
|
return False
|
811
681
|
return compare_versions(parse(_bitsandbytes_version), operation, version)
|
812
682
|
|
@@ -821,11 +691,26 @@ def is_gguf_version(operation: str, version: str):
|
|
821
691
|
version (`str`):
|
822
692
|
A version string
|
823
693
|
"""
|
824
|
-
if not
|
694
|
+
if not _gguf_available:
|
825
695
|
return False
|
826
696
|
return compare_versions(parse(_gguf_version), operation, version)
|
827
697
|
|
828
698
|
|
699
|
+
def is_torchao_version(operation: str, version: str):
|
700
|
+
"""
|
701
|
+
Compares the current torchao version to a given reference with an operation.
|
702
|
+
|
703
|
+
Args:
|
704
|
+
operation (`str`):
|
705
|
+
A string representation of an operator, such as `">"` or `"<="`
|
706
|
+
version (`str`):
|
707
|
+
A version string
|
708
|
+
"""
|
709
|
+
if not _torchao_available:
|
710
|
+
return False
|
711
|
+
return compare_versions(parse(_torchao_version), operation, version)
|
712
|
+
|
713
|
+
|
829
714
|
def is_k_diffusion_version(operation: str, version: str):
|
830
715
|
"""
|
831
716
|
Compares the current k-diffusion version to a given reference with an operation.
|
@@ -841,6 +726,21 @@ def is_k_diffusion_version(operation: str, version: str):
|
|
841
726
|
return compare_versions(parse(_k_diffusion_version), operation, version)
|
842
727
|
|
843
728
|
|
729
|
+
def is_optimum_quanto_version(operation: str, version: str):
|
730
|
+
"""
|
731
|
+
Compares the current Accelerate version to a given reference with an operation.
|
732
|
+
|
733
|
+
Args:
|
734
|
+
operation (`str`):
|
735
|
+
A string representation of an operator, such as `">"` or `"<="`
|
736
|
+
version (`str`):
|
737
|
+
A version string
|
738
|
+
"""
|
739
|
+
if not _optimum_quanto_available:
|
740
|
+
return False
|
741
|
+
return compare_versions(parse(_optimum_quanto_version), operation, version)
|
742
|
+
|
743
|
+
|
844
744
|
def get_objects_from_module(module):
|
845
745
|
"""
|
846
746
|
Returns a dict of object names and values in a module, while skipping private/internal objects
|
diffusers/utils/loading_utils.py
CHANGED
@@ -7,6 +7,7 @@ import PIL.Image
|
|
7
7
|
import PIL.ImageOps
|
8
8
|
import requests
|
9
9
|
|
10
|
+
from .constants import DIFFUSERS_REQUEST_TIMEOUT
|
10
11
|
from .import_utils import BACKENDS_MAPPING, is_imageio_available
|
11
12
|
|
12
13
|
|
@@ -29,7 +30,7 @@ def load_image(
|
|
29
30
|
"""
|
30
31
|
if isinstance(image, str):
|
31
32
|
if image.startswith("http://") or image.startswith("https://"):
|
32
|
-
image = PIL.Image.open(requests.get(image, stream=True).raw)
|
33
|
+
image = PIL.Image.open(requests.get(image, stream=True, timeout=DIFFUSERS_REQUEST_TIMEOUT).raw)
|
33
34
|
elif os.path.isfile(image):
|
34
35
|
image = PIL.Image.open(image)
|
35
36
|
else:
|
@@ -148,3 +149,15 @@ def get_module_from_name(module, tensor_name: str) -> Tuple[Any, str]:
|
|
148
149
|
module = new_module
|
149
150
|
tensor_name = splits[-1]
|
150
151
|
return module, tensor_name
|
152
|
+
|
153
|
+
|
154
|
+
def get_submodule_by_name(root_module, module_path: str):
|
155
|
+
current = root_module
|
156
|
+
parts = module_path.split(".")
|
157
|
+
for part in parts:
|
158
|
+
if part.isdigit():
|
159
|
+
idx = int(part)
|
160
|
+
current = current[idx] # e.g., for nn.ModuleList or nn.Sequential
|
161
|
+
else:
|
162
|
+
current = getattr(current, part)
|
163
|
+
return current
|
diffusers/utils/logging.py
CHANGED
@@ -60,8 +60,7 @@ def _get_default_logging_level() -> int:
|
|
60
60
|
return log_levels[env_level_str]
|
61
61
|
else:
|
62
62
|
logging.getLogger().warning(
|
63
|
-
f"Unknown option DIFFUSERS_VERBOSITY={env_level_str}, "
|
64
|
-
f"has to be one of: { ', '.join(log_levels.keys()) }"
|
63
|
+
f"Unknown option DIFFUSERS_VERBOSITY={env_level_str}, has to be one of: {', '.join(log_levels.keys())}"
|
65
64
|
)
|
66
65
|
return _default_log_level
|
67
66
|
|
diffusers/utils/peft_utils.py
CHANGED
@@ -257,26 +257,18 @@ def set_weights_and_activate_adapters(model, adapter_names, weights):
|
|
257
257
|
|
258
258
|
return block_weight
|
259
259
|
|
260
|
-
|
261
|
-
for adapter_name, weight in zip(adapter_names, weights):
|
262
|
-
for module_name, module in model.named_modules():
|
263
|
-
if isinstance(module, BaseTunerLayer):
|
264
|
-
# For backward compatbility with previous PEFT versions
|
265
|
-
if hasattr(module, "set_adapter"):
|
266
|
-
module.set_adapter(adapter_name)
|
267
|
-
else:
|
268
|
-
module.active_adapter = adapter_name
|
269
|
-
module.set_scale(adapter_name, get_module_weight(weight, module_name))
|
270
|
-
|
271
|
-
# set multiple active adapters
|
272
|
-
for module in model.modules():
|
260
|
+
for module_name, module in model.named_modules():
|
273
261
|
if isinstance(module, BaseTunerLayer):
|
274
|
-
# For backward
|
262
|
+
# For backward compatibility with previous PEFT versions, set multiple active adapters
|
275
263
|
if hasattr(module, "set_adapter"):
|
276
264
|
module.set_adapter(adapter_names)
|
277
265
|
else:
|
278
266
|
module.active_adapter = adapter_names
|
279
267
|
|
268
|
+
# Set the scaling weight for each adapter for this module
|
269
|
+
for adapter_name, weight in zip(adapter_names, weights):
|
270
|
+
module.set_scale(adapter_name, get_module_weight(weight, module_name))
|
271
|
+
|
280
272
|
|
281
273
|
def check_peft_version(min_version: str) -> None:
|
282
274
|
r"""
|