昇思25天學習打卡營第10天 | 使用靜態圖加速
文章目錄
- 昇思25天學習打卡營第10天 | 使用靜態圖加速
- 動態圖的開啟方式
- 靜態圖的開啟方式
- 基于全局context的開啟方式
- 基于修飾器的開啟方式
- 總結
- 打卡
AI編譯框架分為兩種運行模式:
- 動態圖模式: 計算圖的構建和計算同時發生(define by run),符合python的解釋執行方式。在調試模型時較為方便,能夠實時得到中間結果的值。但由于所有節點都需要保存,導致難以對整個計算圖進行優化。
- 靜態圖模式: 計算圖的構建和實際計算分開(define and run)。在MindSpore中靜態圖模式又稱Graph模式,基于圖優化、計算圖整圖下沉等技術,編譯器可以對圖進行全局的優化,獲得較好的性能。適用于網絡固定且需要高性能的場景。
動態圖的開啟方式
在MindSpore中,動態圖又被稱為PyNative模式。可以通過:
mindspore.set_context(mode=mindspore.PYNATIVE_MODE)
進行全局啟用。
靜態圖的開啟方式
基于全局context的開啟方式
mindspore.set_context(mode=mindspore.GRAPH_MODE)
基于修飾器的開啟方式
使用jit
修飾器修飾Python函數或者Python類的成員函數使其被編譯成計算圖。而模型的其他部分任舊使用解釋執行方式,在性能優化的同時而不丟失動態圖的靈活性。
@mindspore.jit # 使用ms.jit裝飾器,使被裝飾的函數以靜態圖模式運行
def run(x):model = Network()return model(x)output = run(input)
或者
def run(x):model = Network()return model(x)run_with_jit = ms.jit(run)
output = run(input)
總結
這一節的內容對MindSpore框架中的兩種計算模式進行了介紹,動態圖模式十分靈活,可以方便的獲取中間結果,但由于節點是運行時定義并計算的,所以難以進行優化。而靜態圖模式模式直接編譯計算圖,可以方便的進行性能優化。通過jit
修飾器可以在不失動態圖靈活性的情況下對部分計算進行優化。