Julia: Podsumowując, jak się miewa

19

Natknąłem się na pytanie z 2012 roku, które miało bardzo dobrą dyskusję na temat Julii jako alternatywy dla R / Python dla różnych rodzajów prac statystycznych.

Oto oryginalne Pytanie z 2012 roku dotyczące obietnicy Julii

Niestety Julia była wtedy bardzo nowa, a zestawy narzędzi potrzebne do prac statystycznych były nieco prymitywne. Błędy były usuwane. Dystrybucje były trudne do zainstalowania. I tak dalej.

Ktoś bardzo trafnie skomentował to pytanie:

To powiedziawszy, minie 5 lat, zanim będzie można odpowiedzieć na to pytanie z perspektywy czasu. Na chwilę obecną Julii brakuje następujących krytycznych aspektów systemu programowania statystycznego, który mógłby konkurować z R dla codziennych użytkowników:

To było w 2012 roku. Teraz, gdy minął rok 2015 i minęły trzy lata, zastanawiałem się, jak ludzie myślą, że Julia sobie poradziła?

Czy jest bogatsze doświadczenie z samym językiem i całym ekosystemem Julii? Chciałbym wiedzieć.

Konkretnie:

  1. Czy doradziłbyś nowym użytkownikom narzędzi statystycznych nauczenie się Julii nad R.?
  2. W jakich przypadkach użycia statystyk doradziłbyś komuś użycie Julii?
  3. Jeśli R przy danym zadaniu jest powolny, czy sensowne jest przejście na Julię lub Python?

Uwaga: po raz pierwszy opublikowano 14 czerwca 2015 r.

ciekawostka
źródło
2
Ostatnio rzuciłem okiem i nie byłem pod wrażeniem głębokości ich pakietów statystyk. Jeśli się nie mylę, Python również jest interpretowany, więc będzie miał podobne ograniczenia jak R. Przyciągnięcie Julii, jak zrozumiałem, było obietnicą dodatkowej prędkości i lepszego dostępu do równoległości.
DW
3
Myślę, że problem z Julią polega na tym, że SciPy jest coraz lepszy, a teraz mamy też Torch w miksie. Nikt nie chce uczyć się trzeciego (lub czwartego lub piątego) naukowego języka komputerowego, nawet jeśli jest szybki i ma fajne funkcje przeciążania funkcji.
shadowtalker
4
Julia jest dobrze zaprojektowanym, przyjemnym językiem, ale moim zdaniem za późno. Jednomodowy ciąg obliczeniowy macierzy już dawno minął. Julia to w zasadzie Fortran 2.0 z kilkoma fajnymi funkcjami, ale w miarę przechodzenia na przetwarzanie w chmurze ma niewiele do zaoferowania w stosunku do funkcjonalnych języków, takich jak Scala, Clojure, a nawet Python. Gdyby Julia była w obecnym stanie 10 lat temu, byłby to ogromny sukces.
Marc Claesen
2
Python i Rcpp rozwijają się bardzo dynamicznie, R zyskuje coraz więcej uwagi (R Konsorcjum, Microsoft itp.), Więc Julia ma trudności z nadrobieniem ...
Tim
1
Nie widziałem uzasadnienia biznesowego dla Julii i nadal nie. Wydawało się, że jest to zbędna próba programistów odbudowania czegoś, co już istnieje.
Aksakal

Odpowiedzi:

15

Zmieniłem się na Julię i oto moje pragmatyczne powody:

  • Naprawdę dobrze koduje klej. Mam dużo starszego kodu w MATLAB, a instalacja MATLAB.jl zajęła 5 minut, działa idealnie i ma zwięzłą składnię, dzięki czemu korzystanie z funkcji MATLAB jest naturalne. Julia ma to samo dla języków R, Python, C, Fortran i wielu innych języków.
  • Julia robi paralelizm naprawdę dobrze. Nie mówię tylko o równoległości wielu procesorów (pamięci współużytkowanej), ale także o równoległości wielu węzłów. Mam dostęp do węzłów HPC, które nie są używane zbyt często, ponieważ każdy jest dość wolny, więc postanowiłem dać Julii szansę. Dodałem @parallel do pętli, zacząłem od poinformowania go o pliku maszynowym i bam użył wszystkich 5 węzłów. Spróbuj to zrobić w R / Python. W MPI zajęłoby to trochę czasu, aby to zadziałało (i to ze świadomością tego, co robisz), a nie kilka minut przy pierwszej próbie!
  • Wektoryzacja Julii jest szybka (w wielu przypadkach szybsza niż jakikolwiek inny język wyższego poziomu), a jej wypaczony kod jest prawie C szybki. Więc jeśli piszesz algorytmy naukowe, zwykle najpierw piszesz go w MATLAB, a następnie ponownie piszesz w C. Julia pozwala napisać go raz, a następnie podać kody kompilatora, a 5 minut później jest szybki. Nawet jeśli tego nie zrobisz, oznacza to, że po prostu piszesz kod w dowolny sposób, który wydaje się naturalny i działa poprawnie. W R / Python czasami trzeba bardzo ciężko myśleć o dobrej wersji wektorowej (co może być trudne do zrozumienia później).
  • Metaprogramowanie jest świetne. Pomyśl o tym, ile razy mówiłeś „Chciałbym móc ______ w języku”. Napisz dla niego makro. Zwykle ktoś już ma.
  • Wszystko jest na Githubie. Kod źródłowy. Paczki Super łatwy do odczytania kod, zgłaszania problemów programistom, rozmowy z nimi, aby dowiedzieć się, jak coś zrobić, a nawet samodzielnie poprawić pakiety.
  • Mają naprawdę dobre biblioteki. W przypadku statystyk prawdopodobnie zainteresują Cię ich pakiety optymalizacyjne (JuliaOpt to grupa, która nimi zarządza). Pakiety numeryczne są już na najwyższym poziomie i tylko się poprawiają.

To powiedziawszy, nadal bardzo kocham Rstudio, ale nowy Juno na Atom jest naprawdę fajny. Kiedy nie jest już intensywnie rozwijany i jest stabilny, widzę go lepiej niż Rstudio ze względu na łatwość wtyczek (przykład: ma dobrą wtyczkę do przystosowywania się do ekranów hidpi). Myślę więc, że Julia jest teraz dobrym językiem do nauki. Jak dotąd dobrze mi to wyszło. YMMV.

Chris Rackauckas
źródło
Czy masz coś przeciwko aktualizacji tej odpowiedzi, odkąd minęły ponad 3 lata?
Bayequentist,
1
Udzieliłem zaktualizowanej odpowiedzi tutaj: scicomp.stackexchange.com/questions/10922/… . Może to powinno zostać skopiowane.
Chris Rackauckas,
11

Myślę, że „naucz się X przez Y” nie jest właściwym sposobem na sformułowanie pytania. W rzeczywistości możesz nauczyć się (przynajmniej podstawy) obu i wybrać właściwe narzędzie w zależności od konkretnego zadania. A ponieważ Julia odziedziczyła większość składni i pojęć z innych języków, zrozumienie tego powinno być naprawdę łatwe (podobnie jak w przypadku Pythona, chociaż nie jestem pewien, czy to samo można powiedzieć o R).

Który język lepiej nadaje się do jakiego zadania? Na podstawie mojego doświadczenia z tymi narzędziami oceniłbym je w następujący sposób:

  • Dla czysto statystycznych badań, które można przeprowadzić za pomocą REPL i kilku skryptów, R wydaje się idealnym wyborem. Jest specjalnie zaprojektowany dla statystyk, ma najdłuższą historię narzędzi i prawdopodobnie największy zestaw bibliotek statystycznych.

  • Jeśli chcesz zintegrować statystyki (lub na przykład uczenie maszynowe) z systemem produkcyjnym , Python wydaje się znacznie lepszą alternatywą: jako język programowania ogólnego przeznaczenia ma niesamowity stos internetowy, powiązania z większością interfejsów API i bibliotek dosłownie do wszystkiego, od złomowania Internetu po tworzenie gier 3D .

  • Wysoko wydajne algorytmy są znacznie łatwiejsze do napisania w Julii . Jeśli potrzebujesz tylko użyć lub połączyć istniejące biblioteki, takie jak SciKit Learn lub e1071 wspierane przez C / C ++, dobrze Ci będzie w Pythonie i R. Ale jeśli chodzi o sam szybki backend, Julia oszczędza czas: jest znacznie szybsza niż Python lub R i nie wymaga dodatkowej znajomości C / C ++. Jako przykład, Mocha.jl reimplementuje w czystym środowisku Julia do nauki głębokiego uczenia Caffe , pierwotnie napisanym w C ++ z opakowaniem w Pythonie.

  • Nie zapominaj również, że niektóre biblioteki są dostępne tylko w niektórych językach. Np. Tylko Python ma dojrzały ekosystem do wizji komputerowej, niektóre algorytmy dopasowywania kształtów i przekształcania są zaimplementowane tylko w Julii i słyszałem o kilku unikatowych pakietach do statystyki w medycynie w R.

przyjacielu
źródło
Powiedziałbym, że większość ludzi powinna próbować wybrać jeden i pozostać przy nim głównie - przynajmniej dla mnie, używając wielu języków, w końcu je mieszam, tracąc w ten sposób dużo czasu ...
kjetil b halvorsen
1
Paradoksalnym problemem związanym z pisaniem wysokowydajnych algorytmów jest to, że nawet jeśli mogą one łatwiej pisać w języku wyższego poziomu, takim jak R lub Julia, do czasu, gdy piszesz wysokowydajne algorytmy, prawdopodobnie mimo wszystko lubisz używać czegoś takiego jak C ++. A może to tylko ja.
Cliff AB
3

(b) W jakich przypadkach użycia statystyk doradziłbyś komuś użycie Julii

(c) Jeśli R przy jakimś zadaniu jest powolny, czy sensowne jest przejście na Julię lub Python?

Problemy wysokowymiarowe i intensywne obliczeniowe.

  • Przetwarzanie wieloprocesowe Równoległe możliwości Julii ( @spawnat) są znacznie wygodniejsze niż w Pythonie. Np. W pythonie nie można używać puli redukcji wieloprocesorowej mapy na REPL, a każda funkcja, którą chcesz zrównoleglać, wymaga dużej ilości płyt kotłowych.

  • Informatyka klastrowa. ClusterManagersPakiet Julii umożliwia korzystanie z klastra obliczeniowego prawie tak, jak pojedynczej maszyny z kilkoma rdzeniami. [ Bawiłem się, dzięki czemu czułem się bardziej jak pisanie skryptów w ClusterUtils ]

  • Pamięć współdzielona. SharedArrayObiekty Julii przewyższają równoważne obiekty pamięci współdzielonej w pythonie.

  • Prędkość. Moja implementacja Julii jest (pojedyncza maszyna) szybsza niż moja implementacja R przy generowaniu liczb losowych i algebrze liniowej (obsługuje wielowątkowy BLAS).
  • Interoperacyjność PyCallModuł Julii daje dostęp do ekosystemu python bez owijania - np. Używam tego do pylab. Jest coś podobnego do R, ale nie próbowałem tego. Dostępne są również ccallbiblioteki C / Fortran.
  • GPU. Opakowania CUDA Julii są znacznie bardziej rozwinięte niż w Pythonie (Rs prawie nie istniały, kiedy sprawdzałem). Podejrzewam, że tak będzie nadal, ponieważ o wiele łatwiej jest wywoływać biblioteki zewnętrzne w Julii niż w Pythonie.

  • Ekosystem Do Pkgzastosowania modułu GitHub jako silnika. Wierzę, że będzie to miało duży wpływ na łatwość konserwacji modułów Julii w dłuższej perspektywie, ponieważ znacznie łatwiej jest oferować łatki lub przenosić odpowiedzialność na właścicieli.

  • σ

Pisanie szybkiego kodu dla dużych problemów będzie w coraz większym stopniu zależało od przetwarzania równoległego. Python jest z natury równoległy nieprzyjazny (GIL), a natywne wieloprocesowe przetwarzanie w R nie istnieje AFAIK. Julia nie wymaga od ciebie zejścia do C, aby napisać kod wykonawczy, zachowując przy tym dużą czucie Python / R / Matlab.

Głównym minusem Julii pochodzącym z Pythona / R jest brak dokumentacji poza podstawową funkcjonalnością. Python jest bardzo dojrzały, a tego, czego nie można znaleźć w dokumentach, jest zwykle w trybie stackoverflow. System dokumentacji R. jest dość dobry w porównaniu.

(a) Czy doradziłbyś nowym użytkownikom narzędzi statystycznych nauczenie Julii nad R.

Tak, jeśli pasujesz do przypadków użycia w części (b). Jeśli twój przypadek użycia wymaga dużej różnorodności pracy

przypuszczenia
źródło