diffsynth-engine 0.6.1.dev24__tar.gz → 0.6.1.dev26__tar.gz

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.
Files changed (209) hide show
  1. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/PKG-INFO +1 -1
  2. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/__init__.py +6 -2
  3. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/configs/__init__.py +10 -6
  4. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/configs/pipeline.py +2 -18
  5. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/basic/attention.py +52 -0
  6. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/basic/video_sparse_attention.py +4 -1
  7. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/pipelines/base.py +30 -2
  8. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/pipelines/flux_image.py +2 -2
  9. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/pipelines/qwen_image.py +4 -2
  10. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/pipelines/wan_s2v.py +1 -1
  11. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/pipelines/wan_video.py +8 -4
  12. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/utils/flag.py +5 -0
  13. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/utils/parallel.py +6 -7
  14. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine.egg-info/PKG-INFO +1 -1
  15. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/.gitattributes +0 -0
  16. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/.gitignore +0 -0
  17. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/.pre-commit-config.yaml +0 -0
  18. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/LICENSE +0 -0
  19. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/MANIFEST.in +0 -0
  20. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/README.md +0 -0
  21. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/assets/dingtalk.png +0 -0
  22. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/assets/showcase.jpeg +0 -0
  23. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/assets/tongyi.svg +0 -0
  24. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/algorithm/__init__.py +0 -0
  25. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/algorithm/noise_scheduler/__init__.py +0 -0
  26. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/algorithm/noise_scheduler/base_scheduler.py +0 -0
  27. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/algorithm/noise_scheduler/flow_match/__init__.py +0 -0
  28. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/algorithm/noise_scheduler/flow_match/flow_beta.py +0 -0
  29. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/algorithm/noise_scheduler/flow_match/flow_ddim.py +0 -0
  30. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/algorithm/noise_scheduler/flow_match/recifited_flow.py +0 -0
  31. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/algorithm/noise_scheduler/stable_diffusion/__init__.py +0 -0
  32. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/algorithm/noise_scheduler/stable_diffusion/beta.py +0 -0
  33. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/algorithm/noise_scheduler/stable_diffusion/ddim.py +0 -0
  34. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/algorithm/noise_scheduler/stable_diffusion/exponential.py +0 -0
  35. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/algorithm/noise_scheduler/stable_diffusion/karras.py +0 -0
  36. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/algorithm/noise_scheduler/stable_diffusion/linear.py +0 -0
  37. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/algorithm/noise_scheduler/stable_diffusion/sgm_uniform.py +0 -0
  38. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/algorithm/sampler/__init__.py +0 -0
  39. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/algorithm/sampler/flow_match/__init__.py +0 -0
  40. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/algorithm/sampler/flow_match/flow_match_euler.py +0 -0
  41. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/algorithm/sampler/stable_diffusion/__init__.py +0 -0
  42. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/algorithm/sampler/stable_diffusion/brownian_tree.py +0 -0
  43. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/algorithm/sampler/stable_diffusion/ddpm.py +0 -0
  44. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/algorithm/sampler/stable_diffusion/deis.py +0 -0
  45. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/algorithm/sampler/stable_diffusion/dpmpp_2m.py +0 -0
  46. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/algorithm/sampler/stable_diffusion/dpmpp_2m_sde.py +0 -0
  47. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/algorithm/sampler/stable_diffusion/dpmpp_3m_sde.py +0 -0
  48. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/algorithm/sampler/stable_diffusion/epsilon.py +0 -0
  49. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/algorithm/sampler/stable_diffusion/euler.py +0 -0
  50. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/algorithm/sampler/stable_diffusion/euler_ancestral.py +0 -0
  51. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/models/components/vae.json +0 -0
  52. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/models/flux/flux_dit.json +0 -0
  53. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/models/flux/flux_text_encoder.json +0 -0
  54. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/models/flux/flux_vae.json +0 -0
  55. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/models/qwen_image/qwen2_5_vl_config.json +0 -0
  56. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/models/qwen_image/qwen2_5_vl_vision_config.json +0 -0
  57. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/models/qwen_image/qwen_image_vae.json +0 -0
  58. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/models/qwen_image/qwen_image_vae_keymap.json +0 -0
  59. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/models/sd/sd_text_encoder.json +0 -0
  60. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/models/sd/sd_unet.json +0 -0
  61. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/models/sd3/sd3_dit.json +0 -0
  62. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/models/sd3/sd3_text_encoder.json +0 -0
  63. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/models/sdxl/sdxl_text_encoder.json +0 -0
  64. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/models/sdxl/sdxl_unet.json +0 -0
  65. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/models/wan/dit/wan2.1_flf2v_14b.json +0 -0
  66. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/models/wan/dit/wan2.1_i2v_14b.json +0 -0
  67. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/models/wan/dit/wan2.1_t2v_1.3b.json +0 -0
  68. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/models/wan/dit/wan2.1_t2v_14b.json +0 -0
  69. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/models/wan/dit/wan2.2_i2v_a14b.json +0 -0
  70. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/models/wan/dit/wan2.2_s2v_14b.json +0 -0
  71. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/models/wan/dit/wan2.2_t2v_a14b.json +0 -0
  72. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/models/wan/dit/wan2.2_ti2v_5b.json +0 -0
  73. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/models/wan/dit/wan_dit_keymap.json +0 -0
  74. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/models/wan/vae/wan2.1_vae.json +0 -0
  75. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/models/wan/vae/wan2.2_vae.json +0 -0
  76. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/models/wan/vae/wan_vae_keymap.json +0 -0
  77. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/tokenizers/flux/tokenizer_1/merges.txt +0 -0
  78. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/tokenizers/flux/tokenizer_1/special_tokens_map.json +0 -0
  79. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/tokenizers/flux/tokenizer_1/tokenizer_config.json +0 -0
  80. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/tokenizers/flux/tokenizer_1/vocab.json +0 -0
  81. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/tokenizers/flux/tokenizer_2/special_tokens_map.json +0 -0
  82. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/tokenizers/flux/tokenizer_2/spiece.model +0 -0
  83. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/tokenizers/flux/tokenizer_2/tokenizer.json +0 -0
  84. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/tokenizers/flux/tokenizer_2/tokenizer_config.json +0 -0
  85. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/tokenizers/qwen_image/qwen2_vl_image_processor.json +0 -0
  86. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/tokenizers/qwen_image/tokenizer/added_tokens.json +0 -0
  87. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/tokenizers/qwen_image/tokenizer/merges.txt +0 -0
  88. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/tokenizers/qwen_image/tokenizer/special_tokens_map.json +0 -0
  89. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/tokenizers/qwen_image/tokenizer/tokenizer.json +0 -0
  90. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/tokenizers/qwen_image/tokenizer/tokenizer_config.json +0 -0
  91. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/tokenizers/qwen_image/tokenizer/vocab.json +0 -0
  92. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/tokenizers/sdxl/tokenizer/merges.txt +0 -0
  93. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/tokenizers/sdxl/tokenizer/special_tokens_map.json +0 -0
  94. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/tokenizers/sdxl/tokenizer/tokenizer_config.json +0 -0
  95. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/tokenizers/sdxl/tokenizer/vocab.json +0 -0
  96. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/tokenizers/sdxl/tokenizer_2/merges.txt +0 -0
  97. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/tokenizers/sdxl/tokenizer_2/special_tokens_map.json +0 -0
  98. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/tokenizers/sdxl/tokenizer_2/tokenizer_config.json +0 -0
  99. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/tokenizers/sdxl/tokenizer_2/vocab.json +0 -0
  100. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/tokenizers/wan/umt5-xxl/special_tokens_map.json +0 -0
  101. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/tokenizers/wan/umt5-xxl/spiece.model +0 -0
  102. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/tokenizers/wan/umt5-xxl/tokenizer.json +0 -0
  103. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/conf/tokenizers/wan/umt5-xxl/tokenizer_config.json +0 -0
  104. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/configs/controlnet.py +0 -0
  105. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/kernels/__init__.py +0 -0
  106. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/__init__.py +0 -0
  107. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/base.py +0 -0
  108. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/basic/__init__.py +0 -0
  109. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/basic/lora.py +0 -0
  110. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/basic/relative_position_emb.py +0 -0
  111. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/basic/timestep.py +0 -0
  112. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/basic/transformer_helper.py +0 -0
  113. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/basic/unet_helper.py +0 -0
  114. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/flux/__init__.py +0 -0
  115. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/flux/flux_controlnet.py +0 -0
  116. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/flux/flux_dit.py +0 -0
  117. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/flux/flux_dit_fbcache.py +0 -0
  118. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/flux/flux_ipadapter.py +0 -0
  119. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/flux/flux_redux.py +0 -0
  120. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/flux/flux_text_encoder.py +0 -0
  121. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/flux/flux_vae.py +0 -0
  122. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/hunyuan3d/__init__.py +0 -0
  123. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/hunyuan3d/dino_image_encoder.py +0 -0
  124. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/hunyuan3d/hunyuan3d_dit.py +0 -0
  125. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/hunyuan3d/hunyuan3d_vae.py +0 -0
  126. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/hunyuan3d/moe.py +0 -0
  127. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/hunyuan3d/surface_extractor.py +0 -0
  128. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/hunyuan3d/volume_decoder.py +0 -0
  129. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/qwen_image/__init__.py +0 -0
  130. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/qwen_image/qwen2_5_vl.py +0 -0
  131. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/qwen_image/qwen_image_dit.py +0 -0
  132. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/qwen_image/qwen_image_dit_fbcache.py +0 -0
  133. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/qwen_image/qwen_image_vae.py +0 -0
  134. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/sd/__init__.py +0 -0
  135. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/sd/sd_controlnet.py +0 -0
  136. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/sd/sd_text_encoder.py +0 -0
  137. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/sd/sd_unet.py +0 -0
  138. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/sd/sd_vae.py +0 -0
  139. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/sd3/__init__.py +0 -0
  140. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/sd3/sd3_dit.py +0 -0
  141. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/sd3/sd3_text_encoder.py +0 -0
  142. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/sd3/sd3_vae.py +0 -0
  143. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/sdxl/__init__.py +0 -0
  144. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/sdxl/sdxl_controlnet.py +0 -0
  145. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/sdxl/sdxl_text_encoder.py +0 -0
  146. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/sdxl/sdxl_unet.py +0 -0
  147. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/sdxl/sdxl_vae.py +0 -0
  148. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/text_encoder/__init__.py +0 -0
  149. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/text_encoder/clip.py +0 -0
  150. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/text_encoder/siglip.py +0 -0
  151. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/text_encoder/t5.py +0 -0
  152. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/vae/__init__.py +0 -0
  153. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/vae/vae.py +0 -0
  154. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/wan/__init__.py +0 -0
  155. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/wan/wan_audio_encoder.py +0 -0
  156. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/wan/wan_dit.py +0 -0
  157. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/wan/wan_image_encoder.py +0 -0
  158. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/wan/wan_s2v_dit.py +0 -0
  159. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/wan/wan_text_encoder.py +0 -0
  160. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/models/wan/wan_vae.py +0 -0
  161. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/pipelines/__init__.py +0 -0
  162. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/pipelines/hunyuan3d_shape.py +0 -0
  163. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/pipelines/sd_image.py +0 -0
  164. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/pipelines/sdxl_image.py +0 -0
  165. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/pipelines/utils.py +0 -0
  166. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/processor/__init__.py +0 -0
  167. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/processor/canny_processor.py +0 -0
  168. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/processor/depth_processor.py +0 -0
  169. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/tokenizers/__init__.py +0 -0
  170. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/tokenizers/base.py +0 -0
  171. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/tokenizers/clip.py +0 -0
  172. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/tokenizers/qwen2.py +0 -0
  173. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/tokenizers/qwen2_vl_image_processor.py +0 -0
  174. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/tokenizers/qwen2_vl_processor.py +0 -0
  175. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/tokenizers/t5.py +0 -0
  176. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/tokenizers/wan.py +0 -0
  177. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/tools/__init__.py +0 -0
  178. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/tools/flux_inpainting_tool.py +0 -0
  179. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/tools/flux_outpainting_tool.py +0 -0
  180. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/tools/flux_reference_tool.py +0 -0
  181. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/tools/flux_replace_tool.py +0 -0
  182. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/utils/__init__.py +0 -0
  183. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/utils/cache.py +0 -0
  184. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/utils/constants.py +0 -0
  185. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/utils/download.py +0 -0
  186. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/utils/env.py +0 -0
  187. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/utils/fp8_linear.py +0 -0
  188. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/utils/gguf.py +0 -0
  189. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/utils/image.py +0 -0
  190. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/utils/loader.py +0 -0
  191. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/utils/lock.py +0 -0
  192. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/utils/logging.py +0 -0
  193. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/utils/memory/__init__.py +0 -0
  194. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/utils/memory/linear_regression.py +0 -0
  195. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/utils/memory/memory_predcit_model.py +0 -0
  196. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/utils/offload.py +0 -0
  197. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/utils/onnx.py +0 -0
  198. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/utils/platform.py +0 -0
  199. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/utils/prompt.py +0 -0
  200. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine/utils/video.py +0 -0
  201. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine.egg-info/SOURCES.txt +0 -0
  202. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine.egg-info/dependency_links.txt +0 -0
  203. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine.egg-info/requires.txt +0 -0
  204. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/diffsynth_engine.egg-info/top_level.txt +0 -0
  205. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/docs/tutorial.md +0 -0
  206. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/docs/tutorial_zh.md +0 -0
  207. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/pyproject.toml +0 -0
  208. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/setup.cfg +0 -0
  209. {diffsynth_engine-0.6.1.dev24 → diffsynth_engine-0.6.1.dev26}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diffsynth_engine
3
- Version: 0.6.1.dev24
3
+ Version: 0.6.1.dev26
4
4
  Author: MuseAI x ModelScope
5
5
  Classifier: Programming Language :: Python :: 3
6
6
  Classifier: Operating System :: OS Independent
@@ -12,11 +12,13 @@ from .configs import (
12
12
  WanStateDicts,
13
13
  QwenImageStateDicts,
14
14
  AttnImpl,
15
+ SpargeAttentionParams,
16
+ VideoSparseAttentionParams,
17
+ LoraConfig,
15
18
  ControlNetParams,
16
19
  ControlType,
17
20
  QwenImageControlNetParams,
18
21
  QwenImageControlType,
19
- LoraConfig,
20
22
  )
21
23
  from .pipelines import (
22
24
  SDImagePipeline,
@@ -59,6 +61,9 @@ __all__ = [
59
61
  "WanStateDicts",
60
62
  "QwenImageStateDicts",
61
63
  "AttnImpl",
64
+ "SpargeAttentionParams",
65
+ "VideoSparseAttentionParams",
66
+ "LoraConfig",
62
67
  "ControlNetParams",
63
68
  "ControlType",
64
69
  "QwenImageControlNetParams",
@@ -79,7 +84,6 @@ __all__ = [
79
84
  "FluxIPAdapterRefTool",
80
85
  "FluxReplaceByControlTool",
81
86
  "FluxReduxRefTool",
82
- "LoraConfig",
83
87
  "fetch_model",
84
88
  "fetch_modelscope_model",
85
89
  "register_fetch_modelscope_model",
@@ -17,14 +17,16 @@ from .pipeline import (
17
17
  WanStateDicts,
18
18
  WanS2VStateDicts,
19
19
  QwenImageStateDicts,
20
- LoraConfig,
21
20
  AttnImpl,
21
+ SpargeAttentionParams,
22
+ VideoSparseAttentionParams,
23
+ LoraConfig,
22
24
  )
23
25
  from .controlnet import (
24
26
  ControlType,
25
27
  ControlNetParams,
26
- QwenImageControlNetParams,
27
28
  QwenImageControlType,
29
+ QwenImageControlNetParams,
28
30
  )
29
31
 
30
32
  __all__ = [
@@ -46,10 +48,12 @@ __all__ = [
46
48
  "WanStateDicts",
47
49
  "WanS2VStateDicts",
48
50
  "QwenImageStateDicts",
49
- "QwenImageControlType",
50
- "QwenImageControlNetParams",
51
+ "AttnImpl",
52
+ "SpargeAttentionParams",
53
+ "VideoSparseAttentionParams",
54
+ "LoraConfig",
51
55
  "ControlType",
52
56
  "ControlNetParams",
53
- "LoraConfig",
54
- "AttnImpl",
57
+ "QwenImageControlType",
58
+ "QwenImageControlNetParams",
55
59
  ]
@@ -5,7 +5,6 @@ from dataclasses import dataclass, field
5
5
  from typing import List, Dict, Tuple, Optional
6
6
 
7
7
  from diffsynth_engine.configs.controlnet import ControlType
8
- from diffsynth_engine.models.basic.video_sparse_attention import get_vsa_kwargs
9
8
 
10
9
 
11
10
  @dataclass
@@ -27,6 +26,8 @@ class AttnImpl(Enum):
27
26
  FA2 = "fa2" # Flash Attention 2
28
27
  FA3 = "fa3" # Flash Attention 3
29
28
  FA3_FP8 = "fa3_fp8" # Flash Attention 3 with FP8
29
+ AITER = "aiter" # Aiter Flash Attention
30
+ AITER_FP8 = "aiter_fp8" # Aiter Flash Attention with FP8
30
31
  XFORMERS = "xformers" # XFormers
31
32
  SDPA = "sdpa" # Scaled Dot Product Attention
32
33
  SAGE = "sage" # Sage Attention
@@ -52,23 +53,6 @@ class AttentionConfig:
52
53
  dit_attn_impl: AttnImpl = AttnImpl.AUTO
53
54
  attn_params: Optional[SpargeAttentionParams | VideoSparseAttentionParams] = None
54
55
 
55
- def get_attn_kwargs(self, latents: torch.Tensor, device: str) -> Dict:
56
- attn_kwargs = {"attn_impl": self.dit_attn_impl.value}
57
- if isinstance(self.attn_params, SpargeAttentionParams):
58
- assert self.dit_attn_impl == AttnImpl.SPARGE
59
- attn_kwargs.update(
60
- {
61
- "smooth_k": self.attn_params.smooth_k,
62
- "simthreshd1": self.attn_params.simthreshd1,
63
- "cdfthreshd": self.attn_params.cdfthreshd,
64
- "pvthreshd": self.attn_params.pvthreshd,
65
- }
66
- )
67
- elif isinstance(self.attn_params, VideoSparseAttentionParams):
68
- assert self.dit_attn_impl == AttnImpl.VSA
69
- attn_kwargs.update(get_vsa_kwargs(latents.shape[2:], (1, 2, 2), self.attn_params.sparsity, device=device))
70
- return attn_kwargs
71
-
72
56
 
73
57
  @dataclass
74
58
  class OptimizationConfig:
@@ -13,6 +13,7 @@ from diffsynth_engine.utils.flag import (
13
13
  SAGE_ATTN_AVAILABLE,
14
14
  SPARGE_ATTN_AVAILABLE,
15
15
  VIDEO_SPARSE_ATTN_AVAILABLE,
16
+ AITER_AVAILABLE,
16
17
  )
17
18
  from diffsynth_engine.utils.platform import DTYPE_FP8
18
19
 
@@ -93,6 +94,9 @@ if SPARGE_ATTN_AVAILABLE:
93
94
  )
94
95
  return out.transpose(1, 2)
95
96
 
97
+ if AITER_AVAILABLE:
98
+ from aiter import flash_attn_func as aiter_flash_attn
99
+ from aiter import flash_attn_fp8_pertensor_func as aiter_flash_attn_fp8
96
100
 
97
101
  if VIDEO_SPARSE_ATTN_AVAILABLE:
98
102
  from diffsynth_engine.models.basic.video_sparse_attention import (
@@ -137,6 +141,8 @@ def attention(
137
141
  "fa2",
138
142
  "fa3",
139
143
  "fa3_fp8",
144
+ "aiter",
145
+ "aiter_fp8",
140
146
  "xformers",
141
147
  "sdpa",
142
148
  "sage",
@@ -157,6 +163,13 @@ def attention(
157
163
  logger.debug(
158
164
  "flash_attn_3 does not support attention mask, will use fallback attention implementation"
159
165
  )
166
+ if AITER_AVAILABLE:
167
+ if flash_attn3_compatible:
168
+ return aiter_flash_attn(q, k, v, softmax_scale=scale)
169
+ else:
170
+ logger.warning(
171
+ f"head_dim={q.shape[-1]}, but aiter_flash_attn only supports head dimension at most {FA3_MAX_HEADDIM}, will use fallback attention implementation"
172
+ )
160
173
  if XFORMERS_AVAILABLE:
161
174
  return xformers_attn(q, k, v, attn_mask=attn_mask, scale=scale)
162
175
  if SDPA_AVAILABLE:
@@ -183,6 +196,22 @@ def attention(
183
196
  v = v.to(dtype=DTYPE_FP8)
184
197
  out = flash_attn3(q, k, v, softmax_scale=scale)
185
198
  return out.to(dtype=origin_dtype)
199
+ if attn_impl == "aiter" or attn_impl == "aiter_fp8":
200
+ if not flash_attn3_compatible:
201
+ raise RuntimeError(
202
+ f"head_dim={q.shape[-1]}, but aiter_flash_attn only supports head dimension at most {FA3_MAX_HEADDIM}"
203
+ )
204
+ if attn_mask is not None:
205
+ raise RuntimeError("aiter_flash_attn does not support attention mask")
206
+ if attn_impl == "aiter" :
207
+ return aiter_flash_attn(q, k, v, softmax_scale=scale)
208
+ else:
209
+ origin_dtype = q.dtype
210
+ q = q.to(dtype=DTYPE_FP8)
211
+ k = k.to(dtype=DTYPE_FP8)
212
+ v = v.to(dtype=DTYPE_FP8)
213
+ out = aiter_flash_attn_fp8(q, k, v, softmax_scale=scale)
214
+ return out.to(dtype=origin_dtype)
186
215
  if attn_impl == "fa2":
187
216
  return flash_attn2(q, k, v, softmax_scale=scale)
188
217
  if attn_impl == "xformers":
@@ -288,6 +317,8 @@ def long_context_attention(
288
317
  "fa2",
289
318
  "fa3",
290
319
  "fa3_fp8",
320
+ "aiter",
321
+ "aiter_fp8",
291
322
  "sdpa",
292
323
  "sage",
293
324
  "sparge",
@@ -303,6 +334,13 @@ def long_context_attention(
303
334
  logger.warning(
304
335
  f"head_dim={q.shape[-1]}, but flash_attn_3 only supports head dimension at most {FA3_MAX_HEADDIM}, will use fallback attention implementation"
305
336
  )
337
+ if AITER_AVAILABLE:
338
+ if flash_attn3_compatible:
339
+ return LongContextAttention(attn_type=AttnType.AITER)(q, k, v, softmax_scale=scale)
340
+ else:
341
+ logger.warning(
342
+ f"head_dim={q.shape[-1]}, but aiter_flash_attn only supports head dimension at most {FA3_MAX_HEADDIM}, will use fallback attention implementation"
343
+ )
306
344
  if SDPA_AVAILABLE:
307
345
  return LongContextAttention(attn_type=AttnType.TORCH)(q, k, v, softmax_scale=scale)
308
346
  if FLASH_ATTN_2_AVAILABLE:
@@ -323,6 +361,20 @@ def long_context_attention(
323
361
  v = v.to(dtype=DTYPE_FP8)
324
362
  out = LongContextAttention(attn_type=AttnType.FA3)(q, k, v, softmax_scale=scale)
325
363
  return out.to(dtype=origin_dtype)
364
+ if attn_impl == "aiter" or attn_impl == "aiter_fp8":
365
+ if not flash_attn3_compatible:
366
+ raise RuntimeError(
367
+ f"head_dim={q.shape[-1]}, but aiter_flash_attn only supports head dimension at most {FA3_MAX_HEADDIM}"
368
+ )
369
+ if attn_impl == "aiter":
370
+ return LongContextAttention(attn_type=AttnType.AITER)(q, k, v, softmax_scale=scale)
371
+
372
+ origin_dtype = q.dtype
373
+ q = q.to(dtype=DTYPE_FP8)
374
+ k = k.to(dtype=DTYPE_FP8)
375
+ v = v.to(dtype=DTYPE_FP8)
376
+ out = LongContextAttention(attn_type=AttnType.AITER)(q, k, v, softmax_scale=scale)
377
+ return out.to(dtype=origin_dtype)
326
378
  if attn_impl == "fa2":
327
379
  return LongContextAttention(attn_type=AttnType.FA)(q, k, v, softmax_scale=scale)
328
380
  if attn_impl == "sdpa":
@@ -2,9 +2,12 @@ import torch
2
2
  import math
3
3
  import functools
4
4
 
5
- from vsa import video_sparse_attn as vsa_core
5
+ from diffsynth_engine.utils.flag import VIDEO_SPARSE_ATTN_AVAILABLE
6
6
  from diffsynth_engine.utils.parallel import get_sp_ulysses_group, get_sp_ring_world_size
7
7
 
8
+ if VIDEO_SPARSE_ATTN_AVAILABLE:
9
+ from vsa import video_sparse_attn as vsa_core
10
+
8
11
  VSA_TILE_SIZE = (4, 4, 4)
9
12
 
10
13
 
@@ -5,7 +5,15 @@ from einops import rearrange
5
5
  from typing import Dict, List, Tuple, Union, Optional
6
6
  from PIL import Image
7
7
 
8
- from diffsynth_engine.configs import BaseConfig, BaseStateDicts, LoraConfig
8
+ from diffsynth_engine.configs import (
9
+ BaseConfig,
10
+ BaseStateDicts,
11
+ LoraConfig,
12
+ AttnImpl,
13
+ SpargeAttentionParams,
14
+ VideoSparseAttentionParams,
15
+ )
16
+ from diffsynth_engine.models.basic.video_sparse_attention import get_vsa_kwargs
9
17
  from diffsynth_engine.utils.offload import enable_sequential_cpu_offload, offload_model_to_dict, restore_model_from_dict
10
18
  from diffsynth_engine.utils.fp8_linear import enable_fp8_autocast
11
19
  from diffsynth_engine.utils.gguf import load_gguf_checkpoint
@@ -33,6 +41,7 @@ class BasePipeline:
33
41
  dtype=torch.float16,
34
42
  ):
35
43
  super().__init__()
44
+ self.config = None
36
45
  self.vae_tiled = vae_tiled
37
46
  self.vae_tile_size = vae_tile_size
38
47
  self.vae_tile_stride = vae_tile_stride
@@ -48,7 +57,7 @@ class BasePipeline:
48
57
  raise NotImplementedError()
49
58
 
50
59
  @classmethod
51
- def from_state_dict(cls, state_dicts: BaseStateDicts, pipeline_config: BaseConfig) -> "BasePipeline":
60
+ def from_state_dict(cls, state_dicts: BaseStateDicts, config: BaseConfig) -> "BasePipeline":
52
61
  raise NotImplementedError()
53
62
 
54
63
  def update_weights(self, state_dicts: BaseStateDicts) -> None:
@@ -260,6 +269,25 @@ class BasePipeline:
260
269
  )
261
270
  return init_latents, latents, sigmas, timesteps
262
271
 
272
+ def get_attn_kwargs(self, latents: torch.Tensor) -> Dict:
273
+ attn_kwargs = {"attn_impl": self.config.dit_attn_impl.value}
274
+ if isinstance(self.config.attn_params, SpargeAttentionParams):
275
+ assert self.config.dit_attn_impl == AttnImpl.SPARGE
276
+ attn_kwargs.update(
277
+ {
278
+ "smooth_k": self.config.attn_params.smooth_k,
279
+ "simthreshd1": self.config.attn_params.simthreshd1,
280
+ "cdfthreshd": self.config.attn_params.cdfthreshd,
281
+ "pvthreshd": self.config.attn_params.pvthreshd,
282
+ }
283
+ )
284
+ elif isinstance(self.config.attn_params, VideoSparseAttentionParams):
285
+ assert self.config.dit_attn_impl == AttnImpl.VSA
286
+ attn_kwargs.update(
287
+ get_vsa_kwargs(latents.shape[2:], (1, 2, 2), self.config.attn_params.sparsity, device=self.device)
288
+ )
289
+ return attn_kwargs
290
+
263
291
  def eval(self):
264
292
  for model_name in self.model_names:
265
293
  model = getattr(self, model_name)
@@ -751,7 +751,7 @@ class FluxImagePipeline(BasePipeline):
751
751
  latents = latents.to(self.dtype)
752
752
  self.load_models_to_device(["dit"])
753
753
 
754
- attn_kwargs = self.config.get_attn_kwargs(latents, self.device)
754
+ attn_kwargs = self.get_attn_kwargs(latents)
755
755
  noise_pred = self.dit(
756
756
  hidden_states=latents,
757
757
  timestep=timestep,
@@ -886,7 +886,7 @@ class FluxImagePipeline(BasePipeline):
886
886
  empty_cache()
887
887
  param.model.to(self.device)
888
888
 
889
- attn_kwargs = self.config.get_attn_kwargs(latents, self.device)
889
+ attn_kwargs = self.get_attn_kwargs(latents)
890
890
  double_block_output, single_block_output = param.model(
891
891
  hidden_states=latents,
892
892
  control_condition=control_condition,
@@ -208,7 +208,9 @@ class QwenImagePipeline(BasePipeline):
208
208
  )
209
209
  if config.load_encoder:
210
210
  logger.info(f"loading state dict from {config.encoder_path} ...")
211
- encoder_state_dict = cls.load_model_checkpoint(config.encoder_path, device="cpu", dtype=config.encoder_dtype)
211
+ encoder_state_dict = cls.load_model_checkpoint(
212
+ config.encoder_path, device="cpu", dtype=config.encoder_dtype
213
+ )
212
214
 
213
215
  state_dicts = QwenImageStateDicts(
214
216
  model=model_state_dict,
@@ -547,7 +549,7 @@ class QwenImagePipeline(BasePipeline):
547
549
  entity_masks: Optional[List[torch.Tensor]] = None,
548
550
  ):
549
551
  self.load_models_to_device(["dit"])
550
- attn_kwargs = self.config.get_attn_kwargs(latents, self.device)
552
+ attn_kwargs = self.get_attn_kwargs(latents)
551
553
  noise_pred = self.dit(
552
554
  image=latents,
553
555
  edit=image_latents,
@@ -394,7 +394,7 @@ class WanSpeech2VideoPipeline(WanVideoPipeline):
394
394
  void_audio_input: torch.Tensor | None = None,
395
395
  ):
396
396
  latents = latents.to(dtype=self.config.model_dtype, device=self.device)
397
- attn_kwargs = self.config.get_attn_kwargs(latents, self.device)
397
+ attn_kwargs = self.get_attn_kwargs(latents)
398
398
 
399
399
  noise_pred = model(
400
400
  x=latents,
@@ -144,7 +144,7 @@ class WanVideoPipeline(BasePipeline):
144
144
  lora_list: List[Tuple[str, float]],
145
145
  fused: bool = True,
146
146
  save_original_weight: bool = False,
147
- lora_converter: Optional[WanLoRAConverter] = None
147
+ lora_converter: Optional[WanLoRAConverter] = None,
148
148
  ):
149
149
  assert self.config.tp_degree is None or self.config.tp_degree == 1, (
150
150
  "load LoRA is not allowed when tensor parallel is enabled; "
@@ -156,11 +156,15 @@ class WanVideoPipeline(BasePipeline):
156
156
  )
157
157
  super().load_loras(lora_list, fused, save_original_weight, lora_converter)
158
158
 
159
- def load_loras_low_noise(self, lora_list: List[Tuple[str, float]], fused: bool = True, save_original_weight: bool = False):
159
+ def load_loras_low_noise(
160
+ self, lora_list: List[Tuple[str, float]], fused: bool = True, save_original_weight: bool = False
161
+ ):
160
162
  assert self.dit2 is not None, "low noise LoRA can only be applied to Wan2.2"
161
163
  self.load_loras(lora_list, fused, save_original_weight, self.low_noise_lora_converter)
162
164
 
163
- def load_loras_high_noise(self, lora_list: List[Tuple[str, float]], fused: bool = True, save_original_weight: bool = False):
165
+ def load_loras_high_noise(
166
+ self, lora_list: List[Tuple[str, float]], fused: bool = True, save_original_weight: bool = False
167
+ ):
164
168
  assert self.dit2 is not None, "high noise LoRA can only be applied to Wan2.2"
165
169
  self.load_loras(lora_list, fused, save_original_weight)
166
170
 
@@ -323,7 +327,7 @@ class WanVideoPipeline(BasePipeline):
323
327
 
324
328
  def predict_noise(self, model, latents, image_clip_feature, image_y, timestep, context):
325
329
  latents = latents.to(dtype=self.config.model_dtype, device=self.device)
326
- attn_kwargs = self.config.get_attn_kwargs(latents, self.device)
330
+ attn_kwargs = self.get_attn_kwargs(latents)
327
331
 
328
332
  noise_pred = model(
329
333
  x=latents,
@@ -31,6 +31,11 @@ if SDPA_AVAILABLE:
31
31
  else:
32
32
  logger.info("Torch SDPA is not available")
33
33
 
34
+ AITER_AVAILABLE = importlib.util.find_spec("aiter") is not None
35
+ if AITER_AVAILABLE:
36
+ logger.info("Aiter is available")
37
+ else:
38
+ logger.info("Aiter is not available")
34
39
 
35
40
  # 有损
36
41
  SAGE_ATTN_AVAILABLE = importlib.util.find_spec("sageattention") is not None
@@ -19,8 +19,6 @@ from typing import Dict, List, Set, Type, Union, Optional
19
19
  from queue import Empty
20
20
 
21
21
  import diffsynth_engine.models.basic.attention as attention_ops
22
- from diffsynth_engine.models import PreTrainedModel
23
- from diffsynth_engine.pipelines import BasePipeline
24
22
  from diffsynth_engine.utils.platform import empty_cache
25
23
  from diffsynth_engine.utils import logging
26
24
 
@@ -300,14 +298,15 @@ def _worker_loop(
300
298
  world_size=world_size,
301
299
  )
302
300
 
303
- def wrap_for_parallel(module: Union[PreTrainedModel, BasePipeline]):
304
- if isinstance(module, BasePipeline):
305
- for model_name in module.model_names:
306
- if isinstance(submodule := getattr(module, model_name), PreTrainedModel):
301
+ def wrap_for_parallel(module):
302
+ if hasattr(module, "model_names"):
303
+ for model_name in getattr(module, "model_names"):
304
+ submodule = getattr(module, model_name)
305
+ if getattr(submodule, "_supports_parallelization", False):
307
306
  setattr(module, model_name, wrap_for_parallel(submodule))
308
307
  return module
309
308
 
310
- if not module._supports_parallelization:
309
+ if not getattr(module, "_supports_parallelization", False):
311
310
  return module
312
311
 
313
312
  if tp_degree > 1:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: diffsynth_engine
3
- Version: 0.6.1.dev24
3
+ Version: 0.6.1.dev26
4
4
  Author: MuseAI x ModelScope
5
5
  Classifier: Programming Language :: Python :: 3
6
6
  Classifier: Operating System :: OS Independent