AIモデルを使うための下準備忘備録 GPU環境を構築1(ドライバー導入)

純正UBUNTUとWindows 11上でのWSLの２パターンでGPU付きの環境にCUDA、CUDNNをいれて学習環境を構築する方法をまとめました。(2024/12/17時点での情報です、ドライバーやCUDA, PythonやPyTorchのバージョンは更新が激しいので常に最新のものをチェックするようにしてください)
POCとして実験する程度であればGoogle COLABやAWS SAGEMAKERなどで動かせばいいのかもしれませんが時間当たりの課金やセッションの時間切れバックエンドでうごかせる時間に制限があるなど、時間を気にせず数週間でも学習をつづけられる環境が欲しかったため作成しました。

## UBUNTUでGPUを使ってPYTOCHで学習推論させるための準備 (2024/12/17で最新Ubuntu24.04想定)
方法１:直接ローカルマシンにUBUNTUをいれる（推奨）
方法2: Windows 11のWSL2を使う
     （バックで学習JOBを動かしながらもWindows上で作業もしたい場合）

### 方法１:UBUNTUをマシン上にインストールしたときのドライバーの設定
- Ubuntu 24.04がすでにインストール済の前提で説明します
- まずはGPUがOSから認識できているか確認します. 以下の例ではT4がはいっていることが確認できます。
```
# lspci | grep -i nvidia
00:1e.0 3D controller: NVIDIA Corporation TU104GL [Tesla T4] (rev a1)
```
- 次にドライバーを選定します
```
# apt install ubuntu-drivers-common
# ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:1e.0 ==
modalias : pci:v000010DEd00001EB8sv000010DEsd000012A2bc03sc02i00
vendor   : NVIDIA Corporation
model    : TU104GL [Tesla T4]
driver   : nvidia-driver-535-server - distro non-free
driver   : nvidia-driver-470 - distro non-free
driver   : nvidia-driver-470-server - distro non-free
driver   : nvidia-driver-535 - distro non-free recommended
driver   : xserver-xorg-video-nouveau - distro free builtin
```
- recommendedされている nvidia-driver-535 をインストールします
```
# apt install nvidia-driver-535
```
- 一応再起動しておきましょう
- (2025/03/27追記）オンプレでの追加確認事項
◇**Secure Boot がオフになっていること**
Secure Boot が有効の場合、署名済みカーネルモジュールのみが読み込まれるため、公式ドライバーの手動インストールでも同様の問題が発生する可能性があります。Secure Boot を無効にしてください。
SSHのシェルアクセスでは変更はできませんが以下の手順で確認できます。
(Disabledとなっていた場合は再起動時にBIOS/UEFIに入って変更が必要です)
```
# apt install mokutil
# mokutil --sb-state
```
◇**Nouveau ドライバーのブラックリスト化**
Nouveau が競合している場合、公式ドライバーが正しくロードされないことがあるため、事前に Nouveau をブラックリストに追加しておく必要があります。その後再起動します。
```
# update-initramfs -u
# reboot
```
-起動後にnvidia-smiでGPUが認識されているかチェックします
```
# nvidia-smi
Tue Dec 17 16:37:18 2024
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.183.01             Driver Version: 535.183.01   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  Tesla T4                       Off | 00000000:00:1E.0 Off |                    0 |
| N/A   19C    P8              11W /  70W |      2MiB / 15360MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+

+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|  No running processes found                                                           |
+---------------------------------------------------------------------------------------+
```
### 方法2:Windows 11のWSL2を使う
WSLではドライバーはWINDOWSに直接インストールします。自分も色々調べてネットの情報などではCUDAインストールとドライバーのインストールの混同された記述が見受けられ私も少し迷いましたが、結果
ドライバーのインストールだけWINDOWS上でおこないCUDA、CUDNNなどのインストールはWSLのUBUNTU内で実施します。WINDOWSでインストールが必要なのはDRIVERにみです。PCの出荷時点で、ドライバーがすでに入っている場合もあるため、WindowsのCMDでnvidia-smiを実行して問題なければWSLでも実行してみまよう
```
C:\Users\takeofuture> nvidia-smi
Tue Dec 17 08:44:36 2024
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 556.12                 Driver Version: 556.12         CUDA Version: 12.5     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                  Driver-Model | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA T1200 Laptop GPU      WDDM  |   00000000:01:00.0 Off |                  N/A |
| N/A   45C    P8              4W /   45W |       0MiB /   4096MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|  No running processes found                                                             |
+-----------------------------------------------------------------------------------------+
```
ドライバーが見当たらない場合は以下のページで自分の環境にあったドライバーをインストールしましょう
https://www.nvidia.com/en-us/drivers/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3955606/a3c4b78b-f0e9-3611-0bbe-3a9b98032754.png)

ドライバーをインストールしたら一応再起動して、WSLをインストールします。私はwslコマンドだけではうまくいかずまず最初にGUIの設定画面で設定しました
- 「Turn Windows features on or off」設定を開く
- スタートメニューで「Turn Windows features on or off」と検索。
-「Windows Subsystem for Linux」にチェックを入れる
- ついでに、「Virtual Machine Platform」にもチェックを入れておくとWSL2を利用可能にできます。
- 再起動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3955606/73c64c1f-bd48-2db3-ff33-d1523f931bf9.png)

- 再起動したらまずcmd.exeでwslを最新にしておきます(これがないとエラーになる場合があります)
```
C:\Users\takeofuture> wsl --update
```
- その上でインストール可能なOS一覧をだします
```
C:\Users\takeofuture> wsl -l -o  
```
-　インストールを実施します
```
C:\Users\takeofuture> wsl –install -d Ubuntu-24.04
```
- ローカルにインストールがされたことを確認します
```
C:\Users\takeofuture> wsl -l -v  
```
- WSLでインストールしたUbuntuにログインします
```
C:\Users\takeofuture> wsl -d Ubuntu-24.04
```
- ログイン後nvidia-smiが起動できればOK
ちなみに、WSLの場合nvidia-smiは
/usr/lib/wsl/lib/nvidia-smi
にはいってました。ユーザをrootにきりかえたときにnvidia-smiが認識されなかったので別ユーザーで作業するときは/usr/lib/wsl/lib/nvidia-smi の　PATHを/etc/environment　や　/etc/profile などでマシン全体に適用したほうが便利かもしれません。

所感：やはりwslですと作業しながら軽い推論JOBを流す程度であればいいですが重い推論や学習などは厳しい気がしました。専用マシンとして直接UbuntuのOSを入れたほうが個人的にはいいような気がしました。また実演するため手元のWINDOWS　PCでWSL設定をシミュレートしましたがGPUメモリが4GBしかないためいまどきのモデルを動かすには不十分かもしれません。最低でもT4(16GB)は必要な気がします。

次はこの続きで、CUDA,CUDNN,PYTORCHの設定方法忘備録に続きます！
https://qiita.com/takeofuture/items/6da979bd66d2f13d5d43