저는 M1 맥북 에어를 쓰고 있는데요. TensorFlow나 PyTorch와 같은 여러 가지 딥러닝 프레임워크에서는 GPU 프로세서로 연산할 수 있는 기능을 제공합니다.
구글 Colab에서는 따로 환경을 잡을 필요 없이 계산할 수 있지만, 가지고 있는 GPU 코어를 놀게 하고 있는게 아까워서(?) 로컬에서도 GPU로 텐서 플로우를 쓸 수 있게 설정했습니다.
https://makeoptim.com/en/deep-learning/tensorflow-metal
이 링크에 있는 내용을 순서대로 터미널에 입력하기만 하면 준비가 끝납니다! 로컬 터미널에서 파이썬 가상 환경을 설정하려고 하니까 conda로는 안 되더라구요. 그래서 miniforge 설치가 꼭! 필요합니다.
수정!
miniforge가 필요한 줄 알았으나 Anaconda 정식 버전을 설치하면 가상 환경이 잘 나오는 걸 확인했습니다. 저는 지금도 Miniforge로 사용하고 있습니다!
환경
운영체제
- MacOS 12.0+
저는 10.x를 쓰다가 최근에(2023년) 업데이트를 하고 나니까 13.2가 되었습니다. - Miniforge 가상환경 설치 (매우중요!)
가상환경
-
Python 3.9
-
tensorflow-macos==2.9
# 가상 환경 activate 후 입력 python -m pip install tensorflow-macos==2.9
-
tensorflow-metal==0.7.0
python -m pip install tensorflow-metal==0.7.0
시행착오
애플실리콘에서는 많은 라이브러리가 파이썬 3.9 버전 이상을 요구합니다. 파이썬에서 import tensorflow를 하려면 3.10 이상에서는 지원이 안 됩니다. 텐서플로우 하나만 불러와서 쓸 것도 아니라서 3.9버전을 쓰는 게 무난합니다.
그리고 2023년 초 기준, 아래 명령어로 버전 지정없이 자동 설치를 해보니까 tensorflow-macos는 2.10 혹은 2.11버전이 설치되었고 metal도 더 0.7.0 이후 버전이 설치되었습니다. 최신 버전에서는 GPU 연산 지원이 안 돼요!!!
python -m pip install tensorflow-macos
혹시 이렇게 하고도 여전히 텐서플로가 GPU를 못 쓴다면.. 아래의 apple developer 사이트에서 현재 나의 OS버전과 tensorflow-macos, tensorflow-metal 지원 버전을 확인해 보세요.
https://developer.apple.com/metal/tensorflow-plugin/
테스트 코드
아래는 텐서플로우 mnist 예제 코드입니다.
import tensorflow as tf
mnist = tf.keras.datasets.mnist
(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(x_train, y_train, epochs=10)
model.evaluate(x_test, y_test)
주피터 랩에서 이 코드를 돌렸습니다. 아래와 같이 Metal device set to: Apple M1
이 나타나고 epoch 진행을 볼 수 있습니다.
그런데 이게 CPU인지 GPU인지 내가 어떻게 아냐? 알 수 있습니다! 윈도우 작업관리자에서 실행 중인 프로세스를 모니터할 수 있는 기능이 있는데, MacOS에도 비슷한 기능이 있습니다. Activity Monitor를 실행하면 실행 중인 프로세스, CPU, GPU %를 보여 줍니다.
GPU 코어 사용 확인
Command
+ Space
를 누르고 activity monitor를 타이핑 후 실행합니다. 아래와 같이 GPU 코어를 사용하고 있다는 것을 확인할 수 있습니다.