🙌

Makie.jl の sysimage を Jupyter で使う手順書

2022/01/11に公開

はじめに

Makie.jl は初回のプロット表示に1分以上かかる。流石に遅すぎると感じたので前から使ってみようとおもっていた PackageCompiler.jl を使うことにした。あと PackageCompiler.jl で作った sysimage を利用する Jupyter kernel を作る方法もまとめておく。

新しい kernel を使うことで


これが

こうなる。

手順

必要なパッケージ

  • PackageCompiler
  • Makie
  • IJulia
    のインストールは省略

1.sysimage づくり

GLMakie のプロットを表示するまでのプログラム

using GLMakie
f = scatter(rand(10,2))
display(f)

を sysGLMakie.jl ファイルとしてホームディレクトリにおいておく。

Julia の REPL を起動し

using PackageCompiler
inputfile = "sysGLMakie.jl"
sysimgname = "GLMakie.dylib"
create_sysimage(
     [:GLMakie];sysimage_path=sysimgname,
      precompile_execution_file=inputfile
      )  

を実行すれば sysimage (GLMakie.dylib)ができる。

メモ

そもそもsysimage とはなにかというとあるコードの初回実行した状態を保存したものである。(自分のふんわり理解なので正確には違うとおもう)
Makie.jl は初回のプロットが著しく遅いが2回め以降は普通に速いので、最初の実行した状態をsysimage に保存しておこうということである。(厳密には初回コンパイルがなくなるわけではないのでやはり二回目以降のほうが速い)

display をコードに加えて置くことがポイント。最初の画像のコードには含まれていないが画面にグラフを表示する際に裏で呼ばれている(セルの実行時間とセル内の関数の @time の結果を参照)

この sysimage をつかうには julia 実行時のオプションコマンドを使えば良い[1]

2.kernel づくり

Julia の REPL 上で

using IJulia
installkernel("Julia GLMakie", "--sysimage=/$HOME/GLMakie.dylib")

を実行すれば Jupyter のカーネル選択の中に Julia GLMakie というのができる。[2]

メモ(追記2022-01-11-21:52)

installkernel の2つ目の引数は絶対パスで与えること

参考

脚注
  1. Juliaコードの初回実行を高速化するためのPackageCompiler.jl入門 - MyEnigma
    PackageCompiler.jl の使い方はここをみて学んだ。 ↩︎

  2. https://julialang.github.io/IJulia.jl/stable/manual/installation/#Installing-additional-Julia-kernels ↩︎

Discussion