首页 > 其他分享 >昇思MindSpore进阶教程--使能图算融合

昇思MindSpore进阶教程--使能图算融合

时间:2024-10-01 14:53:39浏览次数:9  
标签:使能 进阶 自定义 ops -- 融合 图算 ms 算子

大家好,我是刘明,明志科技创始人,华为昇思MindSpore布道师。
技术上主攻前端开发、鸿蒙开发和AI算法研究。
努力为大家带来持续的技术分享,如果你也喜欢我的文章,就点个关注吧

正文开始

图算融合是MindSpore特有的网络性能优化技术。它可以通过自动分析和优化现有网络计算图逻辑,并结合目标硬件能力,对计算图进行计算化简和替代、算子拆分和融合、算子特例化编译等优化,以提升设备计算资源利用率,实现对网络性能的整体优化。相比传统优化技术,图算融合具有多算子跨边界联合优化、与MindSpore AKG(基于Polyhedral的算子编译器)跨层协同、即时编译等独特优势。另外,图算融合只需要用户打开对应配置后,整个优化过程即可自动完成,不需要网络开发人员进行其它额外感知,使得用户可以聚焦网络算法实现。
图算融合的适用场景包括:

  • 对网络执行时间具有较高性能要求的场景;
  • 通过拼接基本算子实现自定义组合算子,并希望对这些基本算子进行自动融合,以提升自定义组合算子性能的场景。

使用方法

当前图算融合优化默认关闭状态,我们只需在训练脚本中为context指定参数enable_graph_kernel=True即可启用图算融合:

import mindspore as ms
ms.set_context(enable_graph_kernel=True)

样例脚本

为了说明图算融合优化场景,我们构造了一个简单网络MyNet, 包含一个乘法和加法计算。在打开图算融合进行优化之后,这两个计算便会自动合成一个融合算子:

import numpy as np
import mindspore as ms
from mindspore.nn import Cell
import mindspore.ops as ops

ms.set_context(mode=ms.GRAPH_MODE, device_target="GPU")
# save graph ir to view fusion detail.
ms.set_context(save_graphs=2)
# enable graph kernel optimization.
ms.set_context(enable_graph_kernel=True)

class MyNet(Cell):
    def construct(self, x):
        a = ops.mul(x, 2.0)
        res = ops.add(a, 1.0)
        return res

x = np.ones((4, 4)).astype(np.float32) * 0.5
net = MyNet()
result = net(ms.Tensor(x))
print("result: {}".format(result))

该计算图的融合结果如图1所示,其中左图为未使能图算融合时的对应计算图,右图为使能图算融合后的对应计算图。可以看到该网络中的加法和乘法被融合成一个算子。该融合过程可以通过查看中间IR,或者通过Profiling等工具跟踪算子执行过程进行验证。

在这里插入图片描述

自定义组合算子

基于图算融合技术,用户可以很方便地实现高性能的自定义组合算子。其主要流程为:

  1. 在脚本中用基本算子组合的方式实现自定义算子定义和使用;

  2. 打开图算融合配置;

  3. 图算融合对自定义组合算子中的基本算子自动进行算子融合,并生成高性能融合算子。

相比其它自定义算子方式,这种方式具有对框架无侵入、简单易用等优点。

样例脚本

我们构造一个简单网络MyNet,并在其中使用了自定义算子MyOp。代码样例如下:

import numpy as np
import mindspore as ms
from mindspore.nn import Cell
import mindspore.ops as ops

ms.set_context(mode=ms.GRAPH_MODE, device_target="GPU")
# enable graph kernel optimization.
ms.set_context(enable_graph_kernel=True)

class MyOp(Cell):
    """ my first custom OP composited by basic OPs """
    def construct(self, x, y):
        a = ops.sub(x, y)
        return ops.mul(a, x)

class MyNet(Cell):
    def __init__(self):
        super(MyNet, self).__init__()
        self.my_op = MyOp()

    def construct(self, x, y):
        a = ops.mul(x, 2.0)
        b = ops.pow(a, 3.0)
        res = self.my_op(b, y)
        return res

x = np.ones((4, 4)).astype(np.float32) * 0.2
y = np.ones((4, 4)).astype(np.float32) * 0.3
net = MyNet()
result = net(ms.Tensor(x), ms.Tensor(y))
print("result: {}".format(result))

该计算图的融合结果如图2所示,其中左图为未使能图算融合时的对应计算图,右图为使能图算融合后的对应计算图。可以看到不仅自定义算子MyOp中的基本算子进行了融合,并且与主图中的其他算子也进行了更大范围融合。该融合过程可以通过查看中间IR,或者通过Profiling等工具跟踪算子执行过程进行验证。
在这里插入图片描述

标签:使能,进阶,自定义,ops,--,融合,图算,ms,算子
From: https://blog.csdn.net/weixin_42553583/article/details/142669197

相关文章

  • 计算机毕业设计 基于Python的摄影平台交流系统的设计与实现 Python+Django+Vue 前后端
    ......
  • 计算机毕业设计 基于Python的新闻采集与订阅平台的设计与实现 Python+Django+Vue 前后
    ......
  • 退休模式需求分析
    退休模式需求分析退休模式2+1无限链动模式详细分析:      退休模式是商城平台基于投资者用户开发的一套区块链市场投资返利方式。      投资者用户的注册额度:499元      投资者的推荐费用:100元             1指的是老板投资者  ......
  • 通过码流串,格式为key,len,val。提供key,查找val的算法。
    importjava.util.ArrayList;importjava.util.HashMap;importjava.util.UUID;publicclassHuaweiTest{publicstaticvoidmain(String[]args){//System.out.println("HelloWorld!");Stringtag="31";Stri......
  • Android Debug Bridge(ADB)完全指南
    文章目录前言一、什么是ADB?二、ADB的工作原理ADB由三个部分组成:三、如何安装ADBWindows系统:macOS和Linux系统:四、ADB常用指令大全设备相关操作1.查看连接的设备:2.重启设备:3.进入Bootloader模式:4.进入恢复模式(Recovery):5.查看设备运行状态:6.获取设备的序列号:7.查......
  • 【优选算法】(第十二篇)
    目录搜索旋转排序数组中的最⼩值(medium)题目解析讲解算法原理编写代码0〜n-1中缺失的数字(easy)题目解析讲解算法原理编写代码搜索旋转排序数组中的最⼩值(medium)题目解析1.题目链接:.-力扣(LeetCode)2.题目描述:整数数组nums按升序排列,数组中的值互不相同。在传......
  • Linux系统密码忘记
    Linux系统密码忘记1.故障背景误删除或修改/etc/passwd导致无法远程登录.禁止root远程登录,没有添加普通用户,无法远程登录.root密码忘记,无法远程登录.linux无法启动.2.解决方法root密码,恢复有备份的系统文件,都要重启系统,才能进入救援模式.解决方案应用场景......
  • 免费分享一套SpringBoot+Vue在线拍卖系统【论文+源码+SQL脚本+PPT】,帅呆了~~
    大家好,我是java1234_小锋老师,看到一个不错的SpringBoot+Vue在线拍卖系统,分享下哈。项目视频演示【免费】Springboot+Vue在线拍卖系统Java毕业设计_哔哩哔哩_bilibili项目介绍随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统......
  • Linux必备优化
    Linux必备优化1.关闭selinuxkylin系统#临时关闭setenforce0#永久关闭[root@web04~]#sed-i's#SELINUX=enforcing#SELINUX=disabled#g'/etc/selinux/config#检查显示Disabled就是关闭的[root@web04~]#grepdisabled/etc/selinux/configSELINUX=disable......
  • 《数据结构(刘大有)》学习(6)
    系列文章目录一、绪论二、顺序表、链表三、堆栈、队列四、数组五、字符串六、树目录树的基本概念树的定义树的特点树的相关术语度层数高度路径二叉树定义特点定理满二叉树定义特点完全二叉树定义特点二叉树的存储结构顺序存储结点结构优点缺点 链式存储 结点结构三......