快速开始

环境准备

本文档以Atlas 800I A2 推理服务器和Wan2.1模型为例,让开发者快速开始使用MindIE SD进行文生视频。

前提条件

物理机部署场景,需要在物理机安装NPU驱动固件以及部署Docker,执行如下步骤判断是否已安装NPU驱动固件和部署Docker。

  • 执行以下命令查看NPU驱动固件是否安装。若出现类似下图打印内容,说明已安装。否则请参见表1 Atlas A2 推理系列产品进行安装。

    npu-smi info
    

    图 1 回显信息

    表 1 Atlas A2 推理系列产品

    产品型号 参考文档
    Atlas 800I A2 下载固件与驱动,请参考《CANN 软件安装》中的“安装NPU驱动和固件”章节(商用版)或“安装NPU驱动和固件”章节(社区版)进行安装。
  • 执行以下命令查看Docker是否已安装并启动。

    docker ps
    

    回显以下信息表示Docker已安装并启动。

    CONTAINER ID        IMAGE        COMMAND         CREATED        STATUS         PORTS           NAMES
    

获取模型权重

请先下载模型权重,这里以Wan2.1模型为例。

模型权重详细信息如表2 模型权重所示。请根据实际情况下载所需的文生视频或图生视频模型权重。用户需自行设置权重路径(例:/home/{用户名}/example/Wan2.1-T2V-14B)。

表 2 模型权重

模型 说明 权重
Wan2.1-T2V-14B 文生视频模型 权重文件请单击链接获取。
Wan2.1-I2V-14B-480P 图生视频模型 权重文件请单击链接获取。
Wan2.1-I2V-14B-720P 图生视频模型 权重文件请单击链接获取。

MindIE SD接口会对传入的文件或文件夹做权限安全校验,因此模型权重文件、配置文件及其所在文件夹需进行权限配置,权限要求为:

  • 模型权重文件、配置文件:对应三组权限不得超过640且需要和执行用户的所属组和权限保持一致。
  • 模型权重文件和配置文件所在的文件夹:对应三组权限不得超过750且需要和执行用户的所属组和权限保持一致。

获取容器镜像

进入昇腾官方镜像仓库,根据设备型号选择下载对应的MindIE镜像。

该镜像已具备模型运行所需的基础环境,包括:CANN、FrameworkPTAdapter、MindIE与ATB Models,可实现模型快速上手推理。

表 3 容器内各组件安装路径

组件 安装路径
CANN /usr/local/Ascend/cann
CANN-NNAL-ATB /usr/local/Ascend/nnal/atb
MindIE /usr/local/Ascend/mindie
ATB Models /usr/local/Ascend/atb-models

启动容器

  1. 下载完成镜像后,执行以下命令启动容器。

    docker run -it -d --net=host --shm-size=1g \
           --name <container-name> \
           -w /home \
           --device=/dev/davinci0:rwm \
           --device=/dev/davinci1:rwm \
           --device=/dev/davinci2:rwm \
           --device=/dev/davinci3:rwm \
           --device=/dev/davinci_manager:rwm \
           --device=/dev/hisi_hdc:rwm \
           --device=/dev/devmm_svm:rwm \
           -v /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro \
           -v /usr/local/dcmi:/usr/local/dcmi:ro \
           -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi:ro \
           -v /usr/local/sbin/:/usr/local/sbin:ro \
           -v /path-to-weights:/path-to-weights:ro \
           mindie:3.0.0-800I-A2-py311-openeuler24.03-lts bash
    

    说明

    • “mindie:3.0.0-800I-A2-py311-openeuler24.03-lts”为镜像名称,可根据实际情况修改。
    • 对于--device参数,挂载权限设置为rwm,而非权限较小的rw或r,原因如下:
      • 对于Atlas 800I A2 推理服务器,若设置挂载权限为rw,可以正常进入容器,同时也可以使用npu-smi命令查看npu占用信息,并正常运行MindIE业务;但如果挂载的npu(即对应挂载选项中的davinci_xxx_,如npu0对应davinci0)上有其它任务占用,则使用npu-smi命令会打印报错,且无法运行MindIE任务(此时torch.npu.set_device()会失败)。
      • 对于Atlas 800I A3 超节点服务器,若设置挂载权限为rw,进入容器后,使用npu-smi命令会打印报错,且无法运行MindIE任务(此时torch.npu.set_device()会失败)。

    表 4 参数说明

    参数 参数说明
    --name 设置容器名称。
    --device 表示映射的设备,可以挂载一个或者多个设备。
    需要挂载的设备如下:
    • /dev/davinciX:NPU设备,X是ID号,如:davinci0。
    • /dev/davinci_manager:davinci相关的管理设备。
    • /dev/hisi_hdc:hdc相关管理设备。
    • /dev/devmm_svm:内存管理相关设备。
    可根据以下命令查询device个数及名称方式,根据需要绑定设备,修改上面命令中的"--device=****"。
    ll /dev/ | grep davinci
    -v /usr/local/Ascend/driver:/usr/local/Ascend/driver:ro 将宿主机目录“/usr/local/Ascend/driver”挂载到容器,请根据驱动所在实际路径修改。
    -v /usr/local/sbin/:/usr/local/sbin:ro 将宿主机工具“/usr/local/sbin”以只读模式挂载到容器中,请根据实际情况修改。
    -v /path-to-weights:/path-to-weights:ro 设定权重挂载的路径,需要根据用户的情况修改。
    请将权重文件和数据集文件同时放置于该路径下
  2. 执行以下命令进入容器。

    docker exec -it <container-name> /bin/bash
    

    说明

    更多详细信息,请参考启动容器章节。

模型推理

本章节通过一个简单的示例,介绍在Atlas 800I A2 推理服务器上,如何使用MindIE SD进行文生视频。

  1. 使用以下命令在任意路径(例如:/home/{用户名}/code)下载模型仓库。

    git clone https://modelers.cn/MindIE/Wan2.1.git
    
  2. 使用以下命令进入Wan2.1文件夹并安装所需依赖。

    cd Wan2.1
    pip install -r requirements.txt
    
  3. 进行模型推理。(请选择实际下载使用的模型)

    • Wan2.1-T2V-14B模型使用8卡推理

      model_base="/home/{用户名}/example/Wan2.1-T2V-14B"
      torchrun --nproc_per_node=8 generate.py \
            --task t2v-14B \
            --size 1280*720 \
            --ckpt_dir ${model_base} \
            --dit_fsdp \
            --t5_fsdp \
            --sample_steps 50 \
            --ulysses_size 8 \
            --vae_parallel \
            --prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage." \
            --use_attentioncache \
            --start_step 20 \
            --attentioncache_interval 2 \
            --end_step 47
      
    • Wan2.1-I2V-14B-480P模型使用8卡推理

      model_base="/home/{用户名}/example/Wan2.1-I2V-14B-480P/"
      torchrun --nproc_per_node=8 generate.py \
            --task i2v-14B \
            --size 832*480 \
            --ckpt_dir ${model_base} \
            --frame_num 81 \
            --sample_steps 40 \
            --dit_fsdp \
            --t5_fsdp \
            --cfg_size 1 \
            --ulysses_size 8 \
            --vae_parallel \
            --image examples/i2v_input.JPG \
            --base_seed 0 \
            --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." \
            --use_attentioncache \
            --start_step 12 \
            --attentioncache_interval 4 \
            --end_step 37
      
    • Wan2.1-I2V-14B-720P模型使用8卡推理

      model_base="/home/{用户名}/example/Wan2.1-I2V-14B-720P/"
      torchrun --nproc_per_node=8 generate.py \
            --task i2v-14B \
            --size 1280*720 \
            --ckpt_dir ${model_base} \
            --frame_num 81 \
            --sample_steps 40 \
            --dit_fsdp \
            --t5_fsdp \
            --cfg_size 1 \
            --ulysses_size 8 \
            --vae_parallel \
            --image examples/i2v_input.JPG \
            --base_seed 0 \
            --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." \
            --use_attentioncache \
            --start_step 12 \
            --attentioncache_interval 4 \
            --end_step 37
      

    表 1 参数解释

    参数名 参数含义 取值
    model_base 权重路径 模型权重所在路径。
    task 任务类型 支持“t2v-14B”和“i2v-14B”。
    size 视频分辨率 生成视频的宽*高。
    • “t2v-14B”模型默认值为1280*720
    • “i2v-14B-480P”模型默认值为[832, 480]、[720, 480]
    • “i2v-14B-720P”模型默认值为[1280, 720]
    frame_num 生成视频的帧数 默认值:81
    sample_steps 采样步数 扩散模型的迭代降噪步数。
    • t2v模型默认值:50
    • i2v模型默认值:40
    prompt 文本提示词 用户自定义,用于控制视频生成。
    image 用于生成视频的图片路径 i2v模型推理必须,用户自定义,用于控制视频生成。
    base_seed 随机种子 用于视频生成的随机种子。
    use_attentioncache 使能attentioncache算法优化 此优化为有损优化,如需要开启此优化,请设置如下参数:start_step、attentioncache_interval、end_step,分别表示cache开始的step、连续cache数、cache结束的step;如不开启,则无需设置use_attentioncache、start_step、attentioncache_interval、end_step。
    nproc_per_node 并行卡数
    • Wan2.1-T2V-14B支持的卡数为1、2、4或8
    • Wan2.1-I2V-14B支持的卡数为1、2、4或8
    ulysses_size ulysses并行数 默认值为1,ulysses_size * cfg_size = nproc_per_node。
    cfg_size cfg并行数 默认值为1,ulysses_size * cfg_size = nproc_per_node。
    dit_fsdp DiT使用FSDP DiT模型是否使用完全分片数据并行(Fully Sharded Data Parallel, FSDP)策略。
    t5_fsdp T5使用FSDP 文本到文本传输转换(Text-To-Text Transfer Transformer, T5)模型是否使用FSDP策略。
    vae_parallel: 使能vae并行策略 vae模型是否使用并行策略。

性能测试

单击Wan2.1的模型仓链接,查看README文档进行性能测试。