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 返回为1,3,512,512注意img输入维度为1,3,512,512
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 返回为1,512,512,3
模型读取部分修改为,其余不变
记得推理前执行以下前面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
相关文章:

MLU上使用MagicMind GFPGANv1.4 onnx加速!
文章目录 前言一、平台环境准备二、环境准备1.GFPGAN代码处理2.MagicMind转换修改env.sh修改run.sh参数解析运行 3.修改后模型运行 前言 MagicMind是面向寒武纪MLU的推理加速引擎。MagicMind能将人工智能框架(TensorFlow、PyTorch、Caffe与ONNX等)训练好…...

VulnHub—potato-suncs
使用命令扫描靶机ip arp-scan -l 尝试访问一下ip 发现一个大土豆没什么用 尝试扫描一下子域名 没有发现什么有用的信息 尝试扫描端口 namp -A 192.168.19.137 -p- 尝试访问一下端口,发现都访问不进去 查看源代码发现了网页的标题 potato,就想着爆破一下密码 hydr…...

【Flink CDC】Flink CDC的Schema Evolution表结构演变的源码分析和流程图
Flink CDC版本:3.2.1 说明:本文从SchemaOperator接收到,表结构变更事件开始,表结构变更事件应由source端产生,本文不讨论。 可以先看流程图,研究源码。 参考文章: Flink cdc3.0动态变更表结构—…...

【智能算法】改进蚁狮优化算法【matlab】
目录 1 主要内容 2 部分程序 3 程序结果 下载链接 1 主要内容 该程序方法复现《改进蚁狮算法的无线传感器网络覆盖优化》两种改进算法模型,即原始ALO算法的基础上添加了两种改进策略: - 改进1:将原先的间断性边界收缩因子变为连续性边界…...
swagger导出json
要将 Swagger(或者 OpenAPI)文档导出为 JSON 文件,通常有几种常见的方法,具体取决于你使用的 Swagger 工具(如 Swagger UI、Swagger Editor、Swagger Hub 等)。下面列出了几种常见的导出 JSON 文件的方法。 1. 通过 Swagger UI 导出 JSON 文件 如果你在使用 Swagger UI…...
Go语言的 的引用数据类型(Reference Data Types)核心知识
Go语言的引用数据类型(Reference Data Types)核心知识 引言 Go语言作为一种现代编程语言,因其简洁的语法、强大的并发支持以及丰富的标准库而受到广泛欢迎。在Go语言中,数据类型可以分为值类型和引用类型。本文将深入探讨Go语言…...
JAVA解析Excel复杂表头
废话不多说,直接上源码。前后端都有哦~~~~~~~~ 能帮到你记得点赞收藏哦~~~~~~~&#…...

jmeter 中 BeanShell 预处理程序、JSR223后置处理程序使用示例
1. 各个组件如何新建的? 2. "http请求" 组件内容样例: "消息体数据" 源码: {"task_tag": "face_detect","image_type": "base64","extra_args": [{"model"…...

我的创作纪念日——《惊变128天》
我的创作纪念日——《惊变128天》 机缘收获日常成就憧憬 机缘 时光飞逝,转眼间,我已在这条创作之路上走过了 128 天。回顾起 2024 年 8 月 29 日,我满怀忐忑与期待,撰写了第一篇技术博客《讲解LeetCode第1题:两数之和…...
vuedraggable 选项介绍
vuedraggable 是基于 SortableJS 的 Vue 组件,提供了丰富的选项来定制拖拽行为。以下是 vuedraggable 常用的选项和它们的详细说明: 常用选项介绍 group 配置拖拽分组。多个列表可以共享同一个分组,允许它们之间的项目互相拖拽。 group: { na…...
微信小程序获取后端数据
在小程序中获取后端接口数据 通常可以使用 wx.request 方法,以下是一个基本示例: // pages/index/index.js Page({data: {// 用于存储后端返回的数据resultData: [] },onLoad() {this.fetchData();},fetchData() {wx.request({url: https://your-backe…...
ThreadLocal` 的工作原理
ThreadLocal 的工作原理: ThreadLocal 是 Java 提供的一个类,它用于为每个线程提供独立的变量副本。也就是说,多个线程访问同一个 ThreadLocal 变量时,每个线程看到的值都是不同的,相互隔离,互不干扰。 T…...
数据挖掘教学指南:从基础到应用
数据挖掘教学指南:从基础到应用 引言 数据挖掘是大数据时代的核心技术之一,它从大量数据中提取有用信息和知识。本教学文章旨在为学生和初学者提供一个全面的数据挖掘学习指南,涵盖数据挖掘的基本概念、流程、常用技术、工具以及教学建议。…...
大模型搜索引擎增强问答demo-纯python实现
流程概览 本文使用python语言,实现了大模型搜索引擎增强问答demo。 大模型搜索引擎增强问答定义:根据问题搜索得到相关内容,拼接prompt=问题+搜索结果,将这个prompt传入大模型,得到最终的结果。 优势在于搜索引擎可以返回实时性信息,例如明日双色球开奖信息、最新八卦…...

【C语言程序设计——选择结构程序设计】按从小到大排序三个数(头歌实践教学平台习题)【合集】
目录😋 任务描述 编程要求 相关知识 1. 选择结构 2. 主要语句类型 3. 比较操作 4. 交换操作 测试说明 通关代码 测试结果 任务描述 本关任务:从键盘上输入三个数,请按从小到大的顺序排序并打印输出排序后的结果。 编程要求 根据提示…...

简洁安装配置在Windows环境下使用vscode开发pytorch
简洁安装配置在Windows环境下使用vscode开发pytorch 使用anaconda安装pytorch,通过vscode集成环境开发pytorch 下载 anaconda 下载网址,选择对应系统的版本 https://repo.anaconda.com/archive/ windows可以选择Anaconda3-2024.10-1-Windows-x86_64.e…...

conda安装及demo:SadTalker实现图片+音频生成高质量视频
1.安装conda 下载各个版本地址:https://repo.anaconda.com/archive/ win10版本: Anaconda3-2023.03-1-Windows-x86_64 linux版本: Anaconda3-2023.03-1-Linux-x86_64 Windows安装 环境变量 conda -V2.配置conda镜像源 安装pip conda…...
【面试】后端开发面试中常见数据结构及应用场景、原理总结
在后端开发面试中,常见的数据结构包括数组、链表、栈、队列、二叉树、平衡树、堆、图和哈希表等。以下是这些数据结构的总结,包括它们的应用场景、优缺点。 常见数据结构及其应用场景 数据结构应用场景数组存储固定大小的数据集合,如学生成…...

141.《mac m系列芯片安装mongodb详细教程》
文章目录 下载从官网下载安装包 下载后双击解压出文件夹安装文件名修改为 mongodb配置data存放位置和日志log的存放位置启动方式一方式二方式二:输入mongo报错以及解决办法 本人电脑 m2 pro,属于 arm 架构 下载 官网地址: mongodb官网 怎么查看自己电脑应该下载哪个版本,输入…...
Java 23 集合框架详解:ArrayList、LinkedList、Vector
📚 Java 23 集合框架详解:ArrayList、LinkedList、Vector 在 Java 集合框架中,ArrayList、LinkedList 和 Vector 是三种最常用的 List 接口实现类。它们都可以存储有序的、可重复的元素,但它们在 底层实现、性能 和 多线程安全 等…...

为什么React列表项需要key?(React key)(稳定的唯一标识key有助于React虚拟DOM优化重绘大型列表)
文章目录 1. **帮助 React 识别列表项的变化**2. **性能优化**3. **避免组件状态混乱**4. **为什么使用 rpid 作为 key**5. **不好的做法示例**6. **✅ 正确的做法** 在 React 中添加 key{item.rpid} 是非常重要的,主要有以下几个原因: 1. 帮助 React 识…...

以智能管理为基础,楼宇自控打造建筑碳中和新路径
在全球气候变化的严峻形势下,“碳中和”已成为各国发展的重要战略目标。建筑行业作为能源消耗与碳排放的“大户”,其运行阶段的能耗占全社会总能耗近40%,碳排放占比与之相当,实现建筑碳中和迫在眉睫。传统建筑管理模式下ÿ…...
接IT方案编写(PPT/WORD)、业务架构设计、投标任务
1、IT 方案编写(PPT/WORD) 定制化方案:根据客户需求,提供涵盖云计算、大数据、人工智能等前沿技术领域的 PPT/WORD 方案编写服务,精准提炼核心价值,呈现专业技术内容。 逻辑清晰架构:采用…...

1、Go语言基础中的基础
摘要:马士兵教育的Go语言基础的视频笔记。 第一章:走进Golang 1.1、Go的SDK介绍 1.2、Go的项目基本目录结构 1.3、HelloWorld 1.4、编译 1.5、执行 1.6、一步到位 1.7、执行流程分析 1.8、语法注意事项 (1)源文件以"go&qu…...

uniapp 安卓 APP 后台持续运行(保活)的尝试办法
在移动应用开发领域,安卓系统的后台管理机制较为复杂,应用在后台容易被系统回收,导致无法持续运行。对于使用 Uniapp 开发的安卓 APP 来说,实现后台持续运行(保活)是很多开发者面临的重要需求,比…...

智能制造数字孪生全要素交付一张网:智造中枢,孪生领航,共建智造生态共同体
在制造业转型升级的浪潮中,数字孪生技术正成为推动行业变革的核心引擎。从特斯拉通过数字孪生体实现车辆全生命周期优化,到海尔卡奥斯工业互联网平台赋能千行百业,数字孪生技术已从概念验证走向规模化落地。通过构建覆盖全国的交付网络&#…...

Python----目标检测(YOLO简介)
一、 YOLO简介 [YOLO](You Only Look Once)是一种流行的物体检测和图像分割模型, 由华盛顿大学的约瑟夫-雷德蒙(Joseph Redmon)和阿里-法哈迪(Ali Farhadi)开发,YOLO 于 2015 年推出,…...
第16节 Node.js 文件系统
Node.js 提供一组类似 UNIX(POSIX)标准的文件操作API。 Node 导入文件系统模块(fs)语法如下所示: var fs require("fs") 异步和同步 Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本ÿ…...

机器学习:决策树和剪枝
本文目录: 一、决策树基本知识(一)概念(二)决策树建立过程 二、决策树生成(一)ID3决策树:基于信息增益构建的决策树。(二)C4.5决策树(三ÿ…...

告别数据泥沼,拥抱智能中枢:King’s四位一体重塑科研生产力
在现代科研的战场上,数据堪称科研人员手中的“弹药”。然而,许多实验室却深陷数据管理的泥沼:硬盘里堆满了不同年份的实验记录,U盘里塞着各种格式的谱图,Excel表格里还留着手动计算的痕迹……,当科研人员想…...