Conda を使って Windows Subsystem Linux(WSL)でディープラーニング用 GPU をサポートする

このメモでは、WSL ターミナルから Windows 側の Conda と Python の実行ファイルを呼び出すことで、GPU アクセラレーション対応のディープラーニングツールを使う実践的な方法を説明します。これを書いた当時、WSL 内で直接実行される Linux バイナリから CUDA GPU へアクセスすることはできませんでした。そのため、信頼できる回避策は Windows に CUDA、cuDNN、Conda、TensorFlow をインストールし、WSL シェルから Windows の実行ファイルを呼び出すことでした。

0. WSL、Xfce、VcXsrv をインストールする

GUI サポートが必要な場合は、WSL と、Xfce のような軽量な Linux デスクトップ環境をインストールします。Windows に VcXsrv をインストールして起動し、その後 WSL から Xfce を起動します。

startxfce4

ターミナルベースの Python スクリプトやノートブックだけが必要な場合、デスクトップ環境は任意です。

1. Windows に Miniconda をインストールする

Windows 版 Miniconda をインストールし、Windows のコマンドラインから condapython を利用できるようにするインストーラーオプションを選択します。重要なのは、Conda を WSL 内だけでなく Windows 側にインストールすることです。GPU 対応 TensorFlow パッケージは、Windows の NVIDIA ドライバーと CUDA ライブラリを使用するためです。

インストール後、Windows PowerShell またはコマンドプロンプトから Conda が動作することを確認します。

conda --version
python --version

2. WSL にエイリアスを追加する

WSL で入力したコマンドが Windows 側の実行ファイルを呼び出すように、~/.bashrc の末尾にエイリアスを追加します。

alias python="python.exe"
alias conda="conda.exe"
alias ipython="ipython.exe"
alias nosetests="nosetests.exe"
alias pip="pip.exe"

シェル設定を再読み込みします。

source ~/.bashrc

次に、WSL が Windows のツールを解決していることを確認します。

which python
python --version
conda --version

3. TensorFlow GPU サポートをインストールする

WSL から Conda 環境を作成します。上記のエイリアスにより、ここでも Windows 側の Conda が使われます。

conda create -n tf-gpu python=3.6
conda activate tf-gpu
pip install tensorflow-gpu

古い TensorFlow リリースでは、必要な CUDA と cuDNN のバージョンを TensorFlow のビルドに合わせる必要があります。インストールに失敗する場合や、TensorFlow が GPU ライブラリを読み込めない場合は、TensorFlow のバージョン互換表を確認し、対応する CUDA と cuDNN のバージョンを Windows にインストールしてください。

4. Windows に CUDA サポートをインストールする

Windows に NVIDIA GPU スタックをインストールします。

  • NVIDIA GPU drivers — CUDA 9.0 にはドライバーバージョン 384.x 以上が必要です。
  • CUDA Toolkit — 古い TensorFlow GPU ビルドでは CUDA 9.0 がよく使われていました。
  • CUPTI — CUDA Toolkit に同梱されています。
  • cuDNN SDK — 互換性のある古いビルドでは 7.2 以降など、TensorFlow リリースが要求する cuDNN バージョンを使用します。

これらのパッケージをインストールした後、CUDA と cuDNN の DLL ディレクトリが Windows の PATH で利用できることを確認してください。

5. WSL から Python スクリプトを実行する

通常どおり WSL ターミナルからスクリプトを実行します。

python train.py

このコマンドは python.exe によって実行されるため、WSL シェルから起動されていても Windows の Python プロセスとして動作します。

TensorFlow から GPU が見えているかどうかは、次のコードで確認できます。

import tensorflow as tf
print(tf.test.is_gpu_available())

新しい TensorFlow 2.x 環境では、次を使用します。

import tensorflow as tf
print(tf.config.list_physical_devices('GPU'))

P.S. Hyper Terminal を使うと、ターミナル体験を改善できます。

Leave a Reply