Julia: haciendo un balance de cómo le ha ido

19

Encontré una pregunta de 2012 que tenía una muy buena discusión sobre Julia como una alternativa a R / Python para varios tipos de trabajo estadístico.

Aquí se encuentra la pregunta original de 2012 sobre la promesa de Julia

Desafortunadamente, Julia era muy nueva en ese entonces y los juegos de herramientas necesarios para el trabajo estadístico eran algo primitivos. Se estaban solucionando errores. Las distribuciones fueron difíciles de instalar. Etcétera.

Alguien hizo un comentario muy acertado sobre esa pregunta:

Dicho esto, pasarán 5 años antes de que esta pregunta pueda ser respondida en retrospectiva. En este momento, Julia carece de los siguientes aspectos críticos de un sistema de programación estadística que podría competir con R para los usuarios cotidianos:

Eso fue en 2012. Ahora que es 2015 y han pasado tres años, me preguntaba cómo la gente piensa que Julia lo ha hecho.

¿Existe una experiencia más rica con el lenguaje en sí y el ecosistema general de Julia? Amaría saber.

Específicamente:

  1. ¿Recomendaría a los nuevos usuarios de herramientas estadísticas aprender Julia sobre R?
  2. ¿En qué tipo de casos de uso de Estadísticas le recomendarías a alguien que use a Julia?
  3. Si R es lento en una tarea determinada, ¿tiene sentido cambiar a Julia o Python?

Nota: Publicado por primera vez el 14 de junio de 2015.

curious_cat
fuente
2
Eché un vistazo recientemente y no me impresionó la profundidad de sus paquetes de estadísticas. Si no me equivoco, Python también se interpreta, por lo que tendrá limitaciones similares a R. La atracción de Julia, como lo entendí, era la promesa de una velocidad extra y un mejor acceso a la paralelización.
DWin
3
Creo que el problema con Julia es que SciPy sigue mejorando, y ahora también tenemos a Torch en la mezcla. Nadie quiere aprender un tercer (o cuarto o quinto) lenguaje informático científico, incluso si es rápido y tiene funciones de sobrecarga de funciones geniales.
shadowtalker
44
Julia es un lenguaje agradable y bien diseñado, pero en mi opinión llegó demasiado poco y demasiado tarde. El tren de cálculo de matriz de un solo nodo ha pasado hace mucho tiempo. Julia es esencialmente Fortran 2.0, con varias características agradables, pero a medida que hacemos una transición cada vez más hacia la computación en la nube, tiene muy poco que ofrecer sobre lenguajes funcionales como Scala, Clojure e incluso Python hasta cierto punto. Si Julia hubiera estado en su estado actual hace 10 años, podría haber sido un gran éxito.
Marc Claesen
2
Python y Rcpp se están desarrollando de forma dinámica, R gana cada vez más atención (R Consortium, Microsoft, etc.), por lo que parece difícil para Julia ponerse al día ...
Tim
1
No vi el caso de negocios para Julia, y todavía no. Parecía un intento redundante de los programadores para reconstruir algo que ya existe.
Aksakal

Respuestas:

15

Me he cambiado a Julia, y aquí están mis razones pragmáticas:

  • Hace muy bien el código de pegamento. Tengo mucho código heredado en MATLAB, y MATLAB.jl tardó 5 minutos en instalarse, funciona perfectamente y tiene una sintaxis sucinta que hace que sea natural usar las funciones de MATLAB. Julia también tiene lo mismo para R, Python, C, Fortran y muchos otros idiomas.
  • Julia hace el paralelismo realmente bien. No solo estoy hablando del paralelismo de múltiples procesadores (memoria compartida), sino también del paralelismo de múltiples nodos. Tengo acceso a un nodo de HPC que no se usa con demasiada frecuencia porque cada uno es bastante lento, así que decidí probar con Julia. Agregué @parallel a un bucle, lo comencé diciéndole el archivo de la máquina y bam usó los 5 nodos. Intenta hacer eso en R / Python. En MPI, eso llevaría un tiempo hacer que funcione (y eso es saber lo que estás haciendo), ¡no solo unos minutos la primera vez que lo intentas!
  • La vectorización de Julia es rápida (en muchos casos más rápida que cualquier otro lenguaje de nivel superior), y su código desvectorizado es casi C rápido. Entonces, si escribe algoritmos científicos, generalmente primero lo escribe en MATLAB y luego lo vuelve a escribir en C. Julia le permite escribirlo una vez, luego darle códigos de compilación y 5 minutos después es rápido. Incluso si no lo hace, esto significa que simplemente escribe el código de la manera que se sienta natural y funcionará bien. En R / Python, a veces tienes que pensar mucho para obtener una buena versión vectorizada (que puede ser difícil de entender más adelante).
  • La metaprogramación es genial. Piensa en la cantidad de veces que has estado como "Me gustaría poder ______ en el idioma". Escribe una macro para ello. Por lo general, alguien ya lo tiene.
  • Todo está en Github. El código fuente Los paquetes. Súper fácil de leer el código, informar problemas a los desarrolladores, hablar con ellos para saber cómo hacer algo o incluso mejorar los paquetes usted mismo.
  • Tienen algunas bibliotecas realmente buenas. Para las estadísticas, probablemente le interesarían sus paquetes de optimización (JuliaOpt es un grupo que los administra). Los paquetes numéricos ya son de primera categoría y solo mejoran.

Dicho esto, todavía amo a Rstudio, pero el nuevo Juno en Atom es realmente agradable. Cuando ya no está en desarrollo pesado y es estable, puedo verlo mejor que Rstudio debido a la facilidad de los complementos (ejemplo: tiene un buen complemento para adaptarse a las pantallas hidpi). Así que creo que Julia es un buen idioma para aprender ahora. Me ha funcionado bien hasta ahora. YMMV.

Chris Rackauckas
fuente
¿Te importaría actualizar esta respuesta ya que han pasado más de 3 años?
Bayequentista
1
Di una respuesta actualizada aquí: scicomp.stackexchange.com/questions/10922/… . Tal vez eso debería ser copiado.
Chris Rackauckas
11

Creo que "aprender X sobre Y" no es la forma correcta de formular la pregunta. De hecho, puede aprender (al menos lo básico) sobre ambos y decidir sobre la herramienta adecuada dependiendo de la tarea concreta que tenga entre manos. Y dado que Julia heredó la mayor parte de su sintaxis y conceptos de otros lenguajes, debería ser realmente fácil de entender (al igual que Python, aunque no estoy seguro de que se pueda decir lo mismo sobre R).

Entonces, ¿qué idioma es más adecuado para cada tarea? Según mi experiencia con estas herramientas, las clasificaría de la siguiente manera:

  • Para la investigación estadística pura que se puede hacer con REPL y un par de scripts, R parece ser la opción perfecta. Está específicamente diseñado para estadísticas, tiene el historial más largo de herramientas y probablemente el mayor conjunto de bibliotecas estadísticas.

  • Si desea integrar estadísticas (o, por ejemplo, aprendizaje automático) en el sistema de producción , Python parece una alternativa mucho mejor: como lenguaje de programación de propósito general, tiene una increíble pila web, enlaces a la mayoría de las API y bibliotecas literariamente para todo, desde desechar la web hasta crear juegos en 3D .

  • Los algoritmos de alto rendimiento son mucho más fáciles de escribir en Julia . Si solo necesita usar o combinar bibliotecas existentes como SciKit Learn o e1071 respaldado por C / C ++, estará bien con Python y R. Pero cuando se trata de un backend rápido, Julia se convierte en un verdadero ahorro de tiempo: es mucho más rápido que Python o R y no requiere conocimientos adicionales de C / C ++. Como ejemplo, Mocha.jl se reimplementa en el marco de aprendizaje profundo Julia Caffe , originalmente escrito en C ++ con un contenedor en Python.

  • Además, no olvide que algunas bibliotecas están disponibles solo en algunos idiomas. Por ejemplo, solo Python tiene un ecosistema maduro para la visión por computadora, algunos algoritmos de adaptación de formas y transformación se implementan solo en Julia y he oído hablar de algunos paquetes únicos para estadísticas en medicina en R.

3 revoluciones
fuente
Diría que la mayoría de la gente debería tratar de elegir uno y quedarse con eso en su mayoría --- al menos para mí, usando múltiples idiomas, termino mezclándolos, perdiendo mucho tiempo de esa manera ...
kjetil b halvorsen
1
Un problema paradójico con la escritura de algoritmos de alto rendimiento es que, a pesar de que pueden ser más fáciles de escribir en un lenguaje de nivel superior como R o Julia, para cuando realmente esté escribiendo algoritmos de alto rendimiento, probablemente le guste usar algo como C ++ de todos modos. O tal vez solo soy yo.
Cliff AB
3

(b) ¿En qué tipo de casos de uso de Estadísticas le recomendaría a alguien que use a Julia en

(c) Si R es lento en una determinada tarea, ¿tiene sentido cambiar a Julia o Python?

Problemas dimensionales y computacionales intensivos.

  • Multiprocesamiento Las capacidades paralelas de nodo único de Julia ( @spawnat) son mucho más convenientes que las de Python. Por ejemplo, en Python no puede usar un mapa para reducir el grupo de multiprocesamiento en el REPL y cada función que desea paralelizar requiere mucha repetitiva.

  • Cluster de computación. El ClusterManagerspaquete de Julia le permite usar un clúster de cómputo casi como lo haría con una sola máquina con varios núcleos. [He estado jugando para hacer que esto se sienta más como un script en ClusterUtils ]

  • Memoria compartida. Los SharedArrayobjetos de Julia son superiores a los objetos de memoria compartida equivalentes en python.

  • Velocidad. Mi implementación de Julia es (máquina única) más rápida que mi implementación de R en la generación de números aleatorios y en álgebra lineal (admite BLAS multiproceso).
  • Interoperabilidad. El PyCallmódulo de Julia le da acceso al ecosistema de Python sin envoltorios, por ejemplo, lo uso para pylab. Hay algo similar para R, pero no lo he probado. También existe ccallpara las bibliotecas C / Fortran.
  • GPU Las envolturas CUDA de Julia están mucho más desarrolladas que las de Python (las R eran casi inexistentes cuando las verifiqué). Sospecho que este seguirá siendo el caso debido a lo fácil que es llamar bibliotecas externas en Julia que en Python.

  • Ecosistema. El Pkgmódulo usa github como backend. Creo que esto tendrá un gran impacto en la mantenibilidad a largo plazo de los módulos de Julia, ya que hace que sea mucho más sencillo ofrecer parches o que los propietarios pasen la responsabilidad.

  • σ

Escribir código rápido para problemas grandes dependerá cada vez más de la computación paralela. Python es inherentemente paralelo hostil (GIL), y el multiprocesamiento nativo en R es inexistente AFAIK. Julia no requiere que bajes a C para escribir código de rendimiento, mientras retiene gran parte de la sensación de python / R / Matlab.

La desventaja principal de que Julia proviene de python / R es la falta de documentación fuera de la funcionalidad principal. Python es muy maduro, y lo que no puedes encontrar en los documentos generalmente está en stackoverflow. El sistema de documentación de R es bastante bueno en comparación.

(a) ¿Recomendaría a los nuevos usuarios de herramientas estadísticas aprender Julia sobre R?

Sí, si se ajusta a los casos de uso en la parte (b). Si su caso de uso implica mucho trabajo heterogéneo

conjeturas
fuente