#author("2026-06-14T04:29:59+00:00;2025-08-09T11:21:29+00:00","default:sysosa","sysosa") #author("2026-06-14T04:34:58+00:00;2025-08-09T11:21:29+00:00","default:sysosa","sysosa") &color(magenta){nvidiaドライバ};を入れてみる &color(magenta){nvidiaドライバ};は、 -「NVIDIAドライバダウンロード」ページから&color(magenta){nvidiaドライバ};のみをインストール [[https://www.nvidia.co.jp/Download/index.aspx?lang=jp>+https://www.nvidia.co.jp/Download/index.aspx?lang=jp]] -「CUDA Toolkit」ページで&color(orangered){CUDAライブラリ};と共に&color(magenta){nvidiaドライバ};をインストール [[https://developer.nvidia.com/cuda-downloads>+https://developer.nvidia.com/cuda-downloads]] の2つの経路があるのかなと思っている. 片方はドライバのみ、もう片方は&color(orangered){cudaライブラリ};と共に&color(magenta){nvidiaドライバ};をインストール. 前者を選ぶと&color(orangered){cudaライブラリ};がインストールできないわけではない. あとで必要な&color(orangered){cudaライブラリ};のみを入れればいい. 前者の利点は、最新の&color(magenta){nvidiaドライバ};が利用できる. 後者は「どうせ後から&color(orangered){cudaライブラリ};も使うから一緒に」なシーンかな. anaconda/minicondaで構築するアプリは「&color(magenta){nvidiaドライバ};」のみでいい. なぜなら必要な&color(orangered){cudaライブラリ};をcondaコマンドらで cudatoolkitらの名前で自ら引き込むので. relionとかはそのソースしか提供しないので別途&color(orangered){cudaライブラリ};を用意しておく必要がある. &size(10){なのでcryoSPARCも「&color(magenta){nvidiaドライバ};」さえ入っていればいい(v4.4以降)}; &size(10){[[NVIDIA/ubuntu]]}; では&color(magenta){nvidiaドライバ};を淹れてみる. 現状確認 #code(nonumber){{ [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環境のログイン画面であると、&color(magenta){nvidiaドライバ};のインストール時に怒られる場合があるので、CUI環境モードに移行させておく &size(10){「systemctl isolate multi-user.target」の後で「rmmod nouveau」でもいいけど}; #code(nonumber){{ [root@centos7 ~]# systemctl set-default multi-user.target }} っで次に開発環境を用意する. &size(10){カーネル部分に関しては使用したusbに入っているkernel関連パッケージを利用するのもあり}; #code(nonumber){{ [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 #code(nonumber){{ [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がないことを確認します #code(nonumber){{ [root@centos7 ~]# lsmod | grep nouveau }} っで&color(magenta){nvidiaドライバ};をインストール #code(nonumber){{ [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」が正しく出力されたら. #code(nonumber){{ [root@centos7 ~]# nvidia-smi }} あとはGUI環境に戻すとかで #code(nonumber){{ [root@centos7 ~]# systemctl set-default graphical.target [root@centos7 ~]# reboot }} これで上手く行くみたい ほか確認方法として「lshw」とかで NVIDIA が見つかればいいかなと. #code(nonumber){{ [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 ~]# }} とか ***削除 [#f1bbc5a0] &color(magenta){nvidiaドライバ};をインストールしたからには削除も明記する必要があるかなと &color(magenta){nvidiaドライバ};の削除ですが、2通りあるかな. それはどうやって&color(magenta){nvidiaドライバ};を入れたかに寄ります. -nvidia-uninstallで削除 -yum/dnfで削除 ***削除(nvidia-uninstallで) [#r1905003] こちらは&color(magenta){nvidiaドライバ};を「bash NVIDIA-Linux-x86_64-525.105.17.run」とかドライバのみを入れた場合です. この時 uninstall向けのスクリプト「nvidia-uninstall」も一緒にインストールされます っで削除手順 #code(nonumber){{ systemctl get-default <--現在のモードを確認 systemctl isolate multi-user.target <--もし「graphical.target」なら一時的にCUIモードに変更 systemctl stop nvidia-persistenced.service <-- nvidia-persistenced を停止(もし使ってら) lsmod | grep nvidia <-- カーネルにロードされている nvidia関連カーネルモジュール を見つける rmmod nvidia_drm nvidia_modeset nvidia <-- nvidia関連カーネルモジュールをカーネルから外す エラーがあるなら、「lsof | grep nvidia」でその噛んでいるプロセスを探して停止させて再度外す (slurmで噛んでいる時もあるので) lsmod | grep nvidia <-- 再度確認します nvidia-uninstall <-- っで削除コマンドを実行します dkms status <-- dkmsでエントリーがあるならそれも削除 dkms nvidia_drm nvidia/525.105.17 --all lsinitrd | grep nvidia <-- /boot/initramfs でnvidia.ko らがあるか確認 (rm /lib/modules/3.10.0-1160.71.1.el7.x86_64/extra/nvidia.*) <-- あるならnvidia関連モジュールを削除 (dracut --force) <-- /boot/initramfsを作り直し }} こんな感じで削除します ***削除(yum/dnf) [#mde466ec] こちらはCUDAと共に&color(magenta){nvidiaドライバ};を入れた場合の削除方法かと. コマンド「nvidia-uninstall」がなくて、「yum list installed」に「&color(red){nvidia-driver-latest};」パッケージがあるならこの方法かな. #code(nonumber){{ systemctl get-default <--現在のモードを確認 systemctl isolate multi-user.target <--もし「graphical.target」なら一時的にCUIモードに変更 systemctl stop nvidia-persistenced.service <-- nvidia-persistenced を停止(もし使ってら) lsmod | grep nvidia <-- カーネルにロードされている nvidia関連カーネルモジュール を見つける rmmod nvidia_drm nvidia_modeset nvidia <-- カーネルモジュールを外して lsmod | grep nvidia <-- 再度確認します. 外れない場合は「lsof | grep nvidia」でプロセスを探して停止させrmmodする. yum remove nvidia-driver-latest -y <-- nvidiaドライバを削除 }} これでnvidiaのカーネルモジュールが削除されます. ***&color(magenta){nvidiaドライバ};のバージョンと&color(orangered){CUDAライブラリ}; [#u8d6c845] これが正しいかは不明ですが、各種&color(magenta){nvidiaドライバ};を入れて、nvidia-smiを叩いて「CUDA Version:」の値を調べた |BGCOLOR(YELLOW):Driver Version|BGCOLOR(YELLOW):CUDA Version|BGCOLOR(YELLOW):メモ| |610.43.02|13.3.0|| |595.58.03|13.2.1|| |590.48.01|13.1.2|| |580.126.20|13.0.3|Maxwell(980,TitanX),Pascal(10x0),Volta(VG100,V100,TitanV)の上限| |575.57.08|12.9.2|| |570.211.01|12.8.2|RTX50x0対応のはじめ| |560.35.05|12.6.3|| |555.42.06|12.5.1|| |550.45.15|12.4.1|| |545.23.08|12.3.2|| |535.104.05|12.2.2|| |530.30.02|12.1.1|| |525.60.11|12.0|RTX40x0対応| |520.56.06|11.8|RTX4090対応のはじめ| |515.76|11.7|| |510.85.02|11.6|| |470.141.03|11.4|Keplerの上限| cuda libraryのインストールファイル(run file)に同封されている&color(magenta){nvidiaドライバ}; |BGCOLOR(YELLOW):CUDA Version|BGCOLOR(YELLOW):Driver Version|BGCOLOR(YELLOW):メモ| |13.3.0|610.43.02|| |13.2.1|595.58.03|| |13.1.2|590.48.01|| |13.0.3|580.126.20|Maxwell(980,TitanX),Pascal(10x0),Volta(VG100,V100,TitanV)の上限| |12.9.2|575.57.08|| |12.8.2|570.211.01|RTX50x0対応のはじめ| |12.6.3|560.35.05|| |12.5.1|555.42.06|| |12.4.1|550.45.15|| |12.3.2|545.23.08|| |12.2.2|535.104.05|| |12.1.1|530.30.02|| |12.0|525.60.11|RTX40x0対応| |11.8|520.56.06|RTX4090対応のはじめ| |11.7|515.76|| |11.6|510.85.02|| |11.4|470.141.03|Keplerの上限| RTX40x0を搭載するには520以上が必要. &size(10){520は新機能ブランチでNVIDIAの推奨である525以降を使った方がいいのかも}; ***&color(magenta){nvidiaドライバ};をインストールしてから&color(orangered){cudaライブラリ};をインストール [#o7d8bc47] [[https://developer.nvidia.com/cuda-downloads>+https://developer.nvidia.com/cuda-downloads]]から必要な&color(orangered){cudaライブラリ};を入手します こちらでは「&color(white,darkgreen){ rpm (local) };」なファイル、 #code(nonumber){{ 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 }} なファイルを取得している. これから必要なライブラリは #code(nonumber){{ 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で&color(magenta){nvidiaドライバ};を [#x9030ea9] 大抵はaptなんとかで&color(magenta){nvidiaドライバ};のインストールはできるようですが、ここでは上のCentOSのように組み込みたいとおもう #code(nonumber){{ 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 }} #code(nonumber){{ 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がないことを確認して、 #code(nonumber){{ root@ubuntu22:~# lsmod |grep nouveau }} その後に&color(magenta){nvidiaドライバ};をインストールします #code(nonumber){{ 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 [#o13e41e5] nvidia-smiと実行してしばらくして結果が表示される. これは &color(magenta){nvidiaドライバ};がロードされてなく、nvidia-smiの実行で呼び込まれたからワンテンポ遅れて表示されるそうな ・・・でもlsmodでみるとnvidia.koはkernelに組み込まれている. それとは違った所での「ロード」なのだろうか?まぁそれはいいとして、 っでこの「ワンテンポ遅れる」のをさせず即座に応答させるには「persistence mode」を有効にするといいみたい。 現在の状態はというと #code(nonumber){{ [root@centos7 ~]# nvidia-smi -q | grep "Persistence Mode" Persistence Mode : Disabled [root@centos7 ~]# }} と「Disabled」と無効となっている。これを有効にするには「nvidia-smi -pm 1」と実行する #code(nonumber){{ [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>+https://download.nvidia.com/XFree86/Linux-x86_64/510.47.03/README/nvidia-persistenced.html]] ここから下記の中で&color(magenta){nvidiaドライバ};と同じバージョンのソースを取得します [[https://download.nvidia.com/XFree86/nvidia-persistenced/>+https://download.nvidia.com/XFree86/nvidia-persistenced/]] ここでは #code(nonumber){{ [root@centos7 ~]# nvidia-smi -q | grep "Driver Version" Driver Version : 525.105.17 [root@centos7 ~]# }} なので「nvidia-persistenced-525.105.17.tar.bz2」を取得します #code(nonumber){{ [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をインストールします #code(nonumber){{ [root@centos7 nvidia-persistenced-525.105.17]# cd init/ [root@centos7 init]# ./install.sh systemd }} これで「nvidia-persistenced」ユーザが作られて、「nvidia-persistenced.service」が用意される. #code(nonumber){{ [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起動時に稼働する設定は施されている #code(nonumber){{ [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 ~]# }} &size(10){「&color(red){nvpd_rpc.h:9:10: fatal error: rpc/rpc.h: No such file or directory};」と言われたらlibtirpc-develを「dnf --enablerepo=devel install libtirpc-devel」として入れる}; ***備考 [#vb48147a] 下記コマンドでの違いについて 「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」 引数をを入れた場合(左) と 何も引数を入れない場合(右) の差 #code(nonumber){{ /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」含まれた #code(nonumber){{ { "file_format_version" : "1.0.0", "ICD" : { "library_path" : "libEGL_mesa.so.0" } } }} ***expertでインストール [#d6bb91e6] どうやらこの辺になると上級者っぽい #code(nonumber){{ NVIDIA-Linux-x86_64-515.105.01.run --expert }} ***消費電力を下げてみる [#p219a103] (オプション)どうも計算中にコケるので試してみた. GPUカードによっては指定値に範囲があるみたい. #code(nonumber){{ [root@xxxxx ~]# nvidia-smi --power-limit=125 Power limit for GPU 00000000:08:00.0 was set to 125.00 W from 250.00 W. Power limit for GPU 00000000:09:00.0 was set to 125.00 W from 250.00 W. Power limit for GPU 00000000:43:00.0 was set to 125.00 W from 250.00 W. Power limit for GPU 00000000:44:00.0 was set to 125.00 W from 250.00 W. All done. [root@xxxxx ~]# }} 手元にあるRTX A2000(6GB)で調べると #code(nonumber){{ [root@rockylinux9 ~]# nvidia-smi -q : GPU Power Readings Power Draw : 24.26 W Current Power Limit : 70.00 W Requested Power Limit : 70.00 W Default Power Limit : 70.00 W Min Power Limit : 10.00 W Max Power Limit : 70.00 W : [root@rockylinux9 ~]# }} 最低値は10Wに定義できるそうな っで現実的な値「nvidia-smi --power-limit=40」としても再起動すれば元に戻る. これを再起動しても同じ値にるすには? やっぱりsystemdを立てるのがいいみたい #code(nonumber){{ [root@rockylinux9 ~]# vi /usr/lib/systemd/system/nvidia-powerlimit.service [Unit] Description=set cap power usage of GPU Wants=syslog.target After=nvidia-persistenced.service [Service] Type=forking User=root Restart=on-abort ExecStart=/usr/bin/nvidia-smi --power-limit=40 [Install] WantedBy=multi-user.target [root@rockylinux9 ~]# [root@rockylinux9 ~]# systemctl daemon-reload [root@rockylinux9 ~]# systemctl enable nvidia-powerlimit.service --now }} いちいち「/usr/lib/systemd/system/nvidia-powerlimit.service」を弄るハードコーディングは微妙ですが、単純で明確ならいいのかなと 問題があるなら「systemd-analyze plot > plot.svg」で起動順とか調べてみる ***VirtualGL [#r0d41e3e] [[VirtualGL]]を使い場合、nvidiaドライバー由来のopenglファイルが必要のようで #code(nonumber){{ bash /Public/cuda/NVIDIA-Linux-x86_64-525.105.17.run --disable-nouveau --dkms }} と「&color(magenta){--no-opengl-files}; &color(magenta){--no-libglx-indirect};」を外して入れる必要がります