昇腾社区首页
中文
注册
让改图更easy!基于昇腾玩转全能图像编辑模型Qwen-Image-Edit

让改图更easy!基于昇腾玩转全能图像编辑模型Qwen-Image-Edit

昇腾部署全能图像编辑模型Qwen-Image-Edit

发表于 2025/08/20

8月19日,通义千问团队推出了 Qwen-Image-Edit,Qwen-Image的图像编辑版本。该模型基于20B的Qwen-Image模型进⼀步训练,将Qwen-Image的独特的文本渲染能力延展至图像编辑领域,实现了对图片中文字的精准编辑。此外,Qwen-Image-Edit将输⼊图像同时输⼊到Qwen2.5-VL(实现视觉语义控制)和VAE Encoder(实现视觉外观控制),从而兼具语义与外观的双重编辑能力。

昇腾支持该模型开箱部署推理,目前适配模型已上线魔乐社区,欢迎下载体验!

模型链接:https://modelers.cn/models/MindIE/Qwen-Image-Edit

01 模型介绍

Qwen-Image-Edit的亮点包括:

  • 语义与外观双重编辑: Qwen-Image-Edit不仅⽀持low-level的视觉外观编辑(如元素的添加、删除、修改等,要求图片其他区域完全不变),也支持 high-level 的视觉语义编辑(如 IP 创作、物体旋转、风格迁移等,允许整体像素变化但保持语义一致)。
  • 精准⽂字编辑: Qwen-Image-Edit 支持中英文双语文字编辑,可在保留原有字体、字号、风格的前提下,直接对图片中的文字进行增、删、改等操作。
  • 强⼤的基准性能: 在多个公开基准测试中的评估表明,Qwen-Image-Edit 在图像编辑任务上具备SOTA性能,是一个强大的图像编辑基础模型。

千问团队以Qwen的吉祥物卡皮巴拉为例,展示了该模型的强大的语义编辑能力,轻松地进行了原创IP的多样化创作。

MindIE SD团队,也基于该模型进行了系列创作。通过Qwen-Image生成了MindIE SD的可爱图片。

(图片由AI生成)

并基于该图片进行了系列创作,

(图片由AI生成)

接下来, 手把手教你基于MindIE在魔乐社区下载和部署模型该模型。

02 准备运行环境

表 1 版本配套表

配套版本
Python3.10 or 3.11
torch2.1.0

1. 获取CANN&MindIE安装包&环境准备

  • • 设备支持



            Atlas 800I/800T A2(8*64G)推理设备:支持的卡数最小为1
  • • Atlas 800I/800T A2(8*64G): https://www.hiascend.com/developer/download/community/result?module=pt+ie+cann&product=4&model=32
  • • 环境准备指导: https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/80RC2alpha002/softwareinst/instg/instg_0001.html

2. 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

3. 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

4. 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

03 下载权重

1. 权重及配置文件说明

Qwen-Image-Edit权重链接:

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

04 Qwen-Image-Edit使用

1. 推理前准备

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

# 2. python相关依赖安装
pip install git+https://github.com/huggingface/diffusers
pip install transformers==4.52.4

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

# 4. 替换pipeline_qwenimage_edit文件
cp -r pipeline_qwenimage_edit.py "$DIFFUSERS_PATH/pipelines/qwenimage/pipeline_qwenimage_edit.py"

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

2. Qwen-Image-Edit推理

2.1 单卡性能测试

等价优化

执行命令:

export ROPE_FUSE=1
export ADALN_FUSE=1

python run_edit.py  \
--model_name ./Qwen-Image-Edit  \
--device_id 0  \

参数说明:

• model_name: 权重路径

• device_id: 执行模型推理的芯片id

算法优化

执行命令:

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

python run_edit.py  \
--model_name ./Qwen-Image-Edit  \

参数说明:

• model_name: 权重路径

• device_id: 执行模型推理的芯片id

05 推理结果参考

Atlas 800I A2(1*64G) 64核(arm)性能数据(开启CFG功能,不使用cache算法加速)

Atlas 800I A2(1*64G) 64核(arm)性能数据(开启CFG功能,使用cache算法加速)

Q&A

若使用torch2.2以下版本时,需要注释掉"$DIFFUSERS_PATH/models/attention_dispatch.py"中481行和490行的torch.library接口的使用,否则会由于兼容性问题报错。修改后的代码如下所示:

# @torch.library.custom_op("flash_attn_3::_flash_attn_forward", mutates_args=(), device_types="cuda")
def _wrapped_flash_attn_3_original(
    query: torch.Tensor, key: torch.Tensor, value: torch.Tensor
) -> Tuple[torch.Tensor, torch.Tensor]:
    out, lse = flash_attn_3_func(query, key, value)
    lse = lse.permute(0, 2, 1)
    return out, lse


# @torch.library.register_fake("flash_attn_3::_flash_attn_forward")
def _(query: torch.Tensor, key: torch.Tensor, value: torch.Tensor) -> Tuple[torch.Tensor, torch.Tensor]:
    batch_size, seq_len, num_heads, head_dim = query.shape
    lse_shape = (batch_size, seq_len, num_heads)
    return torch.empty_like(query), query.new_empty(lse_shape)

欢迎体验

欢迎大家下载体验Qwen-Image-Edit。如您在使用模型的过程中,发现任何问题(包括但不限于功能问题、合规问题),请在模型的讨论区提交issue,相关开发者将及时审视并解答。

图片来源:通义千问Qwen公众号

本页内容