MoreLean

M1 맥북에 Tensorflow 및 Jupyter Notebook 환경 구축하기 본문

Programmer/머신러닝

M1 맥북에 Tensorflow 및 Jupyter Notebook 환경 구축하기

judeKim' 2021. 12. 14. 22:25
반응형

M1 맥북은 arm64 (Apple Silicon)의 태생 때문에 모든 것이 조금씩 달랐습니다. 

업무상 머신러닝을 학습해야 하는 상황이 생겨 Tensorflow + Jupyter Notebook 환경을 구축하던 중 삽질하여 얻은 경험을 공유하고자 글을 작성하게 되었습니다. 

현재 제 맥북은 환경은 다음과 같습니다. 

M1 Air이지만, M1 Pro 14인치 CTO 모델에서도 동일하게 설정하고 동작하는 것을 확인하였습니다. 

기본적으로 Homebrew는 설치되어 있다고 가정하고 시작합니다. 

Miniforge 설치

보통 Anaconda를 사용하여 설치를 하지만, arm64 계열인 M1은 지원하지 않아 Miniforge라는 것을 사용해야 합니다. 물론 설치가 안 되는 것은 아니지만 Rosetta2를 통해서 연관되는 패키지들이 설치되어 M1을 100%로 활용하기 어렵습니다. 

# miniforge를 설치합니다.
$ brew install cask 
$ brew install --cask miniforge

# conda를 실행하여 ~/.zshrc에 환경설정을 입력해주고
$ conda init zsh
# 반영합니다. 
$ source ~/.zshrc

 

이 상태에서 가상 환경을 생성하고 활성화합니다. 

# Python 3.9 버전을 사용하고 있고, 가상환경의 이름은 "ML" 으로 설정하였습니다. 
$ conda create --name ML python=3.9

# 가상환경을 활성화 합니다. 
$ conda activate ML
# 이후 프롬프트 앞에 가상환경이 표시되는 것을 확인할 수 있습니다. 
(ML) $ _

 

연관된 패키지를 설치합니다. 

(ML) $ conda install absl-py astunparse gast google-pasta grpcio h5py ipython keras-preprocessing numpy opt_einsum pip protobuf python-flatbuffers scipy tensorboard tensorflow-estimator termcolor typeguard typing_extensions wheel wrapt

때로는 버전을 명시한 설치 예시도 있었으나 저는 다 삭제하고 설치하였습니다. 디펜던시 때문에 Conflict가 발생하여 제대로 되지 않더군요. 

 

Tensorflow 설치 

https://developer.apple.com/metal/tensorflow-plugin/ 

 

Metal - Apple Developer

Find presentations, documentation, sample code, and resources for building macOS, iOS, and tvOS apps with the Metal framework.

developer.apple.com

여기를 참고하여 설치하였습니다. 

# tensorflow 관련 패키지 설치 
(ML) $ conda install -c apple tensorflow-deps
(ML) $ python -m pip install tensorflow-macos
(ML) $ python -m pip install tensorflow-metal

# jupyter notebook 설치
(ML) $ conda install jupyter

이렇게 설치하고 jupyter notebook을 실행하면 tensorflow 관련 라이브러리들이 죄다 없다고 나옵니다. 

이것 때문에 여러 번 삽질을 했는데, 다음과 같이 가상 환경을 연결해주어야 합니다. 

(ML) $ python -m ipykernel install --user --name ML --display-name "Python-ML"

그래야 다음과 같이 Jupyter notebook에서 가상 환경이 연동된 노트북을 열 수 있습니다. 

그러면 정상적으로 tensorflow 도 import 되는 것을 확인할 수 있습니다. 

ipykernel 이란?

python은 가상환경이 있습니다. jupyter 와 이 python 간의 가상환경을 예를 들면 A, B, C 등이 있다면 이것을 어떻게 연결하는지가 궁금했는데, 이걸 가상환경마다의 커널을 생성해주어 연결합니다. 이때 ipykernel(ipython + kernel)을 사용하여 주피터의 커널을 만들어줍니다. 이렇게 생성한 커널을 위의 명령어로 네이밍해주고 연결합니다. 
(ML) $ python -m ipykernel install --user --name ML --display-name "Python-ML"

 

반응형