Ascend-SACT/Wan2.2
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

介绍

通义万相Wan2.2视频生成,对标 Sora2,Veo3等国外的领先多模态视频生成类的模型。当前主要包括有:5B和14B两种参数量的模型,涵盖文生视频、图生视频等能力。

  • T2V-A14B 🤗🤖 文本到视频 MoE 模型,支持 480P & 720P
  • I2V-A14B 🤗 🤖图像到视频 MoE 模型,支持 480P & 720P
  • TI2V-5B 🤗🤖高压缩 VAE, T2V+I2V, 支持 720P

本篇内容介绍如何在昇腾服务器快速的支持上述模型的推理和训练。当前的推理主要依赖MindIE-SD,训练主要依赖 MindSpeed-MM,华为提供一站式开箱即用的镜像使能开发者,能够快速基于昇腾做业务能力集成。

让玩昇腾,没有难度。但玩好昇腾有门槛,也的确需要开发者一起让世界有第二的计算选择,让国产模型走向世界,永争世界第一!

当前提供的容器镜像获取方式如下,支持x86的910B服务器部署:

docker pull swr.cn-north-4.myhuaweicloud.com/ascend-sact/mindspeed2.2.0-mindie2.2t30-torch2.8.0-cann8.2.rc2-910b-py311-ubuntu24.04-amd64:v1.3

主要依赖版本信息如下:

  • Mindspeed 2.2.0
    • MindSpeed-MM 基于昇腾的多模态训练框架,安装路径:/usr/local/Ascend/MindSpeed-MM
  • MindIE 2.2t30
    • MindIE-SD 基于昇腾的StableDiffusion类模型推理加速,安装路径:/usr/local/Ascend/mindie
  • Wan2.2
    • wan2.2推理代码,安装路径:/usr/local/Ascend/thirdparty/Wan2.2
  • Torch 2.8.0
    • 配套torch及torch-npu版本2.8.0
  • CANN 8.2.rc2
    • 昇腾对标cuda基础软件,安装路径:/usr/local/Ascend/ascend-toolkit
  • 910b
    • 910b芯片服务器
  • Python 3.11
    • 基于miniconda,安装路径/opt/conda
  • Ubuntu 24.04

开发者需要具备的知识:

  • 理解容器的基本概念,知道如何启动容器
  • 基于huggingface/modelscope 如何下载模型权重

下述的内容以wan2.2-5B为例进行说明

推理

对于推理,开发者需要3步即可在昇腾服务器上进行多模态视频的推理。

  1. 拉取镜像,并且启动容器
docker pull swr.cn-north-4.myhuaweicloud.com/ascend-sact/mindspeed2.2.0-mindie2.2t30-torch2.8.0-cann8.2.rc2-910b-py311-ubuntu24.04-amd64:v1.3

启动容器并且进入容器,命令参考(适用于宿主机启动方式): 手动挂载方式启动容器

  1. 下载模型权重,配置环境变量信息

参考huggingface/modelscope下载推理的模型到本地

  1. 在容器内拉起如下的推理脚本,配置好OUTPUTS和WAN2_2_CHECKPOINT对应的路径
OUTPUTS='config your inference output'
WAN2_2_CHECKPOINT='config Wan2.2-TI2V-5B model path'

_1_npu_output="${OUTPUTS}/test-1_npu-frame_num_81-3s.mp4" && [ -e "$_1_npu_output" ] && rm -rf "$_1_npu_output"
wan2_2_dir=/usr/local/Ascend/thirdparty/Wan2.2

export ALGO=0
export PYTORCH_NPU_ALLOC_CONF='expandable_segments:True'
export TASK_QUEUE_ENABLE=2
export CPU_AFFINITY_CONF=1
export TOKENIZERS_PARALLELISM=false
export HCCL_INTRA_ROCE_ENABLE=1

python $wan2_2_dir/generate.py \
  --task ti2v-5B \
  --size 1280*704 \
  --frame_num 81 \
  --sample_steps 50 \
  --base_seed 0 \
  --ckpt_dir ${WAN2_2_CHECKPOINT} \
  --use_attentioncache \
  --start_step 20 \
  --attentioncache_interval 2 \
  --end_step 47 \
  --image $wan2_2_dir/examples/i2v_input.JPG \
  --prompt "Summer beach vacation style, a white cat wearing sunglasses sits on a surfboard. The fluffy-furred feline gazes directly at the camera with a relaxed expression. Blurred beach scenery forms the background featuring crystal-clear waters, distant green hills, and a blue sky dotted with white clouds. The cat assumes a naturally relaxed posture, as if savoring the sea breeze and warm sunlight. A close-up shot highlights the feline's intricate details and the refreshing atmosphere of the seaside." \
  --save_file "$_1_npu_output"

上述脚本成功后,即可在OUTPUTS目录下看到推理生成的视频文件。

针对14B模型(T2V,I2V),按照8卡设备进行推理

OUTPUTS='config your inference output'
WAN2_2_T2V_14B_CHECKPOINT='config Wan2.2-14B model path'

_8_npu_output="${OUTPUTS}/test-8_npu-frame_num_81-3s.mp4" && [ -e "$_8_npu_output" ] && rm -rf "$_8_npu_output"
wan2_2_dir=/usr/local/Ascend/thirdparty/Wan2.2

torchrun --nproc_per_node=8 --master_port=23459 $wan2_2_dir/generate.py \
  --task t2v-A14B \
  --ckpt_dir ${WAN2_2_T2V_14B_CHECKPOINT} \
  --size 1280*720 \
  --frame_num 81 \
  --sample_steps 40 \
  --t5_fsdp \
  --dit_fsdp \
  --offload_model False \
  --cfg_size 1 \
  --ulysses_size 8 \
  --prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage." \
  --base_seed 0
  --save_file "$_8_npu_output"

训练

对于训练,开发者需要4步即可在昇腾服务器上进行多模态视频的微调训练。

  1. 拉取镜像,并且启动容器(同上述推理)

  2. 下载模型权重,配置环境变量信息(同上述推理)

    • 需要注意模型权重下载的区别(Wan-AI/Wan2.2-TI2V-5B,Wan-AI/Wan2.2-TI2V-5B-Diffusers),如果不清楚Diffusers模型差异的,请咨询大模型
    • 当前训练依赖Wan-AI/Wan2.2-TI2V-5B-Diffusers权重
  3. 准备数据集

    • 下载数据集,比如huggingface的数据集:Wild-Heart/Tom-and-Jerry-VideoGeneration-Dataset
    • 生成对应的数据描述内容文件trainset.json

datasets

其中,videos/下存放视频,data.json中包含该数据集中所有的视频-文本对信息,具体示例如下:

[
 {
     "path": "videos/video0001.mp4",
     "cap": "Video discrimination1.",
     "num_frames": 81,
     "fps": 24,
     "resolution": {
         "height": 480,
         "width": 832
     }
 },
 {
     "path": "videos/video0002.mp4",
     "cap": "Video discrimination2.",
     "num_frames": 81,
     "fps": 24,
     "resolution": {
         "height": 480,
         "width": 832
     }
 },
 ......
]

修改/usr/local/Ascend/MindSpeed-MM/examples/wan2.2/data.txt文件,其中每一行表示一个数据集,第一个参数表示数据文件夹的路径,第二个参数表示trainset.json文件的路径,用,分隔。

  1. 在容器内拉起如下的训练脚本

    • 关注如下的变量配置,WAN2_2_DIFFUSERS_CHECKPOINT(Diffusers模型的权重路径),MM_CONVERT_PATH(当前把mm-convert的模型放在该目录下)
    • 执行如下的环境初始化
    MM_CONVERT_PATH=$WAN_AI_DIR/mm-convert/Wan2.2-TI2V-5B-Diffusers
    # 如果目标路径不存在,则执行转换
    if [ ! -d "$MM_CONVERT_PATH" ]; then
        mm-convert WanConverter hf_to_mm \
         --cfg.source_path $WAN2_2_DIFFUSERS_CHECKPOINT/transformer \
         --cfg.target_path $MM_CONVERT_PATH
    fi
    
    # 仅当目标软链接不存在时才创建
    if [ ! -e /usr/local/Ascend/MindSpeed-MM/Wan2.2-TI2V-5B-Diffusers ]; then
        ln -s $WAN2_2_DIFFUSERS_CHECKPOINT /usr/local/Ascend/MindSpeed-MM/Wan2.2-TI2V-5B-Diffusers
    fi
    if [ ! -e /usr/local/Ascend/MindSpeed-MM/Wan2.2-TI2V-5B-Diffusers/mm_convert ]; then
        ln -s $MM_CONVERT_PATH /usr/local/Ascend/MindSpeed-MM/Wan2.2-TI2V-5B-Diffusers/mm_convert
    fi
    • 训练脚本位置在:/usr/local/Ascend/MindSpeed-MM/examples/wan2.2/5B/ti2v/pretrain.sh,关注如下的脚本配置内容
      • LOAD_PATH,转换成Megatron格式的模型路径,即MM_CONVERT_PATH的路径
      • SAVE_PATH,训练完成后模型保存路径
      • NPUS_PER_NODE,关注每个节点NPU的个数
      • train-iters,训练迭代轮次
    • 训练脚本拉起
    cd /usr/local/Ascend/MindSpeed-MM
    bash examples/wan2.2/5B/ti2v/pretrain.sh

训练完成后的新的权重保存在SAVE_PATH中,当前保存的格式pytorch的DCP数据格式,如下:

(ascend) [root:TI2V-5B-Diffusers]$ ll
total 2
drwxr-x--- 3 root root 4096 Sep 25 03:33 ./
drwxr-xr-x 4 root root 4096 Sep 24 09:28 ../
drwxr-x--- 2 root root 4096 Sep 25 03:33 iter_0005000/
-rw-r----- 1 root root    1 Sep 25 03:33 latest_checkpointed_iteration.txt
(ascend) [root:TI2V-5B-Diffusers]$ ll iter_0005000/
total 9777409
drwxr-x--- 2 root root       4096 Sep 25 03:33 ./
drwxr-x--- 3 root root       4096 Sep 25 03:33 ../
-rw-r----- 1 root root    1230376 Sep 25 03:33 .metadata
-rw-r----- 1 root root 1252252046 Sep 25 03:33 __0_0.distcp
-rw-r----- 1 root root 1251105899 Sep 25 03:33 __1_0.distcp
-rw-r----- 1 root root 1251113464 Sep 25 03:33 __2_0.distcp
-rw-r----- 1 root root 1251113464 Sep 25 03:33 __3_0.distcp
-rw-r----- 1 root root 1251113464 Sep 25 03:33 __4_0.distcp
-rw-r----- 1 root root 1251113528 Sep 25 03:33 __5_0.distcp
-rw-r----- 1 root root 1251113592 Sep 25 03:33 __6_0.distcp
-rw-r----- 1 root root 1251113716 Sep 25 03:33 __7_0.distcp

上述DCP数据格式的模型,还不能直接用于推理,需要做如下的脚本转换为推理模型的torch的数据格式。

SAVE_PATH=/inspire/sj-ssd/project/pretrain-test/public/workspace/models/train-dcp/Wan2.2-TI2V-5B-Diffusers
ITER_DIR=$SAVE_PATH/iter_0000005   ### 依据实际的迭代轮次修改
CONVERT_DIR=/inspire/sj-ssd/project/pretrain-test/public/workspace/models/train-infer/Wan2.2-TI2V-5B-Diffusers  ###转后的模型权重路径

mkdir -p $CONVERT_DIR/release/mp_rank_00
cp $SAVE_PATH/latest_checkpointed_iteration.txt $CONVERT_DIR/

echo "release" > $CONVERT_DIR/latest_checkpointed_iteration.txt
python -m torch.distributed.checkpoint.format_utils dcp_to_torch "$ITER_DIR" "$CONVERT_DIR/release/mp_rank_00/model_optim_rng.pt"

上述脚本内容中的各个路径替换为实际的路径即可。参考推理章节进行微调后模型的推理。

训练微调结束后的效果如下,因为基于猫和老鼠的数据微调,微调后的权重推理结果如下,带有猫和老鼠的特征数据。

prompt: A cat and a dog baking a cake together in a kitchen. The cat is carefully measuring flour, while the dog is stirring the batter with a wooden spoon. The kitchen is cozy, with sunlight streaming through the window.

result: 猫和老鼠微调后效果