Julia: fare il punto su come è andata


19

Mi sono imbattuto in una domanda del 2012 che ha avuto un'ottima discussione su Julia come alternativa a R / Python per vari tipi di lavoro statistico.

Ecco la domanda originale del 2012 sulla promessa di Julia

Purtroppo Julia era molto nuova all'epoca e i kit di strumenti necessari per il lavoro statistico erano piuttosto primitivi. Gli insetti venivano risolti. Le distribuzioni erano difficili da installare. Eccetera.

Qualcuno ha avuto un commento molto appropriato su questa domanda:

Detto questo, ci vorranno 5 anni prima che a questa domanda si possa eventualmente rispondere a posteriori. A partire da ora, a Julia mancano i seguenti aspetti critici di un sistema di programmazione statistica che potrebbe competere con R per gli utenti quotidiani:

Era il 2012. Ora che sono passati 2015 e tre anni, mi chiedevo come la gente pensasse che Julia avesse fatto?

Esiste un corpus più ricco di esperienza con la lingua stessa e l'ecosistema Julia generale? Mi piacerebbe saperlo

In particolare:

  1. Consiglieresti ai nuovi utenti di strumenti statistici di imparare Julia su R?
  2. In che tipo di casi d'uso di Statistica consiglieresti a qualcuno di usare Julia?
  3. Se R è lento in un determinato compito, ha senso passare a Julia o Python?

Nota: pubblicato per la prima volta il 14 giugno 2015.


2
Ho dato un'occhiata di recente e non sono rimasto impressionato dalla profondità dei loro pacchetti statistici. Se non sbaglio, anche Python viene interpretato, quindi avrà limitazioni simili a R. L'attrazione di Julia, come ho capito, era la promessa di una maggiore velocità e un migliore accesso alla parallelizzazione.
DWin,

3
Penso che il problema con Julia sia che SciPy continui a migliorare, e ora abbiamo anche Torch nel mix. Nessuno vuole imparare un terzo (o quarto o quinto) linguaggio di calcolo scientifico, anche se è veloce e ha interessanti funzioni di sovraccarico delle funzioni.
Shadowtalker

4
Julia è un bel linguaggio ben progettato, ma secondo me è arrivato troppo poco, troppo tardi. Il treno di calcolo della matrice a nodo singolo è passato da tempo. Julia è essenzialmente Fortran 2.0, con diverse funzioni interessanti, ma mentre passiamo sempre più al cloud computing ha molto poco da offrire su linguaggi funzionali come Scala, Clojure e persino Python in una certa misura. Se Julia fosse stata nel suo stato attuale 10 anni fa, avrebbe potuto avere un enorme successo.
Marc Claesen,

2
Python e Rcpp si stanno davvero sviluppando in modo dinamico, R ottiene sempre più attenzione (R Consortium, Microsoft ecc.), Quindi sembra difficile per Julia recuperare ...
Tim

1
Non ho visto il business case per Julia, e ancora non lo vedo. Sembrava un tentativo ridondante da parte dei programmatori di ricostruire qualcosa che già esiste.
Aksakal,

Risposte:


15

Sono passato a Julia e qui ci sono le mie ragioni pragmatiche:

  • Incolla davvero bene il codice. Ho un sacco di codice legacy in MATLAB e MATLAB.jl ha impiegato 5 minuti per l'installazione, funziona perfettamente e ha una sintassi sintetica che rende naturale l'uso delle funzioni MATLAB. Julia ha anche lo stesso per R, Python, C, Fortran e molte altre lingue.
  • Julia fa davvero bene il parallelismo. Non sto parlando solo di parallelismo con più processori (memoria condivisa), ma anche di parallelismo multi-nodo. Ho accesso a nodi HPC che non vengono utilizzati troppo spesso perché ognuno è piuttosto lento, quindi ho deciso di provare Julia. Ho aggiunto @parallel a un ciclo, l'ho avviato raccontandogli il file della macchina e bam ha usato tutti e 5 i nodi. Prova a farlo in R / Python. In MPI ci vorrebbe un po 'per farlo funzionare (e questo è con sapere cosa stai facendo), non pochi minuti la prima volta che lo provi!
  • La vettorializzazione di Julia è veloce (in molti casi più veloce di qualsiasi altro linguaggio di livello superiore) e il suo codice devettorizzato è quasi C veloce. Quindi, se scrivi algoritmi scientifici, di solito lo scrivi prima in MATLAB e poi lo riscrivi in ​​C. Julia ti consente di scriverlo una volta, quindi assegnagli i codici del compilatore e 5 minuti dopo è veloce. Anche se non lo fai, questo significa che devi solo scrivere il codice in qualsiasi modo sembri naturale e funzionerà bene. In R / Python, a volte devi pensare piuttosto duramente per ottenere una buona versione vettoriale (che può essere difficile da capire in seguito).
  • La metaprogrammazione è fantastica. Pensa al numero di volte in cui sei stato "Vorrei poter ______ nella lingua". Scrivi una macro per questo. Di solito qualcuno lo ha già fatto.
  • Tutto è su Github. Il codice sorgente I pacchi. Super facile da leggere il codice, segnalare problemi agli sviluppatori, parlare con loro per scoprire come fare qualcosa o persino migliorare i pacchetti da soli.
  • Hanno delle librerie davvero buone. Per le statistiche, probabilmente ti interesserebbero i loro pacchetti di ottimizzazione (JuliaOpt è un gruppo che li gestisce). I pacchetti numerici sono già di prim'ordine e stanno solo migliorando.

Detto questo, adoro ancora Rstudio, ma il nuovo Juno su Atom è davvero bello. Quando non è più in forte sviluppo ed è stabile, posso vederlo meglio di Rstudio a causa della facilità dei plugin (esempio: ha un buon plugin per adattarsi agli schermi hidpi). Quindi penso che Julia sia una buona lingua da imparare ora. Finora ha funzionato bene per me. YMMV.


Ti dispiace aggiornare questa risposta da oltre 3 anni?
Bayequentist,

1
Ho dato una risposta aggiornata qui: scicomp.stackexchange.com/questions/10922/… . Forse questo dovrebbe essere copiato.
Chris Rackauckas,

11

Penso che "impara X su Y" non sia il modo giusto per formulare la domanda. In effetti, puoi imparare (almeno le basi di) entrambi e decidere lo strumento giusto in base al compito concreto a portata di mano. E dal momento che Julia ha ereditato la maggior parte della sua sintassi e concetti da altre lingue, sarebbe davvero facile comprenderlo (così come Python, anche se non sono sicuro che si possa dire lo stesso di R).

Quindi quale lingua è più adatta per quale compito? In base alla mia esperienza con questi strumenti, li classificherei come segue:

  • Per la pura ricerca statistica che può essere fatta con REPL e un paio di script, R sembra essere la scelta perfetta. È specificamente progettato per le statistiche, ha la più lunga storia di strumenti e probabilmente il più ampio set di librerie statistiche.

  • Se desideri integrare le statistiche (o, ad esempio, l'apprendimento automatico) nel sistema di produzione , Python sembra un'alternativa molto migliore: come linguaggio di programmazione per tutti gli usi ha un fantastico stack web, si lega alla maggior parte delle API e delle librerie letteralmente per tutto, dalla demolizione del web alla creazione di giochi 3D .

  • Gli algoritmi ad alte prestazioni sono molto più facili da scrivere in Julia . Se hai solo bisogno di usare o combinare librerie esistenti come SciKit Learn o e1071 supportate da C / C ++, starai bene con Python e R. Ma quando si tratta di backend veloce, Julia diventa un vero risparmio di tempo: è molto più veloce di Python o R e non richiede ulteriori conoscenze di C / C ++. A titolo di esempio, Mocha.jl reimplementa in puro Julia profondo apprendimento quadro Caffe , originariamente scritto in C ++ con un involucro in Python.

  • Inoltre, non dimenticare che alcune librerie sono disponibili solo in alcune lingue. Ad esempio, solo Python ha un ecosistema maturo per la visione artificiale , alcuni algoritmi di adattamento delle forme e trasnformazioni sono implementati solo in Julia e ho sentito parlare di alcuni pacchetti unici per le statistiche in medicina in R.


Direi che la maggior parte delle persone dovrebbe provare a sceglierne una e rimanere per lo più con quella --- almeno per me, usando più lingue
finisco

1
Un problema paradossale con la scrittura di algoritmi ad alte prestazioni è che anche se possono essere più facili da scrivere in un linguaggio di livello superiore come R o Julia, quando in realtà stai scrivendo algoritmi ad alte prestazioni, probabilmente ti piace usare qualcosa come C ++. O forse sono solo io.
Cliff AB,

3

(b) In che tipo di casi d'uso di Statistica consiglieresti a qualcuno di usare Julia

(c) Se R è lento in un determinato compito, ha senso passare a Julia o Python?

Problemi ad alta intensità dimensionale e di calcolo.

  • Multiprocessing. Le funzionalità parallele a nodo singolo di Julia ( @spawnat) sono molto più convenienti di quelle in Python. Ad esempio in Python non è possibile utilizzare una mappa per ridurre il pool di elaborazione multipla sul REPL e ogni funzione che si desidera parallelizzare richiede molta caldaia.

  • Cluster computing. Il ClusterManagerspacchetto di Julia consente di utilizzare un cluster di calcolo quasi come se fosse una singola macchina con più core. [Ho provato a renderlo più simile allo scripting in ClusterUtils ]

  • Memoria condivisa. Gli SharedArrayoggetti di Julia sono superiori agli equivalenti oggetti di memoria condivisa in Python.

  • Velocità. La mia implementazione di Julia è (single-machine) più veloce della mia implementazione R alla generazione casuale di numeri e all'algebra lineare (supporta BLAS multithread).
  • Interoperabilità. Il PyCallmodulo di Julia ti dà accesso all'ecosistema Python senza wrapper - ad esempio, lo uso per pylab. C'è qualcosa di simile per R, ma non l'ho provato. C'è anche ccallper le librerie C / Fortran.
  • GPU. I wrapper CUDA di Julia sono molto più sviluppati di quelli in Python (Rs erano quasi inesistenti quando ho controllato). Sospetto che questo continuerà ad essere il caso a causa di quanto sia più facile chiamare librerie esterne in Julia che in Python.

  • Ecosistema. Il Pkgmodulo utilizza github come backend. Credo che questo avrà un grande impatto sulla manutenibilità dei moduli Julia in quanto rende molto più semplice offrire patch o far passare le responsabilità ai proprietari.

  • σ

La scrittura di codice rapido per problemi di grandi dimensioni dipenderà sempre più dall'elaborazione parallela. Python è intrinsecamente parallelo ostile (GIL) e il multiprocessing nativo in R è AFAIK inesistente. Julia non richiede di passare a C per scrivere codice performante, pur mantenendo gran parte della sensazione di Python / R / Matlab.

Il principale svantaggio di Julia derivante da Python / R è la mancanza di documentazione al di fuori della funzionalità di base. python è molto maturo e ciò che non puoi trovare nei documenti è di solito su StackOverflow. Il sistema di documentazione di R è piuttosto buono in confronto.

(a) Consiglieresti ai nuovi utenti di strumenti statistici di imparare Julia su R?

Sì, se si adattano i casi d'uso nella parte (b). Se il tuo caso d'uso comporta un sacco di lavoro eterogeneo

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.