🧭 あなたに最適なVPSを30秒で無料診断 診断する →

【2026年版】VPSで「CUDA out of memory」が出た時の対処法とプラン変更の目安

読む前に30秒だけ。用途・予算を選ぶだけで、あなたに最適なVPSがわかります(無料・登録不要) 無料診断 →

【2026年版】VPSで「CUDA out of memory」が出た時の対処法とプラン変更の目安

最初に結論を書きます

OOMが出ても、いきなりプランを上げるのだけは待ってください。

正直に言うと、int4量子化を試しただけで解決したケースが体感7〜8割です。Llama-3-8Bで言えば、fp32で約32GB必要だったVRAMがint4で約4GBになる。8倍近く減る。それだけで「足りなかったVRAM」が「余るVRAM」に化けることがある。

プランアップグレードを考えるのは、量子化・バッチサイズ調整・キャッシュ解放を全部やって、それでもOOMが出てから。この順番を間違えると、毎月数千円を不要に払い続けることになります。月7,000円のGPUプランを12ヶ月使えば84,000円。量子化5分で解決できたものに84,000円払うのはさすがにもったいない。これだけ最初に言わせてください。


GPU VPSでAIモデルを動かしていると、ある日突然こんなエラーが出ます。

torch.cuda.OutOfMemoryError: CUDA out of memory.
Tried to allocate 2.50 GiB (GPU 0; 15.78 GiB total capacity;
13.25 GiB already allocated; ...)

「VRAMが足りない」というシンプルなエラーなんですが、対処の順番を間違えるとコストが跳ね上がります。この記事では原因の切り分けから、コードレベルの対処法、それでもダメなときのプランアップグレード判断まで、実際に試行錯誤した経験ベースで書きます。


CUDA OOMが発生する主な原因

原因説明
モデルサイズが大きすぎる7Bモデルでも fp32だと約28GBのVRAMが必要
バッチサイズが大きい一度に処理するデータが多すぎる
キャッシュが蓄積している推論後にGPUメモリが解放されていない
複数プロセスが競合他のプロセスがVRAMを占有している

はっきり書いておきます。「モデルサイズが大きすぎる」と「キャッシュが蓄積している」がほとんどのケースで原因です。複数プロセスの競合は、自分で意図して何かを立ち上げていなければまず関係ない。最初の2つを疑うだけで十分で、4番目まで全部調べようとするのは時間の無駄になりやすい。


まず確認:現在のVRAM使用状況

# GPUの使用状況を確認する
nvidia-smi

# 1秒ごとにリアルタイム監視する
watch -n 1 nvidia-smi

# Pythonから確認する
python3 -c "
import torch
print(f'VRAM総量: {torch.cuda.get_device_properties(0).total_memory / 1024**3:.1f} GB')
print(f'使用中: {torch.cuda.memory_allocated() / 1024**3:.2f} GB')
print(f'予約済み: {torch.cuda.memory_reserved() / 1024**3:.2f} GB')
"

nvidia-smi を見て「VRAM総量の何%を使っているか」を最初に把握する。90%を超えていたらその時点で危険水域。安定して動かすなら50〜60%くらいに収まっているのが理想です。

自分の場合、OOMが出たらまずこれを見る習慣をつけてから、「とりあえずプランを上げる」という無駄な出費をしなくなりました。状況を数字で把握するだけで、次に何をすべきかが見えてくる。感覚で動くより、まず nvidia-smi 1コマンドです。

XServer VPS →のGPUプランは nvidia-smi でVRAM使用量をリアルタイム監視でき、何が問題かすぐに切り分けられます。


対処法1:量子化でモデルの使用VRAMを削減する

これが一番効きます。正直、まずここから試してほしい。他の対処法は後でいい。

量子化(Quantization)とは、モデルの精度を少し下げることでVRAM消費を大幅に削減する技術です。fp32 → fp16 → int8 → int4 の順に精度を下げるほどVRAM消費が減ります。

from transformers import AutoModelForCausalLM, BitsAndBytesConfig
import torch

# int8量子化(VRAMをfp32の約半分に削減)
model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-3-8B",
    load_in_8bit=True,
    device_map="auto"
)

# int4量子化(さらに半分、品質低下はわずか)
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.float16,
)
model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-3-8B",
    quantization_config=bnb_config,
    device_map="auto"
)

量子化によるVRAM削減効果(Llama-3-8Bの場合)

精度必要VRAM品質への影響
fp32約32GB最高品質
fp16約16GBほぼ同等
int8約8GBわずかに低下
int4約4GB体感差は小さい

自分の場合、テキスト生成の用途でint4とfp16の出力を見比べても正直わからないレベルでした。「品質が落ちるから使いたくない」という気持ちはわかります。ただ、使ってみる前から諦めるのはもったいない。まず試して、自分の用途で問題があるかどうかを確かめてから判断する。その順番で考えてください。プランを上げるのはそれからでも全然遅くない。


対処法2:バッチサイズを減らす

バッチサイズを半分にすると、VRAM消費も概ね半分になります。

# Before: バッチサイズ32で OOM
dataloader = DataLoader(dataset, batch_size=32)

# After: バッチサイズを1まで下げて様子を見る
dataloader = DataLoader(dataset, batch_size=1)

# 勾配累積で実効バッチサイズを維持する
accumulation_steps = 16  # batch_size=1 × 16ステップ = 実効batch_size 16
optimizer.zero_grad()
for i, (inputs, labels) in enumerate(dataloader):
    outputs = model(inputs)
    loss = criterion(outputs, labels) / accumulation_steps
    loss.backward()
    if (i + 1) % accumulation_steps == 0:
        optimizer.step()
        optimizer.zero_grad()

「バッチサイズ1にしたら遅くなる」という懸念はその通りです。でも勾配累積を使えば、実効的なバッチサイズを維持したまま1バッチあたりのVRAM消費を抑えられます。学習用途なら特にこの組み合わせが有効。「速度を犠牲にしてVRAMを確保する」という割り切りをどこかでする必要が出てくることはあります。ただそれでも、プランを上げる前に試す価値は十分にある。


対処法3:推論後にGPUキャッシュを解放する

推論ループ内でキャッシュが溜まり続けることがあります。

import torch
import gc

def run_inference(model, inputs):
    with torch.no_grad():
        outputs = model(**inputs)

    # 推論後にキャッシュを明示的に解放する
    del inputs
    torch.cuda.empty_cache()
    gc.collect()

    return outputs

これを入れていないコードをよく見かけます。torch.cuda.empty_cache() はワンライナーで追加できるので、推論ループを書くときは最初から入れておく習慣をつけた方がいい。後から「なんでVRAMがじわじわ増えるんだ」と30分悩む時間が省けます。自分もこれで一度ハマっていて、原因がわかったときは普通に笑いました。ハマる前に入れておいてください。

さくらのVPS →はGPUプランへのプランアップグレードが可能で、上記の対処を全部やってもVRAMが足りなかった場合の移行先として検討できます。


それでも解決しない場合:プランアップグレードの判断基準

コードレベルの対処を全部試してもOOMが続く場合は、プランアップグレードを検討します。

誤解されたくないので書いておく。ここに来るまでに上の3つを全部やってから判断してください。「OOMが出た→プランを上げた」という流れは、コスト的に損をしやすいパターンです。量子化・バッチサイズ調整・キャッシュ解放、この3つを全部試した上でもまだ駄目なら、そこで初めてプランアップグレードが選択肢に入る。順番が大事です。

アップグレードすべき目安

状況判断
int4量子化でも OOM が出る即アップグレード
バッチサイズ1でも OOM が出るアップグレード推奨
VRAM使用率が常時90%超近々アップグレード
処理速度が著しく遅い上位GPUへの移行を検討

VPS GPU プラン別VRAM比較

VPSGPUVRAM目安価格(月)
XServer VPSNVIDIA T416GB約7,000円〜
さくらのVPSNVIDIA A10040GB要問い合わせ
ConoHa VPSGTX1080Ti11GB約5,000円〜

月7,000円はそれなりの金額です。1日あたり約230円、1時間あたり約9.7円。毎日がっつり使い倒すなら納得できる金額ですが、週に数回しか触らないなら計算が合わなくなってきます。

自分の使用頻度と照らし合わせて、「月に何時間使うか」を一度計算してみてください。週2回・1回2時間なら月16時間。月7,000円を16時間で割ると1時間あたり437円。その金額を払う価値が用途にあるかどうかを、アップグレードボタンを押す前に考えてほしい。「とりあえず上げてみるか」は一番もったいない判断です。


A. はい、別物です。CUDA OOMはGPUのVRAM(GPU専用メモリ)不足で、通常のRAM(システムメモリ)とは独立しています。`nvidia-smi` でVRAMを確認し、`free -h` でRAMを確認してどちらが不足しているか切り分けてください。
A. テキスト生成タスクでは体感差はほとんどありません。ベンチマーク(MMLU等)でも fp16 比で1〜3%程度の低下にとどまることが多いです。まず int4 で試して問題なければそのまま使うのが現実的な判断です。
A. 可能ですが、速度は10〜100倍遅くなります。llama.cppを使えばCPUでも動作しますが、リアルタイム応答が必要な用途には向きません。バッチ処理で時間がかかっても良いなら選択肢の一つです。

まとめ:あなたの使い方で選ぶ判断テーブル

あなたの状況やること
OOMが出た・まだ何もしていないまず nvidia-smi でVRAM使用率を確認する
fp32 or fp16でモデルを動かしているint8 or int4量子化を試す(これだけで解決する可能性が高い)
量子化済み・バッチサイズも下げたtorch.cuda.empty_cache() を推論ループに追加する
上記全部やってもint4でOOMが出るプランアップグレードを検討する
VRAM常時90%超で不安定近々アップグレード、今すぐでなくてもいい
処理は動くが速度が足りない上位GPU(A100等)への移行を検討する
月16時間以下しか使わないアップグレード前に「月額÷使用時間」を必ず計算してから決める

体感として、量子化だけで解決するケースが体感7〜8割です。プランを上げる前に必ず試してください。それで解決しなかったときに初めてアップグレードを考えればいい。「どうせVRAMが足りないんだろう」と最初から決めつけてプランを上げるのが、一番もったいないパターンです。

XServer VPS →

さくらのVPS →


これが最終回答じゃないので、まずint4量子化を5分試してみてください。ダメだったらその時点でまた考えればいい。試してから判断する、この順番だけで無駄なコストをかなり減らせます。自分もそうやって試行錯誤しながらやっています。一緒にやっていきましょう。

あわせて読みたい

編集部監修

本サイトはAIを活用して記事を作成し、編集部(人間)が内容を確認・監修しています。執筆・監修: けせら(AI・VPS領域のテクニカルライター / 編集長)。料金・仕様は公開情報をもとに随時更新/データ更新日: 2026-06-18。

あなたに合うVPSは?30秒で無料診断 診断する →