Andrej Karpathy

PyTorch chez Tesla : Entraînement des réseaux de neurones pour l'Autopilot

6 novembre 2019

Intelligence Artificielle
Illustration de Andrej Karpathy

Introduction et aperçu de l'Autopilot

Andrej Karpathy

Bonjour à tous, je suis Andrej, le directeur de l'IA chez Tesla, et je suis ravi d'être ici pour vous parler de PyTorch et de la façon dont nous l'utilisons pour entraîner des réseaux de neurones pour l'Autopilot.

Andrej Karpathy

Je suis curieux de faire un vote à main levée. Combien d'entre vous possèdent une Tesla ?

Andrej Karpathy

Quelques-uns. Et combien d'entre vous ont utilisé ou expérimenté le produit Autopilot ?

Andrej Karpathy

Quelques-uns.

Andrej Karpathy

Pour ceux d'entre vous qui ne sont peut-être pas familiers avec l'Autopilot, sa fonctionnalité de base consiste à maintenir la voiture dans sa voie et à distance du véhicule qui vous précède.

Andrej Karpathy

Certaines des fonctionnalités plus avancées que nous avons développées pour l'Autopilot incluent la Navigation en Autopilot, qui vous permet de placer un repère sur la carte. Tant que vous restez sur l'autoroute, la voiture effectuera automatiquement les changements de voie et prendra les bonnes bretelles pour vous y amener.

Andrej Karpathy

Avec la Sortie Auto Intelligente, que nous avons lancée il y a environ deux semaines, vous pouvez appeler la voiture vers vous sur le parking. Vous maintenez 'Viens à moi' et la voiture sort de sa place de parking pour vous trouver. Vous y montez comme un roi ; c'est une fonctionnalité magique et incroyable.

Andrej Karpathy

Plus largement, l'équipe s'intéresse à la poursuite et au développement de la capacité de conduite entièrement autonome ; c'est ce sur quoi tout le monde se concentre.

Vision par ordinateur et intégration verticale

Andrej Karpathy

Comme chacun sait, nous n'utilisons pas de LiDAR ni de cartes haute définition. Tout ce que nous construisons pour l'Autopilot est basé sur la vision par ordinateur et l'apprentissage automatique sur les flux vidéo bruts des huit caméras entourant le véhicule.

Andrej Karpathy

Ceci est un exemple de ce que nous pourrions voir en un seul instant, et nous traitons cela avec des réseaux de neurones convolutifs.

Andrej Karpathy

Tesla est une entreprise verticalement intégrée, et c'est vrai lorsqu'il s'agit de l'intelligence de l'Autopilot. Nous construisons nos propres voitures, disposons les capteurs, collectons et étiquetons les données, entraînons sur des clusters de GPU sur site et gérons l'intégralité de la pile technologique.

Andrej Karpathy

Nous faisons fonctionner ces réseaux sur notre propre matériel personnalisé développé en interne, et nous sommes responsables du cycle de vie complet de ces fonctionnalités. Nous les déployons sur notre flotte de 750 000 voitures et examinons la télémétrie pour améliorer la fonctionnalité au fil du temps, fermant ainsi la boucle.

HydraNets et apprentissage multitâche

Andrej Karpathy

J'aimerais me plonger dans l'entraînement distribué que nous employons. Notre gagne-pain est l'analyse d'images. Pour conduire dans cet environnement, il faut en comprendre beaucoup à son sujet.

Andrej Karpathy

Nous devons comprendre les feux de circulation, le marquage des voies et les voitures. Vous vous retrouvez dans ce cadre multitâche massif où vous devez en savoir beaucoup sur la scène.

Andrej Karpathy

Beaucoup de nos réseaux ont un tronc commun avec un certain nombre de tâches qui en dépendent. Il s'agit généralement de troncs de type ResNet-50 fonctionnant sur des images de 1000 par 1000, et ils ont des structures qui ont du sens.

Andrej Karpathy

Nous faisons cela parce que nous ne pouvons pas nous permettre des réseaux de neurones pour chaque tâche individuelle. Il y a près de cent tâches, nous devons donc amortir le calcul en les plaçant sur des troncs partagés.

Andrej Karpathy

Voici quelques exemples de ce à quoi pourraient ressembler ces réseaux que nous appelons HydraNets, en raison du tronc partagé et des têtes multiples. Est-ce que cette vidéo est en train de jouer ? No.

Andrej Karpathy

Je passe à la vidéo suivante. Celle-là allait montrer les marquages au sol. Cette vidéo montre les bords de route qui nous intéressent pour la Sortie Auto Intelligente car nous devons comprendre où nous pouvons être dans cet environnement pour éviter les trottoirs.

Andrej Karpathy

Nous faisons des prédictions dans l'image et les assemblons à travers l'espace et le temps pour comprendre la configuration de la scène autour de nous.

Andrej Karpathy

Voici un exemple de cette grille d'occupation. Nous montrons les bords de la route et comment ils sont projetés, et la voiture trace son chemin dans le parking tout en étant appelée. C'est ainsi que les choses sont assemblées.

Traitement spatial et temporel

Andrej Karpathy

Jusqu'à présent, j'ai parlé de réseaux de neurones qui fonctionnent sur des images indépendantes, mais on tombe rapidement sur des tâches qui doivent être une fonction de plusieurs images en même temps.

Andrej Karpathy

Par exemple, pour estimer la profondeur, il est utile d'avoir accès à d'autres vues de la même scène pour prédire la profondeur à chaque pixel.

Andrej Karpathy

Si vous essayez de prédire la configuration de la route ou de diriger le volant, vous pourriez avoir besoin d'emprunter des caractéristiques à plusieurs autres HydraNets.

Andrej Karpathy

Nous avons ces différents HydraNets pour différentes caméras, mais vous pourriez vouloir extraire des caractéristiques de ces HydraNets et passer à une deuxième étape de traitement, éventuellement récurrente, pour produire une prédiction de la configuration de la route.

Andrej Karpathy

Ceci est un exemple de prédiction de la configuration de la route pour l'Autopilot. Nous branchons trois caméras simultanément dans un réseau de neurones, et les prédictions sont dans l'espace de vue de dessus.

Andrej Karpathy

Nous regardons les prédictions de ce réseau, montrant les couloirs disponibles dans ce parking, les intersections et les orientations.

Andrej Karpathy

L'assemblage à travers l'espace et le temps se produit à l'intérieur du réseau de neurones récurrent.

Andrej Karpathy

Nos réseaux commencent à ressembler à ceci. Nous avons huit HydraNets pour les huit caméras. Les caractéristiques passent par une deuxième étape de traitement, potentiellement récurrente, puis nous avons plus de sorties dans une vue de dessus.

Défis de l'entraînement distribué

Andrej Karpathy

Il s'agit d'un grand réseau unique où chaque tâche sous-échantillonne des parties du réseau et entraîne ce petit segment.

Andrej Karpathy

Par exemple, nous pouvons entraîner un détecteur d'objets on l'une des caméras, un réseau de profondeur ou un réseau de configuration. Ces tâches sous-échantillonnent le graphe et entraînent cette portion.

Andrej Karpathy

Si vous avez entraîné des réseaux de neurones récurrents sur des vidéos, vous remarquerez que ce ne sont pas des flux d'entraînement triviaux. Pour dérouler ce graphe dans le temps pour la rétropropagation, avec huit caméras, 16 pas de temps et une taille de lot de 32, nous conservons 4096 images et leurs activations en mémoire.

Andrej Karpathy

Le parallélisme de données distribuées classique va échouer car vous ne pouvez pas conserver cette quantité de mémoire dans un seul GPU ou nœud. Notre entraînement doit combiner des éléments de parallélisme de données distribuées et de parallélisme de modèle.

Andrej Karpathy

Cela devient complexe car le cas le plus simple pourrait être un entraînement à tour de rôle des différentes tâches. Vous entraînez la tâche un, puis la tâche deux, puis la trois. Cela devient ingérable quand vous avez cent tâches.

Andrej Karpathy

Au lieu de cela, il est logique d'avoir un pool de tâches où certains travailleurs pourraient s'occuper des objets, d'autres de la configuration de la route ou de la profondeur. Ces flux hétérogènes coexistent et entraînent différentes parties du réseau en même temps. Vous pouvez les organiser de manière synchrone ou asynchrone pour en extraire tout le potentiel.

Entraînement à grande échelle et automatisation

Andrej Karpathy

Entraîner tous les réseaux de neurones pour l'Autopilot est une tâche coûteuse. Nous entraînons 48 réseaux différents qui font 1000 prédictions différentes, et il faut 70 000 heures de GPU pour compiler la pile de réseaux de neurones de l'Autopilot.

Andrej Karpathy

Si vous aviez un seul nœud avec huit GPU, vous vous entraîneriez pendant un an. Il y a beaucoup de réseaux et de prédictions, et tous doivent fonctionner sans régression.

Andrej Karpathy

Vous ne vous contentez pas d'entraîner cela une seule fois ; vous devez itérer. Les chercheurs et les ingénieurs de l'équipe doivent améliorer cela, nous effectuons donc l'entraînement des réseaux de neurones à grande échelle pour que cela fonctionne.

Andrej Karpathy

Nous automatisons les flux de travail, y compris tout ce qui entoure l'entraînement des réseaux de neurones. Nous devons calibrer les seuils et avoir une validation et une évaluation en boucle pour nous assurer qu'aucune de ces 1000 prédictions ne régresse.

Andrej Karpathy

L'étoile polaire pour l'équipe est que tout cela puisse être automatisé. En commençant par l'ensemble de données, vous pouvez entraîner tous les réseaux de neurones, effectuer le calibrage et l'évaluation, et voir l'intégration continue de tout cela.

Andrej Karpathy

L'étoile polaire pour l'équipe est l'« Opération Vacances ». L'idée est que tant que l'équipe d'étiquetage des données organise et améliore nos ensembles de données, tout le reste peut être automatisé afin que nous puissions partir en vacances et que l'Autopilot s'améliore par défaut. C'est ce vers quoi nous essayons d'aller.

Matériel : Ordinateur FSD et Projet Dojo

Andrej Karpathy

J'aimerais parler de l'aspect inférence. Nous avons notre propre backend développé par notre équipe matérielle appelé l'ordinateur FSD. Il offre une capacité de 144 téra-opérations int8.

Andrej Karpathy

Par rapport aux GPU que nous utilisions avant cette puce, il s'agit d'une amélioration d'un ordre de grandeur avec un coût moindre. Nous utilisons cela dans toutes les voitures les plus récentes sortant de la ligne de production et nous ciblons tous les réseaux de neurones vers ces puces.

Andrej Karpathy

L'équipe matérielle travaille sur un projet que nous appelons Dojo, un ordinateur d'entraînement de réseaux de neurones et une puce. Nous espérons faire pour l'entraînement ce que nous avons fait pour l'inférence — améliorer l'efficacité d'un ordre de grandeur à un coût moindre — mais je ne suis pas encore prêt à parler de plus de détails.

Conclusion et impact réel

Andrej Karpathy

En résumé, j'ai parlé du cycle de vie complet du développement de réseaux de neurones pour l'Autopilot et de la façon dont nous gérons tout en interne. Le réseau de neurones est complexe et vaste, mais il nous donne des résultats très intéressants.

Andrej Karpathy

Non seulement nous parvenons à entraîner de grands réseaux, mais nous parvenons aussi à les expédier. La Navigation en Autopilot a accumulé un milliard de miles. Nous avons confirmé 200 000 changements de voie, et c'est un produit mondial dans 50 pays. Cela fait beaucoup de passes avant de réseaux de neurones.

Andrej Karpathy

Avec la Sortie Auto Intelligente, nous avons eu 800 000 sessions de personnes appelant leur voiture vers elles. C'est incroyable de travailler sur un produit aussi vaste.

Andrej Karpathy

Enfin, j'aimerais remercier l'équipe PyTorch d'être réactive et utile en nous permettant de développer ces réseaux, de les entraîner à grande échelle et de les déployer dans le monde réel. C'était une collaboration intéressante. Merci.