Ascend NPU上适配Step1X-Edit模型

1 概述

1.1 简述

Step1X-Edit:一个在各种真实用户指令下表现出现的统一图像编辑模型。

Step1X-Edit,其性能可与 GPT-4o 和 Gemini2 Flash 等闭源模型相媲美。更具体地说,我们采用了多模态LLM 来处理参考图像和用户的编辑指令。我们提取了潜在嵌入,并将其与扩散图像解码器相结合,从而获得目标图像。为了训练模型,我们建立了一个数据生成管道,以生成高质量的数据集。为了进行评估,我们开发了 GEdit-Bench,这是一种植根于真实世界用户指令的新型基准。在 GEdit-Bench 上的实验结果表明,Step1X-Edit 的性能大大优于现有的开源基线,并接近领先的专有模型,从而为图像编辑领域做出了重大贡献。更多的技术信息可以参考https://arxiv.org/abs/2504.17761

模型链接:https://modelers.cn/models/StepFun/Step1X-Edit-npu

2 环境准备

2.1 获取CANN安装包&环境准备

版本支持列表

软件包版本
CANN8.0.0
PTA6.0.0
HDK24.1.0
pytorch2.3.1
Python3.11

2.2 Pytorch & CANN安装

  • Pytorch & Ascend Extension for PyTorch安装(https://www.hiascend.com/document/detail/zh/Pytorch/600/configandinstg/instg/insg_0001.html)》
    以下是python3.11,pytorch2.3.1,PTA插件版本6.0.0,系统架构是AArch64,CANN版本是8.0.0的安装信息:
# 下载PyTorch安装包
wget https://download.pytorch.org/whl/cpu/torch-2.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
# 下载torch_npu插件包
wget https://gitee.com/ascend/pytorch/releases/download/v6.0.0-pytorch2.3.1/torch_npu-2.3.1.post4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
# 安装命令
pip3 install torch-2.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
pip3 install torch_npu-2.3.1.post4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
  • 软件包下载Atlas 800I A2
  • CANN包安装
    以下是CANN包中需要安装的run包信息:
# 增加软件包可执行权限,{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

2.3 依赖包安装

由于NPU下当前对Triton的inductor后端支持并不完备,请注释requirements.txt中的liger_kernel依赖信息,具体如下:

  • liger_kernel -> # liger_kernel

然后执行如下命令安装依赖:

pip install -r requirements.txt

注意:NPU上有单独的flash_attn算子实现,可以不用安装flash_attn库。

3 模型下载

  • Huggingface
模型链接
Step1X-Edit🤗huggingface
  • 魔乐社区
模型链接
Step1X-Editmodelers

4 执行推理

  1. 获取Step1X-Edit的源码
    git clone https://github.com/stepfun-ai/Step1X-Edit.git

  2. 修改scripts/run_examples.sh种的model_path参数的值为模型下载的路径。

执行如下命令进行推理,如下

bash scripts/run_examples.sh

执行成功后,会在当前目录下生成2个文件夹,分别是output_cn和output_en。对应examples目录下2种prompt(中文和英文)。结果如下:

Prompt(中文):给这个女生的脖子上戴一个带有红宝石的吊坠
在这里插入图片描述

Prompt(英文):Change the outerwear to be made of top-grain calfskin.
在这里插入图片描述

5 FAQ

5.1 问题1:rms_norm

Traceback (most recent call last):File "/home/Step1X-Edit/Step1X-Edit/inference.py", line 23, in <module>from modules.model_edit import Step1XParams, Step1XEditFile "/home/Step1X-Edit/Step1X-Edit/modules/model_edit.py", line 8, in <module>from .connector_edit import Qwen2ConnectorFile "/home/Step1X-Edit/Step1X-Edit/modules/connector_edit.py", line 8, in <module>from .layers import MLP, TextProjection, TimestepEmbedder, apply_gate, attentionFile "/home/Step1X-Edit/Step1X-Edit/modules/layers.py", line 27, in <module>from liger_kernel.ops.rms_norm import LigerRMSNormFunction
ModuleNotFoundError: No module named 'liger_kernel'

解决:
替换掉liger_kernel,使用npu版本的npu_rms_norm
RmsNorm & RmsNormGrad-融合算子替换-NPU亲和适配优化-性能调优方法-性能调优-PyTorch 训练模型迁移调优指南-模型开发-Ascend Extension for PyTorch6.0.0开发文档-昇腾社区

5.2 问题2:liger_kernel

File "/usr/local/lib/python3.11/site-packages/transformers/configuration_utils.py", line 594, in get_config_dictconfig_dict, kwargs = cls._get_config_dict(pretrained_model_name_or_path, **kwargs)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "/usr/local/lib/python3.11/site-packages/transformers/configuration_utils.py", line 653, in _get_config_dictresolved_config_file = cached_file(^^^^^^^^^^^^File "/usr/local/lib/python3.11/site-packages/transformers/utils/hub.py", line 385, in cached_fileraise EnvironmentError(
OSError: We couldn't connect to 'https://huggingface.co' to load this file, couldn't find it in the cached files and it looks like Qwen/Qwen2.5-VL-7B-Instruct is not the path to a directory containing a file named config.json.
Checkout your internet connection or see how to run the library in offline mode at 'https://huggingface.co/docs/transformers/installation#offline-mode'
ModuleNotFoundError: No module named 'liger_kernel'

解决:
liger_kernel是triton的模块,当前npu下并未实现,需要去掉,算子直接用NPU的acclNN相关算子。

5.3 问题3: flash_atten

File "/usr/local/lib/python3.11/site-packages/transformers/modeling_utils.py", line 4179, in from_pretrainedconfig = cls._autoset_attn_implementation(^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "/usr/local/lib/python3.11/site-packages/transformers/modeling_utils.py", line 1575, in _autoset_attn_implementationcls._check_and_enable_flash_attn_2(File "/usr/local/lib/python3.11/site-packages/transformers/modeling_utils.py", line 1710, in _check_and_enable_flash_attn_2raise ImportError(f"{preface} the package flash_attn seems to be not installed. {install_message}")
ImportError: FlashAttention2 has been toggled on, but it cannot be used due to the following error: the package flash_attn seems to be not installed. Please refer to the documentation of https://huggingface.co/docs/transformers/perf_infer_gpu_one#flashattention-2 to install Flash Attention 2.
[ERROR] 2025-04-25-14:53:48 (PID:7549, Device:0, RankID:-1) ERR99999 UNKNOWN application exception
+ python inference.py --input_dir ./examples --model_path /home/Step1X-Edit/weight/ --json_path ./examples/prompt_cn.json --output_dir ./output_cn --seed 1234 --size_level 1024

解决:
flash_atten是gpu相关的,没有对应安装包。修改模型导入时候使用attn_implementation参数。

self.model = Qwen2_5_VLForConditionalGeneration.from_pretrained(model_path,torch_dtype=dtype,
-            attn_implementation="flash_attention_2",
+            #attn_implementation=" eager",).to(torch.cuda.current_device())

改用attn_implementation = “eager”。

5.4 问题4:torch.compile

File "/usr/local/lib64/python3.11/site-packages/torch/_inductor/graph.py", line 1307, in compile_to_fnreturn self.compile_to_module().call^^^^^^^^^^^^^^^^^^^^^^^^File "/usr/local/lib64/python3.11/site-packages/torch/_dynamo/utils.py", line 262, in time_wrapperr = func(*args, **kwargs)^^^^^^^^^^^^^^^^^^^^^File "/usr/local/lib64/python3.11/site-packages/torch/_inductor/graph.py", line 1250, in compile_to_moduleself.codegen_with_cpp_wrapper() if self.cpp_wrapper else self.codegen()^^^^^^^^^^^^^^File "/usr/local/lib64/python3.11/site-packages/torch/_inductor/graph.py", line 1203, in codegenself.init_wrapper_code()File "/usr/local/lib64/python3.11/site-packages/torch/_inductor/graph.py", line 1134, in init_wrapper_codewrapper_code_gen_cls is not None
torch._dynamo.exc.BackendCompilerFailed: backend='inductor' raised:
AssertionError: Device npu not supportedSet TORCH_LOGS="+dynamo" and TORCHDYNAMO_VERBOSE=1 for more information

解决:
去掉torch,compile的特性。当前npu不支持inductor。

5.5 问题5:flash_attn_func

File "/usr/local/lib64/python3.11/site-packages/torch/nn/modules/module.py", line 1532, in _wrapped_call_implreturn self._call_impl(*args, **kwargs)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "/usr/local/lib64/python3.11/site-packages/torch/nn/modules/module.py", line 1541, in _call_implreturn forward_call(*args, **kwargs)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "/home/Step1X-Edit/Step1X-Edit/modules/layers.py", line 557, in forwardattn = attention_after_rope(q, k, v, pe=pe)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "/home/Step1X-Edit/Step1X-Edit/modules/layers.py", line 370, in attention_after_ropex = attention(q, k, v, mode="flash")^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "/home/Step1X-Edit/Step1X-Edit/modules/attention.py", line 82, in attentionassert flash_attn_func is not None, "flash_attn_func未定义"^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: flash_attn_func未定义
[ERROR] 2025-04-25-15:20:18 (PID:20394, Device:0, RankID:-1) ERR99999 UNKNOWN application exception

答:使用torch的mode,走acllnn的flashattention。

5.6 问题6:精度问题

在这里插入图片描述

出来的结果图片,完全是乱码,像是马赛克。
解决:
由于torch.nn.functional.scaled_dot_product_attention导致的精度问题,需要改成torch_npu.npu_fusion_attention的接口,并修改对应的接口参数。
参考:
FlashAttentionScore-融合算子替换-NPU亲和适配优化-性能调优方法-性能调优-PyTorch 训练模型迁移调优指南-模型开发-Ascend Extension for PyTorch6.0.0开发文档-昇腾社区

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/84412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WEB3全栈开发——面试专业技能点P8DevOps / 区块链部署

一、Hardhat / Foundry 进行合约部署 概念介绍 Hardhat 和 Foundry 都是以太坊智能合约开发的工具套件&#xff0c;支持合约的编译、测试和部署。 它们允许开发者在本地或测试网络快速开发智能合约&#xff0c;并部署到链上&#xff08;测试网或主网&#xff09;。 部署过程…

【题解-洛谷】B4292 [蓝桥杯青少年组省赛 2022] 路线

题目&#xff1a;B4292 [蓝桥杯青少年组省赛 2022] 路线 题目描述 有一个旅游景区&#xff0c;景区中有 N N N 个景点&#xff0c;景点以数字 1 1 1 到 N N N 编号&#xff0c;其中编号为 N N N 的景点为游客服务中心所在地。景区中有 M M M 条连接路线&#xff0c;每条…

MySQL体系架构解析(四):MySQL数据存储的揭秘

MySQL中的数据目录 确定MySQL的数据目录 到底MySQL把数据都存到哪个路径下呢&#xff1f;其实数据木对应着一个系统变量datadir&#xff0c;我们在使用客户端与服务器建立连接之后查看这个系统变量的值就可以了。 -- 以下两种方式都可以 show variables like datadir; selec…

Solidity从入门到精通-Remix的基本使用和Solidity的基本数据类型

Solidity从入门到精通-Remix的基本使用和Solidity的基本数据类型 讲了那么多理论&#xff0c;相信大家对区块链/web3也有了一定认知&#xff1b;这时候可能就问有人会问了如何把理论变成实际的代码实现。 这就来了接下来会给大家分享Solidity入门教程 这时候就会有同学问了Sol…

ArcGIS Pro+ArcGIS给你的地图加上北回归线!

今天来看ArcGIS Pro和ArcGIS中如何给制作的中国地图或者其他大范围地图加上北回归线。 我们将在ArcGIS Pro和ArcGIS中一同介绍。 1 ArcGIS Pro中设置北回归线 1、在ArcGIS Pro中初步设置好经纬格网等&#xff0c;设置经线、纬线都以10间隔显示。 2、需要插入背会归线&#xf…

在.NET Core控制器中获取AJAX传递的Body参数

.Net Core是支持前后端不分离式的开发的&#xff0c;如果在原始系统中采用不分离式开发&#xff0c;后面需要在原系统中增加功能&#xff0c;并且新的服务采用其他语言开发&#xff0c;且系统原来功能保持原样&#xff0c;这样前端系统可以单独调用新开发的接口。 但是&#x…

ubuntu24安装opencv过程

1.访问opencv官网&#xff0c;下载源代码。 opencv 2.选择相应版本的源码下载 我这里用的是4.8.1版本的源码进行安装&#xff0c;opencv-4.8.1.tar.gz 安装命令 tar xvf opencv-4.8.1.tar.gz #在当前文件夹创建build文件&#xff0c;并进入 mkdir build && cd build …

Kubernetes ClusterIP 端口深度解析:虚拟服务与流量转发机制

事情的起因是创建了一个 NodePort 类型 Service&#xff0c;其端口映射关系为 8000:30948/TCP。既然30948是在每个node开的端口&#xff0c;那8000是开在哪的呢&#xff1f;出于好奇回顾了一下K8s的Cluster IP和Service 端口映射关系解析 在 Kubernetes 的 NodePort Service 中…

C++左值与右值及引用的总结

前言 在C中&#xff0c;理解左值&#xff08;lvalue&#xff09;和右值&#xff08;rvalue&#xff09;是掌握现代C核心特性的关键。左值通常指代具名的、持久存在的对象&#xff0c;可以取地址&#xff1b;而右值则是临时的、即将销毁的值&#xff0c;如字面量或表达式结果。…

学习记录:DAY31

Java课设&#xff1a;数字水印处理与解析器开发 前言 想养成写日记的习惯真不容易。最近比较懒散&#xff0c;复习不想复&#xff0c;项目又做完了&#xff0c;处于一种能干些什么&#xff0c;但是不太想干&#xff0c;但是不干些什么又浑身难受的处境。其实完全就不是匀不出…

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008&#xff1a;是version产品的大版本。 R006&#xff1a;是release产品特性版本。 C009&#xff1a;是通用版 B0014&#xff1a;是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存&#xff1a;1GB 以上 硬盘&#xf…

系统模块与功能设计框架

系统模块与功能设计框架&#xff0c;严格遵循专业架构设计原则&#xff0c;基于行业标准&#xff08;如微服务架构、DDD领域驱动设计&#xff09;构建。设计采用分层解耦模式&#xff0c;确保可扩展性和可维护性&#xff0c;适用于电商、企业服务、数字平台等中大型系统。 系统…

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …

Prompt工程学习之自我一致性

自我一致性 &#xff08;Self-consistency&#xff09; 概念&#xff1a;该技术通过对同一问题采样不同的推理路径&#xff0c;并通过多数投票选择最一致的答案&#xff0c;来解决大语言模型&#xff08;LLM&#xff09;输出的可变性问题。通过使用不同的温度&#xff08;temp…

gh hugging face使用

install sudo dpkg -i gh_2.74.0_linux_amd64.deb gh auth login gh auth login ? Where do you use GitHub? GitHub.com ? What is your preferred protocol for Git operations on this host? HTTPS ? Authenticate Git with your GitHub credentials? Yes ? How wo…

2025.6.9总结(利与弊)

凡事都有两面性。在大厂上班也不例外。今天找开发定位问题&#xff0c;从一个接口人不断溯源到另一个 接口人。有时候&#xff0c;不知道是谁的责任填。将工作内容分的很细&#xff0c;每个人负责其中的一小块。我清楚的意识到&#xff0c;自己就是个可以随时替换的螺丝钉&…

数据集-目标检测系列- 口红嘴唇 数据集 lips >> DataBall

贵在坚持&#xff01; * 相关项目 1&#xff09;数据集可视化项目&#xff1a;gitcode: https://gitcode.com/DataBall/DataBall-detections-100s/overview 2&#xff09;数据集训练、推理相关项目&#xff1a;GitHub - XIAN-HHappy/ultralytics-yolo-webui: ultralytics-yo…

[论文阅读] 人工智能+项目管理 | 当 PMBOK 遇见 AI:传统项目管理框架的破局之路

当PMBOK遇见AI&#xff1a;传统项目管理框架的“AI适配指南” 论文信息 arXiv:2506.02214 Is PMBOK Guide the Right Fit for AI? Re-evaluating Project Management in the Face of Artificial Intelligence Projects Alexey Burdakov, Max Jaihyun Ahn Subjects: Software …

CentOS7关闭防火墙、Linux开启关闭防火墙

文章目录 一、firewalld开启、关闭防火墙1、查看防火墙状态 一、firewalld开启、关闭防火墙 以下命令在linux系统CentOS7中操作开启关闭防火墙 # 查询防火墙状态 systemctl status firewalld.service # 开启防火墙 systemctl start firewalld.service # 开机自启动防火墙 syste…

Spring是如何实现无代理对象的循环依赖

无代理对象的循环依赖 什么是循环依赖解决方案实现方式测试验证 引入代理对象的影响创建代理对象问题分析 源码见&#xff1a;mini-spring 什么是循环依赖 循环依赖是指在对象创建过程中&#xff0c;两个或多个对象相互依赖&#xff0c;导致创建过程陷入死循环。以下通过一个简…