-Essai et erreur pour exécuter les "Addons TensorFlow et TensorFlow optimisés pour Mac" (https://github.com/apple/tensorflow_macos) avec MacBook Air avec M1 --Migrer votre environnement depuis MacBook Pro (début 2015) avec l'architecture Intel et rechercher des moyens de s'adapter à l'architecture ARM
La nouvelle puce d'Apple "M1" dont les détails ont été publiés lors de l'événement Apple qui s'est tenu à partir de 03h00 le 11 novembre 2020, heure du Japon.
Dans l'annonce, j'étais curieux car le nom du logiciel spécifique était "TensorFlow", mais après cela, "Mac-optimisé TensorFlow et TensorFlow Addons" (https: :) de l'organisation GitHub d'Apple. //github.com/apple/tensorflow_macos) a été publié. Il s'agit d'un pilote de pré-version qui utilise le framework ML Compute
d'Apple.
Je pensais juste à le remplacer par MacBook Pro (début 2015), j'ai donc décidé d'acheter un MacBook Air avec une puce M1 et de l'expérimenter. [^ 1]
[^ 1]: C'était impressionnant que l'annonce et la réservation aient commencé le 11/11/2020 (JST), et j'ai également décidé de l'acheter. Si vous n'êtes pas doué pour les jeux, l'animation, etc. et que vous avez du temps libre, veuillez rechercher "Idol Master Hobby Programming Birthday". Je n'ai pas fait beaucoup de "développement" cette fois, mais j'ai été influencé par le "développement piloté par Imus" (référence: https://www.slideshare.net/treby/imas-driven-developemnt) à cet égard. On peut dire que
Il y avait des choses qui sont restées bloquées dans le déplacement de tensorflow_macos
d'un Mac avec une architecture Intel vers un Mac avec une architecture basée sur ARM, donc j'aimerais en garder une trace. [^ 2]
Je suis en retard, mais je m'appelle @ forest1988. C'est la première fois que je poste sur Qiita. Je pense qu'il y a de nombreuses parties qui ne peuvent pas être atteintes, mais je vous serais reconnaissant de bien vouloir jeter un coup d'œil et de trouver des parties utiles en plus.
Il peut y avoir une partie qui est inutilement détournée parce que j'ai écrit le processus d'essais et d'erreurs, ou une erreur due à mon malentendu. Si vous avez des questions, je vous serais très reconnaissant de bien vouloir les signaler.
[^ 2]: Concernant le fonctionnement de l'architecture Intel sur Mac, l'article de Qiita "Apple semble avoir publié tensorflow pour mac, je vais donc l'installer sur le MacBook air d'Intel" (https://qiita.com/notfolder/items) / b27cc00bd77eb1587832), que j'ai utilisé comme référence. Merci.
En raison de la migration de l'environnement, il y a quelques changements par rapport à l'état initial de macOS 11 (Big Sur) (par exemple, le shell du terminal n'est pas zsh mais le bash utilisé avant macOS Catalina). ..
Par conséquent, ceux qui utilisent Big Sur avec M1 dans un état propre sans migrer de données, ceux qui migrent depuis une machine Windows, etc., et ceux qui ont créé un environnement complètement différent en premier lieu sont différents. Veuillez noter qu'il y a de fortes chances que des résultats différents soient obtenus si vous faites de même.
J'ai pu copier l'environnement python que j'ai créé avec MacBook Pro tel quel, alors j'ai d'abord essayé de l'exécuter. Plus précisément, il se trouve dans l'état où anaconda3-2020.07 a été installé dans pyenv. La version Python était la 3.8.3.
Suivez le lien et téléchargez tensorflow_macos-0.1alpha0.tar.gz
sur https://github.com/apple/tensorflow_macos/releases.
Le référentiel GitHub contient des scripts pour le téléchargement et l'installation, mais ce fichier compressé de pré-version contient TensorFlow optimisé, etc. (qui peut être téléchargé par script), donc sa taille est d'environ 331,6 Mo. Il est devenu.
Tout d'abord, créez un environnement virtuel pour tensorflow_macos
en utilisant venv dans Python 3.8.
J'avais peur que l'ajout de plus de venv à l'anaconda de pyenv le rende étrange ... mais j'ai décidé de l'essayer (comme je l'expliquerai plus tard, c'était un problème avant cela).
$ /bin/bash install_venv.sh --prompt --python /path/to/anaconda3-2020.7/bin/python
J'ai couru et j'ai continué avec les paramètres par défaut pour les invites sur le chemin. [^ 3]
Un répertoire tensorflow_macos_venv
sera créé à l'emplacement spécifié à l'invite, et vous pouvez entrer dans l'environnement virtuel créé en utilisant / bin / activate
ici. [^ 4]
[^ 3]: zsh devrait être la valeur par défaut de macOS Catalina, donc je suis curieux de savoir s'il y a une raison d'oser utiliser bash.
[^ 4]: Le nom d'hôte et le nom d'utilisateur qui peuvent être affichés dans la configuration de $ PS1
sont remplacés par primary_prompt_string
, et l'endroit où tensorflow_macos_venv est placé est remplacé par/ path / to /
. Nous espérons que vous le lirez en fonction de votre propre environnement. Surtout pour le premier, je me suis référé à l'article suivant. Merci: "Personnalisez la sortie avant $ dans le terminal [Mac]" (https://www.yoheim.net/blog.php?q=20140309), "Vérifiez et définissez les invites --Pocketstudio.jp Linux Wiki (http://pocketstudio.jp/linux/?%A5%D7%A5%ED%A5%F3%A5%D7%A5%C8%A4%CE%B3%CE%C7%A7%A4%E4 % C0% DF% C4% EA)
$ . /path/to/tensorflow_macos_venv/bin/activate
(tensorflow_macos_venv) (base) primary_prompt_string$ python
Python 3.8.3 (default, Jul 2 2020, 11:26:31)
[Clang 10.0.0 ] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
Le README.md dans le référentiel tensorflow_macos contient un extrait de code pour choisir le CPU et le GPU, j'ai donc décidé de l'essayer en premier. Fait.
# Import mlcompute module to use the optional set_mlc_device API for device selection with ML Compute.
from tensorflow.python.compiler.mlcompute import mlcompute
Essayons cela avec python, qui a été lancé plus tôt en mode interactif.
>>> # Import mlcompute module to use the optional set_mlc_device API for device selection with ML Compute.
>>> from tensorflow.python.compiler.mlcompute import mlcompute
Traceback (most recent call last):
File "/path/to/tensorflow_macos_venv/lib/python3.8/site-packages/tensorflow/python/pywrap_tensorflow.py", line 64, in <module>
from tensorflow.python._pywrap_tensorflow_internal import *
ImportError: dlopen(/path/to/tensorflow_macos_venv/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so, 6): no suitable image found. Did find:
/path/to/tensorflow_macos_venv/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so: mach-o, but wrong architecture
/path/to/tensorflow_macos_venv/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so: mach-o, but wrong architecture
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/path/to/tensorflow_macos_venv/lib/python3.8/site-packages/tensorflow/__init__.py", line 41, in <module>
from tensorflow.python.tools import module_util as _module_util
File "/path/to/tensorflow_macos_venv/lib/python3.8/site-packages/tensorflow/python/__init__.py", line 39, in <module>
from tensorflow.python import pywrap_tensorflow as _pywrap_tensorflow
File "/path/to/tensorflow_macos_venv/lib/python3.8/site-packages/tensorflow/python/pywrap_tensorflow.py", line 83, in <module>
raise ImportError(msg)
ImportError: Traceback (most recent call last):
File "/path/to/tensorflow_macos_venv/lib/python3.8/site-packages/tensorflow/python/pywrap_tensorflow.py", line 64, in <module>
from tensorflow.python._pywrap_tensorflow_internal import *
ImportError: dlopen(/path/to/tensorflow_macos_venv/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so, 6): no suitable image found. Did find:
/path/to/tensorflow_macos_venv/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so: mach-o, but wrong architecture
/path/to/tensorflow_macos_venv/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so: mach-o, but wrong architecture
Failed to load the native TensorFlow runtime.
See https://www.tensorflow.org/install/errors
for some common reasons and solutions. Include the entire stack trace
above this error message when asking for help.
Dans cet esprit, j'ai décidé d'essayer l'autre méthode d'installation. Voir Élément INSTALLATION dans README.md du référentiel J'ai exécuté le script suivant.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/apple/tensorflow_macos/master/scripts/download_and_install.sh)"
La même erreur s'est reproduite, j'ai vérifié à nouveau le message d'erreur et j'ai remarqué l'endroit appelé «mauvaise architecture».
Je soupçonnais que la cause était que l'anaconda que j'utilisais était compatible avec l'architecture Intel x86-64, j'ai donc décidé de réorganiser l'environnement Python.
Tout d'abord, j'ai supprimé les paramètres PATH pour pyenv
et anaconda
de ~ / .bash_profile
et redémarré le terminal. Vous ne devriez plus vous référer à pyenv, anaconda que vous avez copié depuis la machine source.
Après cela, lorsque j'ai essayé de réinstaller Python avec Homebrew qui était déjà inclus, j'ai rencontré l'erreur suivante.
Error: Cannot install in Homebrew on ARM processor in Intel default prefix (/usr/local)!
Please create a new installation in /opt/homebrew using one of the
"Alternative Installs" from:
https://docs.brew.sh/Installation
You can migrate your previously installed formula list with:
brew bundle dump
Lisez "Alternative javax" et réinstallez Homebrew comme suit:
$ mkdir homebrew && curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew
$ mv homebrew/ /opt/
Ajoutez ce qui suit à ~ / .bashrc
et
export PATH=/opt/homebrew/bin/:$PATH
Réfléchissez en utilisant source
.
$ source ~/.bashrc
Ensuite, utilisez brew bundle dump
pour créer une liste des packages installés. [^ 5]
[^ 5]: Puisqu'il faut le faire avec Homebrew qui a déjà été installé, je pense qu'il aurait été préférable de l'exécuter avant d'installer un nouveau Homebrew sans avoir à spécifier le chemin complet.
$ /usr/local/Homebrew/bin/brew bundle dump
En conséquence, le fichier suivant a été généré en tant que «Brewfile».
tap "cartr/qt4"
tap "homebrew/bundle"
...
<Abréviation>
...
tap "sanemat/font"
brew "automake"
brew "[email protected]"
brew "[email protected]"
...
<Abréviation>
...
brew "sanemat/font/ricty"
Cela se reflète comme suit.
$ brew tap Homebrew/bundle
$ touch Brewfile
$ brew bundle --file Brewfile
Cependant, j'ai reçu l'avertissement suivant et j'ai échoué à installer certains packages.
Warning: You are running macOS on a arm64 CPU architecture.
We do not provide support for this (yet).
Reinstall Homebrew under Rosetta 2 until we support it.
You will encounter build failures with some formulae.
Please create pull requests instead of asking for help on Homebrew's GitHub,
Twitter or any other official channels. You are responsible for resolving
any issues you experience while you are running this
unsupported configuration.
J'ai pu mettre en Python, mais il était susceptible de causer le même problème qu'avant, donc je vais le désinstaller et continuer.
EXIGENCES décrit l'utilisation des outils de ligne de commande Xcode.
$ xcode-select --install
J'ai mis dans les outils de ligne de commande Xcode. [^ 6]
Je me suis demandé si cela résoudrait le problème de Python ... mais peut-être à cause de la migration de l'environnement, Python 3.9 fonctionne pour une raison quelconque.
Avec cela, j'étais impatient que tensorflow_macos
, qui nécessite Python 3.8, ne fonctionne pas ... mais il y avait deux causes.
/ usr / local / bin / python3
probablement à cause de la migration de l'environnement.Apparemment, l'une des causes était que le Python installé par Homebrew ne pouvait pas être désinstallé avec succès.
Quand j'ai vérifié avec quel python
, / opt / homebrew / bin // python3
était référencé. [^ 7]
Même à partir de la date affichée lors de son exécution, il semble que ce soit celui au moment de l'installation ci-dessus.
Si vous essayez de le désinstaller à nouveau,
$ brew uninstall python3
Error: Refusing to uninstall /opt/homebrew/Cellar/[email protected]/3.9.0_2
because it is required by itstool, libxml2 and sphinx-doc, which are currently installed.
You can override this and force removal with:
brew uninstall --ignore-dependencies python3
Une erreur s'affichera. Suivez ces instructions pour désinstaller.
$ brew uninstall --ignore-dependencies python3
Uninstalling /opt/homebrew/Cellar/[email protected]/3.9.0_2... (9,224 files, 137.5MB)
Maintenant, vers lequel python3
pointe / usr / local / bin / python3
.
Cependant, c'est aussi Python 3.9.0.
$ /usr/local/bin/python3
Python 3.9.0 (default, Nov 4 2020, 22:18:28)
[Clang 12.0.0 (clang-1200.0.32.21)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
Maintenant, en regardant l'avertissement Homebrew,
Error: Cannot install in Homebrew on ARM processor in Intel default prefix (/usr/local)!
Était écrit.
J'avais l'habitude de l'utiliser sans réfléchir en détail, mais le fait que / usr / local
soit le préfixe par défaut d'Intel et ne prend pas en charge le processeur ARM signifie que
D'où vient le python dans ce / usr / local / bin
?
Peut-être que le Python qui a été installé dans Homebrew avant la migration de l'environnement reste. Par conséquent, essayez de désinstaller à l'aide de Homebrew qui a été installé avant la migration.
$ /usr/local/Homebrew/bin/brew uninstall python3
J'obtiens la même erreur de dépendance qu'avant, alors ajoutez --ignore-dependencies
et réessayez.
$ /usr/local/Homebrew/bin/brew uninstall --ignore-dependencies python3
Cette fois, la désinstallation a réussi et quel python3
pointe maintenant / usr / bin / python3
.
$ which python3
/usr/bin/python3
$ python3
Python 3.8.2 (default, Oct 2 2020, 10:45:41)
[Clang 12.0.0 (clang-1200.0.32.27)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
Maintenant, vous êtes enfin prêt pour votre environnement Python!
[^ 6]: Pour l'installation des outils de ligne de commande Xcode, veuillez vous référer à l'article Qiita: "Installer python3 avec Xcode sur Mac" (https://qiita.com/todotani/items/73877deea8773c316694). C'était. Merci.
[^ 7]: "//" n'est pas une faute de frappe, il était en fait affiché comme tel. Il semble qu'il n'était pas bon d'ajouter /
après bin
dans export PATH = / opt / homebrew / bin /: $ PATH
.
$ /bin/bash install_venv.sh --prompt --python=/usr/bin/python3
J'ai pu l'installer proprement sans aucun problème.
$ . "/path/to/tensorflow_macos_venv/bin/activate"
(tensorflow_macos_venv) primary_prompt_string$ which python
/path/to/tensorflow_macos_venv/bin/python
(tensorflow_macos_venv) primary_prompt_string$ python
Python 3.8.2 (default, Oct 2 2020, 10:45:41)
[Clang 12.0.0 (clang-1200.0.32.27)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> # Import mlcompute module to use the optional set_mlc_device API for device selection with ML Compute.
>>> from tensorflow.python.compiler.mlcompute import mlcompute
>>>
Cette fois, j'ai pu importer sans aucune erreur! Mais qu'en est-il de l'utilisation du processeur et du GPU?
>>> # Select CPU device.
>>> mlcompute.set_mlc_device(device_name='cpu')
>>> # Select GPU device.
>>> mlcompute.set_mlc_device(device_name='gpu')
WARNING:tensorflow:Eager mode on GPU is extremely slow. Consider to use CPU instead
Il y a un avertissement concernant le GPU, mais il semble bon de penser qu'il est possible de spécifier le CPU et le GPU pour le moment.
Comme le mode Eager sur GPU est extrêmement lent, il est supposé qu'il sera exécuté dans TensorFlow série 1 Define-and-Run au lieu du mode Eager (Define-by-Run) qui est la valeur par défaut dans TensorFlow 2.0. C'est ça?
Si vous regardez à nouveau README.md dans le référentiel, il est dit «Veuillez noter qu'en mode impatient, ML Compute utilisera le CPU.» Donc, dans ce qui précède, il peut être basculé de force sur CPU avec Avertissement.
Pour tester la vraie valeur des "Addons TensorFlow et TensorFlow optimisés pour Mac", il semble nécessaire d'avoir du code qui n'est pas en mode Eager.
Dans le but d'exécuter des "Addons TensorFlow et TensorFlow optimisés pour Mac" (https://github.com/apple/tensorflow_macos) sur MacBook Air avec M1 Voici un résumé des parties qui ont été prises lors de la création de l'environnement Python lors de la migration de données d'un Mac avec un processeur Intel vers un Mac avec un M1.
L'essentiel est que vous devez effacer ou reconfigurer l'environnement Python que vous avez créé dans l'environnement source afin qu'il ne soit pas référencé. L'architecture étant différente, il est naturel d'y penser, mais je me demandais si je pouvais utiliser au maximum l'environnement que j'avais créé à la source de la migration, alors j'ai eu du mal de manière inattendue.
Homebrew peut ne pas prendre en charge actuellement les architectures basées sur ARM, mais c'est un futur, étant donné la notation «Nous ne fournissons pas (encore) de support pour cela.». Je pense que cela sera résolu. On s'attend à ce que le support M1 soit également promu pour d'autres logiciels, il est donc prévu que la transition d'un Mac avec un processeur Intel vers un Mac avec un M1 devienne de plus en plus facile. Cet article n'est qu'un récit des tentatives dans la situation au 24 novembre 2020, et la situation pourrait changer dans un proche avenir (peut-être même aujourd'hui).
En premier lieu, tensorflow_macos
est également une pré-version, et j'aimerais avoir hâte de voir à quoi ressemblera la version officielle.
(c'est tout)