GPUサーバーマシンとして利用しているデスクトップPCのOSとしてUbuntu20.04を利用しています.UbuntuというLinuxのディストリビューションのバージョンは気に掛けることが多いですが,Kernelは守備範囲外だった筆者ですが,今回Kernelのアップデートに挑戦することに.切っ掛けは以下の様な顛末です.
突然動かなくなったGPU
先日久し振りにUbuntuのアップグレードを実施したところ,大量のアップグレードがインストールされました.アップグレード後にnvidia-smiコマンドを実行した所,NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
というエラーメッセージが出力されました.色々調査した所,このエラーメッセージはOSアップグレード後にしばしばNVIDIAドライバーとの相性の問題で出ることが有るとのことです.対処方法として見つかったのは...
- ドライバーの再インストール
- BIOSアップデートが実行され,セキュアブートが有効化されている場合は無効化
- グラフィックデバイスはCPU内蔵では無く,ビデオカードを優先させる(BIOSの設定)
- 最悪はリカバリー(OSの入れ直し)
筆者は全てを試しましたが,事態は改善せず...リカバリーは少なくとも3回は実施しました.GPUが正常に動いている気配が無く,特にファンが動いておらず冷却されないため,電源OFF後ビデオカードが触れないほどの高温になってしまう現象に見舞われました.
気になる投稿を発見
ネットで気になる投稿を発見しました.Linuxカーネルの5.13とNVIDIAドライバーの相性が悪い...因みに筆者のマシーンのUbuntu20.04のデフォルトのKernelも5.13でした...
Kernelのアップデート
Kernelとの相性が悪い可能性が浮上しましたが,筆者はLinux Kernelについては寡聞にして詳しく無いため,対処方法が分からず,途方に暮れていた所に,以下の様な記事を発見しました.LTS版のKernelをインストールする方法の記事です.
以降は上記の記事を参考に解説します.Kernelのアップデートのために,以下のコマンドを実行します.上記記事のコマンドをそのまま実行すると,5.14.0がインストールされます.5.14.0は実はLTS版ではありません.試しに5.10.xや5.15.xを試してみたのですが,NIVIDIAドライバーとの相性が悪く起動出来なくなってしまったため,今回は5.14.0を利用することとしました.
sudo apt install -y linux-image-oem-20.04b
- 参考
完了後,デフォルトで起動するKernelのバージョンを変更します.Grub2(ブートローダー)の設定を変更することで可能です.
以降の設定は失敗すると,最悪OSが起動出来なくなります.十分注意をして実施して下さい.
インストール済のKernelの一覧を出力します.Grubメニューに登録されているKernelの一覧から取得します.取得方法は以下のコマンドを実行します.
$ grep -A100 submenu /boot/grub/grub.cfg | grep menuentry
submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-74416a76-9f47-4342-b02e-3e5162d506c1' {
menuentry 'Ubuntu, with Linux 5.15.0-1003-intel-iotg' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.15.0-1003-intel-iotg-advanced-74416a76-9f47-4342-b02e-3e5162d506c1' {
menuentry 'Ubuntu, with Linux 5.15.0-1003-intel-iotg (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.15.0-1003-intel-iotg-recovery-74416a76-9f47-4342-b02e-3e5162d506c1' {
menuentry 'Ubuntu, with Linux 5.14.0-1036-oem' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.14.0-1036-oem-advanced-74416a76-9f47-4342-b02e-3e5162d506c1' {
menuentry 'Ubuntu, with Linux 5.14.0-1036-oem (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.14.0-1036-oem-recovery-74416a76-9f47-4342-b02e-3e5162d506c1' {
menuentry 'Ubuntu, with Linux 5.13.0-41-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.13.0-41-generic-advanced-74416a76-9f47-4342-b02e-3e5162d506c1' {
menuentry 'Ubuntu, with Linux 5.13.0-41-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.13.0-41-generic-recovery-74416a76-9f47-4342-b02e-3e5162d506c1' {
今回利用するのは以下の2つの項目です.(値は筆者の環境の場合)
-
submenu 'Advanced options for Ubuntu' $menuentry_id_option
- gnulinux-advanced-74416a76-9f47-4342-b02e-3e5162d506c1
-
menuentry 'Ubuntu, with Linux 5.14.0-1036-oem'
の$menuentry_id_option
- gnulinux-5.14.0-1036-oem-advanced-74416a76-9f47-4342-b02e-3e5162d506c1
この2つの値を>
で繋いだ以下をこの後用います.
gnulinux-advanced-74416a76-9f47-4342-b02e-3e5162d506c1>gnulinux-5.15.0-1003-intel-iotg-advanced-74416a76-9f47-4342-b02e-3e5162d506c1
Grub2の設定を変更します.まず,/etc/default/grub
を開きます.
sudo vim /etc/default/grub
設定内容を以下の様に変更します.変更後の値は上記の値(筆者の環境の場合)を設定しています.
- GRUB_DEFAULT=0
+ GRUB_DEFAULT="gnulinux-advanced-74416a76-9f47-4342-b02e-3e5162d506c1>gnulinux-5.14.0-1036-oem-advanced-74416a76-9f47-4342-b02e-3e5162d506c1"
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
編集後,Grub2に設定を反映させるため,update-grubコマンドを実行し,PCを再起動します.
sudo update-grub
sudo reboot
再起動後,設定が反映されているか確認します.
$ uname -r
5.14.0-1036-oem
合わせてnvidia-smiコマンドを実行します.無事GPUが正しく認識されています.因みに再起動時にGPUのファンが回り始めました.(独特の唸るようなファンの音が発生するため直ぐに分かります.)
$ nvidia-smi
Tue May 24 00:03:54 2022
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 510.73.05 Driver Version: 510.73.05 CUDA Version: 11.6 |
|-------------------------------+----------------------+----------------------+
| 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 ... Off | 00000000:01:00.0 Off | N/A |
| 0% 49C P8 18W / 250W | 15MiB / 8192MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 1213 G /usr/lib/xorg/Xorg 9MiB |
| 0 N/A N/A 1411 G /usr/bin/gnome-shell 3MiB |
+-----------------------------------------------------------------------------+
参考にした記事では,不要なKernelを削除して,GRUB_DEFAULT=0
に再設定する行程が有りますが,当面LTS版の5.14.0を利用する予定のため,このままにしておくことにします.(アップグレートを実行時にNVIDIAドライバーと相性の悪いバージョンに置き換わる可能性が有るため)
まとめ
GPUマシーンの復旧に丸々1週間程掛かりました.NVIDIAドライバー関連のトラブルは今まで何度か見舞われたことが有りますが,ここまで復旧に時間を要したのは久し振りでした.同様の症状に見舞われている方の助けとなれば幸いです.