日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

图算融合优化示例

發(fā)布時間:2023/11/28 生活经验 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图算融合优化示例 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

圖算融合優(yōu)化示例
概述
圖算融合是MindSpore特有的網(wǎng)絡(luò)性能優(yōu)化技術(shù)。它可以通過自動分析和優(yōu)化現(xiàn)有網(wǎng)絡(luò)計算圖邏輯,并結(jié)合目標(biāo)硬件能力,對計算圖進(jìn)行計算化簡和替代、算子拆分和融合、算子特例化編譯等優(yōu)化,以提升設(shè)備計算資源利用率,實現(xiàn)對網(wǎng)絡(luò)性能的整體優(yōu)化。相比傳統(tǒng)優(yōu)化技術(shù),圖算融合具有多算子跨邊界聯(lián)合優(yōu)化、與算子編譯跨層協(xié)同、基于Polyhedral的算子即時編譯等獨特優(yōu)勢。另外,圖算融合只需要用戶打開對應(yīng)配置后,整個優(yōu)化過程即可自動完成,不需要網(wǎng)絡(luò)開發(fā)人員進(jìn)行其它額外感知,使得用戶可以聚焦網(wǎng)絡(luò)算法實現(xiàn)。
圖算融合的適用場景包括:
? 對網(wǎng)絡(luò)執(zhí)行時間具有較高性能要求的場景;
? 通過拼接基本算子實現(xiàn)自定義組合算子,并希望對這些基本算子進(jìn)行自動融合,以提升自定義組合算子性能的場景。
使用方法
當(dāng)前圖算融合優(yōu)化默認(rèn)關(guān)閉狀態(tài),我們只需在訓(xùn)練腳本中為context指定參數(shù)enable_graph_kernel=True即可啟用圖算融合:
from mindspore import context
context.set_context(enable_graph_kernel=True)
圖算融合優(yōu)化只支持Graph模式。
樣例腳本
為了說明圖算融合優(yōu)化場景,我們構(gòu)造了一個簡單網(wǎng)絡(luò)MyNet, 包含一個乘法和加法計算。在打開圖算融合進(jìn)行優(yōu)化之后,這兩個計算便會自動合成一個融合算子:
import numpy as np
import mindspore.context as context
from mindspore import Tensor
from mindspore.nn import Cell
import mindspore.ops as ops

context.set_context(mode=context.GRAPH_MODE, device_target=“GPU”)

save graph ir to view fusion detail.

context.set_context(save_graphs=True)

enable graph kernel optimization.

context.set_context(enable_graph_kernel=True)

class MyNet(Cell):
def init(self):
super(MyNet, self).init()
self.add = ops.Add()
self.mul = ops.Mul()

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

x = np.ones((4, 4)).astype(np.float32) * 0.5
net = MyNet()
result = net(Tensor(x))
print(“result: {}”.format(result))
輸出結(jié)果:
result: [[2. 2. 2. 2.]
[2. 2. 2. 2.]
[2. 2. 2. 2.]
[2. 2. 2. 2.]]
該計算圖的融合結(jié)果如圖1所示,其中左圖為未使能圖算融合時的對應(yīng)計算圖,右圖為使能圖算融合后的對應(yīng)計算圖。可以看到該網(wǎng)絡(luò)中的加法和乘法被融合成一個算子。該融合過程可以通過查看中間IR,或者通過Profiling等工具跟蹤算子執(zhí)行過程進(jìn)行驗證。

圖1:圖算融合優(yōu)化計算圖
自定義組合算子
基于圖算融合技術(shù),用戶可以很方便地實現(xiàn)高性能的自定義組合算子。其主要流程為:

  1. 在腳本中用基本算子組合的方式實現(xiàn)自定義算子定義和使用;
  2. 打開圖算融合配置;
  3. 圖算融合對自定義組合算子中的基本算子自動進(jìn)行算子融合,并生成高性能融合算子。
    相比其它自定義算子方式,這種方式具有對框架無侵入、簡單易用等優(yōu)點。
    樣例腳本
    我們構(gòu)造一個簡單網(wǎng)絡(luò)MyNet,并在其中使用了自定義算子MyOp。代碼樣例如下:
    import numpy as np
    import mindspore.context as context
    from mindspore import Tensor
    from mindspore.nn import Cell
    import mindspore.ops.operations as P

context.set_context(mode=context.GRAPH_MODE, device_target=“GPU”)

enable graph kernel optimization.

context.set_context(enable_graph_kernel=True)

class MyOp(Cell):
“”" my first custom OP composited by basic OPs “”"
def init(self):
super(MyOp, self).init()
self.sub = P.Sub()
self.mul = P.Mul()

def construct(self, x, y):a = self.sub(x, y)return self.mul(a, x)

class MyNet(Cell):
def init(self):
super(MyNet, self).init()
self.mul = P.Mul()
self.pow = P.Pow()
self.my_op = MyOp()

def construct(self, x, y):a = self.mul(x, 2.0)b = self.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(Tensor(x), Tensor(y))
print(“result: {}”.format(result))
輸出結(jié)果:
result: [[-0.015104 -0.015104 -0.015104 -0.015104]
[-0.015104 -0.015104 -0.015104 -0.015104]
[-0.015104 -0.015104 -0.015104 -0.015104]
[-0.015104 -0.015104 -0.015104 -0.015104]]
該計算圖的融合結(jié)果如圖2所示,其中左圖為未使能圖算融合時的對應(yīng)計算圖,右圖為使能圖算融合后的對應(yīng)計算圖。可以看到不僅自定義算子MyOp中的基本算子進(jìn)行了融合,并且與主圖中的其他算子也進(jìn)行了更大范圍融合。該融合過程可以通過查看中間IR,或者通過Profiling等工具跟蹤算子執(zhí)行過程進(jìn)行驗證。

圖2:自定義組合算子優(yōu)化計算圖

總結(jié)

以上是生活随笔為你收集整理的图算融合优化示例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。