요 글로 유입이 많아서, 안내 드립니다. Apple에서 M1 Silicon에 맞추어 Tensorflow를 공개했고, 아래 포스팅을 이용하여 설치 가능합니다. 다만, tensorflow_text라든가 일부 패키지는 apple이 지원하지 않아 아직 사용 안되는 듯 합니다.
[Apple M1] M1 칩용 Tensorflow 설치 (tistory.com)
------------
높으신 분의 은혜로 출시일에 맞춰 주문했고, 오늘 M1 맥북에어를 손에 넣었다(무려 램도 늘려 주셨다). 제일 관심 갔던 것은 아무래도 뉴럴칩으로 머신러닝이 가능하다는 것이었다.
Tensorflow for Mac은 현재 Python 3.8하고만 호환되면 Tensorflow 2.4 RC버전으로 제작되어 있다. 최신 버전인 Python 3.9는 호환되지 않으니 굳이 설치하지 말자. M1에는 3.8이 Default로 설치되어 있다. Tensorflow 2.4 정식버전도 출시되어 있지만, Intel용이므로 Rosetta2 상에서 작동한다. 아직까지는 아래 링크에서 시키는 대로 Tensorflow 2.4 RC버전만 설치한다.
핵심만 요약하면 아래 명령어만 수행하면된다.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/apple/tensorflow_macos/master/scripts/download_and_install.sh)"
수행 마지막 부분에 Virtual Environment 이름을 지정할 것을 묻는데, Default(tensorflow_macos_venv)로 두었다. 가상 환경을 아래와 같이 실행하고 Python3를 실행한 후 Tensorflow가 제대로 설치되었는 지 확인한다.
my macbook % source tensorflow_macos_venv/bin/activate
(tensorflow_macos_venv) my macbook % python3
Python 3.8.2 (default, Nov 4 2020, 21:23:28)
[Clang 12.0.0 (clang-1200.0.32.28)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> print(tf.__version__)
2.4.0-rc0
정상적으로 설치되었다. 콘솔에서 작업할 수 없으니 Jupyter Lab을 설치하자. 원인은 모르겠으나, 유저모드로 설치되지 않아 sudo로 설치하였다.
sudo -H pip3 install jupyterlab
가상환경에서 jupyter lab을 수행해서 tensorflow를 import하면 'no module named : tensorflow' 에러가 발생한다. 가상환경과 jupyter의 python executable이 달라서 발생하는 문제인데, 아래 명령어를 수행하여 jupyter kernel을 추가한 후, jupyter lab에서 해당 kernel을 선택하면 정상적으로 import 된다.
python3 -m ipykernel install --user --name tensorflow_macos_venv --display-name “tensorflow_m1”
아쉬운 점은 gcc로 작성된 pandas나 seaborn 같은 패키지들은 아직 설치/사용할 수 없다는 것이다. 물론 rosetta2를 이용해 intel emulation으로 python을 실행하면 되지만, m1의 GPU를 활용할 수 없기 때문에 여기서는 언급하지 않는다. 단, rosetta2를 이용해도 18년 맥북프로 대비 70%의 성능향상이 있다는 이야기가 있다(CPU가 빨라져서겠지).
내친김에 mnist 모델을 테스트해 본다.
import tensorflow as tf
print(tf.__version__)
from tensorflow.python.framework.ops import disable_eager_execution
disable_eager_execution()
from tensorflow.python.compiler.mlcompute import mlcompute
mlcompute.set_mlc_device(device_name='gpu')
import numpy as np
from numpy import unique
from numpy import argmax
from tensorflow.keras.datasets.mnist import load_data
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense, Conv2D, MaxPool2D, Flatten,Dropout
import time
(trainX, trainy), (testX, testy) = tf.keras.datasets.mnist.load_data(
path='mnist.npz'
)
print('Train: X=%s, y=%s' % (trainX.shape, trainy.shape))
print('Test: X=%s, y=%s' % (testX.shape, testy.shape))
trainX = trainX.reshape((trainX.shape[0], trainX.shape[1], trainX.shape[2], 1))
testX = testX.reshape((testX.shape[0], testX.shape[1], testX.shape[2], 1))
in_shape = trainX.shape[1:]
in_shape
n_classes = len(unique(trainy))
n_classes
# Normalize
trainX = trainX.astype('float32') / 255.0
testX = testX.astype('float32') / 255.0
# Create CNN Model
model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', kernel_initializer='he_uniform', input_shape=in_shape))
model.add(MaxPool2D((2, 2), strides=(2,2)))
model.add(Conv2D(32, (2, 2), activation='relu', kernel_initializer='he_uniform', input_shape=in_shape))
model.add(MaxPool2D((2, 2), strides=(2,2)))
model.add(Flatten())
model.add(Dense(500, activation='relu', kernel_initializer='he_uniform'))
# model.add(Dropout(0.5))
model.add(Dense(n_classes, activation='softmax'))
model.summary()
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
start_time = time.time()
model.fit(trainX, trainy, epochs=10, batch_size=128, verbose=1)
elapsed_time = time.time() - start_time
print(f"Time: {elapsed_time}")
# Evaluate
loss, acc = model.evaluate(testX, testy, verbose=0)
print('Accuracy: %.3f' % acc)
이상하게도 gpu로 수행할 때 94초, cpu로 수행하면 66초가 소요되었다. 1080ti 만큼의 학습 속도를 보인다고 한 말은 특수한 상황인 것인가. 그 말만 믿고 16GB로 업그레이드 한 것인데. ㅠ 참고로 Google Colab으로 동일 내용을 수행했을 때 불과 23초만 소요(Tesla T4)되었다. 머신러닝/딥러닝 공부에는 그저 colab이 답이다. 로컬 머신에 투자하지 말자. 흑 ㅠ
'AI 빅데이터 > Python 테크틱과 팁' 카테고리의 다른 글
[Zip] Starred Expression : Unzip하기 (0) | 2024.03.07 |
---|---|
[Apple M1] M1 칩용 Tensorflow 설치 (0) | 2021.10.22 |
[파이썬 팁] Apache Arrow로 Dataframe 빨리 읽기 (966) | 2021.01.07 |
[Apple M1] Rosetta Terminal 실행과 Conda 설치 (978) | 2020.12.30 |
[파이썬 팁] Dictionary 행들을 DataFrame으로 바꾸기 (957) | 2020.12.07 |
댓글