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

TensorFlow 2.x训练多模型后如何清理GPU内存?

TensorFlow 2.x 训练多模型时清理GPU内存的可行方法

以下是几种能有效释放GPU内存、避免内存溢出的方法,可结合你的训练代码使用:

1. 训练后显式清理模型与会话

每次训练完单个模型后,主动删除模型对象、清理Keras会话并触发Python垃圾回收,能直接释放模型占用的GPU资源。

在你的循环中,每次model.fit()执行完毕后添加以下代码:

# 删除当前模型对象
del model
# 清理Keras会话,释放底层资源
tf.keras.backend.clear_session()
# 触发Python垃圾回收
import gc
gc.collect()

修改后的核心循环代码示例:

import gc  # 记得在代码开头导入gc模块

for idx in range(10):
    ep = 20
    # load X_train, y_train, X_test, y_test

    for size in units:
        # create model
        model = Model(ip, out)
        model.compile(optimizer='adam',
                 loss=tf.keras.losses.BinaryCrossentropy(),
                 metrics=[])
        model.fit(X_train, y_train, epochs=ep, batch_size=256, validation_data=(X_test, y_test))
        
        # 清理当前模型资源
        del model
        tf.keras.backend.clear_session()
        gc.collect()

2. 开启GPU内存按需分配

在代码开头添加GPU内存增长配置,让TensorFlow不会一次性占用全部GPU显存,而是根据模型需求动态分配,训练结束后自动释放未使用的内存:

gpus = tf.config.list_physical_devices('GPU')
if gpus:
    try:
        # 对每个GPU开启内存增长模式
        for gpu in gpus:
            tf.config.experimental.set_memory_growth(gpu, True)
    except RuntimeError as e:
        print(e)

3. 用上下文管理器隔离模型训练

将单个模型的创建、训练过程放在tf.device()上下文管理器中,进一步明确资源范围,配合前面的清理方法效果更好:

for size in units:
    with tf.device('/GPU:0'):  # 指定使用第一个GPU,根据你的设备调整
        model = Model(ip, out)
        model.compile(optimizer='adam',
                 loss=tf.keras.losses.BinaryCrossentropy(),
                 metrics=[])
        model.fit(X_train, y_train, epochs=ep, batch_size=256, validation_data=(X_test, y_test))
    
    # 离开上下文后清理资源
    del model
    tf.keras.backend.clear_session()
    gc.collect()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:07:06