들어가기 전
homebrew
설치
만약 homebrew
를 설치하지 않았다면 Homebrew 사이트를 통해 간단히 설치 할 수 있다.
xcode-select
설치
xcode-select --install
1. Miniforge 설치 (Apple Silicon)
homebrew
를 이용한 설치
brew install miniforge
많은 블로그 및 문서를 보면 homebrew
를 통해 설치하면 된다 했는데 나의 경우 이상하게 brew install miniforge
를 할 경우 x86버전이 설치되어 나중에 tensorflow가 제대로 설치되지 않아 개인적으로 다음 방법을 이용하는 것을 추천한다.
sh파일을 통한 설치
Miniforge3-MacOSX-arm64.sh 해당 파일을 설치 후 파일을 설치한 경로에서 다음의 명령어를 수행한다.
chmod +x ~/Downloads/Miniforge3-MacOSX-arm64.sh
sh ~/Downloads/Miniforge3-MacOSX-arm64.sh
source ~/miniforge3/bin/activate
Miniforge 설치 확인
conda의 platform이 arm64인지 확인하기
conda info

2. Python, Tensorflow 설치
yaml 파일을 이용한 설치
yaml 파일은 아래와 같이 작성한다.
# tesnsorflow-apple.yml
name: tensorflow
dependencies:
- python=3.9 #원하는 경우 3.8
- pip>=19.0
- jupyter
- apple::tensorflow-deps==2.5.0
- scikit-learn
- scipy
- pandas
- pandas-datareader
- matplotlib
- pillow
- tqdm
- requests
- h5py
- pyyaml
- flask
- boto3
- pip:
- tensorflow-macos==2.5.0
- tensorflow-metal==0.1.2
- bayesian-optimization
- gym
- kaggle
가상환경 생성
conda env create -f tensorflow-apple.yml -n tensorflow
가상환경 실행
conda activate tensorflow

3. 환경 테스트
버전 확인
# test_environment.py
import sys
import tensorflow.keras
import pandas as pd
import sklearn as sk
import tensorflow as tf
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__}")
gpu = len(tf.config.list_physical_devices('GPU'))>0
print("GPU is", "available" if gpu else "NOT AVAILABLE")

Tensorflow GPU 테스트
# test_gpu.py
import tensorflow_datasets as tfds
import tensorflow as tf
from tensorflow.python.framework.ops import disable_eager_execution
disable_eager_execution()
(ds_train, ds_test), ds_info = tfds.load(
'mnist',
split=['train', 'test'],
shuffle_files=True,
as_supervised=True,
with_info=True,
)
def normalize_img(image, label):
"""Normalizes images: `uint8` -> `float32`."""
return tf.cast(image, tf.float32) / 255., label
batch_size = 128
ds_train = ds_train.map(
normalize_img, num_parallel_calls=tf.data.experimental.AUTOTUNE)
ds_train = ds_train.cache()
ds_train = ds_train.shuffle(ds_info.splits['train'].num_examples)
ds_train = ds_train.batch(batch_size)
ds_train = ds_train.prefetch(tf.data.experimental.AUTOTUNE)
ds_test = ds_test.map(
normalize_img, num_parallel_calls=tf.data.experimental.AUTOTUNE)
ds_test = ds_test.batch(batch_size)
ds_test = ds_test.cache()
ds_test = ds_test.prefetch(tf.data.experimental.AUTOTUNE)
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(32, kernel_size=(3, 3),
activation='relu'),
tf.keras.layers.Conv2D(64, kernel_size=(3, 3),
activation='relu'),
tf.keras.layers.MaxPooling2D(pool_size=(2, 2)),
# tf.keras.layers.Dropout(0.25),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu'),
# tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(
loss='sparse_categorical_crossentropy',
optimizer=tf.keras.optimizers.Adam(0.001),
metrics=['accuracy'],
)
model.fit(
ds_train,
epochs=5,
validation_data=ds_test,
)

실행되는 동안 활성상태를 통해 GPU를 사용하는 것을 알 수 있다.

References
- Tensorflow Plugin - Metal - Apple Developer
- t81_558_deep_learning/tensorflow-install-mac-metal-jul-2021.ipynb at master · jeffheaton/t81_558_deep_learning
- M1 MacBook Pro seems to have troub… - Apple Developer Forums
🏋🏻 개인적으로 공부한 내용을 기록하고 있습니다.
잘못된 부분이 있다면 과감하게 지적해주세요!! 🏋
'etc' 카테고리의 다른 글
GitHub 특정 파일 및 폴더 push 제외하고 push (.gitignore) (0) | 2021.11.29 |
---|---|
Mac(맥) capslock(캡스락) 길게 누르기(대문자) 기능 끄기 (0) | 2021.11.22 |
ssh에서 scp 명령어로 데이터(파일) 전송하기 (0) | 2021.11.22 |
댓글