この日記は WSL + CUDA 環境を構築しようとしているが以下の 2 点を怠っているために失敗している。
- Windows 11 もしくは Windows 10 version 21H2 をインストールする。
- NVIDIA CUDA on WSL driver をインストールする。
参考文献
- trax · PyPI
- Unable to pip install trax on local computer · Issue #282 · google/trax · GitHub
- GitHub - google/jax: Composable transformations of Python+NumPy programs: differentiate, vectorize, JIT to GPU/TPU, and more
- WSL のインストール | Microsoft Docs
- wsl2上で無料でCentOS8を動かそう | ソフトウェア開発のギークフィード
- Windows TerminalでWSL(2)で起動するLinuxのホームディレクトリを変更する - 技術的な何か。
- Ubuntu初心者がPython開発環境構築の初歩で詰まった2つのこと | DevelopersIO
- CUDA Toolkit 11.6 Update 2 Downloads | NVIDIA Developer
- CUDA on WSL :: CUDA Toolkit Documentation
- GitHub - NVIDIA/cuda-samples: Samples for CUDA Developers which demonstrates features in CUDA Toolkit
- 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 が必要かはわからない)。