首页 > 其他分享 >昇思25天学习打卡营第8天|使用静态图加速

昇思25天学习打卡营第8天|使用静态图加速

时间:2024-07-04 22:30:21浏览次数:12  
标签:__ 25 Dense nn 静态 self 28 打卡 512

        神经网络编译框架分为两种运行模式,分别是动态图模式以及静态图模式。MindSpore默认情况下是以动态图模式运行,但也支持手工切换为静态图模式。

动态图模式:

        该模式类似Python的解释执行方式,一边编译一遍执行。在计算图中定义一个Tensor时,其值就已经被计算且确定,因此在调试模型时较为方便,能够实时得到中间结果的值,但由于所有节点都需要被保存,导致难以对整个计算图进行优化。在MindSpore中,动态图模式又被称为PyNative模式。

        适用场景:调试网络模型场景。

import numpy as np
import mindspore as ms
from mindspore import nn, Tensor
ms.set_context(mode=ms.PYNATIVE_MODE)  # 使用set_context进行动态图模式的配置

class Network(nn.Cell):
    def __init__(self):
        super().__init__()
        self.flatten = nn.Flatten()
        self.dense_relu_sequential = nn.SequentialCell(
            nn.Dense(28*28, 512),
            nn.ReLU(),
            nn.Dense(512, 512),
            nn.ReLU(),
            nn.Dense(512, 10)
        )

    def construct(self, x):
        x = self.flatten(x)
        logits = self.dense_relu_sequential(x)
        return logits

model = Network()
input = Tensor(np.ones([64, 1, 28, 28]).astype(np.float32))
output = model(inp

静态图模式:

        该模式属于编译模式,将计算图的构建和实际计算分开,先将网络模型进行编译,然后再执行。在MindSpore中,静态图模式又被称为Graph模式,在Graph模式下,基于图优化、计算图整图下沉等技术,编译器可以针对图进行全局的优化,获得较好的性能,因此比较适合网络固定且需要高性能的场景。

        适用场景:网络模型固定且高性能场景。

        静态图模式的开启方式:基于装饰器的开启方式以及基于全局context的开启方式。

(1)基于装饰器的开启方式:MindSpore提供了jit装饰器,可以通过修饰Python函数或者Python类的成员函数使其被编译成计算图,通过图优化等技术提高运行速度。

  • 无论全局context是设置成静态图模式还是动态图模式,被jit修饰的部分始终会以静态图模式进行运行。
  • jit装饰器只能用来修饰函数,无法对类进行修饰。

        jit修饰函数:

import numpy as np
import mindspore as ms
from mindspore import nn, Tensor

class Network(nn.Cell):
    def __init__(self):
        super().__init__()
        self.flatten = nn.Flatten()
        self.dense_relu_sequential = nn.SequentialCell(
            nn.Dense(28*28, 512),
            nn.ReLU(),
            nn.Dense(512, 512),
            nn.ReLU(),
            nn.Dense(512, 10)
        )

    def construct(self, x):
        x = self.flatten(x)
        logits = self.dense_relu_sequential(x)
        return logits

input = Tensor(np.ones([64, 1, 28, 28]).astype(np.float32))

@ms.jit  # 使用ms.jit装饰器,使被装饰的函数以静态图模式运行
def run(x):
    model = Network()
    return model(x)

output = run(input)
print(output)

        调用jit方法变换函数:

import numpy as np
import mindspore as ms
from mindspore import nn, Tensor

class Network(nn.Cell):
    def __init__(self):
        super().__init__()
        self.flatten = nn.Flatten()
        self.dense_relu_sequential = nn.SequentialCell(
            nn.Dense(28*28, 512),
            nn.ReLU(),
            nn.Dense(512, 512),
            nn.ReLU(),
            nn.Dense(512, 10)
        )

    def construct(self, x):
        x = self.flatten(x)
        logits = self.dense_relu_sequential(x)
        return logits

input = Tensor(np.ones([64, 1, 28, 28]).astype(np.float32))

def run(x):
    model = Network()
    return model(x)

run_with_jit = ms.jit(run)  # 通过调用jit将函数转换为以静态图方式执行
output = run(input)
print(output)

(2)基于context的开启方式: 全局模式。

import numpy as np
import mindspore as ms
from mindspore import nn, Tensor
ms.set_context(mode=ms.GRAPH_MODE)  # 使用set_context进行运行静态图模式的配置

class Network(nn.Cell):
    def __init__(self):
        super().__init__()
        self.flatten = nn.Flatten()
        self.dense_relu_sequential = nn.SequentialCell(
            nn.Dense(28*28, 512),
            nn.ReLU(),
            nn.Dense(512, 512),
            nn.ReLU(),
            nn.Dense(512, 10)
        )

    def construct(self, x):
        x = self.flatten(x)
        logits = self.dense_relu_sequential(x)
        return logits

model = Network()
input = Tensor(np.ones([64, 1, 28, 28]).astype(np.float32))
output = model(input)
print(output)

 

标签:__,25,Dense,nn,静态,self,28,打卡,512
From: https://blog.csdn.net/ww824306/article/details/140191027

相关文章

  • HMAC SHA256对称加密
    HMACSHA256是一种对称加密算法。以下是关于HMACSHA256以及对称加密和非对称加密的详细解释:HMACSHA256HMAC(Hash-basedMessageAuthenticationCode)是一种基于哈希函数的消息认证码,它通过结合一个秘密密钥和一个哈希算法来生成消息摘要,从而验证消息的完整性和真实性。HMAC......
  • 【计算机毕业设计】025基于weixin小程序移动学习平台
    ......
  • GBU2510-ASEMI储能专用整流桥GBU2510
    编辑:llGBU2510-ASEMI储能专用整流桥GBU2510型号:GBU2510品牌:ASEMI封装:GBU-4正向电流(Id):25A反向耐压(VRRM):1000V正向浪涌电流:200A正向电压(VF):1.10V引脚数量:4芯片个数:4芯片尺寸:88MIL功率(Pd):中小功率设备工作温度:-55°C~150°C类型:整流扁桥、插件整流桥应用领域工业电源......
  • C语言函数静态库和动态库的创建和使用
    使用库函数是源码的一种保护???<我猜的.>库函数其实不是新鲜的东西,我们一直都在用,比如C库.我们执行pringf()这个函数的时候,就是调用C库的函数. 下面记录静态库和动态库的生成和使用. 静态库:libxxx.a动态库:libxxx.so 静态库: 在程序编译的时候,将库编译进可......
  • 【Elasticsearch】Elasticsearch动态映射与静态映射详解
    文章目录......
  • LeetCode 2528. 最大化城市的最小电量
    2528.最大化城市的最小电量给你一个下标从 0 开始长度为 n 的整数数组 stations ,其中 stations[i] 表示第 i 座城市的供电站数目。每个供电站可以在一定 范围 内给所有城市提供电力。换句话说,如果给定的范围是 r ,在城市 i 处的供电站可以给所有满足 |i-j......
  • 如何给虚拟机中centos7设置静态ip和能够访问外网
    1.打开终端,并进入network-scripts文件夹下(必须要root角色登录,以获取修改权限)cd/etc/sysconfig/network-scripts/2.打开ifcfg-ens33 viifcfg-ens33 3.确认虚拟机ip起始,以设置静态ip,确认网关和dns1,以设置网关掩码  4.打开ifcfg-ens33,设置静态路由,并打开网络开关......
  • Java 中的主方法( main 方法)签名是什么?为什么主方法必须是静态的?
    在Java中,主方法(main方法)是每个应用程序的起点,是Java虚拟机(JVM)调用的第一个方法。它的签名是固定的,必须符合以下格式:1publicstaticvoidmain(String[]args)这个签名包含了几个关键的部分:public:表明这个方法是公开的,可以从任何地方被调用。static:表示这是一个静态方法,意味......
  • 代码训练营 DAY4打卡
      本文由GarfieldTheOldCat原创,转载请标明dekkyandlappy-CSDN博客今天学习了链表的第二课时,链表基础内容在代码训练营DAY3打卡 本文由GarfieldTheOldCat原创,转载请标明两两交换链表中的节点这道题目的第一个难点在于对题目意思的理解,什么是两两交换?举个例子:【A,B,C,D】......
  • java之静态属性方法
    在java中有一个static的关键字,它用来修饰类的成员。如果用static修饰属性,该属性被称为静态属性静态属性的访问格式如下类名.属性名如果没有修饰静态属性示例代码如下classXuesheng1{ Stringname; intage; Stringschool="A大学"; publicXuesheng1(Stringname,int......