{"id":369833,"date":"2023-07-06T16:22:15","date_gmt":"2023-07-06T15:22:15","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=go&#038;p=369833"},"modified":"2023-07-11T08:57:30","modified_gmt":"2023-07-11T07:57:30","slug":"quel-avenir-pour-le-machine-learning-avec-go","status":"publish","type":"go","link":"https:\/\/blog.jetbrains.com\/fr\/go\/2023\/07\/06\/quel-avenir-pour-le-machine-learning-avec-go\/","title":{"rendered":"Quel avenir pour Go dans le Machine Learning ?"},"content":{"rendered":"\n<p><em>Cet article a \u00e9t\u00e9 \u00e9crit par un contributeur externe.<\/em><\/p>\n\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                                                            <div class=\"about-author__box-img\">\n                            <img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/05\/qDe01JDZsgN1-oiMvLEGaG2j7ivSi9coWBW3k3AyhLw.jpg\" alt=\"\" loading=\"lazy\">\n                        <\/div>\n                                        <div class=\"about-author__box-text\">\n                                                    <h4>Sooter Saalu<\/h4>\n                                                <p>Expert des donn\u00e9es, Sooter Saalu a exerc\u00e9 en tant qu&#8217;analyste, scientifique et ing\u00e9nieur. Il a suivi une formation en psychologie clinique et produit des contenus sur les donn\u00e9es \u00e0 destination de lecteurs ayant des profil techniques ou non.<\/p>\n<p><a href=\"https:\/\/github.com\/soot3\" target=\"_blank\" rel=\"nofollow noopener\">GitHub<\/a><\/p>\n                    <\/div>\n                            <\/div>\n        <\/div>\n    <\/div>\n\n\n\n<p><a href=\"https:\/\/go.dev\/\" target=\"_blank\" rel=\"noreferrer noopener\">Go<\/a> est un langage de programmation open source qui a \u00e9t\u00e9 con\u00e7u par Google pour optimiser la construction et l&#8217;utilisation de services au niveau du syst\u00e8me, simplifier le travail avec de grandes bases de code et utiliser des machines multic\u0153urs en r\u00e9seau. Lanc\u00e9 en 2009, Go est un langage compil\u00e9 \u00e0 typage statique fortement inspir\u00e9 par C, qui se distingue par sa simplicit\u00e9 d&#8217;utilisation et par la s\u00e9curit\u00e9 et la simultan\u00e9it\u00e9 qu&#8217;il apporte.<\/p>\n\n\n\n<p>Go a notamment \u00e9t\u00e9 utilis\u00e9 pour cr\u00e9er des applications \u00e0 grande \u00e9chelle telles que Docker et Kubernetes. Il est largement utilis\u00e9 dans de grandes entreprises comme Netflix, PayPal et Uber en raison de sa faible latence, de ses performances multiplateformes et de son \u00e9volutivit\u00e9. Malgr\u00e9 ses nombreux avantages, Go est peu utilis\u00e9 dans le domaine du machine learning (ML).<\/p>\n\n\n\n<p>Dans cet article, je pr\u00e9sente diff\u00e9rentes raisons pour lesquelles Go est actuellement peu utilis\u00e9 pour le ML et les moyens par lesquels il pourrait progressivement gagner du terrain dans ce domaine \u00e0 l&#8217;avenir.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Principaux d\u00e9fis li\u00e9s \u00e0 l&#8217;utilisation de Go pour le machine learning<\/strong><\/h2>\n\n\n\n<p>Go est un langage de programmation puissant et efficace, suffisamment rapide et performant pour les calculs intensifs et gourmands en CPU que les solutions d&#8217;intelligence artificielle requi\u00e8rent. Il est plus rapide que Python et la simplicit\u00e9 d&#8217;utilisation, l&#8217;efficacit\u00e9 et la simultan\u00e9it\u00e9 qu&#8217;il offre font d\u00e9faut \u00e0 d&#8217;autres langages utilis\u00e9s pour le ML dans certains cas.<\/p>\n\n\n\n<p>Malgr\u00e9 le potentiel de Go pour la cr\u00e9ation d&#8217;applications de ML robustes et \u00e9volutives, et ses performances sup\u00e9rieures \u00e0 celles de plusieurs langages concurrents, il reste une option sous-estim\u00e9e. La faible adoption de Go dans le domaine du ML peut \u00eatre attribu\u00e9e \u00e0 plusieurs d\u00e9fis de taille qu&#8217;il n&#8217;a pas r\u00e9solus, au contraire d&#8217;autres langages de programmation plus anciens. Ces d\u00e9fis sont principalement le manque de biblioth\u00e8ques de haut niveau, l&#8217;absence de liaisons natives pour CUDA et des capacit\u00e9s de visualisation de donn\u00e9es et de statistiques moins d\u00e9velopp\u00e9es.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Manque de biblioth\u00e8ques de haut niveau<\/strong><\/h3>\n\n\n\n<p>Go \u00e9tant un langage relativement r\u00e9cent, il compte moins d&#8217;outils et de biblioth\u00e8ques que d&#8217;autres langages existant depuis des d\u00e9cennies, qui disposent d&#8217;\u00e9cosyst\u00e8mes et de biblioth\u00e8ques bien \u00e9tablis et de qualit\u00e9 pour les t\u00e2ches de ML.<\/p>\n\n\n\n<p>Les d\u00e9veloppeurs qui souhaitent utiliser Go pour le ML doivent donc passer plus de temps \u00e0 cr\u00e9er des solutions personnalis\u00e9es ou \u00e0 int\u00e9grer des biblioth\u00e8ques et des frameworks existants qui n&#8217;ont pas \u00e9t\u00e9 con\u00e7us sp\u00e9cifiquement pour Go.<\/p>\n\n\n\n<p>Des am\u00e9liorations significatives ont \u00e9t\u00e9 apport\u00e9es aux biblioth\u00e8ques Go au fil des ans, notamment avec <a href=\"https:\/\/github.com\/sjwhitworth\/golearn\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">GoLearn<\/a>, qui offre des capacit\u00e9s d&#8217;ajustement et de pr\u00e9diction similaires \u00e0 <a href=\"https:\/\/scikit-learn.org\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">scikit-learn<\/a>, ainsi que des fonctions utilitaires de fractionnement des tests et de validation crois\u00e9e, <a href=\"https:\/\/github.com\/surenderthakran\/gomind\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">GoMind<\/a> qui fournit des capacit\u00e9s de r\u00e9seau neuronal, et <a href=\"https:\/\/github.com\/gorgonia\/gorgonia\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Gorgonia<\/a>, une biblioth\u00e8que de calcul de graphes similaire \u00e0 <a href=\"https:\/\/www.tensorflow.org\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">TensorFlow<\/a> avec des capacit\u00e9s de mise \u00e0 l&#8217;\u00e9chelle.<\/p>\n\n\n\n<p>Dans l&#8217;ensemble, m\u00eame ces biblioth\u00e8ques n&#8217;ont pas l&#8217;ampleur des biblioth\u00e8ques Python, qui ont b\u00e9n\u00e9fici\u00e9 de d\u00e9cennies de d\u00e9veloppement, et Go a encore des lacunes significatives pour certaines t\u00e2ches comme le traitement du langage naturel (NLP), notamment par rapport \u00e0 <a href=\"https:\/\/spacy.io\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">spaCy<\/a> et <a href=\"https:\/\/www.nltk.org\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">NLTK<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Absence de liaisons natives pour CUDA<\/strong><\/h3>\n\n\n\n<p><a href=\"https:\/\/developer.nvidia.com\/cuda-toolkit\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Compute Unified Device Architecture<\/a> (CUDA) est une plateforme de calcul parall\u00e8le et un mod\u00e8le de programmation d\u00e9velopp\u00e9 par NVIDIA pour programmer les unit\u00e9s de traitement graphique (GPU). CUDA permet aux d\u00e9veloppeurs d&#8217;utiliser les capacit\u00e9s de calcul haute performance des GPU NVIDIA pour acc\u00e9l\u00e9rer de nombreux types d&#8217;applications, parmi lesquelles le ML, le calcul scientifique et le traitement d&#8217;images et de vid\u00e9os, pour n&#8217;en citer que quelques-unes.<\/p>\n\n\n\n<p>Le principal avantage de CUDA est qu&#8217;il vous permet d&#8217;utiliser le parall\u00e9lisme massif des GPU pour acc\u00e9l\u00e9rer les calculs qui peuvent \u00eatre parall\u00e9lis\u00e9s. Malheureusement, Go n&#8217;a pas de liaisons natives avec CUDA, contrairement \u00e0 Python.<\/p>\n\n\n\n<p>Pour utiliser CUDA dans du code Go, il faut importer et utiliser des fonctions C qui cr\u00e9ent des liaisons pour CUDA. Le code C est int\u00e9gr\u00e9 dans Go avec la <a href=\"https:\/\/pkg.go.dev\/cmd\/cgo\" target=\"_blank\" rel=\"noreferrer noopener\">commande cgo<\/a>, qui permet la cr\u00e9ation de paquets Go appellant du code C. Cependant, le recours au code C et \u00e0 cgo n\u00e9cessite une bonne ma\u00eetrise du langage C pour un codage et un d\u00e9bogage efficaces. Cela peut engendrer une surcharge de travail et un besoin en ressources importants et exposer \u00e0 des failles sp\u00e9cifiques au langage C tels que des vuln\u00e9rabilit\u00e9s de s\u00e9curit\u00e9 et des probl\u00e8mes de s\u00e9curit\u00e9 de la m\u00e9moire.<\/p>\n\n\n\n<p>Il existe \u00e9galement des paquets de code tiers, telles que <a href=\"https:\/\/github.com\/unixpickle\/cuda\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">cuda<\/a>, qui contiennent des fonctions utilitaires pour obtenir des liaisons pour CUDA.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Contraintes relatives \u00e0 l&#8217;exp\u00e9rimentation<\/strong><\/h3>\n\n\n\n<p>Intrins\u00e8quement, Go n&#8217;est pas le meilleur langage pour l&#8217;exp\u00e9rimentation. Comme il s&#8217;agit d&#8217;un langage compil\u00e9, le code Go est transform\u00e9 en code machine qui peut \u00eatre ex\u00e9cut\u00e9 directement par le processeur plut\u00f4t que d&#8217;\u00eatre interpr\u00e9t\u00e9 par un environnement d&#8217;ex\u00e9cution au moment de l&#8217;ex\u00e9cution. Cette fonctionnalit\u00e9 contribue \u00e0 la vitesse et \u00e0 l&#8217;efficacit\u00e9 de Go, mais il n&#8217;est pas possible d&#8217;\u00e9crire et d&#8217;ex\u00e9cuter du code Go sans le compiler au pr\u00e9alable. Il est donc plus difficile de tester diff\u00e9rentes id\u00e9es et approches d&#8217;un probl\u00e8me en Go qu&#8217;avec des langages interpr\u00e9t\u00e9s comme Python et R (cependant, <a href=\"https:\/\/blog.cloudflare.com\/using-go-as-a-scripting-language-in-linux\/\" target=\"_blank\" rel=\"noreferrer noopener\">Go peut \u00eatre utilis\u00e9 comme langage de script<\/a>).<\/p>\n\n\n\n<p>Go n&#8217;est pas aussi dissoci\u00e9 du mat\u00e9riel sous-jacent que certains autres langages. Cela peut \u00eatre un plus pour les t\u00e2ches qui requierent une optimisation de bas niveau ou un contr\u00f4le \u00e9troit des ressources mat\u00e9rielles, mais cela peut \u00e9galement rendre le code Go plus verbeux et n\u00e9cessiter plus d&#8217;installation et de configuration initiales par rapport \u00e0 des langages comme Python, qui sont plus flexibles et faciles \u00e0 utiliser dans certains cas. Compte tenu de l&#8217;ampleur des biblioth\u00e8ques et des frameworks comme scikit-learn et TensorFlow, et de la disponibilit\u00e9 de solutions plus simples pour des t\u00e2ches comme l&#8217;extraction de fonctionnalit\u00e9s, le clustering et la r\u00e9duction de la dimensionnalit\u00e9 dans un seul paquet, Go n&#8217;est pas le choix id\u00e9al pour l&#8217;exp\u00e9rimentation en ML.<\/p>\n\n\n\n<p>Les langages compil\u00e9s comme Go sont g\u00e9n\u00e9ralement un meilleur choix pour les t\u00e2ches hautes performances, telles que la programmation c\u00f4t\u00e9 serveur et l&#8217;optimisation des applications en temps r\u00e9el.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Capacit\u00e9s insuffisantes en math\u00e9matiques et statistiques<\/strong><\/h3>\n\n\n\n<p>Comme dit pr\u00e9c\u00e9demment, Go n&#8217;a pas l&#8217;ampleur de poids lourds tels que Python. Il a moins de biblioth\u00e8ques sp\u00e9cialis\u00e9es et de paquets ax\u00e9s sur les statistiques, le calcul et la manipulation de matrices, qui constituent une grande partie du d\u00e9veloppement de l&#8217;IA et du ML.<\/p>\n\n\n\n<p>Cela n&#8217;est pas forc\u00e9ment un inconv\u00e9nient majeur pour tout le monde, certains d\u00e9veloppeurs appr\u00e9ciant d&#8217;avoir la possibilit\u00e9 d&#8217;\u00e9crire activement le code de leur algorithme de ML ou de leur logique math\u00e9matique. Mais ici encore, si on le compare \u00e0 Python, Go ne propose pas la m\u00eame simplicit\u00e9 d&#8217;utilisation pour les manipulations de donn\u00e9es, analyses et algorithmes pr\u00e9dictifs.<\/p>\n\n\n\n<p>Python, R et Julia sont aussi bien implant\u00e9s dans la communaut\u00e9 du ML parce qu&#8217;ils \u00e9taient l\u00e0 avant Go et continuent d&#8217;\u00e9voluer pour mieux r\u00e9pondre aux besoins du ML et de l&#8217;IA, ce qui rend encore plus difficile pour Go de se positionner comme une alternative viable.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Biblioth\u00e8ques de haut niveau en Go<\/strong><\/h2>\n\n\n\n<p>Go dispose de quelques biblioth\u00e8ques de haut niveau comme <a href=\"https:\/\/www.gonum.org\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Gonum<\/a>, <a href=\"https:\/\/github.com\/gorgonia\/gorgonia\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Gorgonia<\/a> et <a href=\"https:\/\/github.com\/sjwhitworth\/golearn\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">GoLearn<\/a>, qui fournissent notamment des outils pour construire et entra\u00eener des r\u00e9seaux neuronaux et effectuer des calculs num\u00e9riques,<br>mais elles ne sont pas aussi riches en fonctionnalit\u00e9s que les biblioth\u00e8ques Python. Les biblioth\u00e8ques et frameworks Python commeTensorFlow, scikit-learn et spaCy, sont populaires dans le domaine du ML et ont \u00e9t\u00e9 cr\u00e9\u00e9s et d\u00e9velopp\u00e9s de mani\u00e8re it\u00e9rative pour r\u00e9pondre aux besoins des d\u00e9veloppeurs sp\u00e9cialis\u00e9s en ML. Ils offrent des fonctionnalit\u00e9s pour le traitement du langage naturel, l&#8217;int\u00e9gration d&#8217;images, les r\u00e9seaux neuronaux et d&#8217;autres sujets d&#8217;int\u00e9r\u00eat pour le ML.<\/p>\n\n\n\n<p>Vous pourriez obtenir ces m\u00eames capacit\u00e9s en Go et elles seraient potentiellement plus puissantes et efficaces gr\u00e2ce aux avantages caract\u00e9ristiques de Go par rapport \u00e0 d&#8217;autres langages que sont la mise en r\u00e9seau, la simultan\u00e9it\u00e9 et le traitement des donn\u00e9es.<\/p>\n\n\n\n<p>Mais pour le moment, la cr\u00e9ation de ces capacit\u00e9s ne serait utile qu&#8217;\u00e0 la communaut\u00e9 des d\u00e9veloppeurs Go, car il n&#8217;est pas aussi largement utilis\u00e9 par la communaut\u00e9 du ML que Python ou R. Il souffre \u00e9galement d&#8217;un manque de contributeurs par rapport aux langages plus anciens et d&#8217;un \u00e9cosyst\u00e8me de biblioth\u00e8ques et d&#8217;outils plus petit, ce qui rend la recherche de solutions pr\u00e9existantes \u00e0 certains probl\u00e8mes plus difficile.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>La situation est-elle en train de changer&nbsp;?<\/strong><\/h2>\n\n\n\n<p>Go gagne en popularit\u00e9 et sa communaut\u00e9 d&#8217;utilisateurs est en croissance. Selon <a href=\"https:\/\/stackshare.io\/golang\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">StackShare<\/a>, le nombre d&#8217;entreprises utilisant Go actuellement s&#8217;\u00e9l\u00e8ve \u00e0 2&nbsp;751, parmi lesquelles Uber, Twitch, Shopify et Slack. De plus, selon l&#8217;enqu\u00eate <a href=\"https:\/\/insights.stackoverflow.com\/survey\/2021\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">2021 Stack Overflow Developer Survey<\/a>, Go est utilis\u00e9 par environ 9,55&nbsp;% des d\u00e9veloppeurs, ce qui en fait le 14e langage de programmation le plus populaire.<\/p>\n\n\n\n<p>C&#8217;est une bonne nouvelle pour la communaut\u00e9 Go, mais cela ne se ressent pas vraiment dans le domaine du ML. Go est principalement connu pour ses capacit\u00e9s en mati\u00e8re de cr\u00e9ation de serveurs \u00e9volutifs et de grands syst\u00e8mes logiciels, d&#8217;\u00e9criture de programmes concurrents et de construction de microservices rapides et l\u00e9gers. M\u00eame le site officiel de Go ne mentionne pas le ML parmi ses principaux cas d&#8217;utilisation.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1566\" height=\"941\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/05\/image-62.png\" alt=\"\" class=\"wp-image-358127\"\/><\/figure>\n\n\n\n<p>Cela t\u00e9moigne de la tendance actuelle de Go \u00e0 s&#8217;\u00e9loigner du domaine du ML et de son manque d&#8217;ancrage au sein de la communaut\u00e9 du ML.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Futurs cas d&#8217;utilisation<\/strong><\/h3>\n\n\n\n<p>Jusqu&#8217;\u00e0 pr\u00e9sent, il n&#8217;y a pas d&#8217;exemples d&#8217;utilisation de Go pour le ML marquants. Cependant, si on se focalise sur ses points forts, on peut voir les choses autrement et envisager d&#8217;utiliser Go non pas pour d\u00e9velopper des mod\u00e8les de ML mais pour construire des serveurs de mod\u00e8les de ML qui permettent \u00e0 d&#8217;autres applications ou syst\u00e8mes d&#8217;acc\u00e9der aux mod\u00e8les et de les utiliser.<\/p>\n\n\n\n<p>Cela peut \u00eatre utile pour d\u00e9ployer des mod\u00e8les de ML en production ou pour cr\u00e9er des API de ML accessibles \u00e0 d&#8217;autres d\u00e9veloppeurs ou utilisateurs. Go peut \u00eatre utilis\u00e9 pour cr\u00e9er des applications de ML telles que des moteurs de recommandations aliment\u00e9s par ML ou des outils de traitement du langage naturel. Il peut \u00e9galement servir \u00e0 construire l&#8217;infrastructure backend ou les interfaces utilisateur pour ces types d&#8217;applications.<\/p>\n\n\n\n<p>Un bon moyen pour la communaut\u00e9 Go d&#8217;ouvrir la base de code \u00e0 plus d&#8217;exp\u00e9rimentation dans le domaine du ML pourrait \u00eatre de cr\u00e9er plus de bo\u00eetes \u00e0 outils et de frameworks permettant d&#8217;am\u00e9liorer la vitesse et l&#8217;efficacit\u00e9 du ML c\u00f4t\u00e9 serveur.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Conclusion<\/strong><\/h2>\n\n\n\n<p>Malgr\u00e9 ses qualit\u00e9s, Go a encore des d\u00e9fis \u00e0 relever afin d&#8217;\u00eatre plus largement utilis\u00e9 pour le machine learning, mais les diff\u00e9rents axes d&#8217;am\u00e9liorations et cas d&#8217;utilisation que j&#8217;ai expos\u00e9s dans cet articles permettent de penser qu&#8217;il pourra faire une perc\u00e9e dans ce domaine dans les ann\u00e9es \u00e0 venir.<\/p>\n","protected":false},"author":813,"featured_media":370953,"comment_status":"closed","ping_status":"closed","template":"","categories":[2347],"tags":[],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/go\/369833"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/go"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/types\/go"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/users\/813"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/comments?post=369833"}],"version-history":[{"count":10,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/go\/369833\/revisions"}],"predecessor-version":[{"id":370979,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/go\/369833\/revisions\/370979"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media\/370953"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media?parent=369833"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/categories?post=369833"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/tags?post=369833"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/cross-post-tag?post=369833"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}