Julia: Fazendo um balanço de como está indo

19

Me deparei com uma pergunta de 2012 que teve uma discussão muito boa sobre Julia como uma alternativa ao R / Python para vários tipos de trabalho estatístico.

Aqui está a pergunta original de 2012 sobre a promessa de Julia

Infelizmente, Julia era muito nova na época e os kits de ferramentas necessários para o trabalho estatístico eram um tanto primitivos. Os bugs estavam sendo resolvidos. As distribuições eram difíceis de instalar. Et cetera.

Alguém fez um comentário muito apropriado sobre essa pergunta:

Dito isto, serão necessários cinco anos para que esta pergunta possa ser respondida em retrospectiva. No momento, Julia não possui os seguintes aspectos críticos de um sistema de programação estatística que poderia competir com o R para usuários do dia-a-dia:

Isso foi em 2012. Agora que já passaram 2015 e três anos, eu me perguntava como as pessoas pensam que Julia se saiu.

Existe um corpo mais rico de experiência com a própria linguagem e o ecossistema geral da Julia? Eu adoraria saber.

Especificamente:

  1. Você aconselharia novos usuários de ferramentas estatísticas a aprender Julia sobre R?
  2. Em que tipo de casos de uso de Estatísticas você aconselharia alguém a usar Julia?
  3. Se R é lento em uma determinada tarefa, faz sentido mudar para Julia ou Python?

Nota: publicado pela primeira vez em 14 de junho de 2015.

curious_cat
fonte
2
Dei uma olhada recentemente e fiquei impressionado com a profundidade de seus pacotes de estatísticas. Se não me engano, Python também é interpretado, por isso terá limitações semelhantes às R. A atração de Julia como eu entendi foi a promessa de velocidade extra e melhor acesso à paralelização.
Dwin
3
Acho que o problema com Julia é que o SciPy está cada vez melhor, e agora também temos o Torch na mistura. Ninguém quer aprender uma terceira (ou quarta ou quinta) linguagem de computação científica, mesmo que seja rápida e tenha recursos interessantes de sobrecarga de funções.
shadowtalker
4
Julia é uma linguagem bem projetada e agradável, mas, na minha opinião, chegou muito tarde demais. O trem de computação da matriz de nó único já passou. Julia é essencialmente o Fortran 2.0, com vários recursos interessantes, mas, à medida que passamos cada vez mais para a computação em nuvem, ela tem muito pouco a oferecer sobre linguagens funcionais como Scala, Clojure e até Python, até certo ponto. Se Julia estivesse em seu estado atual há 10 anos, poderia ter sido um enorme sucesso.
Marc Claesen
2
Python e Rcpp estão realmente se desenvolvendo dinamicamente, R ganha cada vez mais atenção (R ​​Consortium, Microsoft etc.), por isso parece ser difícil para Julia recuperar o atraso ...
Tim
1
Não vi o caso comercial de Julia, e ainda não vejo. Pareceu uma tentativa redundante dos programadores de reconstruir algo que já existe.
Aksakal

Respostas:

15

Mudei para Julia, e aqui estão minhas razões pragmáticas:

  • Cola muito bem o código. Eu tenho muito código legado no MATLAB, e o MATLAB.jl levou 5 minutos para instalar, funciona perfeitamente e tem uma sintaxe sucinta que torna natural o uso das funções do MATLAB. Julia também tem o mesmo para R, Python, C, Fortran e muitas outras linguagens.
  • Julia faz paralelismo muito bem. Não estou falando apenas do paralelismo de múltiplos processadores (memória compartilhada), mas também do paralelismo de vários nós. Eu tenho acesso a nós de HPC que não são usados ​​com muita frequência porque cada um é muito lento, então decidi dar uma chance a Julia. Adicionei @parallel a um loop, iniciei com o arquivo da máquina e usei todos os 5 nós. Tente fazer isso no R / Python. No MPI, levaria um tempo para fazê-lo funcionar (e isso é saber o que você está fazendo), e não alguns minutos na primeira vez que você o experimenta!
  • A vetorização de Julia é rápida (em muitos casos, mais rápida que qualquer outra linguagem de nível superior), e seu código desvectorizado é quase C-rápido. Portanto, se você escreve algoritmos científicos, geralmente você primeiro escreve no MATLAB e depois reescreve no C. Julia permite escrever uma vez, depois fornece códigos de compilador e, 5 minutos depois, é rápido. Mesmo se não o fizer, significa que você acabou de escrever o código da maneira que parecer natural e ele funcionará bem. No R / Python, às vezes você precisa pensar bastante para obter uma boa versão vetorizada (que pode ser difícil de entender posteriormente).
  • A metaprogramação é ótima. Pense no número de vezes que você esteve como "Gostaria de poder ______ no idioma". Escreva uma macro para ela. Geralmente alguém já tem.
  • Tudo está no Github. O código fonte Os pacotes. Super fácil de ler o código, relatar problemas aos desenvolvedores, conversar com eles para descobrir como fazer algo ou até mesmo melhorar os pacotes.
  • Eles têm algumas boas bibliotecas. Para estatísticas, você provavelmente estaria interessado em seus pacotes de otimização (JuliaOpt é um grupo que os gerencia). Os pacotes numéricos já são de primeira qualidade e estão melhorando apenas.

Dito isto, eu ainda amo muito o Rstudio, mas o novo Juno on Atom é muito bom. Quando ele não está mais em desenvolvimento pesado e é estável, posso vê-lo melhor que o Rstudio devido à facilidade dos plugins (exemplo: ele possui um bom plugin para adaptação às telas hidpi). Então, acho que Julia é uma boa linguagem para aprender agora. Até agora, funcionou bem para mim. YMMV.

Chris Rackauckas
fonte
Você se importa em atualizar esta resposta já que se passaram mais de três anos?
Bayequentist
1
Dei uma resposta atualizada aqui: scicomp.stackexchange.com/questions/10922/… . Talvez isso deva ser copiado.
Chris Rackauckas 15/06
11

Eu acho que "aprender X sobre Y" não é o caminho certo para formular a pergunta. De fato, você pode aprender (pelo menos o básico de) ambos e decidir a ferramenta certa, dependendo da tarefa concreta em questão. E como Julia herdou a maior parte de sua sintaxe e conceitos de outras linguagens, será muito fácil compreendê-lo (assim como o Python, embora não tenha certeza de que o mesmo possa ser dito sobre R).

Então, qual idioma é mais adequado para qual tarefa? Com base na minha experiência com essas ferramentas, eu as classificaria da seguinte maneira:

  • Para uma pesquisa estatística pura que pode ser feita com o REPL e alguns scripts, R parece ser a escolha perfeita. Ele foi projetado especificamente para estatística, possui o histórico mais longo de ferramentas e provavelmente o maior conjunto de bibliotecas estatísticas.

  • Se você deseja integrar estatísticas (ou, por exemplo, aprendizado de máquina) ao sistema de produção , o Python parece ser uma alternativa muito melhor: como uma linguagem de programação de uso geral, ele possui uma incrível pilha da web, ligações à maioria das APIs e bibliotecas literalmente para tudo, desde a demolição da web até a criação de jogos em 3D .

  • Algoritmos de alto desempenho são muito mais fáceis de escrever em Julia . Se você só precisar usar ou combinar bibliotecas existentes como SciKit Learn ou e1071 suportado por C / C ++, ficará bem com Python e R. Mas quando se trata de back-end rápido, Julia se torna mais econômica: Python ou R e não requer conhecimento adicional de C / C ++. Como exemplo, o Mocha.jl é reimplementado no framework de aprendizado profundo Julia , Caffe , originalmente escrito em C ++ com um wrapper em Python.

  • Além disso, não esqueça que algumas bibliotecas estão disponíveis apenas em alguns idiomas. Por exemplo, apenas o Python possui um ecossistema maduro para a visão computacional, alguns algoritmos de correspondência de formas e de transformação são implementados apenas em Julia e ouvi falar de alguns pacotes exclusivos para estatísticas em medicina na R.

ffriend
fonte
Eu diria que a maioria das pessoas deve tentar escolher um e permanecer com ele - pelo menos para mim, usando vários idiomas, acabo misturando-os, perdendo muito tempo dessa maneira ...
kjetil b halvorsen
1
Um problema paradoxal ao escrever algoritmos de alto desempenho é que, embora possam ser mais fáceis de escrever em linguagem de alto nível como R ou Julia, quando você está escrevendo algoritmos de alto desempenho, provavelmente gosta de usar algo como C ++. Ou talvez seja apenas eu.
Cliff AB
3

(b) Em que tipo de casos de uso de Estatísticas você aconselharia alguém a usar Julia em

(c) Se R é lento em uma determinada tarefa, faz sentido mudar para Julia ou Python?

Problemas intensivos de alta dimensão e computação.

  • Multiprocessamento. Os recursos paralelos de nó único de Julia ( @spawnat) são muito mais convenientes do que aqueles em python. Por exemplo, em python, você não pode usar um mapa para reduzir o pool de multiprocessamento no REPL e todas as funções que você deseja paralelizar exigem muito clichê.

  • Computação em cluster. O ClusterManagerspacote de Julia permite que você use um cluster de computação quase como faria em uma única máquina com vários núcleos. [Eu estou brincando de fazer isso parecer mais com scripts no ClusterUtils ]

  • Memoria compartilhada. Os SharedArrayobjetos de Julia são superiores aos objetos de memória compartilhada equivalentes em python.

  • Rapidez. Minha implementação Julia é (máquina única) mais rápida que minha implementação R na geração de números aleatórios e na álgebra linear (suporta BLAS multithread).
  • Interoperabilidade. O PyCallmódulo de Julia fornece acesso ao ecossistema python sem wrappers - por exemplo, eu uso isso para pylab. Há algo semelhante para R, mas eu não tentei. Também existe ccallpara bibliotecas C / Fortran.
  • GPU. Os wrappers CUDA de Julia são muito mais desenvolvidos do que aqueles em python (os Rs eram quase inexistentes quando eu verifiquei). Eu suspeito que isso continuará a ser o caso por causa de quão mais fácil é chamar bibliotecas externas em Julia do que em python.

  • Ecossistema. O Pkgmódulo usa o github como back-end. Acredito que isso terá um grande impacto na manutenção de longo prazo dos módulos Julia, pois torna muito mais simples oferecer correções ou que os proprietários passem a responsabilidade.

  • σ

Escrever código rápido para grandes problemas dependerá cada vez mais da computação paralela. Python é inerentemente paralelo hostil (GIL), e o multiprocessamento nativo em R é AFAIK inexistente. Julia não exige que você desça para C para escrever código de desempenho, mantendo grande parte da sensação de python / R / Matlab.

A principal desvantagem para Julia proveniente de python / R é a falta de documentação fora da funcionalidade principal. python é muito maduro, e o que você não consegue encontrar nos documentos geralmente está no stackoverflow. O sistema de documentação de R é muito bom em comparação.

(a) Você aconselharia novos usuários de ferramentas estatísticas a aprender Julia sobre R?

Sim, se você ajustar os casos de uso na parte (b). Se o seu caso de uso envolver muito trabalho heterogêneo

conjecturas
fonte