PyTorch chez Tesla : Entraînement des réseaux de neurones pour l'Autopilot
6 novembre 2019
Intelligence Artificielle
Introduction et aperçu de l'Autopilot
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.
Je suis curieux de faire un vote à main levée. Combien d'entre vous possèdent une Tesla ?
Quelques-uns. Et combien d'entre vous ont utilisé ou expérimenté le produit Autopilot ?
Quelques-uns.
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.
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.
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.
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
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.
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.
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.
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
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.
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.
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.
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.
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.
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.
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.
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
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.
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.
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.
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.
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.
Nous regardons les prédictions de ce réseau, montrant les couloirs disponibles dans ce parking, les intersections et les orientations.
L'assemblage à travers l'espace et le temps se produit à l'intérieur du réseau de neurones récurrent.
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é
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.
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.
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.
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.
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.
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
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.
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.
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.
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.
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.
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
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.
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.
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
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.
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.
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.
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.