はじめに
CUDAのインストールを何度も繰り返しているので流石にそろそろ手順をまとめようと思って書いています。nvidia driver, cuda, cudnn, tensorRTをインストールすることを目的とします。
筆者もそんなに詳しくないので補足などあれば歓迎します。というか寧ろ教えてください。
また、手順書はメモからの転記の「である調」で書きます。
Autowareのsetup.shを用いたインストール
もし環境がまっさらの場合、Autowareのinstall processでROS2環境含め全部インストールすることが出来ます。
もし、ROS2環境を作っておいても良い容量の余裕があったり、デフォルトのPython環境をある程度いじられても良ければこちらでワンコマンドで終了する可能性もあるので是非試してみてください。
なお、本記事は上記の自動プロセスで謎にコケてしまったのが発端で書き始めています。
何かとよく叩くコマンド
今どうなっているっけ?となった場合のコマンド一覧
確認内容 | command | 一言 |
---|---|---|
driverのversion確認(古いものが残っているとうまく動かないことがあるのでその場合は再起動) | nvidia-detector |
あんま使わない |
接続されているハードウェアの確認 | lspci | grep -i nvidia |
最初だけ |
nvidia driverが正常に動いているか確認 | nvidia-smi |
よく使う。よくバグる。困ったら一旦再起動する。 |
nvidiaのソフトの残党を探す | dpkg -l | grep nvidia |
残党刈りに使う |
cudaの残党を探す | dpkg-query -l '*cudnn*' |
dpkg-queryでいちいちgrepしなくていいことに途中できづいた |
cudaのversion確認 | nvcc -V |
使う |
環境変数のcudaを確認 | printenv | grep cuda |
初めて使ったのでメモ |
参照ページ
NVIDIAのドライバまわりはバージョン同士の食い合わせの問題があるので公式の下記のページを見ると良いでしょう。
他の方の記事はこちら
0: 既存の環境を消し飛ばす
まっさらなPCのセットアップをしている場合はSkip可。既にcudaの何某かを入れたことがある方はこちら。
もしよくわからない方は下記の出力で引っかからないか確認して見て欲しい。
0-1: holdされているドライバをunhold
holdされているとうまく削除できない場合があるのでunhold。
sudo apt-mark unhold cuda-*
sudo apt-mark unhold nvidia-*
sudo apt-mark unhold libcudnn*
sudo apt-mark unhold libnv*
Optional: nouveauを無効化
下記は実行したことがあるが今回はやってないのでOptionalとする。
install前にデフォルトで導入されているドライバnouveauを無効化
/etc/modprobe.d/blacklist-nouveau.conf
を作成し以下を書き込む。
blacklist nouveau
options nouveau modeset=0
設定適用、再起動
sudo update-initramfs -u
sudo reboot
0-2: 古いdriverの削除
sudo apt purge cuda-*
sudo apt purge nvidia-*
sudo apt purge libcudnn*
sudo apt purge libnv*
この後、きちんとautoremoveをしたほうが経験上良い
sudo apt autoremove
人によってはこのあと再起動したいかもしれないが、デフォルトのドライバ(Nouveau)を無効化していたりするとGUIが起動しなくなったりする(した)ので個人的にはこのまま次のdriver installに移りたい。
1: NVIDIA Driver Install
NVIDIAのDriverのインストール方法にはいろいろあるが今回はCUIを用いた一例を示す。
詳しくは公式や他の方の記事を参照。
1-1: 適したdriverの確認
Get nvidia repository
sudo add-apt-repository ppa:graphics-drivers/ppa
適したdriverの確認を下記のコマンドで行う。(以後コマンドと結果と同時に載せる場合、$から始まる部分をコマンド、それ以外をCUIの出力とする)
$ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
modalias : pci:v000010DEd00002520sv000017AAsd000022E4bc03sc00i00
vendor : NVIDIA Corporation
model : GA106M [GeForce RTX 3060 Mobile / Max-Q]
manual_install: True
driver : nvidia-driver-470-server - distro non-free
driver : nvidia-driver-535-server-open - distro non-free
driver : nvidia-driver-535 - distro non-free recommended
driver : nvidia-driver-470 - distro non-free
driver : nvidia-driver-545-open - distro non-free
driver : nvidia-driver-535-open - distro non-free
driver : nvidia-driver-535-server - distro non-free
driver : nvidia-driver-545 - distro non-free
driver : xserver-xorg-video-nouveau - distro free builtin
例えば上記の出力を見るに下記のnvidia-driver-535がおすすめされているのでそれをメモしておく。(なお、今回はこの時点で既に550がインストールされているので、以後550を前提に進める。)
driver : nvidia-driver-535 - distro non-free recommended
1-2: nvidia driverのインストール
先程のverを選択してapt installを行う。versionの部分は適宜変更のこと。
sudo apt update
sudo apt install nvidia-driver-550
1-3: 再起動
再起動をかける
reboot
nvidia-smiで確認。下記のような画面になっていたら成功。
$ nvidia-smi
Tue Apr 30 00:06:18 2024
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.67 Driver Version: 550.67 CUDA Version: 12.4 |
|-----------------------------------------+------------------------+----------------------+
| 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 3060 ... Off | 00000000:01:00.0 On | N/A |
| N/A 52C P5 18W / 80W | 138MiB / 6144MiB | 8% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 0 N/A N/A 2212 G /usr/lib/xorg/Xorg 133MiB |
+-----------------------------------------------------------------------------------------+
補足: driverとCUDAその他のバージョンの確認
compativilityの表にもあるようにCUDAの12.xを使うにはdriverはある程度新しい必要がある。
2: install cuda
こちらもいくつか方法があるがここではCUDA toolkitに準拠してインストールする。
2-1: CUDAのインストールコマンド
上記のToolkitのページにてに必要な情報を入れていくと必要なコマンドが表示される。これを一つずつinstallしていく。
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/12.4.1/local_installers/cuda-repo-ubuntu2204-12-4-local_12.4.1-550.54.15-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2204-12-4-local_12.4.1-550.54.15-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2204-12-4-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-4
上記は間違ってlocal installをしてしまったのでもっと良い手法があるのかも
終了後は一度rebootをする。
network installはこちら
network installwget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-5
2-2: version確認
cudaの確認
$ nvidia-smi
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.67 Driver Version: 550.67 CUDA Version: 12.4 |
|-----------------------------------------+------------------------+----------------------+
| 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 3060 ... Off | 00000000:01:00.0 On | N/A |
| N/A 54C P8 15W / 80W | 138MiB / 6144MiB | 33% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 0 N/A N/A 2650 G /usr/lib/xorg/Xorg 133MiB |
+-----------------------------------------------------------------------------------------+
toolkitのver確認
$nvcc -v
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on Thu_Mar_28_02:18:24_PDT_2024
Cuda compilation tools, release 12.4, V12.4.131
Build cuda_12.4.r12.4/compiler.34097967_0
3: cuDNNのインストール
cuDNN installで調べて出てくる下記を参照。
3-1: cudnn install
複数パターンで導入できる。どちらでも動きそうだったが基本Aの方でやる人が多そうなのでそちらのほうが良さそう。(助言ほしいです)
3-1-A: cudnnのarchiveからインストール
下記ページからインストールしたいverと機器の組み合わせからファイルを選択。後述だがtensorRTのverによってある程度縛られるので注意。今回は 8.9.7
を選択する。
必要なファイルをDL後、下記のようなinstallコマンドを打った。あくまで一例なので画面の表示に従うこと。(EAがEarly access、GAがStable版らしいのでGAがあるならGAを選択)
deb fileのインストール
sudo dpkg -i cudnn-local-repo-ubuntu2204-8.9.7.29_1.0-1_amd64.deb
sudo cp /var/cudnn-local-repo-ubuntu2204-8.9.7.29/cudnn-local-08A7D361-keyring.gpg /usr/share/keyrings/
cudaとcudnnのversionに合わせて、下記のinstallを実行。(なのだが12.4に直接対応するものが無い。この場合、別に12.2でも良いらしい。12.1に対して入れている人もいるし多分互換性があるんだと思われる。なかったらごめんなさい。)
sudo apt update
sudo apt-get install libcudnn8=8.9.7.*-1+cuda12.2
sudo apt-get install libcudnn8-dev=8.9.7.*-1+cuda12.2
sudo apt-get install libcudnn8-samples=8.9.7.*-1+cuda12.2
3-1-B: cudnnのDownloadsからインストール
最初こちらでやってしまったが多分文献の多さを見るにこちらは推奨されないかもしれない。
ubuntu22.04での共通部分。
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
今回はcuda12に対応するcudnnをinstallするので下記を実行。
sudo apt-get -y install cudnn-cuda-12
3-2: Installation check
autowareのinstall.shを回しているので
3-1-Aの場合の出力例
$ dpkg -l | grep cudnn
ii cudnn-local-repo-ubuntu2204-8.9.7.29 1.0-1 amd64 cudnn-local repository configuration files
ii libcudnn8 8.9.7.29-1+cuda12.2 amd64 cuDNN runtime libraries
ii libcudnn8-dev 8.9.7.29-1+cuda12.2 amd64 cuDNN development libraries and headers
ii libcudnn8-samples 8.9.7.29-1+cuda12.2 amd64 cuDNN samples
ii ros-humble-cudnn-cmake-module 0.0.1-3jammy.20240217.032259 amd64 Exports a CMake module to find cuDNN.
3-1-Bの場合の出力例
$ dpkg -l | grep cudnn
ii cudnn9-cuda-12 9.1.0.70-1 amd64 NVIDIA cuDNN for CUDA 12
ii cudnn9-cuda-12-4 9.1.0.70-1 amd64 NVIDIA cuDNN for CUDA 12.4
ii libcudnn9-cuda-12 9.1.0.70-1 amd64 cuDNN runtime libraries for CUDA 12.4
ii libcudnn9-dev-cuda-12 9.1.0.70-1 amd64 cuDNN development headers and symlinks for CUDA 12.4
ii libcudnn9-static-cuda-12 9.1.0.70-1 amd64 cuDNN static libraries for CUDA 12.4
ii ros-humble-cudnn-cmake-module 0.0.1-3jammy.20240217.032259 amd64 Exports a CMake module to find cuDNN.
補足:pytorchでのinstall確認
本来このチェックはpytorchをinstallする必要があるが、autowareのinstallationをしていれば確認できたりする。
3-1-Aのケース
$ python3
Python 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> print(torch.cuda.is_available())
True
>>> print(torch.cuda.get_device_name())
NVIDIA GeForce RTX 3060 Laptop GPU
3-1-Bのケース
$ python3
Python 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> print(torch.cuda.is_available())
True
>>> print(torch.cuda.get_device_name())
NVIDIA GeForce RTX 3060 Laptop GPU
Further check:
Version確認
tensorRTにはある程度ver指定がある。上のページの下記表記を見るにcuDNNは8.9.7が良さそうである。
Ensure that you have the following dependencies installed.
- CUDA 11.0 update 3, 11.1 update 1, 11.2 update 2, 11.3 update 1, 11.4 update 4, 11.5 update 2, 11.6 update 2, 11.7 update 1, 11.8, 12.0 update 1, 12.1 update 1, 12.2 update 2, 12.3 update 2, or 12.4 update 1
- cuDNN 8.9.7 (Optional and not required for lean or dispatch runtime installations.)`
4:tensorRT install
4-1: tensorRTのinstall
上の表とにらめっこして、10.0.1で行くことにする。
4-1-A: tarからのinstall
下記の基準に倣って書く。
下記のページから10.0.1のdebをダウンロード
sudo dpkg -i nv-tensorrt-local-repo-ubuntu2204-10.0.1-cuda-12.4_1.0-1_amd64.deb
sudo cp /var/nv-tensorrt-local-repo-ubuntu2204-10.0.1-cuda-12.4/nv-tensorrt-local-2C63AABB-keyring.gpg /usr/share/keyrings/
Full install c++/python modules
sudo apt-get update
# full install
sudo apt-get install tensorrt
4-1-B: network install
(項目だけ用意。未検証なので必要になったら追記する)
4-2: verify installation
$ dpkg-query -W tensorrt
tensorrt 10.0.1.6-1+cuda12.4
以下WIP