WSL(Ubuntu)にCUDAをインストール

ホスト(Windows11)にインストールしたWSLに、CUDAをインストールします。ただし、CUDAをWSLで使うには、WindowsのバージョンはWindows 10 Insider Preview Build 20150以降またはWindows 11が必要です。ですのでWindows10の場合、まだサポートが切れていないWindows 10、Version 22H2でも大丈夫です。また、NVIDIAのGPUドライバも必要です。具体的には、WSL2と互換性のあるNVIDIAドライバをインストールしておく必要があります。
https://learn.microsoft.com/en-us/windows/ai/directml/gpu-cuda-in-wsl

WSL 2(Windows Subsystem for Linux 2)上でCUDAを使用することにはいくつかの利点があります。

1. 統合環境

  • WindowsとLinuxの両方で作業ができるため、開発環境が統合されます。これにより、Windowsでの作業とLinuxでの作業をスムーズに行いやすくなります。

2. シームレスな移行

  • 既存のLinuxベースのCUDAアプリケーションを、特別な変更を加えることなくWindows上で動かすことができます。

3. デバッグとテスト

  • WSL 2上でCUDAアプリケーションをテストすることで、Linux環境での動作を確認しながら、Windows上でのデバッグやその他の作業を続けることができます。

4. リソースの効率的な利用

  • WSL 2はWindowsとリソース(CPU、メモリ、ディスクなど)を共有するため、別途Linuxマシンを用意する必要がありません。

5. ソフトウェアの互換性

  • 一部の科学計算やデータ解析、機械学習のライブラリはLinux環境でしか利用できない場合があります。WSL 2を使用することで、これらのライブラリをWindowsマシン上で利用できます。

6. 開発のスピードアップ

  • WSL 2上でCUDAを使用することで、コードのビルドからテスト、デバッグまでのサイクルを高速化できます。

Windows11はNVIDIAのグラボを搭載しています。NVIDIA GPU用のドライバーをWindowsにインストールしておきます。この状態では、WSLをインストールしたてでもGPUを認識しています。下記のコマンドで確認します。NVIDIA GPUの状態を表示するツールです。

nvidia-smi

次のように表示されます。

+—————————————————————————————+
| NVIDIA-SMI 535.98.01 Driver Version: 536.99 CUDA Version: 12.2 |
|—————————————–+———————-+———————-+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 NVIDIA GeForce RTX 4060 … On | 00000000:01:00.0 Off | N/A |
| N/A 43C P8 1W / 120W | 102MiB / 8188MiB | 0% Default |
| | | N/A |
+—————————————–+———————-+———————-+

+—————————————————————————————+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| 0 N/A N/A 23 G /Xwayland N/A |
+—————————————————————————————+

nvidia-smi(NVIDIA System Management Interface)を実行すると、システム上のNVIDIA GPUに関する詳細な情報が表示されます。以下は、一般的に表示される主な情報です:

1. ドライババージョン

  • インストールされているNVIDIAドライバのバージョン。

2. GPUの識別情報

  • GPUの名前、ID、バスIDなど。

3. GPUの使用状況

  • GPUの使用率(%)、メモリ使用量(MB)、温度(℃)など。

4. プロセス情報

  • GPUを使用しているプロセスのID、名前、メモリ使用量。

5. 電力とクロック

  • GPUの電力使用量(W)、クロック速度(MHz)。

6. ファン速度

  • GPUのファンの回転速度(%またはRPM)。

7. その他の設定とステータス

  • ECCエラーの有無、パフォーマンスモード、コンピュートモードなど。

これらの情報は、GPUの健康状態を確認したり、パフォーマンスのボトルネックを特定したり、リソースの使用状況をモニターしたりする際に非常に有用です。特に、機械学習やデータ解析、ゲーム、グラフィックスレンダリングなど、GPUリソースを積極的に使用するアプリケーションの開発や運用において、nvidia-smiは頻繁に使用されるツールです。

しかし、ここで疑問が。WindowsにGPUドライバはインストールしたが、CUDAがインストールしていない状況では、WSLにCUDAをインストールすれば効果はみこめるかということです。
調査していると、どうもこの状況下でも効果はあるようです。Windows上でNVIDIA GPUドライバがインストールされている場合、WSL2はそのドライバを使用してGPUにアクセスします。したがって、WSL内でCUDA Toolkitをインストールすれば、WSL環境内でCUDAベースのワークロードを実行することができるというものです。

ということでWSL内でCUDA Toolkitをインストールします。
https://developer.nvidia.com/cuda-toolkit

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
wget https://developer.download.nvidia.com/compute/cuda/12.2.1/local_installers/cuda-repo-wsl-ubuntu-12-2-local_12.2.1-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-12-2-local_12.2.1-1_amd64.deb
sudo cp /var/cuda-repo-wsl-ubuntu-12-2-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda

一度シャットダウンします。

sudo shutdown now

起動後に次のコマンドで確認します。

nvcc は NVIDIA CUDA Compiler のコマンドラインツールです。CUDAプログラムをコンパイルするために使用されます。

-V オプションは、nvcc のバージョン情報を表示するためのものです。

したがって、nvcc -V コマンドを実行すると、インストールされているCUDAコンパイラのバージョン情報やリリース日などが表示されます。これにより、システムにどのバージョンのCUDAがインストールされているかを確認することができます。

nvcc -V

エラーが発生しました。

Command 'nvcc’ not found, but can be installed with:
sudo apt install nvidia-cuda-toolkit

次のコマンドで確認します。

/usr/local/cuda/bin/nvcc -V コマンドは、指定されたパス(/usr/local/cuda/bin/)にある nvcc ツールを使用して、バージョン情報を表示するコマンドです。

具体的には:

  • /usr/local/cuda/bin/: これは一般的にCUDA Toolkitがインストールされるデフォルトのディレクトリの中の bin ディレクトリへのパスを示しています。このディレクトリ内にはCUDA関連の実行可能ファイルやツールが含まれています。
  • nvcc: NVIDIA CUDA Compilerの実行可能ファイルです。
  • -V: nvccのバージョン情報を表示するオプションです。

したがって、/usr/local/cuda/bin/nvcc -V コマンドを実行すると、/usr/local/cuda/bin/ パスにインストールされているCUDAコンパイラのバージョン情報が表示されます。これは、特定のパスにインストールされているCUDAのバージョンを確認するために使用されることが多いです。

/usr/local/cuda/bin/nvcc -V

気になる方は次のコマンドを入力します。シェルの起動時に環境変数を設定するためのコマンドを ~/.bashrc ファイルに追加するものです。これらのコマンドはエディタを開いて編集せずに、 ~/.bashrc ファイルに直接追加されます。

echo 'export PATH="/usr/local/cuda/bin:$PATH"' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"' >> ~/.bashrc
  1. echo 'export PATH="/usr/local/cuda/bin:$PATH"' >> ~/.bashrc:
    • このコマンドは、/usr/local/cuda/bin ディレクトリを PATH 環境変数の先頭に追加します。
    • PATH は、実行可能ファイルを検索するディレクトリのリストを保持する環境変数です。この変更により、CUDAの実行可能ファイルがこのディレクトリ内にある場合、ユーザーはフルパス(/usr/local/cuda/bin/nvcc -Vではなくnvcc -Vが可能になる)を指定せずにそれらのファイルを実行できるようになります。
  2. echo 'export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"' >> ~/.bashrc:
    • このコマンドは、/usr/local/cuda/lib64 ディレクトリを LD_LIBRARY_PATH 環境変数の先頭に追加します。
    • LD_LIBRARY_PATH は、Linuxシステムで動的ライブラリを検索するためのディレクトリのリストを保持する環境変数です。この変更により、CUDA関連の動的ライブラリがこのディレクトリ内にある場合、実行時にそれらのライブラリが正しくロードされるようになります。

これらのコマンドを実行することで、CUDAのツールやライブラリが正しく動作するための環境が整います。ログアウトせずにすぐに確認したい方は、~/.bashrc ファイルを再読み込みすることで、これらの変更が適用されます。

. ~/.bashrc

.bashrcファイルとは

.bashrc ファイルは、Bashシェルがインタラクティブモードで起動する際に読み込まれるスクリプトファイルです。このファイルは通常、ユーザーのホームディレクトリ(~)に配置されています。.bashrc ファイルを編集することで、シェル環境をカスタマイズしたり、特定のコマンドを自動的に実行したりすることができます。

具体的には、.bashrc ファイルでは以下のような設定やカスタマイズが行われることが一般的です:

  • 環境変数の設定:例えば、PATHLD_LIBRARY_PATH など。
  • エイリアスの設定:頻繁に使用するコマンドの短縮形を定義。
  • シェルプロンプトのカスタマイズ。
  • その他、シェル起動時に自動的に実行したい任意のコマンド。

先ほどのコマンド(echo 'export PATH="/usr/local/cuda/bin:$PATH"' >> ~/.bashrc など)では、CUDA関連のディレクトリを環境変数に追加しています。これにより、新しいターミナルセッションが開始される度に、これらの環境変数が自動的に設定されるようになります。

この設定が反映されるには、通常、新しいターミナルウィンドウを開くか、source ~/.bashrc コマンドを実行して .bashrc ファイルを再読み込みする必要があります。

WSLにCUDAをインストールする必要がない場合は下記が考えられます。

DockerをWSL上で使用し、Dockerコンテナ内でGPUを使用する場合、NVIDIA Container Toolkitをインストールすることで、DockerコンテナがホストのGPUを利用できるようになります。この設定を完了すると、コンテナ内でCUDAベースのアプリケーションやツールを実行することができます。

しかし、次の点を考慮する必要があります:

  1. コンテナ内でのCUDA: DockerコンテナがGPUを利用するためには、そのコンテナイメージにCUDAが組み込まれている必要があります。多くの公式のディープラーニングやGPU計算のDockerイメージ(例:nvidia/cuda)は、すでにCUDAとその他の必要なツールがインストールされています。
  2. WSL上のCUDA: WSL(Ubuntu)自体にCUDAをインストールする必要は基本的にありません。なぜなら、実際のGPUの計算はDockerコンテナ内で行われるためです。ただし、WSL上でCUDAベースのツールやアプリケーションを直接実行する場合(Dockerを使用せずに)は、WSLにCUDAをインストールする必要があります。
  3. 互換性: 使用しているDockerイメージのCUDAバージョンと、ホストシステムのNVIDIAドライババージョンが互換性があることを確認してください。

要するに、Dockerコンテナ内でのみGPUベースのワークロードを実行する場合、WSL上にCUDAをインストールする必要はありません。しかし、WSL自体でCUDAワークロードを実行する場合は、CUDAのインストールが必要です。

教育

Posted by admin