この前買ったノートパソコンにGPUが付いていたので、せっかくだからこのGPUでPyTorchを動かしてみました。
今回はその時のセットアップの手順をまとめます。
(Windows11上で動かす前提です。WSL2の方はそのうち。)
環境
- ASUS Vivobook 16X
- NVIDIA GeForce RTX 4060 Laptop GPU
- Windows 11 Home
必要なもの一覧
- NVIDIA Driver
- CUDA
- cuDNN
- Python
- PyTorch
NVIDIA Driverのインストール
内蔵GPUだったせいかスタート>すべてのアプリ
の一覧の中にNVIDIA Contorol Panel
というものがあって、既にNVIDIA Driverが入っているみたいです。
バージョンは528.96だそうです。
一応公式サイトで最新バージョンか確認してみます。
https://www.nvidia.co.jp/Download/index.aspx?lang=jp
最新版は546.01みたいです。更新しましょう。
NVIDIA Driverの更新はGeForce Experience
というアプリを使うのが主流のようですが、アカウント登録が必要だったり面倒なので、公式サイトから直接インストーラをダウンロードします。
後の工程で結局アカウント登録が必要になるので、ここで登録してしまって良いと思います。
さっきのページから落としてきたインストーラを実行します。
特に特別な操作はなく完了します。
再度NVIDIA Contorol Panel
を開いて確認します。
546.01になりました。
一応再起動をしてNVIDIA Driverの更新は完了です。
CUDAのインストール
もう一度NVIDIAの公式サイトへ行ってCUDA Toolkitのインストーラを配布しているページを開きます。
https://developer.nvidia.com/cuda-downloads
インストーラを実行するとさっきと似たような画面が出てくるので、似たような感じで操作すれば完了します。
エラーが出ました。
Nsight Computeというやつで失敗しているようです。
調べてみるとNsight ComputeはVisual StudioでCUDAを使うときに必要なもののようで、今回は不要そうです。
インストーラオプションのカスタムからNsight Computeのチェックを外してもう一度やってみます。
できました。
システム環境変数にもPathが通っています。
PowerShellからもバージョンが確認できました。
> nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Fri_Nov__3_17:51:05_Pacific_Daylight_Time_2023
Cuda compilation tools, release 12.3, V12.3.103
Build cuda_12.3.r12.3/compiler.33492891_0
念のためもう一度再起動してCUDAのインストールは完了です。
cuDNN
cuDNNのページへ行き、インストーラをダウンロードしてきます。
https://developer.nvidia.com/cudnn
アカウント登録を求められました。
登録しないと無理そうなので登録します。
そのあとダウンロードページを開けるようになるので、自分の環境に合ったパッケージを選びます。
Zipがダウンロードされるので展開します。
展開するとLICENSE、include、lib、binというファイルやディレクトリがあるので、これを適当な場所へ移動します。
今回はC:\Program Files\NVIDIA GPU Computing Toolkit\cuDNN\v12.3
のディレクトリを作ってここへ移動しました。
次にPathを通してあげます。
システム環境変数の「Path」の編集からさっき移動したディレクトリのうち、binまでのパスを追加してあげます。
(今回追加したのは3つ目で、上2つはCUDAのインストールの時に勝手に追加してもらったものです。)
一応Pathが通っていることをPowerShellで確認。
> where cudnn64_8.dll
C:\Program Files\NVIDIA GPU Computing Toolkit\cuDNN\v12.3\bin\cudnn64_8.dll
大丈夫そうですね。もう一度再起動してcuDNNのインストールは完了です。
Pythonのインストール
今回はpyenvを使います。pyenvはPythonのバージョンを簡単に切り替えられて便利です。
pyenvはターミナルの動作が重くなって使いたくないという人は、バージョンを切り替えるたびにPythonを再インストールすれば良いと思います。
pyenv-winのGitHubページを参考にインストールします。
https://github.com/pyenv-win/pyenv-win
# インターネットからダウンロードしてきた署名あり実行ファイルに対する実行権限を現在のユーザに与えます
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# pyenv-win のダウンロードとインストール
Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"
PowerShellを再度立ち上げて、pyenvのバージョンを確認してインストールが完了していることが確認できました。
Path周りは勝手にやってくれているみたいです。
> pyenv --version
pyenv 3.1.1
インストール可能なPythonバージョンを見てみます。
> pyenv install -l
2.4-win32
2.4.1-win32
2.4.2-win32
2.4.3c1-win32
(中略)
3.12.0-arm
3.12.0-win32
3.12.0
3.13.0a1-win32
3.13.0a1-arm
3.13.0a1
最新の3.12.0をインストールしたいところですが、PyTorchのサイトを確認すると執筆時の時点でPyTorchがサポートしているのは3.11までのようですので、3.11.6をインストールしてデフォルトに設定します。
# Python3.11.6をインストール
> pyenv install 3.11.6
:: [Info] :: Mirror: https://www.python.org/ftp/python
:: [Downloading] :: 3.11.6 ...
:: [Downloading] :: From https://www.python.org/ftp/python/3.11.6/python-3.11.6-amd64.exe
:: [Downloading] :: To C:\Users\-\.pyenv\pyenv-win\install_cache\python-3.11.6-amd64.exe
:: [Installing] :: 3.11.6 ...
:: [Info] :: completed! 3.11.6
# 3.11.6をデフォルトに設定
> pyenv global 3.11.6
# Pythonバージョンの確認
> python -V
Python 3.11.6
適当な作業ディレクトリを作り、そこに仮想環境を構築することにします。
> mkdir sandbox
> cd sandbox
# このディレクトリのPythonバージョンを3.11.6に指定
> pyenv local 3.11.6
# 仮想環境を「.env」の名前で作成
> python -m venv .env
# 仮想環境のアクティベート
> .\.env\Scripts\activate
# pipのアップグレード
(.env) > python -m pip install -U pip
これでPythonの下準備は完了です。
PyTorchのインストール
PyTorchの公式サイトを参考に、インストールコマンドを調べます。
CUDA12.3が選択できないようなので12.1でやってみます。また、pip3'の部分は
pip`へ変更しました。
(.env) > pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
インストールが終わったらpython
コマンドでPythonを立ち上げて、PyTorchとGPUが使えることが確認します。
import torch
# 初回だったからかここで5分ぐらいかかりました。
torch.cuda.is_available()
# -> True
# torch.cuda.is_available()はあまり信用していないので、実際にテンソルをGPUへ送って確認します。
torch.tensor([0.1, 0.2], device=torch.device('cuda:0'))
# -> tensor([0.1000, 0.2000], device='cuda:0')
大丈夫そうですね。
サンプルコードでテストラン
こちらのサンプルコードを拝借して、GPUを使うことでちゃんと速くなっているのか確認します。
https://imagingsolution.net/deep-learning/pytorch/pytorch_mnist_sample_program/
デバイス | 実行時間 |
---|---|
CPU | 9分35秒 |
GPU | 1分18秒 |
とても速い。
GPUを使った時のタスクマネージャーの様子。「3D」のところの稼働率が上がっていてGPUが使われている感じがあります。
結論
ノートパソコン内蔵のGPUでもちゃんと機械学習に使えました。
ただ、冷却能力はたかが知れているので燃やさないように気を付けましょう。