lightx2v 量化推理#

lightx2v 是一个专为满足视频生成模型推理需求设计的高效后端。它通过优化内存管理和计算效率,能够显著加速推理过程。

LLMC 支持导出 lightx2v 所需的量化模型格式,并通过其对多种量化算法的强大支持(如 AWQ、GPTQ、SmoothQuant 等),能够在保证推理速度的同时保持较高的量化精度。将 LLMClightx2v 结合使用,可以在不牺牲精度的前提下实现推理加速和内存优化,非常适合需要高效处理视频生成模型的应用场景。


1.1 环境准备#

要使用 lightx2v 进行量化推理,首先需要安装并配置相关环境:

# 克隆仓库及其子模块
git clone https://github.com/ModelTC/lightx2v.git lightx2v && cd lightx2v
git submodule update --init --recursive

# 创建并激活 conda 环境
conda create -n lightx2v python=3.11 && conda activate lightx2v
pip install -r requirements.txt

# 为避免版本冲突,单独安装 transformers
pip install transformers==4.45.2

# 安装 flash-attention 2
cd lightx2v/3rd/flash-attention && pip install --no-cache-dir -v -e .

# 安装 flash-attention 3(仅在 Hopper 架构下)
cd lightx2v/3rd/flash-attention/hopper && pip install --no-cache-dir -v -e .

1.2 量化格式#

lightx2v 支持以下几种常见的定点量化格式:

  • W8A8:权重和激活均为 int8;

  • FP8 (E4M3):权重和激活均为 float8;

  • 权重 per-channel 量化

  • 激活 per-token 动态量化,进一步提升精度;

  • 对称量化(仅使用 scale 参数)。

使用 LLMC 进行模型量化时,必须确保权重和激活的比特数符合 lightx2v 所支持的格式。


1.3 使用 LLMC 进行模型量化#

1.3.1 校准数据#

以 Wan2.1 模型在 I2V 任务为例,校准数据示例可在此目录中找到,用户可根据需求添加更多数据。

1.3.2 量化算法选择#

W8A8#

推荐使用 SmoothQuant 算法,配置参考如下 配置文件

quant:
  video_gen:
    method: SmoothQuant
    weight:
      bit: 8
      symmetric: True
      granularity: per_channel
    act:
      bit: 8
      symmetric: True
      granularity: per_token
    special:
      alpha: 0.75

如果 SmoothQuant 无法满足精度需求,可以尝试使用 AWQ,相关配置请参考 AWQ 配置文件

FP8 动态量化#

对于 FP8 格式,LLMC 支持权重 per-channel、激活 per-token 动态量化。推荐仍使用 SmoothQuant,参考配置如下:

quant:
  video_gen:
    method: SmoothQuant
    weight:
      quant_type: float-quant
      bit: e4m3
      symmetric: True
      granularity: per_channel
      use_qtorch: True
    act:
      quant_type: float-quant
      bit: e4m3
      symmetric: True
      granularity: per_token
      use_qtorch: True
    special:
      alpha: 0.75

请确保将 quant_type 设置为 float-quant,并将 use_qtorch 设置为 True,因为 LLMC 的浮点量化依赖于 QPyTorch

安装 QPyTorch:

pip install qtorch

1.3.3 导出真实量化模型#

save:
  save_lightx2v: True
  save_path: /path/to/save_for_lightx2v/

务必将 save_lightx2v 设置为 True。LLMC 会将权重以 torch.int8torch.float8_e4m3fn 形式导出,供 lightx2v 直接使用,并附带相应的量化参数。

1.3.4 运行 LLMC#

编辑运行脚本中的配置路径:

# scripts/run_llmc.sh
llmc=llmc_path
export PYTHONPATH=$llmc:$PYTHONPATH

task_name=sq_for_lightx2v
config=${llmc}/configs/quantization/video_gen/wan_i2v/smoothquant_w_a.yaml

运行完成后,真实量化模型会保存在 save.save_path 中。

1.3.5 模型评估#

以 Wan2.1 在 I2V 任务为例,测试数据在此目录,配置参考如下:

eval:
  eval_pos: [fake_quant]
  type: video_gen
  name: i2v
  download: False
  path: ../assets/wan_i2v/eval/
  bs: 1
  target_height: 480
  target_width: 832
  num_frames: 81
  guidance_scale: 5.0
  output_video_path: ./output_videos_sq/

LLMC 会生成使用伪量化模型生成的视频结果。


1.4 使用 lightx2v 进行模型推理#

1.4.1 权重结构转换#

LLMC 导出后,需将模型结构转换为 lightx2v 支持的格式,可使用 转换脚本

python converter.py -s /path/to/save_for_lightx2v/ -o /path/to/output/ -d backward

转换后的模型将保存在 /path/to/output/

1.4.2 离线推理#

编辑 推理脚本,设置 model_path/path/to/output/lightx2v_path 为本地路径,然后运行:

bash run_wan_i2v_advanced_ptq.sh