luggage baggage

Machine learning, data analysis, web technologies and things around me.

GitHub stars に見る Julia 言語の人気ライブラリトップ30

私は普段 Python を使った機械学習アルゴリズムの開発とか統計分析に関わっていますが、最近どうも Julia 言語 julialang が気になっています。よくある scikit-learn や pandas もしくは PyTorch などに不満を感じることはあまりないのですが、みんな Julia とそのライブラリをなんのために使っているのかな?というのがいま知りたいことです。

そこで、GitHub のパブリックレポジトリを “jl language:jl” で検索し、star 数上位30位まで見て様子をうかがってみることにしました。

長くなるので目次をここに

まずはランキングから

レポジトリ名とその説明抜粋、star 数(2020年5月18日 時点)と独断で決めたライブラリの分類を挙げていきましょう。

1. FluxML/Flux.jl

Flux is an elegant approach to machine learning. It’s a 100% pure-Julia stack, and provides lightweight abstractions on top of Julia’s native GPU and AD support. Flux makes the easy things easy while remaining fully hackable.

2. JuliaLang/IJulia.jl

IJulia is a Julia-language backend combined with the Jupyter interactive environment (also used by IPython). This combination allows you to interact with the Julia language using Jupyter/IPython’s powerful graphical notebook, which combines code, formatted text, math, and multimedia in a single document. It also works with JupyterLab, a Jupyter-based integrated development environment for notebooks and code.

3. GiovineItalia/Gadfly.jl

Gadfly is a plotting and data visualization system written in Julia. It’s influenced heavily by Leland Wilkinson’s book The Grammar of Graphics and Hadley Wickham’s refinement of that grammar in ggplot2.

4. probcomp/Gen.jl

Gen: A General-Purpose Probabilistic Programming System with Programmable Inference

5. SciML/DifferentialEquations.jl

This is a suite for numerically solving differential equations written in Julia and available for use in Julia, Python, and R. The purpose of this package is to supply efficient Julia implementations of solvers for various differential equations.

6. pluskid/Mocha.jl

Update Dec. 2018: Mocha.jl is now deprecated.

7. denizyuret/Knet.jl

Knet (pronounced “kay-net”) is the Koç University deep learning framework implemented in Julia by Deniz Yuret and collaborators. It supports GPU operation and automatic differentiation using dynamic computational graphs for models defined in plain Julia.

8. JuliaOpt/JuMP.jl

JuMP is a domain-specific modeling language for mathematical optimization embedded in Julia.

9. JuliaPlots/Plots.jl

Plots is a plotting API and toolset.

10. svaksha/Julia.jl

Julia.jl aggregates and curates decibans of knowledge resources for programming in Julia, an all-purpose programming language that addresses the needs of high-performance numerical analysis and computational science.

11. GenieFramework/Genie.jl

Genie is a full-stack MVC web framework that provides a streamlined and efficient workflow for developing modern web applications. It builds on Julia’s strengths (high-level, high-performance, dynamic, JIT compiled), exposing a rich API and a powerful toolset for productive web development.

  • GitHub - GenieFramework/Genie.jl: The highly productive Julia web framework
  • star: 859
  • 分類: web 開発
  • メモ: ハイパフォーマンスである以外にも、Julia 言語の深層学習フレームワークや微分方程式ライブラリを使っている場合、web フレームワークも同じ言語で書く利点は多いかもしれない(PyTorch で書かれたニューラルネットを Flask から呼んで推論実行する、みたいなノリで)

12. TuringLang/Turing.jl

Turing.jl is a Julia library for general-purpose probabilistic programming. Turing allows the user to write models using standard Julia syntax, and provides a wide range of sampling-based inference methods for solving problems across probabilistic machine learning, Bayesian statistics, and data science.

13. JuliaPy/PyCall.jl

This package provides the ability to directly call and *fully interoperate with Python* from the Julia language. You can import arbitrary Python modules from Julia, call Python functions (with automatic conversion of types between Julia and Python), define Python classes from Julia methods, and share large data structures between Julia and Python without copying them.

14. JuliaData/DataFrames.jl

Tools for working with tabular data in Julia.

15. malmaud/TensorFlow.jl

A wrapper around TensorFlow, a popular open source machine learning framework from Google.

16. FluxML/Zygote.jl

Zygote provides source-to-source automatic differentiation (AD) in Julia, and is the next-gen AD system for the Flux differentiable programming framework.

17.JuliaInterop/Cxx.jl

The Julia C++ Foreign Function Interface (FFI) and REPL.

18.JuliaLang/PackageCompiler.jl

PackageCompiler is a Julia package with two main purposes: 1. Creating custom sysimages for reduced latency when working locally with packages that has a high startup time. 2. Creating “apps” which are a bundle of files including an executable that can be sent and run on other machines without Julia being installed on that machine.

19. JuliaPlots/Makie.jl

From the japanese word Maki-e, which is a technique to sprinkle lacquer with gold and silver powder. Data is basically the gold and silver of our age, so let’s spread it out beautifully on the screen!

20.JuliaNLSolvers/Optim.jl

Univariate and multivariate optimization in Julia.

21. FRBNY-DSGE/DSGE.jl

The DSGE.jl package implements the New York Fed dynamic stochastic general equilibrium (DSGE) model and provides general code to estimate many user-specified DSGE models.

22. JuliaStats/Distributions.jl

A Julia package for probability distributions and associated functions.

23. timholy/Revise.jl

Revise.jl allows you to modify code and use the changes without restarting Julia.

24. JuliaData/JuliaDB.jl

JuliaDB is a package for working with large persistent data sets

25. JuliaGraphs/LightGraphs.jl

LightGraphs offers both (a) a set of simple, concrete graph implementations — Graph (for undirected graphs) and DiGraph (for directed graphs), and (b) an API for the development of more sophisticated graph implementations under the AbstractGraph type.

26. JunoLab/Weave.jl

Weave is a scientific report generator/literate programming tool for Julia.

27. JuliaGPU/CUDAnative.jl

Support for compiling and executing native Julia kernels on CUDA hardware.

28. cstjean/ScikitLearn.jl

ScikitLearn.jl implements the popular [scikit-learn](http://scikit-learn.org/stable/) interface and algorithms in Julia. It supports both models from the Julia ecosystem and those of the [scikit-learn library](http://scikit-learn.org/stable/modules/classes.html) (via PyCall.jl).

29. memoiry/LightML.jl

LightML.jl is a collection of reimplementation of general machine learning algorithm in Julia. The purpose of this project is purely self-educational.

30. JuliaOpt/Convex.jl

Convex.jl is a Julia package for Disciplined Convex Programming. Convex.jl can solve linear programs, mixed-integer linear programs, and DCP-compliant convex programs using a variety of solvers, including Mosek, Gurobi, ECOS, SCS, and GLPK, through MathOptInterface. It also supports optimization with complex variables and coefficients.

まとめると

分類としては、こんな感じにまとめられそうです。

  • データサイエンススタック(データフレーム、可視化、確率的プログラミング、対話的インターフェイス、データベース接続)
  • 機械学習、深層学習
  • 微分方程式、最適化、グラフなどの科学技術計算
  • Python, C/C++ もしくは CUDA との連携
  • web フレームワーク

Julia 言語公式ページの Ecosystem 欄に書かれている内容が star の数にほぼそのまま反映されている様子ですね。必要な内容がかなりカバーされているイメージを持ちました。

Julia は正しく書けば非常に高いパフォーマンスが発揮できることもあり、例えば従来 Fortran で書いていた微分方程式処理コードを現代的に見通し良くしたい、Python で書かれた RNN 等のニューラルネット内部のループ処理を高速化したい、MCMC を速くしたい、といった人がどんどん出てきているのかもしれません。

Julia 言語本体を除くと、上記の主要ライブラリでも star 数は 1k のオーダーということもあり、Python に比べユーザ規模がまだまだ桁違いに小さいのだなとも思いました。その利便性・ポテンシャルを鑑みると、これからもっと大きくなっていくのでしょう。

参考文献など