[PYTHON] GPU ~ Implémentation de PlaidML sur Mac ~ (à partir de mai 2020)

Pour ceux qui ont terminé ce réglage une fois

C'est la procédure pour démarrer jupyter à partir de la prochaine fois. Nous avons préparé une version simplifiée, nous vous serions reconnaissants de bien vouloir vous y référer.

[Note] Ordre d'exécution Plaid ML Keras

Environnement d'exécution

Environnement d'exécution 1
machine MacBook Air(Retina, 13-inch,2019)
OS MacOS Catalina version 10.15.4
Mémoire 8 GB 2133 MHz LPDDR3
graphique Intel UHD Graphics 617 1536 MB
module version
Keras 2.2.4
plaidml 0.7.0
plaidml-keras 0.7.0
plaidbench 0.7.0
Environnement d'exécution 2
machine MacBook (Retina, 12-inch, 2017)
OS MacOS Catalina version 10.15.4
Mémoire 8 GB 1867 MHz LPDDR3
graphique Intel HD Graphics 615 1536 MB
module version
Keras 2.2.4
plaidml 0.7.0
plaidml-keras 0.7.0
plaidbench 0.7.0

Motivation pour la mise en œuvre de PlaidML

Le nombre de contenus pouvant être utilisés pour étudier gratuitement l'apprentissage automatique dans GW a augmenté et j'ai décidé d'essayer le système de traitement d'image d'apprentissage automatique que je voulais faire à l'origine. Je n'ai pas de machine avec des spécifications élevées dont je suis fier, et comme je l'ai écrit dans l'environnement d'exécution, l'environnement d'exécution est MacBook, donc si vous ne pouvez pas utiliser le GPU ** NVIDIA **, placez-le sur votre PC. C'est un fardeau, mais cela prend beaucoup de temps. J'ai senti la limite de l'apprentissage avec le processeur seul, alors j'ai essayé d'implémenter PlaidML, qui, selon la rumeur, pourrait apprendre à utiliser le GPU même avec MacBook.

Les références

Je me suis principalement référé à GitHub of Plaid ML.

À propos de la mise en œuvre de PlaidML

Ce que fait le module

PlaidML est un cadre pour les bibliothèques de calculs mathématiques scientifiques développé par Intel et d'autres. Les cadres de bibliothèques de calculs mathématiques scientifiques supportés par Keras en standard incluent tensorflow et Theano. Ces bibliothèques n'étaient prises en charge que sur les GPU NVIDIA lors de la tentative d'utilisation du GPU (graphique) du PC. Sur les Mac équipés de GPU AMD, il n'était pas possible de calculer à l'aide du GPU.

Cependant, ce PlaidML n'est pas lié au fait d'être fait par NVIDIA, c'est un module pour permettre l'utilisation du GPU, et c'est un module adopté comme cadre du back-end de Keras. Dans cette implémentation, nous installerons PlaidML sur ce backend Keras.

Où ça se coince

** Apprentissage automatique sur Mac à l'aide de GPU ** à propos de ça.

la mise en oeuvre

PlaidML Github QuickStart Link QuickStar construit un environnement virtuel en utilisant «virtualenv», mais je ne l'ai pas fait. Il n'y a pas de raison particulière.

Installation des modules requis

module_install


pip3 install plaidml-keras plaidbench
pip3 install keras

Configuration de PlaidML

Configurez PlaidML. Configurez s'il faut calculer à l'aide du CPU ou du GPU dans PlaidML.

plaidml-setup


plaidml-setup

J'ai procédé selon Quick Start, mais j'ai eu une erreur ici. La déclaration d'erreur est la suivante.

error


Traceback (most recent call last):
  File "/usr/local/bin/plaidml-setup", line 5, in <module>
    from plaidml.plaidml_setup import main
  File "/usr/local/lib/python3.7/site-packages/plaidml/__init__.py", line 50, in <module>
    import plaidml.settings
  File "/usr/local/lib/python3.7/site-packages/plaidml/settings.py", line 33, in <module>
    _setup_config('PLAIDML_EXPERIMENTAL_CONFIG', 'experimental.json')
  File "/usr/local/lib/python3.7/site-packages/plaidml/settings.py", line 30, in _setup_config
    'Could not find PlaidML configuration file: "{}".'.format(filename))
plaidml.exceptions.PlaidMLError: Could not find PlaidML configuration file: "experimental.json".

GitHub a déjà discuté de cette erreur. Si vous êtes intéressé, jetez un œil. plaidml.exceptions.PlaidMLError: Could not find PlaidML configuration file: "experimental.json". #370

En conclusion, Puisqu'il y avait une Conclusion qu'une erreur s'est produite parce que le PATH n'a pas réussi, définissez le PATH décrit. .. Exécutez à nouveau ʻexport` et confirmez que l'ensemble PATH est en place ...

PATH


export PLAIDML_NATIVE_PATH=/usr/local/lib/libplaidml.dylib
export RUNFILES_DIR=/usr/local/share/plaidml

export

Exécutez à nouveau la configuration

plaidml-setup


plaidml-setup
~~
Enable experimental device support? (y,n)[n]:y #Sélectionnez y

Multiple devices detected (You can override by setting PLAIDML_DEVICE_IDS).
Please choose a default device:

   1 : llvm_cpu.0
   2 : opencl_intel_uhd_graphics_617.0
   3 : metal_intel(r)_uhd_graphics_617.0

Default device? (1,2,3)[1]:3 #Les deux derniers sont des GPU, cette fois, sélectionnez le graphique 3
~~
#S'il faut enregistrer le résultat de cette sélection
Save settings to /Users/linda/.plaidml? (y,n)[y]:y #Sélectionnez y

Résultat de l'exécution (entier)
PlaidML Setup (0.7.0)

Thanks for using PlaidML!

The feedback we have received from our users indicates an ever-increasing need
for performance, programmability, and portability. During the past few months,
we have been restructuring PlaidML to address those needs.  To make all the
changes we need to make while supporting our current user base, all development
of PlaidML has moved to a branch — plaidml-v1. We will continue to maintain and
support the master branch of PlaidML and the stable 0.7.0 release.

Read more here: https://github.com/plaidml/plaidml 

Some Notes:
  * Bugs and other issues: https://github.com/plaidml/plaidml/issues
  * 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:
   llvm_cpu.0 : CPU (via LLVM)
   metal_intel(r)_uhd_graphics_617.0 : Intel(R) UHD Graphics 617 (Metal)

Experimental Config Devices:
   llvm_cpu.0 : CPU (via LLVM)
   opencl_intel_uhd_graphics_617.0 : Intel Inc. Intel(R) UHD Graphics 617 (OpenCL)
   metal_intel(r)_uhd_graphics_617.0 : Intel(R) UHD Graphics 617 (Metal)

Using experimental devices can cause poor performance, crashes, and other nastiness.

Enable experimental device support? (y,n)[n]:y
Multiple devices detected (You can override by setting PLAIDML_DEVICE_IDS).
Please choose a default device:

   1 : llvm_cpu.0
   2 : opencl_intel_uhd_graphics_617.0
   3 : metal_intel(r)_uhd_graphics_617.0

Default device? (1,2,3)[1]:3

Selected device:
    metal_intel(r)_uhd_graphics_617.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/linda/.plaidml? (y,n)[y]:y
Success!

Benchmark de performance d'inférence

Ensuite, comparons les performances d'inférence de MobileNet.

plaidbench keras mobilenet
Running 1024 examples with mobilenet, batch size 1, on backend plaid
INFO:plaidml:Opening device "metal_intel(r)_uhd_graphics_617.0"
Compiling network...INFO:plaidml:Analyzing Ops: 266 of 413 operations complete
 Warming up... Running...
Example finished, elapsed: 2.280s (compile), 32.101s (execution)

-----------------------------------------------------------------------------------------
Network Name         Inference Latency         Time / FPS          
-----------------------------------------------------------------------------------------
mobilenet            31.35 ms                  0.00 ms / 1000000000.00 fps
Correctness: PASS, max_error: 6.440454399125883e-06, max_abs_error: 5.811452865600586e-07, fail_ratio: 0.0

Deuxième ligne à partir du haut ʻINFO: plaidml: Dispositif d'ouverture "metal_intel (r) _uhd_graphics_617.0" ` Vous pouvez voir que l'accélérateur que vous avez configuré est en cours de benchmark.

En fait, le réglage lui-même est terminé jusqu'à présent, mais vérifions si le back-end de Keras est vraiment changé en PlaidML.

Démarrez jupyter sur un terminal via ce PATH etc.

<détails>

Soyez prudent </ summary> Si vous démarrez Jupyter dans une autre fenêtre de terminal ou fermez la fenêtre de terminal que vous avez configurée jusqu'à présent, les paramètres seront réinitialisés.

Confirmation de PlaidML

Sur Jupyter

import plaidml.keras
plaidml.keras.install_backend() #Définir sur le backend
import keras
print(keras.backend.backend()) #Vérification du back-end de Keras

>>> tensorflow

Le backend keras reste tensorflow.

Pour définir Plaidml comme backend de keras,

python


plaidml.keras.install_backend() #Définir sur le backend

Au lieu de cela, vous devez définir le PATH à définir sur le backend.

python


export KERAS_BACKEND=plaidml.keras.backend

Si vous cochez après avoir défini ce PATH ...



#### **`python`**
```python

import keras
print(keras.backend.backend())

>>>plaidml.keras.backend

Vous pouvez voir qu'il a été modifié.

#finalement J'aimerais étudier le système d'analyse d'images dans le futur.

#Littérature liée Rêver de NVIDIA~ PlaidML ~

Recommended Posts

GPU ~ Implémentation de PlaidML sur Mac ~ (à partir de mai 2020)
Implémentation de MathJax sur Sphinx
Manipulation de python sur mac
Utilisez Colab uniquement comme environnement GPU externe (à partir de 2020.6 / environnement Mac)
Construire un environnement pour python3.8 sur Mac
Vérification du GPU du PC sur le notebook Jupyter
Essayez d'exécuter le jugement d'image PlaidML sur Mac
python sur mac
Remarques sur l'installation de Chainer 1.5 pour GPU sous Windows
Prise en charge de l'environnement d'exécution Python 2.7 sur AWS Lambda (à partir de 2020.1)
Mettre en œuvre des cadres photo optimisés personnellement avec Raspberry Pi