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
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84412.shtml
英文地址,請注明出處:http://en.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;導致創建過程陷入死循環。以下通過一個簡…