Ascend-SACT/Qwen-Image
模型介绍文件和版本Pull Requests讨论分析

概述

Qwen-Image是由阿里通义千问团队研发的200亿参数图像生成基础模型,采用MMDiT架构,于2025年8月5日正式开源。Qwen-Image具有强大的文字渲染能力和精准的图像编辑能力。该模型支持中英文段落级文本渲染,能够生成包含复杂排版的海报、PPT页面等场景。

支持设备:Atlas 800I A2:支持的卡数最小为1

环境准备

CANN安装

# 增加软件包可执行权限,{version}表示软件版本号,{arch}表示CPU架构,{soc}表示昇腾AI处理器的版本。
chmod +x ./Ascend-cann-toolkit_{version}_linux-{arch}.run
chmod +x ./Ascend-cann-kernels-{soc}_{version}_linux.run

# 校验软件包安装文件的一致性和完整性
./Ascend-cann-toolkit_{version}_linux-{arch}.run --check
./Ascend-cann-kernels-{soc}_{version}_linux.run --check

# 安装
./Ascend-cann-toolkit_{version}_linux-{arch}.run --install
./Ascend-cann-kernels-{soc}_{version}_linux.run --install

# 设置环境变量
source /usr/local/Ascend/ascend-toolkit/set_env.sh

mindie安装

# 增加软件包可执行权限,{version}表示软件版本号,{arch}表示CPU架构。
chmod +x ./Ascend-mindie_${version}_linux-${arch}.run
./Ascend-mindie_${version}_linux-${arch}.run --check

# 方式一:默认路径安装
./Ascend-mindie_${version}_linux-${arch}.run --install
# 设置环境变量
cd /usr/local/Ascend/mindie && source set_env.sh

# 方式二:指定路径安装
./Ascend-mindie_${version}_linux-${arch}.run --install-path=${AieInstallPath}
# 设置环境变量
cd ${AieInstallPath}/mindie && source set_env.sh

Torch_npu安装

下载 pytorch_v{pytorchversion}_py{pythonversion}.tar.gz
tar -xzvf pytorch_v{pytorchversion}_py{pythonversion}.tar.gz
# 解压后,会有whl包
pip install torch_npu-{pytorchversion}.xxxx.{arch}.whl

模型权重

https://huggingface.co/Qwen/Qwen-Image

模型离线推理

推理前准备

#  1. 下载代码
git clone https://modelers.cn/MindIE/Qwen-Image.git && cd Qwen-Image

# 2. python相关依赖安装
pip install diffusers==0.35.1
pip install transformers==4.52.4
pip install yunchang==0.6.0

# 3. 用 Python 获取 diffusers 的安装目录
DIFFUSERS_PATH=$(python -c "import diffusers; import os; print(os.path.dirname(diffusers.__file__))")

# 4. 替换pipeline_qwenimage文件
cp -r pipeline_qwenimage.py "$DIFFUSERS_PATH/pipelines/qwenimage/pipeline_qwenimage.py"                   # 文生图场景
cp -r pipeline_qwenimage_img2img.py "$DIFFUSERS_PATH/pipelines/qwenimage/pipeline_qwenimage_img2img.py"   # 图生图场景
cp -r pipeline_qwenimage_inpaint.py "$DIFFUSERS_PATH/pipelines/qwenimage/pipeline_qwenimage_inpaint.py"   # inpainting场景

# 5. 替换transformer_qwenimage文件
cp -r transformer_qwenimage.py "$DIFFUSERS_PATH/models/transformers/transformer_qwenimage.py"

Qwen-Image文生图推理

等价优化

# 等价优化
export ROPE_FUSE=1
export ADALN_FUSE=1

python run.py  \
--model_path ./Qwen-Image  \
--device_id 0  \
--aspect_ratio "16:9"  \
--num_inference_steps 50  \
--prompt_file "prompts.txt"  \
--prompt_lang "en"

其中,参数详细描述如下:

  • model_path: 权重路径
  • device_id: 执行模型推理的芯片id
  • aspect_ratio: 宽高比,默认值为"16:9", 可选值为:{"1:1", "16:9", "9:16", "4:3", "3:4", "3:2", "2:3"}
  • num_inference_steps: 迭代步数
  • prompt_file: 文本提示词所在路径
  • prompt_lang:设置提示词所使用的语言,"en"表示英文,"zh"表示中文

算法优化

export ROPE_FUSE=1
export ADALN_FUSE=1
export COND_CACHE=1
export UNCOND_CACHE=1

python run.py  \
--model_path ./Qwen-Image  \
--device_id 0  \
--aspect_ratio "16:9"  \
--num_inference_steps 50  \
--prompt_file "prompts.txt"  \
--prompt_lang "en"

其中,参数详细描述如下:

  • model_path: 权重路径
  • device_id: 执行模型推理的芯片id
  • aspect_ratio: 宽高比,默认值为"16:9", 可选值为:{"1:1", "16:9", "9:16", "4:3", "3:4", "3:2", "2:3"}
  • num_inference_steps: 迭代步数
  • prompt_file: 文本提示词所在路径
  • prompt_lang:设置提示词所使用的语言,"en"表示英文,"zh"表示中文

多卡性能测试

8卡性能测试
export model_path="/home/weight/Qwen-Image/"
export quant_desc_path=" /home/Qwen-Image/quant_w8a8_dynamic_withoutData_use_disable_quant_layers/quant_model_description_w8a8_dynamic.json"

export LCCL_DETERMINISTIC=true  
export HCCL_DETERMINISTIC=true 
export ATB_MATMUL_SHUFFLE_K_ENABLE=0 
export ATB_LLM_LCOC_ENABLE=true      
export CLOSE_MATMUL_K_SHIFT=true     

# 等价优化  需要时开启
# export ROPE_FUSE=1
# export ADALN_FUSE=1

# cache算法优化 需要时开启
# export COND_CACHE=1
# export UNCOND_CACHE=1

# 8卡 cfg=2 ulysses=4
export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
torchrun --nproc_per_node=8 --master-port 29508 run_cfg_usp.py \
    --model_path ${model_path} \
    --prompt_file prompts.txt \
    --num_inference_steps 50 \
    --seed 42 \
    --output_dir "./base/baseline_cfg2_ulysses4_optimize_1+2" \
    --ulysses_size 4 \
    --cfg_size 2 \
    # --quant_desc_path ${quant_desc_path}

参数说明:

  • ASCEND_RT_VISIBLE_DEVICES: 选择的机器上的卡的编号,对于16卡机器,需要设定为连续的前8张或后8张
  • model_path: 权重路径
  • prompt_file: 文本提示词所在路径
  • prompt_lang:设置提示词所使用的语言,"en"表示英文,"zh"表示中文
  • aspect_ratio: 宽高比,默认值为"16:9", 可选值为:{"1:1", "16:9", "9:16", "4:3", "3:4", "3:2", "2:3"}
  • num_inference_steps: 推理的步数
  • seed: 设定种子
  • output_dir: 保存推理结果的路径
  • ulysses_size: ulysses并行数,使用时设定为24的因数
  • cfg_size: cfg并行数,使用时只能设定为2

Qwen-Image图生图推理

等价优化

export ROPE_FUSE=1
export ADALN_FUSE=1

python run_img2img.py  \
--model_path ./Qwen-Image  \
--device_id 0

其中,参数详细描述如下:

  • model_path: 权重路径
  • device_id: 执行模型推理的芯片id

算法优化

export ROPE_FUSE=1
export ADALN_FUSE=1
export COND_CACHE=1
export UNCOND_CACHE=1

python run_img2img.py  \
--model_path ./Qwen-Image  \
--device_id 0

其中,参数详细描述如下:

  • model_path: 权重路径
  • device_id: 执行模型推理的芯片id

多卡性能测试

8卡性能测试
export model_path="/home/weight/Qwen-Image/"
export quant_desc_path="/home/Qwen-Image/quant_w8a8_withoutData_use_disable_quant_layers/quant_model_description_w8a8_dynamic.json"

export LCCL_DETERMINISTIC=true  
export HCCL_DETERMINISTIC=true 
export ATB_MATMUL_SHUFFLE_K_ENABLE=0 
export ATB_LLM_LCOC_ENABLE=true      
export CLOSE_MATMUL_K_SHIFT=true     

# 等价优化  需要时开启
# export ROPE_FUSE=1
# export ADALN_FUSE=1

# cache算法优化 需要时开启
# export COND_CACHE=1
# export UNCOND_CACHE=1

# 8卡 cfg=2 ulysses=4
# export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
export ASCEND_RT_VISIBLE_DEVICES=8,9,10,11,12,13,14,15
torchrun --nproc_per_node=8 --master-port 29508 run_img2img_cfg_usp.py \
    --model_path ${model_path} \
    --img_path ./sketch-mountains-input.jpg \
    --prompt_file ./img2img_prompts.txt \
    --num_inference_steps 50 \
    --seed 42 \
    --output_dir "./img2img_baseline_cfg2_ulysses4_optimize_1+2" \
    --ulysses_size 4 \
    --cfg_size 2 \
    # --quant_desc_path ${quant_desc_path}

参数说明:

  • ASCEND_RT_VISIBLE_DEVICES: 选择的机器上的卡的编号,对于16卡机器,需要设定为连续的前8张或后8张
  • model_path: 权重路径
  • img_path: 输入图片路径
  • prompt_file: 文本提示词所在路径
  • num_inference_steps: 推理的步数
  • seed: 设定种子
  • output_dir: 保存推理结果的路径
  • ulysses_size: ulysses并行数,使用时设定为24的因数
  • cfg_size: cfg并行数,使用时只能设定为2

Qwen-Image inpainting推理

等价优化

export ROPE_FUSE=1
export ADALN_FUSE=1

python run_inpainting.py  \
--model_name ./Qwen-Image  \
--device_id 0

其中,参数详细描述如下:

  • model_path: 权重路径
  • device_id: 执行模型推理的芯片id

算法优化

export ROPE_FUSE=1
export ADALN_FUSE=1
export COND_CACHE=1
export UNCOND_CACHE=1

python run_inpainting.py  \
--model_name ./Qwen-Image  \
--device_id 0

其中,参数详细描述如下:

  • model_path: 权重路径
  • device_id: 执行模型推理的芯片id

多卡性能测试

8卡性能测试
export model_path="/home/weight/Qwen-Image/"
export quant_desc_path="/home/Qwen-Image/quant_w8a8_withoutData_use_disable_quant_layers/quant_model_description_w8a8_dynamic.json"

export LCCL_DETERMINISTIC=true  
export HCCL_DETERMINISTIC=true 
export ATB_MATMUL_SHUFFLE_K_ENABLE=0 
export ATB_LLM_LCOC_ENABLE=true      
export CLOSE_MATMUL_K_SHIFT=true     

# 算子优化
export ROPE_FUSE=1
export ADALN_FUSE=1

# 算法优化
export COND_CACHE=1
export UNCOND_CACHE=1

# 8卡 cfg=2 ulysses=4
export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
# export ASCEND_RT_VISIBLE_DEVICES=8,9,10,11,12,13,14,15
torchrun --nproc_per_node=8 --master-port 29508 run_inpainting_cfg_usp.py \
    --model_path ${model_path} \
    --source_img_path ./img_url.png \
    --mask_img_path ./mask_url.png \
    --prompt_file ./inpainting_prompts.txt \
    --num_inference_steps 50 \
    --seed 42 \
    --output_dir "./inpainting_baseline_cfg2_ulysses4_optimize_1+2" \
    --ulysses_size 4 \
    --cfg_size 2 \
    # --quant_desc_path ${quant_desc_path}

参数说明:

  • ASCEND_RT_VISIBLE_DEVICES: 选择的机器上的卡的编号,对于16卡机器,需要设定为连续的前8张或后8张
  • model_path: 权重路径
  • source_img_path: 原始图片路径
  • mask_img_path:mask图片路径
  • prompt_file: 文本提示词所在路径
  • num_inference_steps: 推理的步数
  • seed: 设定种子
  • output_dir: 保存推理结果的路径
  • ulysses_size: ulysses并行数,使用时设定为24的因数
  • cfg_size: cfg并行数,使用时只能设定为2