昇腾社区首页
中文
注册

模型推理

  1. 使用以下命令在任意路径(例如:/home/{用户名}/code)下载模型仓。
    git clone https://gitee.com/ascend/ModelZoo-PyTorch.git
  2. 使用以下命令配置环境变量。
    export PYTHONPATH=/home/{用户名}/code/ModelZoo-PyTorch/MindIE/MultiModal/OpenSora-1.2/:$PYTHONPATH
  3. 准备配置文件。
    详细信息如表1所示。
    表1 配置文件列表

    模型/子模型

    说明

    配置文件

    OpenSora1.2

    文生视频模型

    新建一个配置文件“model_index.json”,配置文件参考示例请参见model_index.json配置文件参考示例

    scheduler

    噪声采样器

    新建一个配置文件“scheduler_config.json”,配置文件参考示例请参见scheduler_config.json配置文件

    text_encoder

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

    请单击链接获取配置文件“config.json”。

    tokenizer

    transformer

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

    请单击链接获取配置文件“config.json”。

    vae

    变分自编码器

    请单击链接获取配置文件“config.json”,并请参见vae的config.json配置文件参考示例修改。

    vae_2d

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

    请单击链接获取配置文件“config.json”。

    获取模型权重中获取的各模型权重文件和表1中获取的各模型配置文件,按照如下层级放置:

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

    MindIE SD接口会对传入的文件或文件夹做权限安全校验,因此模型权重文件、配置文件及其所在文件夹需进行权限配置,权限要求为:对应三组权限不得超过640且需要和执行用户的属组和权限保持一致。

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

    • model_index.json配置文件参考示例:
      {
          "_class_name": "OpenSoraPipeline",
          "_mindiesd_version": "1.0.0",
          "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.0",
          "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"
          }
      }
  4. 文生视频主要分为以下几个步骤。
    1. 导入依赖包
    2. 配置文生视频工作流
    3. 模型编译
    4. 模型推理
    具体样例如下所示:
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    #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"是一种广泛使用的视频压缩标准,因其高效性和兼容性而被广泛应用在各种视频应用场景中。