O guia definitivo de configuração de Python e Tensorflow para Apple Silicon Macs (M1 e M2)
Troquei de emprego há um ano e me encontrei com um novo M1 MacBook Pro para trabalhar. Tive que instalar tudo o que um cientista de dados precisa, o que foi um verdadeiro problema.
Para piorar as coisas, descobri que não o configurei corretamente e foi um caos.
Mas um colega de trabalho compartilhou um conjunto de etapas e, depois de segui-las e conseguir configurar tudo com sucesso, pensei em compartilhar com todos vocês. Portanto, resumi e expandi com informações extras e etapas para completá-lo. Como não encontrei nada parecido na Internet, ou pelo menos quando pesquisei, resolvi tornar público para que todos possam se beneficiar.
Nesta história, você encontrará um guia passo a passo sobre como instalar com êxito o Python e o Tensorflow em Macs M1 e M2 sem passar pelo trabalho de tentar configurar tudo sozinho.
O fluxo de trabalho é relativamente simples:
- Primeiro, instalaremos os requisitos básicos de que qualquer desenvolvedor precisa em um Mac (se você não estiver usando um novo Mac, é provável que já os tenha coberto).
- Em seguida, passe para a instalação do Python usando pyenv .
- Por fim, instale e configure o Tensorflow corretamente para um Mac M1 ou M2.
Configurando o Python
Os Macs hoje em dia já vêm com o Python instalado, pelo menos o Python2, mas acredito que existam maneiras melhores e recomendadas de trabalhar com o Python em um arm64 como o seu MacBook M1 ou M2.
Ferramentas de linha de comando do XCode
Primeiro, você precisará instalar as ferramentas de linha de comando do XCode :
~> xcode-select --install
~> xcrun --show-sdk-path
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
Homebrews
Assim que tivermos as ferramentas de linha de comando instaladas, precisaremos instalar dois homebrews . Por que dois? Queremos um nativo (Apple Silicon) e outro para Intel (também chamado Rosetta). Para isso, teremos que ter um Terminal/iTerm2 para cada arquitetura. É fácil.
Eu recomendo usar o iTerm2[1], pois é um terminal aprimorado para macOS, mas funciona da mesma maneira se você preferir manter o terminal integrado.
Vá para a pasta Aplicativos, duplique o “iTerm” e renomeie a cópia para “intel iTerm” (ou similar). Para esse novo aplicativo, clique com o botão direito do mouse e selecione "Obter informações". Na seção Geral, marque “Abrir usando Rosetta”.
Agora temos que configurar o Homebrew [2].
No Terminal Intel, execute:
~> arch --x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- Se você vir x86_64, então você está no Intel/Rosetta.
- Mas se a saída mostrar arm64, você está no nativo (M1/M2).
Agora abra o Terminal nativo (o iTerm ou Terminal padrão) e execute o próximo conjunto de instruções:
~> cd ~/Downloads
~> mkdir homebrew
~> curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew
~> sudo mv homebrew /opt/homebrew
- No 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, agora estamos em posição de começar a instalar coisas relacionadas ao Python. Começaremos com pyenv , o que tornará o processo de instalação de várias versões do Python extremamente suave.
Abra seu terminal nativo e simplesmente digite o comando abaixo:
~> brew install pyenv
Para que o pyenv funcione corretamente, precisamos instalar várias dependências[3]. No nosso 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
Porque com este tipo de processo uma checagem dupla sempre vale a pena, então execute o próximo comando: ~/.pyenv/versions/3.9.9/bin/pythonsubstituindo 3.9.9pela versão que você decidiu instalar e definir como global. Uma vez no shell, tente importar 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
Embora não seja obrigatório tê-lo instalado, é sempre uma boa prática usar ambientes para seus projetos. É por isso que também decidi colocá-lo aqui porque é fácil e uma boa prática. Para instalá-lo:
~> brew install pipenv
Instalando o Tensorflow
Vamos para a segunda parte agora. Instalar o TensorFlow em um Mac M1 ou M2 tem sido um pesadelo para muitos de nós, mas não precisa mais.
Você deve se lembrar que editamos o ~/.zshrcarquivo há algum tempo. Agora, vamos adicionar isso ao final:
# 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"
Depois de baixado, meu conselho é sair e reabrir o terminal nativo e executar:
~> bash ~/Miniconda3-latest-MacOSX-arm64.sh -b -p $HOME/miniconda
~> source ~/miniconda/bin/activate
(base) ~> conda install -c apple tensorflow-deps
- Vá para a pasta do seu projeto: por exemplo
cd Documents/project - Ative o ambiente:
pipenv shell - Instale o Tensorflow:
pipenv install tensorflow-macos
Veja como existe um pacote que instalei chamado tensorflow-metal [5] para acelerar o treinamento de nossos modelos na GPU do nosso Mac para que você considere instalá-lo com
~> pipenv install tensorflow-metal
Agora você sabe como enfrentar a dor de configurar um novo Mac para ciência de dados e aproveitar ao máximo seus novos chips.
Espero que isso tenha sido útil o suficiente e qualquer dúvida ou problema que você possa encontrar, sinta-se à vontade para comentar esta história - eu ou outro especialista certamente o ajudaremos.
Não quero partir sem agradecer gentilmente por ter lido minha história. Costumo postar no Medium e, se você gostou deste post, sinta-se à vontade para me seguir. Isso ajuda muito.
Recursos
[1] iTerm2 — substituição do terminal macOS
[2] Noah Peters, Setup Homebrew no Apple Silicon
[3] Wiki Pyenv
[4] Uso básico do Pipenv
[5] PyPi oficial — pacote Tensorflow-metal





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)