Julia: Nasıl yapıldığını değerlendirmek


19

Çeşitli İstatistiksel Çalışmalar için R / Python'a alternatif olarak Julia hakkında çok iyi bir tartışma yaşayan 2012 sorusu ile karşılaştım.

İşte 2012'den Julia'nın vaadiyle ilgili orijinal Soru yatıyor

Ne yazık ki Julia o zamanlar çok yeniydi ve istatistiksel çalışma için gerekli araç takımları biraz ilkeldi. Böcek ütüleniyordu. Dağıtımların kurulması zordu. Ve benzeri.

Birisi bu soru hakkında çok uygun bir yorum yaptı:

Bu, bu sorunun muhtemelen cevaplanabilmesi için 5 yıl geçeceğini söyledi. Şu an itibariyle Julia, günlük kullanıcılar için R ile rekabet edebilecek bir istatistiksel programlama sisteminin aşağıdaki kritik yönlerinden yoksundur:

2012 yılındaydı. Şimdi 2015 ve üç yıl geçtiğine göre, insanların Julia'nın nasıl yaptığını merak ediyordum?

Dilin kendisi ve genel Julia ekosistemiyle ilgili daha zengin bir deneyim var mı? Bilmek isterim.

özellikle:

  1. Yeni istatistiksel kullanıcılara Julia'yı R üzerinden öğrenmelerini tavsiye eder misiniz?
  2. Birisine Julia'yı nasıl kullanmasını tavsiye edersiniz?
  3. R belirli bir görevde yavaşsa, Julia veya Python'a geçmek mantıklı mıdır?

Not: İlk olarak 14 Haziran 2015'te yayınlanmıştır.


2
Son zamanlarda bir göz attım ve istatistik paketlerinin derinliğinden etkilenmedim. Yanılmıyorsam, Python da yorumlanır, bu yüzden R ile benzer sınırlamalara sahip olacaktır. Julia'nın cazibesini anladığım gibi cazibe, ekstra hız ve paralelleşmeye daha iyi erişim vaadi idi.
DWin

3
Julia ile ilgili sorun, SciPy'nin daha da iyileşmeye devam etmesi ve şimdi de karışımda Torch'un var olduğunu düşünüyorum. Hiç kimse hızlı ve havalı aşırı yükleme özelliklerine sahip olsa bile, üçüncü (veya dördüncü veya beşinci) bilimsel bir bilgisayar dilini öğrenmek istemez.
shadowtalker

4
Julia iyi tasarlanmış, güzel bir dildir, ama bence çok az geç geldi. Tek düğümlü matris hesaplama treni çoktan geçti. Julia aslında birkaç güzel özelliğe sahip Fortran 2.0, ancak gittikçe daha fazla bulut bilişime geçtikçe, Scala, Clojure ve hatta Python gibi işlevsel diller üzerinde bir dereceye kadar sunacak çok az şey var. Julia 10 yıl önce şu anki durumunda olsaydı, muazzam bir başarı olabilirdi.
Marc Claesen

2
Python ve Rcpp gerçekten dinamik bir şekilde gelişiyor, R daha fazla dikkat çekiyor (R Consortium, Microsoft vb.) Bu yüzden Julia'nın yetişmesi zor görünüyor ...
Tim

1
Julia'nın iş durumunu görmedim ve hala görmüyorum. Programcılar tarafından zaten var olan bir şeyi yeniden inşa etmek için gereksiz bir girişim gibi görünüyordu.
Aksakal

Yanıtlar:


15

Julia'ya geçtim ve işte pragmatik nedenlerim:

  • Gerçekten iyi tutkal kodu yapar. MATLAB'da çok fazla eski kod var ve MATLAB.jl'nin yüklenmesi 5 dakika sürdü, mükemmel çalışıyor ve MATLAB işlevlerini kullanmayı doğal hale getiren kısa ve öz bir sözdizimine sahip. Julia'nın R, Python, C, Fortran ve diğer birçok dil için de aynısı vardır.
  • Julia paralellikleri çok iyi yapıyor. Sadece çoklu işlemci (paylaşılan bellek) paralelliğinden değil, aynı zamanda çok düğümlü paralellikten de bahsediyorum. Her biri oldukça yavaş olduğu için çok sık kullanılmayan bir HPC düğümlerine erişimim var, bu yüzden Julia'yı denemeye karar verdim. Bir döngüye @parallel ekledim, makine dosyasını söyleyerek başlattım ve bam 5 düğümü de kullandı. Bunu R / Python'da yapmayı deneyin. MPI'de, çalışması için biraz zaman alacaktı (ve ne yaptığınızı bilmekle), ilk denediğinizde birkaç dakika değil!
  • Julia'nın vektörleştirmesi hızlıdır (çoğu durumda diğer herhangi bir üst düzey dilden daha hızlıdır) ve bulaştırılmış kodu neredeyse C hızlıdır. Bilimsel algoritmalar yazarsanız, genellikle önce MATLAB'a yazar ve sonra C'ye yeniden yazarsınız. Julia bir kez yazmanıza izin verir, sonra derleyici kodları verir ve 5 dakika sonra hızlıdır. Yapmasanız bile, bu sadece kodu doğal hissettiğiniz her şekilde yazdığınız ve iyi çalışacağı anlamına gelir. R / Python'da, bazen iyi bir vektörleştirilmiş sürüm elde etmek için oldukça zor düşünmeniz gerekir (daha sonra anlamak zor olabilir).
  • Meta programlama harika. "Keşke dilde ______ yapabilseydim" sayısını kaç kez düşünün. Bunun için bir makro yazın. Genellikle birileri zaten vardır.
  • Her şey Github'da. Kaynak kodu. Paketler. Kodu okumak, sorunları geliştiricilere rapor etmek, bir şeylerin nasıl yapılacağını öğrenmek için onlarla konuşun, hatta paketleri kendiniz geliştirin.
  • Gerçekten iyi kütüphaneleri var. İstatistikler için, muhtemelen optimizasyon paketleriyle ilgilenirsiniz (JuliaOpt bunları yöneten bir gruptur). Sayısal paketler zaten birinci sınıf ve sadece gelişiyor.

Bununla birlikte, Rstudio'yu gerçekten çok seviyorum, ancak Atom'daki yeni Juno gerçekten güzel. Artık ağır geliştirme aşamasında ve kararlı olduğunda, eklentilerin kolaylığı nedeniyle Rstudio'dan daha iyi görebiliyorum (örnek: hidpi ekranlarına uyum sağlamak için iyi bir eklentiye sahip). Bence Julia şimdi öğrenmek için iyi bir dil. Benim için şimdiye kadar iyi çalıştı. YMMV.


Bu cevabı 3 yıldan uzun bir süre geçtikten sonra güncellemeyi düşünüyor musunuz?
Bayequentist

1
Burada güncellenmiş bir cevap verdim: scicomp.stackexchange.com/questions/10922/… . Belki de kopyalanmalý.
Chris Rackauckas

11

"Y üzerinden X öğren" sorusunu formüle etmenin doğru yolu olmadığını düşünüyorum. Aslında, her ikisini de öğrenebilir (en azından temelleri) ve eldeki somut işe bağlı olarak doğru alete karar verebilirsiniz. Ve Julia sözdiziminin ve kavramlarının çoğunu diğer dillerden miras aldığı için, onu kavramak gerçekten kolay olmalı (Python'un yanı sıra, R hakkında da söylenebileceğinden emin değilim).

Peki hangi dil hangi görev için daha uygundur? Bu araçlarla ilgili tecrübelerime dayanarak bunları şu şekilde değerlendiririm:

  • İçin saf istatistiksel araştırma REPL ve yazýmlarýna ile yapılabilir, R mükemmel bir seçim gibi görünüyor. Özellikle istatistikler için tasarlanmıştır, en uzun araç geçmişine ve muhtemelen en büyük istatistik kütüphanelerine sahiptir.

  • İstatistikleri (veya örneğin makine öğrenimini) üretim sistemine entegre etmek istiyorsanız , Python çok daha iyi bir alternatif gibi görünüyor: genel amaçlı bir programlama dili olarak harika bir web yığını, çoğu API ve kütüphaneye her şey için edebi olarak bağlanıyor, dan web hurdaya için 3D oyunlar oluşturma .

  • Yüksek performanslı algoritmaların Julia'da yazılması çok daha kolaydır . C / C ++ tarafından desteklenen SciKit Learn veya e1071 gibi mevcut kütüphaneleri kullanmanız veya birleştirmeniz gerekiyorsa , Python ve R ile iyi olacaksınız. Python veya R ve C / C ++ hakkında ek bilgi gerektirmez. Örneğin, Mocha.jl , orijinal olarak C ++ ile Python'da bir sarıcı ile yazılmış olan saf Julia derin öğrenme çerçevesi Caffe'de yeniden canlanıyor .

  • Ayrıca bazı kütüphanelerin sadece bazı dillerde mevcut olduğunu unutmayın. Örneğin, sadece Python bilgisayar vizyonu için olgun bir ekosisteme sahiptir, bazı şekil eşleme ve bilgi algoritmaları sadece Julia'da uygulanmaktadır ve R'de tıpta istatistik için bazı benzersiz paketleri duydum.


Çoğu insanın bir tane seçmeye ve çoğunlukla bununla kalmaya çalışması gerektiğini söyleyebilirim - en azından benim için, birden fazla dil kullanarak onları karıştırıyorum, bu şekilde çok zaman
kaybediyorum

1
Yüksek performanslı algoritmalar yazmanın çelişkili bir sorunu, R veya Julia gibi daha yüksek seviyede bir dilde yazılması daha kolay olsa da, aslında yüksek performanslı algoritmalar yazarken, muhtemelen C ++ gibi bir şey kullanmayı sevmenizdir. Ya da belki bu sadece benim.
Cliff AB

3

(b) Ne tür İstatistikler kullanırsa, birine Julia'yı kullanmasını tavsiye edersiniz

(c) Belirli bir görevde R yavaşsa, Julia veya Python'a geçmek mantıklı mıdır?

Yüksek boyutlu ve hesaplamalı yoğun problemler.

  • Çoklu işlem. Julia'nın tek düğümlü paralel yetenekleri ( @spawnat), pythondakilerden çok daha uygundur. Örneğin, python'da REPL'de çok işlem havuzunu azaltan bir harita kullanamazsınız ve paralel hale getirmek istediğiniz her işlev çok sayıda kazan plakası gerektirir.

  • Küme hesaplaması. Julia'nın ClusterManagerspaketi, neredeyse birkaç çekirdekli tek bir makinede olduğu gibi bir hesaplama kümesi kullanmanıza izin verir. [Bunu ClusterUtils'teki komut dosyası gibi hissettirmek için oynuyordum ]

  • Paylaşılan Bellek. Julia'nın SharedArraynesneleri, python'daki eşdeğer paylaşılan bellek nesnelerinden üstündür.

  • Hız. Julia uygulamam rasgele sayı oluşturmada ve doğrusal cebirde (çoklu iş parçacıklı BLAS'ı destekler) R uygulamamdan (tek makine) daha hızlıdır.
  • Birlikte çalışabilirlik. Julia'nın PyCallmodülü python ekosistemine sarmalayıcılar olmadan erişmenizi sağlar - örneğin bunu için kullanıyorum pylab. R için benzer bir şey var, ama denemedim. ccallC / Fortran kütüphaneleri için de vardır .
  • GPU. Julia'nın CUDA paketleyicileri pythondakilerden çok daha gelişmiştir (kontrol ettiğimde R'ler neredeyse yoktu). Julia'da harici kütüphaneleri çağırmanın python'dan daha kolay olmasından dolayı bu durumun devam edeceğinden şüpheleniyorum.

  • Ekosistem. PkgModül kullanımları bir arka uç olarak GitHub'dan. Bunun, Julia modüllerinin uzun süreli sürdürülebilirliği üzerinde büyük bir etkisi olacağına inanıyorum, çünkü yamalar sunmayı veya sahiplerin sorumluluk üstlenmesini çok daha kolay hale getiriyor.

  • σ

Büyük problemler için hızlı kod yazmak, giderek paralel hesaplamalara bağlı olacaktır. Python doğası gereği düşmanca paraleldir (GIL) ve R'de doğal çoklu işlem mevcut olmayan AFAIK'dir. Julia, python / R / Matlab hissinin çoğunu korurken performans kodu yazmak için C'ye düşmenizi gerektirmez.

Julia'nın python / R'den gelen ana dezavantajı, temel işlevsellik dışında dokümantasyon eksikliğidir. python çok olgun ve dokularda bulamadığınız şeyler genellikle stackoverflow üzerindedir. R'nin dokümantasyon sistemi kıyaslandığında oldukça iyi.

(a) Yeni istatistiksel araç kullanıcılarına Julia'yı R üzerinden öğrenmelerini tavsiye eder misiniz?

Evet, kullanım senaryolarını bölüm (b) 'de takarsanız. Kullanım durumunuz çok sayıda heterojen çalışma içeriyorsa

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.