in benchmarks/api/bench_feature.py [0:0]
def test_quiver_ogbnproducts(split_ratio):
import quiver
cache_size = str(950 * split_ratio) + 'M'
root = osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))),
'..', 'data', 'products')
dataset = PygNodePropPredDataset('ogbn-products', root)
train_idx = dataset.get_idx_split()["train"]
train_loader = torch.utils.data.DataLoader(train_idx,
batch_size=1024,
pin_memory=True,
shuffle=True)
csr_topo = quiver.CSRTopo(dataset[0].edge_index)
quiver_sampler = quiver.pyg.GraphSageSampler(csr_topo, [15, 10, 5],
device=0,
mode="GPU")
quiver_feature = quiver.Feature(rank=0,
device_list=[0],
device_cache_size=cache_size,
cache_policy="device_replicate",
csr_topo=csr_topo)
quiver_feature.from_cpu_tensor(dataset[0].x)
total_num = 0
total_time = 0
for seeds in train_loader:
nid, _, _ = quiver_sampler.sample(seeds)
torch.cuda.synchronize()
start = time.time()
res = quiver_feature[nid]
torch.cuda.synchronize()
total_time += time.time() - start
total_num += res.numel()
torch.cuda.synchronize()
print('Lookup {} ids, takes {} secs, Throughput {} GB/s.'\
.format(total_num, total_time, total_num * 4 / total_time/ (1024**3)))