通义万相Wan2.2视频生成,对标 Sora2,Veo3等国外的领先多模态视频生成类的模型。当前主要包括有:5B和14B两种参数量的模型,涵盖文生视频、图生视频等能力。
本篇内容介绍如何在昇腾服务器快速的支持上述模型的推理和训练。当前的推理主要依赖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主要依赖版本信息如下:
开发者需要具备的知识:
下述的内容以wan2.2-5B为例进行说明
对于推理,开发者需要3步即可在昇腾服务器上进行多模态视频的推理。
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启动容器并且进入容器,命令参考(适用于宿主机启动方式): 手动挂载方式启动容器
参考huggingface/modelscope下载推理的模型到本地
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步即可在昇腾服务器上进行多模态视频的微调训练。
拉取镜像,并且启动容器(同上述推理)
下载模型权重,配置环境变量信息(同上述推理)
准备数据集

其中,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文件的路径,用,分隔。
在容器内拉起如下的训练脚本
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
ficd /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: 猫和老鼠微调后效果