|
- from icosagon.data import Data, \
- _equal
- from icosagon.trainprep import prepare_training, \
- TrainValTest
- from icosagon.model import Model
- from icosagon.trainloop import TrainLoop
- import torch
- import pytest
- import pdb
- import time
-
-
- def test_train_loop_01():
- d = Data()
- d.add_node_type('Dummy', 10)
- fam = d.add_relation_family('Dummy-Dummy', 0, 0, False)
- fam.add_relation_type('Dummy Rel', torch.rand(10, 10).round())
-
- prep_d = prepare_training(d, TrainValTest(.8, .1, .1))
-
- m = Model(prep_d)
-
- loop = TrainLoop(m)
-
- assert loop.model == m
- assert loop.lr == 0.001
- assert loop.loss == torch.nn.functional.binary_cross_entropy_with_logits
- assert loop.batch_size == 100
-
-
- def test_train_loop_02():
- d = Data()
- d.add_node_type('Dummy', 10)
- fam = d.add_relation_family('Dummy-Dummy', 0, 0, False)
- fam.add_relation_type('Dummy Rel', torch.rand(10, 10).round())
-
- prep_d = prepare_training(d, TrainValTest(.8, .1, .1))
-
- m = Model(prep_d)
-
- for prm in m.parameters():
- print(prm.shape, prm.is_leaf, prm.requires_grad)
-
- loop = TrainLoop(m)
-
- loop.run_epoch()
-
- for prm in m.parameters():
- print(prm.shape, prm.is_leaf, prm.requires_grad)
-
-
- def test_train_loop_03():
- # pdb.set_trace()
- if torch.cuda.device_count() == 0:
- pytest.skip('CUDA required for this test')
-
- adj_mat = torch.rand(10, 10).round()
- dev = torch.device('cuda:0')
- adj_mat = adj_mat.to(dev)
-
- d = Data()
- d.add_node_type('Dummy', 10)
- fam = d.add_relation_family('Dummy-Dummy', 0, 0, False)
- fam.add_relation_type('Dummy Rel', adj_mat)
-
- prep_d = prepare_training(d, TrainValTest(.8, .1, .1))
- # pdb.set_trace()
-
- m = Model(prep_d)
- m = m.to(dev)
-
- print(list(m.parameters()))
-
- for prm in m.parameters():
- assert prm.device == dev
-
- loop = TrainLoop(m)
-
- loop.run_epoch()
-
-
- def test_train_loop_04():
- adj_mat = torch.rand(10, 10).round()
-
- d = Data()
- d.add_node_type('Dummy', 10)
- fam = d.add_relation_family('Dummy-Dummy', 0, 0, False)
- fam.add_relation_type('Dummy Rel', adj_mat)
-
- prep_d = prepare_training(d, TrainValTest(.8, .1, .1))
-
- m = Model(prep_d)
-
- old_values = []
- for prm in m.parameters():
- old_values.append(prm.clone().detach())
-
- loop = TrainLoop(m)
-
- loop.run_epoch()
-
- for i, prm in enumerate(m.parameters()):
- assert not prm.requires_grad or \
- not torch.all(_equal(prm, old_values[i]))
-
-
- def test_train_loop_05():
- adj_mat = torch.rand(10, 10).round().to_sparse()
-
- d = Data()
- d.add_node_type('Dummy', 10)
- fam = d.add_relation_family('Dummy-Dummy', 0, 0, False)
- fam.add_relation_type('Dummy Rel', adj_mat)
-
- prep_d = prepare_training(d, TrainValTest(.8, .1, .1))
-
- m = Model(prep_d)
-
- old_values = []
- for prm in m.parameters():
- old_values.append(prm.clone().detach())
-
- loop = TrainLoop(m)
-
- loop.run_epoch()
-
- for i, prm in enumerate(m.parameters()):
- assert not prm.requires_grad or \
- not torch.all(_equal(prm, old_values[i]))
-
-
- def test_timing_01():
- adj_mat = (torch.rand(2000, 2000) < .001).to(torch.float32).to_sparse()
- rep = torch.eye(2000).requires_grad_(True)
- t = time.time()
- for _ in range(1300):
- _ = torch.sparse.mm(adj_mat, rep)
- print('Elapsed:', time.time() - t)
-
-
- def test_timing_02():
- adj_mat = (torch.rand(2000, 2000) < .001).to(torch.float32)
- adj_mat_batch = [adj_mat.view(1, 2000, 2000)] * 1300
- adj_mat_batch = torch.cat(adj_mat_batch)
- rep = torch.eye(2000).requires_grad_(True)
- t = time.time()
- res = torch.matmul(adj_mat_batch, rep)
- print('Elapsed:', time.time() - t)
- print('res.shape:', res.shape)
-
-
- def test_timing_03():
- adj_mat = (torch.rand(2000, 2000) < .001).to(torch.float32)
- adj_mat_batch = [adj_mat.view(1, 2000, 2000).to_sparse()] * 1300
- adj_mat_batch = torch.cat(adj_mat_batch)
- rep = torch.eye(2000).requires_grad_(True)
- rep_batch = [rep.view(1, 2000, 2000)] * 1300
- rep_batch = torch.cat(rep_batch)
- t = time.time()
- with pytest.raises(RuntimeError):
- _ = torch.bmm(adj_mat_batch, rep)
- print('Elapsed:', time.time() - t)
-
-
- def test_timing_04():
- adj_mat = (torch.rand(2000, 2000) < .0001).to(torch.float32).to_sparse()
- rep = torch.eye(2000).requires_grad_(True)
- t = time.time()
- for _ in range(1300):
- _ = torch.sparse.mm(adj_mat, rep)
- print('Elapsed:', time.time() - t)
-
-
- def test_timing_05():
- if torch.cuda.device_count() == 0:
- pytest.skip('Test requires CUDA')
- dev = torch.device('cuda:0')
- adj_mat = (torch.rand(2000, 2000) < .001).to(torch.float32).to_sparse().to(dev)
- rep = torch.eye(2000).requires_grad_(True).to(dev)
- t = time.time()
- for _ in range(1300):
- _ = torch.sparse.mm(adj_mat, rep)
- torch.cuda.synchronize()
- print('Elapsed:', time.time() - t)
|