M1 Anaconda Tensorflow(+OpenCV) 설치

이재하·2021년 4월 22일
7
post-thumbnail

목차
1. Hello, World!
2. Tensorflow 설치 오류
3. M1 Anaconda 삭제
4. Miniforge 설치
5. Tensorflow 설치
6. OpenCV 설치
7. 마무리 인사

Hello, World!

맥북
안녕하세요. 필자는 인공지능을 공부하는 고등학생입니다.
M1 맥북에 관심이 많아 2월에 지르고 본 케이스입니다. (아무거나 막 사지 마십쇼)

기본적으로 Tensorflow를 설치하려고 Anaconda를 설치하고

% conda install tensorflow

명령어를 실행했지만 안되어 슬퍼했습니다.
이 글은 Tensorflow를 설치하기 위해 2주동안 삽질의 결과물이 담겨있습니다.
M1 Tensorflow 설치까지의 모든 것을 알려드리겠습니다.

Tensorflow 설치 오류

% /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/apple/tensorflow_macos/master/scripts/download_and_install.sh)"

보통 이 명령어로 설치를 하시고

% cd tensorflow_macos/arm64
% pip install --upgrade --no-dependencies --force numpy-1.18.5-cp38-cp38-macosx_11_0_arm64.whl grpcio-1.33.2-cp38-cp38-macosx_11_0_arm64.whl h5py-2.10.0-cp38-cp38-macosx_11_0_arm64.whl tensorflow_addons_macos-0.1a3-cp38-cp38-macosx_11_0_arm64.whl

이렇게 실행을 하시면 아래와 같은 오류가 떠서 멘탈이 나가시는 경우가 많으실 겁니다.

anaconda error: numpy-1.18.5-cp38-cp38-macosx_11_0_arm64.whl is not a supported wheel on this platform.

이것에 대한 이유는 간단합니다. 당신은 Miniforge가 아닌 Anaconda로 설치를 하고 있었기 때문입니다.

M1 Anaconda 삭제

저는 다른 컴퓨터에서나 마찬가지 일단 Anaconda를 설치하고 보았습니다.
그러나 Anaconda는 로제타에서 설치를 해야하기 때문에 Arm64에 최적화 되어있는 것이 아닙니다.

만약 아직 아나콘다를 설치 하지 않으셨다면 Miniforge를 바로 설치해주시면 되겠습니다.
만약 아나콘다를 설치해주신 분들은 anaconda를 삭제 후 Miniforge를 설치해 주겠습니다.

# 1번
% conda install anaconda-clean
% anaconda-clean

이것만으로는 삭제가 잘 안됐을수도 있으니 응용 프로그램에서 anaconda를 삭제 해줍니다.
더욱 확실한 마무리를 위해

% cd
% sudo rm- rf anaconda
% sudo rm -rf .anaconda_backup
% sudo rm -rf ~/.condarc ~/.conda ~/.continuum

이렇게 지워줍니다.
마무리 작업으로 터미널에 아나콘다 path를 모두 삭제해줍니다.

% open -e .bash_profile
% open -e .zshrc

zsh를 사용하시는분들은 2번째까지 삭제를 해주셔야합니다.

Miniforge 설치

Miniforge는 ARM64를 지원하는 거의 유일한 anaconda라고 생각하시면 됩니다.
Miniconda 프로젝트도 있지만 2015년 이후로 업데이트를 하지 않았습니다.
쨋든 아래 명령어로 brew를 이용해 miniforge를 설치해줍니다.

% brew install miniforge

그 이후 아래 명령어를 실행시켜 anaconda가 사용 될 준비가 되었는지 확인합니다.

% open -e .bash_profile

zsh를 사용하시는분들은 위 파일의 내용을 복사하여

% open -e .zshrc

맨 밑에 붙여넣기 해줍니다.

Tensorflow 설치

이제 다왔습니다. 우리는 이제 tensorflow만 설치하면 목표 달성입니다!
먼저 conda 가상환경을 만들어주겠습니다.

% conda info --envs
% conda create -n "tf" python==3.8.5
% conda activate tf

만약 처음에 Tensorflow 설치를 안하셨으면 아래 명령어를 실행해주세요!

% /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/apple/tensorflow_macos/master/scripts/download_and_install.sh)"

이제 tensorflow와 그 외 Library들을 install을 해주겠습니다.

% cd tensorflow_macos/arm64
% pip install --upgrade --no-dependencies --force numpy-1.18.5-cp38-cp38-macosx_11_0_arm64.whl
% pip install --force wheel setuptools cached-property six
% pip install --upgrade --no-dependencies --force h5py-2.10.0-cp38-cp38-macosx_11_0_arm64.whl tensorflow_addons_macos-0.1a3-cp38-cp38-macosx_11_0_arm64.whl 
% pip install absl-py astunparse flatbuffers gast google_pasta keras_preprocessing opt_einsum protobuf tensorflow_estimator termcolor typing_extensions wrapt wheel tensorboard typeguard
% pip install --upgrade --force --no-dependencies tensorflow_macos-0.1a3-cp38-cp38-macosx_11_0_arm64.whl 

축하합니다! 당신은 Tensorflow 설치를 완료하셨습니다

+ OpenCV 설치방법

라이브러리 직접 설치

% cd tensorflow_macos/arm64
% wget -O opencv.zip https://github.com/opencv/opencv/archive/4.5.0.zip
% wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.5.0.zip
% unzip opencv.zip
% unzip opencv_contrib.zip
% cd opencv-4.5.0
% mkdir build && cd build

이후 아래 명령어를 수행해줍니다.
단 모듈 위치와 가상환경 이름을 잘 설정해줘야 합니다.

% cmake \
  -DCMAKE_SYSTEM_PROCESSOR=arm64 \
  -DCMAKE_OSX_ARCHITECTURES=arm64 \
  -DWITH_OPENJPEG=OFF \
  -DWITH_IPP=OFF \
  -D CMAKE_BUILD_TYPE=RELEASE \
  -D CMAKE_INSTALL_PREFIX=/usr/local \
  -D OPENCV_EXTRA_MODULES_PATH=/Users/이름/tensorflow_macos/arm64/opencv_contrib-4.5.0/modules \
  -D PYTHON3_EXECUTABLE=/opt/homebrew/Caskroom/miniforge/base/envs/가상환경이름/bin/python3 \
  -D BUILD_opencv_python2=OFF \
  -D BUILD_opencv_python3=ON \
  -D INSTALL_PYTHON_EXAMPLES=ON \
  -D INSTALL_C_EXAMPLES=OFF \
  -D OPENCV_ENABLE_NONFREE=ON \
  -D BUILD_EXAMPLES=ON ..

아래 코드를 실행해주면 설치는 끝이 납니다.

% make -j8
% sudo make install

이제 내 가상환경과 OpenCV를 링크 작업을 해주어야합니다.
mdfind를 이용해서 찾아주겠습니다.

% mdfind cv2.cpython

두번째에

/usr/local/lib/python3.8/site-packages/cv2/python-3.8/cv2.cpython-38-darwin.so

python-3.8 위치가 나올겁니다. 어디에 적어주세요.
가상환경에 링크를 해주기 위해 가상환경으로 이동합니다.

% cd /opt/homebrew/Caskroom/miniforge/base/envs/가상환경이름/lib/python3.8/

마지막으로 아까 복사한 링크를 붙여주고 뒤에 cv2.so를 붙여줍니다.

% ln -s /usr/local/lib/python3.8/site-packages/cv2/python-3.8/cv2.cpython-38-darwin.so

이제 확인을 해봅시다.

>>> import cv2
>>> cv2.__version__

[21.08.05 추가] Anaconda 명령어로 설치

아래 명령어로 설치 할 수 있다.

% conda install -c anaconda opencv

마무리 인사

좋은 하루 되세요 :D !
🐳 CV-JaeHa Github 팔로우는 감사합니다 !

profile
누군가는 해야만 하는 일을 하는사람

15개의 댓글

comment-user-thumbnail
2021년 4월 22일

감사합니다 : )

1개의 답글
comment-user-thumbnail
2021년 6월 2일

안녕하세요!! 해결하다 궁금점이 있어 문의드립니다!
% open -e .bash_profile
% open -e .zshrc

혹시 이 부분 실행하면 새로운 창이 뜨는데 그 부분에 작성된 코드를 다 삭제하는 것이 맞나요?.

1개의 답글
comment-user-thumbnail
2021년 7월 20일

안녕하세요
마무리 작업으로 터미널에 아나콘다 path를 모두 삭제해줍니다. < 이부분이 안되는 거 같은데 어떤 작업을 해야할지 알려주실 수 있을까요?
open -e .bash_profil
The file /.bash_profile does not exist.
open -e .zshrc
The file /.zshrc does not exist.
저는 터미널을 열면 계정@계정-MacBook-Air ~ % 으로 시작합니다.

1개의 답글
comment-user-thumbnail
2021년 9월 29일

똑같이 다 따라했는데 마지막 텐서플로우 및 라이브러리 설치에서
pip install --upgrade --no-dependencies --force numpy-1.18.5-cp38-cp38-macosx_11_0_arm64.whl를 입력하니
ERROR: numpy-1.18.5-cp38-cp38-macosx_11_0_arm64.whl is not a supported wheel on this platform. 가 뜨는데 혹시 해결 방법을 알고 계신가요? ㅠㅠ

1개의 답글
comment-user-thumbnail
2021년 12월 2일

miniforge로 설치를 한 후에 명령어를 실행해도,
ERROR: numpy-1.18.5-cp38-cp38-macosx_11_0_arm64.whl is not a supported wheel on this platform.
에러가 나는데 어느 단계에서 문제인지 감이 안잡히네요.. 도와주실 수 있으신가요?

1개의 답글
comment-user-thumbnail
2022년 3월 27일

가상환경 생성 후 텐서플로우 설치하는 명령어 입력하면
ERROR: TensorFlow with ML Compute acceleration is only available on macOS 11.0 and later.
라고 뜨네요 왜 이럴까요?
12.2.1 버전인데..

1개의 답글
comment-user-thumbnail
2022년 5월 28일

위의 모든 방법과 댓글을 참고 해도 안되시는 분들은 이렇게 해 보세요
https://velog.io/@esc/Mac-M1-Monterey-Tensorflow
위 글 대로 해 보시고 되면 좋고 된 것 같아 보이지만 import가 안되고
TypeError: Descriptors cannot not be created directly.
If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0.
위 에러가 뜬다면
pip install 'protobuf~=3.19.0'
해 보시면 아마 될 겁니다.

답글 달기