미니 m1 텐서플로우 테스트
- idsr
- 조회 수 2368
- 2021.08.10. 13:46
맥os 용 텐서플로우가 기존에 알파 버전으로 공개 되었는데 12 베타로 넘어가면서 정식 공개 되었습니다.
기존:
https://github.com/apple/tensorflow_macos
신규:
https://developer.apple.com/metal/tensorflow-plugin/
metal 디바이스로 가속화 하므로 x86 AMD gpu 달린 모델들도 지원이 될거같습니다
m1으로 테스트 하였지만 아직 패키지 호환성등 때문에 x86 쪽에서 더 쓸모가 있을거같네요
https://www.tensorflow.org/tutorials/quickstart/beginner?hl=ko
위 예시로 돌려봤고 모델이 작아서 크기만좀 키워서 진행 해봤습니다
학습셋 모양은 (60000,28,28) 입니다
알파버전때 설명을 보면 MLCompute 기기로 연산된다고 하는데
mlcompute device 설정 옵션이 cpu, gpu, any 라고만 되어있었습니다
gpu 사용량이 거의 100%로 잡히는거 보니 gpu 가속이 메인이 되는거 같기는 합니다.
https://www.youtube.com/watch?v=H6ZpMMDvB1M
위에 geohot으로 알려진 george hotz가 m1 디버깅 하면서 Apple Neural Engine이 ANE라고 ml 인스트럭션이 따로 있는걸 찾긴 했는데
접근이 mlcompute로 말고는 못하는듯 한거같았습니다
https://github.com/geohot/tinygrad
여기서 리버스 엔지니어링 해서 Relu 인스트럭션 밖에 아직 가속화를 못하기도 하였습니다
아마 위 텐플에서는 ANE 보조가 될거같긴 하지만 인스트럭션 파보기 전까지엔 모르겠네요
비교를 위해서 동일모델 3080에서 돌린 결과는 다음과 같습니다
속도가 대략 4배 차이가 나네요 m1 gpu가 대략 1050~1060 정도의 학습 속도가 나온다고 알려져 있었습니다
애플 실리콘쪽 지원이 기대되었던 이유는 cpu,gpu 공유 메모리 때문이었습니다
3080만 하더라도 10기가 밖에 안되서 nvidia쪽이 메모리에 짜기 때문에 큰 모델 + 큰 배치로 돌릴수가 없어서 보통
더 비싼 지피유 또는 멀티 지피유를 쓰거나 아니면 배치 크기를 줄일수 밖에 없었습니다
하지만 m1이 16기가 램 옵션인데도 아직은 가용 최대 메모리가 5기가 정도로 잡혀있는거같긴 합니다
(제가 프로그램을 많이 키고 있어서 일수도 있습니다 - 실험 떄 사용된 메모리 13기가 정도. 다 끄고 확인해봐야 할듯하긴 합니다)
추후에 메모리 32기가 옵션등이 나올것으로 예상 되는데 정말 그떄는 arm용 패키지들 지원과 파이토치 가속화만 추가 된다면
이때까지 엔비디아와 담쌓으면서 고려 되지 않았던 맥이 오히려 학습용으로 가성비 있어 지는게 말도 안되는 소리는 아닐것 같습니다
하지만 엔비디아, amd등도 direct storage지원이 늘어나는 추세라 어떻게 바뀌어 나갈지는 기대 됩니다
근데 M1이야 작아서 CPU, GPU를 동시에 메모리 공유를 하지만
이후 프로 라인업에 들어갈 애플실리콘들은
분명히 실리콘 크기가 매우 커져서 M1같은 설계를 못할텐데
그때도 메모리를 CPU, GPU 공유가 가능할지 모르겠어요