τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Από το προηγούμενο άρθρο, ανακαλύψαμε ότι στη λειτουργία μεγάλων μοντέλων, όταν χρησιμοποιείται η CPU για λειτουργία, η χρήση της CPU είναι πολύ υψηλή. Επομένως, θα σκεφτούμε εδώ ότι εάν υπάρχει κάρτα γραφικών GPU στο μηχάνημα, πώς μπορούμε να εκμεταλλευτούμε την κάρτα γραφικών σε διανυσματικές λειτουργίες και να εκτελέσουμε λειτουργίες που σχετίζονται με τη μηχανική μάθηση γρήγορα και καλά.
Γνωρίζουμε ότι οι τρέχουσες κύριες κάρτες γραφικών που υποστηρίζουν τη μηχανική εκμάθηση είναι κάρτες γραφικών της σειράς 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
Σε αυτή τη λειτουργία, για έναν συμβατικό αλγόριθμο keras, εκτελούνται πολλαπλοί γύροι υπολογισμών στη CPU και την GPU αντίστοιχα, και τα στατιστικά είναι χρονοβόρα. Κάντε συγκριτικά στατιστικά στοιχεία.
Οι παράμετροι λογισμικού και υλικού της μηχανής mac που χρησιμοποιήθηκε αυτή τη φορά είναι οι εξής:
Εφόσον η διαδικασία εγκατάστασης εξαρτημένων πακέτων απαιτεί αλληλεπίδραση εντολών, η εγκατάσταση του πακέτου plaidML εκτελείται στη γραμμή εντολών και η εκτέλεση του κώδικα σε jupyter.
Δεδομένου ότι το jupyter θα έχει τεχνικά σημεία που απαιτούν τη δημιουργία πυρήνα κατά τη χρήση ενός εικονικού περιβάλλοντος, συνιστάται η απευθείας χρήση του αρχικού περιβάλλοντος python για επαλήθευση προς το παρόν. Οι μαθητές που κατανοούν τα χαρακτηριστικά διαμόρφωσης του jupyter σε ένα εικονικό περιβάλλον μπορούν να προσπαθήσουν να το λειτουργήσουν σε ένα εικονικό περιβάλλον.
pip3 install plaidml-keras
Αφού ο συγγραφέας χρησιμοποίησε την εντολή pip3 install plaidml-keras για να εγκαταστήσει την πιο πρόσφατη έκδοση του plaidml-keras, η οποία είναι 0.7.0, αντιμετώπισα ένα σφάλμα κατά την εκτέλεση της λειτουργίας αρχικοποίησης. Στη συνέχεια, μειώθηκε στο 0.6.4 και η εκτέλεση έγινε κανονικός. Αλλά μετά το εγκατέστησα ξανά ως 0.7.0 και ήταν πάλι κανονικό.
plaidml στο github
Εκτέλεση στη γραμμή εντολών
plaidml-setup
Το διαδραστικό περιεχόμενο έχει ως εξής
(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]:
Καταχωρίστε τις τρέχουσες υποστηριζόμενες κάρτες γραφικών και επιλέξτε ανάμεσα στις 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
Για τις προεπιλεγμένες ρυθμίσεις, ορίστε πρώτα μια προεπιλεγμένη συσκευή 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!
Πατήστε Enter για να γράψετε τις πληροφορίες διαμόρφωσης στο προεπιλεγμένο αρχείο διαμόρφωσης για να ολοκληρώσετε τη διαμόρφωση.
Σε αυτήν την ενότητα, το jupyter χρησιμοποιείται για την εκτέλεση ενός απλού κώδικα αλγορίθμου και μετράται ο χρόνος του.
#!/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)
Λάβετε υπόψη ότι το προεπιλεγμένο backend υπολογιστών keral εδώ θα πρέπει να χρησιμοποιεί tenserflow, ελέγξτε την έξοδο
2024-07-11 14:36:02.753107: I tensorflow/core/platform/cpu_feature_guard.cc:210] Αυτό το δυαδικό αρχείο TensorFlow έχει βελτιστοποιηθεί για να χρησιμοποιεί διαθέσιμες οδηγίες CPU σε κρίσιμες για την απόδοση λειτουργίες.
Για να ενεργοποιήσετε τις ακόλουθες οδηγίες: AVX2 FMA, σε άλλες λειτουργίες, δημιουργήστε ξανά το TensorFlow με τις κατάλληλες σημαίες μεταγλωττιστή.
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)
Εκτέλεση αρχικής παρτίδας (μεταγλώττιση προγράμματος πλακιδίων)
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 1s/βήμα
# 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/βήμα
Έτρεξε σε 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 δευτερόλεπτα
# 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. Όταν χρησιμοποιείται η έκδοση plaidml=0.7.0, θα παρουσιαστεί σφάλμα στη λειτουργία plaidml.keras.install_backend().
2. Σε αυτό το βήμα, τα keras θα εισαχθούν μέσω plaidml και η μηχανή υπολογισμού φόντου θα ρυθμιστεί σε plaidml αντί για ροή tenser.
#!/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:Συσκευή ανοίγματος "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)
Εκτέλεση αρχικής παρτίδας (μεταγλώττιση προγράμματος πλακιδίων)
Επειδή η έξοδος είναι ταχύτερη, εκτυπώνεται μόνο μία γραμμή περιεχομένου.
# 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))
Έτρεξε σε 4,241918087005615 δευτερόλεπτα
Έτρεξε σε 8,452141046524048 δευτερόλεπτα
Έτρεξε σε 12,665411949157715 δευτερόλεπτα
Έτρεξε σε 16,849968910217285 δευτερόλεπτα
Έτρεξε σε 21,025720834732056 δευτερόλεπτα
Έτρεξε σε 25,212764024734497 δευτερόλεπτα
Έτρεξε σε 29,405478954315186 δευτερόλεπτα
Έτρεξε σε 33,594977140426636 δευτερόλεπτα
Έτρεξε σε 37,7886438369751 δευτερόλεπτα
Έτρεξε σε 41,98136305809021 δευτερόλεπτα
Στο στάδιο της επιλογής της κάρτας γραφικών στη ρύθμιση 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!
# 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. Όταν χρησιμοποιείται η έκδοση plaidml=0.7.0, θα παρουσιαστεί σφάλμα στη λειτουργία plaidml.keras.install_backend().
2. Σε αυτό το βήμα, τα keras θα εισαχθούν μέσω plaidml και η μηχανή υπολογισμού φόντου θα ρυθμιστεί σε plaidml αντί για ροή tenser.
#!/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:Συσκευή ανοίγματος "metal_amd_radeon_pro_5300m.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)
Εκτέλεση αρχικής παρτίδας (μεταγλώττιση προγράμματος πλακιδίων)
Επειδή η έξοδος είναι ταχύτερη, εκτυπώνεται μόνο μία γραμμή περιεχομένου.
# 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))
Προβολή εξόδου
Έτρεξε σε 0,43606019020080566 δευτερόλεπτα
Έτρεξε σε 0,8583459854125977 δευτερόλεπτα
Έτρεξε σε 1,2787911891937256 δευτερόλεπτα
Έτρεξε σε 1,70143723487854 δευτερόλεπτα
Έτρεξε σε 2,1235032081604004 δευτερόλεπτα
Έτρεξε σε 2,5464580059051514 δευτερόλεπτα
Έτρεξε σε 2,9677979946136475 δευτερόλεπτα
Έτρεξε σε 3,390064001083374 δευτερόλεπτα
Έτρεξε σε 3,8117799758911133 δευτερόλεπτα
Έτρεξε σε 4,236911058425903 δευτερόλεπτα
Η τιμή μνήμης της κάρτας γραφικών metal_intel®_uhd_graphics_630.0 είναι 1536 MB, αν και ως κάρτα γραφικών, η απόδοσή της στους υπολογισμούς δεν είναι τόσο καλή όσο η CPU 6 πυρήνων αυτού του μηχανήματος.
Η κάρτα γραφικών metal_amd_radeon_pro_5300m.0 έχει τιμή μνήμης 4G Σε σύγκριση με την εγγενή CPU, η απόδοσή της είναι σχεδόν 1 φορές υψηλότερη.
Από αυτό μπορούμε να δούμε τα ισχυρά πλεονεκτήματα της χρήσης GPU σε λειτουργίες μηχανικής εκμάθησης.