easytorch icon indicating copy to clipboard operation
easytorch copied to clipboard

配置文件问题

Open Waterkin opened this issue 1 year ago • 2 comments

在调参的过程中,经常会需要对多个数据集的多个模型调参,需要写多个模型多个数据集的 config 文件。

我的想法是,能否复用一套config 文件,在调参grid search时,动态修改 config 的配置,从而省去写 config 的麻烦。

感谢答疑~

Waterkin avatar Oct 12 '23 07:10 Waterkin

在我的尝试中,我试图将 easytorch 结合 wandb 实现调参的自动化实验记录,然而,在代码中动态修改 config失败了,模型依然会依照原有的 config 运行,这让我很费解,如下代码: 即使我修改了DATASET为wandb.config.DATASET,在实际运行时仍然会读取args 文件内的DATASET..

def train():
    wandb.init()
    model_type = get_key(model_dict, wandb.config.MODEL_NAME)
    model_name = wandb.config.MODEL_NAME
    dataset = wandb.config.DATASET
    args = f"examples/{model_type}/{model_name}_OTHERS.py"

    # 使用wandb.config来覆盖配置值
    CFG = import_config(args)
    CFG.DATASET_NAME = wandb.config.DATASET
    CFG.TRAIN.OPTIM.PARAM.lr = wandb.config.lr
    CFG.TRAIN.OPTIM.PARAM["weight_decay"] = wandb.config.weight_decay
    CFG.TRAIN.LR_SCHEDULER.PARAM["gamma"] = wandb.config.gamma
    CFG.TRAIN.LR_SCHEDULER.PARAM["milestones"] = wandb.config.milestones
    CFG.TRAIN.DATA.BATCH_SIZE = wandb.config.batch_size
    launch_training(CFG, "0")

def main():
    for dataset in dataset_list:
        for model_name in model_list:
            try:
                # 第一步: 调整学习率
                for lr in lr_values:
                    config_filter_lr = {
                        "config.lr": lr,
                        "config.batch_size": 4096,
                        "config.weight_decay": 0.0001,
                        "config.gamma": 0.5,
                        "config.milestones": [1, 50, 80],
                    }
                    if not check_existing_run(
                        "your-project-name", model_name, dataset, config_filter_lr
                    ):
                        sweep_config_lr = {
                            "name": "sweep_lr",
                            "method": "grid",
                            "parameters": {
                                "MODEL_NAME": {"value": model_name},
                                "DATASET": {"value": dataset},
                                "lr": {"values": [0.1, 0.01, 0.001, 0.0001]},
                                "batch_size": {"value": 4096},
                                "weight_decay": {"value": 0.0001},
                                "gamma": {"value": 0.5},
                                "milestones": {"value": [1, 50, 80]},
                            },
                        }
                        sweep_id = wandb.sweep(
                            sweep=sweep_config_lr, project="your-project-name"
                        )
                        wandb.agent(
                            sweep_id, function=train
                        )  # Grid search will try all combinations

Waterkin avatar Oct 12 '23 07:10 Waterkin