
謎のGPUエラーを追いかけたら「クラッシュしないのに70倍遅くなる」競合を見つけた話
きっかけ:前回発生した謎のGPUエラーを追いかける 以前、X投稿のハッシュタグ生成(OpenVINOバックエンド、Qwen2.5-14B)で立て続けにGPUエラーが起きたことがあった。最初はCL_OUT_OF_RESOURCES、リトライしたら今度は「32GB(34483056640バイト)のメモリ確保を要求したが、デバイスが対応する最大割り当ては12.5GB」という、明らかに異常な数値のエラー。その場ではハッシュタグを手動指定して切り抜けたが、原因はちゃんと調べていなかった。今回はこれを追いかけてみた。 まずクリーンな状態で再現を試みる 素直に、何もGPUを使っていない状態でOpenVINO(Qwen2.5-14B-int4)を呼び出してみた。 パイプライン読み込み: 21.2秒 生成: 0.6秒 普通に動く。エラーは一切出なかった。となると、あの時特有の「何か」が引き金だったはず。あの時は、Ollamaでの本文生成やimage_gen_server(Stable Diffusion)でのサムネイル生成など、GPUを酷使する処理を長時間繰り返した後にハッシュタグ生成(OpenVINO)を呼んでいたタイミングだった。そこで、実際にGPUを別プロセスに使わせた状態を意図的に作って、同じ状況を再現できるか試した。 検証1: OllamaがGPU0にモデルを常駐させた状態 Ollamaでモデル(Gemma4-12B-Heretic)を明示的に常駐させたまま、同じOpenVINO呼び出しを実行してみた。結果、エラーにはならなかったものの、生成時間が0.6秒→41.4秒と約70倍に膨れ上がった。クラッシュはしないが、実用にならないレベルまで極端に遅くなる、という挙動だった。 検証2: image_gen_server(GPU1・SYCL)が画像生成中の状態 Stable Diffusionの画像生成ジョブを投げ、処理が進行中のタイミングでOpenVINO呼び出しを試したところ、こちらは0.7秒とほぼ影響なし。OpenVINOの既定デバイス設定(GPU、実質GPU.0)と、image_gen_serverが固定しているGPU1(xpu:1)が別の物理GPUなので、単純には競合しなかったようだ。 エラーの再現には至らなかった 結論から言うと、今回の検証では最初に起きたCL_OUT_OF_RESOURCESや32GB要求エラーそのものは再現できなかった。分かったのは「Ollamaが同じGPUにモデルを常駐させていると、クラッシュはしないが劇的に遅くなる」という別の症状で、あの時のエラーはおそらくもっと限定的な条件——例えば長時間の連続テストで複数プロセスのキル・再起動を繰り返した末に、GPUドライバ側のメモリ管理状態が断片化・不整合を起こしていた、というような、狙って再現しにくい類の不具合だったのだと思う。 結論 クリーンな状態ではOpenVINOのGPUエラーは発生しない — コード自体に恒常的なバグがあるわけではなさそう Ollamaが同じGPUを使用中だと、クラッシュせず極端に遅くなる(約70倍) — エラーという形で気づけないぶん、原因特定が難しい 物理的に別GPUを使っていれば競合は起きにくい — image_gen_server(GPU1)とOpenVINO既定(GPU0)の組み合わせでは影響なし 元のクラッシュは再現できず — 長時間・多プロセスの酷使の末に起きる、条件が絞り込みにくい類の不具合だった可能性が高い。長時間の負荷試験をした後にGPU関連のエラーが出たら、コードのバグを疑う前に、一度全プロセスを終了してGPU状態をリセットしてみるのも有効な対処法になりそう 原因を完全に特定できたわけではないけれど、「クラッシュしないが劇的に遅くなる」競合パターンを1つ見つけられたのは収穫だった。すべての不具合が綺麗に再現できるわけではない、というのも実測してみて初めて分かることだと思う。