nvidiaドライバを入れてみる

nvidiaドライバは、

の2つの経路があるのかなと思っている.
片方はドライバのみ、もう片方はcudaライブラリと共にnvidiaドライバをインストール.

前者を選ぶとcudaライブラリがインストールできないわけではない. あとで必要なcudaライブラリのみを入れればいい.
前者の利点は、最新のnvidiaドライバが利用できる. 後者は「どうせ後からcudaライブラリも使うから一緒に」なシーンかな.

anaconda/minicondaで構築するアプリは「nvidiaドライバ」のみでいい. なぜなら必要なcudaライブラリをcondaコマンドらで
cudatoolkitらの名前で自ら引き込むので. relionとかはそのソースしか提供しないので別途cudaライブラリを用意しておく必要がある.
なのでcryoSPARCも「nvidiaドライバ」さえ入っていればいい

ではnvidiaドライバを淹れてみる.
現状確認

[root@centos7 ~]# uname -r
3.10.0-1160.el7.x86_64
 
[root@centos7 ~]# lspci -v |grep NVIDIA
13:00.0 VGA compatible controller: NVIDIA Corporation Device 2531 (rev a1) (prog-if 00 [VGA controller])
        Subsystem: NVIDIA Corporation Device 151d
 
[root@centos7 ~]#

GUI環境のログイン画面であると、nvidiaドライバのインストール時に怒られる場合があるので、CUI環境モードに移行させておく
「systemctl isolate multi-user.target」の後で「rmmod nouveau」でもいいけど

[root@centos7 ~]# systemctl set-default multi-user.target

っで次に開発環境を用意する.
カーネル部分に関しては使用したusbに入っているkernel関連パッケージを利用するのもあり

[root@centos7 ~]# yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r)
[root@centos7 ~]# yum groupinstall "Development Tools"
[root@centos7 ~]# yum install epel-release
[root@centos7 ~]# yum install dkms

あと、boot段階でnouveauを排除するようにしてからreboot

[root@centos7 ~]# vi /etc/default/grub
 :
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet"
 ↓
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet nouveau.modeset=0 modprobe.blacklist=nouveau"
 :
[root@centos7 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
[root@centos7 ~]# grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
[root@centos7 ~]# reboot

boot後に「lsmod | grep nouveau」でnouveauがないことを確認します

[root@centos7 ~]# lsmod | grep nouveau

っでnvidiaドライバをインストール

[root@centos7 ~]# bash NVIDIA-Linux-x86_64-525.105.17.run --disable-nouveau --no-opengl-files --no-libglx-indirect --dkms
 
    For some distributions, Nouveau can be disabled by adding a file in the modprobe configuration directory.
    --> Yes -> OK
 
    Would you like to register the kernel module sources with DKMS? This will allow DKMS to automatically build a new module, if you install a different kernel later.
    --> Yes
 
    Install NVIDIA's 32-bit compatibility libraries?
    --> No
 
    Would you like to run the nvidia-xconfig utility to automatically update your X configuration file so that the NVIDIA X driver will be used when you restart X?
    --> No -> OK
    (ここをYesで選択したら「rm /etc/X11/xorg.conf」で削除. これがあるとXが正しく動かない)
 
[root@centos7 ~]#

確認は「nvidia-smi」が正しく出力されたら.

[root@centos7 ~]# nvidia-smi

あとはGUI環境に戻すとかで

[root@centos7 ~]# systemctl set-default graphical.target
[root@centos7 ~]# reboot

これで上手く行くみたい

ほか確認方法として「lshw」とかでも

[root@centos7 ~]# lshw -class display
  *-display
       description: VGA compatible controller
       product: SVGA II Adapter
       vendor: VMware
       physical id: f
       bus info: pci@0000:00:0f.0
       version: 00
       width: 32 bits
       clock: 33MHz
       capabilities: vga_controller bus_master cap_list rom
       configuration: driver=vmwgfx latency=64
       resources: irq:16 ioport:2040(size=16) memory:e8000000-efffffff memory:f9000000-f97fffff memory:ff300000-ff307fff
  *-display
       description: VGA compatible controller
       product: NVIDIA Corporation
       vendor: NVIDIA Corporation
       physical id: 0
       bus info: pci@0000:13:00.0
       version: a1
       width: 64 bits
       clock: 33MHz
       capabilities: pm msi pciexpress vga_controller bus_master cap_list
       configuration: driver=nvidia latency=248
       resources: irq:65 memory:fb000000-fbffffff memory:c0000000-cfffffff memory:d0000000-d1ffffff ioport:3000(size=128)
[root@centos7 ~]#

とか

削除

nvidiaドライバをインストールしたからには削除も明記する必要があるかなと。コマンド「nvidia-uninstall」を使います.

[root@centos7 ~]# nvidia-uninstall
  If you plan to no longer use the NVIDIA driver, you should make sure that no X screens are configured to use the NVIDIA X driver in your X configuration file.
  --> No -> OK
 
[root@centos7 ~]# reboot

*たまにnvidiaドライバを入れた後にdracutで「/boot/initramfs-$(uname -r).img」にnvidiaの記載を入れている場合がある.
この場合「nvidia-uninstall」の実施後にrebootしてもそのnvidiaドライバがあるような挙動を示してしまう. 別のkernelなら影響ない場合もあり

「/boot/initramfs-$(uname -r).img」にnvidiaの記載が残っているとreboot後も下記のような表記になる. nvidiaドライバを削除したのに....

[root@centos7 ~]# lsmod |grep nvidia
nvidia_drm             53212  0
nvidia_modeset       1142296  1 nvidia_drm
nvidia              40782024  1 nvidia_modeset
drm_kms_helper        186531  2 vmwgfx,nvidia_drm
drm                   456166  7 ttm,drm_kms_helper,nvidia,vmwgfx,nvidia_drm
[root@centos7 ~]#

このままだとnvidiaドライバの更新もままらなない. 「/boot/initramfs-$(uname -r).img」に記載があるかは「lsinitrd」で確認できます

解消方法というか「/boot/initramfs-$(uname -r).img」からもnvidiaドライバを抜くには「rmmod nvidia_drm nvidia_modeset nvidia」で架空にロードされているドライバを排除して「dracut --force」を実行して「/boot/initramfs-$(uname -r).img」を作り直します

[root@centos7 ~]# rmmod nvidia_drm nvidia_modeset nvidia
 
[root@centos7 ~]# ls -l /boot/initramfs-$(uname -r).img
-rw-------. 1 root root 86098189 Apr  2 19:26 /boot/initramfs-3.10.0-1160.el7.x86_64.img
 
[root@centos7 ~]# dracut --force
 
[root@centos7 ~]# ls -l /boot/initramfs-$(uname -r).img
-rw-------. 1 root root 29914783 Apr  2 22:41 /boot/initramfs-3.10.0-1160.el7.x86_64.img
[root@centos7 ~]#

これできれいになります

nvidiaドライバのバージョンとCUDAライブラリ

これが正しいかは不明ですが、各種nvidiaドライバを入れて、nvidia-smiを叩いて「CUDA Version:」の値を調べた

Driver VersionCUDA Versionメモ
535.xx.yy12.2
530.xx.yy12.1
525.60.1112.0RTX40x0対応
520.56.0611.8RTX4090対応のはじめ
515.7611.7
515.65.0111.7
510.85.0211.6
510.47.0311.6
470.141.0311.4Keplerの上限

RTX40x0を搭載するには520以上が必要. 520は新機能ブランチでNVIDIAの推奨である525以降を使った方がいいのかも

nvidiaドライバをインストールしてからcudaライブラリをインストール

https://developer.nvidia.com/cuda-downloadsから必要なcudaライブラリを入手します
こちらでは「 rpm (local) 」なファイル、

cuda-repo-rhel8-11-7-local-11.7.0_515.43.04-1.x86_64.rpm
とか
cuda-repo-rhel8-11-8-local-11.8.0_520.61.05-1.x86_64.rpm

なファイルを取得している. これから必要なライブラリは

yum localinstall cuda-repo-rhel7-11-7-local-11.7.0_515.43.04-1.x86_64.rpm
 
yum install cuda-toolkit-11-7

と「cuda-toolkit-<バージョン>」のみを淹れる

ubuntuでnvidiaドライバ

大抵はaptなんとかでnvidiaドライバのインストールはできるようですが、ここでは上のCentOSのように組み込みたいとおもう

root@ubuntu22:~# uname -r
5.19.0-35-generic
 
root@ubuntu22:~# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.2 LTS"
 :
root@ubuntu22:~# apt install build-essential dkms
root@ubuntu22:~# vi /etc/default/grub
 :
GRUB_CMDLINE_LINUX=""
  ↓
GRUB_CMDLINE_LINUX="nouveau.modeset=0 modprobe.blacklist=nouveau"
 :
root@ubuntu22:~# update-grub
 
root@ubuntu22:~# systemctl set-default multi-user.target
root@ubuntu22:~# reboot

lsmodでnouveauがないことを確認して、

root@ubuntu22:~# lsmod |grep nouveau

その後にnvidiaドライバをインストールします

root@ubuntu22:~# bash /Public/cuda/NVIDIA-Linux-x86_64-525.105.17.run --disable-nouveau --no-opengl-files --no-libglx-indirect --dkms
 
root@ubuntu22:~# systemctl set-default graphical.target
root@ubuntu22:~# reboot

persistence mode

nvidia-smiと実行してしばらくして結果が表示される. これは nvidiaドライバがロードされてなく、nvidia-smiの実行で呼び込まれたからワンテンポ遅れて表示されるそうな
・・・でもlsmodでみるとnvidia.koはkernelに組み込まれている. それとは違った所での「ロード」なのだろうか?まぁそれはいいとして、
っでこの「ワンテンポ遅れる」のをさせず即座に応答させるには「persistence mode」を有効にするといいみたい。
現在の状態はというと

[root@centos7 ~]# nvidia-smi -q | grep "Persistence Mode"
    Persistence Mode                      : Disabled
[root@centos7 ~]#

と「Disabled」と無効となっている。これを有効にするには「nvidia-smi -pm 1」と実行する

[root@centos7 ~]# nvidia-smi -pm 1
Enabled persistence mode for GPU 00000000:13:00.0.
All done.
[root@centos7 ~]# nvidia-smi -q | grep "Persistence Mode"
    Persistence Mode                      : Enabled
[root@centos7 ~]#

っがどうやらこの方法はレガシーな方法のようで、今はもっとエレガントらしい。
参照先https://download.nvidia.com/XFree86/Linux-x86_64/510.47.03/README/nvidia-persistenced.html

ここから下記の中でnvidiaドライバと同じバージョンのソースを取得します
https://download.nvidia.com/XFree86/nvidia-persistenced/
ここでは

[root@centos7 ~]# nvidia-smi -q | grep "Driver Version"
Driver Version                            : 525.105.17
[root@centos7 ~]#

なので「nvidia-persistenced-525.105.17.tar.bz2」を取得します

[root@centos7 ~]# wget https://download.nvidia.com/XFree86/nvidia-persistenced/nvidia-persistenced-525.105.17.tar.bz2
 
[root@centos7 ~]# tar xf nvidia-persistenced-525.105.17.tar.bz2
[root@centos7 ~]# cd nvidia-persistenced-525.105.17/
 
[root@centos7 nvidia-persistenced-525.105.17]# make
 
[root@centos7 nvidia-persistenced-525.105.17]# make install
mkdir -p /usr/local/bin
install -m 755 _out/Linux_x86_64/nvidia-persistenced /usr/local/bin/nvidia-persistenced
mkdir -p /usr/local/share/man/man1
install -m 755 _out/Linux_x86_64/nvidia-persistenced.1.gz /usr/local/share/man/man1/nvidia-persistenced.1.gz
 
[root@centos7 nvidia-persistenced-525.105.17]#

次に自動で「persistence mode」を有効にするserviceをインストールします

[root@centos7 nvidia-persistenced-525.105.17]# cd init/
 
[root@centos7 init]# ./install.sh systemd

これで「nvidia-persistenced」ユーザが作られて、「nvidia-persistenced.service」が用意される.

[root@centos7 ~]# systemctl list-unit-files | grep nvidia
nvidia-hibernate.service                      enabled
nvidia-persistenced.service                   enabled
nvidia-powerd.service                         disabled
nvidia-resume.service                         enabled
nvidia-suspend.service                        enabled
[root@centos7 ~]#

一応「./install.sh systemd」でOS起動時に稼働する設定は施されている

[root@centos7 ~]# systemctl status nvidia-persistenced.service
● nvidia-persistenced.service - NVIDIA Persistence Daemon
   Loaded: loaded (/usr/lib/systemd/system/nvidia-persistenced.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2023-04-13 01:30:15 JST; 2min 32s ago
  Process: 2753 ExecStart=/usr/bin/nvidia-persistenced --user nvidia-persistenced (code=exited, status=0/SUCCESS)
 Main PID: 2755 (nvidia-persiste)
    Tasks: 1
   CGroup: /system.slice/nvidia-persistenced.service
           mq2755 /usr/bin/nvidia-persistenced --user nvidia-persistenced
 
Apr 13 01:30:14 centos7 systemd[1]: Starting NVIDIA Persistence Daemon...
Apr 13 01:30:14 centos7 nvidia-persistenced[2755]: Started (2755)
Apr 13 01:30:15 centos7 systemd[1]: Started NVIDIA Persistence Daemon.
[root@centos7 ~]#

nvpd_rpc.h:9:10: fatal error: rpc/rpc.h: No such file or directory」と言われたらlibtirpc-develを「dnf --enablerepo=devel install libtirpc-devel」として入れる

備考

下記コマンドでの違いについて
「bash /Public/cuda/NVIDIA-Linux-x86_64-525.105.17.run --disable-nouveau --no-opengl-files --no-libglx-indirect --dkms」
「bash /Public/cuda/NVIDIA-Linux-x86_64-525.105.17.run」
引数をを入れた場合(左) と 何も引数を入れない場合(右) の差

/usr/lib/modprobe.d
 nvidia-installer-disable-nouveau.conf          -
 
/usr/lib64/xorg/modules/extensions/
 -                                              libglxserver_nvidia.so.525.105.17
 
/usr/lib64/
                                                libEGL_nvidia.so.525.105.17
                                                libGLESv1_CM_nvidia.so.525.105.17
                                                libGLESv2_nvidia.so.525.105.17
                                                libGLX_nvidia.so.525.105.17
                                                libnvidia-eglcore.so.525.105.17
                                                libnvidia-egl-gbm.so.1.1.0
                                                libnvidia-egl-wayland.so.1.1.10
                                                libnvidia-glcore.so.525.105.17
                                                libnvidia-glsi.so.525.105.17
                                                libnvidia-glvkspirv.so.525.105.17
                                                libnvidia-ngx.so.525.105.17
                                                libnvidia-rtcore.so.525.105.17
                                                libnvidia-tls.so.525.105.17
                                                libnvidia-vulkan-producer.so.525.105.17
                                                libnvoptix.so.525.105.17
/usr/share/glvnd/egl_vendor.d/
 -                                              10_nvidia.json
 
/usr/share/egl/egl_external_platform.d/
                                                10_nvidia_wayland.json
                                                15_nvidia_gbm.json
/etc/modprobe.d/
 nvidia-installer-disable-nouveau.conf

「--disable-nouveau --no-opengl-files --dkms」とすると「10_nvidia.json」含まれた

{
    "file_format_version" : "1.0.0",
    "ICD" : {
        "library_path" : "libEGL_mesa.so.0"
    }
}

expertでインストール

どうやらこの辺になると上級者っぽい

NVIDIA-Linux-x86_64-515.105.01.run --expert
最新の60件
2023-09-20 2023-09-19 2023-09-18 2023-09-17 2023-09-16 2023-09-14 2023-09-12 2023-09-11 2023-09-08 2023-09-05 2023-09-02 2023-08-30 2023-08-29 2023-08-28 2023-08-27 2023-08-22 2023-08-20 2023-08-18 2023-08-17 2023-08-14 2023-08-12 2023-08-09 2023-08-07 2023-08-06 2023-08-03 2023-07-31 2023-07-29 2023-07-27 2023-07-25 2023-07-24 2023-07-22 2023-07-17 2023-07-16 2023-07-09 2023-07-08

edit


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-09-08 (金) 04:50:28