3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

nvidia-driver の最新版へのアップデートメモ

Last updated at Posted at 2020-07-02

記事概要

nvidiaドライバの更新方法です。2023年1月30日時点で有効であることを確認しています。

方法

nvidia公式のダウンロードページに自分のマシンの情報とダウンロード方法を入力すると更新コマンドが表示されます。必要な情報は以下の通りです。

  • OS
  • Architecture
  • Distribution1
  • Version
  • Installer Type

Linuxにおけるそれぞれの調べ方は以下の通りです。

Architecture

uname -m

Distribution/Version

cat /etc/os-release

サンプル

  • Linux
  • x86_64
  • Ubuntu
  • 18.04
  • deb(network)

の場合、以下のようなコマンドが得られます。得られたコマンドをコピペして実行すればドライバの更新が完了します。古いドライバは更新の際に勝手に削除されるのでマニュアルで消す必要はありません。

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-keyring_1.0-1_all.deb
sudo dpkg -i cuda-keyring_1.0-1_all.deb
sudo apt-get update
sudo apt-get -y install cuda

参考画像

スクリーンショット 2023-01-30 11.04.19.png

旧記事内容

記事概要

special case っぽいですが備忘録を兼ねて nvidia-driver をアップデートした時のことを書きました。
アップデートの発端は pytorch を 1.5.0 にバージョンアップしたら GPU が使えなくなったことです。

2022/11/14追記
nvidia-driver のアップデート手順は現在でも有効でした。

環境

  • OS: ubuntu 16.04
  • GPU: Tesla K80

症状

pytorch を 1.4.0 から 1.5.0 に上げたら Is CUDA available: No となってしまい、 GPU が使えなくなりました。バージョンを 1.4.0 に下げたら (+ torchvision を 0.5.0 に下げたら) 問題なく動きましたが、最新版が動かないのは気持ち悪いので直すことにしました。 

$ python -m torch.utils.collect_env
Collecting environment information...
PyTorch version: 1.5.0
Is debug build: No
CUDA used to build PyTorch: 10.2
OS: Ubuntu 18.04.3 LTS
GCC version: (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0
CMake version: version 3.10.2
Python version: 3.8
Is CUDA available: No
CUDA runtime version: 10.1.243
GPU models and configuration: GPU 0: Tesla K80
Nvidia driver version: 384.130
cuDNN version: /usr/lib/x86_64-linux-gnu/libcudnn.so.7.6.5
Versions of relevant libraries:
[pip3] numpy==1.18.5
[pip3] torch==1.5.0
[pip3] torchvision==0.6.0
[conda] Could not collect

やったこと

driver のバージョン確認

nvidia-driver のバージョンは nvidia-smi で確認できます。
アップデート前はドライバのバージョンが 384.130 でした。(化石かな?)
戻り値の上段中央ないし左に書いてある数字が nvidia-driver のバージョンです。

$ nvidia-smi
Thu Jul  2 03:15:10 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.130                Driver Version: 384.130                   |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla K80           Off  | 00000001:00:00.0 Off |                    0 |
| N/A   60C    P0    61W / 149W |      0MiB / 11441MiB |     88%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

普段自分が GPU を使って機械学習をする際は docker を使っているのですが、CUDA や cudnn がコンテナのなかで個別に設定できる一方で、 nvidia-driver はコンテナの外で設定する必要があるらしいです。 なので、「著者実装の Dockerfile 使ってんのに GPU 使えねえ〜」みたいな時は nvidia-driver のバージョンが古いことなどを疑いましょう。

古い nvidia-driver を消す

すでに nvidia-driver が導入されている場合、これらを消した方が依存関係などの面から丸い気がします。とはいえ、最終的に nvidia 公式の謎実行ファイルを動かしてドライバをインストールするので、実はこのステップがいらない (実行ファイルの中でやってくれてる) という説はあります。

$ sudo apt remove -y --purge nvidia*
$ sudo apt remove -y --purge libnvidia*

自分は今回初めて知ったのですが、--purge は設定ファイルも含めて消すオプションです。これをしないと無駄な設定ファイルが残り続けるので消した方が丸い気がします。dpkg -l | grep nvidia で何も出てこないことを確認できたら次のステップに進みます2

$ dpkg -l | grep nvidia

公式の CUDA Toolkit から自分のプラットフォームにあった実行ファイルを探す

「CUDA Toolkit ではなく nvidia-driver が欲しいのですが……」と思ってしまうのですが、(思うだろふつう) CUDA Toolkit の実行ファイルから nvidia-driver の最新版が勝手に入ります。以下のリンクから欲しい CUDA のバージョンを選んでプラットフォーム情報を入れると実行ファイルのダウンロードコマンドが出てきます。

https://developer.nvidia.com/cuda-toolkit-archive

Architecture, Distribution, Version は cat /etc/lsb-releaseuname -m で確認可能です。

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu  # distribution
DISTRIB_RELEASE=16.04  # version
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.6 LTS"
$ uname -m
x86_64  # architecture

以上の情報を入力した結果、僕の場合はこんな感じのコマンドが表示されました3

$ wget http://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run
$ sudo sh cuda_10.2.89_440.33.01_linux.run

CUDA Toolkit (with nvidia-driver) をダウンロードする

先ほど表示されたコマンドを打っていきます。まずは wget から。

simossyi@gpu:~$ wget http://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run
--2020-07-02 02:23:36--  http://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run
Resolving developer.download.nvidia.com (developer.download.nvidia.com)... 152.195.19.142
Connecting to developer.download.nvidia.com (developer.download.nvidia.com)|152.195.19.142|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2645419389 (2.5G) [application/octet-stream]
Saving to: ‘cuda_10.2.89_440.33.01_linux.run’

cuda_10.2.89_440.33.01_linux.run      100%[=========================================================================>]   2.46G   108MB/s    in 18s

2020-07-02 02:23:54 (142 MB/s) - ‘cuda_10.2.89_440.33.01_linux.run’ saved [2645419389/2645419389]

次に落としたファイルを実行します。この時「ライセンスに同意するか?」的なことを聞かれるので accept を入力します。その後、インストールオプションが現れますが、僕はデフォルトの設定 (driver と Toolkit のみ) のまま install を実行しました。ちなみにこのファイルは沈黙のままログも吐かず長時間動き続けるので、固まったように見えてもお使いの PC は正常です。

$ sudo sh cuda_10.2.89_440.33.01_linux.run
===========
= Summary =
===========

Driver:   Installed
Toolkit:  Installed in /usr/local/cuda-10.2/
Samples:  Installed in /home/simossyi/, but missing recommended libraries

Please make sure that
 -   PATH includes /usr/local/cuda-10.2/bin
 -   LD_LIBRARY_PATH includes /usr/local/cuda-10.2/lib64, or, add /usr/local/cuda-10.2/lib64 to /etc/ld.so.conf and run ldconfig as root

To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-10.2/bin
To uninstall the NVIDIA Driver, run nvidia-uninstall

Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-10.2/doc/pdf for detailed information on setting up CUDA.
Logfile is /var/log/cuda-installer.log

以上の操作で nvidia-driver が最新のものに更新されます。 nvidia-smi で確認しましょう4

$ nvidia-smi
Thu Jul  2 02:50:36 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.33.01    Driver Version: 440.33.01    CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla K80           Off  | 00000001:00:00.0 Off |                    0 |
| N/A   60C    P0    61W / 149W |      0MiB / 11441MiB |     88%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

CUDA Toolkit を介して nvidia-driver を入れ直したので nvidia-smi で CUDA のバージョンが表示されるようになりました。docker で動かす分には CUDA はコンテナの外に入れる必要はないのですがまあいいでしょう。

最後に pytorch から GPU が見えてるかも確認します。 Is CUDA available: Yes になってますね。

$ python -m torch.utils.collect_env
Collecting environment information...
PyTorch version: 1.5.0
Is debug build: No
CUDA used to build PyTorch: 10.2
OS: Ubuntu 18.04.3 LTS
GCC version: (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0
CMake version: version 3.10.2
Python version: 3.8
Is CUDA available: Yes
CUDA runtime version: 10.1.243
GPU models and configuration: GPU 0: Tesla K80
Nvidia driver version: 440.33.01
cuDNN version: /usr/lib/x86_64-linux-gnu/libcudnn.so.7.6.5
Versions of relevant libraries:
[pip3] numpy==1.18.5
[pip3] torch==1.5.0
[pip3] torchvision==0.6.0
[conda] Could not collect

For nvidia-docker2 users

上の nvidia 関連コマンド一括削除で nvidia 関連のライブラリを全削除してしまったので nvidia-docker2 も消えてしまっています。(nvidia-docker2 以外を消すようにコマンドを直した方がいいかもしれない) なのでこのパッケージが必要な場合は以下のコマンドで再インストールします。

$ sudo apt-get install -y nvidia-docker2
$ sudo pkill -SIGHUP dockerd

ちなみに最近は nvidia-driver2 の使用は 推奨されないっぽい です。

参考サイト

NVIDIA Docker って今どうなってるの? (19.11版)
nvidia-docker wiki
pytorch1.5 does not support CUDA?
Ubuntuアップデートしたらおかしくなった件

  1. Windowsの場合はDistributionはないようです。

  2. 経験上、上記のコマンドだと nvidia 関連のパッケージがいくつか消えないで残ることが多いです。その場合ワイルドカードを指定せずパッケージ名を具体的に指定して remove すると消えてくれます。

  3. 手元の環境やインストールしたい CUDA バージョンによってコマンドは異なるため注意してください。

  4. sudo reboot が必要になる場合もあります。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?