TT Lab
ブログ

한국어 English 日本語 中文

はじめる
ブログ

ブログ

自動更新がGPUを止めた日:ライブラリは新バージョン、カーネルモジュールは旧バージョン

ステータス:解決済み(2026-10-13〜14)、記録時点。 更新時刻とパッケージリストは2026-10-16にノードの unattended-upgrades.log を 読んで 確認し、その日のエラーメッセージは作業メモから引用しています。ポッドのエラーがなぜあのような内容だったのかは 推測です。ドライバーの正確な バージョン番号はノードに紐づくため記載しません。

目次

一行まとめ

影響 1台のGPUノードでGPUを要求したポッドの起動が失敗。そのノードのGPU検証が3日間静かにブロックされていた
原因 unattended-upgradesがNVIDIAドライバーパッケージをアップデートしたが、ロード済みカーネルモジュールは再起動まで旧バージョンのまま → ユーザーライブラリとバージョン不整合が発生
修正内容 ノードの再起動(新モジュールのロード)。人間が実施 — 同ノードの他のサービスが一時的に切断されるため
再発防止 GPUノードの自動更新からNVIDIAパッケージを除外した(Package-Blacklist)。ドライバーは計画的にアップデートする

1. 症状:原因を指し示さないエラー

GPUを要求したポッドがコンテナを作成できず、イベントのエラーは次のように終わっていました。

… open /run/nvidia-persistenced/socket: no such file or directory

ポッドのエラーだけを見ると、GPU Operatorやコンテナツールキット、あるいはpersistencedデーモンの設定を真っ先に疑うことになります。実際にそのノードの nvidia-persistenced は起動していませんでした。しかしそれは結果に過ぎません。ノードに直接問い合わせて初めて本当の答えが出ました。

$ nvidia-smi
Failed to initialize NVML: Driver/library version mismatch

ポッドのエラーがなぜよりによってソケットの話だったのかは確認できていません。 推測はこうです。バージョン不整合によりNVMLが初期化されないためpersistencedが起動できずソケットも生成されないが、コンテナにGPUをアタッチする側はそのソケットが存在するものとしてオープンしようとして失敗したというものです。 教訓は明確です。「 GPUポッドがおかしいときは、まずノードで nvidia-smi を実行する。」

2. 原因:3日前深夜の自動更新

ノードの unattended-upgrades.log に答えがありました。2026-10-10 06:08、自動更新が適用するパッケージのリストにNVIDIA関連パッケージが15個含まれていました — ユーザーライブラリ(libnvidia-*)、ユーティリティ、ドライバーメタパッケージ、そしてカーネルモジュールソースとdkmsパッケージです。

디스크는 새 판, 메모리는 옛 판 디스크(설치된 것) 메모리(돌고 있는 것) 사용자 라이브러리 새 판(자동 갱신) nvidia-smi 가 여는 것 새 판(새로 열 때마다) 커널 모듈 파일 새 판(dkms 가 빌드) 적재된 커널 모듈 옛 판(재부팅 전까지) 둘이 만나면: Driver/library version mismatch 시간선 10-10 06:08 자동 갱신 (조용한 사흘) GPU 를 안 쓰면 10-13 GPU 파드 실패 10-13·14 두 노드 재부팅 재발 방지: 드라이버 패키지를 자동 갱신에서 빼고, 올릴 때는 비우기 → 올리기 → 재부팅 → 확인을 한 번에.
図:ディスクとメモリのバージョンが乖離する構造とタイムライン

ここでバージョンが2つに分かれます。

ところが nvidia-smi やGPUを使用するプロセスは起動するたびに ディスク上の新しいライブラリをオープンします。新しいライブラリが古いモジュールに出会うため、バージョンが一致しないとして拒否されます。

なぜ再起動が伴わなかったのでしょうか。unattended-upgrades の Automatic-Reboot は デフォルトでオフです(公式README基準)。そのノードの設定もコメントアウトされたデフォルト値のままでした。更新は自動、再起動は手動 — このデフォルト値の組み合わせが「中途半端にアップデートされた」状態を作り出します。

そして3日間、誰も気づきませんでした。その間、そのノードで新しくGPUを取得したポッドがなかったためです。すでにGPUを保持して稼働していたプロセスは以前にオープンしたライブラリを使い続けるため問題なく動いているように見えます(推測 — その3日間にGPUを保持していたプロセスが存在したかは未確認)。

3. 確認方法

# 적재된 모듈의 판
cat /proc/driver/nvidia/version
# 디스크에 깔린 패키지의 판
dpkg -l | grep -E 'nvidia-(driver|utils)-'
# 언제 누가 올렸나
grep -i nvidia /var/log/unattended-upgrades/unattended-upgrades.log
# 노드가 언제부터 켜져 있었나
uptime -s

1つ目と2つ目のバージョンが異なり、3つ目に更新履歴があり、4つ目がそれより前であればこの障害です。

4. 修正内容:再起動、そしてそれは人間の役割

新しいモジュールをロードする最も確実な方法は再起動です。モジュールをアンロードして再度ロードする方法もありますが、GPUを保持しているプロセスが1つでもあるとアンロードできません。

この再起動は人間が実行しました。そのノードにはGPUポッドだけでなく、他の複数の本番サービスや検証用VMが同居していました。再起動するとこれらが一時的に切断されるか、他のノードに移行します。 そのタイミングと影響は人間が判断すべき事項です。エージェントは原因、コマンド、影響リストを整理して引き渡しました。

2026-10-13にそのノードを、2026-10-14に同じ自動更新を受け取っていたもう1台のGPUノードを再起動し、2台のノードのモジュールとライブラリのバージョンを一致させました。

5. 再発防止:自動更新からドライバーを除外する

両方のノードに次のように設定を追加しました(2026-10-16にファイルを読んで確認)。

// /etc/apt/apt.conf.d/51-no-nvidia-autoupgrade
Unattended-Upgrade::Package-Blacklist {
  "nvidia-";
  "libnvidia-";
  "xserver-xorg-video-nvidia";
};

Package-Blacklist の項目は 正規表現です。リストにヒットするパッケージはアップデートされず、ヒットするパッケージに依存するパッケージも一緒にアップデートされません(公式README基準)。同じことを apt-mark hold で行っても構いません。holdは手動 apt upgrade までブロックするという点が異なります。

代償も記載しておきます。今後、ドライバーの セキュリティアップデートも自動では届きません。 そのため、ドライバーは計画的にアップデートします。

  1. ノードを空にする(kubectl drain).
  2. ドライバーパッケージをアップデートする。
  3. 再起動する。
  4. nvidia-smi とGPUポッド1つで確認してノードを戻す(kubectl uncordon).

NVIDIA GPU Operatorのドキュメントのプラットフォームサポート表には、「サポートされていないカーネルにアップグレードされないようにunattended-upgradesのカーネル自動更新をオフにせよ」という推奨事項がすでに記載されています。あらかじめインストールしておいたドライバー(driver.enabled=false)を使用する場合 ドライバーパッケージも同様の問題に見舞われるという内容がなかったため、トラブルシューティングドキュメントにこの事例を追加するPRを送信しました — NVIDIA/cloud-native-docs#524(2026-10-16時点オープン)。

6. 残された課題と制限

一言メモ。 自動更新は半分だけ自動です。ファイルは置き換えてくれますが、メモリは再起動しないと変わりませんからね。そしてポッドが「見当違いのファイルがない」と言ってきたら、そのファイルを探す前にノードで nvidia-smi を1回!本当の原因は大抵そこにあります。

参考

すべての資料は2026-10-16に閲覧しました。

ログインするといいねできます

コメント

まだコメントはありません。

ログインするとコメントできます