def METHOD_NAME():
    device = "cuda:0" if torch.cuda.is_available() else "cpu"
    # Load ogb dataset & evaluator.
    dataset = DglGraphPropPredDataset(name="ogbg-molhiv")
    evaluator = Evaluator(name="ogbg-molhiv")
    n_classes = dataset.num_tasks
    split_idx = dataset.get_idx_split()
    train_loader = GraphDataLoader(
        dataset[split_idx["train"]],
        batch_size=32,
        shuffle=True,
    )
    valid_loader = GraphDataLoader(dataset[split_idx["valid"]], batch_size=32)
    test_loader = GraphDataLoader(dataset[split_idx["test"]], batch_size=32)
    # Load model.
    model = GatedGCN(hid_dim=256, out_dim=n_classes, num_layers=8).to(device)
    print(model)
    opt = optim.Adam(model.parameters(), lr=0.01)
    loss_fn = nn.BCEWithLogitsLoss()
    print("---------- Training ----------")
    for epoch in range(50):
        # Kick off training.
        loss = train(model, device, train_loader, opt, loss_fn)
        # Evaluate the prediction.
        valid_acc = evaluate(model, device, valid_loader, evaluator)
        test_acc = evaluate(model, device, test_loader, evaluator)
        print(
            f"In epoch {epoch}, loss: {loss:.3f}, val acc: {valid_acc:.3f}, test"
            f" acc: {test_acc:.3f}"
        )