code: def track_time(data):
      data = utils.process_data(data)
      device = utils.get_bench_device()
      num_epochs = 200
  
      g = data[0].to(device)
  
      features = g.ndata["feat"]
      labels = g.ndata["label"]
      train_mask = g.ndata["train_mask"]
      val_mask = g.ndata["val_mask"]
      test_mask = g.ndata["test_mask"]
  
      in_feats = features.shape[1]
      n_classes = data.num_classes
  
      g = dgl.remove_self_loop(g)
      g = dgl.add_self_loop(g)
  
      # create model
      model = GAT(
          1, in_feats, 8, n_classes, [8, 1], F.elu, 0.6, 0.6, 0.2, False
      )
      loss_fcn = torch.nn.CrossEntropyLoss()
  
      model = model.to(device)
      model.train()
  
      # optimizer
      optimizer = torch.optim.Adam(
          model.parameters(), lr=1e-2, weight_decay=5e-4
      )
  
      # dry run
      for epoch in range(10):
          logits = model(g, features)
          loss = loss_fcn(logits[train_mask], labels[train_mask])
          optimizer.zero_grad()
          loss.backward()
          optimizer.step()
  
      # timing
      t0 = time.time()
      for epoch in range(num_epochs):
          logits = model(g, features)
          loss = loss_fcn(logits[train_mask], labels[train_mask])
          optimizer.zero_grad()
          loss.backward()
          optimizer.step()
      t1 = time.time()
  
      return (t1 - t0) / num_epochs
  
file_path: dgl/benchmarks/benchmarks/model_speed/bench_gat.py
imports: import time
  import dgl
  import torch
  import torch.nn
  import torch.nn.functional
  from dgl.nn.pytorch import GATConv
  from ..None import utils
label_desc: Use image node_id 1 for calling a global function with example usage: track_time(data) and returns: unknown