昇腾社区首页
中文
注册

快速上手

本章节通过一个简单的示例,展示如何使用MindIE SD进行文生视频。

  1. 准备模型权重。

    模型权重详细信息如表1所示,用户需自行设置权重路径(例:/home/{用户名}/example/OpenSora1.2)。

    表1 模型权重/配置文件列表

    模型

    说明

    权重/配置文件

    OpenSora1.2

    文生视频模型

    无需权重文件。

    配置文件参考示例请参见model_index.json配置文件参考示例

    scheduler

    噪声采样器

    无需权重文件。

    配置文件参考示例请参见scheduler_config.json配置文件

    text_encoder、tokenizer

    应用T5Encoder模型,文本编码模型

    权重文件和配置文件请单击链接获取。

    transformer

    应用STDiT3模型,时空去噪扩散转换模型

    权重文件和配置文件请单击链接获取。

    vae

    变分自编码器

    权重文件请单击链接获取。

    配置文件参考示例请参见vae的config.json配置文件参考示例

    vae_2d

    应用文本到文本传输转换扩散(Text-To-Text Transfer Transformer Diffusers, T5 Diffusers)模型

    权重文件和配置文件请单击链接获取。

    各模型的配置文件、权重文件的层级样例如下所示:

    ├── OpenSora1.2
    │   ├── model_index.json
    │   ├── scheduler
    │        └── scheduler_config.json
    │   ├── text_encoder
    │        ├── config.json
    │        └── 模型权重
    │   ├── tokenizer
    │        ├── config.json
    │        └── 模型权重
    │   ├── transformer
    │        ├── config.json
    │        └── 模型权重
    │   └── vae
    │        ├── config.json
    │        ├── 模型权重
    │        └── vae_2d
    │             └── vae
    │                  ├── config.json
    │                  └── 模型权重

    该路径下需要修改的配置文件参考示例如下所示。

    • model_index.json配置文件参考示例:
      {
          "_class_name": "OpenSoraPipeline",
          "_mindiesd_version": "1.0.RC3",
          "scheduler": [
              "mindiesd",
              "RFlowScheduler"
          ],
          "text_encoder": [
              "transformers",
              "T5EncoderModel"
          ],
          "tokenizer": [
              "transformers",
              "AutoTokenizer"
            ],
          "transformer": [
              "mindiesd",
              "STDiT3"
          ],
          "vae": [
              "mindiesd",
              "VideoAutoencoder"
          ]
      }
    • scheduler_config.json配置文件参考示例:
      {
          "_class_name": "RFlowScheduler",
          "_mindiesd_version": "1.0.RC3",
          "num_sampling_steps": 30,
          "num_timesteps": 1000
      }
    • transformer目录中的config.json配置文件参考示例:
      {
          "architectures": [
              "STDiT3"
          ],
          "caption_channels": 4096,
          "class_dropout_prob": 0.1,
          "depth": 28,
          "drop_path": 0.0,
          "enable_flash_attn": true,
          "enable_layernorm_kernel": false,
          "enable_sequence_parallelism": false,
          "freeze_y_embedder": true,
          "hidden_size": 1152,
          "in_channels": 4,
          "input_size": [
              null,
              null,
              null
          ],
          "input_sq_size": 512,
          "mlp_ratio": 4.0,
          "model_max_length": 300,
          "model_type": "STDiT3",
          "num_heads": 16,
          "only_train_temporal": false,
          "patch_size": [
              1,
              2,
              2
          ],
          "pred_sigma": true,
          "qk_norm": true,
          "skip_y_embedder": false,
          "torch_dtype": "float32",
          "transformers_version": "4.36.2"
      }
    • vae目录中的config.json配置文件参考示例:

      vae/vae_2d/vae目录中的config.json配置文件无需修改。

      {
          "architectures": [
              "VideoAutoencoder"
          ],
          "cal_loss": false,
          "freeze_vae_2d": false,
          "from_pretrained": null,
          "micro_frame_size": 17,
          "model_type": "VideoAutoencoder",
          "scale": [
              3.85,
              2.32,
              2.33,
              3.06
          ],
          "shift": [
              -0.1,
              0.34,
              0.27,
              0.98
          ],
          "torch_dtype": "float32",
          "transformers_version": "4.36.2",
          "vae_2d": {
              "from_pretrained": "PixArt-alpha/pixart_sigma_sdxlvae_T5_diffusers",
              "local_files_only": true,
              "micro_batch_size": 4,
              "subfolder": "vae",
              "type": "VideoAutoencoderKL"
          },
          "vae_temporal": {
              "from_pretrained": null,
              "type": "VAE_Temporal_SD"
          }
      }
  2. 文生视频主要分为以下几个步骤。
    1. 导入依赖包
    2. 配置文生视频工作流
    3. 模型编译
    4. 模型推理
    具体样例如下所示:
    #1.导入依赖包
    import torch
    from mindiesd import OpenSoraPipeline12, compile_pipe
    #2.配置文生视频工作流,用户可自行设置权重路径,例如:/home/{用户名}/example/OpenSora1.2
    pipe = OpenSoraPipeline12.from_pretrained(model_path="/home/{用户名}/example/OpenSora1.2", num_frames=32, image_size=(720, 1280), fps=8,
        enable_sequence_parallelism=False, dtype=torch.bfloat16)
    #3.模型编译
    pipe = compile_pipe(pipe)
    #4.模型推理,如果需要保存视频,则添加参数output_type="thwc"
    video = pipe(prompts=["Several giant wooly mammoths approach treading through a snowy meadow, their long wooly fur lightly blows in the wind as they walk, snow covered trees and dramatic snow capped mountains in the distance, mid afternoon light with wispy clouds and a sun high in the distance creates a warm glow, the low camera view is stunning capturing the large furry mammal with beautiful photography, depth of field."], output_type="thwc")
    #5.保存视频,用户设置在合法路径保存视频,例如在当前路径保存名称为sample.mp4的视频文件
    from torchvision.io import write_video
    save_path="sample.mp4"
    write_video(save_path, video, fps=8, video_codec="h264")
    表2 配置文生视频工作流中的参数解释

    参数名

    参数含义

    取值

    model_path

    权重路径

    T5Encoder、STDiT-v3、OpenSoraVAE_V1_2用到的权重所在路径。

    num_frames

    视频总帧数

    支持两档视频帧数,32、128,默认值为32。

    image_size

    视频分辨率

    支持两档视频分辨率,(512,512)、(720,1280),默认值为(720,1280)。

    fps

    每秒帧数

    支持8帧/秒。

    enable_sequence_parallelism

    是否开启DSP并行优化

    True、False

    dtype

    数据类型

    支持两类数据类型,torch.bfloat16、torch.float16,默认值为torch.bfloat16

    output_type

    输出维度顺序

    用于描述视频数据的维度顺序,"thwc"中的t表示时间维度,h表示视频图像高度,w表示视频图像宽度,c表示通道维度。

    save_path

    存储路径

    用户设置视频的保存路径。

    video_codec

    视频编解码器参数

    用于指定视频编解码器的参数,"h264"是一种广泛使用的视频压缩标准,因其高效性和兼容性而被广泛应用在各种视频应用场景中

    其生成的视频如下所示: