WSL2でRAPIDSのcuDFを動かす

重いDataFrame処理をしているので、RAPIDSのcuDFに興味があります。Windowsで使えるようにしてみます。

以下の流れでRAPIDSしてみます。

  • 自分のPC環境でRAPIDSが使えるか確認する。
  • RAPIDSをインストールする。
  • WSL2でGPUを使えるようにする。
  • cuDFを使う。

RAPIDS を使える環境

2025年8月時点では、RAPIDSはLinuxとWSL2上でのみ使えます。私のPCはWindowsなのでWSL2で環境構築していきます。

RAPIDSが動作可能な環境を見ておきます。
https://docs.rapids.ai/install/#wsl2

> wsl --version
WSL バージョン: 2.5.9.0
$ cat /etc/issue
Ubuntu 24.04.2 LTS \n \l

私の環境は Windows11WSL2 をインストール済で Ubuntu 24.04.2 でした。

搭載GPU は NVIDIA GeForce RTX 3050 なので Compute Capability は 8.6 です。
https://developer.nvidia.com/cuda-gpus

RAPIDSの制約を満たしているので、RAPIDSできそうです。

GPU情報

nvidia-smi で見てみます。

  • NVIDIA Driver Version: 576.02
  • CUDA Version: 12.9

CUDA Version が 12.9 になっていますが、これは Ubuntu にインストールしたバージョンではなく、NVIDIA ドライバーがサポートする最新の CUDA のバージョンという意味です。

RAPIDS インストール

RAPIDSのサイトでインストール環境を選択し、インストールコマンドを生成します。
https://docs.rapids.ai/install/#selector

生成されたコマンドをコピーして、Ubuntuで実行します。

完了後、pip list するとかなりのモジュールがインストールされていました。

LinuxにCUDA Toolkitのインストール

先にCUDAがインストールされているか nvcc –version で確認します。

インストールしていないので、not found になりました。

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

CUDA Toolkit のバージョン選択

RAPIDS のサイトを見てみます。
https://docs.rapids.ai/install/#selector

動作確認済みのCUDAのバージョンが書かれていました。

最新の CUDA 12.9 でもいいのですが、CUDA 12.5 にしようと思います。

ブラウザで cuda toolkit archive と打ち、バージョン一覧を見てみます。CUDA Toolkit 12.5.1 をインストールします。
https://developer.nvidia.com/cuda-toolkit-archive

CUDA Toolkit 12.5.1 のインストール

NVIDIA のダウンロードページに行き、環境を選択し、ダウンロードコマンドを決定します。
https://developer.nvidia.com/cuda-12-5-1-download-archive

いろいろな参考サイトを見ると sudo apt install cuda-toolkit-12-5 だけで終わらせていますが、複数コマンドを打つように指示されます。

Base Installer です。

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-ubuntu2404.pin
sudo mv cuda-ubuntu2404.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/12.5.1/local_installers/cuda-repo-ubuntu2404-12-5-local_12.5.1-555.42.06-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2404-12-5-local_12.5.1-555.42.06-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2404-12-5-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-5

Driver Installer のコマンドも表示されましたが、kernel module flavoropen/legacy のどちらを選べば良いのかわかりませんでしたが、バージョン指定しない方を実行します。

sudo apt-get install -y cuda-drivers

環境変数の設定

CUDA のパスを PATH 設定に追加するのですが、いくつか問題に直面したので対処方法を書きます。

WindowsのPATH設定を引き継がない

Ubuntuで PATH 設定を見ると、/mnt/c/Program Files/… みたいなのがいくつかあり、Windows 側の PATH 設定を持ってきているようです。

$ echo $PATH | tr ':' '\n'

CUDA は Ubuntu 側でインストールして、/usr/local/cuda にあるのでこちらを見るようにしたいです。

このサイトを参考にしました。
WSL2でWindowsのPATH設定が引き継がれるのを解除する
https://zenn.dev/o2z/articles/zenn-20210524-01

wsl.conf を書き換えて、以下を末尾に追加します。

[interop]
appendWindowsPath = false

wsl.conf は ReadOnly っぽいので sudo 付きで変更します。

$ sudo vim /etc/wsl.conf

ここで Windows を再起動します。再起動後に PATH 設定を確認して、引き継がなくなっていることを確認しました。

Ubuntu起動時に.bashrcが読み込まれない

.bashrc に PATH 設定を書いても効かなかったので原因を調査しました。

こちらのサイトを参考にしました。
WSLのUbuntu起動時に.bashrcが読み込まれない
https://scrapbox.io/ryoheimorimoto/WSL%E3%81%AEUbuntu%E8%B5%B7%E5%8B%95%E6%99%82%E3%81%AB.bashrc%E3%81%8C%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BE%E3%82%8C%E3%81%AA%E3%81%84

.bash_profile があると .bashrc が読み込まれないらしい。

.bash_profile は pyenv 対応したときに作成して追加したようです。

.bash_profile に以下を追加して対応しました。

$ vim ~/.bash_profile
if [[ -f ~/.bashrc ]] ; then
    . ~/.bashrc
fi

PATHにCUDAを追加する

.bashrc を編集して、最後尾に下記2行を追加しました。

$ vim ~/.bashrc
export PATH="/usr/local/cuda/bin${PATH:+:${PATH}}"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}"

PCを再起動して Ubuntu でnvcc –version してみます。CUDA へのパスは通っていました。

$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on Thu_Jun__6_02:18:23_PDT_2024
Cuda compilation tools, release 12.5, V12.5.82
Build cuda_12.5.r12.5/compiler.34385749_0

CUDA のインストールではいろいろとわからないことに出くわすので、参考にしたサイトを残しておきます。
NVIDIA Driver, CUDA, cuDNNのインストールをAPTでサクッと済ませる – Ubuntu Linux
https://zenn.dev/pon_pokapoka/articles/nvidia_cuda_install

cuDFの動作確認

ここまでで、Linux に RAPIDS と CUDA Toolkit をインストールすることができました。

cuDFのパフォーマンスを見てみましょう。PythonコードはCopilotが書いてくれました。

import cudf
import pandas as pd
import numpy as np

# ランダムなデータを作成
df_cpu = pd.DataFrame({
    'a': np.random.rand(1000000),
    'b': np.random.rand(1000000)
})

# pandasからcuDFに変換(GPUに載せる)
df_gpu = cudf.from_pandas(df_cpu)

# 処理時間を比較
import time

start = time.time()
result_cpu = df_cpu.groupby('a')['b'].sum()
print("CPU処理時間:", time.time() - start)

start = time.time()
result_gpu = df_gpu.groupby('a')['b'].sum()
print("GPU処理時間:", time.time() - start)

結果です。CPUとGPUの処理性能の差です。

CPU処理時間: 0.1407005786895752
GPU処理時間: 0.032184600830078125

今回の処理では、4~5倍くらいの高速化が実現できてそうです。

劇的に高速化している結果ではありませんでした。考えられるのは、今回のPythonコードはGoogleDriveに置いておいて、UbuntuでGoogleDriveをマウントさせて、そこで実行したことが影響しているのかもしれません。