code: def run_train():
      for dataset_name, model_name in product(
          args.datasets, args.models
      ):
          (
              dataset,
              train_loader,
              val_loader,
              test_loader,
          ) = prepare_dataloader(dataset_name)
          Model = MODELS[model_name]
  
          for num_layers, hidden in product(args.layers, args.hiddens):
              print("--")
              print(
                  f"{dataset_name} - {model_name}- {num_layers} - {hidden}"
              )
  
              model = Model(dataset, num_layers, hidden).to(device)
              optimizer = torch.optim.Adam(
                  model.parameters(), lr=args.lr
              )
              if args.compile:
                  model = torch.compile(model)
              loss_list = []
              acc_list = []
              for epoch in range(1, args.epochs + 1):
                  if epoch == args.epochs:
                      with timeit():
                          loss = train(model, optimizer, train_loader)
                  else:
                      loss = train(model, optimizer, train_loader)
  
                  with timeit(log=False) as t:
                      val_acc = eval_acc(model, val_loader)
                  val_time = t.duration
                  with timeit(log=False) as t:
                      test_acc = eval_acc(model, test_loader)
                  test_time = t.duration
  
                  if epoch >= args.warmup_profile:
                      loss_list.append(loss)
                      acc_list.append(
                          [val_acc, val_time, test_acc, test_time]
                      )
  
              if args.profile:
                  with torch_profile():
                      train(model, optimizer, train_loader)
                  rename_profile_file(
                      model_name,
                      dataset_name,
                      str(num_layers),
                      str(hidden),
                      "train",
                  )
  
file_path: pytorch_geometric/benchmark/kernel/main_performance.py
imports: import argparse
  from itertools import product
  import torch
  from datasets import get_dataset
  from gcn import GCN
  from gin import GIN
  from graph_sage import GraphSAGE
  from train_eval import eval_acc, inference_run, train
  from torch_geometric import seed_everything
  from torch_geometric.loader import DataLoader
  from torch_geometric.profile import rename_profile_file, timeit, torch_profile
label_desc: Use image node_id 2 for calling a global function with example usage: run_train() without return types