Apple M1이 NVIDIA V100보다 더 빠르고 효율적으로 모델을 훈련시키는 데 도움이 될까요?
TLDR
훈련 스크립트의 8가지 다른 환경 설정 스윕(sweep)을 해본 결과 더 작은 모델 아키텍처 및 데이터세트의 경우, Apple M1이 더 Nvidia V100과 같은 더 비싸고 에너지 효율이 떨어지는 가속기(accelerators)에 필적하는 인상적인 퍼포먼스를 제공한다는 것을 알 수 있었습니다.
방법론
Cifar 10에서 MobileNetV2 아키텍처를 사용해 컴퓨터 비전(vision) 모델을 훈련시켰습니다. Nvidia V100에서는 이 Colab 의 하나를 훈련시켰으며, 16GB M1 Mac Mini에서 tensorflow_macos fork 를 사용해 동일 모델을 훈련시켰습니다. 저희는 W&B 스윕을 통해 다음의 초매개변수를 변경했습니다.
batch_size:
- 32
- 64
img_dim:
- 96
- 128
trainable:
- true
- false
‘trainable’(훈련가능)이 ‘false’(거짓)인 경우, 네트워크의 최종 레이어만 훈련시킵니다. trainable이 true인 경우 MobileNetV2의 모�� 가중치(weights)를 업데이트합니다.
훈련할 가중치가 적은 경우 M1이 더 나은 성능 향상을 확인할 수 있었으며 이는 M1의 우수한 메모리 아키텍처인 것으로 보입니다.
에너지
사용된 Apple 하드웨어는 16GB 램 M1 Mac Mini였습니다. 훈련 중 팬 소음은 전혀 들리지 않았고 케이스를 만져봐도 시원했습니다. M1이 V100과 동일한 분량의 연산을 위해 M1이 얼마나 더 적은 에너지를 소비했는지를 생각해 보면 정말 놀랍습니다. V100은 12nm 프로세스를 사용한 반면 M1은 5nm을 사용했으며, V100은 에너지량의 6배에 가까운 양을 지속적으로 사용했습니다.
주의사항
새로운 가속 Tensorflow 패키지를 실행하도록 Mac Mini를 설정하는 것은 간단하지 않습니다. 컴파일이 필요한 다양한 패키지는 Miniconda의 arm64 branch에서 가장 쉽게 얻을 수 있었습니다. Tensorflow 라이브러리는 기본적으로 기본값으로 최적의 가속 경로를 선택해야 하지만 다음과 같은 코드와 함께 GPU를 사용하도록 명시하지 않는 한 일관된 세그멘테이션 결함(segmentation faults)을 확인할 수 있었습니다:
from tensorflow.python.compiler.mlcompute import mlcompute
mlcompute.set_mlc_device(device_name="gpu")
저는 반복(iteration)을 빠르게 하기 위해 MobileNetV2를 선택했습니다. ResNet50 또는 다른 더 큰 모델을 사용해봤을 때 M1과 NVIDIA의 차이는 더 커졌습니다. 또한 M1에서 입력이 196x196 크기를 초과 시 세그멘테이선 결함도 발생했습니다.
일반적으로 이러한 입문용 Mac은 현재 소규모 아키텍처에만 적합한 것으로 보입니다.
또한 네트워크의 최종 레이어만을 훈련시키는 M1에서의 실험이 수렴하지 못하는 것을 관찰했으나, NVidia V100에서는 그렇지 않았습니다. 추가 실험을 통해 학습률을 줄임으로써 M1 실행이 수렴되도록 할 수 있었습니다. M1 하드웨어에서 왜 학습률에 더 세심한 주의를 기울어야 하는지는 불분명합니다.
Apple M1
Nvidia V100
결론
아직 초기이긴 하지만 희망적인 결과들이 나오고 있습니다. Apple이 더 많은 코어와 RAM을 갖춘 Pro 하드웨어를 출시하면 Apple 하드웨어에서의 머신러닝 모델 훈련은 일반적인 것이 될지도 모릅니다. W&B의 모든 직원은 개발용으로 Mac 하드웨어를 사용하고 있으며, 저희 팀의 많은 사람들이 차세대 하드웨어를 최대한 빨리 구하고 싶어한 다는 것도 잘 알고 있습니다. tensorflow_macos fork a를 주시할 것이며, 이는 결국 메인 tensorflow 리포지토리(repository)에 통합될 것입니다. PyTorch 팀이 Apple ML Compute 라이브러리와 통합하기로 결정했는지에 대해서도 알고 싶으며, 현재 Github에서 논의가 진행중입니다.
이 리포트에서 확인하신 바와 같이 저희 최신 wandb 라이브러리 (0.10.13)는 Apple M1 하드웨어의 GPU 메트릭을 자동으로 캡처합니다.
다른 얼리 얼리어답터분들께서도 한번 해 보시기를 바랍니다! 이 리포트에서 리뷰를 작성하시거나 결과에 궁금한 점이 있으신 경우 이 리포트에서 문의해주시기 바랍니다.