Κοινή χρήση τεχνολογίας

[AIGC] 2. Το Mac χρησιμοποιεί τοπικά GPU για να ξεκινήσει υπολογισμούς keras

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Το Mac χρησιμοποιεί τοπικά GPU για να ξεκινήσει τον υπολογισμό keras

1. Υπόβαθρο προβλήματος

Από το προηγούμενο άρθρο, ανακαλύψαμε ότι στη λειτουργία μεγάλων μοντέλων, όταν χρησιμοποιείται η CPU για λειτουργία, η χρήση της CPU είναι πολύ υψηλή. Επομένως, θα σκεφτούμε εδώ ότι εάν υπάρχει κάρτα γραφικών GPU στο μηχάνημα, πώς μπορούμε να εκμεταλλευτούμε την κάρτα γραφικών σε διανυσματικές λειτουργίες και να εκτελέσουμε λειτουργίες που σχετίζονται με τη μηχανική μάθηση γρήγορα και καλά.

2. Τεχνικό υπόβαθρο

Γνωρίζουμε ότι οι τρέχουσες κύριες κάρτες γραφικών που υποστηρίζουν τη μηχανική εκμάθηση είναι κάρτες γραφικών της σειράς Nvida, κοινώς γνωστές ως κάρτες γραφικών, ωστόσο, σε μηχανές Mac, οι κάρτες γραφικών της σειράς AMD είναι συνήθως ενσωματωμένες. Η διαφορά μεταξύ δύο διαφορετικών συνόλων εντολών υλικού οδηγεί στην ανάγκη για διαφορετικές τεχνολογίες υλοποίησης στο ανώτερο επίπεδο.
Αλλά στις κάρτες γραφικών AMD, υπάρχει μια τεχνολογία PlaidML, μέσω αυτού του plug-in, μπορούν να ενσωματωθούν οι διαφορές των διαφορετικών καρτών γραφικών.

Διεύθυνση έργου PlaidML: https://github.com/plaidml/plaidml
Επί του παρόντος, το PlaidML υποστηρίζει ήδη εργαλεία όπως το Keras, το ONNX και το nGraph Μπορείτε να χρησιμοποιήσετε απευθείας το Keras για να δημιουργήσετε ένα μοντέλο και το MacBook σας μπορεί εύκολα να καλέσει τη GPU.
Μέσω αυτού του εργαλείου που ονομάζεται PlaidML, η εκπαίδευση σε βάθος εκμάθησης μπορεί εύκολα να πραγματοποιηθεί ανεξάρτητα από τις κάρτες γραφικών NVIDIA, AMD ή Intel.

αναφέρομαι σε:Το Mac επιταχύνει την εκπαίδευση ενισχυτικής μάθησης με το PlaidML

3. Πειραματική επαλήθευση

Σε αυτή τη λειτουργία, για έναν συμβατικό αλγόριθμο keras, εκτελούνται πολλαπλοί γύροι υπολογισμών στη CPU και την GPU αντίστοιχα, και τα στατιστικά είναι χρονοβόρα. Κάντε συγκριτικά στατιστικά στοιχεία.

Εγγενής διαμόρφωση

Οι παράμετροι λογισμικού και υλικού της μηχανής mac που χρησιμοποιήθηκε αυτή τη φορά είναι οι εξής:
Εισαγάγετε την περιγραφή της εικόνας εδώ

Εγκαταστήστε το PlaidML

Εφόσον η διαδικασία εγκατάστασης εξαρτημένων πακέτων απαιτεί αλληλεπίδραση εντολών, η εγκατάσταση του πακέτου plaidML εκτελείται στη γραμμή εντολών και η εκτέλεση του κώδικα σε jupyter.

Δεδομένου ότι το jupyter θα έχει τεχνικά σημεία που απαιτούν τη δημιουργία πυρήνα κατά τη χρήση ενός εικονικού περιβάλλοντος, συνιστάται η απευθείας χρήση του αρχικού περιβάλλοντος python για επαλήθευση προς το παρόν. Οι μαθητές που κατανοούν τα χαρακτηριστικά διαμόρφωσης του jupyter σε ένα εικονικό περιβάλλον μπορούν να προσπαθήσουν να το λειτουργήσουν σε ένα εικονικό περιβάλλον.

Εγκαταστήστε το plaidml-keras

pip3  install plaidml-keras
  • 1

Αφού ο συγγραφέας χρησιμοποίησε την εντολή pip3 install plaidml-keras για να εγκαταστήσει την πιο πρόσφατη έκδοση του plaidml-keras, η οποία είναι 0.7.0, αντιμετώπισα ένα σφάλμα κατά την εκτέλεση της λειτουργίας αρχικοποίησης. Στη συνέχεια, μειώθηκε στο 0.6.4 και η εκτέλεση έγινε κανονικός. Αλλά μετά το εγκατέστησα ξανά ως 0.7.0 και ήταν πάλι κανονικό.
plaidml στο github

Διαμόρφωση προεπιλεγμένης κάρτας γραφικών

Εκτέλεση στη γραμμή εντολών

plaidml-setup
  • 1

Το διαδραστικό περιεχόμενο έχει ως εξής

(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]:
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

Καταχωρίστε τις τρέχουσες υποστηριζόμενες κάρτες γραφικών και επιλέξτε ανάμεσα στις 2 υποστηριζόμενες κάρτες γραφικών από προεπιλογή ή και στις 6 υποστηριζόμενες κάρτες γραφικών στην πειραματική φάση.
Μπορείτε να δείτε τις δύο κάρτες γραφικών που υποστηρίζονται από προεπιλογή, οι οποίες είναι οι δύο πραγματικές κάρτες γραφικών στο αρχικό στιγμιότυπο οθόνης. Για λόγους σταθερότητας δοκιμής, επιλέξτε πρώτα N και πατήστε Enter.

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

Για τις προεπιλεγμένες ρυθμίσεις, ορίστε πρώτα μια προεπιλεγμένη συσκευή metal_intel®_uhd_630.0 Φυσικά, η απόδοση αυτής της συσκευής είναι στην πραγματικότητα σχετικά κακή σύγκριση.
Αφού γράψετε το 1, πατήστε Enter.

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!
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Πατήστε Enter για να γράψετε τις πληροφορίες διαμόρφωσης στο προεπιλεγμένο αρχείο διαμόρφωσης για να ολοκληρώσετε τη διαμόρφωση.

Εκτελέστε κώδικα που χρησιμοποιεί υπολογιστές CPU

Σε αυτήν την ενότητα, το jupyter χρησιμοποιείται για την εκτέλεση ενός απλού κώδικα αλγορίθμου και μετράται ο χρόνος του.

Βήμα 1 Εισαγάγετε πρώτα το πακέτο keras και εισάγετε τα δεδομένα cifar10 Αυτό μπορεί να περιλαμβάνει λήψη από το εξωτερικό δίκτυο.Βασικές ερωτήσεις σχετικά με τη χρήση keras
#!/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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

Λάβετε υπόψη ότι το προεπιλεγμένο backend υπολογιστών keral εδώ θα πρέπει να χρησιμοποιεί tenserflow, ελέγξτε την έξοδο

2024-07-11 14:36:02.753107: I tensorflow/core/platform/cpu_feature_guard.cc:210] Αυτό το δυαδικό αρχείο TensorFlow έχει βελτιστοποιηθεί για να χρησιμοποιεί διαθέσιμες οδηγίες CPU σε κρίσιμες για την απόδοση λειτουργίες.
Για να ενεργοποιήσετε τις ακόλουθες οδηγίες: AVX2 FMA, σε άλλες λειτουργίες, δημιουργήστε ξανά το TensorFlow με τις κατάλληλες σημαίες μεταγλωττιστή.

Βήμα 2 Εισαγάγετε το μοντέλο υπολογισμού Εάν τα δεδομένα του μοντέλου δεν υπάρχουν τοπικά, θα ληφθούν αυτόματα εάν έχετε ερωτήσεις, ανατρέξτε σε αυτό.Βασικές ερωτήσεις σχετικά με τη χρήση keras
model = kapp.VGG19()
  • 1
βήμα 3 συλλογή μοντέλου
model.compile(optimizer='sgd', loss='categorical_crossentropy',metrics=['accuracy'])
  • 1
βήμα 4 Κάντε μια πρόβλεψη
print("Running initial batch (compiling tile program)")
y = model.predict(x=x_train, batch_size=batch_size)
  • 1
  • 2

Εκτέλεση αρχικής παρτίδας (μεταγλώττιση προγράμματος πλακιδίων)
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 1s/βήμα

βήμα 5 Κάντε 10 προβλέψεις
# 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
  • 2
  • 3
  • 4
  • 5

1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 891ms/βήμα
Έτρεξε σε 0,9295139312744141 δευτερόλεπτα
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 923ms/βήμα
Έτρεξε σε 1,8894760608673096 δευτερόλεπτα
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 893ms/βήμα
Έτρεξε σε 2,818492889404297 δευτερόλεπτα
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 932ms/βήμα
Έτρεξε σε 3,7831668853759766 δευτερόλεπτα
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 892ms/βήμα
Έτρεξε σε 4,71358585357666 δευτερόλεπτα
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 860ms/βήμα
Έτρεξε σε 5,609835863113403 δευτερόλεπτα
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 878ms/βήμα
Έτρεξε σε 6,5182459354400635 δευτερόλεπτα
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 871ms/βήμα
Έτρεξε σε 7,423128128051758 δευτερόλεπτα
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 896ms/βήμα
Έτρεξε σε 8,352543830871582 δευτερόλεπτα
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 902ms/βήμα
Έτρεξε σε 9,288795948028564 δευτερόλεπτα

Εκτελέστε τον κώδικα χρησιμοποιώντας υπολογιστές GPU

Χρήση κάρτας γραφικών metal_intel®_uhd_graphics_630.0

βήμα 0 Εισαγάγετε keras μέσω του plaidml και, στη συνέχεια, πραγματοποιήστε λειτουργίες που σχετίζονται με το keras
# Importing PlaidML. Make sure you follow this order
import plaidml.keras
plaidml.keras.install_backend()
import os
os.environ["KERAS_BACKEND"] = "plaidml.keras.backend"
  • 1
  • 2
  • 3
  • 4
  • 5

Σημείωση:
1. Όταν χρησιμοποιείται η έκδοση plaidml=0.7.0, θα παρουσιαστεί σφάλμα στη λειτουργία plaidml.keras.install_backend().
2. Σε αυτό το βήμα, τα keras θα εισαχθούν μέσω plaidml και η μηχανή υπολογισμού φόντου θα ρυθμιστεί σε plaidml αντί για ροή tenser.

Βήμα 1 Εισαγάγετε πρώτα το πακέτο keras και εισάγετε τα δεδομένα cifar10
#!/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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
Βήμα 2 Εισαγάγετε το μοντέλο υπολογισμού Εάν τα δεδομένα του μοντέλου δεν υπάρχουν τοπικά, θα ληφθούν αυτόματα.
model = kapp.VGG19()
  • 1

Έξοδος πληροφοριών κάρτας γραφικών κατά την πρώτη εκτέλεση

INFO:plaidml:Συσκευή ανοίγματος "metal_intel®_uhd_graphics_630.0"

βήμα 3 συλλογή μοντέλου
model.compile(optimizer='sgd', loss='categorical_crossentropy',metrics=['accuracy'])
  • 1
βήμα 4 Κάντε μια πρόβλεψη
print("Running initial batch (compiling tile program)")
y = model.predict(x=x_train, batch_size=batch_size)
  • 1
  • 2

Εκτέλεση αρχικής παρτίδας (μεταγλώττιση προγράμματος πλακιδίων)

Επειδή η έξοδος είναι ταχύτερη, εκτυπώνεται μόνο μία γραμμή περιεχομένου.

βήμα 5 Κάντε 10 προβλέψεις
# 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
  • 2
  • 3
  • 4
  • 5

Έτρεξε σε 4,241918087005615 δευτερόλεπτα
Έτρεξε σε 8,452141046524048 δευτερόλεπτα
Έτρεξε σε 12,665411949157715 δευτερόλεπτα
Έτρεξε σε 16,849968910217285 δευτερόλεπτα
Έτρεξε σε 21,025720834732056 δευτερόλεπτα
Έτρεξε σε 25,212764024734497 δευτερόλεπτα
Έτρεξε σε 29,405478954315186 δευτερόλεπτα
Έτρεξε σε 33,594977140426636 δευτερόλεπτα
Έτρεξε σε 37,7886438369751 δευτερόλεπτα
Έτρεξε σε 41,98136305809021 δευτερόλεπτα

Χρήση κάρτας γραφικών metal_amd_radeon_pro_5300m.0

Στο στάδιο της επιλογής της κάρτας γραφικών στη ρύθμιση plaidml-setup, δεν επιλέγεται πλέον η κάρτα γραφικών metal_intel®_uhd_graphics_630.0, αλλά επιλέγεται η 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!
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
βήμα 0 Εισαγάγετε keras μέσω του plaidml και, στη συνέχεια, πραγματοποιήστε λειτουργίες που σχετίζονται με το keras
# Importing PlaidML. Make sure you follow this order
import plaidml.keras
plaidml.keras.install_backend()
import os
os.environ["KERAS_BACKEND"] = "plaidml.keras.backend"
  • 1
  • 2
  • 3
  • 4
  • 5

Σημείωση:
1. Όταν χρησιμοποιείται η έκδοση plaidml=0.7.0, θα παρουσιαστεί σφάλμα στη λειτουργία plaidml.keras.install_backend().
2. Σε αυτό το βήμα, τα keras θα εισαχθούν μέσω plaidml και η μηχανή υπολογισμού φόντου θα ρυθμιστεί σε plaidml αντί για ροή tenser.

Βήμα 1 Εισαγάγετε πρώτα το πακέτο keras και εισάγετε τα δεδομένα cifar10
#!/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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
Βήμα 2 Εισαγάγετε το μοντέλο υπολογισμού Εάν τα δεδομένα του μοντέλου δεν υπάρχουν τοπικά, θα ληφθούν αυτόματα.
model = kapp.VGG19()
  • 1

INFO:plaidml:Συσκευή ανοίγματος "metal_amd_radeon_pro_5300m.0"
Σημειώστε ότι οι πληροφορίες της κάρτας γραφικών εισάγονται εδώ για πρώτη φορά.

βήμα 3 συλλογή μοντέλου
model.compile(optimizer='sgd', loss='categorical_crossentropy',metrics=['accuracy'])
  • 1
βήμα 4 Κάντε μια πρόβλεψη
print("Running initial batch (compiling tile program)")
y = model.predict(x=x_train, batch_size=batch_size)
  • 1
  • 2

Εκτέλεση αρχικής παρτίδας (μεταγλώττιση προγράμματος πλακιδίων)

Επειδή η έξοδος είναι ταχύτερη, εκτυπώνεται μόνο μία γραμμή περιεχομένου.

βήμα 5 Κάντε 10 προβλέψεις
# 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
  • 2
  • 3
  • 4
  • 5

Προβολή εξόδου

Έτρεξε σε 0,43606019020080566 δευτερόλεπτα
Έτρεξε σε 0,8583459854125977 δευτερόλεπτα
Έτρεξε σε 1,2787911891937256 δευτερόλεπτα
Έτρεξε σε 1,70143723487854 δευτερόλεπτα
Έτρεξε σε 2,1235032081604004 δευτερόλεπτα
Έτρεξε σε 2,5464580059051514 δευτερόλεπτα
Έτρεξε σε 2,9677979946136475 δευτερόλεπτα
Έτρεξε σε 3,390064001083374 δευτερόλεπτα
Έτρεξε σε 3,8117799758911133 δευτερόλεπτα
Έτρεξε σε 4,236911058425903 δευτερόλεπτα

4. Συζήτηση Αξιολόγησης

Η τιμή μνήμης της κάρτας γραφικών metal_intel®_uhd_graphics_630.0 είναι 1536 MB, αν και ως κάρτα γραφικών, η απόδοσή της στους υπολογισμούς δεν είναι τόσο καλή όσο η CPU 6 πυρήνων αυτού του μηχανήματος.
Η κάρτα γραφικών metal_amd_radeon_pro_5300m.0 έχει τιμή μνήμης 4G Σε σύγκριση με την εγγενή CPU, η απόδοσή της είναι σχεδόν 1 φορές υψηλότερη.

Από αυτό μπορούμε να δούμε τα ισχυρά πλεονεκτήματα της χρήσης GPU σε λειτουργίες μηχανικής εκμάθησης.