dmlc--dgl
1b37545d79
* fix * fix * fix * fix * fix * 111 * fix * fix * fix * test * ff * fix * ff * fix * f * merge * fix
62 行
2.0 KiB
Python
62 行
2.0 KiB
Python
# Write the benchmarking functions here.
|
|
# See "Writing benchmarks" in the asv docs for more information.
|
|
|
|
import subprocess
|
|
import os
|
|
from pathlib import Path
|
|
import numpy as np
|
|
import tempfile
|
|
|
|
base_path = Path("~/regression/dgl/")
|
|
|
|
|
|
class GCNBenchmark:
|
|
|
|
params = [['pytorch'], ['cora', 'pubmed'], ['0', '-1']]
|
|
param_names = ['backend', 'dataset', 'gpu_id']
|
|
timeout = 120
|
|
|
|
def __init__(self):
|
|
self.std_log = {}
|
|
|
|
def setup(self, backend, dataset, gpu_id):
|
|
key_name = "{}_{}_{}".format(backend, dataset, gpu_id)
|
|
if key_name in self.std_log:
|
|
return
|
|
gcn_path = base_path / "examples/{}/gcn/train.py".format(backend)
|
|
bashCommand = "/opt/conda/envs/{}-ci/bin/python {} --dataset {} --gpu {} --n-epochs 50".format(
|
|
backend, gcn_path.expanduser(), dataset, gpu_id)
|
|
process = subprocess.Popen(bashCommand.split(), stdout=subprocess.PIPE,env=dict(os.environ, DGLBACKEND=backend))
|
|
output, error = process.communicate()
|
|
print(str(error))
|
|
self.std_log[key_name] = str(output)
|
|
|
|
|
|
def track_gcn_time(self, backend, dataset, gpu_id):
|
|
key_name = "{}_{}_{}".format(backend, dataset, gpu_id)
|
|
lines = self.std_log[key_name].split("\\n")
|
|
|
|
time_list = []
|
|
for line in lines:
|
|
# print(line)
|
|
if 'Time' in line:
|
|
time_str = line.strip().split('|')[1]
|
|
time = float(time_str.split()[-1])
|
|
time_list.append(time)
|
|
return np.array(time_list)[-10:].mean()
|
|
|
|
def track_gcn_accuracy(self, backend, dataset, gpu_id):
|
|
key_name = "{}_{}_{}".format(backend, dataset, gpu_id)
|
|
lines = self.std_log[key_name].split("\\n")
|
|
|
|
test_acc = -1
|
|
for line in lines:
|
|
if 'Test accuracy' in line:
|
|
test_acc = float(line.split()[-1][:-1])
|
|
print(test_acc)
|
|
return test_acc
|
|
|
|
|
|
GCNBenchmark.track_gcn_time.unit = 's'
|
|
GCNBenchmark.track_gcn_accuracy.unit = '%'
|