2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Edellisestä artikkelista olemme havainneet, että suurten mallien toiminnassa CPU:ta käytettäessä prosessorin käyttö on erittäin korkeaa. Siksi pohditaan tässä, että jos koneessa on GPU-näytönohjain, kuinka voimme hyödyntää näytönohjainta vektorioperaatioissa ja suorittaa koneoppimiseen liittyvät toiminnot nopeasti ja hyvin.
Tiedämme, että nykyiset koneoppimista tukevat valtavirran näytönohjaimet ovat Nvida-sarjan näytönohjaimia, jotka tunnetaan yleisesti nimellä N-kortit. Mac-koneissa AMD-sarjan näytönohjaimet ovat kuitenkin yleensä integroituja. Kahden erilaisen laitteistokäskyjoukon välinen ero johtaa siihen, että ylemmässä kerroksessa tarvitaan erilaisia toteutustekniikoita.
Mutta AMD-näytönohjainkorteissa on PlaidML-tekniikka, jonka kautta eri näytönohjainkorttien erot voidaan kapseloida tämän laajennuksen avulla.
PlaidML-projektin osoite: https://github.com/plaidml/plaidml
Tällä hetkellä PlaidML tukee jo työkaluja, kuten Keras, ONNX ja nGraph. Voit käyttää Kerasta suoraan mallin rakentamiseen, ja MacBookisi voi helposti kutsua GPU:ta.
Tämän PlaidML-nimisen työkalun avulla voit suorittaa syvän oppimisen harjoittelun helposti riippumatta NVIDIA-, AMD- tai Intel-näytönohjainkorteista.
viitata:Mac käyttää PlaidML:ää nopeuttamaan vahvistusoppimiskoulutusta
Tässä toiminnossa tavanomaiselle keras-algoritmille suoritetaan useita laskutoimituksia CPU:lle ja GPU:lle, vastaavasti, ja tilastot ovat aikaa vieviä. Tee vertailevia tilastoja.
Tällä kertaa käytetyn mac-koneen ohjelmisto- ja laitteistoparametrit ovat seuraavat:
Koska riippuvien pakettien asennusprosessi vaatii komentovuorovaikutusta, plaidML-paketin asennus suoritetaan komentorivillä ja koodin suoritus suoritetaan jupyterissä.
Koska jupyterissa on teknisiä kohtia, jotka edellyttävät ytimen luomista virtuaaliympäristöä käytettäessä, on suositeltavaa käyttää toistaiseksi suoraan alkuperäistä python-ympäristöä varmentamiseen. Opiskelijat, jotka ymmärtävät jupyterin konfigurointiominaisuudet virtuaaliympäristössä, voivat yrittää käyttää sitä virtuaaliympäristössä.
pip3 install plaidml-keras
Kun kirjoittaja käytti komennolla pip3 install plaidml-keras asentaakseen plaidml-kerasin uusimman version, joka on 0.7.0, törmäsin virheeseen alustusoperaatiota tehdessäni normaali. Mutta kun se oli asennettu uudelleen 0.7.0:aan, se oli taas normaali.
plaidml githubissa
Suorita komentorivillä
plaidml-setup
Interaktiivinen sisältö on seuraava
(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]:
Luettele tällä hetkellä tuetut näytönohjaimet ja valitse joko 2 tuetun näytönohjaimen välillä tai kaikki 6 tuettua laitteistoa koevaiheessa.
Näet kaksi oletusarvoisesti tuettua näytönohjainta, jotka ovat alkuperäisen kuvakaappauksen kaksi todellista näytönohjainta. Testin vakauden vuoksi valitse ensin N ja paina 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
Oletusasetuksille asetamme oletuslaitteeksi metal_intel®_uhd_graphics_630.0. Tämän laitteen suorituskyky on itse asiassa suhteellisen heikko. Myöhemmin asetamme oletuslaitteeksi vertailu.
Kun olet kirjoittanut 1, paina 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!
Paina Enter kirjoittaaksesi määritystiedot oletusasetustiedostoon konfiguroinnin viimeistelemiseksi.
Tässä osiossa jupyteriä käytetään yksinkertaisen algoritmikoodin suorittamiseen ja sen aika lasketaan.
#!/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)
Huomaa, että tämän oletuskeral-laskentataustaohjelman tulisi käyttää tenserflow:ta, tarkista tulos
2024-07-11 14:36:02.753107: I tensorflow/core/platform/cpu_feature_guard.cc:210] Tämä TensorFlow-binaari on optimoitu käyttämään käytettävissä olevia suorittimen ohjeita suorituskykykriittisissä operaatioissa.
Ota seuraavat ohjeet käyttöön: AVX2 FMA muissa toiminnoissa rakentaa TensorFlow uudelleen asianmukaisilla kääntäjälippuilla.
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)
Alkuerän suorittaminen (laattaohjelman käännös)
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 1s/askel
# 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 ━━━━━━━━━━━━━━━━━━━━ 1 s 891 ms/askel
Juoksui 0,9295139312744141 sekunnissa
1/1 ━━━━━━━━━━━━━━━━━━━━ 1 s 923 ms/askel
Juoksu 1,8894760608673096 sekunnissa
1/1 ━━━━━━━━━━━━━━━━━━━━ 1 s 893 ms/askel
Juoksu 2,818492889404297 sekunnissa
1/1 ━━━━━━━━━━━━━━━━━━━━ 1 s 932 ms/askel
Juoksui 3,7831668853759766 sekunnissa
1/1 ━━━━━━━━━━━━━━━━━━━━ 1 s 892 ms/askel
Juoksui 4,71358585357666 sekunnissa
1/1 ━━━━━━━━━━━━━━━━━━━━ 1 s 860 ms/askel
Juoksu 5,609835863113403 sekunnissa
1/1 ━━━━━━━━━━━━━━━━━━━━ 1 s 878 ms/askel
Juoksu 6,5182459354400635 sekunnissa
1/1 ━━━━━━━━━━━━━━━━━━━━ 1 s 871 ms/askel
Juoksu 7,423128128051758 sekunnissa
1/1 ━━━━━━━━━━━━━━━━━━━━ 1 s 896 ms/askel
Juoksui 8,352543830871582 sekunnissa
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 902ms/askel
Juoksui 9,288795948028564 sekunnissa
# Importing PlaidML. Make sure you follow this order
import plaidml.keras
plaidml.keras.install_backend()
import os
os.environ["KERAS_BACKEND"] = "plaidml.keras.backend"
Huomautus:
1. Kun plaidml=0.7.0-versiota käytetään, plaidml.keras.install_backend() -operaatiossa tapahtuu virhe.
2. Tässä vaiheessa keras tuodaan plaidml:n kautta ja taustalaskentamoottoriksi asetetaan plaidml tenserflown sijaan.
#!/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()
Tulosta näytönohjaimen tiedot ensimmäisellä kerralla
INFO:plaidml: Avauslaite "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)
Alkuerän suorittaminen (laattaohjelman käännös)
Koska tuloste on nopeampi, vain yksi sisältörivi tulostetaan.
# 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))
Juoksu 4,241918087005615 sekunnissa
Juoksu 8,452141046524048 sekunnissa
Juoksu 12,665411949157715 sekunnissa
Juoksui 16,849968910217285 sekunnissa
Juoksu 21,025720834732056 sekunnissa
Juoksu 25,212764024734497 sekunnissa
Juoksu 29,405478954315186 sekunnissa
Juoksu 33,594977140426636 sekunnissa
Juoksu 37,7886438369751 sekunnissa
Juoksu 41,98136305809021 sekunnissa
Näytönohjaimen valintavaiheessa plaidml-setup-asetuksissa näytönohjainta metal_intel®_uhd_graphics_630.0 ei enää valita, mutta valittuna on 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"
Huomautus:
1. Kun plaidml=0.7.0-versiota käytetään, plaidml.keras.install_backend() -operaatiossa tapahtuu virhe.
2. Tässä vaiheessa keras tuodaan plaidml:n kautta ja taustalaskentamoottoriksi asetetaan plaidml tenserflown sijaan.
#!/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: Avauslaite "metal_amd_radeon_pro_5300m.0"
Huomaa, että näytönohjaimen tiedot syötetään tähän ensimmäistä kertaa.
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)
Alkuerän suorittaminen (laattaohjelman käännös)
Koska tuloste on nopeampi, vain yksi sisältörivi tulostetaan.
# 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))
Näytä tulos
Juoksu 0,43606019020080566 sekunnissa
Juoksui 0,8583459854125977 sekunnissa
Juoksui 1,2787911891937256 sekunnissa
Juoksui 1,70143723487854 sekunnissa
Juoksu 2,1235032081604004 sekunnissa
Juoksu 2,5464580059051514 sekunnissa
Juoksu 2,9677979946136475 sekunnissa
Juoksu 3,390064001083374 sekunnissa
Juoksui 3,8117799758911133 sekunnissa
Juoksu 4,236911058425903 sekunnissa
Grafiikkakortin metal_intel®_uhd_graphics_630.0 muistiarvo on 1536 Mt. Vaikka näytönohjain onkin, sen suorituskyky laskelmissa ei ole yhtä hyvä kuin tämän koneen 6-ytiminen prosessori.
Näytönohjaimen metal_amd_radeon_pro_5300m.0 muistiarvo on 4G Verrattuna alkuperäiseen prosessoriin, sen suorituskyky on lähes 1 kertaa suurempi.
Tästä voimme nähdä GPU:n käytön tehokkaat edut koneoppimistoiminnassa.