Elixir Digitalization Implementors/fukuoka.ex/kokura.exのpiacereです
ご覧いただいて、ありがとうございます
引き続き、Elixirの2021年を占うポジションであるニューラルネットワーク/ディープラーニング用ライブラリ「Nx」についてです
前回は、defn+XLAでGPUを動かそうと奮闘して、動かせなかったので、今回、その続きをしようと思ったのですが、Elixir創始者José Valimから下記ツイートをもらったので、それを試します
Once this PR is merged, you should be able to compile it outside of WSL: https://t.co/RPRT98YUaW :)
— José Valim (@josevalim) February 20, 2021
内容が、面白かったり、役に立ったら、「LGTM」よろしくお願いします
Advent Calendar、fukuoka.ex1位、Elixir2位達成ヽ(=´▽`=)ノ
fukuoka.ex Advent Calendar、Webテクノロジーカテゴリで堂々1位 … 各コラムぜひお読みください
https://qiita.com/advent-calendar/2020/fukuokaex
そして、プログラミング言語カテゴリは、1位がRust、2位がElixir、3位がGoとモダン言語揃い踏みでのトップ3、熱いネー
https://qiita.com/advent-calendar/2020/elixir
本コラムの検証環境
本コラムは、以下環境で検証しています(Windowsで実施していますが、Linuxやmacでも動作する想定です)
- Windows 10
- Elixir 1.11.3 ※最新版のインストール手順はコチラ
- git 2.30.1.windows.1 ※最新版のインストール手順はコチラ
Jason GoldbergerさんのNx forkブランチを取り込む
第1回に書いた通り、Erlangの計算ライブラリ関数:math.acosh
が呼べないため、Windows版ElixirでNxはビルドできませんでした
この回避改修が、Nxのforkされたブランチ(下記)でコミットされていました
elbow-jason (Jason Goldberger) - GitHub
https://github.com/elbow-jason/nx/tree/jg-check-supported-unary-ops
現時点(2021/2/21 12:30)では、上記改修は、Nx本体レポジトリにマージされていないプルリク(元となったIssueでも他の手段含めて検討中と思われる)のため、今回は、上記ブランチを取り込みたいと思います
なお以降は、Elixirのdepsで、Githubのmaster以外ブランチを取り込む方法の解説にもなっているので、Nxに限らず使えるテクニックとなります
Jason Goldbergerさん版Nxのインストール
まずElixir PJを作成します(作成済みであれば、ここは飛ばしてOKです)
> mix new nx_review
> cd nx_review
Jason GoldbergerさんのNx forkブランチをdepsに追加します(既に行ってる方は上書きしてください)
defmodule NxReview.MixProject do
use Mix.Project
…
defp deps do
[
{:nx, "~> 0.1.0-dev", github: "elbow-jason/nx", branch: "jg-check-supported-unary-ops", sparse: "nx"},
]
end
…
この指定が、任意のGithub forkブランチを取り込む方法なので、他のElixirプロダクトや、プルリク状態のコードを試す際にこの構文をお使いください
続き(以降は前々回と同じ)
ライブラリをインストールします
$ mix deps.get
ビルドし、iexからNxを使うと、一発で通りました、やった
$ iex -S mix
…
iex> matrix = Nx.tensor( [ [ 0.123, 0.456 ], [ 0.789, 1.234 ] ] )
iex> Nx.divide( Nx.exp( matrix ), Nx.sum( Nx.exp( matrix ) ) )
#Nx.Tensor<
f64[2][2]
[
[0.135520130365152, 0.18907054376721744],
[0.26378125835705013, 0.4116280675105804]
]
>
最後に
ニューラルネットワーク/ディープラーニング用ライブラリ「Nx」が、WSL2を使わなくても、Windowsで動きました
とはいえ、XLA周りでWindowsは引っかかることが多いと予想され、WSL2に振ったので、今後の展開次第では、WSL2復活もあり得ることは、心に留めといてください
Elixirのdepsで、Githubのmaster以外ブランチを取り込む方法も解説しました
このテクニックは、Nx以外でも応用できるので、ぜひ覚えてください
さてさて次回こそは、NxでGPU駆動を完了させ、ニューラルネットワーク開発入りたいですね