Unverified Commit df7a6121 authored by Daniil Sizov's avatar Daniil Sizov Committed by GitHub
Browse files

Fix benchmark time measurement (#3928)



* Fix benchmark time measurement

* Reduce batch size for bench_rgcn_homogeneous_ns am

bench_rgcn_homogeneous_ns am data sample size is too small for 1024 batch size
Co-authored-by: default avatarRhett Ying <85214957+Rhett-Ying@users.noreply.github.com>
Co-authored-by: default avatarQuan (Andy) Gan <coin2028@hotmail.com>
parent 764b5d05
...@@ -90,6 +90,8 @@ def track_time(data): ...@@ -90,6 +90,8 @@ def track_time(data):
lr = 0.003 lr = 0.003
dropout = 0.5 dropout = 0.5
num_workers = 4 num_workers = 4
iter_start = 3
iter_count = 10
train_nid = th.nonzero(g.ndata['train_mask'], as_tuple=True)[0] train_nid = th.nonzero(g.ndata['train_mask'], as_tuple=True)[0]
...@@ -112,28 +114,9 @@ def track_time(data): ...@@ -112,28 +114,9 @@ def track_time(data):
loss_fcn = loss_fcn.to(device) loss_fcn = loss_fcn.to(device)
optimizer = optim.Adam(model.parameters(), lr=lr) optimizer = optim.Adam(model.parameters(), lr=lr)
# dry run
for step, (input_nodes, seeds, blocks) in enumerate(dataloader):
# Load the input features as well as output labels
#batch_inputs, batch_labels = load_subtensor(g, seeds, input_nodes, device)
blocks = [block.int().to(device) for block in blocks]
batch_inputs = blocks[0].srcdata['features']
batch_labels = blocks[-1].dstdata['labels']
# Compute loss and prediction
batch_pred = model(blocks, batch_inputs)
loss = loss_fcn(batch_pred, batch_labels)
optimizer.zero_grad()
loss.backward()
optimizer.step()
if step >= 3:
break
# Training loop # Training loop
avg = 0 avg = 0
iter_tput = [] iter_tput = []
t0 = time.time()
# Loop over the dataloader to sample the computation dependency graph as a list of # Loop over the dataloader to sample the computation dependency graph as a list of
# blocks. # blocks.
for step, (input_nodes, seeds, blocks) in enumerate(dataloader): for step, (input_nodes, seeds, blocks) in enumerate(dataloader):
...@@ -149,9 +132,12 @@ def track_time(data): ...@@ -149,9 +132,12 @@ def track_time(data):
loss.backward() loss.backward()
optimizer.step() optimizer.step()
if step >= 9: # time 10 loops # start timer at before iter_start
if step == iter_start - 1:
t0 = time.time()
elif step == iter_count + iter_start - 1: # time iter_count iterations
break break
t1 = time.time() t1 = time.time()
return (t1 - t0) / (step + 1) return (t1 - t0) / iter_count
...@@ -377,6 +377,8 @@ def track_time(data): ...@@ -377,6 +377,8 @@ def track_time(data):
num_workers = 0 num_workers = 0
hidden_dims = 16 hidden_dims = 16
lr = 3e-5 lr = 3e-5
iter_start = 3
iter_count = 10
g = dataset[0] g = dataset[0]
# Sampler # Sampler
...@@ -403,23 +405,8 @@ def track_time(data): ...@@ -403,23 +405,8 @@ def track_time(data):
opt = torch.optim.Adam(model.parameters(), lr=lr) opt = torch.optim.Adam(model.parameters(), lr=lr)
model.train() model.train()
for batch_id, (pos_graph, neg_graph, blocks) in enumerate(dataloader):
# Copy to GPU
for i in range(len(blocks)):
blocks[i] = blocks[i].to(device)
pos_graph = pos_graph.to(device)
neg_graph = neg_graph.to(device)
loss = model(pos_graph, neg_graph, blocks).mean()
opt.zero_grad()
loss.backward()
opt.step()
if batch_id >= 3:
break
print("start training...") print("start training...")
t0 = time.time()
# For each batch of head-tail-negative triplets... # For each batch of head-tail-negative triplets...
for batch_id, (pos_graph, neg_graph, blocks) in enumerate(dataloader): for batch_id, (pos_graph, neg_graph, blocks) in enumerate(dataloader):
# Copy to GPU # Copy to GPU
...@@ -433,9 +420,12 @@ def track_time(data): ...@@ -433,9 +420,12 @@ def track_time(data):
loss.backward() loss.backward()
opt.step() opt.step()
if batch_id >= 10: # time 10 loops # start timer at before iter_start
if batch_id == iter_start - 1:
t0 = time.time()
elif batch_id == iter_count + iter_start - 1: # time iter_count iterations
break break
t1 = time.time() t1 = time.time()
return (t1 - t0) / (batch_id + 1) return (t1 - t0) / iter_count
...@@ -249,6 +249,8 @@ def track_time(data): ...@@ -249,6 +249,8 @@ def track_time(data):
dropout = 0.5 dropout = 0.5
use_self_loop = True use_self_loop = True
lr = 0.01 lr = 0.01
iter_start = 3
iter_count = 10
hg = dataset[0] hg = dataset[0]
category = dataset.predict_category category = dataset.predict_category
...@@ -283,31 +285,13 @@ def track_time(data): ...@@ -283,31 +285,13 @@ def track_time(data):
hg, {category: train_idx}, sampler, hg, {category: train_idx}, sampler,
batch_size=batch_size, shuffle=True, num_workers=4) batch_size=batch_size, shuffle=True, num_workers=4)
# dry run
for i, (input_nodes, seeds, blocks) in enumerate(loader):
blocks = [blk.to(device) for blk in blocks]
seeds = seeds[category] # we only predict the nodes with type "category"
batch_tic = time.time()
emb = embed_layer(blocks[0])
lbl = labels[seeds].to(device)
emb = {k : e.to(device) for k, e in emb.items()}
logits = model(emb, blocks)[category]
loss = F.cross_entropy(logits, lbl)
loss.backward()
optimizer.step()
sparse_optimizer.step()
if i >= 3:
break
print("start training...") print("start training...")
model.train() model.train()
embed_layer.train() embed_layer.train()
optimizer.zero_grad() optimizer.zero_grad()
sparse_optimizer.zero_grad() sparse_optimizer.zero_grad()
t0 = time.time() for step, (input_nodes, seeds, blocks) in enumerate(loader):
for i, (input_nodes, seeds, blocks) in enumerate(loader):
blocks = [blk.to(device) for blk in blocks] blocks = [blk.to(device) for blk in blocks]
seeds = seeds[category] # we only predict the nodes with type "category" seeds = seeds[category] # we only predict the nodes with type "category"
batch_tic = time.time() batch_tic = time.time()
...@@ -320,9 +304,12 @@ def track_time(data): ...@@ -320,9 +304,12 @@ def track_time(data):
optimizer.step() optimizer.step()
sparse_optimizer.step() sparse_optimizer.step()
if i >= 9: # time 10 loops # start timer at before iter_start
if step == iter_start - 1:
t0 = time.time()
elif step == iter_count + iter_start - 1: # time iter_count iterations
break break
t1 = time.time() t1 = time.time()
return (t1 - t0) / (i + 1) return (t1 - t0) / iter_count
...@@ -180,9 +180,11 @@ def track_time(data): ...@@ -180,9 +180,11 @@ def track_time(data):
device = utils.get_bench_device() device = utils.get_bench_device()
if data == 'am': if data == 'am':
batch_size = 64
n_bases = 40 n_bases = 40
l2norm = 5e-4 l2norm = 5e-4
elif data == 'ogbn-mag': elif data == 'ogbn-mag':
batch_size = 1024
n_bases = 2 n_bases = 2
l2norm = 0 l2norm = 0
else: else:
...@@ -190,13 +192,14 @@ def track_time(data): ...@@ -190,13 +192,14 @@ def track_time(data):
fanouts = [25,15] fanouts = [25,15]
n_layers = 2 n_layers = 2
batch_size = 1024
n_hidden = 64 n_hidden = 64
dropout = 0.5 dropout = 0.5
use_self_loop = True use_self_loop = True
lr = 0.01 lr = 0.01
low_mem = True low_mem = True
num_workers = 4 num_workers = 4
iter_start = 3
iter_count = 10
hg = dataset[0] hg = dataset[0]
category = dataset.predict_category category = dataset.predict_category
...@@ -283,32 +286,11 @@ def track_time(data): ...@@ -283,32 +286,11 @@ def track_time(data):
optimizer = th.optim.Adam(all_params, lr=lr, weight_decay=l2norm) optimizer = th.optim.Adam(all_params, lr=lr, weight_decay=l2norm)
emb_optimizer = th.optim.SparseAdam(list(embed_layer.node_embeds.parameters()), lr=lr) emb_optimizer = th.optim.SparseAdam(list(embed_layer.node_embeds.parameters()), lr=lr)
# dry run
for i, sample_data in enumerate(loader):
input_nodes, output_nodes, blocks = sample_data
feats = embed_layer(input_nodes,
blocks[0].srcdata['ntype'],
blocks[0].srcdata['type_id'],
node_feats)
logits = model(blocks, feats)
seed_idx = blocks[-1].dstdata['type_id']
loss = F.cross_entropy(logits, labels[seed_idx])
optimizer.zero_grad()
emb_optimizer.zero_grad()
loss.backward()
optimizer.step()
emb_optimizer.step()
if i >= 3:
break
print("start training...") print("start training...")
model.train() model.train()
embed_layer.train() embed_layer.train()
t0 = time.time() for step, sample_data in enumerate(loader):
for i, sample_data in enumerate(loader):
input_nodes, output_nodes, blocks = sample_data input_nodes, output_nodes, blocks = sample_data
feats = embed_layer(input_nodes, feats = embed_layer(input_nodes,
blocks[0].srcdata['ntype'], blocks[0].srcdata['ntype'],
...@@ -324,8 +306,12 @@ def track_time(data): ...@@ -324,8 +306,12 @@ def track_time(data):
optimizer.step() optimizer.step()
emb_optimizer.step() emb_optimizer.step()
if i >= 9: # time 10 loops # start timer at before iter_start
if step == iter_start - 1:
t0 = time.time()
elif step == iter_count + iter_start - 1: # time iter_count iterations
break break
t1 = time.time() t1 = time.time()
return (t1 - t0) / (i + 1) return (t1 - t0) / iter_count
...@@ -70,6 +70,8 @@ def track_time(data): ...@@ -70,6 +70,8 @@ def track_time(data):
lr = 0.003 lr = 0.003
dropout = 0.5 dropout = 0.5
num_workers = 4 num_workers = 4
iter_start = 3
iter_count = 10
train_nid = th.nonzero(g.ndata['train_mask'], as_tuple=True)[0] train_nid = th.nonzero(g.ndata['train_mask'], as_tuple=True)[0]
...@@ -92,28 +94,9 @@ def track_time(data): ...@@ -92,28 +94,9 @@ def track_time(data):
loss_fcn = loss_fcn.to(device) loss_fcn = loss_fcn.to(device)
optimizer = optim.Adam(model.parameters(), lr=lr) optimizer = optim.Adam(model.parameters(), lr=lr)
# dry run
for step, (input_nodes, seeds, blocks) in enumerate(dataloader):
# Load the input features as well as output labels
#batch_inputs, batch_labels = load_subtensor(g, seeds, input_nodes, device)
blocks = [block.int().to(device) for block in blocks]
batch_inputs = blocks[0].srcdata['features']
batch_labels = blocks[-1].dstdata['labels']
# Compute loss and prediction
batch_pred = model(blocks, batch_inputs)
loss = loss_fcn(batch_pred, batch_labels)
optimizer.zero_grad()
loss.backward()
optimizer.step()
if step >= 3:
break
# Training loop # Training loop
avg = 0 avg = 0
iter_tput = [] iter_tput = []
t0 = time.time()
for step, (input_nodes, seeds, blocks) in enumerate(dataloader): for step, (input_nodes, seeds, blocks) in enumerate(dataloader):
# Load the input features as well as output labels # Load the input features as well as output labels
#batch_inputs, batch_labels = load_subtensor(g, seeds, input_nodes, device) #batch_inputs, batch_labels = load_subtensor(g, seeds, input_nodes, device)
...@@ -128,9 +111,12 @@ def track_time(data): ...@@ -128,9 +111,12 @@ def track_time(data):
loss.backward() loss.backward()
optimizer.step() optimizer.step()
if step >= 9: # time 10 loops # start timer at before iter_start
if step == iter_start - 1:
t0 = time.time()
elif step == iter_count + iter_start - 1: # time iter_count iterations
break break
t1 = time.time() t1 = time.time()
return (t1 - t0) / (step + 1) return (t1 - t0) / iter_count
...@@ -114,6 +114,8 @@ def track_time(data, num_negs, batch_size): ...@@ -114,6 +114,8 @@ def track_time(data, num_negs, batch_size):
dropout = 0.5 dropout = 0.5
num_workers = 4 num_workers = 4
num_negs = 2 num_negs = 2
iter_start = 3
iter_count = 10
n_edges = g.number_of_edges() n_edges = g.number_of_edges()
train_seeds = np.arange(n_edges) train_seeds = np.arange(n_edges)
...@@ -141,28 +143,9 @@ def track_time(data, num_negs, batch_size): ...@@ -141,28 +143,9 @@ def track_time(data, num_negs, batch_size):
loss_fcn = loss_fcn.to(device) loss_fcn = loss_fcn.to(device)
optimizer = optim.Adam(model.parameters(), lr=lr) optimizer = optim.Adam(model.parameters(), lr=lr)
# dry run
for step, (input_nodes, pos_graph, neg_graph, blocks) in enumerate(dataloader):
# Load the input features as well as output labels
batch_inputs = load_subtensor(g, input_nodes, device)
pos_graph = pos_graph.to(device)
neg_graph = neg_graph.to(device)
blocks = [block.int().to(device) for block in blocks]
# Compute loss and prediction
batch_pred = model(blocks, batch_inputs)
loss = loss_fcn(batch_pred, pos_graph, neg_graph)
optimizer.zero_grad()
loss.backward()
optimizer.step()
if step >= 3:
break
# Training loop # Training loop
avg = 0 avg = 0
iter_tput = [] iter_tput = []
t0 = time.time()
for step, (input_nodes, pos_graph, neg_graph, blocks) in enumerate(dataloader): for step, (input_nodes, pos_graph, neg_graph, blocks) in enumerate(dataloader):
# Load the input features as well as output labels # Load the input features as well as output labels
batch_inputs = load_subtensor(g, input_nodes, device) batch_inputs = load_subtensor(g, input_nodes, device)
...@@ -177,9 +160,12 @@ def track_time(data, num_negs, batch_size): ...@@ -177,9 +160,12 @@ def track_time(data, num_negs, batch_size):
loss.backward() loss.backward()
optimizer.step() optimizer.step()
if step >= 9: # time 10 loops # start timer at before iter_start
if step == iter_start - 1:
t0 = time.time()
elif step == iter_count + iter_start - 1: # time iter_count iterations
break break
t1 = time.time() t1 = time.time()
return (t1 - t0) / (step + 1) return (t1 - t0) / iter_count
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment