1から学ぶjulia lang:導入から基本操作①

julia言語の学習録です。
julialang.orgのマニュアル1O’Reilly のJuliaプログラミングクックブック2から学んだ基礎的な用法や、R言語・Python言語との違いなどをアウトプットします。今後も少しづつ追記の予定ですが、まだ書き始めのため、間違いなどありましたらコメント頂ければ幸いです。

TOC


  1. juliaについて
  2. 導入
  3. juliaのIDE
  4. 並列処理

1. juliaについて

MITの研究者らによって2009年から開発がスタートした。その後、2018年のjuliaユーザーの年次大会「juliaCon」の開催中にバージョン1.0が正式にリリース3されました。

公式サイト1では、juliaの利点を次のように紹介しています。

  • フリーかつオープンソース(MITライセンス)
  • 並列化と分散コンピューティングのための設計
  • C言語の関数を直接呼び出し(ラッパーや特別なAPIは必要なし)
    などです(一部を抜粋して日本語に翻訳)。

並列化については、4.並列処理などでも軽く触れます。

ちなみに、これらの特徴に魅力を感じたことと、Julia TokyoというData Ninjaが集うイベントに参加した2018年頃から少しづつ学習をはじめました。

2.  導入

  • juliaの導入
    ローカルコンピュータには、Windows・Mac・LinuxそれぞれのOSにインストールすることが出来きます。詳しくは、次のリンク先、Platform Specific Instructions for Official Binariesのページをご確認ください。

    説明に従えばインストール出来ると思います。

    また、ローカルの環境を汚したくない、手っ取り早くjuliaを触ってみたいという方には、コンテナ仮想化ツールのDocker4を使用するという方法もあります。Dockerの導入には、コマンドなど最低限のインフラ関連知識が必要です。

    ただし、この記事に興味のある方でしたら、コンテナを起動してjuliaを動作させる程度であれば大きな負担にはならないと思います。他に、AWS(Amazon Web Services)クラウド上で使う方法もあります。AWSを利用した環境は、juilaの基礎の範囲から外れるので、アプリケーションをデプロイできるタイミングで記事にしたいと思います。

    juliaは、公式のDockerイメージを配布してしています5。ダウンロード後、juliaのREPL(Read-Eval- Print Loop)というコマンドライン環境をすぐに試してみるることができます。

    # 3行目だけでも良い
    docker pull julia
    $ docker run -it --rm julia
    

Docekr上で、juliaが立ち上がっていることがわかります。

dockerコマンド中の--rmは、終了時にコンテナを破棄するためのものです。そのため、コンテナ起動後の変更や追加操作を含め、コンテナの終了と同時に失われます。

起動時は、不足なくjuliaを利用できますが、ここでは、あくまでお試しのための起動方法としての紹介にとどめます。

  • その他の方法
    Dockerでは、独自にJuliaの環境を構築することもできますが、R言語、Pythonもインストールされているjupyter/datascience-notebookイメージを利用する方が便利です6,7

    参考までに、Dockerをインストール後にイメージを取得(ダウンロード)するコマンドを示します8

    # jupyter/datascience-notebookイメージを取得する
    docker pull jupyter/datascience-notebook
    

    ダウンロードしたイメージを確認したいときは、docker imagesとすると、取得したイメージの一覧が表示されます。

    docker images
    # 一覧表示
    # REPOSITORY                   TAG    IMAGE ID     CREATED       SIZE
    # jupyter/datascience-notebook latest 123456789ab  3 months ago  5.15GB
    

    コンテナの起動方法は、Quick Startををご覧ください9

3. juliaのIDE

juliaのIDEには、以下のようなものが利用できます。
私の場合、今の所juliaでの実装タスクがないので、Jupyter Labをメインに使用しています。また、vimをよく利用することから、サブでjulia-vimも入れています。

  • Juno(https://junolab.org/)
    Junoは、Atom(https://atom.io)のプラグインとして動作するため、インストールには、まずAtomの導入が必要とのこと2。Mac,Win,Linuxに対応。

  • Microsoft Visual Studio Code(https://code.visualstudio.com/)
    Visual Studio Codeの拡張機能をインストールすることによって、Juliaの利用ができます。こちらも、Windows,Mac,Linuxに対応。※同じく拡張機能であるRemote Containersによって、Dockerコンテナ内の環境で開発が可能とのこと。

  • julia-vim
    テキストエディタのvimを利用することができます。インストールの詳細は、julia-vimのInstallation instructionsに記載されています。

4. 並列処理

  • マルチプロセス
    juliaで複数プロセスを使うには、起動時に-pオプションでワーカプロセス数を指定する。デフォルトは1。
    # 4つのワーカプロセスを指定
    # コンピュータの最大コア数で起動刷る場合は、 -p auto とする。
    $ julia -p 4
    
    julia> nworkers()
    4
  • マルチスレッド
    実行スレッドの数は、-t/–threadsコマンドライン引数を使用するか、JULIA_NUM_THREADS環境変数を使用して制御されます。両方を指定すると、-t/–threadsが優先されます10。なお、実行中にスレッド数を追加することはできません。
    # 4つのスレッドを開始
    $ julia -t 4
    
    julia> Threads.nthreads()
    4
    ※起動時に、-t/–threadsでスレッドを指定することができるのは、julia1.5以降のバージョンが必用とのこと。1.5以前のバージョンでは、システム環境変数 JULIA_ NUM_THREADS で指定します10

    マルチプロセス、マルチスレッドについては、詳しく調べて改めて記事にしたいと思います。

感想

まず、いずれかの方法でjuliaを動かすための方法を学びました。
研究やPoC段階のモデル開発、探索的なデータ分析などの用途では、それほど環境を気にすることは無いかもしれません。それでも、これだけ動作する環境が豊富にあることは、学びのハードルが低くなること、さまざまなニーズに対応できることなど、メリットを多く感じました。

かなり昔、学生時代にC言語を学んだ時を思えば、Rにしろ、Pythonにしろ学習環境のハードルが下がったものだと感じました。また、Blogで取り上げた利点から、juliaならではの部分を理解して利用できるようになりたいという気持ちも強くなりました。

それでは、次回からは、juliaの文法を取り上げたいと思います。


参考・引用

  1. The Julia Programming Language(https://docs.julialang.org/en/v1/manual/getting-started/)
  2. Kamiński, Bogumił、Szufel, Przemysław『Juliaプログラミングクックブック 言語仕様からデータ分析、機械学習、数値計算まで』中田秀基訳、O’Reilly Japan、2019年10月。
  3. JuliaCon(2018). JuliaCon 2018 Schedule. https://sched.co/FQ3r. (accessed 2020-10-3)
  4. Docker-docs-ja(http://docs.docker.jp/index.html)
  5. julia Docker Official Images(https://hub.docker.com/_/julia)
  6. イメージのサイズが大きいため、安定した通信環境での実行をお勧めします。
  7. 事前にDockerHub(https://hub.docker.com/)のアカウント作成が必要です。
  8. Dockerのpullコマンドの概要は、Dockerドキュメントをご覧ください。
  9. JupyterのDockerイメージについては、Selecting an Imageがより詳しいです。
  10. julia Multi-Threading(https://docs.julialang.org/en/v1/manual/multi-threading/#Starting-Julia-with-multiple-threads)
  11. 補足:タイトルは、juliaのインデックスが1オリジンであることに由来しています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です