使用Ray Tune调优PyTorch模型遇FileNotFoundError:缺失指定日志文件
Ray Tune训练后缺失result.json/progress.csv的解决建议
问题背景
使用Ray Tune对PyTorch深度学习模型进行超参数调优,训练完成后出现错误:
FileNotFoundError: Could not fetch metrics for lambda_17db8_00000: both result.json and progress.csv were not found
已确认tune.run的local_dir路径正确,训练未提前终止,且能正常获取最优调参配置,但无法生成关键的日志文件。
核心原因及修复步骤
1. 禁用了自动日志生成
代码中设置了os.environ["TUNE_DISABLE_AUTO_CALLBACK_LOGGERS"] = "1",这会直接阻止Ray Tune自动生成result.json和progress.csv文件。
修复: 删除该行环境变量配置。
2. 手动指定固定checkpoint目录导致冲突
在tune.run中手动传递了固定的checkpoint_dir给model_training,但Ray Tune会为每个trial自动分配独立的工作目录,共享目录会导致日志文件被覆盖或无法正常写入。
修复:
- 修改
tune.run的调用,移除手动传递的checkpoint_dir参数:tuning = tune.run( lambda config: model_training(config, X_train, y_train, val_loader), # 替换为验证集loader config=config_space, num_samples=10, scheduler=scheduler, progress_reporter=reporter, local_dir=checkpoint_dir, keep_checkpoints_num=1, resources_per_trial={"cpu": 10} ) - 调整
model_training函数中的checkpoint逻辑,使用Ray Tune原生API处理:def model_training(config, data, target, val_loader): # ... 其他代码保持不变 ... for epoch in range(config["epochs"]): # ... 训练、验证逻辑 ... train.report({"train_loss": epoch_train_loss, "train_accuracy": epoch_train_acc, "loss": val_loss.item(), "accuracy": val_accuracy}) # 使用Ray原生API保存checkpoint train.save_checkpoint({"model_state_dict": model.state_dict()})
3. 验证集使用错误(附带优化)
当前代码将测试集作为验证集传入调优函数,会导致调优过程泄露测试集信息,虽不直接引发日志问题,但属于逻辑错误。
修复: 创建独立的验证集DataLoader:
val_dataset = TensorDataset(X_val, y_val) val_loader = DataLoader(val_dataset, batch_size=config["batch_size"])
并在tune.run中传递val_loader而非test_loader。
补充说明
修改后重新运行调优任务,每个trial的独立目录下会自动生成result.json和progress.csv文件,同时checkpoint也会被正确保存在对应trial的子目录中。
内容的提问来源于stack exchange,提问作者rk___
相关产品推荐
相关产品推荐

