9
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Elixirでディープラーニング③:WSL2無でもWindowsでNxできた(Elixirで任意のGithub forkブランチを取り込む解説付き)

Last updated at Posted at 2021-02-21

Elixir Digitalization Implementors/fukuoka.ex/kokura.exのpiacereです
ご覧いただいて、ありがとうございます :bow:

引き続き、Elixirの2021年を占うポジションであるニューラルネットワーク/ディープラーニング用ライブラリ「Nx」についてです

前回は、defn+XLAでGPUを動かそうと奮闘して、動かせなかったので、今回、その続きをしようと思ったのですが、Elixir創始者José Valimから下記ツイートをもらったので、それを試します

内容が、面白かったり、役に立ったら、「LGTM」よろしくお願いします :wink:

:ocean::ocean::ocean: Advent Calendar、fukuoka.ex1位、Elixir2位達成ヽ(=´▽`=)ノ :ocean::ocean::ocean:

fukuoka.ex Advent Calendar、Webテクノロジーカテゴリで堂々1位 … 各コラムぜひお読みください
https://qiita.com/advent-calendar/2020/fukuokaex
image.png

そして、プログラミング言語カテゴリは、1位がRust、2位がElixir、3位がGoとモダン言語揃い踏みでのトップ3、熱いネー:laughing:
https://qiita.com/advent-calendar/2020/elixir
image.png

本コラムの検証環境

本コラムは、以下環境で検証しています(Windowsで実施していますが、Linuxやmacでも動作する想定です)

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に追加します(既に行ってる方は上書きしてください)

mix.exs
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を使うと、一発で通りました、やった:tada:

$ 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駆動を完了させ、ニューラルネットワーク開発入りたいですね

p.s.このコラムが、面白かったり、役に立ったら…

image.pngimage.png にて、どうぞ応援よろしくお願いします:bow:

9
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?