Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Ollama GPU Scheduling: Running Inference and ComfyUI on One RTX Without OOM

2026年10月12日に「Dev.to」が公開したITニュース「Ollama GPU Scheduling: Running Inference and ComfyUI on One RTX Without OOM」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

限られたVRAMのGPUでAIモデル(Ollama)と画像生成(ComfyUI)を同時に動かすには、VRAM消費量を理解し、モデルの量子化やComfyUI設定最適化が重要。時間や優先度でGPU利用をスケジューリングし、VRAM監視でメモリ不足を防ぎ効率的に利用する。

ITニュース解説

システムエンジニアを目指す皆さんにとって、AI技術は今後のキャリアで避けて通れないテーマの一つである。特に、自宅で最新のAI技術を試したいと考える場合、高性能なGPUは必須となる。しかし、限られた予算の中で一台のGPU、例えば16GBのVRAMを持つNVIDIA RTX 5060 Tiのようなグラフィックスカードを、複数のAIアプリケーションで効率的に共有することは大きな課題である。この記事では、特に大規模言語モデル(LLM)を実行する「Ollama」と、画像生成AIであるStable DiffusionのGUIツール「ComfyUI」という二つの主要なAIアプリケーションを、一台のGPUでメモリ不足(OOM: Out Of Memory)に陥ることなくスムーズに運用するための戦略について解説する。

GPUが持つVRAM(ビデオRAM)は、AIモデルが処理に使うデータを一時的に保存する場所であり、その容量がAIアプリケーションの性能や実行可否を決定する。例えば、16GBのVRAMを持つRTX 5060 Tiの場合、Ollamaで動かす140億パラメータ規模の言語モデルは約7.5GB、80億パラメータ規模のモデルは約4.5GBのVRAMを消費する。ComfyUIでは、高解像度の画像生成モデルであるSDXL(1024x1024)が約6~8GB、SD 1.5(512x512)が約3~4GBを消費する。これに加えて、システム自体のオーバーヘッドやCUDAコンテキストの維持に1~2GB、そしてControlNetや高解像度化処理のような追加機能がさらに数GBのVRAMを要求するため、同時に多くの処理を実行するとVRAMがすぐに枯渇してしまう。例えば、Ollamaの14bモデルとSDXLの画像生成を同時に行うと、合計で約14.5GBとなり、16GBのVRAMでは非常にタイトな状況となる。このため、VRAMの消費量を正確に把握し、使用するモデルや設定を適切に選択することが重要である。

複数のアプリケーションがGPUを共有するための主要な戦略は二つある。一つは「時間ベースのスケジューリング」で、これはGPUの使用時間を明確に区切る方法である。例えば、午前中はOllamaを使ってコードアシスタントとして活用し、午後はComfyUIでクリエイティブな画像生成を行うといったように、事前に利用計画を立てる。これにより、アプリケーション同士がVRAMを取り合う競合を防ぎ、それぞれの作業に集中できる。実装には、OSのタイマー機能(Linuxのcronなど)を使ってアプリケーションの起動や停止を自動化することが考えられる。もう一つは「優先度ベースのアクセス」である。この方法では、アプリケーションがGPUを使いたい時にアクセスをリクエストし、あらかじめ設定された優先度に基づいてGPUが割り当てられる。例えば、ユーザーが直接対話するチャットアプリケーション(Ollama)には高い優先度を与え、バックグラウンドで行われる画像の一括生成(ComfyUI)には低い優先度を設定する。これにより、急ぎの作業が優先的に処理され、全体的な応答性が向上する。実際の運用では、これら二つの戦略を組み合わせたハイブリッドアプローチが推奨される。予測可能な作業には時間ベースを使い、緊急性のある対話型リクエストには優先度ベースで割り込みを許可するといった方法である。

VRAMの割り当て方には、「静的パーティショニング」と「動的パーティショニング」の二種類がある。静的パーティショニングは、GPUのVRAMをアプリケーションごとに固定的に分割する方法である。例えば、Ollamaに7GB、ComfyUIに9GBといったように、起動時にあらかじめ割り当てを決めておく。この方法はシンプルだが、片方のアプリケーションがアイドル状態でも割り当てられたVRAMは解放されないため、リソースの無駄が生じる可能性がある。また、割り当てられた容量以上の処理は行えない。一方、推奨される「動的パーティショニング」は、アプリケーションが利用可能なVRAMを柔軟に使うことを許可しつつ、ソフトな上限を設定して過剰な使用を防ぐ方法である。これは、リアルタイムでVRAM使用量を監視し、必要に応じてアプリケーションに警告を送ったり、より小さいモデルへの切り替えを促したりすることで実現する。動的パーティショニングは、リソースをより効率的に活用できるが、実装にはVRAM監視スクリプトなどが必要となる。

VRAMを効率的に使うための強力な味方となるのが「モデルの量子化」である。AIモデルは通常、高精度な数値形式でデータを持っているが、これを精度を少し落とした形式(例えば、8ビット整数や4ビット整数)に変換することで、モデルのファイルサイズとVRAM消費量を大幅に削減できる。この処理を「量子化」と呼ぶ。例えば、140億パラメータのモデルも、量子化レベルをQ4_K_Mにすれば約7.5GB、Q3_K_Mにすれば約6.2GBまでVRAM消費量を抑えることが可能となる。品質は多少低下するものの、多くの場合、実用上問題ないレベルを維持できるため、VRAMが限られる環境では積極的に利用すべき手法である。Ollamaでは、異なる量子化レベルのモデルを複数ダウンロードし、必要に応じて切り替えて使うことができる。

ComfyUIにおいてもVRAMを節約するための多くの設定がある。例えば、SDXLよりもVRAM消費量が少ないSD 1.5モデルを使用したり、「attention slicing」や「VAE tiling」といった技術を有効にしたりすることで、VRAMのピーク使用量を抑えることができる。Attention slicingは、画像処理を小さな塊に分割して計算することで、処理速度と引き換えにVRAM消費量を減らす。VAE tilingも同様に、画像をタイル状に処理することでVRAM使用量を削減する。また、ControlNetユニットの数を制限したり、バッチサイズ(一度に生成する画像の数)を小さくしたりすることも有効である。起動オプションに--medvramや--lowvramを追加することで、自動的にVRAM最適化設定が適用される。これらの最適化を施しても、高解像度や複数のControlNet、Hi-Res fixといったVRAMを多く消費する設定を同時に使うと、16GBのVRAMではOOMになりやすいため、状況に応じて設定を調整することが重要である。

GPUの安定稼働を維持するためには、アプリケーションからのリクエストを適切に管理する「キュー管理」が不可欠である。OllamaやComfyUIのようなAIアプリケーションは、同時に大量のリクエストを受け付けるとVRAMを急激に消費し、システム全体が不安定になる可能性がある。そのため、リクエストをキューに入れて順番に処理したり、同時に処理する数を制限したりする仕組みが必要となる。Ollamaの場合、複数のプロンプト入力を非同期でキューに入れ、GPUが利用可能になったら一つずつ処理していくことで、過負荷を防ぐことができる。ComfyUIも同様に、画像生成ジョブをキューに入れ、GPUが空いているときに順次実行することで、VRAMの急激な上昇を避けることが可能である。

さらに、システムの健全性を常に把握するために「監視とアラート」の仕組みを導入することが推奨される。監視すべき主要な項目には、VRAMの使用量(使用中、合計、空き容量)、GPUの使用率、GPUとメモリの温度、消費電力、そして各アプリケーションの応答時間やキューの深さなどがある。VRAM使用率が80%や90%を超えた場合に警告を発したり、GPU温度が危険域に達した場合にアラートを出したりすることで、問題が深刻化する前に対応できるようになる。また、OllamaやComfyUIが正常に動作しているか定期的にヘルスチェックを行うことで、アプリケーションの無応答状態を早期に検知できる。これらの監視データをログに記録し、分析することで、システム運用の改善点を見つけることにもつながる。

実際の運用では、個人の使い方に合わせてワークフローを工夫することが重要である。例えば、開発者であれば、午前中はOllamaの14bモデルを起動し、ComfyUIは簡易的なSD 1.5モデルでコンセプト生成に使う。ランチ休憩中はGPUを解放したり、実験的な生成に使ったりする。アーティストであれば、午前中はComfyUIでSDXLモデルと高解像度設定で作品制作に集中し、Ollamaは8b程度の軽量モデルでプロンプト作成の補助に使うといった具合である。このように、時間帯や目的に応じてGPUの主な利用者を切り替えることで、限られたリソースを最大限に活用できる。

運用中に発生しやすい問題とその解決策も理解しておく必要がある。「頻繁なメモリ不足エラー(OOM)」に遭遇した場合は、VRAM使用量をリアルタイムで監視し、アプリケーションのパラメータを自動的に減らして再試行する「グレースフルな劣化処理」を実装することが有効である。例えば、Ollamaの生成文字数を減らしたり、ComfyUIの解像度を下げたりする。GPUの「切り替え時のパフォーマンス低下」は、モデルの再読み込みやVRAMの断片化が原因で発生することがある。これを軽減するためには、可能であればモデルをVRAMに保持し続けるか、高速なストレージ(NVMe SSDなど)を利用して読み込み時間を短縮する。また、定期的にGPUを再起動したり、torch.cuda.empty_cache()のようなメモリ解放コマンドをPyTorchベースのアプリケーションで実行したりすることもVRAMの断片化対策となる。アプリケーションが応答しなくなった場合は、ハートビート(定期的な生存確認)メカニズムを実装し、無応答が続けば自動的に再起動するなどの対策が考えられる。

このように、一台のNVIDIA RTX GPUをOllamaとComfyUIのような異なるAIアプリケーションで共有することは、適切な戦略を講じることで十分に実現可能である。重要なのは、VRAMの制限を正確に理解し、モデルの量子化を積極的に活用すること、そして時間ベースと優先度ベースを組み合わせた賢いスケジューリングを行うことである。常にVRAMの使用状況を監視し、予期せぬ問題に備えることも必要である。同時に両方のアプリケーションを最大性能で動かすことは現実的ではないが、それぞれの用途に応じて効率的に利用し、必要に応じてリソースを切り替えることで、一台のGPUが開発作業とクリエイティブな活動の両方を強力にサポートするAIワークステーションとなり得る。これらの原則を理解し、自身の利用パターンに合わせて試行錯誤を重ねることが、快適なAI環境を構築する鍵となる。

関連コンテンツ

関連IT用語

関連ITニュース