概要
Windows 11およびWindows10 22H2から、WSL2でCUDAが使用できるみたいなので、環境構築してみます。
似たようなことをしている良記事はたくさんありますが、アウトプットの場としてメモを残すのを目的としました。
環境
- Windows11
- WSL2 : Ubuntu22.04.1
やったこと
WSL2を使用できるようにする
ここに従って、wsl2をインストールします.
windowsのPowerShellやWindowsのコマンドプロンプトで以下を実行するだけでいいみたいです.
wsl --install
このコマンドを打つと、自動的にWSL2になるようです。
オプションでバージョンを1にできますが
CUDAの公式ガイドではWSL2を使用しているのでこのままでいきます。
また、Linuxのdistributionも選べますが、デフォルトのままUbuntuで行いました。
WSL2を使用した、CUDAの設定では以下のように5.10.16.3以上を進められています。
Ensure you are on the latest WSL Kernel or at least 4.19.121+. We recommend 5.10.16.3 or later for better performance and functional fixes.
なのでもし、以下のコマンドで表示されるカーネルバージョンが足りていなかったら
wsl --version
以下のコマンドでアップデートをしておくといいかもしれません。
wsl --update
CUDAの環境を整える
ガイドを参考に勧めます。
ガイドにはいろいろ書いているのですが、
NVIDIAのWindows Driverを使用したうえで
Option 1: Installation of Linux x86 CUDA Toolkit using WSL-Ubuntu Package - Recommended
で推奨されている手順をするのが良さそうなのでそれに従う方針でいきます。
NVIDIAのWindows Driverをインストール
まずは、Windows Driverをインストールします。
The latest NVIDIA Windows GPU Driver will fully support WSL 2.
とのことなのでリンク先から、環境にあったものをダウンロードします。
今回は以下の画像のような環境なのでこの条件でSearchを押して、表示されたものをダウンロードしました。(表示されているものは最新バージョン?)
なお、Download Type SDのほうが安定性と品質を優先されているとの説明があったのでSDを選択しました。


ダウンロードが完了したら、Launcherを起動してインストールを完了させます。
なお、インストール後には再起動が必要です。
CUDA Toolkitのインストール
推奨された方法に記載されているコマンドを実行していきます。
その前にまずは、書いているように以下を実行します
sudo apt-key del 7fa2af80
その後、以下を実行していきます。
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.0.0/local_installers/cuda-repo-wsl-ubuntu-12-0-local_12.0.0-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-12-0-local_12.0.0-1_amd64.deb
sudo cp /var/cuda-repo-wsl-ubuntu-12-0-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda
公式ガイドのOption2 の方法でもtoolkitはインストールできますが、注意書きによるとOption2の方法だと、先にインストールしたWidnowsのドライバを上書きしてしてしまうようです。
そのため、WSL2とWindows Driverを使う場合はOption1に従うのが無難です。
完了後、以下を実行しバージョン情報が出力されればインストールはできていそうです。
$ cat /usr/local/cuda/version.json
{
"cuda" : {
"name" : "CUDA SDK",
"version" : "12.0.0"
},
"cuda_cccl" : {
"name" : "CUDA C++ Core Compute Libraries",
"version" : "12.0.90"
},
"cuda_cudart" : {
"name" : "CUDA Runtime (cudart)",
"version" : "12.0.107"
},
"cuda_cuobjdump" : {
"name" : "cuobjdump",
"version" : "12.0.76"
},
"cuda_cupti" : {
"name" : "CUPTI",
"version" : "12.0.90"
},
"cuda_cuxxfilt" : {
"name" : "CUDA cu++ filt",
"version" : "12.0.76"
},
"cuda_demo_suite" : {
"name" : "CUDA Demo Suite",
"version" : "12.0.76"
},
"cuda_gdb" : {
"name" : "CUDA GDB",
"version" : "12.0.90"
},
"cuda_nsight" : {
"name" : "Nsight Eclipse Plugins",
"version" : "12.0.78"
},
"cuda_nvcc" : {
"name" : "CUDA NVCC",
"version" : "12.0.76"
},
"cuda_nvdisasm" : {
"name" : "CUDA nvdisasm",
"version" : "12.0.76"
},
"cuda_nvml_dev" : {
"name" : "CUDA NVML Headers",
"version" : "12.0.76"
},
"cuda_nvprof" : {
"name" : "CUDA nvprof",
"version" : "12.0.90"
},
"cuda_nvprune" : {
"name" : "CUDA nvprune",
"version" : "12.0.76"
},
"cuda_nvrtc" : {
"name" : "CUDA NVRTC",
"version" : "12.0.76"
},
"cuda_nvtx" : {
"name" : "CUDA NVTX",
"version" : "12.0.76"
},
"cuda_nvvp" : {
"name" : "CUDA NVVP",
"version" : "12.0.90"
},
"cuda_opencl" : {
"name" : "CUDA OpenCL",
"version" : "12.0.76"
},
"cuda_sanitizer_api" : {
"name" : "CUDA Compute Sanitizer API",
"version" : "12.0.90"
},
"libcublas" : {
"name" : "CUDA cuBLAS",
"version" : "12.0.1.189"
},
"libcufft" : {
"name" : "CUDA cuFFT",
"version" : "11.0.0.21"
},
"libcufile" : {
"name" : "GPUDirect Storage (cufile)",
"version" : "1.5.0.59"
},
"libcurand" : {
"name" : "CUDA cuRAND",
"version" : "10.3.1.50"
},
"libcusolver" : {
"name" : "CUDA cuSOLVER",
"version" : "11.4.2.57"
},
"libcusparse" : {
"name" : "CUDA cuSPARSE",
"version" : "12.0.0.76"
},
"libnpp" : {
"name" : "CUDA NPP",
"version" : "12.0.0.30"
},
"libnvjitlink" : {
"name" : "JIT Linker Library",
"version" : "12.0.76"
},
"libnvjpeg" : {
"name" : "CUDA nvJPEG",
"version" : "12.0.0.28"
},
"libnvvm_samples" : {
"name" : "NVVM Samples",
"version" : "12.0.94"
},
"nsight_compute" : {
"name" : "Nsight Compute",
"version" : "2022.4.0.15"
},
"nsight_systems" : {
"name" : "Nsight Systems",
"version" : "2022.4.2.18"
},
"nvidia_fs" : {
"name" : "NVIDIA file-system",
"version" : "2.14.12"
}
}