本文基於筆者在實作交大機器學習晶片架構設計的作業與期末專題之經驗所寫成,內容涵蓋硬體加速器設計與軟體程式碼之修改與最佳化,在 CFU Playground 配套的 CPU VexRiscv_FullCfu @ 75MHz 上,筆者成功將 MLPerf™ Tiny 影像分類模型的推理時間從約 304M 個週期(約 4.044 秒)減少到約 31M 個週期(約 0.406 秒),得到約 9.95 倍的加速。
本文適合好奇如何利用 AI 加速器加速模型推理的讀者,以及正在修課的學弟妹們,如果想要有較舒服的閱讀體驗的話,讀者預期需要擁有基礎的數位邏輯設計、計算機架構、神經網路和一些高性能計算(倘若讀者是交大的學生,修過筆者老闆游逸平老師開的平行程式設計即可)的相關知識,當然沒有的話也沒關係 ,筆者會盡可能解釋一些筆者認為對於理解本文至關重要的知識。請注意筆者本身只有深度學習和編譯器最佳化的背景,因此文中給出的硬體設計思路和實作可能不是最好的,僅作為讀者參考之用。
另外因為筆者極其討厭在中文文章中混雜大量英文名詞,此處先給出常用名詞的翻譯。
- 乘積累加(multiply accumulate,通常縮寫為 MAC)
— 簡單來說就是 c ← a × b + c - 卷積(convolution)
— 這裡的卷積是深度學習的卷積,不是數學定義上的卷積 - 卷積層(convolution layer)
- 卷積核(convolution kernel)
- 分塊矩陣乘法(block/tiled matrix multiplication)
- 脈動陣列(systolic array)
- 處理單元(processing element,通常縮寫為 PE)
- 暫存區(buffer)
目錄
- 在 CFU Playground 上加速 MLPerf™ Tiny 影像分類模型 #0:前言
- 在 CFU Playground 上加速 MLPerf™ Tiny 影像分類模型 #1:簡介
- 在 CFU Playground 上加速 MLPerf™ Tiny 影像分類模型 #2:直接卷積與 im2col
- 在 CFU Playground 上加速 MLPerf™ Tiny 影像分類模型 #3:分塊矩陣乘法
- 在 CFU Playground 上加速 MLPerf™ Tiny 影像分類模型 #4:脈動陣列與矩陣乘法單元
- 在 CFU Playground 上加速 MLPerf™ Tiny 影像分類模型 #5:純軟體加速
- 在 CFU Playground 上加速 MLPerf™ Tiny 影像分類模型 #6:軟硬體結合加速
文章懶人包
本文涉及的內容包含:
- CFU Playground、MLPerf™ Tiny 影像分類模型、卷積層、分塊矩陣乘法和脈動陣列的介紹
- 矩陣乘法加速單元
- 軟硬體協同設計與最佳化
也就是說讀者預期能讀到:
- 如何用矩陣乘法做到卷積層的等價運算
- 如何用脈動陣列加速矩陣乘法
- 如何設計矩陣乘法單元
- 如何設計硬體加速器指令
- 如何在軟體層面進行最佳化