「AI邊緣運算」Google Coral USB Accelerator 開箱測評

提到 AI,我們腦海中總會浮現如火星文般的複雜算法、深不可測的神經網絡、數量龐大到以 TB 計數的 dataset 以及高速運算耗電量驚人的 GPU 等,它們可能存在於雲端,甚至就在自家機房的內部;然而,儘管它們的算法再精確、GPU 運算再迅速、網絡傳輸再快,還是無法滿足一般使用者最基本的需求:即時回饋,因此更貼近使用者、無延遲的「Edge AI」近年來大量興起,而前述龐大笨重的 AI 系統則隱身幕後稱為「Centralized AI」,兩者便組成 Distributed AI 的架構。

「AI邊緣運算」Google Coral USB Accelerator 開箱測評

如上圖左側,Edge AI 部署於使用者終端,專用於「推論及決策」等動作,可滿足低延遲、快速回應的 AI需求,例如 Robots、Drones、Portable or Mobile Devices、Outdoor Devices 等。

Google Coral USB Accelerator

目前市面可滿足 Edge AI 的硬件設備選擇相當多,大致可分為可單獨運行的單版 AI board 與 USB 接口無法獨立運行的 AI 加速器。今天要開箱的是一個可以通過 USB 與樹莓派搭配的 AI 加速器:Google Coral USB Accelerator,它的外形與功能很容易讓我們聯想到 Intel 的 Neural Computing Stick(NCS),這兩種都屬於針對「深度學習運算」特別設計的 ASIC IC(Application Specific Integrated Circuit),它們兩者都非常適合平行的處理大量加乘運算,但也由於專用於特定用途,因此它們只支持有限的深度學習框架,而且必須先將模型轉換為特定的中介格式後才能運作。

「AI邊緣運算」Google Coral USB Accelerator 開箱測評

NCS2 (左)與 Google Coral USB Accelerator(右)

NCS2 使用的中介檔稱為 IR(Intermediate Representation),可支持 TensorFlow、Caffe、MXNet、ONNX、Darknet 等模型轉換為 IR(Intermediate Representation)的中介檔格式,且還支持 OpenCV 的 DNN 模組;而 Google Edge TPU 目前則僅支持自家的 Tensorflow Lite 格式,且是 Edge TPU 專用的tflite-tpu,因此使用前必須將 TF Lite 模型轉檔後才能使用。

Google Coral USB Accelerator 的尺寸與重量都比想像中的更小更輕,相較於部置在雲端能夠提供訓練與推論的 Cloud TPU,這塊 Coral USB Accelerator 屬於 Edge AI 的一環,即是上面所指的 Edge TPU。

推論時間比較

這個小巧的加速器能提升多少深度模型的推論速度呢?下面統計資料來自官方網站,由左至右:藍色為使用一般 PC(CPU)、橙色為 PC 加上 Edge TPU、灰色為樹莓派 3、黑色為樹莓派加 Edge TPU,數值代表模型的推論時間,因此越小越好;由圖表中可看出樹莓派加上 Edge TPU 後可說是如虎添翼,比 PC 的 CPU 快上數十倍,甚至與 CPU+Edge TPU 並駕齊驅,可惜樹莓派沒有支持 USB 3.0,否則速度應該會更令人滿意。

「AI邊緣運算」Google Coral USB Accelerator 開箱測評

使用各加速器推論時間的比較


「AI邊緣運算」Google Coral USB Accelerator 開箱測評

推論時間數值表

安裝 Edge TPU 與 Python 資料集

接下來,我們先將 Google Coral USB Accelerator 接上樹莓派,如下圖所示:

「AI邊緣運算」Google Coral USB Accelerator 開箱測評

A.下載 Edge TPU API

<code>cd ~/wget https://dl.google.com/coral/edgetpu_api/edgetpu_api_latest.tar.gz -O edgetpu_api.tar.gz –trust-server-namestar xzf edgetpu_api.tar.gz/<code>

B. 安裝 Edge TPU API

<code>cd edgetpu_apibash ./install.sh/<code>

下圖為安裝的畫面,未來如果想要更改設定值,可以重複執行此安裝的步驟。

「AI邊緣運算」Google Coral USB Accelerator 開箱測評

最後一行出現”Would you like to enable the maximum operating frequency?”如果輸入Y,那麼 Edge TPU 在推論時會全力運作加快速度,但需注意在這種情況下可能會產生高熱。

安裝的過程相當簡單且順利,目前的版本為 edgetpu-1.9.2,如下圖所示:

「AI邊緣運算」Google Coral USB Accelerator 開箱測評

C. 重新插入

安裝好 API 後,如果 Accelerator 已經接在 USB 上,建議再重新插拔一次,讓 udev rule 生效。

D. Demo 範例實作

  • Image Classification

首先試試最基本的影像分類模型,請執行下方>

<code>cd ~/Downloads/wget https://dl.google.com/coral/canned_models/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite \\https://dl.google.com/coral/canned_models/inat_bird_labels.txt \\https://dcoral.withgoogle.com/static/docs/images/parrot.jpg/<code>

下載完成後,進入 demo 目錄執行 classify_image.py 程序:

<code>cd /usr/local/lib/python3.5/dist-packages/edgetpu/demopython3 classify_image.py \\--model ~/Downloads/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite \\--label ~/Downloads/inat_bird_labels.txt \\--image ~/Downloads/parrot.jpg/<code>

卻出現下方的 error:

<code>Traceback (most recent call last):  File "classify_image.py", line 19, in <module>    from edgetpu.classification.engine import ClassificationEngineImportError: No module named 'edgetpu'/<module>/<code>

錯誤的原因是 edgetpu API 預設安裝到 /usr/local/lib/python3.5/dist-packages,但如果你的 Python 環境是 virtualenv,便需要多執行下列的安裝步驟:

<code>cd /home/pi/envAI/lib/python3.5/site-packages/ln -s /usr/local/lib/python3.5/dist-packages/edgetpuln -s /usr/local/lib/python3.5/dist-packages/edgetpu-1.9.2.dist-info/<code>

執行結果:此為待分類的示範圖片鸚鵡,範例程序預測其為 Ara macao,機率為 0.76,如下圖所示:

「AI邊緣運算」Google Coral USB Accelerator 開箱測評

總結

雖然 Google Coral USB Accelerator 在外形體積與耗電量上佔盡優勢,且使用精度更低的 INT8,使得 Coral USB Accelerator 在 SSD Mobilenet V2 模型的推論速度比起其他 Edge AI chip 更快,但這是種種不方便使用之下妥協的結果,例如 Edge TPU 目前僅支持 Tensorflow lite 一種格式,且是更為簡化的 Tensorflow lite 版本,所支持的神經網絡 layer 種類更少。

因此,您在上手一個 Google Coral USB Accelerator 後,除了執行官方所提供的範例外,可能還會煩惱「如何將自己先前所訓練、FP32 精度的模型通過一道道繁瑣的程序轉換為最終 INT8 的 Tensorflow lite for Edge TPU 模型?」(此步驟稱為 post-training quantization),並且考慮能否接受 INT8 模型所帶來較低準確率的表現,以及後續是否需要採取重新訓練的方式來提升 INT8 精度模型的準確率。


分享到:


相關文章: