From 1c6c3e71660d8bf98223bd6f7569b81c79291289 Mon Sep 17 00:00:00 2001 From: D-X-Y <280835372@qq.com> Date: Wed, 19 May 2021 08:10:42 +0000 Subject: [PATCH] Refine lib -> xautodl --- .github/workflows/super_model_test.yml | 5 ++++ exps/KD-main.py | 2 +- exps/NATS-Bench/main-sss.py | 2 +- exps/NATS-Bench/main-tss.py | 4 +-- exps/NATS-algos/reinforce.py | 2 +- exps/NATS-algos/search-size.py | 2 +- exps/basic-main.py | 21 ++++++-------- exps/search-shape.py | 20 +++++-------- tests/test_loader.py | 29 +++++++++++++++++++ tests/test_tas.py | 23 +++++++++++++++ .../generic_size_tiny_cell_model.py | 6 ++-- xautodl/models/shape_searchs/test.py | 20 ------------- 12 files changed, 83 insertions(+), 53 deletions(-) create mode 100644 tests/test_loader.py create mode 100644 tests/test_tas.py delete mode 100644 xautodl/models/shape_searchs/test.py diff --git a/.github/workflows/super_model_test.yml b/.github/workflows/super_model_test.yml index cc5e735..b94440f 100644 --- a/.github/workflows/super_model_test.yml +++ b/.github/workflows/super_model_test.yml @@ -35,3 +35,8 @@ jobs: python -m pip install torch torchvision python -m pytest ./tests/test_super_*.py shell: bash + + - name: Test TAS (NeurIPS 2019) + run: | + python -m pytest ./tests/test_tas.py + shell: bash diff --git a/exps/KD-main.py b/exps/KD-main.py index abfd538..f414f44 100644 --- a/exps/KD-main.py +++ b/exps/KD-main.py @@ -25,7 +25,7 @@ def main(args): torch.backends.cudnn.enabled = True torch.backends.cudnn.benchmark = True # torch.backends.cudnn.deterministic = True - torch.set_num_threads(args.workers) + # torch.set_num_threads(args.workers) prepare_seed(args.rand_seed) logger = prepare_logger(args) diff --git a/exps/NATS-Bench/main-sss.py b/exps/NATS-Bench/main-sss.py index 66a693d..aac422f 100644 --- a/exps/NATS-Bench/main-sss.py +++ b/exps/NATS-Bench/main-sss.py @@ -470,7 +470,7 @@ if __name__ == "__main__": assert torch.cuda.is_available(), "CUDA is not available." torch.backends.cudnn.enabled = True torch.backends.cudnn.deterministic = True - torch.set_num_threads(args.workers) + # torch.set_num_threads(args.workers) main( save_dir, diff --git a/exps/NATS-Bench/main-tss.py b/exps/NATS-Bench/main-tss.py index dd5ec15..205be39 100644 --- a/exps/NATS-Bench/main-tss.py +++ b/exps/NATS-Bench/main-tss.py @@ -340,7 +340,7 @@ def train_single_model( torch.backends.cudnn.enabled = True torch.backends.cudnn.deterministic = True # torch.backends.cudnn.benchmark = True - torch.set_num_threads(workers) + # torch.set_num_threads(workers) save_dir = ( Path(save_dir) @@ -675,7 +675,7 @@ if __name__ == "__main__": assert torch.cuda.is_available(), "CUDA is not available." torch.backends.cudnn.enabled = True torch.backends.cudnn.deterministic = True - torch.set_num_threads(args.workers if args.workers > 0 else 1) + # torch.set_num_threads(args.workers if args.workers > 0 else 1) main( save_dir, diff --git a/exps/NATS-algos/reinforce.py b/exps/NATS-algos/reinforce.py index b6505e7..7299c21 100644 --- a/exps/NATS-algos/reinforce.py +++ b/exps/NATS-algos/reinforce.py @@ -132,7 +132,7 @@ def select_action(policy): def main(xargs, api): - torch.set_num_threads(4) + # torch.set_num_threads(4) prepare_seed(xargs.rand_seed) logger = prepare_logger(args) diff --git a/exps/NATS-algos/search-size.py b/exps/NATS-algos/search-size.py index c24db9d..7bfa33f 100644 --- a/exps/NATS-algos/search-size.py +++ b/exps/NATS-algos/search-size.py @@ -204,7 +204,7 @@ def main(xargs): torch.backends.cudnn.enabled = True torch.backends.cudnn.benchmark = False torch.backends.cudnn.deterministic = True - torch.set_num_threads(xargs.workers) + # torch.set_num_threads(xargs.workers) prepare_seed(xargs.rand_seed) logger = prepare_logger(args) diff --git a/exps/basic-main.py b/exps/basic-main.py index cc3b6d3..b6d896a 100644 --- a/exps/basic-main.py +++ b/exps/basic-main.py @@ -8,17 +8,14 @@ ImageFile.LOAD_TRUNCATED_IMAGES = True from copy import deepcopy from pathlib import Path -lib_dir = (Path(__file__).parent / ".." / "lib").resolve() -if str(lib_dir) not in sys.path: - sys.path.insert(0, str(lib_dir)) -from config_utils import load_config, obtain_basic_args as obtain_args -from procedures import prepare_seed, prepare_logger, save_checkpoint, copy_checkpoint -from procedures import get_optim_scheduler, get_procedures -from datasets import get_datasets -from models import obtain_model -from nas_infer_model import obtain_nas_infer_model -from utils import get_model_infos -from log_utils import AverageMeter, time_string, convert_secs2time +from xautodl.datasets import get_datasets +from xautodl.config_utils import load_config, obtain_basic_args as obtain_args +from xautodl.procedures import prepare_seed, prepare_logger, save_checkpoint, copy_checkpoint +from xautodl.procedures import get_optim_scheduler, get_procedures +from xautodl.models import obtain_model +from xautodl.nas_infer_model import obtain_nas_infer_model +from xautodl.utils import get_model_infos +from xautodl.log_utils import AverageMeter, time_string, convert_secs2time def main(args): @@ -26,7 +23,7 @@ def main(args): torch.backends.cudnn.enabled = True torch.backends.cudnn.benchmark = True # torch.backends.cudnn.deterministic = True - torch.set_num_threads(args.workers) + # torch.set_num_threads(args.workers) prepare_seed(args.rand_seed) logger = prepare_logger(args) diff --git a/exps/search-shape.py b/exps/search-shape.py index 2511752..301d7db 100644 --- a/exps/search-shape.py +++ b/exps/search-shape.py @@ -10,21 +10,17 @@ import numpy as np from copy import deepcopy from pathlib import Path -lib_dir = (Path(__file__).parent / ".." / "lib").resolve() -print("lib_dir : {:}".format(lib_dir)) -if str(lib_dir) not in sys.path: - sys.path.insert(0, str(lib_dir)) -from config_utils import ( +from xautodl.config_utils import ( load_config, configure2str, obtain_search_single_args as obtain_args, ) -from procedures import prepare_seed, prepare_logger, save_checkpoint, copy_checkpoint -from procedures import get_optim_scheduler, get_procedures -from datasets import get_datasets, SearchDataset -from models import obtain_search_model, obtain_model, change_key -from utils import get_model_infos -from log_utils import AverageMeter, time_string, convert_secs2time +from xautodl.procedures import prepare_seed, prepare_logger, save_checkpoint, copy_checkpoint +from xautodl.procedures import get_optim_scheduler, get_procedures +from xautodl.datasets import get_datasets, SearchDataset +from xautodl.models import obtain_search_model, obtain_model, change_key +from xautodl.utils import get_model_infos +from xautodl.log_utils import AverageMeter, time_string, convert_secs2time def main(args): @@ -32,7 +28,7 @@ def main(args): torch.backends.cudnn.enabled = True torch.backends.cudnn.benchmark = True # torch.backends.cudnn.deterministic = True - torch.set_num_threads(args.workers) + # torch.set_num_threads(args.workers) prepare_seed(args.rand_seed) logger = prepare_logger(args) diff --git a/tests/test_loader.py b/tests/test_loader.py new file mode 100644 index 0000000..fd3a4a0 --- /dev/null +++ b/tests/test_loader.py @@ -0,0 +1,29 @@ +##################################################### +# Copyright (c) Xuanyi Dong [GitHub D-X-Y], 2021.03 # +##################################################### +# pytest tests/test_loader.py -s # +##################################################### +import unittest +import tempfile +import torch + +from xautodl.datasets import get_datasets + + +def test_simple(): + xdir = tempfile.mkdtemp() + train_data, valid_data, xshape, class_num = get_datasets("cifar10", xdir, -1) + print(train_data) + print(valid_data) + + xloader = torch.utils.data.DataLoader( + train_data, batch_size=256, shuffle=True, num_workers=4, pin_memory=True + ) + print(xloader) + print(next(iter(xloader))) + + for i, data in enumerate(xloader): + print(i) + + +test_simple() diff --git a/tests/test_tas.py b/tests/test_tas.py new file mode 100644 index 0000000..bb46313 --- /dev/null +++ b/tests/test_tas.py @@ -0,0 +1,23 @@ +################################################## +# Copyright (c) Xuanyi Dong [GitHub D-X-Y], 2019 # +################################################## +import torch +import torch.nn as nn + +from xautodl.models.shape_searchs.SoftSelect import ChannelWiseInter + + +class TestTASFunc(unittest.TestCase): + """Test the TAS function.""" + + def test_channel_interplation(self): + tensors = torch.rand((16, 128, 7, 7)) + + for oc in range(200, 210): + out_v1 = ChannelWiseInter(tensors, oc, "v1") + out_v2 = ChannelWiseInter(tensors, oc, "v2") + assert (out_v1 == out_v2).any().item() == 1 + for oc in range(48, 160): + out_v1 = ChannelWiseInter(tensors, oc, "v1") + out_v2 = ChannelWiseInter(tensors, oc, "v2") + assert (out_v1 == out_v2).any().item() == 1 diff --git a/xautodl/models/shape_searchs/generic_size_tiny_cell_model.py b/xautodl/models/shape_searchs/generic_size_tiny_cell_model.py index 3a3a354..1816c5b 100644 --- a/xautodl/models/shape_searchs/generic_size_tiny_cell_model.py +++ b/xautodl/models/shape_searchs/generic_size_tiny_cell_model.py @@ -9,9 +9,9 @@ from typing import List, Text, Any import random, torch import torch.nn as nn -from models.cell_operations import ResNetBasicblock -from models.cell_infers.cells import InferCell -from models.shape_searchs.SoftSelect import select2withP, ChannelWiseInter +from ..cell_operations import ResNetBasicblock +from ..cell_infers.cells import InferCell +from .shape_searchs.SoftSelect import select2withP, ChannelWiseInter class GenericNAS301Model(nn.Module): diff --git a/xautodl/models/shape_searchs/test.py b/xautodl/models/shape_searchs/test.py deleted file mode 100644 index 5bcf46e..0000000 --- a/xautodl/models/shape_searchs/test.py +++ /dev/null @@ -1,20 +0,0 @@ -################################################## -# Copyright (c) Xuanyi Dong [GitHub D-X-Y], 2019 # -################################################## -import torch -import torch.nn as nn -from SoftSelect import ChannelWiseInter - - -if __name__ == "__main__": - - tensors = torch.rand((16, 128, 7, 7)) - - for oc in range(200, 210): - out_v1 = ChannelWiseInter(tensors, oc, "v1") - out_v2 = ChannelWiseInter(tensors, oc, "v2") - assert (out_v1 == out_v2).any().item() == 1 - for oc in range(48, 160): - out_v1 = ChannelWiseInter(tensors, oc, "v1") - out_v2 = ChannelWiseInter(tensors, oc, "v2") - assert (out_v1 == out_v2).any().item() == 1