天天看點

深度解讀昇騰CANN多流并行技術,提高硬體資源使用率

作者:華為雲開發者聯盟

本文分享自華為雲社群《深度解讀昇騰CANN多流并行技術,提高硬體資源使用率-雲社群-華為雲》,作者:昇騰CANN。

随着人工智能應用日益成熟,文本、圖檔、音頻、視訊等非結構化資料的處理需求呈指數級增長,資料處理過程從通用計算逐漸向異構計算過渡。面對多樣化的計算需求,昇騰AI處理器内置豐富的硬體計算資源用于處理不同的計算任務。其中,AI Core、Vector Core與AI CPU分别負責AI計算場景下的矩陣、向量與标量計算,DVPP支援圖像、視訊等資料的加速處理,而HCCL作為華為集合通信庫,則提供單機多卡及多機多卡間的資料并行、模型并行集合通信方案。

深度解讀昇騰CANN多流并行技術,提高硬體資源使用率

在給定硬體算力的情況下,如何高效利用這些計算資源、提高計算效率顯得尤其重要。多樣化的計算任務以task的形式下發到各硬體資源執行,GE(Graph Engine)圖引擎采用多流并行算法,在滿足計算圖任務内部依賴關系的前提下,支援高效并發執行計算任務,進而大大提高硬體資源使用率和AI計算效率。

1 多流并行技術實作

計算圖編譯時,GE會為計算圖中的每個節點配置設定一個硬體資源(即對應一種執行引擎),在任務執行時按編譯時配置設定的stream排程順序下發到對應的引擎執行。

各引擎使用不同的硬體計算資源,若同一時間隻能執行某種引擎的一個task,則其餘引擎會處于閑置狀态,導緻硬體資源嚴重浪費,影響端到端性能。若采用多流并行技術,在滿足依賴關系的前提下,将不同task下發到對應的引擎上,驅動各個引擎并行執行,則可大大提升硬體資源的使用率。

GE采用了多流并行算法,将計算圖的拓撲結構、硬體資源規格和執行引擎作為計算要素,為每個節點配置設定Stream。Stream與硬體資源綁定,任務執行時會按編譯時配置設定的stream排程順序下發到對應的引擎執行。同一Stream上的任務串行執行,不同Stream間的任務并發執行,進而提升硬體計算資源使用率。

GE多流并行技術的實作流程如下:

1. 基于網絡節點功能和硬體資源特性,給每個節點配置設定執行引擎。

2. 基于網絡拓撲結構和每個節點的執行引擎,為每個節點配置設定Stream。配置設定Stream時會同時考慮硬體規格、資源使用率等,提升并發度。

3. 不同Stream間可以進行同步來保證執行時序。

GE多流并行主要包含以下場景:

1. 計算與通信引擎并行:計算算子(如Convolution、Add等)會生成計算task,通信算子(HcomAllReduce等)會生成卡間通信task,兩類task無拓撲依賴時可并發執行。

深度解讀昇騰CANN多流并行技術,提高硬體資源使用率

2. 不同計算引擎并行:矩陣運算(AI Core)、向量運算(VectorCore)和圖像預處理(DVPP)等不同引擎的task,可下發到不同的引擎上并發執行。

深度解讀昇騰CANN多流并行技術,提高硬體資源使用率

3. 相同計算引擎内并行:當計算圖中某個節點無法占滿一個計算引擎的全部計算資源,且拓撲結構可并發時,該引擎的不同拓撲集合的task可并發執行。

深度解讀昇騰CANN多流并行技術,提高硬體資源使用率

2 多流并行執行效果

并行執行效果跟網絡拓撲結構、節點引擎類型、AI處理器能力等因素存在相關性,理論最優并行場景下,整網執行時長為耗時最長的Stream的執行時長,其餘Stream的執行時長都掩蓋在該Stream的時長内。如下圖所示,通信耗時可以掩蓋在計算耗時内,向量計算耗時可以掩蓋在矩陣運算耗時内。

深度解讀昇騰CANN多流并行技術,提高硬體資源使用率

基于Atlas 800I A2推理産品,在經過計算通信流水并行優化後,LLaMA-65B參數模型全量圖執行性能提升30%左右,盤古系列71B參數模型全量圖執行性能提升15%左右。

然而,多流并行是一種資源換執行效率的技術,會占用更多的Device流資源,一般來說,靜态shape場景下開啟多流并行後,記憶體占用增加7%左右,使用者可結合實際情況選擇使用。

3 如何使能多流并行技術

GE的多流并行技術是基于深度學習計算圖模式下的計算優化手段,在靜态shape的離線推理場景和Pytorch架構的計算圖模式下預設使能多流并行技術,開發者可通過相應的參數enable_single_stream靈活控制。

import torchair as tng
config = tng.CompilerConfig()
# 關閉圖單流執行功能
config.ge_config.enable_single_stream = False
# 開啟計算通信并行功能
config.experimental_config.cc_parallel_enable = True
npu_backend = tng.get_npu_backend(compiler_config=config)
...
model = Model()
model = torch.compile(model, backend=npu_backend, dynamic=False)           

4 擷取學習資源

GE多流并行技術的介紹就到這裡,歡迎大家關注後續技術分享。如需擷取更多學習資源請登入昇騰社群(昇騰社群官網-昇騰萬裡 讓智能無所不及)。

關注#華為雲開發者聯盟# 點選下方,第一時間了解華為雲新鮮技術~

華為雲部落格_大資料部落格_AI部落格_雲計算部落格_開發者中心-華為雲

繼續閱讀