MLU上使用MagicMind GFPGANv1.4 onnx加速!

文章目錄

  • 前言
  • 一、平臺環境準備
  • 二、環境準備
    • 1.GFPGAN代碼處理
    • 2.MagicMind轉換
      • 修改env.sh
      • 修改run.sh
      • 參數解析
      • 運行
    • 3.修改后模型運行


前言

MagicMind是面向寒武紀MLU的推理加速引擎。MagicMind能將人工智能框架(TensorFlow、PyTorch、Caffe與ONNX等)訓練好的算法模型轉換成MagicMind統一計算圖表示,并提供端到端的模型優化、代碼生成以及推理業務部署能力。MagicMind 致力于為用戶提供高性能、靈活、易用的編程接口以及配套工具,讓用戶能夠專注于推理業務開發和部署本身,而無需過多關注底層硬件細節。
如果有用MLU、GPU、CPU訓練好的算法模型,可以使用MagicMind快速地實現在MLU上部署推理業務。MagicMind的優勢在于它能為MLU上的推理業務提供:

極致的性能優化。可靠的精度。盡可能少的內存占用。靈活的定制化開發能力。簡潔易用的接口。

MagicMind適用(但不限于)以下推理業務場景:

圖像處理(分類、檢測、分割)。視頻處理。自然語言處理。姿態檢測。搜索、推薦。

MagicMind支持不同的系統平臺和MLU硬件平臺。MagicMind面向云端業務和端側業務,提供了統一的編程界面,并針對兩種業務場景的差異點,提供了必要的定制化功能(比如面向端側部署提供了remote debug功能)。

具體參考:https://www.cambricon.com/docs/sdk_1.15.0/magicmind_1.7.0/user_guide/2_introduction/0_what_is_magicmind/what_is_magicmind.html


一、平臺環境準備

鏡像選擇:pytorch:v24.10-torch2.4.0-torchmlu1.23.1-ubuntu22.04-py310 【本次mm操作,對鏡像需求不是很高,只需對其相關版本即可】
卡選擇:任意一款MLU3系列及以上卡

二、環境準備

1.GFPGAN代碼處理

git clone https://github.com/xuanandsix/GFPGAN-onnxruntime-demo.git
#下載gfpgan原始模型
wget https://githubfast.com/TencentARC/GFPGAN/releases/download/v1.3.0/GFPGANv1.4.pth
#轉onnx操作
python torch2onnx.py  --src_model_path ./GFPGANv1.4.pth --dst_model_path ./GFPGANv1.4.onnx --img_size 512 
#onnx推理
python demo_onnx.py --model_path GFPGANv1.4.onnx --image_path ./cropped_faces/Adele_crop.png --save_path Adele_v3.jpg

在這里插入圖片描述
性能:

(pytorch) root@notebook-mm-100semv-notebook-0:/workspace/volume/guojunceshi2/mmgfpgan/GFPGAN-onnxruntime-demo# python demo_onnx.py 
infer time: 2.8468078281730413
infer time: 2.2596635334193707
infer time: 3.117730548605323

2.MagicMind轉換

#mmwhl包安裝
pip install magicmind-1.13.0-cp310-cp310-linux_x86_64.whl
#代碼拷貝
git clone https://gitee.com/cambricon/magicmind_cloud.git
#1,環境變量配置
cd magicmind_cloud/buildin/cv/classification/resnet50_onnx/

修改env.sh


export NEUWARE_HOME=/usr/local/neuware  #主要是這一行重要其余不變
export MM_RUN_PATH=${NEUWARE_HOME}/bin
#本sample工作路徑
export PROJ_ROOT_PATH=$(cd $(dirname "${BASH_SOURCE[0]}");pwd)
export MAGICMIND_CLOUD=${PROJ_ROOT_PATH%buildin*}
export MODEL_PATH=${PROJ_ROOT_PATH}/data/models# CV類網絡通用文件路徑
export UTILS_PATH=${MAGICMIND_CLOUD}/buildin/cv/utils# Python公共組件路徑
export PYTHON_COMMON_PATH=${MAGICMIND_CLOUD}/buildin/python_common
# CPP公共接口路徑
export CPP_COMMON_PATH=$MAGICMIND_CLOUD/buildin/cpp_commonhas_add_common_path=$(echo ${PYTHONPATH}|grep "${PYTHON_COMMON_PATH}")
if [ -z ${has_add_common_path} ];thenexport PYTHONPATH=${PYTHONPATH}:${PYTHON_COMMON_PATH}
fihas_add_util_path=$(echo ${PYTHONPATH}|grep "${UTILS_PATH}")
if [ -z ${has_add_util_path} ];thenexport PYTHONPATH=${PYTHONPATH}:${UTILS_PATH}
fi

然后source env.sh

修改run.sh

#!/bin/bash
set -e
set -xmagicmind_model=face_force_float32_true
precision=force_float32
batch_size=1
dynamic_shape=falsepython gen_model.py --precision ${precision} \--input_dims ${batch_size} 3 512 512 \--batch_size ${batch_size} \-dynamic_shape ${dynamic_shape} \--magicmind_model ${magicmind_model} \--input_layout NHWC \--dim_range_min 1 3 512 512 \--dim_range_max 64 3 512 512 \--onnx /workspace/volume/guojunceshi2/mmgfpgan/GFPGAN-onnxruntime-demo/gfpgan14.onnx

參數解析

–precision 可選。精度模式,默認采用float32運行整個網絡,即值為:force_float32。force_float32:所有算子以FLOAT32作為輸入精度和輸出數據類型,且中間結果也是FLOAT32。force float16:所有算子以FLOAT16作為輸入精度和輸出數據類型,且中間結果也是FLOAT16。qint8_mixed float32:模擬量化算子以FLOAT32作為輸入,先量化成INT8,再轉成FLOAT32進行計算,其他非量化算子的輸入精度和輸出數據類型和中間結果都是FLOAT32。qint16_mixed_foat32:模擬量化算子以FLOAT32作為輸入,先量化成INT16,再轉成FLOAT32進行計算,其他非量化算子的輸入精度和輸出數據類型和中間結果都是FLOAT32。
qint8_mixed _float16:模擬量化算子以FLOAT16作為輸入,先量化成INT8,再轉成FLOAT16進行計算,其他非量化算子的輸入精度和輸出數據類型和中間結果都是FLOAT16。ONNX支持的模擬量化算子包括:Conv1D,Conv2D,Conv3D,ConvTranspose1D,ConvTrans-pose2D,Gemm,MatMul。模擬量化相關概念見模擬量化。

–input_dims 輸入維度
–dynamic_shape

運行

生成 face_force_float32_true文件
在這里插入圖片描述
注意輸入維度和輸出維度

3.修改后模型運行

原始模型讀取部分

img = img.transpose(0, 3, 1, 2)
pre_process 返回為13512512注意img輸入維度為13512512
ort_inputs = {self.ort_session.get_inputs()[0].name: img}
ort_outs = self.ort_session.run(None, ort_inputs)

修改后

img = img.transpose(0, 1, 2, 3)
pre_process 返回為15125123
模型讀取部分修改為,其余不變
記得推理前執行以下前面source env.sh操作
from mm_runner import MMRunner
self.ort_session = MMRunner(mm_file = "face_force_float32_true",device_id = 0)
ort_outs = self.ort_session([img])

運行效果

2025-01-06 10:49:16,886: INFO: mm_runner.py:20] Model instance Created Success!
2025-01-06 10:49:16,898: INFO: mm_runner.py:32] Model dev Created Success!
2025-01-06 10:49:17,516: INFO: mm_runner.py:39] Model engine Created Success!
2025-01-06 10:49:17,644: INFO: mm_runner.py:43] Model context Created Success!
2025-01-06 10:49:17,645: INFO: mm_runner.py:47] Model queue Created Success!
2025-01-06 10:49:17,645: INFO: mm_runner.py:50] Model inputs Created Success!
2025-01-06 10:49:17,645: INFO: mm_runner.py:51] All Model resource Created Success!
infer time: 0.11474167183041573
infer time: 0.04283882491290569
infer time: 0.040602266788482666
infer time: 0.04028203524649143
infer time: 0.04049760662019253
infer time: 0.04016706347465515
infer time: 0.04045788757503033
infer time: 0.04026786610484123
infer time: 0.041572125628590584
infer time: 0.04047401808202267
infer time: 0.04045314900577068
infer time: 0.04047247767448425
infer time: 0.04037348926067352
infer time: 0.04047695733606815
infer time: 0.04112406447529793

在這里插入圖片描述
顯存消耗

Every 2.0s: cnmon                                                                                              notebook-mm-100semv-notebook-0: Mon Jan  6 10:49:26 2025Mon Jan  6 10:49:26 2025
+------------------------------------------------------------------------------+
| CNMON v5.10.29                                               Driver v5.10.29 |
+-------------------------------+----------------------+-----------------------+
| Card  VF  Name       Firmware |               Bus-Id | Util        Ecc-Error |
| Fan   Temp      Pwr:Usage/Cap |         Memory-Usage | Mode     Compute-Mode |
|===============================+======================+=======================|
| 0     /   MLU370-M8    v1.1.4 |         0000:69:00.0 | 73%                 0 |
|  0%   34C        179 W/ 300 W |   731 MiB/ 42396 MiB | FULL          Default |
+-------------------------------+----------------------+-----------------------+
| 1     /   MLU370-M8    v1.1.4 |         0000:72:00.0 | 0%                  0 |
|  0%   27C         50 W/ 300 W |     0 MiB/ 42396 MiB | FULL          Default |
+-------------------------------+----------------------+-----------------------++------------------------------------------------------------------------------+
| Processes:                                                                   |
|  Card  MI  PID     Command Line                             MLU Memory Usage |
|==============================================================================|
|  0     /   40007   python                                            650 MiB |
+------------------------------------------------------------------------------+

優化前:2.84-3.0s

優化后:0.04-0.1s

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/65594.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/65594.shtml
英文地址,請注明出處:http://en.pswp.cn/web/65594.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于大數據的基礎知識(一)——定義特征結構要素

成長路上不孤單😊😊😊😊😊😊 【14后😊///計算機愛好者😊///持續分享所學😊///如有需要歡迎收藏轉發///😊】 今日分享關于大數據的基礎知識(一&a…

H5通過URL Scheme喚醒手機地圖APP

1.高德地圖 安卓URL Scheme:baidumap:// 官方文檔:https://lbs.amap.com/api/amap-mobile/guide/android/navigation IOS URL Scheme:iosamap:// 官方文檔:https://lbs.amap.com/api/amap-mobile/guide/ios/navi HarmonyOS NEXT U…

音視頻入門基礎:MPEG2-PS專題(5)——FFmpeg源碼中,解析PS流中的PES流的實現

音視頻入門基礎:MPEG2-PS專題系列文章: 音視頻入門基礎:MPEG2-PS專題(1)——MPEG2-PS官方文檔下載 音視頻入門基礎:MPEG2-PS專題(2)——使用FFmpeg命令生成ps文件 音視頻入門基礎…

國標GB28181-2022視頻平臺EasyGBS小知識:局域網ip地址不夠用怎么解決?

在局域網中,IP地址不足的問題通常不會在小型網絡中出現,但在擁有超過255臺設備的大型局域網中,就需要考慮如何解決IP地址不夠用的問題了。 在企業局域網中,經常會出現私有IP地址如192.168.1.x到192.168.1.255不夠用的情況。由于0…

spring boot啟動源碼分析(三)之Environment準備

上一篇《spring-boot啟動源碼分析(二)之SpringApplicationRunListener》 環境介紹: spring boot版本:2.7.18 主要starter:spring-boot-starter-web 本篇開始講啟動過程中Environment環境準備,Environment是管理所有…

springmvc前端傳參,后端接收

RequestMapping注解 Target({ElementType.METHOD, ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Documented Mapping public interface RequestMapping {String name() default "";AliasFor("path")String[] value() default {};AliasFor(&quo…

分布式鎖 Redis vs etcd

為什么要實現分布式鎖?為什么需要分布式鎖,分布式鎖的作用是什么,哪些場景會使用到分布式鎖?分布式鎖的實現方式有哪些分布式鎖的核心原理是什么 如何實現分布式鎖redis(自旋鎖版本)etcd 的分布式鎖(互斥鎖(信號控制)版本) 分布式鎖對比redis vs etcd 總結 為什么要實現分布式…

【Excel/WPS】根據平均值,生成兩列/多列指定范圍的隨機數/隨機湊出兩列數據

原理就是通過隨機生成函數和平均值函數。 適用場景:在總體打分后,需要在小項中隨機生成小分數 第一列:固定的平均值A2第二列: RANDBETWEEN(A2-10,A210)第三列:根據第二列用平均值函數算除 A2*2-B2這是隨機值1的公式&am…

芯片詳細講解,從而區分CPU、MPU、DSP、GPU、FPGA、MCU、SOC、ECU

目錄 芯片的概念結構 芯片的派系劃分 通用芯片(CPU,MPU,GPU,DSP) 定制芯片(FPGA,ASIC) 芯片之上的集成(MCU,SOC,ECU) 軟硬件的匹…

運動相機拍攝的視頻打不開怎么辦

3-10 GoPro和大疆DJI運動相機的特點,小巧、高清、續航長、拍攝穩定,很多人會在一些重要場合用來拍攝視頻,比如可以用來拿在手里拍攝快速運動中的人等等。 但是畢竟是電子產品,有時候是會出點問題的,比如意外斷電、摔重…

智能化文檔開發(DI)

這個文檔涉及到多模態(文本、發票、訂單、語音) 對于普通的文本,我們希望對某些實體的某些屬性挖空生成文檔模版,并根據預設字段填空最后生成正式文件對于發票、訂單,我們想提取它的字段信息,寫入DB對于一些…

CSS語言的編程范式

CSS語言的編程范式 引言 在現代網頁開發中,CSS(層疊樣式表)作為一種樣式語言,承擔著網站前端呈現的重要角色。無論是簡單的靜態網頁還是復雜的單頁應用,CSS都在人機交互中發揮著至關重要的作用。掩蓋在美觀背后的&am…

【輕松學C:編程小白的大冒險】--- C語言簡介 02

在編程的藝術世界里,代碼和靈感需要尋找到最佳的交融點,才能打造出令人為之驚嘆的作品。而在這座秋知葉i博客的殿堂里,我們將共同追尋這種完美結合,為未來的世界留下屬于我們的獨特印記。 【輕松學C:編程小白的大冒險】…

零基礎 監控數據可視化 Spring Boot 2.x(Actuator + Prometheus + Grafana手把手) (上)

一、安裝Prometheus Releases prometheus/prometheus GitHubhttps://github.com/prometheus/prometheus/releases 或 https://prometheus.io/download/https://prometheus.io/download/ 1. 下載適用于 Windows 的二進制文件: 找到最新版本的發布頁面&#xf…

Idea日志亂碼

問題描述 前提:本人使用windows Idea運行sh文件,指定了utf-8編碼,但是運行過程中還是存在中文亂碼 Idea的相關配置都已經調整 字體調整為雅黑 文件編碼均調整為UTF-8 調整Idea配置文件 但是還是存在亂碼,既然Idea相關配置已經…

Linux 注冊線程化的中斷處理程序

1. 注冊線程化中斷處理函數 devmem_request_threaded_irq 是 Linux 內核中的一個函數,用于請求并注冊一個線程化的中斷處理程序。這個函數允許開發者注冊一個中斷處理函數,這個函數會在中斷發生時被調用,從而實現相應的中斷處理邏輯。它通過…

MySQL 數據表與索引設計藝術:打造高效數據存取架構

🐇明明跟你說過:個人主頁 🏅個人專欄:《MySQL技術精粹》🏅 🔖行路有良友,便是天堂🔖 目錄 一、引言 1、什么是MySQL 2、MySQL適用場景 二、MySQL的數據存儲與檢索 1、數據表…

安卓硬件加速hwui

安卓硬件加速 本文基于安卓11。 從 Android 3.0 (API 級別 11) 開始,Android 2D 渲染管道支持硬件加速,這意味著在 View 的畫布上執行的所有繪圖操作都使用 GPU。由于啟用硬件加速所需的資源增加,你的應用程序將消耗更多內存。 軟件繪制&am…

海信116英寸RGB-Mini LED:一朵綻放在科技穹頂的中國花火

東方古鎮的打鐵花,拉斯維加斯的煙花秀,盛大的花火表演總會在歲末年初的時候,吸引世界各地人們的目光。一年一度的科技展會,也起到煙花秀一樣的作用,讓人們提前望見未知的精彩。 CES還沒開始,CES 2025展會的…

超簡單,使用Kube-Vip實現K8s高可用VIP詳細教程

具體步驟如下: 以下步驟在其中一個 master 上操作即可, 1、參數配置 export VIP192.168.0.110 export INTERFACEens33 export KVVERSIONv0.8.7VIP 是虛擬IP地址,和主機同一個網段,且未被占用。INTERFACE 是你當前主機的網絡接口…