Qu'est-ce que le bruit
*La relation entre Clang et LLVM
3.À propos du modulaire
Modulaire ——moteur d'intelligence artificielle
À propos du TPU de Google
À propos de l'apprentissage profond et de la programmabilité
Quels sont les défis techniques liés à la construction du moteur ?
4. À propos de l'entrepreneuriat, de la constitution d'équipes d'ingénierie et de l'avenir de l'IA
**1. Qu'est-ce qu'un compilateur ? **
Un compilateur est un outil logiciel qui traduit les langages de programmation de haut niveau en code exécutable par ordinateur. Le compilateur convertit le code source écrit par le programmeur en instructions binaires que l'ordinateur peut comprendre et exécuter. Ces instructions sont regroupées dans un fichier exécutable ou une bibliothèque. pour exécuter des programmes sur votre ordinateur.
Le flux de travail principal du compilateur est le code source → préprocesseur → compilateur → code objet → éditeur de liens → programmes exécutables (utables)
Un autre exemple frappant :
*Professeur : Les enfants, aujourd'hui, nous apprenons l'addition. *
Avant de parler de Modular, parlons d'abord de l'expérience de Chris Lattner. Il est né en Californie en 1978 et a grandi dans la région de la baie de San Francisco. Il a commencé à programmer très jeune. Plus tard, il a obtenu un baccalauréat en informatique de l'UC Berkeley et a étudié pour un doctorat à l'Université de Stanford, en se concentrant sur l'optimisation du compilateur et la parallélisation automatique.
Chris Lattner a dirigé le développement de LLVM au cours de son doctorat. Grâce à LLVM, il a remporté l'ACM Software Award** (ACM Software Award)****. Après cela, Lattne a été embauché par Apple et a été responsable de nombreux projets importants chez Apple, notamment la conception et le développement du front-end du compilateur Clang, le langage de programmation Swift (le langage qui a remplacé Objective-C) et l'amélioration de l'environnement de développement Xcode. Le langage Swift est très populaire pour sa simplicité et ses performances et est utilisé par les développeurs pour le développement d'applications sur iOS, macOS et d'autres plates-formes Apple.
Après avoir quitté Apple, Chris Lattner a travaillé dans des entreprises telles que Tesla et Google, et a continué à publier des articles de recherche et à participer à des projets open source dans le domaine des langages de programmationet des technologies de compilateur. Il était responsable de la direction de l'équipe d'infrastructure Tensorflow. chez Google. , a créé XLA et MLIR.
Nous expliquons ici ce que sont XLA et MLIR :
XLA (Accelerated Linear Algebra) est un compilateur d'algèbre linéaire spécifique à un domaine qui peut accélérer les modèles TensorFlow, potentiellement sans nécessiter de modification du code source. Cela peut améliorer la vitesse de course et améliorer l'utilisation de la mémoire. ***
***MLIR (Représentation intermédiaire multi-niveaux :Représentation intermédiaire multi-niveaux) est un framework de compilateur. Sa conception optimise le compilateur et couvre essentiellement toutes les parties communes de la conception du compilateur. , ce qui grandement facilite les développeurs de compilateurs. *
**Plus important encore, qu'est-ce que LLVM ? **(Ce qui suit est extrait du bref livre, voir le lien de référence pour le texte original)
**LLVM peut être compris comme un ensemble de compilateurs et de technologies de chaîne d'outils modulaires et réutilisables. LLVM (en fait le nom complet de Low Level Virtue Machine, mais il n'a jamais été utilisé comme machine virtuelle) Le LLVM suivant n'est donc pas un acronyme ; c'est le nom complet du projet.
Ensuite, nous continuons : L'architecture traditionnelle du compilateur ressemble à ceci :
Optimiseur : optimiseur (optimisation de code intermédiaire)
Backend : backend (génère du code machine)
L'architecture LLVM ressemble à ceci
**Pour le décrire avec précision, LLVM a apporté de nombreuses innovations au compilateur, telles que : **
Différents front-end et back-end utilisent un code intermédiaire unifié, représentation intermédiaire LLVM (LLVM IR)
Si vous devez prendre en charge un nouveau langage de programmation, il vous suffit d'implémenter un nouveau front-end
Si vous devez prendre en charge un nouveau périphérique matériel, il vous suffit d'implémenter un nouveau backend
La phase d'optimisation est une phase universelle. Elle cible le LLVM IR unifié. Qu'il supporte de nouveaux langages de programmation ou de nouveaux périphériques matériels, il n'est pas nécessaire de modifier la phase d'optimisation.
En revanche, le front-end et le back-end de GCC ne sont pas trop séparés, et le front-end et le back-end sont couplés ensemble. Par conséquent, il devient particulièrement difficile pour GCC de prendre en charge un nouveau langage ou une nouvelle plateforme cible.
LLVM est désormais utilisé comme infrastructure commune pour l'implémentation de divers langages compilés statiques et d'exécution (famille GCC, Java, .NET, Python, Ruby, Scheme, Haskell, D, etc.)
**Qu'est-ce que Clang ? **
Un sous-projet du projet LLVM, un front-end de compilateur C/C++/Objective-C basé sur l'architecture LLVM. Par rapport à GCC, Clang présente les avantages suivants
Vitesse de compilation rapide : Sur certaines plates-formes, la vitesse de compilation de Clang est nettement plus rapide que celle de GCC (la vitesse de compilation d'OC en mode Debug est 3 fois plus rapide que celle de GGC)
Faible empreinte mémoire : la mémoire occupée par l'AST généré par Clang est environ un cinquième de celle de GCC
Conception modulaire : Clang adopte une conception modulaire basée sur une bibliothèque, facile à intégrer à l'IDE et à réutiliser à d'autres fins.
Les informations de diagnostic sont hautement lisibles : pendant le processus de compilation, Clang crée et conserve une grande quantité de métadonnées détaillées (métadonnées), ce qui est bénéfique pour le débogage et le rapport d'erreurs.
Le design est clair et simple, facile à comprendre, facile à développer et à améliorer
Relation entre Clang et LLVM
Pour l'architecture globale de LLVM, clang est utilisé comme frontal. LLVM au sens large fait référence à l'ensemble de l'architecture LLVM, et LLVM au sens général étroit fait référence au backend LLVM (y compris l'optimisation du code et la génération de code cible).
Le code source (c/c++) passe par clang--> code intermédiaire (après une série d'optimisations, Pass est utilisé pour l'optimisation) --> code machine
Référence : Jianshu-12 août 2018-Une explication simple pour vous aider à comprendre ce qu'est LLVM
3. À propos de Modulaire
Modulaire——Moteur d'intelligence artificielle
**Les réflexions de C****hris Lattner sur les compilateurs et l'entrepreneuriat en tant que Modular ? **
C****hris Lattner :"J'ai créé Modular non pas avec un marteau à la recherche de clous, ni avec l'innovation pour le plaisir d'innover. Actuellement, pour des entreprises comme OpenAI, un petit nombre d'employés doivent dépenser beaucoup "
**"La forme finale du compilateur est de permettre aux utilisateurs d'utiliser un code assembleur très simple pour effectuer n'importe quelle tâche et résoudre des problèmes sans avoir à connaître grand-chose sur le matériel. Le véritable rôle du compilateur est d'utiliser un niveau d'abstraction plus élevé pour s'exprimer. **"
*"*Le FasterTransformer lancé par NVIDIA peut apporter d'énormes améliorations de performances. Par conséquent, de nombreuses grandes sociétés de modèles et développeurs utilisent FasterTransformer. Cependant, si vous souhaitez innover dans le domaine de Transformer, vous serez limité par FasterTransformer. "
**En d'autres termes, le rôle du compilateur réside dans sa généralisation. Comment comprendre ici la généralisation ? **
C****hris Lattner : Si vous souhaitez obtenir des résultats identiques ou meilleurs que FasterTransformer, mais en utilisant d'autres architectures générales (ici des architectures non-Transformer), alors via le compilateur, vous pouvez obtenir le meilleur des deux mondesEn conséquence, les mêmes excellentes performances peuvent être obtenues lors de la recherche.En d'autres termes, l'optimisation au niveau du compilateur peut être équivalente à un « moteur d'IA » et aider à la transformation de l'architecture LLM à l'avenir.
**Mojo est actuellement très populaire et il est compatible avec l'écosystème Python, mais l'objectif de Modular est de construire un moteur d'intelligence artificielle unifié. Alors, de votre point de vue, quels sont les problèmes actuels qui doivent être résolus dans le domaine de la recherche et du développement en intelligence artificielle ? **
Chris Lattner : Si l'on remonte à 2015, 2016 et 2017, période de développement rapide de l'intelligence artificielle, la technologie de cette époque était principalement dirigée par TensorFlow et PyTorch. PyTorch est apparu un peu plus tard que TensorFlow. , mais ce sont tous deux des conceptions similaires à certains égards. **Cependant, les personnes qui construisent et conçoivent les systèmes TensorFlow et PyTorch sont principalement composées d'expériences en intelligence artificielle, en équations différentielles et en différenciation automatique. Elles n'ont pas résolu le problème de frontière entre logiciel et matériel. **
Keras* est donc nécessaire (Remarque : Keras est une bibliothèque de réseaux de neurones artificiels open source écrite en Python. Elle peut être utilisée comme interface de programmation d'applications de haut niveau pour Tensorflow, Microsoft-CNTK et Theano pour réaliser des modèles d'apprentissage profond. La conception, le débogage, l'évaluation, l'application et la visualisation ) ou nn.Module (Remarque : nn.Module * est un concept unique à PyTorch et est également une classe qui sera fréquemment utilisé*)*.
La couche inférieure de ces choses est en fait constituée d'opérateurs.Comment implémenter la convolution, la multiplication matricielle, l'algorithme de réduction et l'opération élément par élément ? Vous devez utiliser CUDA et Intel MKL (Intel Math Kernel Library), puis continuer à bâtir sur ces fondations.
Ce modèle est correct au début, mais le problème existe aussi. Il y a très peu d'opérateurs au début. Cependant, tant qu'un nouveau matériel est introduit, même s'il ne s'agit que d'une nouvelle variante de processeur introduite par Intel, la complexité de calcul augmentera. continue d'augmenter., Aujourd'hui, TensorFlow et PyTorch ont des milliers d'opérateurs, chacun appelé noyau, et tous les noyaux doivent être écrits manuellement par des humains.
(Remarque : IP dans l'industrie des puces est généralement également appelé noyau IP. Le noyau IP fait référence à la conception mature de modules de circuit avec des fonctions indépendantes dans la puce. Cette conception de module de circuit peut être appliquée à d'autres conceptions de puces qui contiennent ce module de circuit. projet, réduisant ainsi la charge de travail de conception, raccourcissant le cycle de conception et améliorant le taux de réussite de la conception de la puce. La conception mature de ce module de circuit incarne la sagesse du concepteur et reflète les droits de propriété intellectuelle du concepteur. Par conséquent, l'industrie des puces utilise des cœurs IP pour Indique la conception mature de ce module de circuit. Le noyau IP peut également être compris comme le composant intermédiaire de la conception de la puce)
En d'autres termes, une fois qu'un nouveau matériel est lancé, vous devez réécrire des milliers de noyaux, donc le seuil d'entrée dans le matériel deviendra de plus en plus élevé. De plus, cette situation crée également de nombreuses difficultés pour la recherche scientifique. Par exemple, un chercheur, très peu de gens savent comment fonctionnent ces noyaux.
(Remarque : étant donné que le développement du noyau est souvent spécifique aux plates-formes matérielles, même nvidia n'est pas universel, encore moins FPGA ou DPU. Les opérateurs personnalisés constituent le principal canal permettant d'étendre les capacités informatiques des logiciels de plate-forme matérielle)
Il faut aussi savoir que de nombreuses personnes écrivent désormais CUDA Kernel* (Remarque : Kernel : le nom de la fonction exécutée par CUDA sur le GPU)*, mais le profil de compétences des ingénieurs ici est complètement différent des compétences qui peuvent innover le architecture modèle. **En conséquence, de nombreux systèmes d'intelligence artificielle sont confrontés à un tel défi : ils ne peuvent pas trouver d'experts techniques capables d'écrire du noyau. **
*(Remarque : *Lors de l'utilisation du GPU pour le calcul, tous les processus de calcul peuvent être encapsulés dans un noyau GPU et exécutés sur le GPU de manière séquentielle. Par souci de polyvalence, les bibliothèques d'opérateurs traditionnelles le feront. La conception est très basique, il y a donc ils sont nombreux)
À propos du TPU de Google
J'ai participé au projet TPU de Google lorsque j'étais chez Google. À cette époque, les défis rencontrés par l'équipe TPU étaient les suivants : il existe des milliers de noyaux différents sur le marché, comment lancer un nouveau matériel ? À cette époque, de nombreux collègues ont également évoqué la possibilité d’utiliser un compilateur pour y parvenir. **Ainsi, au lieu d'écrire manuellement des milliers de noyaux, de réécrire tous ces opérateurs et de créer complètement son propre écosystème comme Intel ou NVIDIA, le compilateur peut être plus flexible que manuel car il peut nous permettre de le faire de différentes manières. et faire correspondre le noyau peut également optimiser beaucoup de performances. **
*Les compilateurs peuvent y parvenir de manière généralisée, mais si nous utilisons le noyau traditionnel écrit à la main, ce qui en résulte doit être un arrangement fixe de noyaux que les gens jugent intéressant, plutôt que quelque chose de nouveau souhaité par les chercheurs. ** Ainsi, le XLA de Google ( Expliqué ci-dessus : Algèbre linéaire accélérée : Algèbre linéaire accélérée *) est né. XLA peut prendre en charge des ordinateurs de niveau exaflop à grande échelle, mais le problème revient : XLA est apparu pour prendre en charge le TPU de Google.
**Il est vraiment difficile de créer un compilateur, et il y a encore des problèmes d'évolutivité. Actuellement, des ingénieurs compilateurs doivent être embauchés pour mener à bien de nombreux projets d'ingénierie d'apprentissage automatique, et les ingénieurs compilateurs qui comprennent l'apprentissage automatique et diverses connaissances connexes sont encore plus importants. assez. De plus, XLA n’est pas évolutif et ne fonctionne qu’avec les TPU. **
À propos du Deep Learning et de la programmabilité
Si nous revenons sur l'histoire du développement de CUDA et de l'apprentissage profond de NVIDIA, comme la naissance d'AlexNet et le développement de l'apprentissage profond, beaucoup de gens pensent que la naissance d'AlexNet est le résultat de la combinaison de données, d'ImageNet + informatique et la puissance du GPU. **
(Remarque : en 2012, Alex Krizhevsky et Ilya, étudiants de Geoffrey Hinton, l'un des trois géants de l'apprentissage profond et lauréat du Turing Award, ont proposé AlexNet et ont remporté le championnat avec un avantage significatif dans l'ILSVRC cette année-là, dépassant de loin le troisième Deux. Ce résultat a attiré une grande attention de la part du monde universitaire et de l'industrie, et la vision par ordinateur est progressivement entrée dans une ère dominée par l'apprentissage profond)
**Mais beaucoup de gens oublient l'importance de la « programmabilité ». **
Parce que c'est CUDA qui a permis aux chercheurs d'inventer des noyaux convolutifs qui n'existaient pas auparavant, et TensorFlow n'existait pas à cette époque. **En fait, c'est la combinaison des données, du calcul et de la programmabilité qui permet à de nouvelles recherches de lancer toute une vague de systèmes d'apprentissage profond. **
**Par conséquent, il est très important de tirer les leçons des événements et de l’histoire passés. Alors, comment passer à l’étape suivante ? Comment passer à la prochaine ère de cette technologie où chacun pourra bénéficier des incroyables innovations et idées algorithmiques de l’humanité ? **Comment bénéficier du compilateur ? Comment tirer parti de l’évolutivité et de la polyvalence des compilateurs pour résoudre de nouveaux problèmes ? **Plus important encore, comment bénéficiez-vous de la programmabilité ? C'est le Modular sur lequel nous travaillons : le moteur d'intelligence artificielle. **
À propos de l'avenir de l'intelligence artificielle
**Comment voyez-vous l'avenir du développement de l'intelligence artificielle ? Pensez-vous qu’il y aura davantage de collaboration entre des équipes aux profils ou orientations différents ? L'un de vos objectifs est-il de permettre aux experts non-compilateurs d'utiliser plus facilement le compilateur ? **
**Chris Lattner : **Les êtres humains sont extraordinaires, mais personne ne peut tout mettre dans sa tête. **Des personnes de différents types et spécialités travaillant ensemble peuvent créer quelque chose de plus grand que tout le monde. Par exemple, j'ai une certaine capacité , mais je ne me souviens pratiquement d'aucune équation différentielle, n'est-ce pas ? Donc le prochain inventeur de l’architecture LLM ne sera certainement pas moi (rires).
**Mais si j'y pense d'un point de vue systémique, si je peux amener ces personnes à contribuer, à collaborer et à comprendre comment ces choses fonctionnent, il y aura une avancée décisive. **Comment promouvoir l'invention ? Comment amener davantage de personnes comprenant différentes parties du problème à collaborer réellement ? **Par conséquent, l'exploration de Mojo et du moteur est un effort pour éliminer la complexité du problème. Parce qu'il existe de nombreux systèmes déjà construits qui sont simplement regroupés. **
Les solutions ici sont généralement simplement basées sur la résolution du problème plutôt que sur une conception descendante. Et je pense que Modular fournit une pile plus simple qui peut aider à réduire la complexité de l'ensemble de la pile. S'il n'est pas refactorisé, il suivra toujours l'histoire fragmentée et chaotique* (fragmentation dans le domaine de l'intelligence artificielle)* Une fois que vous voudrez changez-le un peu, vous allez planter, les performances seront terribles, ou cela ne fonctionnera pas. Cette situation vient de la fragmentation de la couche sous-jacente.
**Comment comprendre les compilateurs : les compilateurs et les langages sont-ils un support de collaboration humaine ou de croisement ? **
Chris Lattner : J'ai créé Modular non pas pour chercher des clous avec un marteau, ni pour innover pour le plaisir de l'innovation. Actuellement, pour des entreprises comme OpenAI, un petit nombre d'employés doivent passer beaucoup de temps à écrire manuellement CUDA. graines. **Cependant, les optimisations pour les compilateurs d'IA peuvent être utilisées pour améliorer la collaboration logicielle et étendre les capacités de personnes possédant des compétences et des connaissances différentes. **
La forme finale du compilateur est de permettre aux utilisateurs d'accomplir n'importe quelle tâche et de résoudre des problèmes en utilisant un code assembleur très simple sans avoir à connaître grand-chose sur le matériel. Le véritable rôle du compilateur est d'être capable d'effectuer des tâches à un niveau d'abstraction plus élevé. .Exprimer. Les compilateurs constituent également un moyen d'automatiser correctement les optimisations courantes qui pourraient autrement nécessiter une programmation manuelle.
Le premier objectif est de rendre le processus aussi simple que possible ;
Le deuxième objectif est que si vous chassez une grande partie de la complexité de votre esprit, vous pouvez faire place à une nouvelle complexité. De plus, grâce à l'abstraction, vous pouvez profiter du compilateur - car le compilateur porte une attention infinie aux détails, contrairement aux humains ;
**Des niveaux d'abstraction plus élevés peuvent également nous donner de nombreuses autres capacités. **Les systèmes de Deep Learning et Modular ont élevé les calculs au niveau graphique. Comment l'expliquer ? Ici, cela signifie qu'une fois que l'on s'est libéré des instructions de programmation complexes telles que les boucles for et que l'on est devenu plus déclaratif, cela signifie changer de modèle de calcul. Beaucoup de gens ne s’en rendent pas encore compte, mais je pense que c’est possible. Parce que le système existant est facile à causer des maux de tête, de nombreuses fonctions fournies par l'abstraction doivent implémenter Pmap et Vmap (Remarque : ces deux fonctions incluent la dérivation et la parallélisation automatiques)
L'amélioration de la technologie a bénéficié d'un grand nombre de systèmes bien structurés et bien structurés, d'un grand nombre de nouveaux matériels informatiques hautes performances et d'un grand nombre de percées qui ont été réalisées.** Par conséquent, j'espère sincèrement que Modular puisse avoir une application et une popularité plus larges, brisant la complexité de la série, c'est merveilleux. **
(Remarque : la plus grande différence entre la programmation déclarative et la programmation ordinaire est qu'il existe un concept supplémentaire de temps. Vous pouvez définir le passé, le présent et le futur, au lieu de maintenir le temps à sens unique de l'ensemble du lien d'exécution. Avec le concept du temps, le contenu de la définition peut être simplifié, puis le graphe de calcul peut être obtenu par "déduction", au lieu d'écrire un opérateur ici et un opérateur là, et de constituer un graphe statique)
**Pouvez-vous définir le moteur d'intelligence artificielle, le cadre d'intelligence artificielle et le compilateur d'intelligence artificielle de Modular ? **
Chris Lattner : La plupart des gens utiliseront des outils tels que PyTorch lors de la formation de grands modèles. Dans un tel scénario, CUDA ou Intel MKL seront bientôt introduits. J'appelle collectivement ces types de moteurs et je mentionne Au moteur, il s'agit principalement fait référence à l'interface matérielle, et Modular fournit un nouveau moteur qui peut introduire TensorFlow, PyTorch et autres. Ensuite, les utilisateurs peuvent piloter les opérations et effectuer la programmation matérielle d'une nouvelle manière, basée sur l'abstraction correcte. , vous pouvez produire des implémentations intéressantes.
**Selon votre définition, Modular est basé entre la couche framework et la couche matérielle. Ensuite, nous voulons connaître les pétaflops (nombre d'opérations en virgule flottante pouvant être effectuées par seconde) de Modular sur A100, mais j'ai trouvé que le site Web est entièrement constitué de CPU et je ne vois pas le GPU. Ma question est donc la suivante : tout le monde travaille dur pour rendre le GPU plus rapide, alors pourquoi voulez-vous faire fonctionner le CPU en premier ? **
Chris Lattner : En pensant aux premiers principes, nous devons commencer par le bas. Comment définissez-vous les systèmes d’intelligence artificielle d’aujourd’hui ? Beaucoup de gens parlent quotidiennement du GPU et discutent du GPU. Il semble que tout soit lié au GPU. Cependant, l’intelligence artificielle est en réalité un problème de calcul parallèle, hétérogène et à grande échelle. Par conséquent, l'intelligence artificielle traditionnelle commence par le chargement des données, et le GPU ne charge pas les données, vous devez donc effectuer une série de tâches telles que le chargement des données, le prétraitement et la mise en réseau, ainsi qu'un grand nombre de calculs matriciels.
Pour piloter le GPU, un CPU est absolument nécessaire. Lorsque nous développons un logiciel pour Accelerator, nous constatons que divers problèmes existent, et ce que les développeurs considèrent comme important constitue une partie importante du problème qu'ils souhaitent résoudre. Ainsi, tout le monde a construit un système basé sur le problème, et il a dû être conçu entièrement en fonction des exigences de la puce. **
**D'un point de vue technique, Modular souhaite construire un compilateur universel, car il est facile de passer de l'universel au vertical, mais mon expérience avec XLA est qu'il n'est pas possible de commencer avec quelque chose de spécialisé puis de le généraliser. . **
Pour l’industrie de l’intelligence artificielle, l’échelle de formation est directement proportionnelle à la taille de l’équipe de recherche, tandis que l’échelle d’inférence est directement proportionnelle à l’échelle du produit, de la base d’utilisateurs, etc. **Par conséquent, de nombreuses inférences sont encore effectuées sur le processeur. Par conséquent, nous avons décidé de commencer par le CPU et d'améliorer d'abord l'architecture. Le CPU est plus facile à utiliser et ne sera pas indisponible. Une fois l'architecture générale terminée, nous pouvons continuer à nous développer. Ensuite, nous travaillons également actuellement sur les GPU, qui seront bientôt lancés et qui seront étendus à ces différents types d'accélérateurs au fil du temps. **
**Quels sont les défis techniques liés à la construction du moteur ? **
Chris Lattner : Les membres de notre équipe ont essentiellement été exposés à tous les compilateurs et entités associées du secteur. Par exemple, j'ai participé à des recherches sur XLA et TensorFlow, et il y a également des membres de PyTorch, TVM, Intel OpenVINO. , et Onyx Runtime. Le défi pour tout le monde est que de nombreux systèmes ont été conçus il y a cinq à huit ans. À cette époque, l’intelligence artificielle était différente de celle d’aujourd’hui : il n’existait pas de grand modèle de langage.
**Le problème est que lorsque vous construisez un système, il commence comme un tas de code, puis devient de plus en plus gros. Et plus un système évolue rapidement, plus il est difficile d’apporter des changements fondamentaux. Nous avons donc choisi de tout recommencer à zéro. **
Si vous souhaitez toujours pouvoir écrire le noyau à la main, nous allons d'abord le prototyper en C++, puis introduire progressivement mojo, ce qui signifie que vous pouvez construire un compilateur de fusion automatique très complexe qui applique toutes les technologies les plus avancées et surpasse également les plus avancés.La technologie.
Nous savons que les utilisateurs détestent les limitations de forme statique et le manque de programmabilité. Par exemple, ils ne veulent pas être liés uniquement au Tensor* (Remarque : le Tensor est en fait un tableau multidimensionnel, dans le but de créer des matrices et des vecteurs de dimensions supérieures. De nombreux grands modèles ont des Tensors irréguliers)*
**Y a-t-il des objectifs de conception pour Modular ? Ou principe ? **
Chris Lattner : Je ne sais pas si j'ai un ensemble systématique de principes. On dirait qu'avoir un ensemble de principes, c'est un peu comme tenir un marteau et voir que tout est un clou. **Mais une grande partie de ce que nous devons faire est de libérer le potentiel du matériel et de le faire d'une manière extrêmement simple à utiliser. Ainsi, une grande partie des conditions de départ consistent moins à permettre de nouvelles choses qu'à résoudre des problèmes complexes pour faire avancer les choses, cela ressemble donc davantage à de la conception et de l'ingénierie. **
Si vous discutez avec une société LLM, il est facile de constater qu'elle a dépensé plus de 200 millions de dollars américains en GPU et GPU A100 d'une taille de mémoire spécifique. ** Tout le monde veut bénéficier de toutes les possibilités grâce au GPU (puissance de calcul). D’une part, de nombreuses personnes souhaitent pénétrer dans la puce et en libérer le potentiel, mais il y en a beaucoup d’autres qui souhaitent plus de portabilité, de généralité et d’abstraction. **
Le défi ici consiste donc à savoir comment activer et concevoir le système pour qu'il réalise l'abstraction par défaut sans renoncer à toutes les fonctionnalités. De même, de nombreux compilateurs, en particulier les compilateurs d’apprentissage automatique, tentent simplement de couvrir un point spécifique de l’espace, et leurs fonctions ne sont pas universelles.
Une autre chose est que nous nous soucions des utilisateurs, car beaucoup de gens sont obsédés par la technologie, mais oublient que les portraits des personnes qui appliquent la technologie et de ceux qui créent la technologie sont complètement différents. Nous devons comprendre les idées des développeurs qui utilisent les outils.
**Modular vient d'être publié pour téléchargement et utilisation sur la base de Linux Mojo ces derniers jours. Les versions MacOS et Windows seront bientôt publiées. Alors, quels autres kits d'outils et composants seront disponibles dans les six à neuf prochains mois ? **
**Chris Lattner :**Mojo est encore un langage jeune, et nous allons progressivement travailler avec l'écosystème pour le rendre de plus en plus mature. Nous voulons avoir une grande communauté autour de Mojo pour construire des trucs sympas ensemble. Afin d'atteindre cet objectif, nous ouvrirons progressivement Mojo, et tout le monde doit travailler ensemble pour résoudre de nombreux détails afin de construire un écosystème qui fonctionne bien, pas seulement un gâchis.
Tout comme le désastre de Python 2-3 que tout le monde a connu, personne ne veut s'en souvenir* (Remarque : plus de 80 % des deux syntaxes sont incompatibles, et en raison de problèmes historiques, de nombreuses distributions Linux s'appuient sur py2 en bas, mais l'utilisateur a accidentellement utilisé py3 et pip install xxx a fait planter le système). *
**Q : Quelle est votre relation avec Guido (*****Remarque : l'ingénieur néerlandais Guidovan Rossum, qui a inventé le langage Python) et la Fondation Python ? Comment sont-ils liés les uns aux autres ? **
Chris Lattner : Guido savait que Mojo allait arriver, et Guido a passé beaucoup de temps avec notre équipe, et nous nous sentons très chanceux. Il apparaît occasionnellement dans la communauté Discord mojo et me pose des questions difficiles, ce qui est génial.
Nous pensons que mojo est un membre de la famille Python.Bien sûr, il existe de nombreux membres de la famille Python, notamment PyPy et Cython, etc.Nous espérons que Python pourra continuer à se développer et à ajouter du nouveau contenu. Mojo continue également de croître et d'ajouter du nouveau contenu.
Remontez il y a 30 ou 40 ans, quand il y avait le langage C, puis une nouvelle chose appelée C++ est apparue en 1983. C++ est en fait le langage C avec des classes (Remarque : en 1979, Bjame Sgoustrup est allé chez Bell Labs et commence à transformer le C en un langage à classes. En 1983, le langage est officiellement nommé C++)
Ce qui s'est passé à l'époque, c'est que C et C++ ont commencé comme deux communautés différentes, mais il y avait beaucoup de convergence, de partage d'idées et d'échanges d'idées entre elles.
Bien entendu, toutes les fonctionnalités du langage C ont finalement été intégrées au C++. J'espère donc que la même chose se produira avec Mojo et Python.
À propos du Team Building en entrepreneuriat et en ingénierie
**De nombreux fondateurs comme vous ont eu une longue et incroyable carrière d'ingénieur. Tout d'un coup, c'est le PDG. Alors, qu’avez-vous appris sur la constitution d’équipes et l’encadrement des autres ? Surtout après être devenu ingénieur, vous devez désormais également être chef de produit et responsable du financement. **
**Chris Lattner :**Chez Modular, mon co-fondateur Tim et moi entretenons une relation très étroite et sommes très complémentaires. Dans le processus de création d’entreprise, avoir quelqu’un à qui parler est vraiment très important. Ce que je vis actuellement est quelque chose que je n’ai jamais vécu en tant que responsable de l’ingénierie chez Google et Apple.
**Lorsque nous avons lancé cette entreprise, notre conviction était : comprendre la douleur. Représenter une grande entreprise est différent de représenter une start-up. Lorsque la start-up sera réellement créée, je serai le leader de l'ingénierie et commencerai à former une équipe d'ingénierie, tandis que Tim sera responsable du travail produit et commercial, et sera responsable des travaux en l'absence d'une grande entreprise.Communiquer avec différentes entreprises (clients) sous l'aura de l'usine. Par exemple, quels sont vos problèmes actuels ? **
Sur quoi travailles-tu actuellement? Quels sont les défis ? Comment pouvons nous aider? Que pensez-vous de ce que nous faisons ? En tant que Modular, le défi auquel nous sommes confrontés est que ce que nous voulons construire est en réalité un problème technique extrêmement difficile et très abstrait.
**Pour résoudre ces problèmes difficiles, il faut embaucher des experts techniques très coûteux provenant de toutes les grandes entreprises technologiques. Par conséquent, je dois collecter beaucoup de fonds, bien motiver les employés, leur payer des salaires et faire en sorte que les employés se sentent à l'aise. **
Nous sommes directement confrontés aux clients et nous voyons la douleur des clients dans le domaine de l'intelligence artificielle. Construire et déployer beaucoup de choses est vraiment un gâchis, et tout le monde est piégé par trop de choses inefficaces. Par conséquent, notre vision est d’unifier toutes ces choses avec Modular.
Mais le problème revient : lors du développement de produits, les produits évoluent également constamment et les besoins continueront d'évoluer avec le temps. Ainsi, les équipes avec lesquelles nous avons travaillé se sont retrouvées avec un niveau de complexité très élevé, avec de nombreux systèmes désordonnés développés pour différents cas particuliers.
**Expérience en tant que leader en ingénierie : vaste expérience en matière de constitution d'équipes et de recrutement d'ingénieurs. Avez-vous des expériences ou des suggestions en matière de gestion de projet ? **
Chris Lattner : Mon travail consiste à aider l'équipe à gagner. Vous devez définir ce qu'est la victoire, donner aux gens une vision claire, un objectif clair et garder tout le monde aligné. **Lorsque vous avez un grand groupe de très bons les gens autour de vous Quand tout le monde veut être un héros, un objectif clair est très important. Lorsque l'énergie potentielle se superpose, de grands progrès seront réalisés rapidement, mais lorsqu'elle sera inversée, l'élan sera compensé. **
En interne, je participe souvent personnellement à la construction de l'infrastructure initiale, et il est important de montrer à l'équipe comment cela va fonctionner, et cela fait partie de notre culture. La chose la plus importante pour moi dans l'équipe d'ingénierie est la rapidité de mise en œuvre, si vous attendez 24 heures ou trois semaines pour exécuter CI, tout va ralentir.
Lors de l’embauche et à mesure que vous continuez à développer vos employés, vous souhaitez également déterminer dans quoi les employés sont bons, n’est-ce pas ? Je crois vraiment que si vous avez une très bonne équipe de personnes vraiment passionnées et que vous les associez à quelque chose qu'ils veulent vraiment faire, ils ont des super pouvoirs.
Nous voulons donc souvent nous assurer que les gens résolvent les bons problèmes. De cette façon, ils peuvent grandir, faire des choses, pousser et prendre des décisions de manière indépendante. Mais bien souvent, les gens seront très concentrés sur le produit, ou certains seront particulièrement doués pour faire des affaires, en se concentrant sur les clients et les problèmes qu’ils rencontrent. Mais vous ne pouvez pas résoudre et créer un produit sans équipe.
**J'aime beaucoup Tim parce qu'il est vraiment bon dans des domaines dans lesquels je ne suis pas très bon, et tout le monde apprend les uns des autres. **
À propos de ChatGPT et de l'intelligence artificielle
L'épidémie de ChatGPT est très intéressante.Pour les gens comme nous qui s'intéressent à l'intelligence artificielle depuis longtemps, ChatGPT signifie une sorte d'innovation d'interface utilisateur et fait prendre conscience aux gens de la puissance de l'intelligence artificielle. Avec le recul, je pense que cela a rehaussé la visibilité de l’IA dans la conscience publique pendant plusieurs années.
**Quel est le mystère non résolu le plus intéressant dans le domaine de l’intelligence artificielle ? **
Chris Lattner : Je pense que l'intelligence artificielle en est actuellement à son adolescence. Il y a beaucoup de gens intelligents qui ont des idées différentes sur ce qu’est l’IA, n’est-ce pas ? Certaines personnes pensent que tout devrait être des réseaux de neurones de bout en bout et que les logiciels devraient disparaître. Je pense que la question à laquelle il faut répondre est la suivante : quel est l'équilibre entre les algorithmes de formation et les algorithmes de conception intelligente ? Personnellement, je ne pense pas que ce soit l'un ou l'autre, si vous voulez construire un détecteur de chat, alors CNN est en effet un bon moyen de le faire. Si vous souhaitez écrire un chargeur de démarrage ou un système d'exploitation, son implémentation avec une boucle for fonctionne très bien. **Mais où ces choses seront-elles progressivement supprimées au fil du temps ? Comment pouvons-nous amener les développeurs d’applications à réfléchir de manière plus cohérente à ces présentations ? **
**Notre pari pour l'avenir est que l'IA finira par faire partie de l'ensemble d'outils permettant aux gens de réfléchir à la manière de créer des applications en tant que méthodologie de développement logiciel. Non seulement les applications iPhone ou formes similaires, mais aussi l'ensemble du service cloud, le pipeline de données et, finalement, la construction itérative de l'ensemble du produit utilisateur. Bien entendu, nous sommes toujours sur la voie de l'exploration. **
*MerciEvolution of Technology Life** à tous mes amis pour leur soutien continu à l'auteur au fil des années, et merci à ChaosAI**
*Merci à Dakai, AsyncGreed, Zhang Bo, Mao Li, Ethan et Mew pour leur aide professionnelle
les références:
1.
2. Référence : À quoi fait référence la propriété intellectuelle dans l'industrie des puces ? -Xin Analects-Le ciel est haut et les nuages sont sombres Andi863
3.Page d'accueil de Chris Lattner (nondot.org)
4.nn.fonctionnel et nn.Module - Liang Yun 1991 Algorithm Food House 2020-07-10 21:47
5. Référence : Jianshu-12 août 2018 - Une explication simple pour vous aider à comprendre ce qu'est LLVM
Voir l'original
Cette page peut inclure du contenu de tiers fourni à des fins d'information uniquement. Gate ne garantit ni l'exactitude ni la validité de ces contenus, n’endosse pas les opinions exprimées, et ne fournit aucun conseil financier ou professionnel à travers ces informations. Voir la section Avertissement pour plus de détails.
Explication détaillée de Modular : Comment le père de LLVM crée-t-il le futur langage du moteur d'IA ?
Structure de cet article
**1.Qu'est-ce qu'un compilateur ? **
2. À propos de Chris Lattner, le père de LLVM
3.À propos du modulaire
4. À propos de l'entrepreneuriat, de la constitution d'équipes d'ingénierie et de l'avenir de l'IA
**1. Qu'est-ce qu'un compilateur ? **
Un compilateur est un outil logiciel qui traduit les langages de programmation de haut niveau en code exécutable par ordinateur. Le compilateur convertit le code source écrit par le programmeur en instructions binaires que l'ordinateur peut comprendre et exécuter. Ces instructions sont regroupées dans un fichier exécutable ou une bibliothèque. pour exécuter des programmes sur votre ordinateur.
Le flux de travail principal du compilateur est le code source → préprocesseur → compilateur → code objet → éditeur de liens → programmes exécutables (utables)
Un autre exemple frappant :
*Professeur : Les enfants, aujourd'hui, nous apprenons l'addition. *
bla bla bla ……
*Enfants : Maître, nous avons appris. *
Professeur : Maintenant, vous pouvez simplement comprendre 1+1= ? Le compilateur
2. Chris Lattner, le père de LLVM
Avant de parler de Modular, parlons d'abord de l'expérience de Chris Lattner. Il est né en Californie en 1978 et a grandi dans la région de la baie de San Francisco. Il a commencé à programmer très jeune. Plus tard, il a obtenu un baccalauréat en informatique de l'UC Berkeley et a étudié pour un doctorat à l'Université de Stanford, en se concentrant sur l'optimisation du compilateur et la parallélisation automatique.
Chris Lattner a dirigé le développement de LLVM au cours de son doctorat. Grâce à LLVM, il a remporté l'ACM Software Award** (ACM Software Award)****. Après cela, Lattne a été embauché par Apple et a été responsable de nombreux projets importants chez Apple, notamment la conception et le développement du front-end du compilateur Clang, le langage de programmation Swift (le langage qui a remplacé Objective-C) et l'amélioration de l'environnement de développement Xcode. Le langage Swift est très populaire pour sa simplicité et ses performances et est utilisé par les développeurs pour le développement d'applications sur iOS, macOS et d'autres plates-formes Apple.
Après avoir quitté Apple, Chris Lattner a travaillé dans des entreprises telles que Tesla et Google, et a continué à publier des articles de recherche et à participer à des projets open source dans le domaine des langages de programmationet des technologies de compilateur. Il était responsable de la direction de l'équipe d'infrastructure Tensorflow. chez Google. , a créé XLA et MLIR.
Nous expliquons ici ce que sont XLA et MLIR :
XLA (Accelerated Linear Algebra) est un compilateur d'algèbre linéaire spécifique à un domaine qui peut accélérer les modèles TensorFlow, potentiellement sans nécessiter de modification du code source. Cela peut améliorer la vitesse de course et améliorer l'utilisation de la mémoire. ***
***MLIR (Représentation intermédiaire multi-niveaux :Représentation intermédiaire multi-niveaux) est un framework de compilateur. Sa conception optimise le compilateur et couvre essentiellement toutes les parties communes de la conception du compilateur. , ce qui grandement facilite les développeurs de compilateurs. *
**Plus important encore, qu'est-ce que LLVM ? **(Ce qui suit est extrait du bref livre, voir le lien de référence pour le texte original)
**LLVM peut être compris comme un ensemble de compilateurs et de technologies de chaîne d'outils modulaires et réutilisables. LLVM (en fait le nom complet de Low Level Virtue Machine, mais il n'a jamais été utilisé comme machine virtuelle) Le LLVM suivant n'est donc pas un acronyme ; c'est le nom complet du projet.
Ensuite, nous continuons : L'architecture traditionnelle du compilateur ressemble à ceci :
Démonté, il comprend :
L'architecture LLVM ressemble à ceci
**Pour le décrire avec précision, LLVM a apporté de nombreuses innovations au compilateur, telles que : **
**Qu'est-ce que Clang ? **
Un sous-projet du projet LLVM, un front-end de compilateur C/C++/Objective-C basé sur l'architecture LLVM. Par rapport à GCC, Clang présente les avantages suivants
Relation entre Clang et LLVM
Pour l'architecture globale de LLVM, clang est utilisé comme frontal. LLVM au sens large fait référence à l'ensemble de l'architecture LLVM, et LLVM au sens général étroit fait référence au backend LLVM (y compris l'optimisation du code et la génération de code cible).
Le code source (c/c++) passe par clang--> code intermédiaire (après une série d'optimisations, Pass est utilisé pour l'optimisation) --> code machine
Référence : Jianshu-12 août 2018-Une explication simple pour vous aider à comprendre ce qu'est LLVM
3. À propos de Modulaire
Modulaire——Moteur d'intelligence artificielle
C****hris Lattner :"J'ai créé Modular non pas avec un marteau à la recherche de clous, ni avec l'innovation pour le plaisir d'innover. Actuellement, pour des entreprises comme OpenAI, un petit nombre d'employés doivent dépenser beaucoup "
**"La forme finale du compilateur est de permettre aux utilisateurs d'utiliser un code assembleur très simple pour effectuer n'importe quelle tâche et résoudre des problèmes sans avoir à connaître grand-chose sur le matériel. Le véritable rôle du compilateur est d'utiliser un niveau d'abstraction plus élevé pour s'exprimer. **"
*"*Le FasterTransformer lancé par NVIDIA peut apporter d'énormes améliorations de performances. Par conséquent, de nombreuses grandes sociétés de modèles et développeurs utilisent FasterTransformer. Cependant, si vous souhaitez innover dans le domaine de Transformer, vous serez limité par FasterTransformer. "
C****hris Lattner : Si vous souhaitez obtenir des résultats identiques ou meilleurs que FasterTransformer, mais en utilisant d'autres architectures générales (ici des architectures non-Transformer), alors via le compilateur, vous pouvez obtenir le meilleur des deux mondesEn conséquence, les mêmes excellentes performances peuvent être obtenues lors de la recherche.En d'autres termes, l'optimisation au niveau du compilateur peut être équivalente à un « moteur d'IA » et aider à la transformation de l'architecture LLM à l'avenir.
Chris Lattner : Si l'on remonte à 2015, 2016 et 2017, période de développement rapide de l'intelligence artificielle, la technologie de cette époque était principalement dirigée par TensorFlow et PyTorch. PyTorch est apparu un peu plus tard que TensorFlow. , mais ce sont tous deux des conceptions similaires à certains égards. **Cependant, les personnes qui construisent et conçoivent les systèmes TensorFlow et PyTorch sont principalement composées d'expériences en intelligence artificielle, en équations différentielles et en différenciation automatique. Elles n'ont pas résolu le problème de frontière entre logiciel et matériel. **
Keras* est donc nécessaire (Remarque : Keras est une bibliothèque de réseaux de neurones artificiels open source écrite en Python. Elle peut être utilisée comme interface de programmation d'applications de haut niveau pour Tensorflow, Microsoft-CNTK et Theano pour réaliser des modèles d'apprentissage profond. La conception, le débogage, l'évaluation, l'application et la visualisation ) ou nn.Module (Remarque : nn.Module * est un concept unique à PyTorch et est également une classe qui sera fréquemment utilisé*)*.
La couche inférieure de ces choses est en fait constituée d'opérateurs.Comment implémenter la convolution, la multiplication matricielle, l'algorithme de réduction et l'opération élément par élément ? Vous devez utiliser CUDA et Intel MKL (Intel Math Kernel Library), puis continuer à bâtir sur ces fondations.
Ce modèle est correct au début, mais le problème existe aussi. Il y a très peu d'opérateurs au début. Cependant, tant qu'un nouveau matériel est introduit, même s'il ne s'agit que d'une nouvelle variante de processeur introduite par Intel, la complexité de calcul augmentera. continue d'augmenter., Aujourd'hui, TensorFlow et PyTorch ont des milliers d'opérateurs, chacun appelé noyau, et tous les noyaux doivent être écrits manuellement par des humains.
(Remarque : IP dans l'industrie des puces est généralement également appelé noyau IP. Le noyau IP fait référence à la conception mature de modules de circuit avec des fonctions indépendantes dans la puce. Cette conception de module de circuit peut être appliquée à d'autres conceptions de puces qui contiennent ce module de circuit. projet, réduisant ainsi la charge de travail de conception, raccourcissant le cycle de conception et améliorant le taux de réussite de la conception de la puce. La conception mature de ce module de circuit incarne la sagesse du concepteur et reflète les droits de propriété intellectuelle du concepteur. Par conséquent, l'industrie des puces utilise des cœurs IP pour Indique la conception mature de ce module de circuit. Le noyau IP peut également être compris comme le composant intermédiaire de la conception de la puce)
En d'autres termes, une fois qu'un nouveau matériel est lancé, vous devez réécrire des milliers de noyaux, donc le seuil d'entrée dans le matériel deviendra de plus en plus élevé. De plus, cette situation crée également de nombreuses difficultés pour la recherche scientifique. Par exemple, un chercheur, très peu de gens savent comment fonctionnent ces noyaux.
(Remarque : étant donné que le développement du noyau est souvent spécifique aux plates-formes matérielles, même nvidia n'est pas universel, encore moins FPGA ou DPU. Les opérateurs personnalisés constituent le principal canal permettant d'étendre les capacités informatiques des logiciels de plate-forme matérielle)
Il faut aussi savoir que de nombreuses personnes écrivent désormais CUDA Kernel* (Remarque : Kernel : le nom de la fonction exécutée par CUDA sur le GPU)*, mais le profil de compétences des ingénieurs ici est complètement différent des compétences qui peuvent innover le architecture modèle. **En conséquence, de nombreux systèmes d'intelligence artificielle sont confrontés à un tel défi : ils ne peuvent pas trouver d'experts techniques capables d'écrire du noyau. **
*(Remarque : *Lors de l'utilisation du GPU pour le calcul, tous les processus de calcul peuvent être encapsulés dans un noyau GPU et exécutés sur le GPU de manière séquentielle. Par souci de polyvalence, les bibliothèques d'opérateurs traditionnelles le feront. La conception est très basique, il y a donc ils sont nombreux)
À propos du TPU de Google
J'ai participé au projet TPU de Google lorsque j'étais chez Google. À cette époque, les défis rencontrés par l'équipe TPU étaient les suivants : il existe des milliers de noyaux différents sur le marché, comment lancer un nouveau matériel ? À cette époque, de nombreux collègues ont également évoqué la possibilité d’utiliser un compilateur pour y parvenir. **Ainsi, au lieu d'écrire manuellement des milliers de noyaux, de réécrire tous ces opérateurs et de créer complètement son propre écosystème comme Intel ou NVIDIA, le compilateur peut être plus flexible que manuel car il peut nous permettre de le faire de différentes manières. et faire correspondre le noyau peut également optimiser beaucoup de performances. **
*Les compilateurs peuvent y parvenir de manière généralisée, mais si nous utilisons le noyau traditionnel écrit à la main, ce qui en résulte doit être un arrangement fixe de noyaux que les gens jugent intéressant, plutôt que quelque chose de nouveau souhaité par les chercheurs. ** Ainsi, le XLA de Google ( Expliqué ci-dessus : Algèbre linéaire accélérée : Algèbre linéaire accélérée *) est né. XLA peut prendre en charge des ordinateurs de niveau exaflop à grande échelle, mais le problème revient : XLA est apparu pour prendre en charge le TPU de Google.
**Il est vraiment difficile de créer un compilateur, et il y a encore des problèmes d'évolutivité. Actuellement, des ingénieurs compilateurs doivent être embauchés pour mener à bien de nombreux projets d'ingénierie d'apprentissage automatique, et les ingénieurs compilateurs qui comprennent l'apprentissage automatique et diverses connaissances connexes sont encore plus importants. assez. De plus, XLA n’est pas évolutif et ne fonctionne qu’avec les TPU. **
À propos du Deep Learning et de la programmabilité
Si nous revenons sur l'histoire du développement de CUDA et de l'apprentissage profond de NVIDIA, comme la naissance d'AlexNet et le développement de l'apprentissage profond, beaucoup de gens pensent que la naissance d'AlexNet est le résultat de la combinaison de données, d'ImageNet + informatique et la puissance du GPU. **
(Remarque : en 2012, Alex Krizhevsky et Ilya, étudiants de Geoffrey Hinton, l'un des trois géants de l'apprentissage profond et lauréat du Turing Award, ont proposé AlexNet et ont remporté le championnat avec un avantage significatif dans l'ILSVRC cette année-là, dépassant de loin le troisième Deux. Ce résultat a attiré une grande attention de la part du monde universitaire et de l'industrie, et la vision par ordinateur est progressivement entrée dans une ère dominée par l'apprentissage profond)
**Mais beaucoup de gens oublient l'importance de la « programmabilité ». **
Parce que c'est CUDA qui a permis aux chercheurs d'inventer des noyaux convolutifs qui n'existaient pas auparavant, et TensorFlow n'existait pas à cette époque. **En fait, c'est la combinaison des données, du calcul et de la programmabilité qui permet à de nouvelles recherches de lancer toute une vague de systèmes d'apprentissage profond. **
**Par conséquent, il est très important de tirer les leçons des événements et de l’histoire passés. Alors, comment passer à l’étape suivante ? Comment passer à la prochaine ère de cette technologie où chacun pourra bénéficier des incroyables innovations et idées algorithmiques de l’humanité ? **Comment bénéficier du compilateur ? Comment tirer parti de l’évolutivité et de la polyvalence des compilateurs pour résoudre de nouveaux problèmes ? **Plus important encore, comment bénéficiez-vous de la programmabilité ? C'est le Modular sur lequel nous travaillons : le moteur d'intelligence artificielle. **
À propos de l'avenir de l'intelligence artificielle
**Chris Lattner : **Les êtres humains sont extraordinaires, mais personne ne peut tout mettre dans sa tête. **Des personnes de différents types et spécialités travaillant ensemble peuvent créer quelque chose de plus grand que tout le monde. Par exemple, j'ai une certaine capacité , mais je ne me souviens pratiquement d'aucune équation différentielle, n'est-ce pas ? Donc le prochain inventeur de l’architecture LLM ne sera certainement pas moi (rires).
**Mais si j'y pense d'un point de vue systémique, si je peux amener ces personnes à contribuer, à collaborer et à comprendre comment ces choses fonctionnent, il y aura une avancée décisive. **Comment promouvoir l'invention ? Comment amener davantage de personnes comprenant différentes parties du problème à collaborer réellement ? **Par conséquent, l'exploration de Mojo et du moteur est un effort pour éliminer la complexité du problème. Parce qu'il existe de nombreux systèmes déjà construits qui sont simplement regroupés. **
Les solutions ici sont généralement simplement basées sur la résolution du problème plutôt que sur une conception descendante. Et je pense que Modular fournit une pile plus simple qui peut aider à réduire la complexité de l'ensemble de la pile. S'il n'est pas refactorisé, il suivra toujours l'histoire fragmentée et chaotique* (fragmentation dans le domaine de l'intelligence artificielle)* Une fois que vous voudrez changez-le un peu, vous allez planter, les performances seront terribles, ou cela ne fonctionnera pas. Cette situation vient de la fragmentation de la couche sous-jacente.
Chris Lattner : J'ai créé Modular non pas pour chercher des clous avec un marteau, ni pour innover pour le plaisir de l'innovation. Actuellement, pour des entreprises comme OpenAI, un petit nombre d'employés doivent passer beaucoup de temps à écrire manuellement CUDA. graines. **Cependant, les optimisations pour les compilateurs d'IA peuvent être utilisées pour améliorer la collaboration logicielle et étendre les capacités de personnes possédant des compétences et des connaissances différentes. **
La forme finale du compilateur est de permettre aux utilisateurs d'accomplir n'importe quelle tâche et de résoudre des problèmes en utilisant un code assembleur très simple sans avoir à connaître grand-chose sur le matériel. Le véritable rôle du compilateur est d'être capable d'effectuer des tâches à un niveau d'abstraction plus élevé. .Exprimer. Les compilateurs constituent également un moyen d'automatiser correctement les optimisations courantes qui pourraient autrement nécessiter une programmation manuelle.
Le premier objectif est de rendre le processus aussi simple que possible ;
Le deuxième objectif est que si vous chassez une grande partie de la complexité de votre esprit, vous pouvez faire place à une nouvelle complexité. De plus, grâce à l'abstraction, vous pouvez profiter du compilateur - car le compilateur porte une attention infinie aux détails, contrairement aux humains ;
**Des niveaux d'abstraction plus élevés peuvent également nous donner de nombreuses autres capacités. **Les systèmes de Deep Learning et Modular ont élevé les calculs au niveau graphique. Comment l'expliquer ? Ici, cela signifie qu'une fois que l'on s'est libéré des instructions de programmation complexes telles que les boucles for et que l'on est devenu plus déclaratif, cela signifie changer de modèle de calcul. Beaucoup de gens ne s’en rendent pas encore compte, mais je pense que c’est possible. Parce que le système existant est facile à causer des maux de tête, de nombreuses fonctions fournies par l'abstraction doivent implémenter Pmap et Vmap (Remarque : ces deux fonctions incluent la dérivation et la parallélisation automatiques)
L'amélioration de la technologie a bénéficié d'un grand nombre de systèmes bien structurés et bien structurés, d'un grand nombre de nouveaux matériels informatiques hautes performances et d'un grand nombre de percées qui ont été réalisées.** Par conséquent, j'espère sincèrement que Modular puisse avoir une application et une popularité plus larges, brisant la complexité de la série, c'est merveilleux. **
(Remarque : la plus grande différence entre la programmation déclarative et la programmation ordinaire est qu'il existe un concept supplémentaire de temps. Vous pouvez définir le passé, le présent et le futur, au lieu de maintenir le temps à sens unique de l'ensemble du lien d'exécution. Avec le concept du temps, le contenu de la définition peut être simplifié, puis le graphe de calcul peut être obtenu par "déduction", au lieu d'écrire un opérateur ici et un opérateur là, et de constituer un graphe statique)
Chris Lattner : La plupart des gens utiliseront des outils tels que PyTorch lors de la formation de grands modèles. Dans un tel scénario, CUDA ou Intel MKL seront bientôt introduits. J'appelle collectivement ces types de moteurs et je mentionne Au moteur, il s'agit principalement fait référence à l'interface matérielle, et Modular fournit un nouveau moteur qui peut introduire TensorFlow, PyTorch et autres. Ensuite, les utilisateurs peuvent piloter les opérations et effectuer la programmation matérielle d'une nouvelle manière, basée sur l'abstraction correcte. , vous pouvez produire des implémentations intéressantes.
Chris Lattner : En pensant aux premiers principes, nous devons commencer par le bas. Comment définissez-vous les systèmes d’intelligence artificielle d’aujourd’hui ? Beaucoup de gens parlent quotidiennement du GPU et discutent du GPU. Il semble que tout soit lié au GPU. Cependant, l’intelligence artificielle est en réalité un problème de calcul parallèle, hétérogène et à grande échelle. Par conséquent, l'intelligence artificielle traditionnelle commence par le chargement des données, et le GPU ne charge pas les données, vous devez donc effectuer une série de tâches telles que le chargement des données, le prétraitement et la mise en réseau, ainsi qu'un grand nombre de calculs matriciels.
Pour piloter le GPU, un CPU est absolument nécessaire. Lorsque nous développons un logiciel pour Accelerator, nous constatons que divers problèmes existent, et ce que les développeurs considèrent comme important constitue une partie importante du problème qu'ils souhaitent résoudre. Ainsi, tout le monde a construit un système basé sur le problème, et il a dû être conçu entièrement en fonction des exigences de la puce. **
**D'un point de vue technique, Modular souhaite construire un compilateur universel, car il est facile de passer de l'universel au vertical, mais mon expérience avec XLA est qu'il n'est pas possible de commencer avec quelque chose de spécialisé puis de le généraliser. . **
Pour l’industrie de l’intelligence artificielle, l’échelle de formation est directement proportionnelle à la taille de l’équipe de recherche, tandis que l’échelle d’inférence est directement proportionnelle à l’échelle du produit, de la base d’utilisateurs, etc. **Par conséquent, de nombreuses inférences sont encore effectuées sur le processeur. Par conséquent, nous avons décidé de commencer par le CPU et d'améliorer d'abord l'architecture. Le CPU est plus facile à utiliser et ne sera pas indisponible. Une fois l'architecture générale terminée, nous pouvons continuer à nous développer. Ensuite, nous travaillons également actuellement sur les GPU, qui seront bientôt lancés et qui seront étendus à ces différents types d'accélérateurs au fil du temps. **
Chris Lattner : Les membres de notre équipe ont essentiellement été exposés à tous les compilateurs et entités associées du secteur. Par exemple, j'ai participé à des recherches sur XLA et TensorFlow, et il y a également des membres de PyTorch, TVM, Intel OpenVINO. , et Onyx Runtime. Le défi pour tout le monde est que de nombreux systèmes ont été conçus il y a cinq à huit ans. À cette époque, l’intelligence artificielle était différente de celle d’aujourd’hui : il n’existait pas de grand modèle de langage.
**Le problème est que lorsque vous construisez un système, il commence comme un tas de code, puis devient de plus en plus gros. Et plus un système évolue rapidement, plus il est difficile d’apporter des changements fondamentaux. Nous avons donc choisi de tout recommencer à zéro. **
Si vous souhaitez toujours pouvoir écrire le noyau à la main, nous allons d'abord le prototyper en C++, puis introduire progressivement mojo, ce qui signifie que vous pouvez construire un compilateur de fusion automatique très complexe qui applique toutes les technologies les plus avancées et surpasse également les plus avancés.La technologie.
Nous savons que les utilisateurs détestent les limitations de forme statique et le manque de programmabilité. Par exemple, ils ne veulent pas être liés uniquement au Tensor* (Remarque : le Tensor est en fait un tableau multidimensionnel, dans le but de créer des matrices et des vecteurs de dimensions supérieures. De nombreux grands modèles ont des Tensors irréguliers)*
Chris Lattner : Je ne sais pas si j'ai un ensemble systématique de principes. On dirait qu'avoir un ensemble de principes, c'est un peu comme tenir un marteau et voir que tout est un clou. **Mais une grande partie de ce que nous devons faire est de libérer le potentiel du matériel et de le faire d'une manière extrêmement simple à utiliser. Ainsi, une grande partie des conditions de départ consistent moins à permettre de nouvelles choses qu'à résoudre des problèmes complexes pour faire avancer les choses, cela ressemble donc davantage à de la conception et de l'ingénierie. **
Si vous discutez avec une société LLM, il est facile de constater qu'elle a dépensé plus de 200 millions de dollars américains en GPU et GPU A100 d'une taille de mémoire spécifique. ** Tout le monde veut bénéficier de toutes les possibilités grâce au GPU (puissance de calcul). D’une part, de nombreuses personnes souhaitent pénétrer dans la puce et en libérer le potentiel, mais il y en a beaucoup d’autres qui souhaitent plus de portabilité, de généralité et d’abstraction. **
Le défi ici consiste donc à savoir comment activer et concevoir le système pour qu'il réalise l'abstraction par défaut sans renoncer à toutes les fonctionnalités. De même, de nombreux compilateurs, en particulier les compilateurs d’apprentissage automatique, tentent simplement de couvrir un point spécifique de l’espace, et leurs fonctions ne sont pas universelles.
Une autre chose est que nous nous soucions des utilisateurs, car beaucoup de gens sont obsédés par la technologie, mais oublient que les portraits des personnes qui appliquent la technologie et de ceux qui créent la technologie sont complètement différents. Nous devons comprendre les idées des développeurs qui utilisent les outils.
**Chris Lattner :**Mojo est encore un langage jeune, et nous allons progressivement travailler avec l'écosystème pour le rendre de plus en plus mature. Nous voulons avoir une grande communauté autour de Mojo pour construire des trucs sympas ensemble. Afin d'atteindre cet objectif, nous ouvrirons progressivement Mojo, et tout le monde doit travailler ensemble pour résoudre de nombreux détails afin de construire un écosystème qui fonctionne bien, pas seulement un gâchis.
Tout comme le désastre de Python 2-3 que tout le monde a connu, personne ne veut s'en souvenir* (Remarque : plus de 80 % des deux syntaxes sont incompatibles, et en raison de problèmes historiques, de nombreuses distributions Linux s'appuient sur py2 en bas, mais l'utilisateur a accidentellement utilisé py3 et pip install xxx a fait planter le système). *
**Q : Quelle est votre relation avec Guido (*****Remarque : l'ingénieur néerlandais Guido van Rossum, qui a inventé le langage Python) et la Fondation Python ? Comment sont-ils liés les uns aux autres ? **
Chris Lattner : Guido savait que Mojo allait arriver, et Guido a passé beaucoup de temps avec notre équipe, et nous nous sentons très chanceux. Il apparaît occasionnellement dans la communauté Discord mojo et me pose des questions difficiles, ce qui est génial.
Nous pensons que mojo est un membre de la famille Python.Bien sûr, il existe de nombreux membres de la famille Python, notamment PyPy et Cython, etc.Nous espérons que Python pourra continuer à se développer et à ajouter du nouveau contenu. Mojo continue également de croître et d'ajouter du nouveau contenu.
Remontez il y a 30 ou 40 ans, quand il y avait le langage C, puis une nouvelle chose appelée C++ est apparue en 1983. C++ est en fait le langage C avec des classes (Remarque : en 1979, Bjame Sgoustrup est allé chez Bell Labs et commence à transformer le C en un langage à classes. En 1983, le langage est officiellement nommé C++)
Ce qui s'est passé à l'époque, c'est que C et C++ ont commencé comme deux communautés différentes, mais il y avait beaucoup de convergence, de partage d'idées et d'échanges d'idées entre elles.
Bien entendu, toutes les fonctionnalités du langage C ont finalement été intégrées au C++. J'espère donc que la même chose se produira avec Mojo et Python.
À propos du Team Building en entrepreneuriat et en ingénierie
**Chris Lattner :**Chez Modular, mon co-fondateur Tim et moi entretenons une relation très étroite et sommes très complémentaires. Dans le processus de création d’entreprise, avoir quelqu’un à qui parler est vraiment très important. Ce que je vis actuellement est quelque chose que je n’ai jamais vécu en tant que responsable de l’ingénierie chez Google et Apple.
**Lorsque nous avons lancé cette entreprise, notre conviction était : comprendre la douleur. Représenter une grande entreprise est différent de représenter une start-up. Lorsque la start-up sera réellement créée, je serai le leader de l'ingénierie et commencerai à former une équipe d'ingénierie, tandis que Tim sera responsable du travail produit et commercial, et sera responsable des travaux en l'absence d'une grande entreprise.Communiquer avec différentes entreprises (clients) sous l'aura de l'usine. Par exemple, quels sont vos problèmes actuels ? **
Sur quoi travailles-tu actuellement? Quels sont les défis ? Comment pouvons nous aider? Que pensez-vous de ce que nous faisons ? En tant que Modular, le défi auquel nous sommes confrontés est que ce que nous voulons construire est en réalité un problème technique extrêmement difficile et très abstrait.
**Pour résoudre ces problèmes difficiles, il faut embaucher des experts techniques très coûteux provenant de toutes les grandes entreprises technologiques. Par conséquent, je dois collecter beaucoup de fonds, bien motiver les employés, leur payer des salaires et faire en sorte que les employés se sentent à l'aise. **
Nous sommes directement confrontés aux clients et nous voyons la douleur des clients dans le domaine de l'intelligence artificielle. Construire et déployer beaucoup de choses est vraiment un gâchis, et tout le monde est piégé par trop de choses inefficaces. Par conséquent, notre vision est d’unifier toutes ces choses avec Modular.
Mais le problème revient : lors du développement de produits, les produits évoluent également constamment et les besoins continueront d'évoluer avec le temps. Ainsi, les équipes avec lesquelles nous avons travaillé se sont retrouvées avec un niveau de complexité très élevé, avec de nombreux systèmes désordonnés développés pour différents cas particuliers.
Chris Lattner : Mon travail consiste à aider l'équipe à gagner. Vous devez définir ce qu'est la victoire, donner aux gens une vision claire, un objectif clair et garder tout le monde aligné. **Lorsque vous avez un grand groupe de très bons les gens autour de vous Quand tout le monde veut être un héros, un objectif clair est très important. Lorsque l'énergie potentielle se superpose, de grands progrès seront réalisés rapidement, mais lorsqu'elle sera inversée, l'élan sera compensé. **
En interne, je participe souvent personnellement à la construction de l'infrastructure initiale, et il est important de montrer à l'équipe comment cela va fonctionner, et cela fait partie de notre culture. La chose la plus importante pour moi dans l'équipe d'ingénierie est la rapidité de mise en œuvre, si vous attendez 24 heures ou trois semaines pour exécuter CI, tout va ralentir.
Lors de l’embauche et à mesure que vous continuez à développer vos employés, vous souhaitez également déterminer dans quoi les employés sont bons, n’est-ce pas ? Je crois vraiment que si vous avez une très bonne équipe de personnes vraiment passionnées et que vous les associez à quelque chose qu'ils veulent vraiment faire, ils ont des super pouvoirs.
Nous voulons donc souvent nous assurer que les gens résolvent les bons problèmes. De cette façon, ils peuvent grandir, faire des choses, pousser et prendre des décisions de manière indépendante. Mais bien souvent, les gens seront très concentrés sur le produit, ou certains seront particulièrement doués pour faire des affaires, en se concentrant sur les clients et les problèmes qu’ils rencontrent. Mais vous ne pouvez pas résoudre et créer un produit sans équipe.
**J'aime beaucoup Tim parce qu'il est vraiment bon dans des domaines dans lesquels je ne suis pas très bon, et tout le monde apprend les uns des autres. **
À propos de ChatGPT et de l'intelligence artificielle
L'épidémie de ChatGPT est très intéressante.Pour les gens comme nous qui s'intéressent à l'intelligence artificielle depuis longtemps, ChatGPT signifie une sorte d'innovation d'interface utilisateur et fait prendre conscience aux gens de la puissance de l'intelligence artificielle. Avec le recul, je pense que cela a rehaussé la visibilité de l’IA dans la conscience publique pendant plusieurs années.
**Quel est le mystère non résolu le plus intéressant dans le domaine de l’intelligence artificielle ? **
Chris Lattner : Je pense que l'intelligence artificielle en est actuellement à son adolescence. Il y a beaucoup de gens intelligents qui ont des idées différentes sur ce qu’est l’IA, n’est-ce pas ? Certaines personnes pensent que tout devrait être des réseaux de neurones de bout en bout et que les logiciels devraient disparaître. Je pense que la question à laquelle il faut répondre est la suivante : quel est l'équilibre entre les algorithmes de formation et les algorithmes de conception intelligente ? Personnellement, je ne pense pas que ce soit l'un ou l'autre, si vous voulez construire un détecteur de chat, alors CNN est en effet un bon moyen de le faire. Si vous souhaitez écrire un chargeur de démarrage ou un système d'exploitation, son implémentation avec une boucle for fonctionne très bien. **Mais où ces choses seront-elles progressivement supprimées au fil du temps ? Comment pouvons-nous amener les développeurs d’applications à réfléchir de manière plus cohérente à ces présentations ? **
**Notre pari pour l'avenir est que l'IA finira par faire partie de l'ensemble d'outils permettant aux gens de réfléchir à la manière de créer des applications en tant que méthodologie de développement logiciel. Non seulement les applications iPhone ou formes similaires, mais aussi l'ensemble du service cloud, le pipeline de données et, finalement, la construction itérative de l'ensemble du produit utilisateur. Bien entendu, nous sommes toujours sur la voie de l'exploration. **
*MerciEvolution of Technology Life** à tous mes amis pour leur soutien continu à l'auteur au fil des années, et merci à ChaosAI**
*Merci à Dakai, AsyncGreed, Zhang Bo, Mao Li, Ethan et Mew pour leur aide professionnelle
les références:
1.
2. Référence : À quoi fait référence la propriété intellectuelle dans l'industrie des puces ? -Xin Analects-Le ciel est haut et les nuages sont sombres Andi863
3.Page d'accueil de Chris Lattner (nondot.org)
4.nn.fonctionnel et nn.Module - Liang Yun 1991 Algorithm Food House 2020-07-10 21:47
5. Référence : Jianshu-12 août 2018 - Une explication simple pour vous aider à comprendre ce qu'est LLVM