상세 컨텐츠

본문 제목

[M2 pro MacOS 13] Tensorflow와 Pytorch 설치 및 사용코드정리

프로그래밍/Data&ML

by 척척석사 민준 2023. 3. 28. 14:04

본문

728x90

3일동안 새벽 3시에 잠들면서 세팅 중인데... 텐서플로우가 자꾸 버전 충돌이 일어나고.. gpu를 사용하지 않는다고 나와서 괴로운 시간들을 보내다가 드디어 성공했다.
계속 안되서 혹시 OS가 13버전이라 충돌이 일어나는지 몰라서 공식문서를 찾아보고..버전도 낮춰보고 높혀보고 말그대로 노가다를 했다.
아직도 머리가 멍한데.. 일단 정리를 해보려고 글을 쓴다.
일단 성공인증

텐서플로우에서 gpu가 사용되는 모습
파이토치에서 gpu가 작동하는 모습

 
설치방법
1. miniforge3 환경에서 설치해야한다.
미니포지를 쓰자. 일단 공식적으로 애플실리콘을 지원하고 있고
아나콘다가 애플실리콘 지원한다고해서 되겠지~ 하고 아나콘다에서 설치했다가 이틀을 날려먹었다.
미니콘다도 시도해봤는데 자꾸 뭐가 충돌한다 뜨는거보면 그냥 마음편하게 미니포지설치하자.
이미 아나콘다가 설치되어있으면 opt에 anaconda3 파일을 삭제하면 됨
 
2. 가상환경을 python 3.8로 설정해야한다.
분명 3.8로 한거 같은데 알고보니 3.9로 설치되어있었고... 그게 내 고생의 원인이었다.
가상환경 설정방법 (터미널에서 다음 명령어를 치자, 미니포지3이 설치되어있으면 앞에 (base)가 뜰 것이다)
 
conda create -n machine-learning python=3.8
 
machine-learning 이건 내가 임의로 설정한 가상환경이름이다. 원하는걸로 해도 상관없다.
y를 누르고 가상환경을 만들고 나면 conda activate로 방금 만들어낸 가상환경을 실행한다.
혹시 이름이 기억이 나지않으면...
conda env list를 치면 만들어낸 가상환경이 나온다.
이제 가상환경을 실행해보자
 
conda activate machine-learning
 
3. 텐서플로우 설치방법
내가 운이 좋게 최신버전들이 서로 호환되는 시점이었을 수도 있으니까
설치한 버전은 다음과 같다. conda list로 설치된 프로그램들을 볼 수 있다. 

conda list

설치된 버전은 다음과 같다.
tensorflow-deps==2.9.0
tensorflow-macos==2.11.0
tensorflow-metal==0.7.1

 

(2023/05/08) 하도 오류가 떠서 전부 밀고 새로 설치했다...

tensorflow-metal의 경우 0.7.1 이 최신버전이지만  공식홈페이지에서 지원하는 최신버전이 0.5.X 버전이다.

항상 최신버전이 좋은게 아닐지도 모르겠다... macOS가 Ventura 13버전이어서 그런건지도 모르겠지만 gpu는 잘불러오지만 다른 부분에서 자잘하게 오류메시지가 나와서 결국 다시 밀고 설치했다. 이래서 다들 파이토치를 사용하는걸까...

 
애플 실리콘은 일반적인 CPU GPU와 달라서 애플이 직접배포하는 텐서플로우 호환버전을 사용해야 작동한다.
tensorflow-macos가 일반적인 tensorflow를 의미하고
tensorflow-metal이 애플실리콘에서 CPU GPU를 사용하기위한 번역기? 같은 개념이라고 할 수 있다.
 
설치하는 과정은 코드세줄이면 된다.
먼저 애플에서 제공하는 텐서플로우 의존성을 설치해준다
(모든 작업은 당연히 아까만든 가상환경 machine-learning에서 실행되고 있어야 한다)
conda install -c apple tensorflow-deps
 
애플실리콘용으로 호환되는 텐서플로우를 설치해준다.
python -m pip install tensorflow-macos
 
애플실리콘에서 CPU GPU를 사용하게 하기위한 플러그인? 같은 걸 설치해준다.
python -m pip install tensorflow-metal
 
그럼 이제 끝이다.
설치가 잘 되었는지를 확인하기 위한 코드를 VSCODE나 주피터노트북을 실행해서 작동시켜보면 다음과 같이 나와야한다.

import sys

import tensorflow.keras
import pandas as pd
import sklearn as sk
import scipy as sp
import tensorflow as tf
import platform

print(f"Python Platform: {platform.platform()}")
print(f"Tensor Flow Version: {tf.__version__}")
print(f"Keras Version: {tensorflow.keras.__version__}")
print()
print(f"Python {sys.version}")
print(f"Pandas {pd.__version__}")
print(f"Scikit-Learn {sk.__version__}")
print(f"SciPy {sp.__version__}")
gpu = len(tf.config.list_physical_devices('GPU'))>0
print("GPU is", "available" if gpu else "NOT AVAILABLE")

실행결과

import tensorflow as tf
print("Num GPUs Available: ", len(tf.config.experimental.list_physical_devices('GPU')))

실행결과

4. 지원서류 (애플 공식 홈페이지)
https://developer.apple.com/metal/tensorflow-plugin/

 

Metal Overview - Apple Developer

Metal powers hardware-accelerated graphics on Apple platforms by providing a low-overhead API, rich shading language, tight integration between graphics and compute, and an unparalleled suite of GPU profiling and debugging tools.

developer.apple.com

홈페이지에 따르면 지원하는 버전이 구버전인데.. 저마져도 나는 gpu가 잡히지 않아서... 일단 최신버전해보고 그마저도 안되면 가상환경지우고 공식으로 지원하는 버전을 설치해보길..
애플 홈페이지에서 공식적으로 지원하는 버전은 다음과 같다.
tensorflow-macos==2.9.0
tensorlfow-metal==0.5.0
 
5. 파이토치 설치방법
파이토치는 공식홈페이지에서도 애플실리콘을 지원하고 애플홈페이지에서도 지원한다고 당당하게 적혀있는만큼 설치도 쉽고 한번에 성공했다.
https://developer.apple.com/kr/metal/

 

Metal 개요 - Apple Developer

Metal에서는 Apple 플랫폼에서 오버헤드가 낮은 API, 풍부한 셰이딩 언어, 그래픽과 컴퓨팅 간의 긴밀한 통합 및 탁월한 GPU 프로파일링 및 디버깅 도구를 제공하여 하드웨어 가속 그래픽을 지원합니

developer.apple.com

애플 공식홈페이지에 나온대로 설치하면 다음과 같다.
 
아까만든 가상환경에 접속한다.
 
conda activate machine-learning
 
그다음 파이토치를 설치한다. (그냥 파이토치 최신버전을 설치하는 코드이다)
conda install -c pytorch pytorch
 
이제 끝이다.
설치된 버전을 conda list로 확인해보면 pytorch 2.0.0 이 설치된걸 확인할 수 있다.

설치가 잘 되었는지 GPU도 잘 사용되는지를 확인해보자.

import torch
if torch.backends.mps.is_available():
    mps_device = torch.device("mps")
    x = torch.ones(1, device=mps_device)
    print (x)
else:
    print ("MPS device not found.")

실행결과가 다음과 같이 나와야한다.

import torch

print (f"PyTorch version:{torch.__version__}") # 1.12.1 이상
print(f"MPS 장치를 지원하도록 build 되었는지: {torch.backends.mps.is_built()}") # True 여야 합니다.
print(f"MPS 장치가 사용 가능한지: {torch.backends.mps.is_available()}") # True 여야 합니다.

6. 끝
이틀내내 새벽늦게 잠들었더니 머리가 띵하다...이제 자야지...

728x90

관련글 더보기