La puce Apple M1 peut-elle entraîner des modèles plus rapidement et moins onéreusement que la Nvidia V100 ?
Résumé
Nous avons exécuté un balayage de 8 configurations différentes sur notre script d’entraînement, et montré que la Apple M1 propose des performances impressionnantes, à la hauteur d’accélérateurs beaucoup plus onéreux et moins efficaces en termes d’énergie, comme la Nvidia V100 pour les architectures et les jeux de données (datasets) de petite taille.
Méthodologie
Nous avons entraîné un modèle de vision par ordinateur (computer vision) en utilisant l’architecture MobileNetV2 sur Cifar 10. Nous en avons entraîné un dans ce colabsur un Nvidia V100 et un modèle identique en utilisant le fork tensorflow_macos sur un Mac Mini M1 16 GO. Nous avons fait varier les hyperparamètres suivants en utilisant less Balayages W&B :
batch_size:
- 32
- 64
img_dim:
- 96
- 128
trainable:
- true
- false
Lorsque la variable entraînable est fausse (false), nous n’entraînons que la dernière couche dans le réseau. Lorsque la variable entraînable est vraie (true), nous mettons à jour tous les poids sur MobileNetV2.
On peut observer de meilleurs gains de performance avec la M1 lorsqu’il y a moins de poids à entraîner, probablement dus à l’architecture de mémoire supérieure de la M1.
Énergie
Le matériel Apple utilisé était un Mac Mini M1 avec 16 GO de RAM. Tout au long de l’entraînement, le ventilateur est resté silencieux et le boîtier est resté froid au toucher. La supériorité écoénergétique de la M1 pour effectuer la même quantité de calculs que la V100 est remarquable. Le Nvidia V100 utilise un processus en 12 nm contre 5 nm pour la M1, mais le V100 utilise invariablement près de 6 fois plus d’énergie.
Avertissements
La librairie tensorflow est censée choisir le meilleur chemin pour l’accélération par défaut, néanmoins, je constatais des fautes de segmentations récurrentes, à moins que je ne dise explicitement à la librairie d’utiliser le gpu avec le code suivant :Paramétrer le Mac Mini pour qu’il exécute le nouveau package accéléré de TensorFlow n’était pas une partie de plaisir. J’ai découvert que la voie la plus simple pour obtenir les différents packages qui requièrent une compilation est la branche ARM64 de Miniconda. La bibliothèque de TensorFlow est censée choisir le meilleur chemin pour l’accélération par défaut, néanmoins, j’ai constaté des erreurs de segmentations récurrentes – sauf si l’on demande explicitement à la bibliothèque d’utiliser le GPU avec le code suivant :
from tensorflow.python.compiler.mlcompute import mlcompute
mlcompute.set_mlc_device(device_name="gpu")
J’ai choisi MobileNetV2 pour accélérer l’itération. Lorsque j’ai essayé ResNet-50 ou d’autres grands modèles, l’écart entre la M1 et le Nvidia s’est creusé. J’ai également rencontré des erreurs de segmentation lorsque mes inputs excédaient les dimensions 196x196 sur la M1.
De manière générale, il semble que ces Macs d’entrée de gamme ne conviennent jusqu’ici qu’aux petites architectures
J’ai également observé que les essais sur la M1, qui n’ont entrainé que la couche finale du réseau, n’arrivaient pas à converger – ce qui n’était pas le cas sur le Nvidia V100. Après quelques expérimentations, j’ai réussi à obtenir la convergence des essais de la M1 en réduisant le taux d’apprentissage. La raison pour laquelle le taux d’apprentissage était plus délicat sur le matériel M1 n’est pas claire.
Apple M1
Nvidia V100
Conclusion
Nous n’en sommes encore qu’aux premiers jours des analyses, mais ces résultats préliminaires sont très prometteurs. Lorsque Apple sortira du matériel Pro avec plus de cœurs et de RAM, l’entraînement de modèle d’apprentissage automatique sur du matériel Apple pourrait devenir tout à fait courant. Chez W&B, toute notre équipe utilise du matériel Mac pour le développement, et je sais que la plupart de nos membres attendent avec impatience la prochaine génération de matériel Mac. Nous garderons un œil attentif sur le fork tensorflow_macos et à son incorporation prochaine dans le répertoire principal de tensorflow. Je suis aussi curieux de voir si l’équipe PyTorchva décider de s’intégrer avec les librairies Apples ML Compute , il y a une discussion en cours à ce sujet sur Github.
Notre version la plus récente de la bibliothèque wandb (0.10.13) capture automatiquement les mesures GPU du matériel Apple M1 comme vous pouvez le voir dans ce rapport.
Nous avons hâte de voir d’autres primo adoptants le tester ! Merci de nous envoyer vos commentaires ou vos questions concernant ces résultats, ici, dans ce rapport.