0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AMD統合GPUで「CUDA out of memory」が出るときの切り分け(UMA)

0
Posted at

NVIDIAなしのAMD統合GPU(iGPU)で ComfyUI や PyTorch を回していると、次のようなエラーで止まりがちです。

RuntimeError: CUDA out of memory. Tried to allocate 2.50 GiB.
GPU has 8.00 GiB total capacity; 6.20 GiB is already allocated;
0.50 GiB is free.

ここで混乱しやすいのは次の2点です。

  1. ROCmなのにメッセージが CUDA
  2. VRAMを増設できないのに「GPUメモリ不足」と言われる

この記事は、選択肢の全体地図ではなく、メモリ不足の切り分けだけに絞ります。検証の背景は Ryzen AI Max+ 395 / Radeon 8060S 系(大容量メモリ+UMA)です。


結論(先に)

やりたいこと まず疑うこと
CUDA out of memory UMA(GPU用に予約した枠)が足りないか、解像度・モデルが大きすぎる
Windows全体が重い/落ちる UMAを上げすぎてアプリ用RAMが足りない
両方交互に起きる モデル・解像度を下げる/同時起動を減らす

統合GPUでは、GPU用とアプリ用が同じ物理メモリを分け合います。片方を増やせば、もう片方が減ります。


なぜ「CUDA」と出るのか

ROCm環境でも、PyTorch側のエラー表記は歴史的に CUDA out of memory のままのことが多いです。
「CUDA非対応だから失敗した」という意味ではありません。 「GPU用に確保したプールが足りない」と読んでください。


UMAとは(最小限)

システムメモリ(例: 128GB)
├─ GPU用(UMA Frame Buffer)← モデル・テンソル(PyTorchから見える側)
└─ アプリ用                ← Windows・ブラウザ・LM Studio本体など

BIOSの UMA Frame Buffer Size で、GPU側に何GB予約するかを決めます。
専用グラボのVRAMと違い、物理DIMMを差し増しする話ではありません


不足は3パターン

パターン 症状のイメージ 対処の方向
GPU用不足 CUDA out of memory UMAを増やす/モデル・解像度を下げる
アプリ用不足 全体が重い、クラッシュ、ブラウザが死ぬ UMAを減らす/他アプリ終了
両方不足 上の症状が交互 そもそも欲張りすぎ。同時起動をやめる

「UMAを最大まで上げれば勝ち」ではありません。128GB機でUMAを極端に上げると、アプリ用が枯渇して別の地獄になります。


用途別の目安(出発点)

実機では用途でUMAを切り替える運用が現実的です。数字は出発点であり、機種・同時起動で前後します。

画像生成寄りの例

用途 システムメモリの目安 UMAの出発点
基本(SD 1.5・512前後) 64GB〜 16GB
高め(SDXL・768前後) 128GB寄り 32GB
さらに重い 128GB 32〜64GB(様子を見る)

LLM寄りの注意

大きいモデルを載せるときもUMAは効きますが、上げすぎるとロードがハングするケースがあります(「大きいほど良い」ではない)。
「載らないからUMAを上げる」→「上げたら固まる」になったら、一度下げて再試行し、モデルサイズやオフロード設定も疑ってください。


切り分けチェックリスト

エラーが出たら、設定をいじる前にこの順で確認します。

  1. 他に重いアプリがいないか(ブラウザ大量タブ、別の生成AI、別LLM)
  2. 解像度・バッチ・モデル規模を一度下げる(まず動かす)
  3. いまのUMAは何か(BIOSの値をメモ)
  4. 空きRAMは残っているか(タスクマネージャーの「利用可能」)
  5. まだGPU側が足りないなら UMAを一段上げる(上げすぎ注意)
  6. 全体が重いなら UMAを一段下げる

PowerShellで空きメモリ(Available)のざっくり確認例:

Get-Counter '\Memory\Available MBytes'

出てくる数値は MB です。例: 34285 → 約 33.5GB。
UMAを大きく取っていると、この「アプリ用に空いている量」は当然減ります。

PyTorch側(GPUプール内)の確認例:

import torch
print(torch.cuda.is_available())
if torch.cuda.is_available():
    print(f"Allocated: {torch.cuda.memory_allocated(0) / 1024**3:.2f} GB")
    print(f"Reserved:  {torch.cuda.memory_reserved(0) / 1024**3:.2f} GB")

タスクマネージャーの「メモリ」と、ここの Allocated は見ている場所が違います。混同しないこと。


よくある誤解

誤解 実際
CUDAと出た=NVIDIAが必要 ROCmでも表記がCUDAのことがある
UMA最大=最強 アプリ用が死ぬ/ロードハングもありうる
メモリ総量だけ見ればよい GPU用とアプリ用の配分が見えないと詰まる
画像とLLMを同時に全力 統合GPUでは衝突しやすい。片方可通してから

次の一歩

この記事は「メモリで止まったときの切り分け」専用です。環境構築の全手順は本編側にあります。


まとめ

  • AMD統合GPUの OOM は、まず UMA配分解像度・モデル規模 を疑う
  • メッセージの CUDA は、多くの場合 表記の話
  • UMAは上げるだけでなく、下げてアプリ用を守る判断も必要
  • 同時に全部を最大設定にしない

切り分けができれば、「環境が壊れた」と思っていた事象の半分は、配分の問題に見えてきます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?