diffusers 0.27.0__py3-none-any.whl → 0.32.2__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (445) hide show
  1. diffusers/__init__.py +233 -6
  2. diffusers/callbacks.py +209 -0
  3. diffusers/commands/env.py +102 -6
  4. diffusers/configuration_utils.py +45 -16
  5. diffusers/dependency_versions_table.py +4 -3
  6. diffusers/image_processor.py +434 -110
  7. diffusers/loaders/__init__.py +42 -9
  8. diffusers/loaders/ip_adapter.py +626 -36
  9. diffusers/loaders/lora_base.py +900 -0
  10. diffusers/loaders/lora_conversion_utils.py +991 -125
  11. diffusers/loaders/lora_pipeline.py +3812 -0
  12. diffusers/loaders/peft.py +571 -7
  13. diffusers/loaders/single_file.py +405 -173
  14. diffusers/loaders/single_file_model.py +385 -0
  15. diffusers/loaders/single_file_utils.py +1783 -713
  16. diffusers/loaders/textual_inversion.py +41 -23
  17. diffusers/loaders/transformer_flux.py +181 -0
  18. diffusers/loaders/transformer_sd3.py +89 -0
  19. diffusers/loaders/unet.py +464 -540
  20. diffusers/loaders/unet_loader_utils.py +163 -0
  21. diffusers/models/__init__.py +76 -7
  22. diffusers/models/activations.py +65 -10
  23. diffusers/models/adapter.py +53 -53
  24. diffusers/models/attention.py +605 -18
  25. diffusers/models/attention_flax.py +1 -1
  26. diffusers/models/attention_processor.py +4304 -687
  27. diffusers/models/autoencoders/__init__.py +8 -0
  28. diffusers/models/autoencoders/autoencoder_asym_kl.py +15 -17
  29. diffusers/models/autoencoders/autoencoder_dc.py +620 -0
  30. diffusers/models/autoencoders/autoencoder_kl.py +110 -28
  31. diffusers/models/autoencoders/autoencoder_kl_allegro.py +1149 -0
  32. diffusers/models/autoencoders/autoencoder_kl_cogvideox.py +1482 -0
  33. diffusers/models/autoencoders/autoencoder_kl_hunyuan_video.py +1176 -0
  34. diffusers/models/autoencoders/autoencoder_kl_ltx.py +1338 -0
  35. diffusers/models/autoencoders/autoencoder_kl_mochi.py +1166 -0
  36. diffusers/models/autoencoders/autoencoder_kl_temporal_decoder.py +19 -24
  37. diffusers/models/autoencoders/autoencoder_oobleck.py +464 -0
  38. diffusers/models/autoencoders/autoencoder_tiny.py +21 -18
  39. diffusers/models/autoencoders/consistency_decoder_vae.py +45 -20
  40. diffusers/models/autoencoders/vae.py +41 -29
  41. diffusers/models/autoencoders/vq_model.py +182 -0
  42. diffusers/models/controlnet.py +47 -800
  43. diffusers/models/controlnet_flux.py +70 -0
  44. diffusers/models/controlnet_sd3.py +68 -0
  45. diffusers/models/controlnet_sparsectrl.py +116 -0
  46. diffusers/models/controlnets/__init__.py +23 -0
  47. diffusers/models/controlnets/controlnet.py +872 -0
  48. diffusers/models/{controlnet_flax.py → controlnets/controlnet_flax.py} +9 -9
  49. diffusers/models/controlnets/controlnet_flux.py +536 -0
  50. diffusers/models/controlnets/controlnet_hunyuan.py +401 -0
  51. diffusers/models/controlnets/controlnet_sd3.py +489 -0
  52. diffusers/models/controlnets/controlnet_sparsectrl.py +788 -0
  53. diffusers/models/controlnets/controlnet_union.py +832 -0
  54. diffusers/models/controlnets/controlnet_xs.py +1946 -0
  55. diffusers/models/controlnets/multicontrolnet.py +183 -0
  56. diffusers/models/downsampling.py +85 -18
  57. diffusers/models/embeddings.py +1856 -158
  58. diffusers/models/embeddings_flax.py +23 -9
  59. diffusers/models/model_loading_utils.py +480 -0
  60. diffusers/models/modeling_flax_pytorch_utils.py +2 -1
  61. diffusers/models/modeling_flax_utils.py +2 -7
  62. diffusers/models/modeling_outputs.py +14 -0
  63. diffusers/models/modeling_pytorch_flax_utils.py +1 -1
  64. diffusers/models/modeling_utils.py +611 -146
  65. diffusers/models/normalization.py +361 -20
  66. diffusers/models/resnet.py +18 -23
  67. diffusers/models/transformers/__init__.py +16 -0
  68. diffusers/models/transformers/auraflow_transformer_2d.py +544 -0
  69. diffusers/models/transformers/cogvideox_transformer_3d.py +542 -0
  70. diffusers/models/transformers/dit_transformer_2d.py +240 -0
  71. diffusers/models/transformers/dual_transformer_2d.py +9 -8
  72. diffusers/models/transformers/hunyuan_transformer_2d.py +578 -0
  73. diffusers/models/transformers/latte_transformer_3d.py +327 -0
  74. diffusers/models/transformers/lumina_nextdit2d.py +340 -0
  75. diffusers/models/transformers/pixart_transformer_2d.py +445 -0
  76. diffusers/models/transformers/prior_transformer.py +13 -13
  77. diffusers/models/transformers/sana_transformer.py +488 -0
  78. diffusers/models/transformers/stable_audio_transformer.py +458 -0
  79. diffusers/models/transformers/t5_film_transformer.py +17 -19
  80. diffusers/models/transformers/transformer_2d.py +297 -187
  81. diffusers/models/transformers/transformer_allegro.py +422 -0
  82. diffusers/models/transformers/transformer_cogview3plus.py +386 -0
  83. diffusers/models/transformers/transformer_flux.py +593 -0
  84. diffusers/models/transformers/transformer_hunyuan_video.py +791 -0
  85. diffusers/models/transformers/transformer_ltx.py +469 -0
  86. diffusers/models/transformers/transformer_mochi.py +499 -0
  87. diffusers/models/transformers/transformer_sd3.py +461 -0
  88. diffusers/models/transformers/transformer_temporal.py +21 -19
  89. diffusers/models/unets/unet_1d.py +8 -8
  90. diffusers/models/unets/unet_1d_blocks.py +31 -31
  91. diffusers/models/unets/unet_2d.py +17 -10
  92. diffusers/models/unets/unet_2d_blocks.py +225 -149
  93. diffusers/models/unets/unet_2d_condition.py +50 -53
  94. diffusers/models/unets/unet_2d_condition_flax.py +6 -5
  95. diffusers/models/unets/unet_3d_blocks.py +192 -1057
  96. diffusers/models/unets/unet_3d_condition.py +22 -27
  97. diffusers/models/unets/unet_i2vgen_xl.py +22 -18
  98. diffusers/models/unets/unet_kandinsky3.py +2 -2
  99. diffusers/models/unets/unet_motion_model.py +1413 -89
  100. diffusers/models/unets/unet_spatio_temporal_condition.py +40 -16
  101. diffusers/models/unets/unet_stable_cascade.py +19 -18
  102. diffusers/models/unets/uvit_2d.py +2 -2
  103. diffusers/models/upsampling.py +95 -26
  104. diffusers/models/vq_model.py +12 -164
  105. diffusers/optimization.py +1 -1
  106. diffusers/pipelines/__init__.py +202 -3
  107. diffusers/pipelines/allegro/__init__.py +48 -0
  108. diffusers/pipelines/allegro/pipeline_allegro.py +938 -0
  109. diffusers/pipelines/allegro/pipeline_output.py +23 -0
  110. diffusers/pipelines/amused/pipeline_amused.py +12 -12
  111. diffusers/pipelines/amused/pipeline_amused_img2img.py +14 -12
  112. diffusers/pipelines/amused/pipeline_amused_inpaint.py +13 -11
  113. diffusers/pipelines/animatediff/__init__.py +8 -0
  114. diffusers/pipelines/animatediff/pipeline_animatediff.py +122 -109
  115. diffusers/pipelines/animatediff/pipeline_animatediff_controlnet.py +1106 -0
  116. diffusers/pipelines/animatediff/pipeline_animatediff_sdxl.py +1288 -0
  117. diffusers/pipelines/animatediff/pipeline_animatediff_sparsectrl.py +1010 -0
  118. diffusers/pipelines/animatediff/pipeline_animatediff_video2video.py +236 -180
  119. diffusers/pipelines/animatediff/pipeline_animatediff_video2video_controlnet.py +1341 -0
  120. diffusers/pipelines/animatediff/pipeline_output.py +3 -2
  121. diffusers/pipelines/audioldm/pipeline_audioldm.py +14 -14
  122. diffusers/pipelines/audioldm2/modeling_audioldm2.py +58 -39
  123. diffusers/pipelines/audioldm2/pipeline_audioldm2.py +121 -36
  124. diffusers/pipelines/aura_flow/__init__.py +48 -0
  125. diffusers/pipelines/aura_flow/pipeline_aura_flow.py +584 -0
  126. diffusers/pipelines/auto_pipeline.py +196 -28
  127. diffusers/pipelines/blip_diffusion/blip_image_processing.py +1 -1
  128. diffusers/pipelines/blip_diffusion/modeling_blip2.py +6 -6
  129. diffusers/pipelines/blip_diffusion/modeling_ctx_clip.py +1 -1
  130. diffusers/pipelines/blip_diffusion/pipeline_blip_diffusion.py +2 -2
  131. diffusers/pipelines/cogvideo/__init__.py +54 -0
  132. diffusers/pipelines/cogvideo/pipeline_cogvideox.py +772 -0
  133. diffusers/pipelines/cogvideo/pipeline_cogvideox_fun_control.py +825 -0
  134. diffusers/pipelines/cogvideo/pipeline_cogvideox_image2video.py +885 -0
  135. diffusers/pipelines/cogvideo/pipeline_cogvideox_video2video.py +851 -0
  136. diffusers/pipelines/cogvideo/pipeline_output.py +20 -0
  137. diffusers/pipelines/cogview3/__init__.py +47 -0
  138. diffusers/pipelines/cogview3/pipeline_cogview3plus.py +674 -0
  139. diffusers/pipelines/cogview3/pipeline_output.py +21 -0
  140. diffusers/pipelines/consistency_models/pipeline_consistency_models.py +6 -6
  141. diffusers/pipelines/controlnet/__init__.py +86 -80
  142. diffusers/pipelines/controlnet/multicontrolnet.py +7 -182
  143. diffusers/pipelines/controlnet/pipeline_controlnet.py +134 -87
  144. diffusers/pipelines/controlnet/pipeline_controlnet_blip_diffusion.py +2 -2
  145. diffusers/pipelines/controlnet/pipeline_controlnet_img2img.py +93 -77
  146. diffusers/pipelines/controlnet/pipeline_controlnet_inpaint.py +88 -197
  147. diffusers/pipelines/controlnet/pipeline_controlnet_inpaint_sd_xl.py +136 -90
  148. diffusers/pipelines/controlnet/pipeline_controlnet_sd_xl.py +176 -80
  149. diffusers/pipelines/controlnet/pipeline_controlnet_sd_xl_img2img.py +125 -89
  150. diffusers/pipelines/controlnet/pipeline_controlnet_union_inpaint_sd_xl.py +1790 -0
  151. diffusers/pipelines/controlnet/pipeline_controlnet_union_sd_xl.py +1501 -0
  152. diffusers/pipelines/controlnet/pipeline_controlnet_union_sd_xl_img2img.py +1627 -0
  153. diffusers/pipelines/controlnet/pipeline_flax_controlnet.py +2 -2
  154. diffusers/pipelines/controlnet_hunyuandit/__init__.py +48 -0
  155. diffusers/pipelines/controlnet_hunyuandit/pipeline_hunyuandit_controlnet.py +1060 -0
  156. diffusers/pipelines/controlnet_sd3/__init__.py +57 -0
  157. diffusers/pipelines/controlnet_sd3/pipeline_stable_diffusion_3_controlnet.py +1133 -0
  158. diffusers/pipelines/controlnet_sd3/pipeline_stable_diffusion_3_controlnet_inpainting.py +1153 -0
  159. diffusers/pipelines/controlnet_xs/__init__.py +68 -0
  160. diffusers/pipelines/controlnet_xs/pipeline_controlnet_xs.py +916 -0
  161. diffusers/pipelines/controlnet_xs/pipeline_controlnet_xs_sd_xl.py +1111 -0
  162. diffusers/pipelines/ddpm/pipeline_ddpm.py +2 -2
  163. diffusers/pipelines/deepfloyd_if/pipeline_if.py +16 -30
  164. diffusers/pipelines/deepfloyd_if/pipeline_if_img2img.py +20 -35
  165. diffusers/pipelines/deepfloyd_if/pipeline_if_img2img_superresolution.py +23 -41
  166. diffusers/pipelines/deepfloyd_if/pipeline_if_inpainting.py +22 -38
  167. diffusers/pipelines/deepfloyd_if/pipeline_if_inpainting_superresolution.py +25 -41
  168. diffusers/pipelines/deepfloyd_if/pipeline_if_superresolution.py +19 -34
  169. diffusers/pipelines/deepfloyd_if/pipeline_output.py +6 -5
  170. diffusers/pipelines/deepfloyd_if/watermark.py +1 -1
  171. diffusers/pipelines/deprecated/alt_diffusion/modeling_roberta_series.py +11 -11
  172. diffusers/pipelines/deprecated/alt_diffusion/pipeline_alt_diffusion.py +70 -30
  173. diffusers/pipelines/deprecated/alt_diffusion/pipeline_alt_diffusion_img2img.py +48 -25
  174. diffusers/pipelines/deprecated/repaint/pipeline_repaint.py +2 -2
  175. diffusers/pipelines/deprecated/spectrogram_diffusion/pipeline_spectrogram_diffusion.py +7 -7
  176. diffusers/pipelines/deprecated/stable_diffusion_variants/pipeline_cycle_diffusion.py +21 -20
  177. diffusers/pipelines/deprecated/stable_diffusion_variants/pipeline_stable_diffusion_inpaint_legacy.py +27 -29
  178. diffusers/pipelines/deprecated/stable_diffusion_variants/pipeline_stable_diffusion_model_editing.py +33 -27
  179. diffusers/pipelines/deprecated/stable_diffusion_variants/pipeline_stable_diffusion_paradigms.py +33 -23
  180. diffusers/pipelines/deprecated/stable_diffusion_variants/pipeline_stable_diffusion_pix2pix_zero.py +36 -30
  181. diffusers/pipelines/deprecated/versatile_diffusion/modeling_text_unet.py +102 -69
  182. diffusers/pipelines/deprecated/versatile_diffusion/pipeline_versatile_diffusion.py +13 -13
  183. diffusers/pipelines/deprecated/versatile_diffusion/pipeline_versatile_diffusion_dual_guided.py +10 -5
  184. diffusers/pipelines/deprecated/versatile_diffusion/pipeline_versatile_diffusion_image_variation.py +11 -6
  185. diffusers/pipelines/deprecated/versatile_diffusion/pipeline_versatile_diffusion_text_to_image.py +10 -5
  186. diffusers/pipelines/deprecated/vq_diffusion/pipeline_vq_diffusion.py +5 -5
  187. diffusers/pipelines/dit/pipeline_dit.py +7 -4
  188. diffusers/pipelines/flux/__init__.py +69 -0
  189. diffusers/pipelines/flux/modeling_flux.py +47 -0
  190. diffusers/pipelines/flux/pipeline_flux.py +957 -0
  191. diffusers/pipelines/flux/pipeline_flux_control.py +889 -0
  192. diffusers/pipelines/flux/pipeline_flux_control_img2img.py +945 -0
  193. diffusers/pipelines/flux/pipeline_flux_control_inpaint.py +1141 -0
  194. diffusers/pipelines/flux/pipeline_flux_controlnet.py +1006 -0
  195. diffusers/pipelines/flux/pipeline_flux_controlnet_image_to_image.py +998 -0
  196. diffusers/pipelines/flux/pipeline_flux_controlnet_inpainting.py +1204 -0
  197. diffusers/pipelines/flux/pipeline_flux_fill.py +969 -0
  198. diffusers/pipelines/flux/pipeline_flux_img2img.py +856 -0
  199. diffusers/pipelines/flux/pipeline_flux_inpaint.py +1022 -0
  200. diffusers/pipelines/flux/pipeline_flux_prior_redux.py +492 -0
  201. diffusers/pipelines/flux/pipeline_output.py +37 -0
  202. diffusers/pipelines/free_init_utils.py +41 -38
  203. diffusers/pipelines/free_noise_utils.py +596 -0
  204. diffusers/pipelines/hunyuan_video/__init__.py +48 -0
  205. diffusers/pipelines/hunyuan_video/pipeline_hunyuan_video.py +687 -0
  206. diffusers/pipelines/hunyuan_video/pipeline_output.py +20 -0
  207. diffusers/pipelines/hunyuandit/__init__.py +48 -0
  208. diffusers/pipelines/hunyuandit/pipeline_hunyuandit.py +916 -0
  209. diffusers/pipelines/i2vgen_xl/pipeline_i2vgen_xl.py +33 -48
  210. diffusers/pipelines/kandinsky/pipeline_kandinsky.py +8 -8
  211. diffusers/pipelines/kandinsky/pipeline_kandinsky_combined.py +32 -29
  212. diffusers/pipelines/kandinsky/pipeline_kandinsky_img2img.py +11 -11
  213. diffusers/pipelines/kandinsky/pipeline_kandinsky_inpaint.py +12 -12
  214. diffusers/pipelines/kandinsky/pipeline_kandinsky_prior.py +10 -10
  215. diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2.py +6 -6
  216. diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_combined.py +34 -31
  217. diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_controlnet.py +10 -10
  218. diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_controlnet_img2img.py +10 -10
  219. diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_img2img.py +6 -6
  220. diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_inpainting.py +8 -8
  221. diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_prior.py +7 -7
  222. diffusers/pipelines/kandinsky2_2/pipeline_kandinsky2_2_prior_emb2emb.py +6 -6
  223. diffusers/pipelines/kandinsky3/convert_kandinsky3_unet.py +3 -3
  224. diffusers/pipelines/kandinsky3/pipeline_kandinsky3.py +22 -35
  225. diffusers/pipelines/kandinsky3/pipeline_kandinsky3_img2img.py +26 -37
  226. diffusers/pipelines/kolors/__init__.py +54 -0
  227. diffusers/pipelines/kolors/pipeline_kolors.py +1070 -0
  228. diffusers/pipelines/kolors/pipeline_kolors_img2img.py +1250 -0
  229. diffusers/pipelines/kolors/pipeline_output.py +21 -0
  230. diffusers/pipelines/kolors/text_encoder.py +889 -0
  231. diffusers/pipelines/kolors/tokenizer.py +338 -0
  232. diffusers/pipelines/latent_consistency_models/pipeline_latent_consistency_img2img.py +82 -62
  233. diffusers/pipelines/latent_consistency_models/pipeline_latent_consistency_text2img.py +77 -60
  234. diffusers/pipelines/latent_diffusion/pipeline_latent_diffusion.py +12 -12
  235. diffusers/pipelines/latte/__init__.py +48 -0
  236. diffusers/pipelines/latte/pipeline_latte.py +881 -0
  237. diffusers/pipelines/ledits_pp/pipeline_leditspp_stable_diffusion.py +80 -74
  238. diffusers/pipelines/ledits_pp/pipeline_leditspp_stable_diffusion_xl.py +85 -76
  239. diffusers/pipelines/ledits_pp/pipeline_output.py +2 -2
  240. diffusers/pipelines/ltx/__init__.py +50 -0
  241. diffusers/pipelines/ltx/pipeline_ltx.py +789 -0
  242. diffusers/pipelines/ltx/pipeline_ltx_image2video.py +885 -0
  243. diffusers/pipelines/ltx/pipeline_output.py +20 -0
  244. diffusers/pipelines/lumina/__init__.py +48 -0
  245. diffusers/pipelines/lumina/pipeline_lumina.py +890 -0
  246. diffusers/pipelines/marigold/__init__.py +50 -0
  247. diffusers/pipelines/marigold/marigold_image_processing.py +576 -0
  248. diffusers/pipelines/marigold/pipeline_marigold_depth.py +813 -0
  249. diffusers/pipelines/marigold/pipeline_marigold_normals.py +690 -0
  250. diffusers/pipelines/mochi/__init__.py +48 -0
  251. diffusers/pipelines/mochi/pipeline_mochi.py +748 -0
  252. diffusers/pipelines/mochi/pipeline_output.py +20 -0
  253. diffusers/pipelines/musicldm/pipeline_musicldm.py +14 -14
  254. diffusers/pipelines/pag/__init__.py +80 -0
  255. diffusers/pipelines/pag/pag_utils.py +243 -0
  256. diffusers/pipelines/pag/pipeline_pag_controlnet_sd.py +1328 -0
  257. diffusers/pipelines/pag/pipeline_pag_controlnet_sd_inpaint.py +1543 -0
  258. diffusers/pipelines/pag/pipeline_pag_controlnet_sd_xl.py +1610 -0
  259. diffusers/pipelines/pag/pipeline_pag_controlnet_sd_xl_img2img.py +1683 -0
  260. diffusers/pipelines/pag/pipeline_pag_hunyuandit.py +969 -0
  261. diffusers/pipelines/pag/pipeline_pag_kolors.py +1136 -0
  262. diffusers/pipelines/pag/pipeline_pag_pixart_sigma.py +865 -0
  263. diffusers/pipelines/pag/pipeline_pag_sana.py +886 -0
  264. diffusers/pipelines/pag/pipeline_pag_sd.py +1062 -0
  265. diffusers/pipelines/pag/pipeline_pag_sd_3.py +994 -0
  266. diffusers/pipelines/pag/pipeline_pag_sd_3_img2img.py +1058 -0
  267. diffusers/pipelines/pag/pipeline_pag_sd_animatediff.py +866 -0
  268. diffusers/pipelines/pag/pipeline_pag_sd_img2img.py +1094 -0
  269. diffusers/pipelines/pag/pipeline_pag_sd_inpaint.py +1356 -0
  270. diffusers/pipelines/pag/pipeline_pag_sd_xl.py +1345 -0
  271. diffusers/pipelines/pag/pipeline_pag_sd_xl_img2img.py +1544 -0
  272. diffusers/pipelines/pag/pipeline_pag_sd_xl_inpaint.py +1776 -0
  273. diffusers/pipelines/paint_by_example/pipeline_paint_by_example.py +17 -12
  274. diffusers/pipelines/pia/pipeline_pia.py +74 -164
  275. diffusers/pipelines/pipeline_flax_utils.py +5 -10
  276. diffusers/pipelines/pipeline_loading_utils.py +515 -53
  277. diffusers/pipelines/pipeline_utils.py +411 -222
  278. diffusers/pipelines/pixart_alpha/__init__.py +8 -1
  279. diffusers/pipelines/pixart_alpha/pipeline_pixart_alpha.py +76 -93
  280. diffusers/pipelines/pixart_alpha/pipeline_pixart_sigma.py +873 -0
  281. diffusers/pipelines/sana/__init__.py +47 -0
  282. diffusers/pipelines/sana/pipeline_output.py +21 -0
  283. diffusers/pipelines/sana/pipeline_sana.py +884 -0
  284. diffusers/pipelines/semantic_stable_diffusion/pipeline_semantic_stable_diffusion.py +27 -23
  285. diffusers/pipelines/shap_e/pipeline_shap_e.py +3 -3
  286. diffusers/pipelines/shap_e/pipeline_shap_e_img2img.py +14 -14
  287. diffusers/pipelines/shap_e/renderer.py +1 -1
  288. diffusers/pipelines/stable_audio/__init__.py +50 -0
  289. diffusers/pipelines/stable_audio/modeling_stable_audio.py +158 -0
  290. diffusers/pipelines/stable_audio/pipeline_stable_audio.py +756 -0
  291. diffusers/pipelines/stable_cascade/pipeline_stable_cascade.py +71 -25
  292. diffusers/pipelines/stable_cascade/pipeline_stable_cascade_combined.py +23 -19
  293. diffusers/pipelines/stable_cascade/pipeline_stable_cascade_prior.py +35 -34
  294. diffusers/pipelines/stable_diffusion/__init__.py +0 -1
  295. diffusers/pipelines/stable_diffusion/convert_from_ckpt.py +20 -11
  296. diffusers/pipelines/stable_diffusion/pipeline_flax_stable_diffusion.py +1 -1
  297. diffusers/pipelines/stable_diffusion/pipeline_onnx_stable_diffusion.py +2 -2
  298. diffusers/pipelines/stable_diffusion/pipeline_onnx_stable_diffusion_upscale.py +6 -6
  299. diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion.py +145 -79
  300. diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_depth2img.py +43 -28
  301. diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_image_variation.py +13 -8
  302. diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_img2img.py +100 -68
  303. diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_inpaint.py +109 -201
  304. diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_instruct_pix2pix.py +131 -32
  305. diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_latent_upscale.py +247 -87
  306. diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_upscale.py +30 -29
  307. diffusers/pipelines/stable_diffusion/pipeline_stable_unclip.py +35 -27
  308. diffusers/pipelines/stable_diffusion/pipeline_stable_unclip_img2img.py +49 -42
  309. diffusers/pipelines/stable_diffusion/safety_checker.py +2 -1
  310. diffusers/pipelines/stable_diffusion_3/__init__.py +54 -0
  311. diffusers/pipelines/stable_diffusion_3/pipeline_output.py +21 -0
  312. diffusers/pipelines/stable_diffusion_3/pipeline_stable_diffusion_3.py +1140 -0
  313. diffusers/pipelines/stable_diffusion_3/pipeline_stable_diffusion_3_img2img.py +1036 -0
  314. diffusers/pipelines/stable_diffusion_3/pipeline_stable_diffusion_3_inpaint.py +1250 -0
  315. diffusers/pipelines/stable_diffusion_attend_and_excite/pipeline_stable_diffusion_attend_and_excite.py +29 -20
  316. diffusers/pipelines/stable_diffusion_diffedit/pipeline_stable_diffusion_diffedit.py +59 -58
  317. diffusers/pipelines/stable_diffusion_gligen/pipeline_stable_diffusion_gligen.py +31 -25
  318. diffusers/pipelines/stable_diffusion_gligen/pipeline_stable_diffusion_gligen_text_image.py +38 -22
  319. diffusers/pipelines/stable_diffusion_k_diffusion/pipeline_stable_diffusion_k_diffusion.py +30 -24
  320. diffusers/pipelines/stable_diffusion_k_diffusion/pipeline_stable_diffusion_xl_k_diffusion.py +24 -23
  321. diffusers/pipelines/stable_diffusion_ldm3d/pipeline_stable_diffusion_ldm3d.py +107 -67
  322. diffusers/pipelines/stable_diffusion_panorama/pipeline_stable_diffusion_panorama.py +316 -69
  323. diffusers/pipelines/stable_diffusion_safe/pipeline_stable_diffusion_safe.py +10 -5
  324. diffusers/pipelines/stable_diffusion_safe/safety_checker.py +1 -1
  325. diffusers/pipelines/stable_diffusion_sag/pipeline_stable_diffusion_sag.py +98 -30
  326. diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl.py +121 -83
  327. diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_img2img.py +161 -105
  328. diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_inpaint.py +142 -218
  329. diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_instruct_pix2pix.py +45 -29
  330. diffusers/pipelines/stable_diffusion_xl/watermark.py +9 -3
  331. diffusers/pipelines/stable_video_diffusion/pipeline_stable_video_diffusion.py +110 -57
  332. diffusers/pipelines/t2i_adapter/pipeline_stable_diffusion_adapter.py +69 -39
  333. diffusers/pipelines/t2i_adapter/pipeline_stable_diffusion_xl_adapter.py +105 -74
  334. diffusers/pipelines/text_to_video_synthesis/pipeline_output.py +3 -2
  335. diffusers/pipelines/text_to_video_synthesis/pipeline_text_to_video_synth.py +29 -49
  336. diffusers/pipelines/text_to_video_synthesis/pipeline_text_to_video_synth_img2img.py +32 -93
  337. diffusers/pipelines/text_to_video_synthesis/pipeline_text_to_video_zero.py +37 -25
  338. diffusers/pipelines/text_to_video_synthesis/pipeline_text_to_video_zero_sdxl.py +54 -40
  339. diffusers/pipelines/unclip/pipeline_unclip.py +6 -6
  340. diffusers/pipelines/unclip/pipeline_unclip_image_variation.py +6 -6
  341. diffusers/pipelines/unidiffuser/modeling_text_decoder.py +1 -1
  342. diffusers/pipelines/unidiffuser/modeling_uvit.py +12 -12
  343. diffusers/pipelines/unidiffuser/pipeline_unidiffuser.py +29 -28
  344. diffusers/pipelines/wuerstchen/modeling_paella_vq_model.py +5 -5
  345. diffusers/pipelines/wuerstchen/modeling_wuerstchen_common.py +5 -10
  346. diffusers/pipelines/wuerstchen/modeling_wuerstchen_prior.py +6 -8
  347. diffusers/pipelines/wuerstchen/pipeline_wuerstchen.py +4 -4
  348. diffusers/pipelines/wuerstchen/pipeline_wuerstchen_combined.py +12 -12
  349. diffusers/pipelines/wuerstchen/pipeline_wuerstchen_prior.py +15 -14
  350. diffusers/{models/dual_transformer_2d.py → quantizers/__init__.py} +2 -6
  351. diffusers/quantizers/auto.py +139 -0
  352. diffusers/quantizers/base.py +233 -0
  353. diffusers/quantizers/bitsandbytes/__init__.py +2 -0
  354. diffusers/quantizers/bitsandbytes/bnb_quantizer.py +561 -0
  355. diffusers/quantizers/bitsandbytes/utils.py +306 -0
  356. diffusers/quantizers/gguf/__init__.py +1 -0
  357. diffusers/quantizers/gguf/gguf_quantizer.py +159 -0
  358. diffusers/quantizers/gguf/utils.py +456 -0
  359. diffusers/quantizers/quantization_config.py +669 -0
  360. diffusers/quantizers/torchao/__init__.py +15 -0
  361. diffusers/quantizers/torchao/torchao_quantizer.py +292 -0
  362. diffusers/schedulers/__init__.py +12 -2
  363. diffusers/schedulers/deprecated/__init__.py +1 -1
  364. diffusers/schedulers/deprecated/scheduling_karras_ve.py +25 -25
  365. diffusers/schedulers/scheduling_amused.py +5 -5
  366. diffusers/schedulers/scheduling_consistency_decoder.py +11 -11
  367. diffusers/schedulers/scheduling_consistency_models.py +23 -25
  368. diffusers/schedulers/scheduling_cosine_dpmsolver_multistep.py +572 -0
  369. diffusers/schedulers/scheduling_ddim.py +27 -26
  370. diffusers/schedulers/scheduling_ddim_cogvideox.py +452 -0
  371. diffusers/schedulers/scheduling_ddim_flax.py +2 -1
  372. diffusers/schedulers/scheduling_ddim_inverse.py +16 -16
  373. diffusers/schedulers/scheduling_ddim_parallel.py +32 -31
  374. diffusers/schedulers/scheduling_ddpm.py +27 -30
  375. diffusers/schedulers/scheduling_ddpm_flax.py +7 -3
  376. diffusers/schedulers/scheduling_ddpm_parallel.py +33 -36
  377. diffusers/schedulers/scheduling_ddpm_wuerstchen.py +14 -14
  378. diffusers/schedulers/scheduling_deis_multistep.py +150 -50
  379. diffusers/schedulers/scheduling_dpm_cogvideox.py +489 -0
  380. diffusers/schedulers/scheduling_dpmsolver_multistep.py +221 -84
  381. diffusers/schedulers/scheduling_dpmsolver_multistep_flax.py +2 -2
  382. diffusers/schedulers/scheduling_dpmsolver_multistep_inverse.py +158 -52
  383. diffusers/schedulers/scheduling_dpmsolver_sde.py +153 -34
  384. diffusers/schedulers/scheduling_dpmsolver_singlestep.py +275 -86
  385. diffusers/schedulers/scheduling_edm_dpmsolver_multistep.py +81 -57
  386. diffusers/schedulers/scheduling_edm_euler.py +62 -39
  387. diffusers/schedulers/scheduling_euler_ancestral_discrete.py +30 -29
  388. diffusers/schedulers/scheduling_euler_discrete.py +255 -74
  389. diffusers/schedulers/scheduling_flow_match_euler_discrete.py +458 -0
  390. diffusers/schedulers/scheduling_flow_match_heun_discrete.py +320 -0
  391. diffusers/schedulers/scheduling_heun_discrete.py +174 -46
  392. diffusers/schedulers/scheduling_ipndm.py +9 -9
  393. diffusers/schedulers/scheduling_k_dpm_2_ancestral_discrete.py +138 -29
  394. diffusers/schedulers/scheduling_k_dpm_2_discrete.py +132 -26
  395. diffusers/schedulers/scheduling_karras_ve_flax.py +6 -6
  396. diffusers/schedulers/scheduling_lcm.py +23 -29
  397. diffusers/schedulers/scheduling_lms_discrete.py +105 -28
  398. diffusers/schedulers/scheduling_pndm.py +20 -20
  399. diffusers/schedulers/scheduling_repaint.py +21 -21
  400. diffusers/schedulers/scheduling_sasolver.py +157 -60
  401. diffusers/schedulers/scheduling_sde_ve.py +19 -19
  402. diffusers/schedulers/scheduling_tcd.py +41 -36
  403. diffusers/schedulers/scheduling_unclip.py +19 -16
  404. diffusers/schedulers/scheduling_unipc_multistep.py +243 -47
  405. diffusers/schedulers/scheduling_utils.py +12 -5
  406. diffusers/schedulers/scheduling_utils_flax.py +1 -3
  407. diffusers/schedulers/scheduling_vq_diffusion.py +10 -10
  408. diffusers/training_utils.py +214 -30
  409. diffusers/utils/__init__.py +17 -1
  410. diffusers/utils/constants.py +3 -0
  411. diffusers/utils/doc_utils.py +1 -0
  412. diffusers/utils/dummy_pt_objects.py +592 -7
  413. diffusers/utils/dummy_torch_and_torchsde_objects.py +15 -0
  414. diffusers/utils/dummy_torch_and_transformers_and_sentencepiece_objects.py +47 -0
  415. diffusers/utils/dummy_torch_and_transformers_objects.py +1001 -71
  416. diffusers/utils/dynamic_modules_utils.py +34 -29
  417. diffusers/utils/export_utils.py +50 -6
  418. diffusers/utils/hub_utils.py +131 -17
  419. diffusers/utils/import_utils.py +210 -8
  420. diffusers/utils/loading_utils.py +118 -5
  421. diffusers/utils/logging.py +4 -2
  422. diffusers/utils/peft_utils.py +37 -7
  423. diffusers/utils/state_dict_utils.py +13 -2
  424. diffusers/utils/testing_utils.py +193 -11
  425. diffusers/utils/torch_utils.py +4 -0
  426. diffusers/video_processor.py +113 -0
  427. {diffusers-0.27.0.dist-info → diffusers-0.32.2.dist-info}/METADATA +82 -91
  428. diffusers-0.32.2.dist-info/RECORD +550 -0
  429. {diffusers-0.27.0.dist-info → diffusers-0.32.2.dist-info}/WHEEL +1 -1
  430. diffusers/loaders/autoencoder.py +0 -146
  431. diffusers/loaders/controlnet.py +0 -136
  432. diffusers/loaders/lora.py +0 -1349
  433. diffusers/models/prior_transformer.py +0 -12
  434. diffusers/models/t5_film_transformer.py +0 -70
  435. diffusers/models/transformer_2d.py +0 -25
  436. diffusers/models/transformer_temporal.py +0 -34
  437. diffusers/models/unet_1d.py +0 -26
  438. diffusers/models/unet_1d_blocks.py +0 -203
  439. diffusers/models/unet_2d.py +0 -27
  440. diffusers/models/unet_2d_blocks.py +0 -375
  441. diffusers/models/unet_2d_condition.py +0 -25
  442. diffusers-0.27.0.dist-info/RECORD +0 -399
  443. {diffusers-0.27.0.dist-info → diffusers-0.32.2.dist-info}/LICENSE +0 -0
  444. {diffusers-0.27.0.dist-info → diffusers-0.32.2.dist-info}/entry_points.txt +0 -0
  445. {diffusers-0.27.0.dist-info → diffusers-0.32.2.dist-info}/top_level.txt +0 -0
@@ -1,12 +1,15 @@
1
1
  import contextlib
2
2
  import copy
3
+ import gc
4
+ import math
3
5
  import random
4
- from typing import Any, Dict, Iterable, List, Optional, Union
6
+ from typing import Any, Dict, Iterable, List, Optional, Tuple, Union
5
7
 
6
8
  import numpy as np
7
9
  import torch
8
10
 
9
11
  from .models import UNet2DConditionModel
12
+ from .schedulers import SchedulerMixin
10
13
  from .utils import (
11
14
  convert_state_dict_to_diffusers,
12
15
  convert_state_dict_to_peft,
@@ -21,6 +24,9 @@ from .utils import (
21
24
  if is_transformers_available():
22
25
  import transformers
23
26
 
27
+ if transformers.integrations.deepspeed.is_deepspeed_zero3_enabled():
28
+ import deepspeed
29
+
24
30
  if is_peft_available():
25
31
  from peft import set_peft_model_state_dict
26
32
 
@@ -33,9 +39,13 @@ if is_torch_npu_available():
33
39
 
34
40
  def set_seed(seed: int):
35
41
  """
36
- Args:
37
42
  Helper function for reproducible behavior to set the seed in `random`, `numpy`, `torch`.
43
+
44
+ Args:
38
45
  seed (`int`): The seed to set.
46
+
47
+ Returns:
48
+ `None`
39
49
  """
40
50
  random.seed(seed)
41
51
  np.random.seed(seed)
@@ -51,6 +61,17 @@ def compute_snr(noise_scheduler, timesteps):
51
61
  """
52
62
  Computes SNR as per
53
63
  https://github.com/TiankaiHang/Min-SNR-Diffusion-Training/blob/521b624bd70c67cee4bdf49225915f5945a872e3/guided_diffusion/gaussian_diffusion.py#L847-L849
64
+ for the given timesteps using the provided noise scheduler.
65
+
66
+ Args:
67
+ noise_scheduler (`NoiseScheduler`):
68
+ An object containing the noise schedule parameters, specifically `alphas_cumprod`, which is used to compute
69
+ the SNR values.
70
+ timesteps (`torch.Tensor`):
71
+ A tensor of timesteps for which the SNR is computed.
72
+
73
+ Returns:
74
+ `torch.Tensor`: A tensor containing the computed SNR values for each timestep.
54
75
  """
55
76
  alphas_cumprod = noise_scheduler.alphas_cumprod
56
77
  sqrt_alphas_cumprod = alphas_cumprod**0.5
@@ -117,6 +138,60 @@ def resolve_interpolation_mode(interpolation_type: str):
117
138
  return interpolation_mode
118
139
 
119
140
 
141
+ def compute_dream_and_update_latents(
142
+ unet: UNet2DConditionModel,
143
+ noise_scheduler: SchedulerMixin,
144
+ timesteps: torch.Tensor,
145
+ noise: torch.Tensor,
146
+ noisy_latents: torch.Tensor,
147
+ target: torch.Tensor,
148
+ encoder_hidden_states: torch.Tensor,
149
+ dream_detail_preservation: float = 1.0,
150
+ ) -> Tuple[Optional[torch.Tensor], Optional[torch.Tensor]]:
151
+ """
152
+ Implements "DREAM (Diffusion Rectification and Estimation-Adaptive Models)" from http://arxiv.org/abs/2312.00210.
153
+ DREAM helps align training with sampling to help training be more efficient and accurate at the cost of an extra
154
+ forward step without gradients.
155
+
156
+ Args:
157
+ `unet`: The state unet to use to make a prediction.
158
+ `noise_scheduler`: The noise scheduler used to add noise for the given timestep.
159
+ `timesteps`: The timesteps for the noise_scheduler to user.
160
+ `noise`: A tensor of noise in the shape of noisy_latents.
161
+ `noisy_latents`: Previously noise latents from the training loop.
162
+ `target`: The ground-truth tensor to predict after eps is removed.
163
+ `encoder_hidden_states`: Text embeddings from the text model.
164
+ `dream_detail_preservation`: A float value that indicates detail preservation level.
165
+ See reference.
166
+
167
+ Returns:
168
+ `tuple[torch.Tensor, torch.Tensor]`: Adjusted noisy_latents and target.
169
+ """
170
+ alphas_cumprod = noise_scheduler.alphas_cumprod.to(timesteps.device)[timesteps, None, None, None]
171
+ sqrt_one_minus_alphas_cumprod = (1.0 - alphas_cumprod) ** 0.5
172
+
173
+ # The paper uses lambda = sqrt(1 - alpha) ** p, with p = 1 in their experiments.
174
+ dream_lambda = sqrt_one_minus_alphas_cumprod**dream_detail_preservation
175
+
176
+ pred = None
177
+ with torch.no_grad():
178
+ pred = unet(noisy_latents, timesteps, encoder_hidden_states).sample
179
+
180
+ _noisy_latents, _target = (None, None)
181
+ if noise_scheduler.config.prediction_type == "epsilon":
182
+ predicted_noise = pred
183
+ delta_noise = (noise - predicted_noise).detach()
184
+ delta_noise.mul_(dream_lambda)
185
+ _noisy_latents = noisy_latents.add(sqrt_one_minus_alphas_cumprod * delta_noise)
186
+ _target = target.add(delta_noise)
187
+ elif noise_scheduler.config.prediction_type == "v_prediction":
188
+ raise NotImplementedError("DREAM has not been implemented for v-prediction")
189
+ else:
190
+ raise ValueError(f"Unknown prediction type {noise_scheduler.config.prediction_type}")
191
+
192
+ return _noisy_latents, _target
193
+
194
+
120
195
  def unet_lora_state_dict(unet: UNet2DConditionModel) -> Dict[str, torch.Tensor]:
121
196
  r"""
122
197
  Returns:
@@ -137,6 +212,13 @@ def unet_lora_state_dict(unet: UNet2DConditionModel) -> Dict[str, torch.Tensor]:
137
212
 
138
213
 
139
214
  def cast_training_params(model: Union[torch.nn.Module, List[torch.nn.Module]], dtype=torch.float32):
215
+ """
216
+ Casts the training parameters of the model to the specified data type.
217
+
218
+ Args:
219
+ model: The PyTorch model whose parameters will be cast.
220
+ dtype: The data type to which the model parameters will be cast.
221
+ """
140
222
  if not isinstance(model, list):
141
223
  model = [model]
142
224
  for m in model:
@@ -165,6 +247,60 @@ def _set_state_dict_into_text_encoder(
165
247
  set_peft_model_state_dict(text_encoder, text_encoder_state_dict, adapter_name="default")
166
248
 
167
249
 
250
+ def compute_density_for_timestep_sampling(
251
+ weighting_scheme: str, batch_size: int, logit_mean: float = None, logit_std: float = None, mode_scale: float = None
252
+ ):
253
+ """
254
+ Compute the density for sampling the timesteps when doing SD3 training.
255
+
256
+ Courtesy: This was contributed by Rafie Walker in https://github.com/huggingface/diffusers/pull/8528.
257
+
258
+ SD3 paper reference: https://arxiv.org/abs/2403.03206v1.
259
+ """
260
+ if weighting_scheme == "logit_normal":
261
+ # See 3.1 in the SD3 paper ($rf/lognorm(0.00,1.00)$).
262
+ u = torch.normal(mean=logit_mean, std=logit_std, size=(batch_size,), device="cpu")
263
+ u = torch.nn.functional.sigmoid(u)
264
+ elif weighting_scheme == "mode":
265
+ u = torch.rand(size=(batch_size,), device="cpu")
266
+ u = 1 - u - mode_scale * (torch.cos(math.pi * u / 2) ** 2 - 1 + u)
267
+ else:
268
+ u = torch.rand(size=(batch_size,), device="cpu")
269
+ return u
270
+
271
+
272
+ def compute_loss_weighting_for_sd3(weighting_scheme: str, sigmas=None):
273
+ """
274
+ Computes loss weighting scheme for SD3 training.
275
+
276
+ Courtesy: This was contributed by Rafie Walker in https://github.com/huggingface/diffusers/pull/8528.
277
+
278
+ SD3 paper reference: https://arxiv.org/abs/2403.03206v1.
279
+ """
280
+ if weighting_scheme == "sigma_sqrt":
281
+ weighting = (sigmas**-2.0).float()
282
+ elif weighting_scheme == "cosmap":
283
+ bot = 1 - 2 * sigmas + 2 * sigmas**2
284
+ weighting = 2 / (math.pi * bot)
285
+ else:
286
+ weighting = torch.ones_like(sigmas)
287
+ return weighting
288
+
289
+
290
+ def free_memory():
291
+ """
292
+ Runs garbage collection. Then clears the cache of the available accelerator.
293
+ """
294
+ gc.collect()
295
+
296
+ if torch.cuda.is_available():
297
+ torch.cuda.empty_cache()
298
+ elif torch.backends.mps.is_available():
299
+ torch.mps.empty_cache()
300
+ elif is_torch_npu_available():
301
+ torch_npu.npu.empty_cache()
302
+
303
+
168
304
  # Adapted from torch-ema https://github.com/fadel/pytorch_ema/blob/master/torch_ema/ema.py#L14
169
305
  class EMAModel:
170
306
  """
@@ -180,6 +316,7 @@ class EMAModel:
180
316
  use_ema_warmup: bool = False,
181
317
  inv_gamma: Union[float, int] = 1.0,
182
318
  power: Union[float, int] = 2 / 3,
319
+ foreach: bool = False,
183
320
  model_cls: Optional[Any] = None,
184
321
  model_config: Dict[str, Any] = None,
185
322
  **kwargs,
@@ -194,6 +331,7 @@ class EMAModel:
194
331
  inv_gamma (float):
195
332
  Inverse multiplicative factor of EMA warmup. Default: 1. Only used if `use_ema_warmup` is True.
196
333
  power (float): Exponential factor of EMA warmup. Default: 2/3. Only used if `use_ema_warmup` is True.
334
+ foreach (bool): Use torch._foreach functions for updating shadow parameters. Should be faster.
197
335
  device (Optional[Union[str, torch.device]]): The device to store the EMA weights on. If None, the EMA
198
336
  weights will be stored on CPU.
199
337
 
@@ -248,16 +386,17 @@ class EMAModel:
248
386
  self.power = power
249
387
  self.optimization_step = 0
250
388
  self.cur_decay_value = None # set in `step()`
389
+ self.foreach = foreach
251
390
 
252
391
  self.model_cls = model_cls
253
392
  self.model_config = model_config
254
393
 
255
394
  @classmethod
256
- def from_pretrained(cls, path, model_cls) -> "EMAModel":
257
- _, ema_kwargs = model_cls.load_config(path, return_unused_kwargs=True)
395
+ def from_pretrained(cls, path, model_cls, foreach=False) -> "EMAModel":
396
+ _, ema_kwargs = model_cls.from_config(path, return_unused_kwargs=True)
258
397
  model = model_cls.from_pretrained(path)
259
398
 
260
- ema_model = cls(model.parameters(), model_cls=model_cls, model_config=model.config)
399
+ ema_model = cls(model.parameters(), model_cls=model_cls, model_config=model.config, foreach=foreach)
261
400
 
262
401
  ema_model.load_state_dict(ema_kwargs)
263
402
  return ema_model
@@ -320,19 +459,39 @@ class EMAModel:
320
459
  self.cur_decay_value = decay
321
460
  one_minus_decay = 1 - decay
322
461
 
323
- context_manager = contextlib.nullcontext
324
- if is_transformers_available() and transformers.deepspeed.is_deepspeed_zero3_enabled():
325
- import deepspeed
462
+ context_manager = contextlib.nullcontext()
463
+
464
+ if self.foreach:
465
+ if is_transformers_available() and transformers.integrations.deepspeed.is_deepspeed_zero3_enabled():
466
+ context_manager = deepspeed.zero.GatheredParameters(parameters, modifier_rank=None)
467
+
468
+ with context_manager:
469
+ params_grad = [param for param in parameters if param.requires_grad]
470
+ s_params_grad = [
471
+ s_param for s_param, param in zip(self.shadow_params, parameters) if param.requires_grad
472
+ ]
326
473
 
327
- for s_param, param in zip(self.shadow_params, parameters):
328
- if is_transformers_available() and transformers.deepspeed.is_deepspeed_zero3_enabled():
329
- context_manager = deepspeed.zero.GatheredParameters(param, modifier_rank=None)
474
+ if len(params_grad) < len(parameters):
475
+ torch._foreach_copy_(
476
+ [s_param for s_param, param in zip(self.shadow_params, parameters) if not param.requires_grad],
477
+ [param for param in parameters if not param.requires_grad],
478
+ non_blocking=True,
479
+ )
330
480
 
331
- with context_manager():
332
- if param.requires_grad:
333
- s_param.sub_(one_minus_decay * (s_param - param))
334
- else:
335
- s_param.copy_(param)
481
+ torch._foreach_sub_(
482
+ s_params_grad, torch._foreach_sub(s_params_grad, params_grad), alpha=one_minus_decay
483
+ )
484
+
485
+ else:
486
+ for s_param, param in zip(self.shadow_params, parameters):
487
+ if is_transformers_available() and transformers.integrations.deepspeed.is_deepspeed_zero3_enabled():
488
+ context_manager = deepspeed.zero.GatheredParameters(param, modifier_rank=None)
489
+
490
+ with context_manager:
491
+ if param.requires_grad:
492
+ s_param.sub_(one_minus_decay * (s_param - param))
493
+ else:
494
+ s_param.copy_(param)
336
495
 
337
496
  def copy_to(self, parameters: Iterable[torch.nn.Parameter]) -> None:
338
497
  """
@@ -344,18 +503,35 @@ class EMAModel:
344
503
  `ExponentialMovingAverage` was initialized will be used.
345
504
  """
346
505
  parameters = list(parameters)
347
- for s_param, param in zip(self.shadow_params, parameters):
348
- param.data.copy_(s_param.to(param.device).data)
506
+ if self.foreach:
507
+ torch._foreach_copy_(
508
+ [param.data for param in parameters],
509
+ [s_param.to(param.device).data for s_param, param in zip(self.shadow_params, parameters)],
510
+ )
511
+ else:
512
+ for s_param, param in zip(self.shadow_params, parameters):
513
+ param.data.copy_(s_param.to(param.device).data)
349
514
 
350
- def to(self, device=None, dtype=None) -> None:
351
- r"""Move internal buffers of the ExponentialMovingAverage to `device`.
515
+ def pin_memory(self) -> None:
516
+ r"""
517
+ Move internal buffers of the ExponentialMovingAverage to pinned memory. Useful for non-blocking transfers for
518
+ offloading EMA params to the host.
519
+ """
520
+
521
+ self.shadow_params = [p.pin_memory() for p in self.shadow_params]
522
+
523
+ def to(self, device=None, dtype=None, non_blocking=False) -> None:
524
+ r"""
525
+ Move internal buffers of the ExponentialMovingAverage to `device`.
352
526
 
353
527
  Args:
354
528
  device: like `device` argument to `torch.Tensor.to`
355
529
  """
356
530
  # .to() on the tensors handles None correctly
357
531
  self.shadow_params = [
358
- p.to(device=device, dtype=dtype) if p.is_floating_point() else p.to(device=device)
532
+ p.to(device=device, dtype=dtype, non_blocking=non_blocking)
533
+ if p.is_floating_point()
534
+ else p.to(device=device, non_blocking=non_blocking)
359
535
  for p in self.shadow_params
360
536
  ]
361
537
 
@@ -380,36 +556,44 @@ class EMAModel:
380
556
 
381
557
  def store(self, parameters: Iterable[torch.nn.Parameter]) -> None:
382
558
  r"""
559
+ Saves the current parameters for restoring later.
560
+
383
561
  Args:
384
- Save the current parameters for restoring later.
385
- parameters: Iterable of `torch.nn.Parameter`; the parameters to be
386
- temporarily stored.
562
+ parameters: Iterable of `torch.nn.Parameter`. The parameters to be temporarily stored.
387
563
  """
388
564
  self.temp_stored_params = [param.detach().cpu().clone() for param in parameters]
389
565
 
390
566
  def restore(self, parameters: Iterable[torch.nn.Parameter]) -> None:
391
567
  r"""
392
- Args:
393
- Restore the parameters stored with the `store` method. Useful to validate the model with EMA parameters without:
394
- affecting the original optimization process. Store the parameters before the `copy_to()` method. After
568
+ Restore the parameters stored with the `store` method. Useful to validate the model with EMA parameters
569
+ without: affecting the original optimization process. Store the parameters before the `copy_to()` method. After
395
570
  validation (or model saving), use this to restore the former parameters.
571
+
572
+ Args:
396
573
  parameters: Iterable of `torch.nn.Parameter`; the parameters to be
397
574
  updated with the stored parameters. If `None`, the parameters with which this
398
575
  `ExponentialMovingAverage` was initialized will be used.
399
576
  """
577
+
400
578
  if self.temp_stored_params is None:
401
579
  raise RuntimeError("This ExponentialMovingAverage has no `store()`ed weights " "to `restore()`")
402
- for c_param, param in zip(self.temp_stored_params, parameters):
403
- param.data.copy_(c_param.data)
580
+ if self.foreach:
581
+ torch._foreach_copy_(
582
+ [param.data for param in parameters], [c_param.data for c_param in self.temp_stored_params]
583
+ )
584
+ else:
585
+ for c_param, param in zip(self.temp_stored_params, parameters):
586
+ param.data.copy_(c_param.data)
404
587
 
405
588
  # Better memory-wise.
406
589
  self.temp_stored_params = None
407
590
 
408
591
  def load_state_dict(self, state_dict: dict) -> None:
409
592
  r"""
410
- Args:
411
593
  Loads the ExponentialMovingAverage state. This method is used by accelerate during checkpointing to save the
412
594
  ema state dict.
595
+
596
+ Args:
413
597
  state_dict (dict): EMA state. Should be an object returned
414
598
  from a call to :meth:`state_dict`.
415
599
  """
@@ -23,14 +23,17 @@ from .constants import (
23
23
  DEPRECATED_REVISION_ARGS,
24
24
  DIFFUSERS_DYNAMIC_MODULE_NAME,
25
25
  FLAX_WEIGHTS_NAME,
26
+ GGUF_FILE_EXTENSION,
26
27
  HF_MODULES_CACHE,
27
28
  HUGGINGFACE_CO_RESOLVE_ENDPOINT,
28
29
  MIN_PEFT_VERSION,
29
30
  ONNX_EXTERNAL_WEIGHTS_NAME,
30
31
  ONNX_WEIGHTS_NAME,
32
+ SAFE_WEIGHTS_INDEX_NAME,
31
33
  SAFETENSORS_FILE_EXTENSION,
32
34
  SAFETENSORS_WEIGHTS_NAME,
33
35
  USE_PEFT_BACKEND,
36
+ WEIGHTS_INDEX_NAME,
34
37
  WEIGHTS_NAME,
35
38
  )
36
39
  from .deprecation_utils import deprecate
@@ -40,6 +43,7 @@ from .export_utils import export_to_gif, export_to_obj, export_to_ply, export_to
40
43
  from .hub_utils import (
41
44
  PushToHubMixin,
42
45
  _add_variant,
46
+ _get_checkpoint_shard_files,
43
47
  _get_model_file,
44
48
  extract_commit_hash,
45
49
  http_user_agent,
@@ -58,23 +62,35 @@ from .import_utils import (
58
62
  get_objects_from_module,
59
63
  is_accelerate_available,
60
64
  is_accelerate_version,
65
+ is_bitsandbytes_available,
66
+ is_bitsandbytes_version,
61
67
  is_bs4_available,
62
68
  is_flax_available,
63
69
  is_ftfy_available,
70
+ is_gguf_available,
71
+ is_gguf_version,
72
+ is_google_colab,
64
73
  is_inflect_available,
65
74
  is_invisible_watermark_available,
66
75
  is_k_diffusion_available,
67
76
  is_k_diffusion_version,
68
77
  is_librosa_available,
78
+ is_matplotlib_available,
69
79
  is_note_seq_available,
70
80
  is_onnx_available,
71
81
  is_peft_available,
82
+ is_peft_version,
83
+ is_safetensors_available,
72
84
  is_scipy_available,
85
+ is_sentencepiece_available,
73
86
  is_tensorboard_available,
87
+ is_timm_available,
74
88
  is_torch_available,
75
89
  is_torch_npu_available,
76
90
  is_torch_version,
77
91
  is_torch_xla_available,
92
+ is_torch_xla_version,
93
+ is_torchao_available,
78
94
  is_torchsde_available,
79
95
  is_torchvision_available,
80
96
  is_transformers_available,
@@ -84,7 +100,7 @@ from .import_utils import (
84
100
  is_xformers_available,
85
101
  requires_backends,
86
102
  )
87
- from .loading_utils import load_image
103
+ from .loading_utils import get_module_from_name, get_submodule_by_name, load_image, load_video
88
104
  from .logging import get_logger
89
105
  from .outputs import BaseOutput
90
106
  from .peft_utils import (
@@ -28,10 +28,13 @@ _CHECK_PEFT = os.environ.get("_CHECK_PEFT", "1") in ENV_VARS_TRUE_VALUES
28
28
 
29
29
  CONFIG_NAME = "config.json"
30
30
  WEIGHTS_NAME = "diffusion_pytorch_model.bin"
31
+ WEIGHTS_INDEX_NAME = "diffusion_pytorch_model.bin.index.json"
31
32
  FLAX_WEIGHTS_NAME = "diffusion_flax_model.msgpack"
32
33
  ONNX_WEIGHTS_NAME = "model.onnx"
33
34
  SAFETENSORS_WEIGHTS_NAME = "diffusion_pytorch_model.safetensors"
35
+ SAFE_WEIGHTS_INDEX_NAME = "diffusion_pytorch_model.safetensors.index.json"
34
36
  SAFETENSORS_FILE_EXTENSION = "safetensors"
37
+ GGUF_FILE_EXTENSION = "gguf"
35
38
  ONNX_EXTERNAL_WEIGHTS_NAME = "weights.pb"
36
39
  HUGGINGFACE_CO_RESOLVE_ENDPOINT = os.environ.get("HF_ENDPOINT", "https://huggingface.co")
37
40
  DIFFUSERS_DYNAMIC_MODULE_NAME = "diffusers_modules"
@@ -14,6 +14,7 @@
14
14
  """
15
15
  Doc utilities: Utilities related to documentation
16
16
  """
17
+
17
18
  import re
18
19
 
19
20