Julia: Faire le point sur ses performances

19

Je suis tombé sur une question de 2012 qui avait une très bonne discussion sur Julia comme alternative à R / Python pour différents types de travaux statistiques.

Voici la question originale de 2012 sur la promesse de Julia

Malheureusement, Julia était très nouvelle à l'époque et les boîtes à outils nécessaires pour le travail statistique étaient quelque peu primitives. Les bugs étaient en cours de résolution. Les distributions étaient difficiles à installer. Etc.

Quelqu'un a fait un commentaire très pertinent sur cette question:

Cela dit, il faudra 5 ans avant de pouvoir répondre à cette question avec le recul. À l'heure actuelle, Julia n'a pas les aspects critiques suivants d'un système de programmation statistique qui pourrait rivaliser avec R pour les utilisateurs quotidiens:

C'était en 2012. Maintenant que nous sommes en 2015 et que trois ans se sont écoulés, je me demandais comment les gens pensaient que Julia avait fait?

Existe-t-il une expérience plus riche avec la langue elle-même et l'écosystème Julia global? J'aimerais bien savoir.

Plus précisément:

  1. Conseilleriez-vous à de nouveaux utilisateurs d'outils statistiques d'apprendre Julia sur R?
  2. Dans quel type d'utilisation de Statistics conseilleriez-vous à quelqu'un d'utiliser Julia?
  3. Si R est lent à une certaine tâche, est-il judicieux de passer à Julia ou Python?

Remarque: Publié pour la première fois le 14 juin 2015.

curious_cat
la source
2
J'ai jeté un œil récemment et je n'ai pas été impressionné par la profondeur de leurs progiciels de statistiques. Si je ne me trompe pas, Python est également interprété, il aura donc des limitations similaires à celles de R. L'attraction de Julia, si j'ai bien compris, était la promesse d'une vitesse supplémentaire et d'un meilleur accès à la parallélisation.
DWin
3
Je pense que le problème avec Julia est que SciPy continue de s'améliorer, et maintenant nous avons également Torch dans le mix. Personne ne veut apprendre un troisième (ou quatrième ou cinquième) langage informatique scientifique, même s'il est rapide et possède des fonctionnalités de surcharge de fonctions intéressantes.
shadowtalker
4
Julia est une langue bien conçue et agréable, mais à mon avis, elle est arrivée trop peu trop tard. Le train de calcul matriciel à nœud unique est depuis longtemps dépassé. Julia est essentiellement Fortran 2.0, avec plusieurs fonctionnalités intéressantes, mais à mesure que nous passons de plus en plus au cloud computing, elle a très peu à offrir sur des langages fonctionnels comme Scala, Clojure et même Python dans une certaine mesure. Si Julia avait été dans son état actuel il y a 10 ans, cela aurait pu être un énorme succès.
Marc Claesen
2
Python et Rcpp se développent vraiment de manière dynamique, R gagne de plus en plus d'attention (R Consortium, Microsoft etc.) donc il semble difficile pour Julia de rattraper son retard ...
Tim
1
Je n'ai pas vu l'analyse de rentabilisation pour Julia, et je ne le vois toujours pas. Cela semblait être une tentative redondante de la part des programmeurs de reconstruire quelque chose qui existe déjà.
Aksakal

Réponses:

15

Je suis passé à Julia, et voici mes raisons pragmatiques:

  • Il colle très bien le code. J'ai beaucoup de code hérité dans MATLAB et MATLAB.jl a pris 5 minutes à installer, fonctionne parfaitement et possède une syntaxe succincte qui rend naturel l'utilisation des fonctions MATLAB. Julia a également la même chose pour R, Python, C, Fortran et de nombreux autres langages.
  • Julia fait très bien le parallélisme. Je ne parle pas seulement du parallélisme à plusieurs processeurs (mémoire partagée), mais aussi du parallélisme à plusieurs nœuds. J'ai accès à des nœuds HPC qui ne sont pas utilisés trop souvent car chacun est assez lent, j'ai donc décidé d'essayer Julia. J'ai ajouté @parallel à une boucle, je l'ai démarré en lui indiquant le fichier machine et je l'ai utilisé en utilisant les 5 nœuds. Essayez de le faire dans R / Python. Dans MPI, cela prendrait un certain temps pour le faire fonctionner (et c'est avec savoir ce que vous faites), pas quelques minutes la première fois que vous l'essayez!
  • La vectorisation de Julia est rapide (dans de nombreux cas plus rapide que tout autre langage de niveau supérieur), et son code dévectorisé est presque rapide en C. Donc, si vous écrivez des algorithmes scientifiques, vous l'écrivez d'abord dans MATLAB, puis vous le réécrivez en C. Julia vous permet de l'écrire une fois, puis de lui donner des codes de compilation et 5 minutes plus tard, c'est rapide. Même si vous ne le faites pas, cela signifie que vous écrivez simplement le code de la manière la plus naturelle et qu'il fonctionnera bien. En R / Python, vous devez parfois réfléchir assez fort pour obtenir une bonne version vectorisée (qui peut être difficile à comprendre plus tard).
  • La métaprogrammation est super. Pensez au nombre de fois où vous vous êtes dit "J'aimerais pouvoir ______ dans la langue". Écrivez-lui une macro. Habituellement, quelqu'un l'a déjà fait.
  • Tout est sur Github. Le code source. Les packages. Super facile à lire le code, signaler les problèmes aux développeurs, leur parler pour savoir comment faire quelque chose, ou même améliorer les packages vous-même.
  • Ils ont de très bonnes bibliothèques. Pour les statistiques, vous seriez probablement intéressé par leurs packages d'optimisation (JuliaOpt est un groupe qui les gère). Les packages numériques sont déjà de premier ordre et ne font que s'améliorer.

Cela dit, j'aime toujours beaucoup Rstudio, mais le nouveau Juno sur Atom est vraiment sympa. Quand il n'est plus en développement lourd et est stable, je peux le voir comme meilleur que Rstudio en raison de la facilité des plugins (exemple: il a un bon plugin pour s'adapter aux écrans hidpi). Je pense donc que Julia est une bonne langue à apprendre maintenant. Jusqu'à présent, cela a bien fonctionné pour moi. YMMV.

Chris Rackauckas
la source
Cela vous dérange-t-il de mettre à jour cette réponse depuis plus de 3 ans?
Bayequentist
1
J'ai donné une réponse mise à jour ici: scicomp.stackexchange.com/questions/10922/… . Peut-être que cela devrait être copié.
Chris Rackauckas
11

Je pense que "apprendre X sur Y" n'est pas la bonne façon de formuler la question. En fait, vous pouvez apprendre (au moins les bases de) les deux et décider du bon outil en fonction de la tâche concrète à accomplir. Et comme Julia a hérité la plupart de sa syntaxe et de ses concepts d'autres langages, il devrait être très facile de le saisir (ainsi que Python, bien que je ne sois pas sûr que l'on puisse en dire autant de R).

Quelle langue est donc la mieux adaptée à quelle tâche? Sur la base de mon expérience avec ces outils, je les évaluerais comme suit:

  • Pour la recherche statistique pure qui peut être effectuée avec REPL et quelques scripts, R semble être le choix parfait. Il est spécialement conçu pour les statistiques, possède la plus longue histoire d'outils et probablement le plus grand ensemble de bibliothèques statistiques.

  • Si vous souhaitez intégrer des statistiques (ou, par exemple, l'apprentissage automatique) dans le système de production , Python semble être une bien meilleure alternative: en tant que langage de programmation à usage général, il possède une pile Web impressionnante, des liaisons à la plupart des API et des bibliothèques littéralement pour tout, de la mise au rebut du Web à la création de jeux 3D .

  • Les algorithmes hautes performances sont beaucoup plus faciles à écrire dans Julia . Si vous avez seulement besoin d'utiliser ou de combiner des bibliothèques existantes comme SciKit Learn ou e1071 soutenu par C / C ++, vous serez bien avec Python et R. Mais quand il s'agit de backend rapide lui-même, Julia devient un véritable gain de temps: c'est beaucoup plus rapide que Python ou R et ne nécessite pas de connaissances supplémentaires en C / C ++. Par exemple, Mocha.jl réimplémente dans le cadre pur d'apprentissage en profondeur Julia Caffe , écrit à l'origine en C ++ avec un wrapper en Python.

  • N'oubliez pas non plus que certaines bibliothèques ne sont disponibles que dans certaines langues. Par exemple, seul Python a un écosystème mature pour la vision par ordinateur, certains algorithmes de correspondance de forme et de transformation sont implémentés uniquement dans Julia et j'ai entendu parler de packages uniques pour les statistiques en médecine dans R.

ffriend
la source
Je dirais que la plupart des gens devraient essayer d'en choisir un et de rester principalement avec ça --- pour moi au moins, en utilisant plusieurs langues, je
finis
1
Un problème paradoxal avec l'écriture d'algorithmes hautes performances est que même s'ils peuvent plus facilement écrire dans un langage de niveau supérieur comme R ou Julia, au moment où vous écrivez réellement des algorithmes hautes performances, vous aimez probablement utiliser quelque chose comme C ++ de toute façon. Ou peut-être que c'est juste moi.
Cliff AB
3

(b) Quel type de cas d'utilisation de Statistics conseilleriez-vous à quelqu'un d'utiliser Julia dans

(c) Si R est lent dans une certaine tâche, est-il judicieux de passer à Julia ou Python?

Problèmes de grande dimension et de calcul intensif.

  • Multiprocessing. Les capacités parallèles à nœud unique de Julia ( @spawnat) sont beaucoup plus pratiques que celles en python. Par exemple, en python, vous ne pouvez pas utiliser un pool de multiprocesseurs de réduction de carte sur le REPL et chaque fonction que vous souhaitez paralléliser nécessite beaucoup de passe-partout.

  • Informatique en grappe. Le ClusterManagerspackage de Julia vous permet d'utiliser un cluster de calcul presque comme vous le feriez pour une seule machine avec plusieurs cœurs. [J'ai joué pour que cela ressemble plus à un script dans ClusterUtils ]

  • La memoire partagée. Les SharedArrayobjets de Julia sont supérieurs aux objets de mémoire partagée équivalents en python.

  • La vitesse. Mon implémentation Julia est (une seule machine) plus rapide que mon implémentation R à la génération de nombres aléatoires et à l'algèbre linéaire (prend en charge BLAS multithread).
  • Interopérabilité. Le PyCallmodule de Julia vous donne accès à l'écosystème python sans wrappers - par exemple, je l'utilise pour pylab. Il y a quelque chose de similaire pour R, mais je ne l'ai pas essayé. Il y en a aussi ccallpour les bibliothèques C / Fortran.
  • GPU. Les wrappers CUDA de Julia sont beaucoup plus développés que ceux en python (les R étaient presque inexistants lorsque j'ai vérifié). Je soupçonne que cela continuera d'être le cas en raison de la facilité avec laquelle il est possible d'appeler des bibliothèques externes en Julia qu'en python.

  • Écosystème. Le Pkgmodule utilise github comme backend. Je crois que cela aura un grand impact sur la maintenabilité à long terme des modules Julia car cela rendra beaucoup plus simple d'offrir des correctifs ou aux propriétaires de transmettre la responsabilité.

  • σ

L'écriture de code rapide pour les gros problèmes dépendra de plus en plus du calcul parallèle. Python est intrinsèquement hostile en parallèle (GIL), et le multitraitement natif dans R est AFAIK inexistant. Julia ne vous oblige pas à descendre en C pour écrire du code performant, tout en conservant une grande partie de la sensation de python / R / Matlab.

Le principal inconvénient de Julia provenant de python / R est le manque de documentation en dehors des fonctionnalités de base. python est très mature, et ce que vous ne pouvez pas trouver dans les documents se trouve généralement sur stackoverflow. Le système de documentation de R est assez bon en comparaison.

(a) Conseilleriez-vous à de nouveaux utilisateurs d'outils statistiques d'apprendre Julia sur R?

Oui, si vous correspondez aux cas d'utilisation de la partie (b). Si votre cas d'utilisation implique beaucoup de travail hétérogène

conjectures
la source