Try   HackMD

神經網路都是由神經元構成的,而越後面的網路其神經元越多,網路越複雜,我想這是大家都有的共識。但越大的網路,神經元間的連結也會次方型的上漲,產生了相當龐大的運算量。大多數的運算成本來自輸入 x 權重所產生的浮點數相乘。

而想加速浮點數相乘的速度,最簡單的方式就是依靠專門運算浮點數的專家--沒錯,就是GPU。GPU由於架構上適合用於處理多並行的浮點運算,因此對於神經網路來說是絕佳的加速工具。
But,GPU是一個吃電和散熱的怪物,因此對於某些受限場景而言並不適當--比方說工業用的各種邊緣裝置,但這些裝置卻也需要AI來完成一些作業。

這時候另外一個想法就是降低神經網路的運算量了。要降低神經網路的運算量有幾個方法:

  • 量化:若犧牲一些精確度,可以使用更短的浮點數或整數來代替掉長浮點數。比方說使用Int8,就可以把32 * 32 bits的相乘壓縮到8 * 8bits。
  • 剪枝:若神經網路中有部分神經元貢獻的輸出過低,或者某些連結的權重不影響神經元輸出或影響過小,則可以考慮減量神經元或該連結。
  • 等效:隨著神經網路發展,人們發現某些舊網路的功能可以用運算更小的新網路替代。

對一般使用者來說,這些操作並不是這麼容易,因此大廠嘗試提供一些工具,幫助使用者成功減低網路運算量以部署到邊緣裝置上--Intel的OpenVINO就是這麼一個工具。

OpenVINO有完整的量化和剪枝工具

  • 單行指令即可量化一個訓練好的模型
  • 諸多工具協助觀察量化過程,並調整量化的結果

巨大社群和專業團隊針對等效模型進行處理。

  • 比如說OpenVINO的Openpose就是經Intel團隊調整的等效高效率量化模型。
  • MidasNet為Intel團隊設計的獨特深度估計(字面意思,估計照片中各個物體的距離)模型。

目前OpenVINO的量化支援已經進行到了擴散模型以及GPT-J,為沒有顯卡的電腦提供了一個新的可能性。且專精型的AI加速晶片慢慢成為主流,整合進CPU內也指日可待,屆時OpenVINO能有更好的表現。