什麼是混合精度(Mixed precision)

針對運算的各個部分使用不同精度的數值。以 FP16 等進行乘法,以 FP32 進行累加,兼顧速度與精度。

日文名稱: 混合精度

「混合精度(Mixed precision)」出現在2領域的2道練習題中(電腦算術, GPU程式設計等)。

這個名詞所屬的領域: GPU程式設計

練習混合精度(Mixed precision)的題目

在AI的混合精度訓練中,大部分計算以FP16或bfloat16進行,同時以FP32保存權重的原始值(主權重,master weights),其主要理由為下列何者?

  1. A在將微小的更新量加到權重時,精度較低的格式會因資訊遺失而使更新消失
  2. B因為FP32比FP16計算更快,所以權重的計算全部交給FP32
  3. C因為規定FP16或bfloat16無法將權重的值儲存到記憶體中
查看答案與解析

正確答案:A. 在將微小的更新量加到權重時,精度較低的格式會因資訊遺失而使更新消失

在訓練中,會對權重反覆加上「學習率 × 梯度」這種非常小的值。FP16或bfloat16的尾數較短,若更新量相對於權重過小,相加的結果會因捨入而仍是原本的權重,使更新消失(資訊遺失)。因此權重以FP32保存,以正確累積更新,而前向與反向的計算則使用轉換為較低精度的副本。就計算速度而言是較低的精度比較快,而且較低精度的值也能儲存。

在GPU的混合精度計算中,常以FP16等低精度進行乘法,而以FP32進行加總(累加)。下列何者是其正確的理由?

  1. A因為乘法無法以FP32進行
  2. B因為在加總大量乘積時,低精度會累積捨入誤差,使小的值消失,所以只有累加以高精度進行
  3. C因為加法無法以FP16進行
查看答案與解析

正確答案:B. 因為在加總大量乘積時,低精度會累積捨入誤差,使小的值消失,所以只有累加以高精度進行

FP16的尾數只有10位元,因此將小的乘積加到已變大的總和上時,乘積可能因捨入而消失。在矩陣乘積中要加總數千個乘積,這個誤差一累積,結果就會大幅偏離。因此記憶體用量與運算單元負擔較大的乘法以低精度進行,只有累加以FP32進行。多數張量核心能以一個指令完成這種形式的乘加。

出現「混合精度(Mixed precision)」的題目(2題)

  1. 在AI的混合精度訓練中,大部分計算以FP16或bfloat16進行,同時以FP32保存權重的原始值(主權重,master weights),其主要理由為下列何者?
  2. 在GPU的混合精度計算中,常以FP16等低精度進行乘法,而以FP32進行加總(累加)。下列何者是其正確的理由?

相關名詞

bfloat16 更新(Refresh) 資訊遺失(Absorption) GPU 張量核心(Tensor core) 平行歸約(Parallel reduction) 共享記憶體(GPU shared memory) 串流多處理器(Streaming multiprocessor) 佔用率(GPU occupancy) 固定記憶體(Pinned memory)

前往名詞解釋列表