Edited at
JuliaDay 13

[Julia]JuliaにIntel Distribution for Pythonを適用する


追記

僭越ながら空きがあったのでAdvent Calenderに参加しました.PythonとJuliaの連携をしたい人,PythonユーザでこれからJuliaを使いたい人,JuliaユーザでPyCallを使う人のためになれば幸いです.

あと,この設定を適用するとpyimport_condaが使えなくなるっぽいです.パッケージの追加はAnaconda Promptを用いて行うと確実です.


注意

以下の内容を行う前にAnacondaを既に利用している人はAnacondaのアンインストールと,隠しフォルダ「.conda」を削除してください.あと,Juliaを利用している人もJuliaと隠しフォルダ「.julia」を削除し,すでにPyCallを呼び出したことがある方はMinicondaがインストールされているはずなのでアンインストールしてください.JuliaにPyCallを導入する際に仮想環境を破壊(Spyderなどからは利用できますが,conda promptによるパッケージ管理を不可能に)されます.同じ環境を入れ直すこともできるので

conda env export -n [env_name] > env_name.yml

しておけばより安心です.

ちなみに,自分は学習能力が無いので3度やられました.


背景

「Julia,Pythonを呼べるらしい.」

「しかもPythonのディストリビューションはAnaconda(正確に言えばMiniconda).」

「Anacondaなら無料でIntel Distribution for Pythonを導入できる.」

「この三拍子が揃うならJuliaのPythonにIntel Distribution for Python入れるしかないっしょ!!」


導入方法

ということで導入しました.以下に手順を示します.

なお,この段階でAnaconda,Juliaともにインストールされていないものとします.以下が実際に導入した環境です.

OS:Windows 10 Pro 64bit

SSD容量:1TB
メモリ容量:16GB
Juliaバージョン:1.0.2


Juliaのインストール

ここはそんなに苦労しないと思います.公式サイトからビット数とOSに合わせてインストーラをダウンロードしてインストールしてください.公式サイトはこちら


PyCallのビルド

先にJulia内のPyCallをビルドします.この際に自動でMinicondaがインストールされるので,追加でAnacondaやMinicondaをインストールする必要はありません.つまり,今後は自分のPython環境もここでインストールされるMinicondaに移植・追加するということです.

Juliaを立ち上げて,

using Pkg

と入力します.その後,

Pkg.add("PyCall")

と入力してください.更にその後,

using PyCall

と入力します.この際に自動的にMinicondaがインストールされ,基本的な仮想環境("base"という名前です.)のPythonを呼び出せるようになります.Anaconda Promptがインストールされることも確認しておきましょう.(自分の環境だと,自動的にスタートメニューに追加されました.)

ここまでが第一段階といったところでしょう.一旦Juliaを終了します.


Intel Distribution for Pythonの導入

次に,Anaconda promptを管理者権限で(←ココ重要です!)立ち上げてください.プロンプトが立ち上がったら,まずはIntel Distribution for Pythonが供給されているリポジトリを以下のコマンドで追加します.

conda config --add channels intel

次に,JuliaでIntel Distribution for PythonのPythonを呼び出すための仮想環境を構築します.以下のコマンドの"env"は仮想環境の名前ですので,適宜わかりやすいものに変更してください.自分は"Julia_idp"としました.

conda create -n env

新しく作った仮想環境に入ります.以降,envは自分で作った仮想環境の名称です.

conda activate env

と入力し,プロンプトの左端が

(base)カレントディレクトリ名

ではなく

(env)カレントディレクトリ名

となっていることを確認してください.

Anaconda prompt最後の作業です.Python本体を導入します.

conda install python -c intel --no-update-deps

と入力します.「指定したパッケージを導入しますか?」と英語で聞いてくるので,"y"キーを押してください.インストールが完了したらAnaconda promptを閉じます.ここで第二段階終了です.


PyCallの環境変数の変更とリビルド

PyCallで呼び出されるPythonの絶対パスを変更します.Juliaを立ち上げて

using Pkg

ENV["PYTHON"]="(仮想環境env内のpython.exe絶対パス.おそらくC:/Users/(ユーザ名)/.julia/conda/3/envs/env/python.exe)"

と入力します.エラーが出なかったら

rm(Pkg.dir("PyCall", "deps", "PYTHON"))

と入力(Warningが出ますが通ります)し,

Pkg.build("PyCall")

と入力してください.


Condaの環境変数の変更とリビルド

最後に,Juliaで呼び出されるcondaの仮想環境を変更します.

ENV["CONDA_JL_HOME"]="(仮想環境envの絶対パス.おそらくC:/Users/(ユーザ名)/.julia/conda/3/envs/env)"

と入力し,エラーがなければ

Pkg.build("Conda")

と入力してください.コレで準備完了です.

using Conda

と入力して,

Conda.PYTHONDIR

が設定した仮想環境envの絶対パスであることと,

using PyCall

と入力して,

PyCall.pyprogramname

が仮想環境env内のpython.exeとなっていれば設定完了です.必要なパッケージはAnaconda promptを使って仮想環境env内で適宜追加すれば,JuliaのPyCallで呼べるようになります.


今まで使ってたPython環境の復元

今まで別途Anacondaを使ってた人は,Anaconda promptを立ち上げ,冒頭で説明した環境を再導入すれば復元されます.コマンドは

conda env create -f=env_name.yml

です.詳細は以下に書いてます.

conda環境の保存と再構築の仕方


そもそもなぜIntel Distribution for Pythonを導入するのか

行列を利用したPythonプログラム(ここではJuliaからPyCallで呼び出されるPython関数)が格段に速くなります.

にわかPythonプログラマの自分が言うより,こっちのほうが説得力があるのでこっちを読んでください.

インテル® Distribution for Python* の紹介


まとめ

今回はJulia 1.0.2のPyCallにIntel Distrubution for Pythonを適用したお話でした.もちろん,Atom + Junoの環境もそのまま利用できます.本来であれば高価なIntel Distribution for Pythonですが,Anacondaを利用しているからこそ無料で利用できるわけです.Anaconda様様ですわ・・・

ちなみにJulia,1.0の日本語ドキュメントがまだまだ少ないです.一刻も早い充実を祈るばかりです.(無論,自分のこの記事がそれに貢献できれば幸いです.)