Apple Silicon Macbook에서 Tensorflow 설치하기
Apple Silicon Macbook에 Tensorflow를 설치하는 방법을 다룹니다.
Macbook M1에서 테스트 했지만 참고한 링크에서 지원하는 디바이스로 Apple silicon라고 적혀있는 것으로 봐서는 M2,M3에서도 가능할 것으로 예상됩니다.
참고
https://developer.apple.com/metal/tensorflow-plugin/
2022. 2. 4 최초작성
2022. 5. 2 xcode 설치 추가
2024. 3. 2 Apple silicon 내용 추가
0. 다음 포스트를 참고하여 Xcode를 설치합니다.
MacBook M1에 Xcode 설치하기
https://webnautes.tistory.com/2024
1. 다음 포스트를 참고하여 Miniforge를 설치합니다.
Apple Silicon Macbook에 Miniforge 설치하여 Visual Studio Code와 연동하기
https://webnautes.tistory.com/2101
2. 가상환경을 생성하고 활성화 합니다. GPU를 사용하려면 아래 링크 언급과 테스트해본 결과 Python 3.8~3.10을 사용해야 할듯합니다.( https://forums.developer.apple.com/forums/thread/726753 )
파이썬 가상 환경을 생성하고 활성화 합니다.
conda create -n tensorflow-dev python=3.10
conda activate tensorflow-dev
3. TensorFlow를 설치합니다.
python3 -m pip install tensorflow
tensorflow-metal plug-in를 설치합니다.
python3 -m pip install tensorflow-metal
4. 설치된 Tensorflow 버전을 확인합니다.
(tensorflow-dev) webnautes@webnautesui-MacBookAir ~ % python3
Python 3.10.13 | packaged by conda-forge | (main, Dec 23 2023, 15:35:25) [Clang 16.0.6 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> tf.__version__
'2.15.0'
>>> quit()
(tensorflow-dev) webnautes@webnautesui-MacBookAir ~ %
5. GPU를 사용할 수 있는지 확인합니다. 아래처럼 안보이고 대괄호 [ ] 만 보이면 GPU를 사용할 수 없는 상태입니다.
>>> tf.config.list_physical_devices('GPU')
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]
6. 설치한 Tensorflow가 잘 동작하는지 확인하기 위해 아래 링크에 있는 코드를 테스트해봤습니다. test.py로 저장합니다.
https://www.tensorflow.org/tutorials/quickstart/beginner?hl=ko
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=5) model.evaluate(x_test, y_test, verbose=2) |
실행 결과입니다.
(tensorflow-dev) webnautes@webnautesui-MacBookAir ~ % python3 test.py
2024-03-02 21:00:10.606445: I metal_plugin/src/device/metal_device.cc:1154] Metal device set to: Apple M1
2024-03-02 21:00:10.606473: I metal_plugin/src/device/metal_device.cc:296] systemMemory: 16.00 GB
2024-03-02 21:00:10.606477: I metal_plugin/src/device/metal_device.cc:313] maxCacheSize: 5.33 GB
2024-03-02 21:00:10.606524: I tensorflow/core/common_runtime/pluggable_device/pluggable_device_factory.cc:306] Could not identify NUMA node of platform GPU ID 0, defaulting to 0. Your kernel may not have been built with NUMA support.
2024-03-02 21:00:10.606557: I tensorflow/core/common_runtime/pluggable_device/pluggable_device_factory.cc:272] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 0 MB memory) -> physical PluggableDevice (device: 0, name: METAL, pci bus id: <undefined>)
Epoch 1/5
2024-03-02 21:00:10.996518: I tensorflow/core/grappler/optimizers/custom_graph_optimizer_registry.cc:117] Plugin optimizer for device_type GPU is enabled.
1875/1875 [==============================] - 9s 4ms/step - loss: 0.4084 - accuracy: 0.8816
Epoch 2/5
1875/1875 [==============================] - 8s 4ms/step - loss: 0.3649 - accuracy: 0.8990
Epoch 3/5
1875/1875 [==============================] - 8s 4ms/step - loss: 0.3814 - accuracy: 0.8968
Epoch 4/5
1875/1875 [==============================] - 8s 4ms/step - loss: 0.4009 - accuracy: 0.8937
Epoch 5/5
1875/1875 [==============================] - 8s 4ms/step - loss: 0.4116 - accuracy: 0.8907
313/313 - 1s - loss: 0.3414 - accuracy: 0.9078 - 1s/epoch - 3ms/step
(tensorflow-dev) webnautes@webnautesui-MacBookAir ~ %