常见错误

修复: CUDA 内存不足

解决训练或推理时的 "CUDA out of memory" 错误

错误信息

torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 2.00 GiB

RuntimeError: CUDA error: out of memory

tensorflow.python.framework.errors_impl.ResourceExhaustedError: OOM when allocating tensor

根本原因

GPU 显存耗尽。发生原因:

  • 模型太大 - 模型参数超出可用显存
  • 批量大小过高 - 一次处理的样本太多
  • 内存碎片化 - 低效的内存分配模式
  • 内存泄漏 - 张量未正确释放
  • 多进程竞争 - 其他进程占用 GPU 内存

模型内存需求

模型大小 FP32 FP16/BF16 INT8 推荐 GPU
7B 参数 ~28GB ~14GB ~7GB T4 16GB, A10G 24GB
13B 参数 ~52GB ~26GB ~13GB A10G 24GB, L4 24GB
70B 参数 ~280GB ~140GB ~70GB A100 80GB, H100 80GB

* 仅推理。训练需要 2-3 倍内存用于梯度和优化器状态。

解决方案

1. 减小批量大小

最快的修复方法 - 将批量大小减半直到能运行:

# 不用 batch_size=32,尝试 batch_size=16 或 batch_size=8

2. 使用混合精度 (FP16/BF16)

将内存使用减半,精度损失极小:

# PyTorch

from torch.cuda.amp import autocast

with autocast():

output = model(input)

# 或在 Ampere+ GPU 上使用 BF16

model = model.to(torch.bfloat16)

3. 梯度检查点

用计算换内存:

# PyTorch

model.gradient_checkpointing_enable()

# Transformers

model = AutoModel.from_pretrained(..., gradient_checkpointing=True)

4. 使用量化 (INT8/INT4)

将模型大小减少 2-4 倍:

# bitsandbytes 8位

model = AutoModelForCausalLM.from_pretrained(

"model_name",

load_in_8bit=True,

device_map="auto"

)

5. 定期清理缓存

释放碎片化内存:

import torch

torch.cuda.empty_cache()

import gc

gc.collect()

6. 监控 GPU 内存

检查内存使用情况:

# 终端

watch -n 1 nvidia-smi

# Python

print(torch.cuda.memory_summary())

vLLM 专用解决方案

限制 GPU 内存使用

python -m vllm.entrypoints.openai.api_server --model meta-llama/Llama-3.2-3B --gpu-memory-utilization 0.8

大模型使用张量并行

python -m vllm.entrypoints.openai.api_server --model meta-llama/Llama-3.1-70B --tensor-parallel-size 2
🚀 推荐部署

高性能 GPU 与 AI 云服务器

为您的 Docker 容器提供强大的 NVIDIA 算力支持,支持 A100/H100,全球 32 个机房可选。

  • 支持 NVIDIA A100/H100 GPU 实例
  • 按小时计费,测试成本低至 $0.004/h
  • 全球 32+ 数据中心,极低访问延迟
  • 一键运行容器化应用与裸金属服务器
🎁 立即部署