Bonjour, Habr! Je vous présente la traduction de l'article
«Pourquoi Swift peut être la prochaine grande chose dans l'apprentissage profond» de Max Pechyonkin, qui m'a intéressé, dans lequel l'auteur discute de la langue dans laquelle la formation approfondie sera effectuée dans les années à venir.
Si vous suivez une formation approfondie, vous devriez très probablement commencer à apprendre Swift
Entrée
Si vous programmez, alors très probablement lorsque vous entendez Swift, vous pensez à développer des applications sur iOS et MacOS. Si vous vous entraînez en profondeur, vous devriez avoir entendu parler de
Swift pour Tensorflow (S4TF). Ensuite, vous vous demandez peut-être: «Pourquoi Google a-t-il créé une version de TensorFlow pour Swift? Après tout, il existe déjà des versions pour Python et C ++, alors pourquoi un autre langage? » Dans cet article, j'essaierai de répondre à cette question et d'indiquer les raisons pour lesquelles vous devriez surveiller de près S4TF, ainsi que le langage Swift lui-même. Je n'essaierai pas de faire une analyse détaillée, je vais seulement essayer de décrire la grande image avec beaucoup de liens, si vous êtes intéressé, vous pouvez creuser plus profondément.
Swift a un soutien très solide
Swift a été créé par
Chris Luttner lorsqu'il travaillait chez Apple. Maintenant, Chris travaille pour
Google Brain (l'une des meilleures équipes de recherche en intelligence artificielle au monde). Le fait même que le créateur de la langue Swift travaille maintenant dans le laboratoire, qui est engagé dans une formation approfondie, témoigne de la gravité de ce projet.
Il y a quelque temps, les gens de Google ont réalisé que même si Python et un langage merveilleux, il avait encore beaucoup de restrictions difficiles à surmonter. Un nouveau langage était nécessaire pour TensorFlow, et après de longues délibérations, Swift a été choisi comme candidat. Je n'entrerai pas dans les détails ici, mais
voici un document qui décrit les défauts de Python, ainsi que les autres langages qui ont été pris en compte et comment tout cela s'est réuni dans Swift.
Swift pour TensorFlow est bien plus qu'une simple bibliothèque
Swift pour TensorFlow n'est pas seulement TF pour encore une autre langue. C'est essentiellement une autre branche (au sens propre) de la langue Swift elle-même. Cela signifie que S4TF n'est pas une bibliothèque; c'est un langage avec ses propres règles, avec ses propres fonctions intégrées qui prennent en charge toutes les fonctionnalités requises par TensorFlow. Par exemple, S4TF possède un système de
différenciation automatique très puissant: c'est l'une des choses fondamentales de l'apprentissage profond, il est nécessaire pour calculer les gradients. Comparez cela avec Python, dans lequel la différenciation automatique n'est pas le composant principal du langage. Certaines fonctionnalités initialement développées dans le cadre de S4TF ont ensuite été intégrées au langage Swift lui-même.
Rapide rapide
Quand j'ai découvert que Swift est aussi rapide que C, j'ai été étonné. Je savais que C était hautement optimisé et permettait d'atteindre une vitesse très élevée, mais cela était dû à la gestion de la micro-mémoire, et donc C avait des problèmes de sécurité de la mémoire. De plus, C n'est pas si facile à apprendre.
Swift fonctionne maintenant
aussi vite que C dans les calculs numériques, il n'a aucun problème avec la sécurité de la mémoire et est beaucoup plus facile à apprendre. Le compilateur LLVM de Swift est très puissant et a une optimisation très efficace, il fournira une vitesse de code très rapide.
Vous pouvez utiliser Python, C et C ++ dans Swift
Étant donné que Swift for machine learning est à un stade très précoce de son développement, de nombreuses bibliothèques pour MO n'ont pas été créées pour lui. Ne vous inquiétez pas trop à ce sujet car Swift a une
compatibilité Python incroyable avec Python. Vous importez simplement n'importe quelle bibliothèque Python dans Swift, et cela fonctionne. Vous pouvez également importer des bibliothèques C et C ++ dans Swift (pour C ++, vous devez vous assurer que les fichiers d'en-tête sont écrits en C pur, sans fonctions C ++).
Pour résumer, si vous avez besoin de fonctionnalités spécifiques, mais qu'elles ne sont pas encore implémentées dans Swift, vous pouvez importer les packages Python, C ou C ++ appropriés.
Impressionnant!
Swift peut aller très bas
Si vous avez déjà utilisé TensorFlow, vous l'avez probablement fait avec le package Python. Sous le capot, la version Python de la bibliothèque TensorFlow utilise du code C à un niveau très bas. Ainsi, lorsque vous appelez une fonction dans TensorFlow, à un certain niveau, vous utilisez du code C. Cela signifie qu'il y a une limite à la profondeur à laquelle vous pouvez vérifier le code source. Par exemple, si vous voulez voir comment les convolutions sont implémentées, vous ne verrez pas le code Python car elles sont implémentées en C.
Swift est différent. Chris Luttner a appelé Swift «
sucre syntaxique pour LLVM [langage d'assemblage]». Cela signifie qu'en fait, Swift fonctionne presque directement avec le matériel, et qu'il n'y a pas d'autre ligne de code écrite en C. Cela signifie également que Swift est très rapide, comme je l'ai décrit ci-dessus. Tout cela conduit au fait que vous, en tant que développeur, pouvez vérifier le code à des niveaux très élevés et très bas, sans avoir besoin d'utiliser C.
Et ensuite?
Swift n'est qu'une partie des innovations d'apprentissage approfondi qui se déroulent chez Google. Il existe un autre composant qui est également très fortement connecté:
MLIR , qui signifie représentation intermédiaire à plusieurs niveaux. MLIR sera une infrastructure de compilation unificatrice qui vous permettra d'écrire du code en Swift (ou tout autre langage) et de le compiler sur n'importe quel matériel de support. Maintenant, il existe de nombreux compilateurs pour différents équipements cibles, mais MLIR est capable de changer cela, il permettra non seulement de réutiliser le code, mais aussi d'écrire vos propres composants de compilateur de bas niveau. Il permettra également aux chercheurs d'utiliser l'apprentissage automatique pour optimiser les algorithmes de bas niveau.
Alors que MLIR agit comme un compilateur pour l'apprentissage automatique, nous voyons également la possibilité d'utiliser des méthodes d'apprentissage automatique dans les compilateurs. Ceci est particulièrement important car le nombre d'ingénieurs développant des bibliothèques numériques n'augmente pas aussi rapidement que la variété de modèles ou de matériel pour l'apprentissage automatique.
Imaginez utiliser l'apprentissage en profondeur pour optimiser des algorithmes de bas niveau pour partitionner la mémoire en données (
Halide essaie de résoudre un problème similaire). Et ce n'est qu'un début, nous attendons de nombreuses autres applications créatives utilisant l'apprentissage automatique dans les compilateurs.
Résumé
Si vous êtes dans le domaine de l'apprentissage en profondeur, vous devriez probablement commencer à apprendre Swift. Cela apportera de nombreux avantages par rapport à Python. Google investit sérieusement pour faire de Swift le composant principal de leur infrastructure TensorFlow ML, et Swift deviendra très probablement une langue d'apprentissage en profondeur. Si vous commencez déjà à apprendre et à utiliser Swift, cela vous donnera l'avantage du pionnier.