让改图更easy!基于昇腾玩转全能图像编辑模型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 版本配套表
配套 | 版本 |
Python | 3.10 or 3.11 |
torch | 2.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公众号