You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vgg-Face模型运行触发ResourceExhaustedError问题求助

解决Vgg-Face训练时的ResourceExhaustedError问题

可行解决方案

1. 动态分配GPU显存

TensorFlow默认会占用全部GPU显存,可通过设置动态分配避免显存耗尽:

import tensorflow as tf
gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
    try:
        for gpu in gpus:
            tf.config.experimental.set_memory_growth(gpu, True)
    except RuntimeError as e:
        print(e)

也可以直接限制显存使用量(根据你的GPU显存调整数值,比如设为4096MB):

tf.config.experimental.set_virtual_device_configuration(
    gpus[0],
    [tf.config.experimental.VirtualDeviceConfiguration(memory_limit=4096)]
)

2. 分批加载输入数据

避免一次性将所有数据加载到内存,改用tf.data.Dataset分批处理:

# 转换为Dataset格式
train_dataset = tf.data.Dataset.from_tensor_slices((train_x, train_y)).batch(batch_size).prefetch(tf.data.AUTOTUNE)
val_dataset = tf.data.Dataset.from_tensor_slices((val_x, val_y)).batch(batch_size).prefetch(tf.data.AUTOTUNE)

# 训练时传入Dataset对象
score = race_model.fit(train_dataset, epochs=epochs, validation_data=val_dataset, callbacks=[checkpointer, early_stop])

3. 降低模型显存占用

Vgg-Face参数量较大,可通过以下方式精简:

  • 将部分普通卷积层替换为深度可分离卷积(DepthwiseConv2D)
  • 减少卷积层的滤波器数量
  • 移除模型中冗余的全连接层

4. 清理内存碎片

训练前手动清理内存,避免显存累积:

import gc
gc.collect()
tf.keras.backend.clear_session()

5. 调整输入数据类型

确保输入数据为float32类型(比float64占用显存少一半):

train_x = train_x.astype('float32')
val_x = val_x.astype('float32')

6. 关闭Eager执行模式(可选)

若Eager模式导致显存管理问题,可切换到Graph模式:

tf.compat.v1.disable_eager_execution()

内容的提问来源于stack exchange,提问作者rekas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 03:40:12