Юлия: Подводя итоги, как дела

19

Я столкнулся с вопросом 2012 года, в котором было очень хорошее обсуждение Джулии как альтернативы R / Python для различных типов статистических работ.

Здесь лежит оригинальный вопрос 2012 года об обещании Юлии

К сожалению, тогда Юлия была очень новичком, а наборы инструментов, необходимые для статистической работы, были довольно примитивными. Ошибки были устранены. Распределения было трудно установить. И так далее.

У кого-то был очень удачный комментарий на этот вопрос:

Тем не менее, пройдет 5 лет, прежде чем на этот вопрос можно будет ответить задним числом. На данный момент у Юлии отсутствуют следующие критические аспекты системы статистического программирования, которые могли бы конкурировать с R для повседневных пользователей:

Это было в 2012 году. Теперь, когда прошел 2015 год и прошло три года, мне было интересно, как люди думают, что Юлия сделала?

Есть ли более богатый опыт работы с самим языком и всей экосистемой Юлии? Я хотел бы знать.

В частности:

  1. Посоветуете ли вы новым пользователям статистических инструментов учить Джулию через R?
  2. В каких случаях использования статистики вы бы посоветовали кому-то использовать Джулию?
  3. Если R в какой-то задаче работает медленно, имеет ли смысл переключиться на Julia или Python?

Примечание: впервые опубликовано 14 июня 2015 г.

curious_cat
источник
2
Я недавно посмотрел и не был впечатлен глубиной их пакетов статистики. Если я не ошибаюсь, Python также интерпретируется, поэтому будет иметь те же ограничения, что и R. Привлечение Джулии, как я понял, было обещанием дополнительной скорости и лучшего доступа к распараллеливанию.
DWin
3
Я думаю, что проблема с Джулией в том, что SciPy продолжает улучшаться, и теперь у нас также есть Torch в миксе. Никто не хочет изучать третий (или четвертый или пятый) язык научных вычислений, даже если он быстрый и имеет классные функции перегрузки функций.
Shadowtalker
4
Юлия - хорошо продуманный, приятный язык, но, на мой взгляд, он пришел слишком поздно. Поезд вычисления матрицы с одним узлом давно прошел. Julia - это, по сути, Fortran 2.0, с несколькими приятными функциями, но по мере того, как мы все больше переходим к облачным вычислениям, у нее очень мало возможностей для функциональных языков, таких как Scala, Clojure и даже Python, в некоторой степени. Если бы Юлия была в своем нынешнем состоянии 10 лет назад, это могло бы иметь огромный успех.
Марк Клазен
2
Python и Rcpp действительно динамично развиваются, R привлекает все больше и больше внимания (R Consortium, Microsoft и т. Д.), Поэтому Джулии трудно наверстать упущенное ...
Тим
1
Я не видел бизнес-обоснование для Джулии, и до сих пор не вижу. Это казалось излишней попыткой программистов перестроить то, что уже существует.
Аксакал

Ответы:

15

Я перешел на Юлию, и вот мои прагматичные причины:

  • Это действительно хорошо склеивает код. У меня много устаревшего кода в MATLAB, и для установки MATLAB.jl понадобилось 5 минут, он отлично работает и имеет краткий синтаксис, который делает естественным использование функций MATLAB. У Джулии тоже самое для R, Python, C, Fortran и многих других языков.
  • Юлия действительно хорошо выполняет параллелизм. Я говорю не только о параллелизме нескольких процессоров (совместно используемой памяти), но и о параллельности нескольких узлов. У меня есть доступ к узлам HPC, которые используются не слишком часто, потому что каждый работает довольно медленно, поэтому я решил попробовать Джулию. Я добавил @parallel в цикл, запустил его, сообщив ему машинный файл, и использовал все 5 узлов. Попробуйте сделать это в R / Python. В MPI это займет некоторое время, чтобы заставить его работать (и это со знанием того, что вы делаете), а не несколько минут, когда вы впервые попробуете это!
  • Векторизация Джулии быстра (во многих случаях быстрее, чем любой другой язык более высокого уровня), а ее де-векторизованный код почти на C. Поэтому, если вы пишете научные алгоритмы, обычно вы сначала пишете это в MATLAB, а затем переписываете его на C. Julia позволяет вам написать это один раз, затем дать ему коды компилятора, а через 5 минут это быстро. Даже если вы этого не сделаете, это означает, что вы просто пишете код любым удобным для вас способом, и он будет работать хорошо. В R / Python вам иногда приходится задумываться, чтобы получить хорошую векторизованную версию (это может быть сложно понять позже).
  • Метапрограммирование великолепно. Подумайте, сколько раз вы были похожи на «Я хотел бы, чтобы я мог ______ на языке». Напишите макрос для этого. Обычно кто-то уже есть.
  • Все на Github. Исходный код Пакеты. Очень легко читать код, сообщать о проблемах разработчикам, общаться с ними, чтобы узнать, как что-то сделать, или даже улучшать пакеты самостоятельно.
  • У них есть действительно хорошие библиотеки. Для статистики вам, вероятно, будут интересны их пакеты оптимизации (JuliaOpt - группа, которая ими управляет). Числовые пакеты уже на высшем уровне и только улучшаются.

Тем не менее, я все еще очень люблю Rstudio, но новая Juno на Atom действительно хороша. Когда он больше не находится в тяжелой разработке и стабилен, я вижу его лучше, чем Rstudio, из-за простоты плагинов (пример: у него есть хороший плагин для адаптации к экранам hidpi). Поэтому я думаю, что Юлия сейчас хороший язык для изучения. До сих пор это хорошо сработало. YMMV.

Крис Ракауцкас
источник
Вы не возражаете обновить этот ответ, так как прошло более 3 лет?
Bayequentist
1
Я дал обновленный ответ здесь: scicomp.stackexchange.com/questions/10922/… . Может быть, это должно быть скопировано.
Крис Ракауцкас
11

Я думаю, что «выучить X над Y» - неправильный способ сформулировать вопрос. На самом деле, вы можете изучить (по крайней мере, основы) обоих и выбрать правильный инструмент в зависимости от конкретной задачи. А поскольку Джулия унаследовала большую часть своего синтаксиса и концепций от других языков, понять ее будет действительно легко (как и Python, хотя я не уверен, что то же самое можно сказать и о R).

Так какой язык лучше подходит для какой задачи? Исходя из моего опыта работы с этими инструментами, я бы оценил их следующим образом:

  • Для чисто статистических исследований, которые можно выполнить с помощью REPL и нескольких сценариев, R кажется идеальным выбором. Он специально разработан для статистики, имеет самую длинную историю инструментов и, вероятно, самый большой набор статистических библиотек.

  • Если вы хотите интегрировать статистику (или, например, машинное обучение) в производственную систему , Python кажется гораздо лучшей альтернативой: как язык программирования общего назначения, он имеет потрясающий веб-стек, привязки к большинству API и библиотек буквально для всего, от утилизации Интернета до создания 3D-игр .

  • Высокопроизводительные алгоритмы гораздо проще написать на Юлии . Если вам нужно только использовать или комбинировать существующие библиотеки, такие как SciKit Learn или e1071, поддерживаемые C / C ++, вам будет хорошо с Python и R. Но когда речь идет о самом быстром бэкенде, Julia экономит время: гораздо быстрее, чем Python или R и не требует дополнительных знаний C / C ++. В качестве примера, Mocha.jl переопределяет в чистом Julia фреймворк глубокого обучения Caffe , изначально написанный на C ++ с оберткой на Python.

  • Также не забывайте, что некоторые библиотеки доступны только на некоторых языках. Например, только Python имеет развитую экосистему для компьютерного зрения, некоторые алгоритмы согласования формы и преобразования реализованы только в Юлии, и я слышал о некоторых уникальных пакетах для статистики в медицине в R.

оборота друга
источник
Я бы сказал, что большинство людей должны попытаться выбрать один и остаться в основном с этим - по крайней мере для меня, используя несколько языков, я заканчиваю тем, что смешиваю их, теряя таким образом много времени ...
kjetil b halvorsen
1
Парадоксальная проблема с написанием высокопроизводительных алгоритмов заключается в том, что, хотя они и могут легче писать на языке более высокого уровня, например R или Julia, к тому времени, когда вы на самом деле пишете высокопроизводительные алгоритмы, вам, вероятно, все равно придется использовать что-то вроде C ++. Или, может быть, это только я.
Клифф AB
3

(б) В каких случаях использования статистики вы бы посоветовали кому-то использовать Юлию в

(c) Если R медленно выполняет определенную задачу, имеет ли смысл переключиться на Julia или Python?

Большие габаритные и вычислительные задачи.

  • Многопроцессорные. Параллельные возможности Julia для одного узла ( @spawnat) намного удобнее, чем в python. Например, в python вы не можете использовать пул многопроцессорной обработки карты REPL, и каждая функция, которую вы хотите распараллелить, требует большого количества шаблонов.

  • Кластерные вычисления. ClusterManagersПакет Julia позволяет использовать вычислительный кластер почти так же, как если бы вы работали на одной машине с несколькими ядрами. [Я играл, чтобы это больше походило на скрипты в ClusterUtils ]

  • Общая память. SharedArrayОбъекты Джулии превосходят эквивалентные объекты совместно используемой памяти в python.

  • Скорость. Моя реализация Julia (на одной машине) быстрее, чем моя реализация R при генерации случайных чисел и в линейной алгебре (поддерживает многопотоковую BLAS).
  • Interoperability. PyCallМодуль Джулии дает вам доступ к экосистеме python без упаковщиков - например, я использую это для pylab. Есть что-то похожее для R, но я не пробовал. Существует также ccallдля библиотек C / Fortran.
  • GPU. Оболочки CUDA Джулии гораздо более развиты, чем в Python (Rs почти не существовало, когда я проверял). Я подозреваю, что так будет и дальше, потому что гораздо проще вызывать внешние библиотеки в Julia, чем в python.

  • Экосистем. В Pkgиспользует модуль GitHub в качестве движка. Я полагаю, что это окажет большое влияние на долговременную ремонтопригодность модулей Julia, так как это сделает гораздо проще предлагать исправления или владельцам передавать ответственность.

  • σ

Написание быстрого кода для больших проблем будет все больше зависеть от параллельных вычислений. Python по своей природе параллелен недружественному (GIL), а нативная многопроцессорная обработка в R не существует AFAIK. Джулия не требует, чтобы вы заходили на C, чтобы написать исполняющий код, сохраняя при этом большую часть ощущений от python / R / Matlab.

Основным недостатком Julia от python / R является отсутствие документации за пределами основной функциональности. Python очень зрелый, и то, что вы не можете найти в документации, обычно находится в стеке. Система документации R довольно хороша в сравнении.

(а) Вы бы посоветовали новым пользователям статистических инструментов изучать Юлию через R?

Да, если вы подходите варианты использования в части (б). Если ваш вариант использования включает в себя много разнородных работ

гипотезы
источник