le mie informazioni di contatto
Posta[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Dall'articolo precedente abbiamo scoperto che nel funzionamento dei modelli di grandi dimensioni, quando si utilizza la CPU per il funzionamento, l'utilizzo della CPU è molto elevato. Pertanto, qui penseremo che se nella macchina è presente una scheda grafica GPU, come possiamo sfruttare la scheda grafica nelle operazioni vettoriali ed eseguire operazioni relative all'apprendimento automatico in modo rapido e efficace.
Sappiamo che le attuali schede grafiche tradizionali che supportano l'apprendimento automatico sono le schede grafiche della serie Nvida, comunemente note come schede N. Tuttavia, sulle macchine Mac, le schede grafiche della serie AMD sono solitamente integrate. La differenza tra due diversi set di istruzioni hardware porta alla necessità di diverse tecnologie di implementazione nello strato superiore.
Ma nelle schede grafiche AMD esiste la tecnologia PlaidML, attraverso questo plug-in è possibile incapsulare le differenze tra le diverse schede grafiche.
Indirizzo del progetto PlaidML: https://github.com/plaidml/plaidml
Attualmente, PlaidML supporta già strumenti come Keras, ONNX e nGraph. Puoi utilizzare direttamente Keras per creare un modello e il tuo MacBook può facilmente chiamare la GPU.
Attraverso questo strumento chiamato PlaidML, la formazione sul deep learning può essere facilmente eseguita indipendentemente dalle schede grafiche NVIDIA, AMD o Intel.
fare riferimento a:Il Mac accelera l'addestramento con apprendimento per rinforzo con PlaidML
In questa operazione, per un algoritmo Keras convenzionale, vengono eseguiti più cicli di calcoli rispettivamente sulla CPU e sulla GPU e le statistiche richiedono molto tempo. Fare statistiche comparative.
I parametri software e hardware della macchina Mac utilizzata questa volta sono i seguenti:
Poiché il processo di installazione dei pacchetti dipendenti richiede l'interazione con i comandi, l'installazione del pacchetto plaidML viene eseguita sulla riga di comando e l'esecuzione del codice viene eseguita in jupyter.
Poiché Jupyter avrà dei problemi tecnici che richiedono la creazione del kernel quando si utilizza un ambiente virtuale, per il momento si consiglia di utilizzare direttamente l'ambiente Python originale per la verifica. Gli studenti che comprendono le caratteristiche di configurazione di jupyter in un ambiente virtuale possono provare a utilizzarlo in un ambiente virtuale.
pip3 install plaidml-keras
Dopo che l'autore ha utilizzato il comando pip3 install plaidml-keras per installare l'ultima versione di plaidml-keras, che è la 0.7.0, ho riscontrato un bug durante l'esecuzione dell'operazione di inizializzazione. Successivamente, è stata ridotta alla 0.6.4 e l'esecuzione è stata normale. Ma poi l'ho installato di nuovo come 0.7.0 ed era di nuovo normale.
plaidml su github
Esegui sulla riga di comando
plaidml-setup
Il contenuto interattivo è il seguente
(venv) tsingj@tsingjdeMacBook-Pro-2 ~ # plaidml-setup
PlaidML Setup (0.6.4)
Thanks for using PlaidML!
Some Notes:
* Bugs and other issues: https://github.com/plaidml/plaidml
* Questions: https://stackoverflow.com/questions/tagged/plaidml
* Say hello: https://groups.google.com/forum/#!forum/plaidml-dev
* PlaidML is licensed under the Apache License 2.0
Default Config Devices:
metal_intel(r)_uhd_graphics_630.0 : Intel(R) UHD Graphics 630 (Metal)
metal_amd_radeon_pro_5300m.0 : AMD Radeon Pro 5300M (Metal)
Experimental Config Devices:
llvm_cpu.0 : CPU (LLVM)
metal_intel(r)_uhd_graphics_630.0 : Intel(R) UHD Graphics 630 (Metal)
opencl_amd_radeon_pro_5300m_compute_engine.0 : AMD AMD Radeon Pro 5300M Compute Engine (OpenCL)
opencl_cpu.0 : Intel CPU (OpenCL)
opencl_intel_uhd_graphics_630.0 : Intel Inc. Intel(R) UHD Graphics 630 (OpenCL)
metal_amd_radeon_pro_5300m.0 : AMD Radeon Pro 5300M (Metal)
Using experimental devices can cause poor performance, crashes, and other nastiness.
Enable experimental device support? (y,n)[n]:
Elenca le schede grafiche attualmente supportate e scegli tra le 2 schede grafiche supportate per impostazione predefinita o tutti e 6 gli hardware supportati nella fase sperimentale.
Puoi vedere le due schede grafiche supportate per impostazione predefinita, che sono le due schede grafiche effettive nello screenshot iniziale. Per motivi di stabilità del test, selezionare prima N e premere Invio.
Multiple devices detected (You can override by setting PLAIDML_DEVICE_IDS).
Please choose a default device:
1 : metal_intel(r)_uhd_graphics_630.0
2 : metal_amd_radeon_pro_5300m.0
Default device? (1,2)[1]:1
Selected device:
metal_intel(r)_uhd_graphics_630.0
Per le impostazioni predefinite selezionate, imposta un dispositivo predefinito. Qui impostiamo innanzitutto metal_intel®_uhd_graphics_630.0 come dispositivo predefinito. Naturalmente, le prestazioni di questo dispositivo sono relativamente scarse. Successivamente imposteremo metal_amd_radeon_pro_5300m.0 come dispositivo predefinito confronto.
Dopo aver scritto 1, premere Invio.
Almost done. Multiplying some matrices...
Tile code:
function (B[X,Z], C[Z,Y]) -> (A) { A[x,y : X,Y] = +(B[x,z] * C[z,y]); }
Whew. That worked.
Save settings to /Users/tsingj/.plaidml? (y,n)[y]:y
Success!
Premere Invio per scrivere le informazioni di configurazione nel file di configurazione predefinito per completare la configurazione.
In questa sezione, jupyter viene utilizzato per eseguire un semplice codice di algoritmo e viene conteggiato il suo tempo.
#!/usr/bin/env python
import numpy as np
import os
import time
import keras
import keras.applications as kapp
from keras.datasets import cifar10
(x_train, y_train_cats), (x_test, y_test_cats) = cifar10.load_data()
batch_size = 8
x_train = x_train[:batch_size]
x_train = np.repeat(np.repeat(x_train, 7, axis=1), 7, axis=2)
Tieni presente che il backend di elaborazione Keral predefinito qui dovrebbe utilizzare tenserflow, controlla l'output
2024-07-11 14:36:02.753107: I tensorflow/core/platform/cpu_feature_guard.cc:210] Questo binario TensorFlow è ottimizzato per utilizzare le istruzioni CPU disponibili nelle operazioni critiche per le prestazioni.
Per abilitare le seguenti istruzioni: AVX2 FMA, in altre operazioni, ricostruire TensorFlow con i flag del compilatore appropriati.
model = kapp.VGG19()
model.compile(optimizer='sgd', loss='categorical_crossentropy',metrics=['accuracy'])
print("Running initial batch (compiling tile program)")
y = model.predict(x=x_train, batch_size=batch_size)
Esecuzione del batch iniziale (compilazione del programma tile)
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 1s/passo
# Now start the clock and run 10 batchesprint("Timing inference...")
start = time.time()
for i in range(10):
y = model.predict(x=x_train, batch_size=batch_size)
print("Ran in {} seconds".format(time.time() - start))
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 891ms/passo
Eseguito in 0,9295139312744141 secondi
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 923ms/passo
Eseguito in 1,8894760608673096 secondi
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 893ms/passo
Eseguito in 2,818492889404297 secondi
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 932ms/passo
Eseguito in 3.7831668853759766 secondi
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 892ms/passo
Eseguito in 4,71358585357666 secondi
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 860ms/passo
Eseguito in 5,609835863113403 secondi
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 878ms/passo
Eseguito in 6,5182459354400635 secondi
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 871ms/passo
Eseguito in 7,423128128051758 secondi
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 896ms/passo
Eseguito in 8,352543830871582 secondi
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 902ms/passo
Eseguito in 9,288795948028564 secondi
# Importing PlaidML. Make sure you follow this order
import plaidml.keras
plaidml.keras.install_backend()
import os
os.environ["KERAS_BACKEND"] = "plaidml.keras.backend"
Nota:
1. Quando viene utilizzata la versione plaidml=0.7.0, si verificherà un errore nell'operazione plaidml.keras.install_backend().
2. In questo passaggio, keras verrà importato tramite plaidml e il motore di calcolo in background verrà impostato su plaidml anziché su tenserflow.
#!/usr/bin/env python
import numpy as np
import os
import time
import keras
import keras.applications as kapp
from keras.datasets import cifar10
(x_train, y_train_cats), (x_test, y_test_cats) = cifar10.load_data()
batch_size = 8
x_train = x_train[:batch_size]
x_train = np.repeat(np.repeat(x_train, 7, axis=1), 7, axis=2)
model = kapp.VGG19()
Visualizza le informazioni sulla scheda grafica alla prima esecuzione
INFO:plaidml:Dispositivo di apertura “metal_intel®_uhd_graphics_630.0”
model.compile(optimizer='sgd', loss='categorical_crossentropy',metrics=['accuracy'])
print("Running initial batch (compiling tile program)")
y = model.predict(x=x_train, batch_size=batch_size)
Esecuzione del batch iniziale (compilazione del programma tile)
Poiché l'output è più veloce, viene stampata solo una riga di contenuto.
# Now start the clock and run 10 batchesprint("Timing inference...")
start = time.time()
for i in range(10):
y = model.predict(x=x_train, batch_size=batch_size)
print("Ran in {} seconds".format(time.time() - start))
Eseguito in 4,241918087005615 secondi
Eseguito in 8,452141046524048 secondi
Eseguito in 12.665411949157715 secondi
Eseguito in 16.849968910217285 secondi
Eseguito in 21.025720834732056 secondi
Eseguito in 25.212764024734497 secondi
Eseguito in 29.405478954315186 secondi
Eseguito in 33.594977140426636 secondi
Eseguito in 37.7886438369751 secondi
Eseguito in 41.98136305809021 secondi
Nella fase di selezione della scheda grafica nell'impostazione plaidml-setup, la scheda grafica metal_intel®_uhd_graphics_630.0 non è più selezionata, ma è selezionata metal_amd_radeon_pro_5300m.0.
(venv) tsingj@tsingjdeMacBook-Pro-2 ~ # plaidml-setup
PlaidML Setup (0.6.4)
Thanks for using PlaidML!
Some Notes:
* Bugs and other issues: https://github.com/plaidml/plaidml
* Questions: https://stackoverflow.com/questions/tagged/plaidml
* Say hello: https://groups.google.com/forum/#!forum/plaidml-dev
* PlaidML is licensed under the Apache License 2.0
Default Config Devices:
metal_intel(r)_uhd_graphics_630.0 : Intel(R) UHD Graphics 630 (Metal)
metal_amd_radeon_pro_5300m.0 : AMD Radeon Pro 5300M (Metal)
Experimental Config Devices:
llvm_cpu.0 : CPU (LLVM)
metal_intel(r)_uhd_graphics_630.0 : Intel(R) UHD Graphics 630 (Metal)
opencl_amd_radeon_pro_5300m_compute_engine.0 : AMD AMD Radeon Pro 5300M Compute Engine (OpenCL)
opencl_cpu.0 : Intel CPU (OpenCL)
opencl_intel_uhd_graphics_630.0 : Intel Inc. Intel(R) UHD Graphics 630 (OpenCL)
metal_amd_radeon_pro_5300m.0 : AMD Radeon Pro 5300M (Metal)
Using experimental devices can cause poor performance, crashes, and other nastiness.
Enable experimental device support? (y,n)[n]:n
Multiple devices detected (You can override by setting PLAIDML_DEVICE_IDS).
Please choose a default device:
1 : metal_intel(r)_uhd_graphics_630.0
2 : metal_amd_radeon_pro_5300m.0
Default device? (1,2)[1]:2
Selected device:
metal_amd_radeon_pro_5300m.0
Almost done. Multiplying some matrices...
Tile code:
function (B[X,Z], C[Z,Y]) -> (A) { A[x,y : X,Y] = +(B[x,z] * C[z,y]); }
Whew. That worked.
Save settings to /Users/tsingj/.plaidml? (y,n)[y]:y
Success!
# Importing PlaidML. Make sure you follow this order
import plaidml.keras
plaidml.keras.install_backend()
import os
os.environ["KERAS_BACKEND"] = "plaidml.keras.backend"
Nota:
1. Quando viene utilizzata la versione plaidml=0.7.0, si verificherà un errore nell'operazione plaidml.keras.install_backend().
2. In questo passaggio, keras verrà importato tramite plaidml e il motore di calcolo in background verrà impostato su plaidml anziché su tenserflow.
#!/usr/bin/env python
import numpy as np
import os
import time
import keras
import keras.applications as kapp
from keras.datasets import cifar10
(x_train, y_train_cats), (x_test, y_test_cats) = cifar10.load_data()
batch_size = 8
x_train = x_train[:batch_size]
x_train = np.repeat(np.repeat(x_train, 7, axis=1), 7, axis=2)
model = kapp.VGG19()
INFO:plaidml:Dispositivo di apertura “metal_amd_radeon_pro_5300m.0”
Tieni presente che le informazioni sulla scheda grafica vengono inserite qui per la prima volta.
model.compile(optimizer='sgd', loss='categorical_crossentropy',metrics=['accuracy'])
print("Running initial batch (compiling tile program)")
y = model.predict(x=x_train, batch_size=batch_size)
Esecuzione del batch iniziale (compilazione del programma tile)
Poiché l'output è più veloce, viene stampata solo una riga di contenuto.
# Now start the clock and run 10 batchesprint("Timing inference...")
start = time.time()
for i in range(10):
y = model.predict(x=x_train, batch_size=batch_size)
print("Ran in {} seconds".format(time.time() - start))
Visualizza l'output
Eseguito in 0,43606019020080566 secondi
Eseguito in 0,8583459854125977 secondi
Eseguito in 1,2787911891937256 secondi
Eseguito in 1,70143723487854 secondi
Eseguito in 2.1235032081604004 secondi
Eseguito in 2,5464580059051514 secondi
Eseguito in 2,9677979946136475 secondi
Eseguito in 3,390064001083374 secondi
Eseguito in 3,8117799758911133 secondi
Eseguito in 4,236911058425903 secondi
Il valore della memoria della scheda grafica metal_intel®_uhd_graphics_630.0 è 1536 MB Sebbene come scheda grafica, le sue prestazioni nei calcoli non siano buone come quelle della CPU a 6 core di questa macchina;
La scheda grafica metal_amd_radeon_pro_5300m.0 ha un valore di memoria di 4G. Rispetto alla CPU nativa, le sue prestazioni sono quasi 1 volte superiori.
Da ciò possiamo vedere i potenti vantaggi dell’utilizzo delle GPU nelle operazioni di machine learning.