溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用plaidML在具有AMD GPU的macOS上進行機器學習

發(fā)布時間:2021-12-31 13:37:17 來源:億速云 閱讀:363 作者:柒染 欄目:互聯(lián)網(wǎng)科技

如何使用plaidML在具有AMD GPU的macOS上進行機器學習,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

是否想在Mac的集成AMD GPU或外部圖形卡上訓練機器學習模型?除了PlaidML,別無所求。

任何嘗試在macOS上使用TensorFlow訓練神經(jīng)網(wǎng)絡的人都知道該過程很糟糕。由于GPU加速訓練需要Nvidia芯片組,因此TensorFlow只能利用Mac上的CPU。大多數(shù)大型模型在CPU上的訓練時間要比簡單的GPU多幾個數(shù)量級。

更糟糕的是,許多Mac擁有功能強大的謹慎的AMD GPU,它們在訓練時被迫閑置。TensorFlow僅支持與macOS不兼容的Nvidia設備。這是plaidML出現(xiàn)的地方。

可以安裝PlaidML并將其用于在Mac的圖形處理器上訓練Keras模型,而無需在基于云的系統(tǒng)上花費時間或購買新機器。

TensorFlow用作Keras的后端,解釋Keras的高級Python語法并將其轉換為可以在專用硬件(例如GPU)上并行執(zhí)行的指令。

PlaidML是Keras的替代后端,它支持Nvidia CUDA以外的并行化框架。在Mac上,可以使用PlaidML在CPU,CPU的集成圖形,謹慎的AMD圖形處理器,甚至是通過Thunderbolt 3連接的外部AMD GPU上訓練Keras模型。

首先開始使用PlaidML,因為正在尋找一種在非常大的圖像數(shù)據(jù)集上訓練深度卷積神經(jīng)網(wǎng)絡的方法。曾嘗試在Google的Colab中執(zhí)行此操作,但是事實證明,該在線工具對于長期運行的工作非常令人沮喪。有一個 Radeon RX580 eGPU積塵,所以想用一種方法在MacBook上本地訓練模型。

經(jīng)過幾個快速步驟,就開始使用PlaidML。這是在系統(tǒng)上使用它的方法。首先通過pip安裝PlaidML。強烈建議在此處使用虛擬環(huán)境,以將PlaidML安裝與系統(tǒng)的其余部分隔離開。

PlaidML的強大功能來自其簡單性。安裝后,激活GPU就像運行一樣簡單

 

plaidml-setup

選擇是否要啟用實驗性功能后,此工具將詢問要使用哪種計算設備。應該看到類似以下的列表:

1 : llvm_cpu.0

2 : metal_intel(r)_hd_graphics_530.0

3 : metal_amd_radeon_pro_450.0

4 : metal_amd_radeon_rx_580.0

第一個選擇是我的CPU,第二個選擇是CPU中的Intel集成顯卡,第三個選擇是15英寸MacBook Pro中謹慎的AMD GPU,第四個選擇是我的RX 580 eGPU。絕對喜歡它的簡單性來切換處理器;這使可以使用筆記本電腦的謹慎GPU隨時隨地訓練簡單的模型,并使用eGPU進行較重的任務。

唯一需要注意的是,不再有權使用TensorFlow功能(例如TensorFlow數(shù)據(jù)集)。編寫的所有代碼都必須使用純Keras。還沒有發(fā)現(xiàn)這是一個很大的限制,無論如何它會導致更多的可移植軟件。PlaidML還可以與Nvidia GPU一起使用,因此,如果在使用不同GPU架構的團隊中工作,PlaidML會使事情變得非常簡單。使用PlaidML作為Keras的后端很簡單,如下所示:

from os import environenviron["KERAS_BACKEND"] = "plaidml.keras.backend"import keras

就是這樣。下面是一個完整的示例,可以在安裝PlaidML之后在自己的系統(tǒng)上嘗試。它用一個隱藏的層訓練一個非常簡單的神經(jīng)網(wǎng)絡,對輸入向量求和。

import numpy as npfrom os import environenviron["KERAS_BACKEND"] = "plaidml.keras.backend"import kerasfrom keras.layers import Densefrom matplotlib import pyplot as plt # Paramsnum_samples = 100000; vect_len = 20; max_int = 10; min_int = 1; # Generate datasetX = np.random.randint(min_int, max_int, (num_samples, vect_len))Y = np.sum(X, axis=1) # Get 80% of data for trainingsplit_idx = int(0.8 * len(Y))train_X = X[:split_idx, :]; test_X = X[split_idx:, :]train_Y = Y[:split_idx]; test_Y = Y[split_idx:] # Make modelmodel = keras.models.Sequential()model.add(keras.layers.Dense(32, activation='relu', input_shape=(vect_len,)))model.add(keras.layers.Dense(1))model.compile('adam', 'mse') history = model.fit(train_X, train_Y, validation_data=(test_X, test_Y), \                    epochs=10, batch_size=100) # summarize historyplt.plot(history.history['loss'])plt.plot(history.history['val_loss'])plt.title('model loss')plt.ylabel('loss')plt.xlabel('epoch')plt.legend(['train', 'test'], loc='upper left')plt.show()

可以在其他計算設備上嘗試此操作??赡軙l(fā)現(xiàn),在CPU上訓練該模型的速度更快,因為數(shù)據(jù)集非常小且模型非常簡單。但是對于更復雜的模型,會發(fā)現(xiàn)速度大大提高??梢栽赑laidML GitHub頁面上找到一些更重的測試 。

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI