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

循环运行Neptune.ai时后续轮次准确率不记录且无报错问题排查

问题

我编写了一个for循环用于测试不同批量大小,每次循环都会创建并关闭一个Neptune run。首次运行一切正常,但后续循环中,准确率数据无法记录到Neptune平台,且Python未抛出任何错误。请问可能的问题是什么?

for i in range(len(percentage)):

    run = neptune.init(
        project="xxx",
        api_token="xxx",
    )

    epochs = 600
    batch_perc = percentage[i]
    lr = 0.001
    sb = 64 #round((43249*batch_perc)*0.00185)
    params = {
        'lr': lr,
        'bs': sb,
        'epochs': epochs,
        'batch %': batch_perc
    }
    run['parameters'] = params

    torch.manual_seed(12345)
    td = 43249 * batch_perc
    vd = 0.1*(43249 - td) + td

    train_dataset = dataset[:round(td)]
    val_dataset = dataset[round(td):round(vd)]
    test_dataset = dataset[round(vd):]

    print(f'Number of training graphs: {len(train_dataset)}')
    run['train'] = len(train_dataset)
    print(f'Number of validation graphs: {len(val_dataset)}')
    run['val'] = len(val_dataset)
    print(f'Number of test graphs: {len(test_dataset)}')
    run['test'] = len(test_dataset)

    train_loader = DataLoader(train_dataset, batch_size=sb, shuffle=True)
    val_loader = DataLoader(val_dataset, batch_size=sb, shuffle=True)
    test_loader = DataLoader(test_dataset, batch_size=1, shuffle=False)

    model = GCN(hidden_channels=64).to(device)

    optimizer = torch.optim.Adam(model.parameters(), lr=lr)
    criterion = torch.nn.CrossEntropyLoss()

    for epoch in range(1, epochs):
        train()
        train_acc = test(train_loader)
        run['training/batch/acc'].log(train_acc)
        val_acc = test(val_loader)
        run['training/batch/val'].log(val_acc)
可能的原因及解决方案
  • 未显式停止Neptune Run:每次循环创建run后,没有调用run.stop()结束当前会话。Neptune的日志上传是异步的,若不主动停止,后台进程可能持续占用资源,导致后续run的数据流被阻塞,数据无法正常上传。
    解决:在每个循环的末尾添加run.stop(),确保当前run的所有数据都被提交并释放资源。

  • 异步上传的时序冲突:如果循环迭代速度快于前一个run的异步上传速度,新创建的run可能和旧run的上传进程产生冲突,导致数据丢失或无法记录。
    解决:除了调用run.stop(),可在停止后添加短暂延迟(如import time; time.sleep(1)),确保数据完全上传;或者初始化run时设置mode="sync"启用同步上传模式(会降低运行效率,适合调试)。

  • 训练数据或指标计算的静默异常:后续循环中,train_acc或val_acc可能未生成有效数值(比如为NaN、None,或test()函数逻辑在特定批量下返回异常值),但函数未抛出错误,导致log()没有实际数据可上传。
    解决:在日志记录前添加打印语句,输出train_acc和val_acc的具体值,验证数据有效性;检查train()和test()函数的逻辑,确保在不同批量大小下能正常计算准确率。

  • 重复初始化导致的内部状态混乱:多次调用neptune.init()可能引发内部配置状态混乱,比如API token或项目信息的重复加载导致隐性错误,影响后续run的数据上传。
    解决:将neptune.init()的固定参数(如project、api_token)提取到循环外,或者在每次初始化前检查并关闭残留的run实例,确保会话状态干净。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 18:20:56