def get_model_scores(tasks_slice, payloads_slice, seed, eval_payload):
    task_name = tasks_slice[0].name
    slicing_tasks = convert_to_slicing_tasks(tasks_slice)
    slice_model = SliceModel(slicing_tasks, seed=seed, verbose=False)
    task_metrics = []
    prefix = "{}/{}_".format(task_name, task_name)
    for p_name, metric in [("train", "loss"), ("valid", "accuracy")]:
        for label_name in eval_payload.labels_to_tasks.keys():
            task_metrics += [
                prefix + p_name + "/{}/{}".format(label_name, metric)
            ]
    print(task_metrics)
    trainer = MultitaskTrainer(seed=seed)
    trainer.train_model(
        slice_model,
        payloads_slice,
        task_metrics=task_metrics,
        checkpoint_metric="{}/{}/{}_gold/accuracy".format(
            task_name, eval_payload.name, task_name),
        checkpoint_metric_mode="max",
        checkoint_best=True,
        writer="tensorboard",
        optimizer="adamax",
        lr=1e-5,
        l2=1e-3,
        log_every=0.1,
        score_every=0.1,
        n_epochs=20,
        progress_bar=True,
        checkpoint_best=True,
        checkpoint_cleanup=False,
    )
    return slice_model.score(eval_payload)
def get_baseline_scores(tasks, seed, eval_payload):
    # Baseline Model
    task_name = tasks[0].name
    model = MetalModel(tasks, seed=seed, verbose=False)
    trainer = MultitaskTrainer(seed=seed)
    trainer.train_model(
        model,
        payloads,
        checkpoint_metric="{}/{}/{}_gold/accuracy".format(
            task_name, eval_payload.name, task_name),
        checkpoint_metric_mode="max",
        checkoint_best=True,
        writer="tensorboard",
        optimizer="adamax",
        lr=5e-5,
        l2=1e-3,
        log_every=0.1,
        score_every=0.1,
        n_epochs=10,
        progress_bar=True,
        checkpoint_best=True,
        checkpoint_cleanup=False,
    )
    return model.score(eval_payload)
        # "SST2",
        # "MNLI",
        # "RTE",
        # "WNLI",
        # "QQP",
        # "MRPC",
        # "STSB",
        # "QNLI"
    ],
    split_prop=0.99,
    #  max_datapoints = 100,
    dl_kwargs={"batch_size": 2},
)

model = MetalModel(tasks)
trainer = MultitaskTrainer(**writer_dict)

trainer.train_model(
    model,
    payloads,
    lr=0.00001,
    l2=0,
    log_every=1,
    checkpoint_metric="model/train/loss",
    checkpoint_metric_mode="min",
    checkpoint_best=True,
    n_epochs=3,
    progress_bar=True,
)

print("WE WIN!")
    payload_test = Payload.from_tensors(payload_test_name,
                                        test_X,
                                        test_Y,
                                        task_name,
                                        "test",
                                        batch_size=batch_size)

    payloads.append(payload_train)
    payloads.append(payload_dev)
    payloads.append(payload_test)

model = MetalModel(tasks, verbose=False)

os.environ['METALHOME'] = RESULTS_OUTPUT

trainer = MultitaskTrainer()
trainer.config["checkpoint_config"]["checkpoint_every"] = 1
trainer.config["checkpoint_config"]["checkpoint_best"] = True

for i in range(NUM_EPOCHS):
    scores = trainer.train_model(
        model,
        payloads,
        n_epochs=1,
        log_every=1,
        progress_bar=False,
    )
    print("Epoch number {0} scores:".format(i))
    print(scores)

filename = OUTPUT_PATH + '/' + MODEL_NAME + '.out'
Exemple #5
0
 def setUpClass(cls):
     np.random.seed(1)
     cls.trainer = MultitaskTrainer(verbose=False, lr=0.005)
Exemple #6
0
 def test_mmtl_training(self):
     model = MetalModel(self.tasks, verbose=False)
     trainer = MultitaskTrainer(verbose=True)
     trainer.train_model(
         model, self.payloads, n_epochs=1, aggregate_metric_fns=[glue_score]
     )
Exemple #7
0
    tasks, payloads = create_glue_tasks_payloads(task_names, **task_config)

    model_config["verbose"] = False
    model = MetalModel(tasks, **model_config)

    # add metadata to trainer_config that will be logged to disk
    trainer_config["n_paramaters"] = sum(p.numel() for p in model.parameters()
                                         if p.requires_grad)

    if trainer_config["verbose"]:
        print(f"Task config:\n{task_config}")
        print(f"Model config:\n{model_config}")
        print(f"Trainer config:\n{trainer_config}")

    # Overwrite run_dir to only use one checkpoint dir
    # if args.run_dir is None:
    #    trainer_config["writer_config"]["run_dir"] = strftime("%Y_%m_%d")

    if args.run_name is None:
        trainer_config["writer_config"]["run_name"] = task_config[
            "tasks"]  # + strftime("_%H_%M_%S")

    trainer = MultitaskTrainer(**trainer_config)
    # Force early instantiation of writer to write all three configs to dict
    trainer._set_writer()

    # trainer_config will get written automatically right before training
    trainer.writer.write_config(model_config, "model_config")
    trainer.writer.write_config(task_config, "task_config")
    trainer.train_model(model, payloads, aggregate_metric_fns=[glue_score])
                                            "test",
                                            batch_size=batch_size)

        payloads.append(payload_train)
        payloads.append(payload_dev)
        payloads.append(payload_test)
    return payloads


payloads = create_payloads(database_tasks)

model = MetalModel(tasks, verbose=False)

os.environ['METALHOME'] = RESULTS_OUTPUT

trainer = MultitaskTrainer()
trainer.config["checkpoint_config"]["checkpoint_every"] = 1
trainer.config["checkpoint_config"]["checkpoint_best"] = True


def accuracy(metrics_hist):
    metrics_agg = {}
    dev_accuracies = []
    for key in sorted(metrics_hist.keys()):
        if "accuracy" in key and "dev" in key:
            dev_accuracies.append(metrics_hist[key])

    average_accuracy = sum(dev_accuracies) / len(dev_accuracies)

    metrics_agg["model/dev/all/accuracy"] = average_accuracy
bar_input = foo_input  # nn.Linear(100, 7)

foo_head = nn.Linear(10, 2)
bar_head = nn.Linear(10, 2)

foo_data = make_dataloader(5000)
bar_data = make_dataloader(2000)

foo = Task("foo_task", {"train": foo_data, "valid": foo_data}, foo_input, foo_head)
bar = Task("bar_task", {"train": bar_data, "valid": bar_data}, bar_input, bar_head)
# baz = Task("baz_task", "baz_head", [make_dataloader(100), None, None])
tasks = [foo, bar]


model = MetalModel(tasks, device=-1, verbose=False)
trainer = MultitaskTrainer()
trainer.train_model(
    model,
    tasks,
    n_epochs=3,
    lr=0.1,
    progress_bar=True,
    log_every=1,
    score_every=1,
    checkpoint_best=True,
    checkpoint_metric="foo_task/valid/accuracy",
    checkpoint_metric_mode="max",
)

for batch in foo.data_loaders["train"]:
    X, Y = batch