AI

PlaidML 讓你的 Mac 也能加速 Tensorflow 機器學習!

相信很多使用 Mac 或者手上沒有 NVIDIA 顯卡的朋友在做機器學習、Tensorflow 相關的實驗時,因為沒有 GPU 的 CUDA 加速而有非常多的時間可以泡咖啡…然後常常被誤會沒做事(?),今天就來介紹 PlaidML 這個工具給各位試試啦~

而說到 GPU 運算程式設計框架,除了常聽到的,由 NIVDIA 所維護與支持的 CUDA 外,其實還有另外一個,那就是 OpenCL

OpenCL 常出現在 AMD 的顯示卡上,此外,還有 Intel、ARM 等多家廠商皆有硬體支援 OpenCL,而以 Intel 為願算核心(高階機種還有 AMD 獨顯)的 Macbook 也同樣有支援 OpenCL 技術。(編按:2020 新款 Mac 所採用的 M1 核心內建神經網路單元,速度更快)

所以如果想在沒有 CUDA 運算資源的情況下加速的話,顯而易見的,我們要來借用 OpenCL 的能力,在 Mac 上施點魔法啦~

PlaidML

PlaidML is an advanced and portable tensor compiler for enabling deep learning on laptops, embedded devices, or other devices where the available computing hardware is not well supported or the available software stack contains unpalatable license restrictions.

上文是擷取自官方 Repo 的說明,簡單來說,PlaidML 的目的是讓 tensor 編譯器也能在筆記型電腦、嵌入式裝置等沒有硬體加速的環境也能執行深度學習。

開始之前

本篇文章使用的硬體

  • Macbook Pro 15″ 2017 / macOS Big Sur 11.1
  • 2.8 GHz Quad-Core Intel Core i7
  • 16GB RAM
  • Radeon Pro 560 4GB

安裝

環境

安裝設定先從軟體開始,我們需要先安裝 Conda 來協助我們做環境的建置以及切換,避免使用 Python 時出現太多的套件干擾問題。

先到 Conda 官網下載並安裝符合你系統的版本,我在這邊使用的是 Minicoda

下載並安裝完成後,我們來建立一個專屬於 PlaidML 的 Python 3.6 環境

conda create --name plaidml python=3.6

等待建立完成後,切換至剛剛建立的環境

conda activate plaidml

PlaidML

安裝

pip install tensorflow
pip install plaidml-keras plaidbench

安裝完成後執行初始化

plaidml-setup

輸入完上面的指令後,他會問你是否要啟用實驗性功能,這邊我們直接輸入 y 就對了!

這邊會詢問你使用哪一個硬體作為加速器,以 Macbook Pro 15″ 2017 的硬體為例,會出現以下幾個選項:

我們先以 Intel CPU 內建的 GPU 來測試效果,所以我們輸入選項 3 。

最後選擇將設定儲存起來,完成!

效能測試

經過設定後,我們馬上來測試看看訓練與辨識的效果如何

plaidbench keras mobilenet

這邊可能會出現錯誤:

'str' object has no attribute 'decode'
Set --print-stacktraces to see the entire traceback

解決方法是先將 h5py 這個套件降級

pip install 'h5py==3.0.0'

稍等一下,電腦正在執行運算

然後我們換成 AMD Radeon Pro 560 看看結果

如何?整體表現差非常得多對吧?

到此,你的環境已經建立完成,之後在你的 Tensorflow 程式碼中,你只需要在載入 Keras 前加入以下程式碼,你的 Keras 就換將 Tensorflow 改成用 PlaidML ,然後讓你的 GPU 也能加入運算的行列啦!

import os

os.environ["KERAS_BACKEND"] = "plaidml.keras.backend"

import keras

補充:

感謝讀者回應指正,特此補充。當使用這個方式時,實際上是將 Keras 後端從 Tensorflow 切換為 PlaidML 來做事,不過基本上要實現的事情是相同的,差別在於部分 Tensorflow 或 Keras 語法、類神經網路層在 PlaidML 中可能會受到限制或無法正常運作。

duye.chen

View Comments

  • 標題不對 根本沒用到 tensorflow
    用的是 keras,而後端是 plaidml

    • 感謝您的回應,不過 Keras 實際上是一種框架,而在 Tensorflow 2 中也有內建支援。不過在這篇文章中的確是將後端變更為 PlaidML 執行,這點我向各位讀者為我不妥的內容道歉。

Share
Published by
duye.chen

Recent Posts

JavaScript – Singleton 設計模式

前言 在設計程式時,我們有時會...

5 個月 ago

RESTful API 測試很煩,只好動手寫屬於自己的測試了

寫在最前面 嗨,大家好久不見!...

10 個月 ago

Node.js 與 Socket.io – 即時聊天室實作:資料庫

經過前兩篇(一、二)文章,我們...

4 年 ago

Node.js 與 Socket.io – 即時聊天室實作(二)

在上一篇Node.js 與 S...

4 年 ago