Technology sharing

2. Mac localiter utitur GPU ad keras calculos committitur

2024-07-12

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

1. Problem background

Ex articulo praecedente deprehendimus in operatione magnarum exemplorum, cum CPU operandi usus est, CPU usus altissimus esse. Ideo hic cogitabimus si card in machina graphics sit GPU, quomodo uti possumus card graphics in operationibus vectoris et machinae operationes discendi relatas cito et bene praestare.

2. Technical background

Scimus hodiernam graphicae schedulae amet, quae machinam discendi sustinent, Nvidas chartarum graphicas series esse, vulgo N chartas notas. Sed in machinis Mac, AMD series graphicae schedulae integrari solent. Discrimen inter duas varias institutiones ferrarias ponit ad necessitatem exsequendam technologiarum in superiore iacuit.
Sed in chartis AMD graphics, technologia PlaidML, per hoc obturaculum, differentiae diversorum chartarum graphicarum encapsulari possunt.

PlaidML inscriptio project: https://github.com/plaidml/plaidml
In statu, PlaidML instrumenta iam sustinet ut Keras, ONNX, et nGraph. Keras directe uteris ad exemplar aedificandum, et MacBook facile GPU vocant.
Per hoc instrumentum, nomine PlaidML, alta eruditionis institutio facile confici potest quantumvis NVIDIA, AMD vel Intel graphicae cinematographicae.

refer ad:Mac accelerat supplementum eruditionis eruditionis cum PlaidML

3. Experimentum verificationis

In hac operatione, pro conventionali algorithmo keras, multiplices calculi circumitus in CPU et GPU respective fiunt, et statisticae tempus consumens sunt. Fac mutant comparativum.

Patria configuratione

Progressio et ferramenta parametri machinae machinæ hoc tempore adhibitae sunt:
Insert imaginem descriptionis hic

install PlaidML

Cum processus institutionis dependens sarcinarum commercium imperare postulat, institutio fasciculi plaidML in linea mandati peragitur, et signum exsecutionis in iupytro perficitur.

Cum jupyter technica puncta habebit quae nuclei creationem requirunt cum virtualis ambitus utens, commendatur ut directo pythone originali utatur ad verificationem temporis existentis. Discipuli, qui proprietates Iovis in virtualis environment, conformationem intelligunt, conantur eam operari in virtualis environment.

Install plaidml-keras

pip3  install plaidml-keras
  • 1

Postquam auctor mandatum pip3 inaugurare plaidml-keras usus est ut novam versionem plaidml-keras institueret, quae est 0.7.0, cimex cum operatione initializationi faciendo consuetus. Sed tunc iterum inauguratus sum sicut 0.7.0 et iterum consuetus erat.
plaidml in github

Configurare default graphics card

Facere order versus

plaidml-setup
  • 1

Contentus interactive talis est

(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

Praesens graphics schedulas enumerare et inter 2 schedulas graphics subnixas inter defaltam aut omnia 6 ferramenta sustineri in periodo experimentali elige.
Videre potes duos chartas graphicas defaltatas suffultas, quae sunt duae chartae graphics actuales in primo screenshot. Tentatis causa stabilitatis, N primum elige et preme Intra.

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

Pro defectu delectu occasus, defaltam fabricam ponemus. Hic primum metal_intel®_uhd_graphics_630.0 ponemus ut defalta fabrica comparatio.
Post scripturam 1, presse Penetro.

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

Torcular Intra scribe informationes configurationis in lima defalta ut configurationem perficiam.

Currere codice, qui computando utitur CPU

In hac sectione, jupyter simplex algorithmus codicem currere consuevit et suo tempore numeratur.

Gradus 1 Imprimis importo sarcinam keras et notas cifar10 import. Hoc potest involvere de retis extraneis.Basic quaestiones de usura 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

Nota quod defectus keralis computandi backend hic debet uti tense profluvio, siste output

2024-07-11 14:36:02.753107: I tensorflow/core/platform/cpu_feature_guard.cc:210] Hoc TensorFlow binarius optimized est uti available CPU instructiones in operationibus agendis criticis.
Ut sequentes instructiones faciant: AVX2 FMA, in aliis operibus, TensorFlow reficere cum vexillis congruis compilator.

Gradus 2 Inferre exemplar calculi.Basic quaestiones de usura keras
model = kapp.VGG19()
  • 1
step3 exemplar compilation
model.compile(optimizer='sgd', loss='categorical_crossentropy',metrics=['accuracy'])
  • 1
step4 fac praedictionem
print("Running initial batch (compiling tile program)")
y = model.predict(x=x_train, batch_size=batch_size)
  • 1
  • 2

Cursor initialis batch (tegularum programma componendis)
1/1 1s 1s/gradus

step5 Fac X praedictiones
# 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/gradus
Cucurrit in 0.9295139312744141 seconds
1/1 1s 923ms/gradus
Cucurrit in 1.8894760608673096 seconds
1/1 1s 893ms/gradus
Cucurrit 2.818492889404297 seconds
1/1 1s 932ms/gradus
Cucurrit 3.7831668853759766 seconds
1/1 1s 892ms/gradus
Currens in 4.71358585357666 seconds
1/1 1s 860ms/gradus
Currens in 5.609835863113403 seconds
1/1 1s 878ms/gradus
Cucurrit 6.5182459354400635 seconds
1/1 1s 871ms/gradus
Currens in 7.423128128051758 seconds
1/1 1s 896ms/gradus
Cucurrit in 8.352543830871582 seconds
1/1 1s 902ms/gradus
Cucurrit in 9.288795948028564 seconds

Currere codice utens GPU computing

Using graphics card metal_intel®_uhd_graphics_630.0

step0 Import keras per plaidml, et fac keras actis operationibus
# 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

Nota:
1. Cum plaidml=0.7.0 versio adhibetur, error in operatione plaidml.keras.install_backend() occurret.
2. In hoc gradu, keras per plaidml importabitur, et background machina computandi ad plaidml loco tenserflow ponetur.

step1 Primum import keras sarcina et importare notitia 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
step2 Exemplar calculi importe. Si data exemplar localiter non existit, automatice recepta est.
model = kapp.VGG19()
  • 1

Output graphics card in primo notitia detegere

INFO:plaidml: Aperiens fabrica "metal_intel®_uhd_graphics_630.0"

step3 exemplar compilation
model.compile(optimizer='sgd', loss='categorical_crossentropy',metrics=['accuracy'])
  • 1
step4 fac praedictionem
print("Running initial batch (compiling tile program)")
y = model.predict(x=x_train, batch_size=batch_size)
  • 1
  • 2

Cursor initialis batch (tegularum programma componendis)

Quia output velocior est, una tantum linea contenti typis impressa est.

step5 Fac X praedictiones
# 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

Cucurrit 4.241918087005615 seconds
Cucurrit in 8.452141046524048 seconds
Cucurrit in 12.665411949157715 seconds
Cucurrit in 16.849968910217285 seconds
Cucurrit in 21.025720834732056 seconds
Currens in 25.212764024734497 seconds
Cucurrit in 29.405478954315186 seconds
Cucurrit in 33.59497714042636 seconds
Cucurrit in 37.7886438369751 seconds
Cucurrit in 41.98136305809021 seconds

Using graphics card metal_amd_radeon_pro_5300m.0

In stadio seligendo chartam graphics in plaidml-setup occasum, card graphicae metalli_intel®_uhd_graphics_630.0 non iam electus est, sed metal_amd_radeon_pro_5300m.0 seligitur.

(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
step0 Import keras per plaidml, et fac keras actis operationibus
# 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

Nota:
1. Cum plaidml=0.7.0 versio adhibetur, error in operatione plaidml.keras.install_backend() occurret.
2. In hoc gradu, keras per plaidml importabitur, et background machina computandi ad plaidml loco tenserflow ponetur.

step1 Primum import keras sarcina et importare notitia 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
step2 Exemplar calculi importe. Si data exemplar localiter non existit, automatice recepta est.
model = kapp.VGG19()
  • 1

INFO:plaidml: Aperiens fabrica "metal_amd_radeon_pro_5300m.0"
Nota quod informationes graphicae electronicae hic primum inseruntur.

step3 exemplar compilation
model.compile(optimizer='sgd', loss='categorical_crossentropy',metrics=['accuracy'])
  • 1
step4 fac praedictionem
print("Running initial batch (compiling tile program)")
y = model.predict(x=x_train, batch_size=batch_size)
  • 1
  • 2

Cursor initialis batch (tegularum programma componendis)

Quia output velocior est, una tantum linea contenti typis impressa est.

step5 Fac X praedictiones
# 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

View output

Cucurrit in 0.436060190020080566 seconds
Cucurrit in 0.8583459854125977 seconds
Cucurrit in 1.2787911891937256 seconds
Cucurrit in 1.70143723487854 seconds
Cucurrit in 2.1235032081604004 seconds
Cucurrit 2.5464580059051514 seconds
Currens in 2.9677979946136475 seconds
Cucurrit 3.390064001083374 seconds
Currens in 3.811779975891133 seconds
Cucurrit 4.236911058425903 seconds

4. Discussion iudicium

Memoria valoris chartae graphicae metalli_intel®_uhd_graphics_630.0 est 1536 MB.
Graphics chartae metalli_amd_radeon_pro_5300m.0 memoriam valoris 4G habet.

Hinc videre possumus magnas utilitates GPUs in machina discendi utendi operationibus.