01.背景

魔搭社区的开源项目 DiffSynth-Studio 自推出以来,凭借其前沿的技术探索和卓越的创新能力,持续受到开源社区的高度关注与广泛好评。截至目前,该项目已在 GitHub 上斩获超过 8,000 颗星,成为备受瞩目的开源项目之一。作为以技术探索为核心理念的实践平台,DiffSynth-Studio 基于扩散模型(Diffusion Model),在图像生成和视频生成领域孵化出了一系列富有创意且实用的技术成果,其中包括 ExVideo、ArtAug、EliGen 等代表性模块。

了解更多详情,请访问DiffSynth-Studio 项目链接:https://github.com/modelscope/DiffSynth-Studio

然而,激进的技术创新在一定程度上限制了框架在产品化部署中的表现,尤其是在计算效率等方面尚未达到最优。此外快速的创新迭代,要求我们在接口的稳定性和通用型等方面难免要做一些取舍,而这些取舍在生产化系统中,可能不一定都是最好的选择。为了解决这些问题,我们今天正式推出 DiffSynth-Engine ,并对整个开源项目进行了全面的工程化改造。通过这些优化,用户能够更便捷地完成模型推理与部署工作。

DiffSynth-Engine 项目链接:

https://github.com/modelscope/DiffSynth-Engine

02.DiffSynth-Engine

DiffSynth-Engine 具备以下突出特点:

  • 清晰可读的代码 :完全重新设计并实现了扩散采样器和调度器等核心模块,无需依赖任何第三方库,代码结构简洁直观,便于开发者理解和扩展。

  • 广泛的模型支持 :兼容多种格式的基础模型(Base Model)和 LoRA 模型,能够灵活适配各类使用场景,满足用户多样化的需求。

  • 灵活的内存管理 :提供多级别模型量化支持(如 FP8、INT8)以及高效的卸载策略,帮助用户在有限的 GPU 内存条件下依然能够流畅运行大型模型。

  • 高性能推理 :优化了推理流程,支持张量并行计算,从而在不同硬件环境下均能实现快速生成,显著提升性能表现。

  • 卓越的平台兼容性 :全面支持 Windows、macOS(包括 Apple Silicon)和 Linux 系统,确保跨平台操作的一致性和流畅体验,为用户提供无缝的使用感受。

03.安装

DiffSynth-Engine 可以直接通过 pip3 安装:

pip3 install diffsynth-engine

04.使用案例1:FLUX 的低显存设备优化

FLUX 是目前最受欢迎的开源图像生成模型,但它高昂的计算资源需求让很多技术爱好者望而却步,我们在 DiffSynth-Engine 中提供了细粒度的显存优化和量化支持,让更多用户能够体验到 AIGC 模型的乐趣。

例如,在 bfloat16 精度下,FLUX 模型需要 23GB 显存才能进行推理

from diffsynth_engine.pipelines import FluxImagePipeline, FluxModelConfig
from diffsynth_engine import fetch_model

model_path = fetch_model("muse/flux-with-vae", revision="20240902173035", path="flux1-dev-with-vae.safetensors")
config = FluxModelConfig(dit_path=model_path)

pipe = FluxImagePipeline.from_pretrained(config, offload_mode="cpu_offload").eval()

image = pipe(
  prompt="an astronaut on a horse, on the moon, black and white leica 1 9 7 0's photography, grainy, contrasty",
  width=1024,
  height=1024,
  num_inference_steps=30,
  seed=42,
)
image.save("flux_txt2img.png")

生成图片样例:

修改参数 offload_mode="sequential_cpu_offload" 后,只需要 4GB 显存即可推理,但推理时间有一定的延长。

from diffsynth_engine.pipelines import FluxImagePipeline, FluxModelConfig
from diffsynth_engine import fetch_model

model_path = fetch_model("muse/flux-with-vae", revision="20240902173035", path="flux1-dev-with-vae.safetensors")
config = FluxModelConfig(dit_path=model_path)

pipe = FluxImagePipeline.from_pretrained(config, offload_mode="sequential_cpu_offload").eval()

image = pipe(
  prompt="an astronaut on a horse, on the moon, black and white leica 1 9 7 0's photography, grainy, contrasty",
  width=1024,
  height=1024,
  num_inference_steps=30,
  seed=42,
)
image.save("flux_txt2img.png")

DiffSynth-Engine 还支持多种量化精度,在 A100 GPU 上的测试结果详见下表:

DiT dtype

T5 dtype

Compute dtype

Offload Mode

Max GPU memory

Average SSIM

E2E time (s)

DiT time(s)

bf16

bf16

bf16

cpu_offload

22.79 GB

1.0000

16.1

14.3

q8_0

q8_0

bf16

cpu_offload

12.49 GB

0.9654

23.1

16.9

q6_k

q6_k

bf16

cpu_offload

9.82 GB

0.9265

30.9

25.4

q4_k_s

q4_k_s

bf16

cpu_offload

7.02 GB

0.8736

26.5

22.3

q4_1

q4_k_s

bf16

cpu_offload

7.66 GB

0.8907

25.1

21.1

bf16

bf16

bf16

sequential_cpu_offload

3.52 GB

1.0000

91.0

87.8

q8_0

q8_0

bf16

sequential_cpu_offload

3.52 GB

0.9654

55.4

53.6

q6_k

q6_k

bf16

sequential_cpu_offload

3.52 GB

0.9265

56.9

55.2

q4_k_s

q4_k_s

bf16

sequential_cpu_offload

3.52 GB

0.8736

47.8

46.2

q4_1

q4_k_s

bf16

sequential_cpu_offload

3.52 GB

0.8907

46.5

44.9

不同的量化精度会对生成图片的效果造成不同程度的影响,以下是一些生成图片样例对比:

05.使用案例2:Wan2.1 的多卡并行推理

Wan2.1 是目前效果最好的视频生成模型之一,不同于图像生成,视频生成模型需要的计算量是更加庞大的。DiffSynth-Engine 为 Wan2.1 模型提供了张量并行推理支持,为模型在工业界的产品化部署提供便利。

当使用单卡进行推理时,在 A100 GPU 上,需要 358 秒才能生成一段分辨率为848x480,时长为2秒的视频。

from diffsynth_engine.pipelines import WanVideoPipeline, WanModelConfig
from diffsynth_engine.utils.download import fetch_model
from diffsynth_engine.utils.video import save_video

config = WanModelConfig(
    model_path=fetch_model("muse/wan2.1-14b-bf16", path="dit.safetensors"),
    t5_path=fetch_model("muse/wan2.1-umt5", path="umt5.safetensors"),
    vae_path=fetch_model("muse/wan2.1-vae", path="vae.safetensors"),
)
pipe = WanVideoPipeline.from_pretrained(config)

video = pipe(
    prompt="纪实摄影风格画面,一只活泼的小狗在绿茵茵的草地上迅速奔跑。小狗毛色棕黄,两只耳朵立起,神情专注而欢快。阳光洒在它身上,使得毛发看上去格外柔软而闪亮。背景是一片开阔的草地,偶尔点缀着几朵野花,远处隐约可见蓝天和几片白云。透视感鲜明,捕捉小狗奔跑时的动感和四周草地的生机。中景侧面移动视角。",
    negative_prompt="色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走",
    num_frames=41,
    width=848,
    height=480,
    seed=42,
)
save_video(video, "wan_t2v.mp4", fps=15)

生成视频样例:

https://live.csdn.net/v/470609

 

通过增加参数 parallelism=4和use_cfg_parallel=True,即可开启张量并行,在 4 张A100 GPU 上,实现 3.14 倍的加速,同时保证生成的视频内容不变。

from diffsynth_engine.pipelines import WanVideoPipeline, WanModelConfig
from diffsynth_engine.utils.download import fetch_model
from diffsynth_engine.utils.video import save_video

config = WanModelConfig(
    model_path=fetch_model("muse/wan2.1-14b-bf16", path="dit.safetensors"),
    t5_path=fetch_model("muse/wan2.1-umt5", path="umt5.safetensors"),
    vae_path=fetch_model("muse/wan2.1-vae", path="vae.safetensors"),
)
pipe = WanVideoPipeline.from_pretrained(config, parallelism=4, use_cfg_parallel=True)

video = pipe(
    prompt="纪实摄影风格画面,一只活泼的小狗在绿茵茵的草地上迅速奔跑。小狗毛色棕黄,两只耳朵立起,神情专注而欢快。阳光洒在它身上,使得毛发看上去格外柔软而闪亮。背景是一片开阔的草地,偶尔点缀着几朵野花,远处隐约可见蓝天和几片白云。透视感鲜明,捕捉小狗奔跑时的动感和四周草地的生机。中景侧面移动视角。",
    negative_prompt="色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走",
    num_frames=41,
    width=848,
    height=480,
    seed=42,
)
save_video(video, "wan_t2v_tp.mp4", fps=15)

在不同数量的 GPU 上,DiffSynth-Engine 实现的加速效果如下表所示:

parallelism

use_cfg_parallel

耗时 (s)

加速比

1

 

358

1.0 x

2

True

181

1.97x

4

True

114

3.14x

目前 Wan 2.1 模型的多卡推理仍在持续优化中,敬请期待后续的更新。

 

06.未来展望

魔搭社区将为开源项目 DiffSynth-Studio 和 DiffSynth-Engine 提供长期的维护与支持。其中,DiffSynth-Studio 会继续专注于学术研究,致力于探索扩散模型的前沿能力与创新潜力,在第一时间为开发者提供上手模型的工具链支持;而 DiffSynth-Engine 则更面向工业应用,基于DiffSynth-Studio 项目中的技术积累,在为扩散模型的高效部署训练等场景,提供强有力的支持。让我们共同期待未来开源社区中模型生态的繁荣发展,携手推动技术进步与行业变革!

欢迎点击链接,跳转GitHub为项目点star~

https://github.com/modelscope/DiffSynth-Studio

 

Logo

ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!

更多推荐