サーバー運用時のエラー

nvidia-smiが動かない
事象
いつの間にかnvidia-smi
コマンドが正常に動かず、以下のエラーがでるようになった。
$ nvidia-smi
Failed to initialize NVML: Driver/library version mismatch
エラーの原因を特定
まずdmesg
でどのようなエラーが出ているか把握する。NVIDIAのclientとkernel moduleのバージョン違いが原因の模様。
$ dmseg
NVRM: API mismatch: the client has the version 515.76, but
NVRM: this kernel module has the version 515.65.01. Please
NVRM: make sure that this kernel module and all NVIDIA driver
NVRM: components have the same version.
NVIDIAのclientがいつupgradeされたのか確認する。
$ vim /var/log/apt/history.log
Start-Date: 2022-10-15 06:44:00
Commandline: /usr/bin/unattended-upgrade
Upgrade: libnvidia-compute-515:amd64 (515.65.01-0ubuntu0.20.04.1, 515.76-0ubuntu0.20.04.1), libnvidia-compute-515:i386 (515.65.01-0ubuntu0.20.04.1, 515.76-0ubuntu0.20.04.1), libnvidia-encode-515:amd64 (515.65.01-0ubuntu0.20.04.1, 515.76-0ubuntu0.20.04.1), libnvidia-encode-515:i386 (515.65.01-0ubuntu0.20.04.1, 515.76-0ubuntu0.20.04.1), nvidia-kernel-common-515:amd64 (515.65.01-0ubuntu0.20.04.1, 515.76-0ubuntu0.20.04.1), xserver-xorg-video-nvidia-515:amd64 (515.65.01-0ubuntu0.20.04.1, 515.76-0ubuntu0.20.04.1), libnvidia-gl-515:amd64 (515.65.01-0ubuntu0.20.04.1, 515.76-0ubuntu0.20.04.1), libnvidia-gl-515:i386 (515.65.01-0ubuntu0.20.04.1, 515.76-0ubuntu0.20.04.1), libnvidia-fbc1-515:amd64 (515.65.01-0ubuntu0.20.04.1, 515.76-0ubuntu0.20.04.1), libnvidia-fbc1-515:i386 (515.65.01-0ubuntu0.20.04.1, 515.76-0ubuntu0.20.04.1), libnvidia-decode-515:amd64 (515.65.01-0ubuntu0.20.04.1, 515.76-0ubuntu0.20.04.1), libnvidia-decode-515:i386 (515.65.01-0ubuntu0.20.04.1, 515.76-0ubuntu0.20.04.1), libnvidia-cfg1-515:amd64 (515.65.01-0ubuntu0.20.04.1, 515.76-0ubuntu0.20.04.1), nvidia-utils-515:amd64 (515.65.01-0ubuntu0.20.04.1, 515.76-0ubuntu0.20.04.1), nvidia-dkms-515:amd64 (515.65.01-0ubuntu0.20.04.1, 515.76-0ubuntu0.20.04.1), nvidia-compute-utils-515:amd64 (515.65.01-0ubuntu0.20.04.1, 515.76-0ubuntu0.20.04.1), nvidia-driver-515:amd64 (515.65.01-0ubuntu0.20.04.1, 515.76-0ubuntu0.20.04.1), libnvidia-extra-515:amd64 (515.65.01-0ubuntu0.20.04.1, 515.76-0ubuntu0.20.04.1), nvidia-kernel-source-515:amd64 (515.65.01-0ubuntu0.20.04.1, 515.76-0ubuntu0.20.04.1)
End-Date: 2022-10-15 06:47:31
/usr/bin/unattended-upgrade
によって自動的にNVIDIA clientがupgradeされたことがわかる。
解決策
下記の記事を参考にkernel moduleをupgradeする。
sudo apt --fix-broken install
sudo apt remove *nvidia*
sudo apt install nvidia-driver-515
sudo reboot
対策
パッケージの自動更新を無効にする

Ubuntuをインストールした後にWinowsをインストールしたらUbunutuが起動しなくなる
事象
Ubuntuをインストールした後にWinowsをインストールしたらUbunutuが起動しなくなる。
原因
BIOSがUbuntuのEFI領域を認識しなくなっていた。
(Windowsのインストーラがdiskを読み込んだ際にパーティション情報を書き換えてる気がする。)
解決策
Ubunutu Live USBを起動してCtrl+Alt+Tでターミナルを開き、インターネットに接続し、次のコマンドを実行してboot-repair
をインストールする。
sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt-get update
sudo apt-get install -y boot-repair && boot-repair
次にboot-repair
を実行し、recommended repairを選択し、再起動する。

apt upgradeができない
事象
$ sudo apt upgrade
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
アップグレードパッケージを検出しています... 完了
インストールすることができないパッケージがありました。おそらく、あり得
ない状況を要求したか、(不安定版ディストリビューションを使用しているの
であれば) 必要なパッケージがまだ作成されていなかったり Incoming から移
動されていないことが考えられます。
以下の情報がこの問題を解決するために役立つかもしれません:
以下のパッケージには満たせない依存関係があります:
grub-efi-amd64-signed : 依存: grub-efi-amd64-bin (= 2.06-2ubuntu7)
E: 壊れたパッケージ
原因
おそらくupgradeする対象にversion固定しなければいけないパッケージであるgrub-efi-amd64-bin
が含まれていた。
解決策
下記のコマンドを実行してgrub-efi-amd64-bin
をupgrade対象から外す
echo grub-efi-amd64-bin hold | sudo dpkg --set-selections

Nvidia Docker内でnvidia-smiでsudoなしで使えない
事象
Nvidia Dockerの--gpus all
をつけてコンテナを立ち上げたとき、sudo
なしでnvidia-smi
を実行したとき以下のエラーが出る。sudo nvidia-smi
では問題なく通る。
$ nvidia-smi
Error: nvml: Insufficient Permissions
原因
コンテナ内のユーザがdocker groupに入っていないことが原因である。
解決策
解決策は複数考えられる。
- stack overflowの回答のようにコンテナ内のユーザをdocker groupに追加する。
- ローカルでdocker groupに追加されているユーザーをコンテナ内でも使うようにする。
具体的には次の記事のようにdocker runする際に/etc/passwd
と/etc/group
をバインドすればよい。
https://blog.amedama.jp/entry/docker-container-host-same-user-bis
自分は2番目の方法で解決した。