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

PyTorch自定义架构实验中内存占用持续累积攀升问题排查求助

PyTorch自定义架构实验中内存占用持续累积攀升问题排查求助

各位大佬好!我最近在训练一个针对特定问题的自定义模型架构,模型本身的表现一直很顺畅,但在做一个基于不同属性计算损失的实验时,遇到了棘手的内存问题:每次完成一组属性组合的迭代后,RAM占用都会小幅上涨,而且这种消耗会持续累积,到第20次左右就会占满内存直接崩溃。

我本来以为每次迭代都重写了变量,不应该出现这种内存泄漏的情况,但排查了很久都找不到根因,想请大家帮忙看看!

问题具体情况

实验逻辑是遍历不同的属性组合,针对每组属性重新训练模型(特征数量变化时会重置模型和优化器),计算对应损失。但每次迭代后内存都不会释放干净,累积到一定程度就崩了。

我的部分代码片段

prev_size = 1
for attribute_item in combined_attributes:
    NUM_FEATURES = len(attribute_item)
    print(attribute_item)
    if NUM_FEATURES != prev_size:       
        reset_model_optimizer()
        prev_size = NUM_FEATURES

        start_time = time.time()
        for epoch in range(50):
            # 创建数据批次生成器
            data_gen = data_generator(trainloader)

            for i, examples in enumerate(data_gen, 0):
                (inputs, desired_output) = examples

                # 清空参数梯度
                optimizer.zero_grad()

                # 前向传播
                output_predictions = model(inputs)

                # 计算损失
                desired_output = desired_output.to(output_predictions.device)
                loss = torch.nn.MSELoss()(output_predictions, desired_output)

                # 反向传播+优化
                loss.backward()
                optimizer.step()

                # 记录损失
                output_loss.append(loss.item())

        output_attribute.append(attribute_item)
        output_epoch.append(j for j in range(50))

        # 计算并打印耗时
        end_time = time.time()
        execution_time = end_time - start_time
        minutes = int(execution_time // 60)
        seconds = int(execution_time % 60)
        time_format = "{:02d}:{:02d}".format(minutes, seconds)
        print("Time elapsed:", time_format)

        # 重置记录列表
        output_attribute = []
        output_epoch = []
        output_loss = []

        # 手动删除变量
        del inputs  
        del desired_output
        del output_predictions
        del loss

我已经尝试过的排查步骤

  • 逐一检查了代码中所有变量的内存占用情况,没有发现单个变量占用异常高的内存
  • 每次迭代后手动删除了训练相关的变量,并重置了记录用的列表
  • 确认特征数量变化时会调用reset_model_optimizer()重置模型和优化器

目前实在找不到问题出在哪,真心希望能得到大家的排查思路或者解决方案,完整代码也可以提供参考!

备注:内容来源于stack exchange,提问作者Racchel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 11:54:35