LightX2V

本示例在单卡昇腾 NPU 上安装 LightX2V,并用官方 Wan2.1-T2V-1.3B 模型完成一次文生视频推理。

前置条件

硬件

Atlas 900 A2 训练系列(Ascend 910B),单卡,至少 30 GB 可用存储。

基础软件

在运行本文档示例之前,你的机器上需要已经装好并可用:

本文档测试环境使用 Python 3.12、CANN 9.1.0。

1. 加载 CANN 环境

source /usr/local/Ascend/ascend-toolkit/set_env.sh

2. 安装 PyTorch NPU 栈

torchtorchvisiontorch_nputriton 四者版本严格配套,按 CANN 与 PyTorch 配套表 选择与 CANN 匹配的组合:

pip install torch==2.9.0 torchvision==0.24.0 torch_npu==2.9.0.post6 triton==3.5.0

确认安装的软件栈版本:

import torch
import torch_npu
import torchvision
import triton

print('torch', torch.__version__)
print('torchvision', torchvision.__version__)
print('torch_npu', torch_npu.__version__)
print('triton', triton.__version__)

输出结果如下:

torch 2.9.0+cpu
torchvision 0.24.0
torch_npu 2.9.0.post6
triton 3.5.0

3. 安装 LightX2V

LightX2V 未发布 PyPI 包,从 GitHub 源码安装。

git clone --branch "<ref>" https://github.com/ModelTC/LightX2V.git
echo "LightX2V $(git -C LightX2V describe --tags --exact-match HEAD)"
pip install --no-deps ./LightX2V

备注

<ref> 为上游最新 release 标签(例如 0.5.0)。

输出结果如下:

LightX2V xxx

备注

输出中的 xxx 为实际检出的 release 标签。

4. 示例:生成视频

安装示例所需的依赖:

pip install numpy pillow einops loguru tqdm packaging safetensors regex ftfy gguf imageio imageio-ffmpeg transformers prometheus-client pydantic pyzmq "modelscope==1.37.0"

Wan2.1-T2V-1.3B 模型跑文生视频。模型约 17.6 GB,运行下面的 Python 脚本:

import os
import time

# LightX2V 通过 PLATFORM 环境变量选择后端,必须在导入 lightx2v 之前设置。
os.environ["PLATFORM"] = "ascend_npu"

from modelscope import snapshot_download

from lightx2v import LightX2VPipeline

model_path = None
for attempt in range(3):
    try:
        model_path = snapshot_download('Wan-AI/Wan2.1-T2V-1.3B')
        break
    except Exception as exc:
        print('download attempt %d/3 failed: %s' % (attempt + 1, exc))
        time.sleep(10)
assert model_path, 'Wan2.1-T2V-1.3B download failed after 3 attempts'

pipe = LightX2VPipeline(
    model_path=model_path,
    model_cls='wan2.1',
    task='t2v',
)
pipe.create_generator(config_json='LightX2V/configs/platforms/ascend_npu/wan_t2v.json')

prompt = "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage."
negative_prompt = "镜头晃动,色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走"
save_result_path = "save_results/output_lightx2v_wan_t2v.mp4"

pipe.generate(
    seed=42,
    prompt=prompt,
    negative_prompt=negative_prompt,
    save_result_path=save_result_path,
)
print(f'saved: {save_result_path}')

输出结果如下(视频保存路径):

...saved: save_results/output_lightx2v_wan_t2v.mp4

5. 更多用法

多卡并行、量化、服务化部署等更多用法见 LightX2V examples