La guida definitiva alla configurazione di Python e Tensorflow per Apple Silicon Mac (M1 e M2)
Ho cambiato lavoro un anno fa e mi sono ritrovato con un nuovissimo MacBook Pro M1 con cui lavorare. Ho dovuto installare tutto ciò di cui uno scienziato di dati ha bisogno, il che è stato un vero dolore.
A peggiorare le cose, si scopre che non l'ho impostato correttamente ed è stato il caos.
Ma un collega ha condiviso una serie di passaggi e, dopo averli seguiti ed essere riuscito a impostare tutto con successo, ho pensato di poterlo condividere con tutti voi. Quindi l'ho riassunto e ampliato con informazioni extra e passaggi per completezza. Siccome non ho trovato nulla di simile su Internet, o almeno quando ho cercato, ho deciso di renderlo pubblico in modo che tutti possano beneficiarne.
In questa storia troverai una guida passo-passo su come installare correttamente Python e Tensorflow nei Mac M1 e M2 senza affrontare il dolore di provare a configurare tutto da solo.
Il flusso di lavoro è relativamente semplice:
- Per prima cosa installeremo i requisiti di base di cui ogni sviluppatore ha bisogno su un Mac (se non stai utilizzando un nuovo Mac, è probabile che tu li abbia già coperti).
- Quindi passare all'installazione di Python utilizzando pyenv .
- Infine, installa e configura Tensorflow correttamente per un Mac M1 o M2.
Configurazione di Python
I Mac al giorno d'oggi sono già dotati di Python installato, almeno Python2, ma credo che ci siano modi migliori e consigliati per lavorare con Python in un arm64 come il tuo MacBook M1 o M2.
Strumenti della riga di comando XCode
Innanzitutto, dovrai installare gli strumenti della riga di comando XCode :
~> xcode-select --install
~> xcrun --show-sdk-path
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
Homebrew
Una volta installati gli strumenti della riga di comando, dovremo installare due homebrew . Perché due? Ne vogliamo uno nativo (Apple Silicon) e uno per Intel (chiamato anche Rosetta). Per fare ciò, dovremo avere un Terminal/iTerm2 per ogni architettura. È facile.
Consiglio di utilizzare iTerm2[1] in quanto è un terminale migliorato per macOS, ma funziona allo stesso modo se preferisci attenersi al terminale integrato.
Vai alla cartella Applicazioni, duplica "iTerm" e rinomina la copia in "intel iTerm" (o simile). Per quella nuova app, fai clic con il pulsante destro del mouse e seleziona "Ottieni informazioni". Nella sezione Generale, seleziona "Apri con Rosetta".
Ora dobbiamo impostare Homebrew [2].
Dal terminale Intel, eseguire:
~> arch --x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- Se vedi x86_64, allora sei in Intel/Rosetta.
- Ma se l'output mostra arm64, sei in quello nativo (M1/M2).
Ora apri il terminale nativo (l'iTerm o il terminale predefinito) ed esegui il prossimo set di istruzioni:
~> cd ~/Downloads
~> mkdir homebrew
~> curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew
~> sudo mv homebrew /opt/homebrew
- Su Intel iTerm:
~> brew --prefix
/usr/local
~> brew list
<list of installed packages>
~> brew --prefix
/opt/homebrew
~> brew list
<list of installed packages (different than x86_64)>
... rest of the file above ...
#
# homebrew setup, following https://noahpeeters.de/posts/apple-silicon/homebrew-setup/
#
if [ -d "/opt/homebrew/bin" ]; then
export PATH="/opt/homebrew/bin:$PATH"
fi
function ibrew() {
arch --x86_64 /usr/local/bin/brew $@
}
# variables needed to properly install things under intel or m1
ARCH="$(uname -m)"
case ARCH in
i386) ARCH="386" ;;
i686) ARCH="386" ;;
x86_64) ARCH="amd64" ;;
arm) dpkg --print-architecture | grep -q "arm64" && ARCH="arm64" || ARCH="arm" ;;
esac
if [[ "${ARCH}" == "arm64" ]]; then
PREFIX="/opt/homebrew"
else
PREFIX="/usr/local"
fi
# https://github.com/pyenv/pyenv/issues/1768
SDK_PATH="$(xcrun --show-sdk-path)"
echo $PREFIX
echo $SDK_PATH
export CPATH="${SDK_PATH}/usr/include"
export CFLAGS="-I${SDK_PATH}/usr/include/sasl $CFLAGS"
export CFLAGS="-I${SDK_PATH}/usr/include $CFLAGS"
export CFLAGS="-I${PREFIX}/include $CFLAGS"
export LDFLAGS="-L${SDK_PATH}/usr/lib $LDFLAGS"
export LDFLAGS="-L${PREFIX}/lib $LDFLAGS"
export LDFLAGS="-L${PREFIX}/opt/openssl/lib $LDFLAGS"
export CPPFLAGS="-I${PREFIX}/opt/openssl/include $CPPFLAGS"
Pyenv
Ok, quindi ora siamo in grado di iniziare a installare materiale relativo a Python. Inizieremo con pyenv , che renderà estremamente fluido il processo di installazione di varie versioni di Python.
Apri il tuo terminale nativo e digita semplicemente il comando seguente:
~> brew install pyenv
Affinché pyenv funzioni correttamente, dobbiamo installare diverse dipendenze[3]. Nel nostro caso:
~> brew install openssl readline sqlite3 xz zlib tcl-tk libffi
~> ibrew install openssl readline sqlite3 xz zlib tcl-tk libffi
~> pyenv install 3.9.9
~> pyenv global 3.9.9
Perché con questo tipo di processo vale sempre la pena fare un doppio controllo, quindi esegui il comando successivo: ~/.pyenv/versions/3.9.9/bin/pythonsostituisci 3.9.9con la versione che hai deciso di installare e imposta come globale. Una volta nella shell, prova a importare ctypes:
Python 3.9.9 (main, Feb 15 2023, 11:25:42)
[Clang 14.0.0 (clang-1400.0.29.202)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import ctypes
>>>
Pipenv
Sebbene averlo installato non sia obbligatorio, è sempre buona norma utilizzare gli ambienti per i propri progetti. Ecco perché ho deciso di metterlo anche qui perché è facile e buona pratica. Per installarlo:
~> brew install pipenv
Installazione di Tensorflow
Passiamo ora alla seconda parte. Installare TensorFlow su un Mac M1 o M2 è stato un incubo per molti di noi, ma non è più necessario.
Ricorderai che abbiamo modificato il ~/.zshrcfile qualche tempo fa. Ora, aggiungeremo questo alla fine:
# tensorflow grpcio https://github.com/grpc/grpc/issues/25082
export GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1
export GRPC_PYTHON_BUILD_SYSTEM_ZLIB=1
export CFLAGS="-I/opt/homebrew/opt/openssl/include"
export LDFLAGS="-L/opt/homebrew/opt/openssl/lib"
Una volta scaricato, il mio consiglio è di chiudere e riaprire il terminale nativo e quindi eseguire:
~> bash ~/Miniconda3-latest-MacOSX-arm64.sh -b -p $HOME/miniconda
~> source ~/miniconda/bin/activate
(base) ~> conda install -c apple tensorflow-deps
- Vai alla cartella del tuo progetto: ad esempio
cd Documents/project - Attiva l'ambiente:
pipenv shell - Installa Tensorflow:
pipenv install tensorflow-macos
Guarda come c'è un pacchetto che ho installato chiamato tensorflow-metal [5] per accelerare l'addestramento dei nostri modelli nella GPU del nostro Mac in modo che tu possa considerare di installarlo con
~> pipenv install tensorflow-metal
Ora sai come affrontare la fatica di configurare un Mac nuovo di zecca per la scienza dei dati e ottenere il massimo dai suoi nuovi chip.
Spero che questo sia stato abbastanza utile e qualsiasi dubbio o problema che potresti incontrare, sentiti libero di commentare questa storia - io o un altro esperto ti aiuteremo sicuramente.
Non voglio andarmene senza ringraziarti gentilmente per aver raccontato la mia storia. Posto spesso su Medium e, se ti è piaciuto questo post, sentiti libero di seguirmi. Aiuta molto.
Risorse
[1] iTerm2 — Sostituzione del terminale macOS
[2] Noah Peters, Setup Homebrew su Apple Silicon
[3] Wiki Pyenv
[4] Utilizzo di base di Pipenv
[5] PyPi ufficiale — Pacchetto Tensorflow-metal

![Che cos'è un elenco collegato, comunque? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































