雑記

この日記は WSL + CUDA 環境を構築しようとしているが以下の 2 点を怠っているために失敗している。自分では前者が満たされていなかったと思っていたが後者もインストールしていなかったので前者は満たされていたかもしれない。なお、後でみつけたが以下の Microsoft Docs に WSL 導入前に上の 2 点をクリアするようにかいてある。

参考文献

  1. trax · PyPI
  2. Unable to pip install trax on local computer · Issue #282 · google/trax · GitHub
  3. GitHub - google/jax: Composable transformations of Python+NumPy programs: differentiate, vectorize, JIT to GPU/TPU, and more
  4. WSL のインストール | Microsoft Docs
  5. wsl2上で無料でCentOS8を動かそう | ソフトウェア開発のギークフィード
  6. Windows TerminalでWSL(2)で起動するLinuxのホームディレクトリを変更する - 技術的な何か。
  7. Ubuntu初心者がPython開発環境構築の初歩で詰まった2つのこと | DevelopersIO
  8. CUDA Toolkit 11.6 Update 2 Downloads | NVIDIA Developer
  9. CUDA on WSL :: CUDA Toolkit Documentation
  10. GitHub - NVIDIA/cuda-samples: Samples for CUDA Developers which demonstrates features in CUDA Toolkit
  11. CUDA sample throwing error - #40 by jeanmonet - CUDA on Windows Subsystem for Linux - NVIDIA Developer Forums

手元の Windows 10 に Trax [1] を pip install すると失敗することがわかる。
エラーメッセージで調べると JAX を別途明示的にインストールしなければならなさそうにみえる [2]。
なので JAX [3] の README をみにいくとそこに以下の記述をみつける。

JAX provides pre-built CUDA-compatible wheels for Linux only,
Windows users can use JAX on CPU and GPU via the Windows Subsystem for Linux. There is some initial native Windows support, but since it is still somewhat immature, there are no binary releases and it must be built from source.

そういうわけで native Windows での実行をあきらめて WSL を導入する。このマシンにまだ WSL を導入したことがないのでドキュメント [4] をみにいく。このマシンは「ビルド 19041 以降」の要件を満たしているので管理者の PowerShell で wsl --install を実行するが、文字化けしていて成功したのかよくわからなかった気がする。ただ再起動して wsl -l -v を実行するとまだ何もディストリビューションが入っていないといった感じだったのでディストリビューションを選択することにする。CentOS を入れる方法もあるようだが [5]、WSL がよくわからないので利用人口の多そうな Ubuntu-20.04 を入れた。

また同時に Windows Terminal も入れた。入れなくても作業できるがシェル起動時のディレクトリを Linux 環境でのホームディレクトリにしたかった [6] ので導入した。

そういうわけで Linux 環境が構築できたのでともかく Python を入れたいが、既に Python 3.8.2 が入っていたので pip を入れる。参考文献 [7] の手順で sudo apt install python3-pip までのコマンドが通る。参考文献 [7] 通りに python3 と pip3 を python と pip にエイリアスして pip install --upgrade pip する。それから pip install pipenv する。このとき ~/.local/bin に PATH が通っていないという警告が出るが、~/.profile を確認すると ~/.local/bin があれば PATH に含めるとあるのでたったいま生成されたために警告が出たのだろうと考える。

そしていま一度 jax [3] の README をみにいくと WSL に CUDA を導入しなければならないことに気付く。WSL への CUDA の導入方法は、CUDA のページ [8] に行くと WSL-Ubuntu という選択肢があるのでインストールコマンドがわかる。なのでやはり Ubuntu を入れるべきだったようである。参考文献 [8] にしたがって sudo apt-get -y install cuda までのコマンドを入力する。

wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/7fa2af80.pub
sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/ /"
sudo apt-get update
sudo apt-get -y install cuda

インストールが成功したか知りたいが、参考文献 [9] によると参考文献 [10] にサンプルコードがある。かつては /usr/local/cuda/samples に同梱されていたが撤去されたようである。サンプルを実行してみる。

git clone https://github.com/NVIDIA/cuda-samples.git
cd cuda-samples/Samples/5_Domain_Specific/BlackScholes
make BlackScholes
./BlackScholes

が、これはエラーとなる。エラーメッセージを検索してたどり着く参考文献 [11] によると、Windows 11 もしくは Windows Insider Build が必要とのことである。よく読むと参考文献 [9] にもそうかいてある(注: これはこの日記を記した時点での思い込みであって他にもエラーになる要因があり、2022年4月現在 Winsows 10 に WSL + CUDA を導入するのに Windows Insider Build が必要かはわからない)