
# Wan2.2对应ComfyUI框架基于轻量算力节点适配NPU推理指导（6.5.911）
#### 方案概览
本文档主要介绍如何在ModelArts 轻量算力节点环境中部署文生视频、图生视频模型Wan2.2+lora i2v t2v对应ComfyUI框架，使用NPU卡进行推理。
表1支持模型 
| 套件类型    | 模型名称                  |
|:---|:---|
| ComfyUI | Wan2.2 Image-to-Video |
| ComfyUI | Wan2.2 Text-to-Video  |
   
#### 资源规格要求
推荐使用ModelArts 轻量算力节点的Snt9b23资源。
#### 获取软件和镜像
 表2获取软件和镜像 
| 分类          | 名称                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | 获取路径                                                                                                                                                                                                                                                                                                                                                                                       |
|:---|:---|:---|
| 插件代码包       | AscendCloud-AIGC-6.5.911-xxx.zip 文件名中的xxx表示具体的时间戳，以包名发布的实际时间为准。                                                                                                                                                                                                                                                                                                                                                                                                             | 获取路径：[Support-E](https://support.huawei.com/enterprise/zh/cloud-computing/modelarts-pid-23404305/software/)，在此路径中查找下载ModelArts 6.5.911.3版本 说明： 如果上述软件获取路径打开后未显示相应的软件信息，说明您没有下载权限，请联系您所在企业的华为方技术支持下载获取。 |
| Snt9b23基础镜像 | 西南-贵阳一： swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_ascend:pytorch_2.5.1-cann_8.2.rc1-py_3.11-hce_2.0.2503-aarch64-snt9b23-20250729103313-3a25129 中国-香港： swr.ap-southeast-1.myhuaweicloud.com/atelier/pytorch_ascend:pytorch_2.5.1-cann_8.2.rc1-py_3.11-hce_2.0.2503-aarch64-snt9b23-20250729103313-3a25129 | 从SWR拉取。                                                                                                                                                                                                                                                                                                                                                                                    |
   
#### 步骤一：准备环境
1. 请参考[轻量算力节点资源开通](https://support.huaweicloud.com/resmgmt-modelarts/usermanual-server-0005.html)，购买资源，并确保机器已开通，密码已获取，能通过SSH登录，不同机器之间网络互通。
   ![](https://support.huaweicloud.com/bestpractice-modelarts/public_sys-resources/note_3.0-zh-cn.png)
   购买Server资源时如果无可选资源规格，需要联系华为云技术支持申请开通。
   当容器需要提供服务给多个用户，或者多个用户共享使用该容器时，应限制容器访问Openstack的管理地址（169.254.169.254），以防止容器获取宿主机的元数据。具体操作请参见[禁止容器获取宿主机元数据](https://support.huaweicloud.com/bestpractice-cce/cce_bestpractice_0318.html#section4)。
   
2. 检查环境。
   1. SSH登录机器后，检查NPU设备状态。运行如下命令，返回NPU设备信息。
      ```
      npu-smi info
      ```
      如出现错误，可能是机器上的NPU设备没有正常安装，或者NPU镜像被其他容器挂载。请先正常[安装固件和驱动](https://support.huaweicloud.com/resmgmt-modelarts/usermanual-server-0011.html#section4)，或释放被挂载的NPU。
      
   
   2. 检查docker是否安装。
      ```
      docker -v   #检查docker是否安装
      ```
      如尚未安装，运行以下命令安装docker。
      ```
      yum install -y docker-engine.aarch64 docker-engine-selinux.noarch docker-runc.aarch64
      ```
      
   
   3. 配置IP转发，用于容器内的网络访问。执行以下命令查看net.ipv4.ip_forward配置项的值，如果为1，可跳过此步骤。
      ```
      sysctl -p | grep net.ipv4.ip_forward
      ```
      如果net.ipv4.ip_forward配置项的值不为1，执行以下命令配置IP转发。
      ```
      sed -i 's/net\.ipv4\.ip_forward=0/net\.ipv4\.ip_forward=1/g' /etc/sysctl.conf 
      sysctl -p | grep net.ipv4.ip_forward
      ```
      
    
3. 获取基础镜像。建议使用官方提供的镜像部署推理服务。镜像地址{image_url}参见[表2]。
   ```
   docker pull {image_url}
   ```
   
 
#### 步骤二：启动容器镜像
1. 启动**snt9b23** 容器镜像。启动前请先按照参数说明修改${}中的参数。可以根据实际需要增加修改参数。
   ```
   docker run -itd \
   --privileged \
   --name ${container_name} \
   -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
   -p 8183:8183 \
   -v /etc/localtime:/etc/localtime \
   -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
   -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
   --shm-size 60g \
   --device=/dev/davinci_manager \
   --device=/dev/hisi_hdc \
   --device=/dev/devmm_svm \
   --device=/dev/davinci0 \
   --device=/dev/davinci1 \
   --device=/dev/davinci2 \
   --device=/dev/davinci3 \
   --device=/dev/davinci4 \
   --device=/dev/davinci5 \
   --device=/dev/davinci6 \
   --device=/dev/davinci7 \
   --network=host \
   ${image_name} bash
   ```
   **参数说明：**
   - --name ${container_name} 容器名称，进入容器时会用到，此处可以自己定义一个容器名称，例如comfyui。
   
   - --device=/dev/davinci3：挂载主机的/dev/davinci3到容器的/dev/davinci3。可以使用npu-smi info查看空闲卡号，修改davinci后数字可以更改挂载卡。
   
   - ${image_name} 代表镜像名称。
   
   - -p 8183:8183 开启一个端口，可以通过 http://宿主机IP:8183 访问容器服务（如冲突，可自行更换其他端口）。
    
2. 进入**snt9b23** 容器。需要将${container_name}替换为实际的容器名称，例如：comfyui。
   ```
   docker exec -itu root ${container_name} bash
   ```
   
 
#### 步骤三：ComfyUI部署
**安装依赖和模型包**
1. 下载ComfyUI软件包。
   下载ComfyUI源码。
   ```
   git clone https://github.com/comfyanonymous/ComfyUI.git
   cd ComfyUI
   git checkout a17cf1c3871ad582c85c2bb6fddb63ec9c6df0ce
   ```
   如果上述方法无法下载ComfyUI源码，可参考如下操作，手动下载到本地再上传到容器中，如[图1]所示。
   1. 登录https://github.com/comfyanonymous/ComfyUI.git页面，单击Code按钮，通过Download ZIP下载ComfyUI源码到本地。
      图1下载ComfyUI源码   
      ![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000002490793096.png "点击放大")
      ![](https://support.huaweicloud.com/bestpractice-modelarts/public_sys-resources/notice_3.0-zh-cn.png)
      访问Github下载开源软件需要连通外网，请用户自行配置网络代理。
      
   
   2. 将下载好的ComfyUI-a17cf1c3871ad582c85c2bb6fddb63ec9c6df0ce.zip文件上传到容器的/home/ma-user/目录下，并解压。
      ```
      cd /home/ma-user/
      unzip ComfyUI-a17cf1c3871ad582c85c2bb6fddb63ec9c6df0ce.zip
      cd ComfyUI-a17cf1c3871ad582c85c2bb6fddb63ec9c6df0ce
      ```
      
     
2. 安装依赖，将requirements.txt中的torch修改为torch==2.5.1，如下图。
   图2requirements.txt修改   
   ![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000002522992843.png "点击放大")
   ```
   pip install -r requirements.txt
   ```
   
3. 下载模型权重。
   ```
   cd models
   ```
   权重在路径为/home/ma-user/ComfyUI/models中的各个子文件分布：
   **text_encoders**
   -umt5_xxl_fp16.safetensors
   **vae**
   -wan_2.1_vae.safetensors
   **diffusion_models**
   -wan2.2_i2v_high_noise_14B_fp16.safetensors
   -wan2.2_i2v_low_noise_14B_fp16.safetensors
   -wan2.2_t2v_high_noise_14B_fp16.safetensors
   -wan2.2_t2v_low_noise_14B_fp16.safetensors
   **loras**
   -Wan2.2-Lightning_I2V-A14B-4steps-lora_HIGH_fp16.safetensors
   -Wan2.2-Lightning_I2V-A14B-4steps-lora_LOW_fp16.safetensors
   -Wan2.2-Lightning_T2V-A14B-4steps-lora_HIGH_fp16.safetensors
   -Wan2.2-Lightning_T2V-A14B-4steps-lora_LOW_fp16.safetensors
   表3各权重下载地址 
   | 模型名称                                                        | 下载地址                                                                                                                                                                                                                                                                    |
   |:---|:---|
   | umt5_xxl_fp16.safetensors                                   | [split_files/text_encoders/umt5_xxl_fp16.safetensors · Comfy-Org/Wan_2.1_ComfyUI_repackaged at main](https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged/blob/main/split_files/text_encoders/umt5_xxl_fp16.safetensors)                                         |
   | wan_2.1_vae.safetensors                                     | [Comfy-Org/Wan_2.1_ComfyUI_repackaged at main](https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged/tree/main/split_files/vae)                                                                                                                                   |
   | wan2.2_i2v_high_noise_14B_fp16.safetensors                  | [split_files/diffusion_models/wan2.2_i2v_high_noise_14B_fp16.safetensors · Comfy-Org/Wan_2.2_ComfyUI_Repackaged at main](https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/blob/main/split_files/diffusion_models/wan2.2_i2v_high_noise_14B_fp16.safetensors) |
   | wan2.2_i2v_low_noise_14B_fp16.safetensors                   | [split_files/diffusion_models/wan2.2_i2v_low_noise_14B_fp16.safetensors · Comfy-Org/Wan_2.2_ComfyUI_Repackaged at main](https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/blob/main/split_files/diffusion_models/wan2.2_i2v_low_noise_14B_fp16.safetensors)   |
   | wan2.2_t2v_high_noise_14B_fp16.safetensors                  | [split_files/diffusion_models/wan2.2_t2v_high_noise_14B_fp16.safetensors · Comfy-Org/Wan_2.2_ComfyUI_Repackaged at main](https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/blob/main/split_files/diffusion_models/wan2.2_t2v_high_noise_14B_fp16.safetensors) |
   | wan2.2_t2v_low_noise_14B_fp16.safetensors                   | [split_files/diffusion_models/wan2.2_t2v_low_noise_14B_fp16.safetensors · Comfy-Org/Wan_2.2_ComfyUI_Repackaged at main](https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/blob/main/split_files/diffusion_models/wan2.2_t2v_low_noise_14B_fp16.safetensors)   |
   | Wan2.2-Lightning_I2V-A14B-4steps-lora_HIGH_fp16.safetensors | [Wan2.2-Lightning_I2V-A14B-4steps-lora_HIGH_fp16.safetensors · Aitrepreneur/FLX at main](https://huggingface.co/Aitrepreneur/FLX/blob/main/Wan2.2-Lightning_I2V-A14B-4steps-lora_HIGH_fp16.safetensors)                                                                 |
   | Wan2.2-Lightning_I2V-A14B-4steps-lora_LOW_fp16.safetensors  | [Wan2.2-Lightning_I2V-A14B-4steps-lora_LOW_fp16.safetensors · Aitrepreneur/FLX at main](https://huggingface.co/Aitrepreneur/FLX/blob/main/Wan2.2-Lightning_I2V-A14B-4steps-lora_LOW_fp16.safetensors)                                                                   |
   | Wan2.2-Lightning_T2V-A14B-4steps-lora_HIGH_fp16.safetensors | [Wan2.2-Lightning_T2V-A14B-4steps-lora_HIGH_fp16.safetensors · Aitrepreneur/FLX at main](https://huggingface.co/Aitrepreneur/FLX/blob/main/Wan2.2-Lightning_T2V-A14B-4steps-lora_HIGH_fp16.safetensors)                                                                 |
   | Wan2.2-Lightning_T2V-A14B-4steps-lora_LOW_fp16.safetensors  | [Wan2.2-Lightning_T2V-A14B-4steps-lora_LOW_fp16.safetensors · Aitrepreneur/FLX at main](https://huggingface.co/Aitrepreneur/FLX/blob/main/Wan2.2-Lightning_T2V-A14B-4steps-lora_LOW_fp16.safetensors)                                                                   |
      
   
   
4. 安装插件代码包。
   1. 将获取到的插件代码包AscendCloud-AIGC-xxx.zip文件上传到容器的/home/ma-user/目录下，并解压。插件代码包获取请参见[表2]。
      ```
      cd /home/ma-user/
      unzip AscendCloud-AIGC-*.zip
      ```
      
   
   2. 安装插件
      ```
      cd /home/ma-user/ComfyUI/custom_nodes
      git clone https://github.com/kijai/ComfyUI-WanVideoWrapper.git
      cd ComfyUI-WanVideoWrapper
      git checkout e60eb995eec70eaee1c85ff5af6ecb090d7dd50c
      cd ..
      pip install -r ComfyUI-WanVideoWrapper/requirements.txt
      git clone https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite.git
      pip install -r ComfyUI-VideoHelperSuite/requirements.txt
      ```
      
   
   3. 修改代码
      ```
      vim  /home/ma-user/ComfyUI/main.py
      ```
      在main函数添加，如下图所示：
      ```
      import torch
      torch.npu.config.allow_internal_format = False
      torch.npu.set_compile_mode(jit_compile=False)
      ```
      图3main.py代码修改   
      ![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000002494277436.png "点击放大")
      ```
      vim /home/ma-user/ComfyUI/comfy/ldm/wan/model.py
      ```
      在库导入添加：
      ```
      import torch_npu
      import torch._dynamo
      torch._dynamo.config.suppress_errors = True
      torch_npu.npu.set_compile_mode(jit_compile=False)
      torch.npu.config.allow_internal_format = False
      ```
      图4models.py代码修改   
      ![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000002526517193.png)
      ```
      vim /home/ma-user/ComfyUI/custom_nodes/ComfyUI-WanVideoWrapper/wanvideo/modules/model.py
      ```
      修改else为:
      ```
      self.original_patch_embedding.to('cpu')
      x = [self.original_patch_embedding(u.unsqueeze(0).to(torch.float32).to('cpu')).to(x[0].dtype).to(self.main_device) for u in x]
      ```
      图5wanvideo/modules/model.py修改   
      ![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000002490953080.png "点击放大")
      ```
      vim /home/ma-user/ComfyUI/custom_nodes/ComfyUI-WanVideoWrapper/wanvideo/schedulers/fm_solvers_unipc.py
      ```
      修改index_for_timestep函数
      ```
      if schedule_timesteps is None:
      schedule_timesteps = self.timesteps.cpu()
      timestep = timestep.cpu()
      ```
      图6fm_solvers_unipc.py文件修改   
      ![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000002523112805.png "点击放大") 
    
 
#### 步骤四：启动服务
**启动服务**
1. 用ifconfig命令获取宿主机IP（若无效可使用ip addr，或者自行寻找其他方式获取到宿主机IP）。
   图7Snt9b23获取容器IP   
   ![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000002494277752.png "点击放大") 
2. 进入目录。
   ```
   cd /home/ma-user/ComfyUI
   ```
   
3. 设置环境变量
   ```
   export TORCH_COMPILE_BACKEND="eager"
   export TORCHDYNAMO_VERBOSE=0
   ```
   
4. 启动服务命令如下。
   ```
   python main.py --port {端口号} --listen {IP地址} --force-fp16 --bf16-unet
   ```
   - 端口号：设置为无进程使用的端口。
   
   - IP地址：由[1.用ifconfig命令获取宿主机IP（若无效...]获得的宿主机IP。
    
5. 使用http://{宿主机ip}:{端口号}，可以访问前端页面。 进入前端页面，不选用提示模板。
   将wan2.2 lora工作流按照如下图方式打开。工作流在AscendCloud-AIGC-xxx.zip内：aigc_inference/torch_npu/comfyui/0.3.45/comfyui_workflow/wanvideo22_I2V_A14B_lora_workflow.json
   图8打开工作流   
   ![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000002490953082.png)
   
   
6. 如下运行文生视频。
   图9访问前端页面   
   ![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000002491003520.png "点击放大")
   界面分为5个模块：模型加载、提示文本输入、图生视频组件、文生视频组件、视频生成
   其中针对不同的功能，即文生视频和图生视频需要修改的主要是模型加载、图生视频组件、文生视频组件部分
   图10模型加载   
   ![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000002523323639.png "点击放大")
   wan2.2模型分为两个部分，分别为HIGH-noise和LOW-noise。上图中对应的两个红框选中的部分，左侧为HIGH-noise模型，右侧为LOW-noise模型。上方节点加载主模型，下方加载lora模型。
   文生视频时：模型权重名称包含t2v
   图生视频时：模型权重名称包含i2v
   图11加载vae编码器   
   ![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000002522992841.png "点击放大")
   WanVideo VAE Loader加载vae模型，名称包含Wan2 1 VAE
   图12加载文本编码器   
   ![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000002490793100.png "点击放大")
   WanVideo T5 Text Encoder Loader加载 umt5-xxl模型
   图13图生视频组件   
   ![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000002491007948.png "点击放大")
   输入首帧图像。
   绿色框中参数可修改最终生成视频的尺寸
   红色框中参数可修改最终生成视频的帧数。建议帧数为81。
   在使用该组件，实现图生视频，可单击图6 中的WanVideoWrapper 使用ctrl+b将其注释，如下图所示。
   图14注释节点   
   ![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000002522992847.png "点击放大")
   图15文生视频组件   
   ![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000002490953074.png "点击放大")
   修改生成视频的尺寸和帧数。
   默认帧数81。建议帧数设置为81。
   在使用该组件，实现文生视频。可依次单击图5中的各个节点，使用ctrl+b将其注释，如下图所示：
   图16注释节点   
   ![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000002523325251.png "点击放大")
   图17提示文本输入   
   ![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000002523112809.png "点击放大")
   红色框中修改提示文本。下方框为negative_prompt，若需要可进行修改。
   建议：文本长度不能过长，过长的文本会导致生成异常。建议长度小于800字符。
   
 
