Altifigence Academy

18 / 24 · 概念

分塊、周邊資料與部分和

Th=Tw=2、Tc=1、Tm=2、3×3 核心、步幅二、膨脹一時,計算單緩衝輸入、權重、32 位元總和與偏置的位元組數。

分割張量以符合儲存容量

為一個分塊選擇輸出高度 Th、寬度 Tw、輸入通道數 Tc 與輸出通道數 Tm。輸入周邊資料延伸至輸出分塊之外。步幅 S、膨脹 D、核心 R 時,所需輸入高度為 (Th−1)S+(R−1)D+1;寬度使用水平對應式。邊界填補可自行產生,不一定要讀取。

拆分輸入通道時,各輸出部分和必須跨所有通道分塊保留。各分塊提前捨入會改變操作。偏置只在第一個通道分塊加入一次,再持續相同總和。改變輸出通道分塊,也會改變權重與偏置。

儲存預算範例

3×3、單位步幅、單位膨脹,令 Th=Tw=2、Tc=2、Tm=2。周邊資料為 4×4,需要 32 位元組 int8 輸入。權重使用 2×2×3×3=36 位元組。八個 32 位元部分和使用 32 位元組,兩個 32 位元偏置使用八位元組。總共 108 位元組。不含尺度、位址、有效性與控制儲存,需另留額度。

輸入與權重雙緩衝需要 2×(32+36)+32+8=176 位元組,超過 128 位元組預算。Tc 減為一,輸入為十六位元組、權重十八位元組。雙緩衝儲存變為 2×34+32+8=108 位元組。兩個輸入通道分塊之間保留部分和。緩衝器放得下,不代表傳輸可與運算重疊;另外檢查排程。

步幅二讓相同 2×2 輸出分塊的輸入跨度增為 5×5。鄰近分塊可共用周邊值,但獨立重新載入仍會重複流量。區分唯一張量位元組數這個下界,以及實際分塊傳輸。

M=5、Tm=2 時,最後分塊有一個有效輸出通道。遮罩多餘的權重與輸出存取。對最後空間與輸入通道分塊套用等效遮罩。NVIDIA CUTLASS 文件 描述不必完整展開矩陣、直接產生分塊的實際隱式 GEMM 方法。此處計算儲存與部分和,不執行該 CUDA 實作。

自己試試看

Th=Tw=2、Tc=1、Tm=2、3×3 核心、步幅二、膨脹一時,計算單緩衝輸入、權重、32 位元總和與偏置的位元組數。

查看解說

5×5 輸入使用 25 位元組。加上十八位元組權重、32 位元組總和與八位元組偏置,共 83 位元組,不含控制與尺度。

此選擇適用於本瀏覽器,隨時可從頁尾變更。